Coming Soon

La API de SMS para desarrolladores que realmente necesitan lanzar.

150+ countries, 240 direct-to-carrier connections, one auth model. About 40% of the world's commercial SMS volume transits the Bird network — we've been at this a decade. 95% of messages delivered in under 2.5 seconds.

send-otp.ts
200 · 0.4s
import { BirdClient } from "@bird/sdk";

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

const code = generateOtp();

const { data, error } = await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
}).safe();

if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."

5 minutos desde npm install hasta el primer envío

Envía un SMS desde el lenguaje que ya usas.

SDKs en todos los runtimes principales. El primer envío va a un destinatario de prueba autorizado (+15005550006) para que puedas incluir una verificación en tu CI antes de aprovisionar un número.

1
2
3
4
5
6
7
8
9
import { BirdClient } from "@bird/sdk";

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

const { data, error } = await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: "Hello from Node.",
}).safe();

Ten things we file, configure, and route so you don't.

Routing, compliance, and inbound primitives, named and audit-able.

  1. 01

    Cobertura en más de 150 países

    Una única API, una única relación de facturación — sin contratos por región que perseguir.

  2. 02

    240 enlaces directos con operadores

    Sin intermediarios agregadores que recorten márgenes o pierdan recibos entre nosotros y el operador móvil.

  3. 03

    Enrutamiento de nivel operador

    Reselección de rutas en tiempo real cuando una ruta de operador se degrada; el failover ocurre antes de que lo notes.

  4. 04

    SMS bidireccional de entrada

    Los mensajes entrantes llegan como webhooks firmados con HMAC en el número que aprovisionaste.

  5. 05

    Números de todo tipo

    Números largos, cortos, gratuitos e identificadores alfanuméricos de remitente — aprovisionados desde un único endpoint.

  6. 06

    A2P 10DLC en el panel

    Registro de marca y campaña gestionado en la consola; el estado es consultable desde la API.

  7. 07

    Consulta MNP antes de enviar

    Resolvemos el operador actual del destinatario en cada envío para que la ruta siempre sea la correcta.

  8. 08

    Cumplimiento de STOP / HELP

    Las palabras clave de baja se respetan automáticamente por destinatario; la lista de supresión es consultable.

  9. 09

    Recibos de entrega como webhooks

    Cada transición de estado dispara un evento firmado — desde sms.queued hasta sms.delivered o sms.failed.

  10. 10

    Seguridad de segmentos y Unicode

    El SDK cuenta los segmentos antes de enviar y advierte sobre cambios de codificación que dividirían un mensaje.

Why we build SMS

SMS es el canal complicado. Construimos la API que lo hace aburrido.

Every country has different rules, every carrier has different routes, every region has different sender-ID conventions. We've been running SMS for ten years, so that knowledge lives behind one endpoint, one auth model, one webhook contract. Whatever changes upstream, the call you wrote against bird.sms.send doesn't.

send-otp.ts
200 · 0.4s
import { BirdClient } from "@bird/sdk";

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

const code = generateOtp();

const { data, error } = await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
}).safe();

if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."

Cada cambio de estado es un webhook.

Payloads firmados con HMAC, protegidos contra replay, idempotentes. El mismo formato en cada canal de Bird — aprende uno y los conoces todos.

POST /webhooks/bird
signed
{
  "type": "sms.delivered",
  "id":   "evt_7jR42x...",
  "created_at": "2026-05-19T15:42:01.221Z",
  "data": {
    "sms_id":     "sms_4kT01Lq2m",
    "from":       "Bird",
    "to":         "+15005550006",
    "mcc_mnc":    "310-260",
    "country":    "US",
    "segments":   1,
    "latency_ms": 1284
  }
}

Calendario de reintentos: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter tras el intento final; cada evento en dead-letter es reproducible desde el panel o la API.

  • sms.queuedAceptado por la API y en cola para la entrega al operador.
  • sms.sentEnviado al SMSC del operador de destino.
  • sms.deliveredRecibo de entrega recibido del operador (DLR).
  • sms.failedFallo permanente — rechazo del operador, número inválido, coincidencia en lista de supresión.
  • sms.receivedMensaje entrante en uno de tus números aprovisionados.
  • sms.opted_outEl destinatario envió la palabra clave STOP; los envíos futuros a este número serán suprimidos.

Si ya integraste SMS, ya integraste WhatsApp.

Mismo modelo de autenticación, mismo contrato de idempotencia, mismo formato de error, misma estructura de webhook. La diferencia está en lo que hace cada uno — no en cómo lo llamas.

SMS.

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

Un verbo. Texto plano. Campos numéricos to/from. La estructura que todo desarrollador ya tiene en la memoria muscular.

WhatsApp.

whatsapp
await bird.whatsapp.send({
  from: "+15551234567",
  to:   "+15005550006",
  template: { name: "otp", variables: { code } },
});

Mismo verbo. Payload diferente — con plantilla, con consentimiento, en el canal que dos mil millones de personas abren a diario.

Depende del país. Desde menos de un centavo hasta unos pocos centavos por segmento.

Precio por uso. Las tarifas de SMS dependen del país de destino y la ruta — la tabla completa está en la página de precios. Los descuentos por volumen se aplican automáticamente a nivel de cuenta. Sin tarifa por usuario, sin funciones bloqueadas detrás de compromisos anuales.

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.

ComenzarLeer documentacióno

Using Claude Code, Cursor, or Codex? Point it at our MCP server — tools for every channel we expose, with scoped agent keys.

Cursor