Notificaciones push para iOS, Android y web.
Abstracción de gestión de tokens, opt-in por dispositivo, payloads nativos enriquecidos, segmentación por segmentos. Misma autenticación, misma idempotencia, mismos webhooks que cualquier otro canal de Bird — porque el mismo equipo de ingeniería los construyó todos.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
// Send by device token...
const { data, error } = await bird.push.send({
to: "token_aPa91Hb...XzQ",
title: "Your driver is two minutes away",
body: "Tap to see the live map.",
data: { ride_id: "ride_2891" },
}).safe();
// ...or by user_id — we fan out to every opted-in device.
await bird.push.send({
to: { user_id: "usr_4hQ2m" },
title: "Your code is 482917",
body: "Enter it on the login screen.",
data: { kind: "otp" },
});
if (error) throw error;
console.log(data.id);
// → "push_2nQ81oP3..."5 minutos desde npm install hasta el primer envío
Envía una notificación desde el lenguaje que ya usas.
SDKs en todos los runtimes principales. Registra un token desde tu cliente móvil o web; envía por token o por user_id desde tu backend.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.push.send({
to: "token_aPa91Hb",
title: "Hello",
body: "From Bird Push",
data: { kind: "demo" },
}).safe();Diez primitivas que convierten APNs y FCM en un solo endpoint.
APNs y FCM reales bajo el capó — sin agregador de push de terceros en el medio. Solo ocultamos las particularidades de cada plataforma detrás de una única interfaz.
- 01
iOS, Android y web desde una sola llamada
Un solo bird.push.send. Distribuimos a APNs, FCM y el protocolo W3C Push por cada dispositivo registrado.
- 02
Abstracción de gestión de tokens
Registra un token con bird.push.tokens.register. Rastreamos plataforma, idioma y última actividad para que tú no tengas que hacerlo.
- 03
Envía por token o por user_id
Address a single device, or pass
{ user_id }and we fan out to every opted-in device they own. - 04
Estado de opt-in por dispositivo
Cada token registrado tiene su propio estado de opt-in. Revoca uno sin afectar a los demás.
- 05
Payloads nativos enriquecidos
Título, cuerpo, imagen, botones de acción, URL de deep-link, datos personalizados — mapeados correctamente a APNs alert y FCM notification.
- 06
Notificaciones silenciosas / en segundo plano
Pasa content_available: true y enrutamos correctamente a través de APNs background y FCM data-only según la plataforma.
- 07
Segmentación por segmentos
Etiqueta usuarios en el momento del registro; dirige por etiqueta desde bird.push.send. Sin necesidad de integración con un CDP de terceros.
- 08
Recibos de entrega y apertura
Eventos para push.delivered, push.opened, push.dismissed. Mismo sobre HMAC que cualquier otro canal.
- 09
Ciclo de vida de tokens gestionado
Cuando APNs / FCM devuelve un token no registrado, lo marcamos como inactivo y dejamos de enviar. Sin limpieza manual.
- 10
Misma autenticación, mismo formato de errores
Una sola clave API para Push, SMS, Email, WhatsApp, Voice. Un solo registro de tipos de error para todos.
Why we build Push
Porque push no debería estar en un proveedor distinto al de tu SMS, tu email y tus verificaciones.
Todos los equipos de producto terminan con el mismo stack: APNs para iOS, FCM para Android, un service worker para web, y una tabla de base de datos que rastrea qué usuario tiene qué tokens con qué estado de opt-in. Construimos esa tabla, luego la construimos de nuevo, y luego la expusimos como bird.push.tokens.register y bird.push.send. Misma autenticación, misma idempotencia, mismo formato de errores que Email y SMS — así el OTP que falla por push recurre a SMS en la misma solicitud.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
// Send by device token...
const { data, error } = await bird.push.send({
to: "token_aPa91Hb...XzQ",
title: "Your driver is two minutes away",
body: "Tap to see the live map.",
data: { ride_id: "ride_2891" },
}).safe();
// ...or by user_id — we fan out to every opted-in device.
await bird.push.send({
to: { user_id: "usr_4hQ2m" },
title: "Your code is 482917",
body: "Enter it on the login screen.",
data: { kind: "otp" },
});
if (error) throw error;
console.log(data.id);
// → "push_2nQ81oP3..."Cada cambio de estado es un webhook.
Payloads firmados con HMAC, protegidos contra replay, idempotentes. El mismo sobre en cada canal de Bird — aprende uno y los habrás aprendido todos.
{
"type": "push.delivered",
"id": "evt_9pT81y...",
"created_at": "2026-05-19T15:42:01.221Z",
"data": {
"push_id": "push_2nQ81oP3",
"user_id": "usr_4hQ2m",
"platform": "ios",
"device": "iPhone15,2",
"latency_ms": 218
}
}Calendario de reintentos: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter tras el último intento; cada evento en dead-letter se puede reenviar desde el dashboard o la API.
push.queuedAceptado por la API y en cola para envío.push.sentEntregado a APNs / FCM / servidor W3C Push.push.deliveredEl proveedor confirmó la entrega al dispositivo (cuando está disponible — APNs es best-effort).push.openedEl usuario tocó la notificación (si tu app lo instrumenta).push.dismissedEl usuario descartó sin abrir (si tu app lo instrumenta).push.failedFallo permanente (token no registrado, app eliminada). El token se desactiva automáticamente.
Si has integrado SMS, has integrado Push.
Misma autenticación, mismo contrato de idempotencia, mismo formato de errores, misma estructura de webhooks. La diferencia es el transporte — no cómo lo llamas.
Push.
await bird.push.send({
to: { user_id: "usr_4hQ2m" },
title: "Your code",
body: `Code: ${code}`,
});Una sola llamada. Distribuimos a cada dispositivo con opt-in que posea el usuario, a través de APNs, FCM y la web.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your code is ${code}.`,
});Mismo sobre, mismo contrato de idempotencia. Recurre a SMS cuando push falla — o dirige a SMS directamente.
$0,0005 por notificación, en todas las plataformas.
Precio por notificación entregada. Misma tarifa en iOS, Android y web. APNs y FCM son gratuitos en origen, así que cobramos por el enrutamiento y el dashboard, no por el transporte. Los descuentos por volumen se aplican automáticamente a partir de 10M/mes.