A code you can hear, for the users SMS misses.

Voice verification places a call and reads the one-time code aloud: for landlines, for users who can't receive SMS, and as the fallback when a text doesn't arrive. It's rolling out as an orderable channel in the same per-country plan, addressed by the same phone number and confirmed by the same check.

verify.ts
200 · pending
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
});

// Send the code, then check it by recipient.
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
}).safe();

const { data, error } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: userInput,
}).safe();
if (error) throw error;
Verification flow

Your account

Confirm it’s you.

Enter the code sent to

+1 ••• ••• 4567

Example verification code

482691
Code verified
Send a code. Confirm the recipient.

The channel that reaches users when text can't.

Voice is a phone-family channel on the Bird Verify API: the recipient is the same phone number, and voice becomes an orderable entry in the per-country plan, typically the fallback after SMS. Landline-only users, accessibility needs, and markets where SMS underdelivers are exactly where a spoken code earns its place.

What voice verification adds.

Rolling out as a channel in the existing plan.

  1. 01

    Spoken, synthesized code.

    The code is read aloud on a call, so a user who can't read a text, or doesn't have one, can still verify.

  2. 02

    Reaches landlines.

    Voice works on lines that never receive SMS, widening who you can verify without a separate integration.

  3. 03

    A natural SMS fallback.

    Order voice after SMS in the channel plan so that, as delivery-driven advancement rolls out, the session moves on to a call when the text doesn't land.

  4. 04

    Same recipient, same calls.

    Address the same phone number and call the same create and check endpoints. Voice is the channel, not a different API.

  5. 05

    The same code guarantees.

    Server-generated, hashed codes; configurable length and TTL; check by recipient, with every guarantee the other channels carry.

Voice is an entry in the plan.

Once voice ships, it slots into the plan the same way any other channel does, and the create call stays the same. As delivery-driven advancement rolls out, the session moves to voice when the channel ahead of it doesn't complete.

voice-otp.ts
rolling out
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
}).safe();

// resolved channels today: [{ channel: "sms" }] — voice joins as it rolls out

How the fallback works.

Order SMS first and voice second, and a single verification works the plan in order. SMS is attempted; if it doesn't arrive, the session moves to a voice call that reads the code aloud, and every code in the session stays valid so the user can use whichever reaches them. That advancement is automatic on the channels that ship today: a failed channel moves the session on, and a per-attempt delivery timer moves it when no delivery status arrives. Voice joins the plan as an orderable channel when it lands.

Scale without
losing control.

Organize teams in workspaces, control API access, and trace changes through audit logs.

BirdHarborOrganization
WorkspacesProductionSandbox

Delivery agent

API key · Customer operations team
Active
PermissionsAccess
EmailRead & write
SMSRead & write
ALAlex Lee AdminPermissions updated

Audit log

Production
Workspace
Production
Resource
Delivery agent
WhatsApp
Read accessRead & write
Succeeded

Start with Verify.
Build across channels with Bird.

Your next idea. Ready to connect.