WhatsApp OTP

In preview

One-time codes, on WhatsApp.

Set up in:
Cursor

WhatsApp verification sends the code as an authentication-template message to a user's WhatsApp account — rich, Authifly-branded, and delivered in an app they already use. It's an orderable channel in the same per-country plan, so a verification can lead with WhatsApp and keep SMS in reserve.

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 } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: userInput,
}).safe();

A channel in the plan, not a new integration.

WhatsApp is a phone-family channel on the Bird Verify API: the recipient is the same phone number, the create and check calls are unchanged, and WhatsApp simply becomes an orderable entry in the per-country channel plan. You order it ahead of SMS where it converts, with SMS next in the plan everywhere else.

What WhatsApp verification adds.

An orderable channel in the per-country plan.

  1. 01

    Authentication-template delivery.

    Codes go as WhatsApp authentication-template messages — the format the platform reserves for one-time passcodes.

  2. 02

    Same recipient, same calls.

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

  3. 03

    Orderable per country.

    Put WhatsApp ahead of SMS in the channel plan for the countries where it lands best, and let the rest stay SMS-first.

  4. 04

    SMS stays in reserve.

    A phone target carries its whole phone-family plan, so SMS sits next in line behind WhatsApp. As delivery-driven advancement rolls out, a WhatsApp-first verification moves on to SMS in the same session.

  5. 05

    The same code guarantees.

    Codes generated with a cryptographic random source and stored only as an HMAC; configurable length and TTL; check by recipient. WhatsApp inherits every guarantee the other channels have.

Lead with WhatsApp, keep SMS next in line.

The channel order lives on the configuration, so choosing WhatsApp first is a config change, not a code change. The create call stays the same.

whatsapp-otp.ts
200
await bird.verify.verifications.create({
  configuration_id: "vfc_login",
  to: { phone_number: "+15551234567" },
}).safe();

// resolved channels: [{ channel: "whatsapp" }, { channel: "sms" }]

WhatsApp OTP FAQ

Is WhatsApp verification available today?+
Yes. WhatsApp ships as a launch channel alongside email and SMS — an orderable entry in the per-country plan, with no change to the create or check calls. Voice is the channel still rolling out.
Why verify over WhatsApp instead of SMS?+
WhatsApp authentication-template messages are branded and arrive in an app many users already keep open. In markets with heavy WhatsApp use, ordering it ahead of SMS lets you meet people on the channel they prefer, with SMS still in reserve.
What happens if the user isn't on WhatsApp?+
A phone target carries its whole phone-family channel plan, so SMS sits next in line behind WhatsApp. As delivery-driven advancement rolls out, a WhatsApp-first verification moves on to SMS in the same session, and every code in that session stays valid until it verifies, expires, or runs out of attempts.
Who do my users see the code from?+
Authifly, Bird's verification brand. It's the identity on every code your users receive: email arrives from otp@verify.authifly.com or your own verified domain, and SMS and WhatsApp are Authifly-branded. authifly.com is a public page that reassures recipients Authifly sends legitimate one-time codes on a business's behalf. Bird is the platform you build on; Authifly is what the recipient sees.

One verification API, every channel your users reach for.

WhatsApp joins email and SMS as a channel in the same per-country plan — ordered the way that converts, on the same two endpoints.

Start with one channel.
Add the others when you're ready.

A test API key is yours immediately. Production unlocks when you add a payment method and verify a sender.

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours:

Cursor