Bird Verify

A API de verificação sem nada para guardar.

Envie um código de uso único por email, SMS ou WhatsApp e depois verifique-o pelo destinatário, sem necessidade de guardar um id de verificação entre as duas chamadas. A ordem dos canais, o remetente e as regras do código já são resolvidos automaticamente por país. A mesma autenticação e idempotência de todos os outros canais Bird, porque a mesma equipa construiu todos. Voz será disponibilizado em breve.

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.

A confiança diária de equipas que criam software de classe mundial

Leia mais histórias de clientes

Duas chamadas desde a npm install até um utilizador verificado

Envie um código e depois verifique-o, na linguagem que já utiliza.

Create-or-retry envia o código; check confirma-o por destinatário. Duas chamadas, e nenhum id de verificação para encadear entre elas.

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

Dez coisas que não precisa de construir quando a verificação é a API.

Primitivas concretas, nomeadas e configuráveis. Sem ambiguidade.

  1. 01

    Crie ou reenvie numa única chamada.

    Reenvie o mesmo destinatário e retomamos a sessão ativa, reenviando quando o cooldown passar. Sem endpoint de reenvio separado, sem verificações duplicadas.

  2. 02

    Verifique por destinatário. Não guarde nada.

    Submeta o destinatário e o código; resolvemos a sessão a partir do par configuração-e-destinatário. Não há nenhum id de verificação para persistir entre envio e verificação.

  3. 03

    Email, SMS e WhatsApp no lançamento.

    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

    Ordem de canais por país, já resolvida.

    A ordem dos canais, o remetente e quais canais estão ativos variam por país. A base por país do Bird decide isso, pelo que uma chamada de criação já resolve para o plano correto em todo o lado.

  5. 05

    Códigos que nunca vê.

    Gerado com uma fonte criptográfica aleatória, armazenado apenas como HMAC, comparado em tempo constante. O código em texto simples nunca toca na sua stack nem nos nossos logs.

  6. 06

    Código, TTL e tentativas configuráveis.

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

  7. 07

    Cada código permanece válido até a sessão terminar.

    Uma mensagem atrasada e um código reenviado de fresco ambos verificam, porque não invalidamos o código anterior quando um novo é enviado.

  8. 08

    Um código errado é um 200, não uma exceção.

    Valide respostas com um resultado booleano — este código verificou, sim ou não — e um motivo que detalha quando não verificou: inválido, expirado, já verificado ou sem tentativas restantes. Você faz a ramificação com base em um campo, nunca em um erro lançado.

  9. 09

    Rate limits incluídos.

    Limites de envio por destinatário e limite de tentativas por verificação — cada um um 429 com Retry-After — para que a força bruta se esgote antes de si.

  10. 10

    O mesmo contrato que o resto do Bird.

    Autenticação Bearer, chave de idempotência, ids tipados vrf_, um envelope de erro. O handler que escreveu para email já serve para verificação.

Não armazene nada entre o envio e a verificação.

A maioria das APIs de verificação devolve-lhe um id para persistir, consultar e submeter o código. O Bird resolve a sessão a partir do destinatário, por isso não há estado por verificação do seu lado.

A maioria das APIs de verificação

O create devolve um id que armazena, depois consulta a verificação para validar o código.

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

Bird Verify

Verifique pelo destinatário. Não há nada para encadear entre as duas chamadas.

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

O encaminhamento já conhece o país.

A ordem dos canais, os remetentes e quais canais estão ativos variam por país: WhatsApp primeiro num mercado, apenas SMS noutro. A base por país do Bird decide isso, pelo que uma chamada de criação já resolve para o plano correto. Veja orquestração de canais.

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;

A verificação é também uma decisão de produto: a mesma API suporta autenticação de dois fatores e login sem palavra-passe. Quer validar um número primeiro? Combine com o Lookup. Autenticação silenciosa de rede e apps autenticadoras TOTP estão no roadmap.

Porque construímos o Verify

Porque o código que permite a entrada de um utilizador não deveria precisar da sua própria tabela na base de dados.

OTP é o canal onde um código que não chega é um registo que não acontece. O Bird já opera email e SMS em escala, por isso o Verify é essa entrega mais a geração de código, a sessão, o plano de canais por país e os rate limits — atrás de dois endpoints que não armazenam nada do seu lado e respondem com o mesmo formato de qualquer outro canal 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 integrou SMS, já integrou o Verify.

Mesmo modelo de autenticação, mesmo contrato de idempotência, mesmo envelope de erros. A diferença é que o Verify gera o código, escolhe o canal e aplica os limites de taxa — para que você não precise fazer isso.

Verify

Uma chamada envia o código; outra verifica-o pelo destinatário. Nós gerimos o código, a sessão e os limites.

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

SMS

O envio direto, para quando você quer controlar a geração do código e a política de reenvio.

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

Escolha o remetente que os seus utilizadores veem

Os códigos são enviados sob Bird Verify por predefinição, sem necessidade de registo ou configuração de modelos. Mude um canal para Authifly e os seus utilizadores veem uma identidade de verificação neutra em vez de um fornecedor de plataforma: o e-mail OTP é enviado a partir de otp@verify.authifly.com e o SMS mostra o remetente Authifly sempre que o país de destino permitir um remetente com marca. Bird opera ambas as identidades, por isso a escolha não tem qualquer custo operacional para si — e pode configurá-la por canal e por país. No e-mail, pode ir mais longe e enviar a partir de um domínio que tenha verificado. Se um destinatário receber um código inesperado, authifly.com assegura-lhe que a Authifly envia códigos de utilização única legítimos em nome de uma empresa. Authifly é operada por Bird B.V.

Visite authifly.com

Envie sua primeira solicitação antes de escrever qualquer código.

Toda a API pública é uma coleção do Postman, convertida a partir da mesma especificação OpenAPI usada para gerar os SDKs, com um exemplo de solicitação e resposta em cada endpoint. Faça um fork para o seu próprio espaço de trabalho, defina uma chave API e envie uma solicitação real.

Verificação na mesma plataforma que o resto das suas mensagens.

Comece a construir hoje ou fale connosco sobre os canais, o volume e os preços de que precisa.

Seus dados

Todos os campos de contato são obrigatórios.

Para que nossa equipe entre em contato sobre sua demonstração.

Produtos de interesse

Opcional

Entraremos em contato para agendar sua demonstração.
Política de privacidade

Comece com um canal.
Adicione os outros quando estiver pronto.

Uma chave API de teste é sua imediatamente. A produção é desbloqueada quando você adiciona um método de pagamento e verifica um remetente.

Usa Claude Code, Cursor ou Codex? Copie um prompt de configuração e o seu agente instala o Bird CLI e as skills por si. Escolha o seu:

Cursor