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.
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.
- 01
Authentication-template delivery.
Codes go as WhatsApp authentication-template messages — the format the platform reserves for one-time passcodes.
- 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.
- 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.
- 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.
- 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.
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?+
Why verify over WhatsApp instead of SMS?+
What happens if the user isn't on WhatsApp?+
Who do my users see the code from?+
The rest of the Verify platform
One API, one set of keys. Explore the other capabilities.
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.