Bird Verify

Em pré-visualização

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

Configure em:
Cursor

Envie um código único por email, SMS ou WhatsApp e depois verifique-o por destinatário, sem nenhum id de verificação para manter entre as duas chamadas. A ordem dos canais, o remetente e as regras do código são configuração por país, não uma reconstrução. A mesma autenticação e idempotência de todos os outros canais Bird, porque a mesma equipa os construiu. Voice é o próximo a ser lançado.

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

Duas chamadas da instalação a 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
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();

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.

    O destinatário que você passa determina o canal: um endereço de e-mail verifica por e-mail, um número de telefone por SMS ou WhatsApp. Mudar de canal é alterar um único campo, não uma nova integração. Voz é o próximo a ser lançado, e o fallback automático entre canais está a caminho.

  4. 04

    Ordem de canais por país, como configuração.

    Defina a ordem dos canais, o remetente e quais canais estão ativos, por país, como um recurso de configuração de primeira classe em vez de um ticket de suporte.

  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.

    Seis dígitos por padrão, configurável de 4 a 10; janela de 10 minutos; 5 tentativas; intervalo de 60 segundos para reenvio, definido por configuração. O comprimento do código também pode ser sobrescrito por requisição.

  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 e quotas incluídos.

    Limites de envio por destinatário, limite de tentativas por verificação e quota diária por workspace — 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 por país é configuração.

Defina a ordem dos canais, o remetente e quais canais estão ativos por país — WhatsApp primeiro num mercado, apenas SMS noutro. É um recurso de configuração de primeira classe, resolvido no plano de cada verificação. Veja orquestração de canais.

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

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

Se integrou SMS, já integrou o Verify.

Mesmo modelo de autenticação, mesmo contrato de idempotência, mesmo envelope de erro. A diferença é que o Verify gera o código, escolhe o canal e aplica os rate limits — para que não tenha de o fazer.

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}.`,
});

FAQ da Verify API

Como adiciono verificação à minha app?+
Duas chamadas: crie uma verificação para um destinatário e, em seguida, valide o código que ele inserir. A validação é feita por destinatário, então não há nenhum id de verificação para armazenar entre as duas — o id de configuração (uma constante) e o endereço são tudo o que você precisa.
Em que canais posso verificar?+
Email, SMS e WhatsApp atualmente. Voice está a ser lançado como canal adicional, e a ordem dos canais, o remetente e quais canais estão ativos são configuráveis por país — sem alteração de código.
Tenho de guardar um id de verificação?+
Não. O reenvio é a mesma chamada de criação (create-or-retry), e a verificação é feita pelo endereço do destinatário, por isso uma verificação não exige estado por pedido do seu lado. Um id é devolvido caso queira consultar o estado mais tarde, mas é opcional.
O que acontece quando alguém introduz o código errado?+
O check devolve 200 com um resultado — invalid enquanto restarem tentativas, depois failed quando se esgotam, ou expired quando a janela de tempo passa. Um código errado é um resultado normal sobre o qual faz branching, não um erro HTTP.
Como são gerados e armazenados os códigos?+
Os códigos são gerados com uma fonte criptográfica aleatória e armazenados apenas como um hash HMAC-SHA256, comparado em tempo constante. O código em texto simples nunca é devolvido e nunca é escrito no seu stack ou nos nossos logs. O comprimento (4–10 dígitos), TTL e limites de tentativas são configuráveis.
Quanto custa?+
O Verify está em pré-visualização e ainda não consta na lista pública de preços. Entre em contacto e apresentamos-lhe os preços para os seus canais e volume.
De quem os meus utilizadores veem o código?+
Authifly, a marca de verificação da Bird. É a identidade em cada código que os seus utilizadores recebem: o email chega de otp@verify.authifly.com ou do seu próprio domínio verificado, e SMS e WhatsApp têm a marca Authifly. authifly.com é uma página pública que assegura aos destinatários que a Authifly envia códigos únicos legítimos em nome de uma empresa. Bird é a plataforma sobre a qual constrói; Authifly é o que o destinatário vê.

O remetente que os seus utilizadores veem: Authifly

Os seus utilizadores finais recebem os códigos da Authifly, a marca de verificação da Bird. Nos remetentes partilhados, o e-mail OTP é enviado de otp@verify.authifly.com e o SMS identifica Authifly na mensagem, para que os códigos cheguem sempre sob uma identidade consistente que você não precisa de operar. Se um destinatário receber um código inesperado, authifly.com assegura-lhe que a Authifly envia códigos únicos legítimos em nome de uma empresa. A Authifly é operada pela Bird B.V.

Visite authifly.com

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

O Verify está em pré-visualização. Comece a construir hoje ou fale connosco sobre os canais, volume e preços de que precisa.

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