WhatsApp is being upgraded

A API do WhatsApp Business, sem a burocracia dos BSPs.

Fornecedor oficial de soluções Meta Business desde que a API existe. Aprovação de templates, janelas de sessão, media, mensagens interativas — tudo resolvido. Mais de dois mil milhões de utilizadores mensais do WhatsApp, acessíveis a partir de um único endpoint, igual a qualquer outro canal Bird.

order-shipped.ts
200 · 480ms
import { BirdClient } from "@messagebird/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 do npm install ao primeiro envio

Envie uma mensagem WhatsApp na linguagem que já utiliza.

SDKs em todos os principais runtimes. O primeiro envio vai para um destinatário de teste autorizado (+15005550009) com um template pré-aprovado, para que possa implementar uma verificação CI antes de submeter o seu primeiro template para aprovação.

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

Dez coisas que o intermediário BSP esconde de si. Nós não escondemos.

O WhatsApp é controlado pela Meta. A escolha do BSP determina se essas barreiras aparecem no seu código ou ficam escondidas num painel. Nós escolhemos o código.

  1. 01

    Fornecedor oficial de soluções Meta Business (BSP)

    Relação direta com a Meta desde que a API existe. Sem trânsito revendido, sem intermediários de terceiros.

  2. 02

    Gestão de templates

    Submeta, acompanhe o estado de aprovação e receba um webhook assim que a Meta aprovar ou rejeitar.

  3. 03

    Reconhecimento da janela de sessão

    O SDK indica se a mensagem livre ou o template é permitido antes de enviar.

  4. 04

    Mensagens interativas

    Botões, listas, cartões de produto e WhatsApp Flows — declarados no mesmo payload.

  5. 05

    Media e conteúdo rico

    Imagens, vídeo, documentos, localização, contactos, pré-visualização de links, reações e respostas.

  6. 06

    WhatsApp Flows

    Formulários multi-passo dentro da app com validação de backend, definidos em JSON, executados pela Meta.

  7. 07

    Anúncios Click-to-WhatsApp

    Integração com o Meta Ads Manager para que os cliques nos anúncios cheguem a uma conversa que pode responder.

  8. 08

    Fallback entre canais

    Adicione fallback: "sms" a qualquer envio — a expiração de sessão encaminha automaticamente por SMS.

  9. 09

    Webhooks de mensagens recebidas

    Eventos assinados com HMAC para mensagens recebidas, confirmações de leitura, reações e estado de templates.

  10. 10

    2B+ utilizadores num único endpoint

    Mais de dois mil milhões de utilizadores mensais do WhatsApp acessíveis a partir de uma única chamada bird.whatsapp.send.

Por que construímos o WhatsApp

Fomos um dos primeiros BSPs do WhatsApp. Continuamos a ser um dos poucos que desenvolvem código consigo.

O WhatsApp é controlado. Precisa de um template aprovado; precisa de uma janela de sessão com opt-in; precisa da verificação de negócio da Meta. Essa parte não muda — e não vai mudar. O que muda é se o seu BSP torna essas barreiras mais fáceis ou mais difíceis de ultrapassar — expondo-as no seu código, em webhooks aos quais se pode subscrever, em erros que dizem exatamente o que está errado. Nós escolhemos a primeira opção.

order-shipped.ts
200 · 480ms
import { BirdClient } from "@messagebird/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 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": "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"
  }
}

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

  • whatsapp.queuedAceite pela API e em fila para envio à Meta.
  • whatsapp.sentEntregue à Cloud API da Meta.
  • whatsapp.deliveredA Meta confirma que a mensagem chegou ao dispositivo do destinatário.
  • whatsapp.readO destinatário abriu a mensagem (se as confirmações de leitura estiverem ativas).
  • whatsapp.failedFalha permanente — código de motivo no payload.
  • whatsapp.receivedMensagem recebida de um utilizador dentro da janela de sessão de 24h.
  • whatsapp.template.approvedA Meta aprovou um template que submeteu.
  • whatsapp.template.rejectedA Meta rejeitou um template — motivo da rejeição no payload.

O fallback para SMS é um atributo, não uma segunda integração.

Se o WhatsApp não conseguir entregar — sessão expirada, destinatário sem opt-in, template ainda não aprovado — o Bird encaminha a mesma mensagem por SMS no mesmo pedido. Mesma autenticação, mesmo contrato de idempotência, mesmo formato de webhook do outro lado.

WhatsApp com fallback.

whatsapp + fallback
await bird.whatsapp.send({
  to:       "+15005550009",
  template: "order_shipped",
  variables: { order_id: "BRD-49217" },
  fallback: "sms",
});

Um payload, uma autenticação. Expiração de sessão, falha de opt-in, template não aprovado — tudo encaminhado automaticamente por SMS.

SMS direto.

sms
await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your order BRD-49217 has shipped.`,
});

Os mesmos canais, endereçados diretamente. Use quando quiser o caminho SMS de forma explícita.

A partir de $0,005 por mensagem + taxa de conversa da Meta ao custo.

Preço por utilização. Repassamos a taxa de conversa da Meta ao custo — sem margem. Descontos por volume aplicam-se automaticamente acima de 100K/mês e novamente acima de 1M/mês. Sem taxa por utilizador, sem funcionalidades bloqueadas por compromissos anuais.

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: