Push is being upgraded

Notificações push para iOS, Android e web.

Abstração de gestão de tokens, opt-in por dispositivo, payloads nativos avançados, segmentação por segmento. Mesma autenticação, mesma idempotência, mesmos webhooks de qualquer outro canal Bird — porque a mesma equipa de engenharia construiu todos.

push.ts
200 · 0.2s
import { BirdClient } from "@messagebird/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 de npm install até ao primeiro envio

Envie uma notificação na linguagem que já utiliza.

SDKs em todos os principais runtimes. Registe um token a partir do seu cliente móvel ou web; envie por token ou por user_id a partir do seu backend.

1
2
3
4
5
6
7
8
9
10
import { BirdClient } from "@messagebird/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();

Dez primitivas que transformam APNs e FCM num único endpoint.

APNs e FCM reais por baixo — sem agregador de push de terceiros no meio. Apenas ocultamos as peculiaridades de cada plataforma por detrás de um formato único.

  1. 01

    iOS, Android e web numa única chamada

    Um bird.push.send. Distribuímos para APNs, FCM e o W3C Push Protocol por dispositivo registado.

  2. 02

    Abstração de gestão de tokens

    Registe um token com bird.push.tokens.register. Rastreamos plataforma, idioma e última atividade para que não tenha de o fazer.

  3. 03

    Envie por token ou por user_id

    Address a single device, or pass { user_id } and we fan out to every opted-in device they own.

  4. 04

    Estado de opt-in por dispositivo

    Cada token registado tem o seu próprio estado de opt-in. Revogue um sem afetar os outros.

  5. 05

    Payloads nativos avançados

    Título, corpo, imagem, botões de ação, URL de deep-link, dados personalizados — mapeados corretamente para APNs alert e FCM notification.

  6. 06

    Notificações silenciosas / em segundo plano

    Passe content_available: true e encaminhamos corretamente via APNs background e FCM data-only por plataforma.

  7. 07

    Segmentação por segmento

    Etiquete utilizadores no momento do registo; direcione por etiqueta a partir de bird.push.send. Sem necessidade de integração com CDP de terceiros.

  8. 08

    Recibos de entrega e abertura

    Eventos para push.delivered, push.opened, push.dismissed. Mesmo envelope HMAC de qualquer outro canal.

  9. 09

    Ciclo de vida dos tokens gerido automaticamente

    Quando APNs / FCM devolve um token não registado, marcamo-lo como inativo e paramos de enviar. Sem limpeza manual.

  10. 10

    Mesma autenticação, mesmo envelope de erros

    Uma chave API para Push, SMS, Email, WhatsApp, Voice. Um único registo de tipos de erro para todos.

Por que criamos o Push

Porque o push não deveria estar num fornecedor diferente do seu SMS, do seu email e das suas verificações.

Todas as equipas de produto acabam com a mesma stack: APNs para iOS, FCM para Android, um service worker para web, e uma tabela de base de dados que regista qual utilizador tem quais tokens com qual estado de opt-in. Construímos essa tabela, depois construímo-la novamente, e depois expusemo-la como bird.push.tokens.register e bird.push.send. Mesma autenticação, mesma idempotência, mesmo envelope de erros que Email e SMS — para que o OTP que falha via push recorra a SMS no mesmo pedido.

push.ts
200 · 0.2s
import { BirdClient } from "@messagebird/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 mudança de estado é um webhook.

Payloads assinados com HMAC, protegidos contra replay, idempotentes. O mesmo envelope em todos os canais Bird — aprenda um, aprendeu todos.

POST /webhooks/bird
signed
{
  "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
  }
}

Agenda de tentativas: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter após a tentativa final; cada evento em dead-letter pode ser reprocessado a partir do painel ou da API.

  • push.queuedAceite pela API e colocado na fila para envio.
  • push.sentEntregue ao servidor APNs / FCM / W3C Push.
  • push.deliveredO fornecedor confirmou a entrega ao dispositivo (quando disponível — APNs é best-effort).
  • push.openedO utilizador tocou na notificação (se a sua app o instrumentar).
  • push.dismissedO utilizador descartou sem abrir (se a sua app o instrumentar).
  • push.failedFalha permanente (token não registado, app removida). O token é desativado automaticamente.

Se integrou SMS, integrou Push.

Mesma autenticação, mesmo contrato de idempotência, mesmo envelope de erros, mesmo formato de webhook. A diferença é o transporte — não a forma como o chama.

Push.

push
await bird.push.send({
  to:    { user_id: "usr_4hQ2m" },
  title: "Your code",
  body:  `Code: ${code}`,
});

Uma chamada. Distribuímos para todos os dispositivos com opt-in do utilizador, via APNs, FCM e web.

SMS.

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

Mesmo envelope, mesmo contrato de idempotência. Recorra a SMS quando o push falha — ou direcione SMS diretamente.

$0,0005 por notificação, em todas as plataformas.

Preço por notificação entregue. Mesma tarifa em iOS, Android e web. APNs e FCM são gratuitos a montante, por isso cobramos pelo encaminhamento e pelo painel, não pelo transporte. Descontos por volume aplicados automaticamente acima de 10M/mês.

Comece com um canal.
Adicione os outros quando estiver pronto.

Uma chave API de teste é sua imediatamente. A produção é desbloqueada quando você adiciona um método de pagamento e verifica um remetente.

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours: