Bird Verify

L<highlight>API di verifica</highlight> senza nulla da memorizzare.

Invia un codice monouso tramite email, SMS o WhatsApp, poi verificalo in base al destinatario, senza dover conservare alcun ID di verifica tra le due chiamate. L'ordine dei canali, il mittente e le regole del codice vengono già risolti automaticamente per paese. Stessa autenticazione e idempotenza di ogni altro canale Bird, perché lo stesso team li ha costruiti tutti. La voce è in fase di rilascio.

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.

Scelto ogni giorno dai team che creano software di livello mondiale

Leggi altre storie dei clienti

Due chiamate da npm install a un utente verificato

Invia un codice, poi verificalo, nel linguaggio che già utilizzi.

Create-or-retry invia il codice; check lo conferma per destinatario. Due chiamate, senza alcun id di verifica da passare tra le due.

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

Dieci cose che non devi costruire quando la verifica è l'API.

Primitive concrete, con nome e configurabili. Nessuna vaghezza.

  1. 01

    Crea o riprova in una sola chiamata.

    Reinviate lo stesso destinatario e riprendiamo la sessione attiva, reinviando una volta scaduto il cooldown. Nessun endpoint di reinvio separato, nessuna verifica duplicata.

  2. 02

    Verifica per destinatario. Non memorizzare nulla.

    Inviate il destinatario e il codice; noi risolviamo la sessione dalla coppia configurazione-destinatario. Non c'è alcun id di verifica da persistere tra invio e controllo.

  3. 03

    Email, SMS e WhatsApp al lancio.

    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

    Ordine dei canali per paese, già risolto.

    L'ordine dei canali, il mittente e i canali attivi variano in base al paese. La configurazione per paese di Bird gestisce tutto questo, quindi una chiamata di creazione si risolve già nel piano corretto ovunque.

  5. 05

    Codici che non vedrete mai.

    Generato con una fonte crittografica casuale, memorizzato solo come HMAC, confrontato in tempo costante. Il codice in chiaro non tocca mai il vostro stack né i nostri log.

  6. 06

    Codice, TTL e tentativi configurabili.

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

  7. 07

    Ogni codice resta valido fino al termine della sessione.

    Un messaggio in ritardo e un codice appena reinviato vengono entrambi verificati, perché non invalidiamo il codice precedente quando ne viene generato uno nuovo.

  8. 08

    Un codice errato è un 200, non un'eccezione.

    Verifica le risposte con un risultato booleano — il codice è stato verificato, sì o no — e un motivo che dettaglia quando non lo è stato: non valido, scaduto, già verificato o tentativi esauriti. La logica si basa su un campo, mai su un errore sollevato.

  9. 09

    Rate limit integrati.

    Limiti di invio per destinatario e limite di tentativi per verifica, ciascuno con un 429 e Retry-After, così il brute force si esaurisce prima di voi.

  10. 10

    Stesso contratto del resto di Bird.

    Auth Bearer, idempotency key, ID tipizzati vrf_, un unico envelope di errore. L'handler che avete scritto per l'email funziona già per la verifica.

Non memorizzate nulla tra invio e verifica.

La maggior parte delle API di verifica vi restituisce un id da persistere, cercare e usare per verificare il codice. Bird risolve la sessione dal destinatario, quindi non c'è alcuno stato per verifica dal vostro lato.

La maggior parte delle API di verifica

La creazione restituisce un id che salvate, poi cercate la verifica per confrontare il codice.

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

Bird Verify

Verificate tramite destinatario. Non c'è nulla da collegare tra le due chiamate.

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();

L'instradamento conosce già il paese.

L'ordine dei canali, i mittenti e i canali attivi variano in base al paese: WhatsApp prioritario in un mercato, solo SMS in un altro. La configurazione per paese di Bird gestisce tutto questo, quindi una chiamata di creazione si risolve già nel piano corretto. Vedi orchestrazione dei canali.

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;

La verifica è anche una decisione di prodotto: la stessa API supporta l'autenticazione a due fattori e il login senza password. Dovete prima validare un numero? Abbinatelo a Lookup. L'autenticazione silenziosa di rete e le app TOTP authenticator sono nella roadmap.

Perché costruiamo Verify

Perché il codice che fa accedere un utente non dovrebbe aver bisogno di una propria tabella nel database.

OTP è il canale dove un codice che non arriva è una registrazione che non avviene. Bird gestisce già email e SMS su larga scala, quindi Verify è quella delivery più la generazione del codice, la sessione, il piano canali per Paese e i rate limit, dietro due endpoint che non memorizzano nulla dal vostro lato e rispondono con la stessa struttura di ogni altro canale Bird.

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;

Se avete integrato SMS, avete integrato Verify.

Stesso modello di autenticazione, stesso contratto di idempotency, stesso envelope di errore. La differenza è che Verify genera il codice, sceglie il canale e gestisce i rate limit, così non dovete farlo voi.

Verify

Una chiamata invia il codice; una chiamata lo verifica per destinatario. Noi gestiamo il codice, la sessione e i limiti.

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

SMS

L'invio diretto, per quando vuoi gestire in autonomia la generazione del codice e la policy di retry.

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

Scegli il mittente che vedono i tuoi utenti

I codici vengono inviati con Bird Verify per impostazione predefinita, senza che registrazioni o configurazioni di template si frappongano. Passa a Authifly su un canale e i tuoi utenti vedranno un'identità di verifica neutrale anziché un fornitore di piattaforma: l'email OTP arriva da otp@verify.authifly.com e l'SMS mostra il mittente Authifly ovunque il Paese di destinazione consenta un mittente personalizzato. Bird gestisce entrambe le identità, quindi la scelta non comporta costi aggiuntivi e puoi configurarla per canale e per Paese. Per l'email puoi andare oltre e inviare da un dominio che hai verificato personalmente. Se un destinatario riceve un codice inatteso, authifly.com lo rassicura che Authifly invia codici monouso legittimi per conto di un'azienda. Authifly è gestito da Bird B.V.

Visita authifly.com

Invia la tua prima richiesta prima di scrivere codice.

L'intera API pubblica è una collection Postman, convertita dalla stessa specifica OpenAPI da cui vengono generati gli SDK, con una richiesta e una risposta di esempio per ogni endpoint. Fai un fork nel tuo spazio di lavoro, imposta una chiave API e invia una richiesta live.

La verifica sulla stessa piattaforma del resto della tua messaggistica.

Inizia a sviluppare oggi stesso, oppure parlaci dei canali, dei volumi e dei prezzi di cui hai bisogno.

I tuoi dati

Tutti i campi di contatto sono obbligatori.

Per consentire al nostro team di contattarti per la demo.

Prodotti di interesse

Facoltativo

Ti contatteremo per organizzare la tua demo.
Informativa sulla privacy

Inizia con un canale.
Aggiungi gli altri quando sei pronto.

Una chiave API di test è subito tua. La produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

Usi Claude Code, Cursor o Codex? Copia un prompt di configurazione e il tuo agente installerà la CLI e le skill di Bird per te. Scegli il tuo:

Cursor