Bird Verify

De verificatie-API zonder iets op te slaan.

Verstuur een eenmalige code via e-mail, SMS of WhatsApp en controleer deze op basis van de ontvanger, zonder een verificatie-ID te hoeven bewaren tussen de twee calls. De kanaalvolgorde, afzender en coderegels worden automatisch per land bepaald. Dezelfde authenticatie en idempotentie als elk ander Bird-kanaal, omdat hetzelfde team ze allemaal heeft gebouwd. Voice wordt binnenkort uitgerold.

Cursor
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.

Dagelijks vertrouwd door teams die wereldklasse software bouwen

Lees meer klantverhalen

Twee aanroepen van npm install tot een geverifieerde gebruiker

Verstuur een code en controleer deze, in de taal die u al gebruikt.

Create-or-retry verstuurt de code; check bevestigt deze op basis van ontvanger. Twee calls, zonder verificatie-id om ertussen door te geven.

1
2
3
4
const verification = await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
});
console.log(verification.id, verification.status);

Tien dingen die u niet hoeft te bouwen wanneer verificatie de API is.

Concrete primitieven, benoemd en configureerbaar. Geen vaag handgezwaai.

  1. 01

    Aanmaken of opnieuw proberen in één call.

    Post dezelfde ontvanger opnieuw en we hervatten de actieve sessie en versturen opnieuw zodra de cooldown verstreken is. Geen apart resend-endpoint, geen dubbele verificaties.

  2. 02

    Controleer op basis van ontvanger. Sla niets op.

    Dien de ontvanger en de code in; wij bepalen de sessie op basis van het configuratie-en-ontvangerpaar. Er is geen verificatie-id om te bewaren tussen verzenden en controleren.

  3. 03

    E-mail, SMS en WhatsApp bij lancering.

    The recipient you pass picks the channel: an email address verifies by email, a phone number by SMS or WhatsApp. Switching channels is a one-field change, not a new integration. Delivery failure can advance the verification to the next available channel. Voice is rolling out next.

  4. 04

    Kanaalvolgorde per land, automatisch bepaald.

    Kanaalvolgorde, afzender en welke kanalen actief zijn, verschillen per land. Bird's landenspecifieke basis bepaalt dit, zodat een create-call overal automatisch het juiste plan oplevert.

  5. 05

    Codes die u nooit ziet.

    Gegenereerd met een cryptografische willekeurige bron, alleen opgeslagen als HMAC, vergeleken in constante tijd. De code in platte tekst raakt nooit uw stack of onze logs.

  6. 06

    Configureerbare code, TTL, pogingen.

    Six-digit default, 4–8 configurable per request; a 10-minute window; 5 attempts; a 60-second resend cooldown.

  7. 07

    Elke code blijft geldig tot de sessie eindigt.

    Een vertraagd bericht en een opnieuw verzonden code verifiëren allebei, omdat we de eerdere code niet ongeldig maken wanneer er een nieuwe wordt verzonden.

  8. 08

    Een verkeerde code is een 200, geen uitzondering.

    Controleer antwoorden met een booleaans resultaat — is deze code geverifieerd, ja of nee — en een reden die verduidelijkt wanneer dat niet het geval was: ongeldig, verlopen, al geverifieerd of geen pogingen meer. U vertakt op een veld, nooit op een gegooide fout.

  9. 09

    Rate limits ingebouwd.

    Verzendlimieten per ontvanger en een raadlimiet per verificatie — elk een 429 met Retry-After — zodat brute force eerder opraakt dan u.

  10. 10

    Hetzelfde contract als de rest van Bird.

    Bearer-auth, een idempotency key, getypte vrf_-id's, één fout-envelope. De handler die u voor e-mail schreef, past al op verificatie.

Sla niets op tussen verzenden en controleren.

De meeste verificatie-API's geven u een id om op te slaan, op te zoeken en de code tegen te verifiëren. Bird herkent de sessie op basis van de ontvanger, dus er is geen verificatiestatus aan uw kant.

De meeste verificatie-API's

Create retourneert een id dat u opslaat, waarna u de verificatie opzoekt om de code te controleren.

id-keyed.ts
const { id } = await api.verifications.create({
  to: "+15551234567",
});
// persist id somewhere, then later…
await api.verifications.check({ id, code });

Bird Verify

Controleer op basis van ontvanger. Er is niets om tussen de twee calls door te geven.

by-target.ts
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
}).safe();
// no id to store; check by the same recipient
await bird.verify.verifications.check({
  to: { phone_number: "+15551234567" }, code,
}).safe();

Routering kent het land al.

Kanaalvolgorde, afzenders en welke kanalen actief zijn, verschillen per land: WhatsApp-eerst in de ene markt, alleen SMS in een andere. Bird's landenspecifieke basis bepaalt dit, zodat een create-call automatisch het juiste plan oplevert. Zie kanaalorkestratie.

per-country.ts
200
// Brazil already resolves WhatsApp, then SMS.
const { data, error } = await bird.verify.verifications.create({
  to: { phone_number: "+5511998765432" },
}).safe();
if (error) throw error;

Verificatie is ook een productbeslissing: dezelfde API ondersteunt tweefactorauthenticatie en wachtwoordloze login. Eerst een nummer valideren? Combineer het met Lookup. Stille netwerkauthenticatie en TOTP-authenticator-apps staan op de roadmap.

Waarom we Verify bouwen

Omdat de code die een gebruiker binnenlaat geen eigen databasetabel nodig zou moeten hebben.

OTP is het kanaal waar een code die niet aankomt een registratie is die niet plaatsvindt. Bird draait al e-mail en SMS op schaal, dus Verify is die bezorging plus de codegeneratie, de sessie, het kanaalplan per land en de rate limits — achter twee endpoints die niets aan uw kant opslaan en antwoorden in dezelfde structuur als elk ander Bird-kanaal.

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;

Als u SMS hebt geïntegreerd, hebt u Verify geïntegreerd.

Hetzelfde auth-model, hetzelfde idempotency-contract, dezelfde error-envelope. Het verschil is dat Verify de code genereert, het kanaal kiest en de rate limits afhandelt — zodat u dat niet hoeft te doen.

Verify

Eén aanroep verstuurt de code; één aanroep controleert deze per ontvanger. Wij beheren de code, de sessie en de limieten.

verify.ts
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
});

SMS

De directe verzending, voor wanneer u de codegeneratie en het herhaalpbeleid zelf wilt beheren.

notify.ts
await bird.sms.send({
  from:     "Bird",
  to:       "+15551234567",
  text:     `Your code is ${code}.`,
  category: "authentication",
});

Kies de afzender die uw gebruikers zien

Codes worden standaard verzonden onder Bird Verify, zonder dat registratie of template-configuratie in de weg staat. Schakel een kanaal over naar Authifly en uw gebruikers zien een neutrale verificatie-identiteit in plaats van een platformleverancier: de OTP-e-mail komt van otp@verify.authifly.com en SMS toont de Authifly-afzender waar het bestemmingsland een branded afzender toestaat. Bird beheert beide identiteiten, dus de keuze kost u niets extra, en u maakt die keuze per kanaal en per land. Bij e-mail kunt u nog een stap verder gaan en verzenden vanaf een domein dat u zelf hebt geverifieerd. Als een ontvanger een onverwachte code krijgt, stelt authifly.com hen gerust dat Authifly legitieme eenmalige codes verstuurt namens een bedrijf. Authifly wordt beheerd door Bird B.V.

Bezoek authifly.com

Verstuur je eerste verzoek voordat je code schrijft.

De volledige openbare API is een Postman-collectie, gegenereerd uit dezelfde OpenAPI-specificatie als de SDK's, met een voorbeeldverzoek en -antwoord op elk endpoint. Fork de collectie naar je eigen werkruimte, stel een API-sleutel in en verstuur een live verzoek.

Verificatie op hetzelfde platform als de rest van uw berichtenverkeer.

Begin vandaag nog met bouwen, of praat met ons over de kanalen, volumes en prijzen die u nodig heeft.

Je gegevens

Alle contactvelden zijn verplicht.

Zodat ons team contact met je kan opnemen over je demo.

Producten van interesse

Optioneel

We nemen contact met je op om je demo in te plannen.
Privacybeleid

Begin met één kanaal.
Voeg de rest toe wanneer je er klaar voor bent.

Een test-API-key is direct beschikbaar. Productietoegang wordt ontgrendeld zodra je een betaalmethode toevoegt en een afzender verifieert.

Gebruik je Claude Code, Cursor of Codex? Kopieer een setup-prompt en je agent installeert de Bird CLI en skills voor je. Kies de jouwe:

Cursor