La API de WhatsApp Business, sin el rodeo del BSP.
Proveedor oficial de soluciones de negocio de Meta desde que existe la API. Aprobación de plantillas, ventanas de sesión, multimedia, mensajes interactivos: todo resuelto. Más de dos mil millones de usuarios mensuales de WhatsApp, accesibles desde un único endpoint que funciona igual que cualquier otro canal de Bird.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.whatsapp.send({
to: "+15005550009",
template: "order_shipped",
locale: "en_US",
variables: {
customer_name: "Ada",
order_id: "BRD-49217",
tracking_url: "https://track.bird.dev/49217",
eta: "Thursday, May 21",
},
}).safe();
if (error) throw error;
console.log(data.id);
// → "wa_msg_8nB91Yk3p..."5 minutos desde npm install hasta el primer envío
Envía un WhatsApp desde el lenguaje que ya usas.
SDK en todos los runtimes principales. El primer envío va a un destinatario de prueba autorizado (+15005550009) con una plantilla preaprobada, para que puedas incluir un check de CI antes de enviar tu primera plantilla a aprobación.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.whatsapp.send({
to: "+15005550009",
template: "hello_world",
locale: "en_US",
}).safe();Diez cosas que el filtro del BSP te oculta. Nosotros no.
WhatsApp está controlado por Meta. Elegir un BSP es decidir si las restricciones aparecen en tu código o se esconden en un dashboard. Nosotros elegimos el código.
- 01
Proveedor oficial de soluciones de negocio de Meta (BSP)
Relación directa con Meta desde que existe la API. Sin tránsito revendido, sin saltos de terceros.
- 02
Gestión de plantillas
Envía, rastrea el estado de aprobación y recibe un webhook en cuanto Meta aprueba o rechaza.
- 03
Control de ventana de sesión
El SDK te indica si se permite formato libre o plantilla antes de enviar.
- 04
Mensajes interactivos
Botones, listas, tarjetas de producto y WhatsApp Flows, declarados en el mismo payload.
- 05
Multimedia y contenido enriquecido
Imágenes, vídeo, documentos, ubicación, contactos, vistas previas de enlaces, reacciones y respuestas.
- 06
WhatsApp Flows
Formularios multi-paso dentro de la app con validación en backend, definidos como JSON, ejecutados por Meta.
- 07
Anuncios Click-to-WhatsApp
Integración con Meta Ads Manager para que los clics en anuncios lleguen a una conversación que puedas responder.
- 08
Fallback multicanal
Añade fallback: "sms" a cualquier envío: la expiración de sesión se enruta por SMS automáticamente.
- 09
Webhooks de mensajes entrantes
Eventos firmados con HMAC para mensajes entrantes, confirmaciones de lectura, reacciones y estado de plantillas.
- 10
Más de 2 mil millones de usuarios en un solo endpoint
Más de dos mil millones de usuarios mensuales de WhatsApp accesibles desde una sola llamada a bird.whatsapp.send.
Why we build WhatsApp
Fuimos uno de los primeros BSP de WhatsApp. Seguimos siendo de los pocos que programan contigo.
WhatsApp está controlado. Necesitas una plantilla aprobada, una ventana de sesión con opt-in y una verificación de negocio de Meta. Eso no cambia, ni cambiará. Lo que cambia es si tu BSP facilita o dificulta pasar esas restricciones: exponiéndolas en tu código, en webhooks a los que puedes suscribirte, en errores que dicen exactamente qué está mal. Nosotros elegimos lo primero.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.whatsapp.send({
to: "+15005550009",
template: "order_shipped",
locale: "en_US",
variables: {
customer_name: "Ada",
order_id: "BRD-49217",
tracking_url: "https://track.bird.dev/49217",
eta: "Thursday, May 21",
},
}).safe();
if (error) throw error;
console.log(data.id);
// → "wa_msg_8nB91Yk3p..."Cada cambio de estado es un webhook.
Payloads firmados con HMAC, protegidos contra repetición, idempotentes. El mismo formato en todos los canales de Bird: aprende uno y los conoces todos.
{
"type": "whatsapp.read",
"id": "evt_7kQ02v...",
"created_at": "2026-05-19T15:42:08.114Z",
"data": {
"wa_msg_id": "wa_msg_8nB91Yk3p",
"from": "+15551234567",
"to": "+15005550009",
"conversation_id": "wa_conv_3pX1g7t",
"template": "order_shipped",
"delivered_at": "2026-05-19T15:42:01.802Z",
"read_at": "2026-05-19T15:42:08.020Z"
}
}Programa de reintentos: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter tras el último intento; cada evento dead-letter se puede reenviar desde el dashboard o la API.
whatsapp.queuedAceptado por la API y en cola para envío a Meta.whatsapp.sentEntregado a la Cloud API de Meta.whatsapp.deliveredMeta confirma que el mensaje llegó al dispositivo del destinatario.whatsapp.readEl destinatario abrió el mensaje (si las confirmaciones de lectura están activadas).whatsapp.failedFallo permanente: código de motivo en el payload.whatsapp.receivedMensaje entrante de un usuario dentro de la ventana de sesión de 24 h.whatsapp.template.approvedMeta aprobó una plantilla que enviaste.whatsapp.template.rejectedMeta rechazó una plantilla: motivo del rechazo en el payload.
El fallback a SMS es un solo atributo, no una segunda integración.
Si WhatsApp no puede entregar —sesión expirada, destinatario sin opt-in, plantilla aún no aprobada— Bird enruta el mismo mensaje por SMS en la misma solicitud. Misma autenticación, mismo contrato de idempotencia, mismo formato de webhook en el otro extremo.
WhatsApp con fallback.
await bird.whatsapp.send({
to: "+15005550009",
template: "order_shipped",
variables: { order_id: "BRD-49217" },
fallback: "sms",
});Un payload, una autenticación. Expiración de sesión, falta de opt-in, plantilla no aprobada: todo se enruta por SMS automáticamente.
SMS directo.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order BRD-49217 has shipped.`,
});Los mismos canales, dirigidos directamente. Úsalo cuando quieras la ruta de SMS de forma explícita.
Desde $0.005 por mensaje + tarifa de conversación de Meta a precio de coste.
Precio por uso. Trasladamos la tarifa de conversación de Meta a precio de coste, sin margen. Los descuentos por volumen se aplican automáticamente a partir de 100K/mes y de nuevo a partir de 1M/mes. Sin tarifa por usuario, sin funciones bloqueadas tras compromisos anuales.