Bird Verify

In anteprima

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

Configura in:
Cursor

Invia un codice monouso via email, SMS o WhatsApp, poi verificalo per destinatario, senza alcun id di verifica da conservare tra le due chiamate. L'ordine dei canali, il mittente e le regole del codice sono configurazione per Paese, non una riscrittura. Stessa autenticazione e idempotenza di ogni altro canale Bird, perché lo stesso team li ha costruiti tutti. Voice è il prossimo in arrivo.

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

Due chiamate dall'installazione 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
5
6
7
8
9
10
11
12
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

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

const { data } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: "482917",
}).safe();

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.

    Il destinatario che passi determina il canale: un indirizzo email verifica tramite email, un numero di telefono tramite SMS o WhatsApp. Cambiare canale significa modificare un solo campo, non una nuova integrazione. La voce è in arrivo, e il fallback automatico tra canali è in fase di sviluppo.

  4. 04

    Ordine dei canali per Paese, come configurazione.

    Impostate l'ordine dei canali, il mittente e quali canali sono attivi, per Paese, come risorsa di configurazione di prima classe anziché un ticket di supporto.

  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.

    Sei cifre di default, da 4 a 10 configurabili; una finestra di 10 minuti; 5 tentativi; un cooldown di 60 secondi per il reinvio, impostabile per configurazione. La lunghezza del codice può essere sovrascritta anche per singola richiesta.

  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 e quote integrati.

    Limiti di invio per destinatario, limite di tentativi per verifica e quota giornaliera per workspace, 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();

Il routing per Paese è configurazione.

Impostate l'ordine dei canali, il mittente e quali canali sono attivi per Paese — WhatsApp-first in un mercato, solo SMS in un altro. È una risorsa di configurazione di prima classe, risolta nel piano di ogni verifica. Consultate orchestrazione dei canali.

per-country.ts
200
await bird.verify.verifications.configurations.countries.upsert(
  "vfc_login",
  "BR",
  { channels: [
    { channel: "whatsapp", state: "enabled" },
    { channel: "sms", state: "enabled" },
  ] },
).safe();

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

Se avete integrato SMS, avete integrato Verify.

Stesso modello di autenticazione, stesso contratto di idempotenza, 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}.`,
});

FAQ Verify API

Come aggiungo la verifica alla mia app?+
Due chiamate: crea una verifica per un destinatario, poi controlla il codice inserito. Il controllo avviene per destinatario, quindi non c'è un ID di verifica da memorizzare tra le due chiamate — l'ID di configurazione (una costante) e l'indirizzo sono tutto ciò che serve.
Su quali canali posso verificare?+
Email, SMS e WhatsApp oggi. Voice è in fase di rilascio come canale aggiuntivo, e l'ordine dei canali, il mittente e quali canali sono attivi sono configurabili per Paese — senza modifiche al codice.
Devo memorizzare un id di verifica?+
No. Il reinvio è la stessa chiamata di creazione (create-or-retry), e il controllo avviene per indirizzo del destinatario, quindi una verifica non richiede alcuno stato per singola richiesta da parte vostra. Un id viene restituito se volete leggere lo stato in seguito, ma è opzionale.
Cosa succede quando qualcuno inserisce il codice sbagliato?+
Il controllo restituisce 200 con un risultato — invalid finché restano tentativi, poi failed quando sono esauriti, oppure expired quando la finestra temporale scade. Un codice errato è un esito normale su cui fare branching, non un errore HTTP.
Come vengono generati e memorizzati i codici?+
I codici vengono generati con una sorgente crittografica casuale e memorizzati solo come hash HMAC-SHA256, confrontati in tempo costante. Il codice in chiaro non viene mai restituito né scritto nel vostro stack o nei nostri log. Lunghezza (4–10 cifre), TTL e limiti di tentativi sono configurabili.
Quanto costa?+
Verify è in anteprima e non è ancora nel listino prezzi pubblico. Contattateci e vi illustreremo i prezzi per i vostri canali e volumi.
Da chi vedono arrivare il codice i miei utenti?+
Authifly, il brand di verifica di Bird. È l'identità su ogni codice che i vostri utenti ricevono: l'email arriva da otp@verify.authifly.com o dal vostro dominio verificato, e SMS e WhatsApp hanno il brand Authifly. authifly.com è una pagina pubblica che rassicura i destinatari sul fatto che Authifly invia codici monouso legittimi per conto di un'azienda. Bird è la piattaforma su cui costruite; Authifly è ciò che il destinatario vede.

Il mittente che i tuoi utenti vedono: Authifly

I tuoi utenti finali ricevono i codici da Authifly, il brand di verifica di Bird. Sui mittenti condivisi, l'e-mail OTP arriva da otp@verify.authifly.com e l'SMS riporta Authifly nel messaggio, così i codici vengono recapitati sotto un'unica identità coerente che non devi gestire tu. Se un destinatario riceve un codice inatteso, authifly.com lo rassicura sul fatto che Authifly invia codici monouso legittimi per conto di un'azienda. Authifly è gestito da Bird B.V.

Visita authifly.com

La verifica sulla stessa piattaforma del resto della tua messaggistica.

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

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