A simpler way to begin.
Connect a verification to the account or session your customer is creating.
Help customers sign in or confirm a phone number or email address with a one-time code. Send the code through the channel that fits, then check it before continuing.
We’ll send a code to your chosen destination.
Continue with the next available channel in the policy.
The code matched. Your application decides whether to authorise the action.
Example content and data. Explore the workflow below; nothing is sent or changed in a live account.
Companies that trust Bird across their communications.
Read Bird customer storiesThe maintained first-customer guide demonstrates create and check with recipient binding. It distinguishes delivery, an unsuccessful check and successful verification. Your application decides the authorized account action.
Read the integration example ↗Sources checked 18 September 2026. This illustration is not a live send or measured completion study. Current account and channel eligibility still apply.Complete a successful code check in this example, then explore expiry, incorrect codes and another channel.
Example pending. Check 246810, or try 000000. No code is sent.Read the result and next step ↗
Illustrative sms code 246810. Original expiry: 12:10 UTC. Delivery does not replace a code check.
Example pending. Check 246810, or try 000000. No code is sent.
pending · 5 wrong checks left · 0 minutes elapsed · original expiry 12:10 UTC
Illustrative response observation; not a wire error envelope.
create: HTTP 200
{
"id": "vrf_example",
"status": "pending",
"reason": null,
"to": {
"phone_number": "+12025550142"
},
"channels": [
{
"channel": "sms"
}
],
"last_channel": "sms",
"expires_at": "2026-09-18T12:10:00.000Z",
"verified_at": null,
"created_at": "2026-09-18T12:00:00.000Z",
"updated_at": "2026-09-18T12:00:00.000Z"
}
Application record: pending action; no authorizationIllustrative choices: six digits, ten-minute lifetime, five wrong checks, 60-second resend cooldown. Actual configuration can differ. Resend keeps the original deadline and remaining check budget. Post-cooldown resends consume the recipient’s send cap; check-rate limits apply separately. Follow retry guidance after a 429.
Make verification a clear moment inside signup, recovery, or checkout. Give customers an understandable path forward, including when they need to try again.
Connect a verification to the account or session your customer is creating.
Keep the pending recovery action and recipient together while your customer completes the check.
Use the result in your application’s access or risk policy before completing the protected action.
Bind the same full recipient set to the pending action. Keep expiry, attempts and your application authorization separate.
Build your first verification ↗Resolve actual country/channel eligibility. Voice OTP requires rollout confirmation; a channel name does not establish access.
Plan the channel policy ↗Two server-side excerpts: send in one request, then check in a later request after the customer enters the code. No code is sent from this page. Use your own phone number and keep the full recipient set bound to the application’s pending action. The SDK throws on API errors; HTTP 200 can still be success: false. Handle expiry, exhausted attempts, 422, 429 and uncertain responses; preserve known success across a later 404. A code match does not authorize the application action. Follow the integration guide for complete setup and error handling.
Create a verification and check the entered passcode with CLI or MCP. Inspect the success field before your application decides whether to continue.
Open the implementation guide →TypeScript// Send request: bind this recipient to the application's pending action.
const to = { phone_number: "+15551234567" };
const verification = await bird.verify.verifications.create({ to });
console.log(verification.status, verification.expires_at);
// Later check request: restore the same recipient and read the submitted code.
const result = await bird.verify.verifications.check({ to, code });
if (result.success) {
console.log("Code matched; the application must still authorize the action.");
} else {
console.log(result.reason, result.attempts_remaining);
}
Once a customer completes verification, use Email for onboarding and SMS or WhatsApp for the moments that follow. Start with one product and build on the same platform.
Inspect the address or number as useful evidence.
Check control of the destination before your app authorizes signup.
Hi Alex,Send a welcome after the account is created.
A practical path through setup, implementation, and the choices that matter.
Read the field guide →Quickstarts, implementation guides, comparisons and migration.
Create and check a verification.
Understand policy, channel order, and moving to the next channel.
Incorrect, expired, and exhausted attempts.
Understand the attempts and channels you pay for.
Bind the action, protect credentials, and handle retries.
Prepare the recipient, sender, channel and recovery checks.
Verify access to a mailbox; address quality is separate.
Check phone eligibility, code entry and attempts.
Explore eligible authentication and configured fallback.
Confirm access before a spoken-code evaluation.
Work through recipient binding, uncertain results and application authorization with a reusable implementation record.
No separate Verify or check fee is advertised. Delivering channels own usage charges; include extra resends and fallback attempts in the actual account and destination rates.
See Verify pricing ↗Plan the delivery path and retry policy.
Verify supports email, SMS, WhatsApp and Telegram under the recipient and country channel plan. Confirm current channel eligibility. Voice verification still requires separate rollout confirmation before including it in your implementation.
Bird handles code generation and checking. Your server requests verification and validates the code before it changes account or application state.
No. Your application must check the verification result and bind it to the intended recipient and pending action.
Treat the verification as unusable and follow your application policy for restarting. Handle the returned reason; do not accept an old code because delivery succeeded.
Start with a Bird account and follow the setup path on this page. Our sales team can help with migration, volume, or a wider product mix. Start now or talk to sales.
Una chiave API di test è subito tua. La produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.
Leggi la documentazione