Deliver spoken one-time passcodes over automated phone calls.
Verify users who cannot receive text messages by placing an automated phone call that reads their one-time passcode aloud. Reach landline numbers, support screen-free accessibility, and give delayed SMS or WhatsApp verifications a reliable voice backup without building text-to-speech prompts or telephony call flows.
verify.ts
200 · pendingimport { 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;
Your account
Confirm it’s you.
Enter the code sent to
+1 ••• ••• 4567
verify.ts
200 · pendingimport { 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;
Your account
Confirm it’s you.
Enter the code sent to
+1 ••• ••• 4567
verify.ts
200 · pendingimport { 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;
Your account
Confirm it’s you.
Enter the code sent to
+1 ••• ••• 4567
Add voice call verification without building telephony flows.
Adding voice verification in-house means provisioning outbound phone numbers, scripting text-to-speech call flows that pace digits clearly, and stitching call state into the same OTP tables as your text messages. With the Bird Verify API, voice runs on the same phone number and verification session as SMS and WhatsApp. Enable voice for the countries where you want spoken passcodes, and Bird dials from a phone number selected for the destination, reads the digits aloud in clear groups of three, repeats the code before hanging up, and validates the user's input through the same check endpoint.
How voice calls rescue signups and logins that text messages miss.
Spoken passcodes, landline reach, and channel fallback built into your existing verification flow.
- 01
Read passcodes aloud with clear pacing and repetition.
Place an automated call that announces the verification code in groups of three digits and repeats it before hanging up, giving users with visual impairments or screen-free setups plenty of time to enter the code.
- 02
Verify landline and fixed-line phone numbers.
Confirm home phones, office desk phones, and voice-capable numbers that cannot receive SMS or install messaging apps, expanding who can sign up or complete two-factor checks.
- 03
Fall back to a phone call when SMS or WhatsApp fails.
Place voice after SMS or WhatsApp in your country routing rules so a carrier rejection, delivery timeout, or user-triggered channel switch starts a phone call within the same verification session.
- 04
Use the same send and check endpoints.
Pass the user's E.164 phone number to start the verification and confirm the digits they submit against that same number. You do not need a separate voice SDK, call webhook handler, or verification ID in session storage.
- 05
Keep hashed codes, attempt limits, and pay-on-answer billing.
Codes are hashed at rest and protected by configurable expiration windows, attempt limits, and per-recipient send caps. Unanswered calls cost nothing, and answered calls bill at the destination's outbound voice rate with no extra Verify fee.
Trigger voice verification from the same phone number request.
Start a verification by passing the user's phone number. When voice is enabled in your country routing rules, Bird resolves the channel plan automatically and dials the recipient when voice is up next, without requiring channel-specific parameters in your application code.
await bird.verify.verifications.create({
to: { phone_number: "+15551234567" },
}).safe();
// resolved channels today: [{ channel: "sms" }] — voice joins as it rolls out
Switch from a delayed text to a phone call without resetting the session.
Put SMS or WhatsApp first and voice second in your country routing plan so a single verification session handles the backup path. If the initial message fails, times out without a delivery receipt, or prompts the user to click “Call me instead,” Bird places a voice call and reads a fresh passcode aloud. Earlier codes remain valid until the original expiration window closes, so a delayed text that arrives during the call still verifies the user cleanly.
Build it on the Verify platform
Multi-channel delivery, fallback routing, and abuse controls built on the same API.
Scale without
losing control.
Organize teams in workspaces, control API access, and trace changes through audit logs.
Organization
Harbor
Access stays in its workspace.
Production/API keys
Signup service
ActiveAlex Lee
Admin
Today · UTC
Audit log
Organization
Harbor
Access stays in its workspace.
Production/API keys
Signup service
ActiveAlex Lee
Admin
Today · UTC
Audit log
Organization
Harbor
Access stays in its workspace.
Production/API keys
Signup service
ActiveAlex Lee
Admin
Today · UTC
Audit log