El código es un secreto. Lo tratamos como tal.

Un código de un solo uso es tan seguro como la forma en que se genera, se almacena y se limita. Bird Verify genera códigos con una fuente criptográfica, almacena solo un hash, compara en tiempo constante y limita tanto envíos como intentos de adivinación, así que un registro filtrado o un ataque de fuerza bruta no le sirven de nada al atacante. La puntuación de fraude se construye sobre esta base 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, error } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: userInput,
}).safe();
if (error) throw error;
Flujo de verificación

Tu cuenta

Confirma que eres tú.

Ingresa el código enviado a

+1 ••• ••• 4567

Código de verificación de ejemplo

482691
Código verificado
Envía un código. Confirma al destinatario.

Seguridad activa por defecto, no un complemento.

Cada verificación en la Bird Verify API lleva las mismas protecciones: el código se genera en el servidor, nunca se devuelve y se almacena solo como hash; las comprobaciones se ejecutan en tiempo constante y contra un presupuesto limitado de intentos; y los envíos se limitan por destinatario y por espacio de trabajo. No tienes que activar ni configurar nada: así es como se comporta la API, ya sea que la uses como inicio de sesión con doble factor o como acceso sin contraseña.

Cinco protecciones en cada verificación.

Sin paso de configuración, sin complemento adicional.

  1. 01

    Generación criptográfica.

    Los códigos se obtienen de una fuente aleatoria criptográfica, uniformes en todo el espacio de códigos, no de un contador o marca de tiempo predecible.

  2. 02

    Hash en reposo, nunca en texto claro hacia fuera.

    Solo se almacena un HMAC-SHA256 de cada código; el texto claro nunca lo devuelve la API y nunca se escribe en tu stack ni en nuestros registros.

  3. 03

    Comparación en tiempo constante.

    Los códigos enviados se comparan en tiempo constante, así que un atacante no aprende nada de cuánto tarda una comprobación.

  4. 04

    Bloqueo por intentos.

    Cada sesión tiene un número limitado de comprobaciones (5 por defecto). Cuando se agotan, la sesión falla, así que la adivinación no puede continuar indefinidamente.

  5. 05

    Límites de envío.

    Un límite de envío por destinatario y un tiempo de espera entre reenvíos acotan el gasto y la superficie de abuso, cada uno con un 429 y Retry-After.

Los intentos se agotan antes que la paciencia de tus usuarios.

Un código incorrecto devuelve los intentos restantes, y la sesión falla cuando el presupuesto se agota, así que un ataque de fuerza bruta choca contra un muro mucho antes de encontrar el código.

lockout.ts
200
const { data, error } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: guess,
}).safe();
if (error) throw error;

// wrong code, attempts left → { success: false, reason: "incorrect_code", attempts_remaining: 2 }
// budget spent, session done → { success: false, reason: "attempts_exhausted", attempts_remaining: null }
Próximamente

Próximamente: señales de fraude y protección contra bombeo de SMS.

El historial por envío que Verify registra hoy es la base de una capa de fraude que estamos construyendo. Funciona sobre las mismas llamadas de creación y comprobación, así que adoptarla después es un cambio de configuración, no una reintegración.

Señales de riesgo al crear. Envía contexto de dispositivo, IP y solicitud en una verificación; los intentos de alto riesgo reciben un resultado bloqueado antes de que se envíe un código, así que no pagas por enviar mensajes a un atacante.

Protección contra bombeo de SMS y tráfico artificialmente inflado. Límites de envío por país y por prefijo, más un tope de gasto por espacio de trabajo, frenan el ataque de tráfico artificialmente inflado que dirige OTP a rangos de números premium para compartir ingresos con el operador.

Construido sobre lo que ya existe. La evaluación de riesgo lee el historial de intentos que Verify conserva desde el primer día, y el resultado bloqueado ya forma parte del modelo de estados, así que la capa de fraude se integra sin modificar tu integración.

Escala sin
perder el control.

Organiza equipos en espacios de trabajo, controla el acceso a la API y rastrea cambios en los registros de auditoría.

BirdHarborOrganización
Espacios de trabajoProducciónSandbox

Agente de entrega

Clave de API · Equipo de Operaciones de clientes
Activo
PermisosAcceso
EmailLectura y escritura
SMSLectura y escritura
ALAlex Lee AdministradorPermisos actualizados

Registro de auditoría

Producción
Espacio de trabajo
Producción
Recurso
Agente de entrega
WhatsApp
Acceso de lecturaLectura y escritura
Completado

Empieza con Verify.
Construye en todos los canales con Bird.

Tu próxima idea. Lista para conectar.