La API de SMS para desarrolladores que realmente necesitan lanzar.
Más de 190 países, 240 conexiones directas con operadores, un único modelo de autenticación. Aproximadamente el 40 % del volumen mundial de SMS comerciales transita por la red de Bird. Llevamos una década en esto. El 95 % de los mensajes se entregan en menos de 2,5 segundos.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+31612345678",
text: "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
category: "transactional",
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_01m11jw130e7svjzv70kgqr38w"
5 minutos desde npm install hasta el primer envío
Envía un SMS desde el lenguaje que ya usas.
SDK en todos los principales entornos de ejecución. Envía al destinatario de prueba autorizado +15005550006 y Bird simula todo el ciclo de vida hasta la entrega, para que una verificación de CI nunca toque un operador. Es un número de EE. UU., por lo que el envío aún necesita un número estadounidense propio como remitente.
const msg = await bird.sms.send({
from: "+15557654321",
to: "+14155550100",
text: "Your verification code is 123456.",
category: "authentication",
});
console.log(msg.id, msg.status);Antes de enviar a clientes, consulta el registro de remitente para cada destino. Sigue la guía de envío de SMS desde la solicitud hasta el resultado de entrega, y luego usa eventos e respuestas entrantes de SMS para gestionar los acuses de recibo y los mensajes enviados a tus números.
Diez cosas que registramos, configuramos y enrutamos para que tú no tengas que hacerlo.
Enrutamiento, cumplimiento normativo y primitivas de entrada, con nombre y auditables.
- 01
Cobertura en más de 190 países
Una API unificada, una sola relación de facturación. Sin contratos por región que perseguir.
- 02
240 enlaces directos con operadores
Sin intermediarios agregadores que recorten márgenes o pierdan recibos entre nosotros y el operador móvil.
- 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.
- 04
SMS bidireccional de entrada
Los mensajes entrantes llegan como webhooks firmados con HMAC en el número que aprovisionaste.
- 05
Números de todo tipo
Códigos largos, códigos cortos, números gratuitos e identificadores alfanuméricos de remitente, aprovisionados mediante un único endpoint.
- 06
A2P 10DLC en el panel
Registro de marca y campaña gestionado en la consola; el estado es consultable desde la API.
- 07
Consulta MNP antes de enviar
Resolvemos el operador actual del destinatario en cada envío para que la ruta siempre sea la correcta.
- 08
Cumplimiento de STOP / HELP
Las palabras clave de baja se respetan automáticamente por destinatario; la lista de supresión es consultable.
- 09
Recibos de entrega como webhooks
Cada transición de estado dispara un evento firmado: desde sms.accepted hasta sms.delivered o sms.failed.
- 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.
Explora la plataforma de SMS
Cada capacidad en profundidad. Una API, un solo conjunto de claves.
Envío.
La API de envío: segmentos, seguridad Unicode, lotes e idempotencia.
Números.
Long codes, short codes, toll-free e IDs de remitente alfanuméricos.
Bidireccional.
SMS entrantes y respuestas conversacionales como webhooks firmados con HMAC.
Cumplimiento.
Registro A2P 10DLC, cancelación con STOP/HELP y reglas de ID de remitente.
Enrutamiento.
Más de 190 países, 240 conexiones directas con operadores y conmutación por error.
Analíticas.
Métricas de entrega e interacción a partir de los acuses de recibo del operador.
Destinos.
Tipos de remitente por país, reglas de registro y cobertura.
SMS es un canal dentro de un conjunto de herramientas más amplio. Verifica usuarios con códigos de un solo uso mediante Verifications, comprueba el tipo de línea y el operador de un número antes de enviar con Lookup, o llega al mismo dispositivo con tarjetas enriquecidas a través de RCS.
¿Comparando Bird con el incumbente? Bird vs Twilio para SMS pone lado a lado las dos llamadas de envío, ambas superficies 10DLC y lo que cada uno ofrece a un agente de código.
Por qué creamos SMS
SMS es el canal complicado. Construimos la API que lo hace aburrido.
Cada país tiene reglas diferentes, cada operador tiene rutas diferentes, cada región tiene convenciones de sender-ID distintas. Llevamos diez años gestionando SMS, así que todo ese conocimiento está detrás de un solo endpoint, un solo modelo de autenticación y un solo contrato de webhooks. Independientemente de lo que cambie en origen, la llamada que escribiste a bird.sms.send sigue funcionando.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+31612345678",
text: "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
category: "transactional",
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_01m11jw130e7svjzv70kgqr38w"
Cada cambio de estado es un webhook.
Payloads firmados con HMAC, protección contra repetición, idempotentes. El mismo formato en todos los canales de Bird: aprende uno y los conoces todos.
{
"type": "sms.delivered",
"timestamp": "2026-05-19T15:42:01.221Z",
"data": {
"sms_id": "sms_4kT01Lq2m",
"workspace_id": "ws_8KQ2",
"to": "+15005550006",
"from": "+12025550188",
"tags": [{ "name": "campaign", "value": "otp" }],
"metadata": { "user_id": "usr_12345" },
"carrier": "Verizon",
"mcc_mnc": "311480",
"cost": {
"amount": "0.0079",
"currency_code": "USD",
"transaction_amount": "0.0079",
"passthrough_amount": null
}
}
}
Programa de reintentos: 5s, 5m, 30m, 2h, 5h, y luego 10h dos veces. Tras el último intento, el envío falla permanentemente, y la función de replay permite recuperarlo desde el dashboard o la API.
sms.acceptedAceptado 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.rejectedRechazado antes de la entrega al operador: destino no válido, supresión o filtro de política de contenido.sms.undeliveredEl operador reportó un fallo no permanente en la entrega.sms.failedFallo definitivo: el mensaje no será entregado.
Si ya integraste SMS, ya integraste WhatsApp.
El mismo modelo de autenticación, el mismo contrato de idempotencia, el mismo sobre de errores, la misma forma de webhook. La diferencia está en lo que hace cada uno, no en cómo lo invocas.
SMS
Un verbo. Texto plano. Campos numéricos to/from. La estructura que todo desarrollador ya tiene en la memoria muscular.
await bird.sms.send({
from: "Bird",
to: "+31612345678",
text: `Your code is ${code}.`,
category: "authentication",
});El mismo verbo. Diferente payload: con plantillas, con consentimiento, en el canal que dos mil millones de personas abren a diario.
await bird.whatsapp.send({
to: "+15005550006",
template: {
slug: "bird_otp",
language: "en",
components: [
{ type: "body", parameters: [{ type: "text", text: code }] },
],
},
});Precios
Desde menos de un céntimo hasta unos pocos céntimos por segmento
Con precio según uso y país de destino. La tabla completa por país está en la página de precios, y los descuentos por volumen se aplican automáticamente a nivel de cuenta. Sin tarifa de plataforma, sin tarifa por asiento, sin funciones de nivel bloqueadas tras compromisos anuales.
Envía tu primera solicitud antes de escribir una sola línea de código.
Toda la API pública es una colección de Postman, convertida a partir de la misma especificación OpenAPI de la que se generan los SDK, con una solicitud y respuesta de ejemplo en cada endpoint. Haz un fork en tu propio espacio de trabajo, configura una clave API y envía una solicitud en vivo.
Ponlo en práctica.
Continúa con la documentación, guías y ejemplos sobre este tema. Los recursos están en inglés.