Bird Verify

En vista previa

La API de verificación sin nada que almacenar.

Configúralo en:
Cursor

Envía un código de un solo uso por email, SMS o WhatsApp y compruébalo por destinatario, sin ningún id de verificación que conservar entre las dos llamadas. El orden de canales, el remitente y las reglas del código son configuración por país, no un rediseño. La misma autenticación e idempotencia que cualquier otro canal de Bird, porque el mismo equipo los construyó todos. Voice se despliega a continuación.

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

Dos llamadas desde la instalación hasta un usuario verificado

Envía un código y compruébalo, en el lenguaje que ya usas.

Create-or-retry envía el código; check lo confirma por destinatario. Dos llamadas, sin id de verificación que pasar entre ellas.

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

Diez cosas que no construyes cuando la verificación es la API.

Primitivas concretas, nombradas y configurables. Sin ambigüedades.

  1. 01

    Crea o reintenta en una sola llamada.

    Vuelve a enviar el mismo destinatario y retomamos la sesión activa, reenviando cuando pase el cooldown. Sin endpoint de reenvío separado, sin verificaciones duplicadas.

  2. 02

    Comprueba por destinatario. No almacenes nada.

    Envía el destinatario y el código; resolvemos la sesión a partir del par configuración-destinatario. No hay id de verificación que persistir entre el envío y la comprobación.

  3. 03

    Email, SMS y WhatsApp en el lanzamiento.

    El destinatario que envías determina el canal: una dirección de correo electrónico se verifica por email, un número de teléfono por SMS o WhatsApp. Cambiar de canal es modificar un solo campo, no una nueva integración. La voz se lanza próximamente, y el fallback automático entre canales está en camino.

  4. 04

    Orden de canales por país, como configuración.

    Configura el orden de canales, el remitente y qué canales están activos, por país, como un recurso de configuración de primera clase en vez de un ticket de soporte.

  5. 05

    Códigos que nunca ves.

    Generado con una fuente criptográfica aleatoria, almacenado solo como HMAC, comparado en tiempo constante. El código en texto plano nunca toca tu stack ni nuestros logs.

  6. 06

    Código, TTL e intentos configurables.

    Seis dígitos por defecto, configurable de 4 a 10; una ventana de 10 minutos; 5 intentos; un periodo de espera de 60 segundos para reenvío, definido por configuración. La longitud del código también se puede sobrescribir por solicitud.

  7. 07

    Cada código permanece válido hasta que la sesión termina.

    Un mensaje retrasado y un código recién reenviado verifican ambos, porque no invalidamos el código anterior cuando se envía uno nuevo.

  8. 08

    Un código incorrecto es un 200, no una excepción.

    Comprueba las respuestas con un resultado booleano —¿este código se verificó, sí o no?— y un motivo que detalla cuándo falló: inválido, expirado, ya verificado o sin intentos restantes. Bifurcas según un campo, nunca según un error lanzado.

  9. 09

    Límites de tasa y cuotas integrados.

    Límites de envío por destinatario, un límite de intentos por verificación y una cuota diaria por workspace, cada uno con un 429 y Retry-After, para que la fuerza bruta se agote antes que tú.

  10. 10

    El mismo contrato que el resto de Bird.

    Autenticación Bearer, una clave de idempotencia, ids tipados vrf_, un único sobre de error. El handler que escribiste para email ya sirve para verificación.

No almacenes nada entre el envío y la verificación.

La mayoría de las API de verificación te devuelven un id que debes persistir, consultar y enviar el código contra él. Bird resuelve la sesión a partir del destinatario, así que no hay estado por verificación de tu lado.

La mayoría de las API de verificación

Create devuelve un id que almacenas, luego consultas la verificación para comprobar el código contra ella.

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

Bird Verify

Verifica por destinatario. No hay nada que hilar entre las dos llamadas.

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

El enrutamiento por país es configuración.

Define el orden de canales, el remitente y qué canales están activos por país — WhatsApp primero en un mercado, solo SMS en otro. Es un recurso de configuración de primera clase, resuelto en el plan de cada verificación. Ver orquestación de canales.

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 verificación también es una decisión de producto: la misma API impulsa la autenticación de dos factores y el inicio de sesión sin contraseña. ¿Validar un número primero? Combínalo con Lookup. La autenticación silenciosa de red y las apps de autenticación TOTP están en la hoja de ruta.

Por qué construimos Verify

Porque el código que permite entrar a un usuario no debería necesitar su propia tabla en la base de datos.

OTP es el canal donde un código que no llega es un registro que no sucede. Bird ya ejecuta email y SMS a escala, así que Verify es esa entrega más la generación del código, la sesión, el plan de canales por país y los límites de tasa, detrás de dos endpoints que no almacenan nada de tu lado y responden con la misma estructura que cualquier otro canal de 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();

Si ya integraste SMS, ya integraste Verify.

Mismo modelo de autenticación, mismo contrato de idempotencia, mismo sobre de error. La diferencia es que Verify genera el código, elige el canal y gestiona los límites de tasa — para que tú no tengas que hacerlo.

Verify

Una llamada envía el código; otra lo verifica por destinatario. Nosotros gestionamos el código, la sesión y los límites.

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

SMS

El envío directo, para cuando quiere controlar usted mismo la generación del código y la política de reintentos.

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

Preguntas frecuentes de Verify API

¿Cómo añado verificación a mi app?+
Dos llamadas: crea una verificación para un destinatario y luego comprueba el código que introduce. La comprobación se hace por destinatario, así que no hay un id de verificación que almacenar entre ambas: el id de configuración (una constante) y la dirección son todo lo que necesitas.
¿Por qué canales puedo verificar?+
Email, SMS y WhatsApp hoy. Voice se está desplegando como canal adicional, y el orden de canales, el remitente y qué canales están activos son configurables por país, sin cambiar código.
¿Tengo que almacenar un id de verificación?+
No. Reenviar es la misma llamada de creación (create-or-retry), y la comprobación es por la dirección del destinatario, así que una verificación no requiere estado por solicitud de tu lado. Se devuelve un id si quieres consultar el estado después, pero es opcional.
¿Qué pasa cuando alguien introduce el código incorrecto?+
La comprobación devuelve 200 con un resultado: invalid mientras quedan intentos, luego failed cuando se agotan, o expired cuando se cierra la ventana de tiempo. Un código incorrecto es un resultado normal sobre el que bifurcas, no un error HTTP.
¿Cómo se generan y almacenan los códigos?+
Los códigos se generan con una fuente criptográfica aleatoria y se almacenan solo como un hash HMAC-SHA256, comparado en tiempo constante. El código en texto plano nunca se devuelve ni se escribe en tu stack o en nuestros logs. La longitud (4–10 dígitos), el TTL y los límites de intentos son configurables.
¿Cuánto cuesta?+
Verify está en vista previa y aún no figura en la lista pública de precios. Contáctanos y te explicamos los precios según tus canales y volumen.
¿De quién ven mis usuarios que viene el código?+
Authifly, la marca de verificación de Bird. Es la identidad en cada código que reciben tus usuarios: el email llega desde otp@verify.authifly.com o tu propio dominio verificado, y SMS y WhatsApp llevan la marca Authifly. authifly.com es una página pública que confirma a los destinatarios que Authifly envía códigos de un solo uso legítimos en nombre de una empresa. Bird es la plataforma sobre la que construyes; Authifly es lo que ve el destinatario.

El remitente que ven sus usuarios: Authifly

Sus usuarios finales reciben los códigos de Authifly, la marca de verificación de Bird. En los remitentes compartidos, el correo OTP se envía desde otp@verify.authifly.com y el SMS incluye Authifly en el mensaje, de modo que los códigos llegan siempre bajo una identidad consistente que usted no necesita operar. Si un destinatario recibe un código inesperado, authifly.com le confirma que Authifly envía códigos de un solo uso legítimos en nombre de una empresa. Authifly es operado por Bird B.V.

Visite authifly.com

Verificación en la misma plataforma que el resto de su mensajería.

Verify está en versión preliminar. Empiece a desarrollar hoy o hable con nosotros sobre los canales, el volumen y los precios que necesita.

Empieza con un canal.
Añade los demás cuando estés listo.

Una clave API de prueba es tuya de inmediato. El acceso a producción se desbloquea cuando añades un método de pago y verificas un remitente.

¿Usas Claude Code, Cursor o Codex? Copia un prompt de configuración y tu agente instalará el Bird CLI y las habilidades por ti. Elige el tuyo:

Cursor