Bird vs Prelude

Bird vs Prelude para Verify

Prelude é construído em torno de um veredito de risco sobre o qual se pode ramificar, e Bird não tem equivalente. As duas APIs são, de resto, suficientemente semelhantes para que a migração seja sobretudo uma renomeação. Esta página é sobre qual destes dois factos importa mais para o que está a construir.

Em que Prelude é excelente.
Em que Bird é diferente.

Em que Prelude é excelente

Um veredito sobre o qual pode ramificar. A chamada de criação aceita sinais de IP, dispositivo e fingerprint e responde com um veredito de encaminhamento de success, retry, challenged, blocked ou shadow_blocked, com uma razão quando recusa. A criação de Bird responde com a verificação em si: não há veredito, não há objeto de sinais nem shadow block. Um registo que dependa dessa decisão tem de a tomar antes de chamar Bird.},{

Canais que Bird não alcança. Chamada de voz, RCS, Viber, Zalo e autenticação silenciosa de rede, em mais de 230 países. Ambas as plataformas suportam SMS, WhatsApp e Telegram, por isso a diferença são esses cinco canais e não todo o conjunto: um número que Prelude alcançava via Viber ou Zalo recorre aqui a SMS, o que é uma questão de taxa de entrega que vale a pena medir num piloto em vez de descobrir a volume total.

A mensagem e o fallback são seus para moldar. Um template com variáveis, um locale, o seu próprio sender ID e um código personalizado são todos por pedido, e max_auto_fallbacks e force_challenge afinam a escalação por chamada. Em Bird, o texto do código é de Bird e o fallback é o plano de canal do país; os remetentes são configurados por canal em vez de por pedido, e apenas o de email pode ser um endereço seu.

Em que Bird é diferente

Uma verificação falhada diz que tipo de falha foi. Prelude junta um código errado e tentativas esgotadas num único estado de falha. Bird responde com uma razão de incorrect_code, expired ou attempts_exhausted, e retorna attempts_remaining ao lado, para que o ecrã possa dizer ao utilizador quantas tentativas restam sem que tenha de as contar.

Os eventos de entrega são uma subscrição de workspace, assinada. Prelude envia para um callback_url que define por verificação. Os endpoints de Bird são registados uma vez, cada um subscrito aos tipos de evento que pretende, e cada entrega é assinada segundo Standard Webhooks, pelo que o URL sai do corpo do pedido e o recetor tem algo para verificar.

Um agente pode executar o fluxo. O servidor MCP alojado de Bird dá a um agente três ferramentas de verificação contra um workspace real: iniciar uma, verificar um código e avançar para o canal seguinte. Não pode reconfigurar a política por trás delas, o que é deliberado e não uma omissão.

A matriz

Capacidade a capacidade.

As duas APIs têm uma forma semelhante, por isso a maioria das linhas é equilibrada e as diferenças são estreitas. Leia a linha de tentativas seguras em comparação com a página do Twilio Verify: é uma vitória de Bird em ambos, porque nenhum dos creates documenta uma chave de idempotência. A camada de risco de Prelude é uma concessão acima e não uma linha, porque Bird não oferece nada com que a comparar.

CapabilityBirdPreludeWho wins?
Pedido de criaçãoJSON para /v1/verify/verifications com uma chave bearer. O destinatário é to.phone_number ou to.email, e chamar create novamente para um destinatário ativo faz retry em vez de iniciar uma nova verificação.JSON para um endpoint de verificação v2 com uma chave bearer. O destinatário é target.type e target.value, e chamar create novamente para um destinatário ativo faz retry da mesma forma.
Tentativas segurasUm cabeçalho Idempotency-Key no create torna uma tentativa segura.A referência do create deles não documenta chave de idempotência nem cabeçalho próprio, por isso uma tentativa após timeout pode emitir um segundo código. dispatch_id não o é: Prelude define-o como o identificador do dispatch que veio do SDK de front-end, que é o que permite à camada de fraude associar os sinais capturados a esta verificação.
O que uma verificação falhada lhe dizsuccess é false com uma razão de incorrect_code, expired ou attempts_exhausted, e attempts_remaining ao lado.Um status de failure abrange tanto um código errado como tentativas esgotadas, com expired_or_not_found como valor separado. Os dois tipos de falha não são distinguidos.
Canais por onde um código pode chegarEmail, SMS, WhatsApp e Telegram. Voz está indicada como Rolling out em vez de disponível.O mix de canais publicado inclui SMS, voz, RCS, WhatsApp, Telegram, Viber, Zalo e autenticação silenciosa de rede, em mais de 230 países, com fallback automático entre eles.
Eventos de entregaUm webhook de workspace subscrito aos tipos de evento de verify que indicar, como verify.verification.verified e verify.attempt.delivered, assinado segundo Standard Webhooks.Um callback_url definido por verificação no pedido de criação, para que o destino viaje com cada chamada.
Controlo de fallbackO plano de canal do país define a ordem e é percorrido automaticamente, com um temporizador de entrega por tentativa a avançá-lo quando não chega um estado de entrega. Uma chamada de next-channel também avança uma verificação a pedido.max_auto_fallbacks e force_challenge afinam a escalação no próprio pedido de criação.
Servidor MCP alojadoTrês ferramentas de verificação no servidor alojado em mcp.bird.com: iniciar uma verificação, verificar um código e avançar para o canal seguinte. A configuração não está entre elas.Prelude publica SDKs de backend para Node.js, Python, Go, Kotlin/Java, Ruby, PHP e C#, e SDKs de frontend para Web, Android, iOS, React Native e Flutter, pelo que a história do agente é uma biblioteca que o seu próprio runtime chama.
Comprimento do códigooptions.code_length no create, caso contrário o padrão do workspace.options.code_size no create.

A mesma verificação

Iniciar uma verificação.

As estruturas são semelhantes o suficiente para que isto seja, na sua maioria, uma renomeação: target passa a to e code_size passa a code_length. O que não tem equivalente em Bird é o objeto signals, o dispatch_id entre os elementos que o alimentam, e não há verdict na resposta para ramificar. O que aparece apenas do lado do Bird é o header Idempotency-Key.

Prelude

verify.ts
const signupId = crypto.randomUUID();

const response = await fetch("https://api.prelude.dev/v2/verification", {
  method:  "POST",
  headers: {
    Authorization:  `Bearer ${process.env.PRELUDE_API_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    target:      { type: "phone_number", value: "+15551234567" },
    dispatch_id: signupId,
    options:     { code_size: 6 },
  }),
});

const verification = await response.json();
console.log(verification.id, verification.status);

Bird

verify.ts
import { BirdClient } from "@messagebird/sdk";

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

const signupId = crypto.randomUUID();

const { data, error } = await bird.verify.verifications
  .create(
    {
      to:      { phone_number: "+15551234567" },
      options: { code_length: 6 },
    },
    { idempotencyKey: signupId },
  )
  .safe();

if (error) console.error(error.message);
else console.log(data.id, data.status);

Custo de migração

Baixo, a menos que use a camada de risco.

Ambas as APIs baseiam-se no destinatário em vez de num ID de verificação, por isso as chamadas migram quase tal como estão: target.value passa a to.phone_number ou to.email, code_size passa a code_length, e o callback_url por verificação torna-se um webhook de workspace subscrito aos tipos de evento verify que indicar. dispatch_id não tem para onde ir, porque pertence à camada de risco abaixo e não à mecânica da chamada de create, e o create do Bird aceita um header Idempotency-Key que o do Prelude não documenta.

A camada de risco é a parte que não é de todo uma migração direta. Se ramifica com base no verdict do Prelude, envia signals com o create, ou depende de um shadow block, não existe nada do lado do Bird para onde mover essa lógica e a decisão tem de acontecer antes da chamada. Dimensione essa lacuna primeiro, porque tudo o resto aqui é uma tarde de trabalho.

Perguntas que as pessoas realmente fazem

O Bird é uma boa alternativa ao Prelude?
Se usa o Prelude como API de verificação, sim: as chamadas têm estrutura semelhante, a migração é quase uma renomeação, e o Bird diz-lhe mais sobre uma verificação falhada do que o Prelude. Se usa o Prelude como produto antifraude, não. Os signals, o routing verdict e o shadow block não têm equivalente no Bird, e essa é a questão a resolver antes de tudo o resto.
O que acontece aos signals e ao verdict do Prelude?
Nada transita. O create do Bird não aceita um objeto signals e responde com a verificação em vez de uma decisão, por isso uma integração que condiciona registos com base no verdict do Prelude tem de tomar essa decisão por si antes de chamar o Bird. O que o Bird oferece nesse espaço é mais limitado e essencialmente configuração: ativação por país para poder desligar destinos que nunca serve, e limites de envio e verificação da plataforma.
Perco retries seguros ao migrar?
Ganha-os. A referência do create do Prelude não documenta nenhuma chave de idempotência nem header próprio, e o dispatch_id não é uma: é o identificador do dispatch proveniente do SDK front-end, que a camada de fraude usa para associar sinais capturados a uma verificação. O create do Bird aceita um header Idempotency-Key, e um pedido repetido volta marcado como tal, por isso um retry após timeout devolve a verificação já em curso em vez de colocar um segundo código no dispositivo.
Que canais perco?
Chamada de voz, RCS, Viber, Zalo e autenticação silenciosa de rede. SMS, WhatsApp e Telegram estão em ambos, e o Bird adiciona email, por isso a lacuna é menor do que a contagem de canais sugere. Um número que o Prelude alcançava via Viber ou Zalo recorre a SMS no Bird, por isso meça a taxa de entrega nesses mercados num piloto em vez de a volume total.

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