Coming Soon

La WhatsApp Business API, senza il labirinto dei BSP.

Meta Business Solution Provider ufficiale da quando esiste l'API. Approvazione template, finestre di sessione, media, messaggi interattivi: tutto gestito. Oltre due miliardi di utenti WhatsApp al mese, raggiungibili da un unico endpoint identico a ogni altro canale Bird.

order-shipped.ts
200 · 480ms
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 minuti da npm install al primo invio

Invia un messaggio WhatsApp dal linguaggio che già utilizzi.

SDK per ogni runtime principale. Il primo invio va a un destinatario di test autorizzato (+15005550009) con un template pre-approvato, così puoi integrare un check CI prima ancora di sottoporre il tuo primo template per l'approvazione.

1
2
3
4
5
6
7
8
9
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();

Dieci cose che il filtro del BSP ti nasconde. Noi no.

WhatsApp è controllato da Meta. La scelta del BSP si riduce a questo: i vincoli compaiono nel codice o vengono nascosti in una dashboard. Noi abbiamo scelto il codice.

  1. 01

    Meta Business Solution Provider (BSP) ufficiale

    Rapporto diretto con Meta da quando esiste l'API. Nessun transito rivenduto, nessun passaggio tramite terzi.

  2. 02

    Gestione dei template

    Invia, monitora lo stato di approvazione e ricevi un webhook non appena Meta approva o rifiuta.

  3. 03

    Gestione della finestra di sessione

    L'SDK ti indica se è consentito il formato libero o il template prima dell'invio.

  4. 04

    Messaggi interattivi

    Pulsanti, liste, schede prodotto e WhatsApp Flows — dichiarati nello stesso payload.

  5. 05

    Media e contenuti rich

    Immagini, video, documenti, posizione, contatti, anteprime link, reazioni e risposte.

  6. 06

    WhatsApp Flows

    Form in-app a più passaggi con validazione backend, definiti in JSON, eseguiti da Meta.

  7. 07

    Click-to-WhatsApp Ads

    Integrazione con Meta Ads Manager: i clic sugli annunci aprono una conversazione a cui puoi rispondere.

  8. 08

    Fallback cross-channel

    Aggiungi fallback: "sms" a qualsiasi invio — alla scadenza della sessione il messaggio viene instradato automaticamente via SMS.

  9. 09

    Webhook per messaggi in entrata

    Eventi firmati HMAC per messaggi in entrata, conferme di lettura, reazioni e stato dei template.

  10. 10

    2B+ utenti su un unico endpoint

    Oltre due miliardi di utenti WhatsApp al mese raggiungibili con una singola chiamata bird.whatsapp.send.

Why we build WhatsApp

Siamo stati tra i primi BSP di WhatsApp. Siamo ancora tra i pochi che scrivono codice insieme a te.

WhatsApp è controllato. Serve un template approvato, una finestra di sessione con opt-in e una verifica aziendale Meta. Questo non cambia — e non cambierà. Ciò che cambia è se il tuo BSP rende quei vincoli più facili o più difficili da superare — esponendoli nel codice, su webhook a cui puoi iscriverti, con errori che dicono esattamente cosa non va. Noi abbiamo scelto la prima strada.

order-shipped.ts
200 · 480ms
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..."

Ogni cambio di stato è un webhook.

Payload firmati HMAC, protetti dal replay, idempotenti. Lo stesso formato su ogni canale Bird: ne impari uno, li conosci tutti.

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"
  }
}

Programma di retry: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter dopo l'ultimo tentativo; ogni evento dead-letter è riproducibile dalla dashboard o dall'API.

  • whatsapp.queuedAccettato dall'API e in coda per l'invio a Meta.
  • whatsapp.sentConsegnato alla Cloud API di Meta.
  • whatsapp.deliveredMeta conferma che il messaggio è arrivato sul dispositivo del destinatario.
  • whatsapp.readIl destinatario ha aperto il messaggio (se le conferme di lettura sono attive).
  • whatsapp.failedErrore permanente — codice del motivo nel payload.
  • whatsapp.receivedMessaggio in entrata da un utente all'interno della finestra di sessione di 24 ore.
  • whatsapp.template.approvedMeta ha approvato un template che hai inviato.
  • whatsapp.template.rejectedMeta ha rifiutato un template — motivo del rifiuto nel payload.

Il fallback su SMS è un attributo, non una seconda integrazione.

Se WhatsApp non riesce a consegnare — sessione scaduta, destinatario senza opt-in, template non ancora approvato — Bird instrada lo stesso messaggio via SMS nella stessa richiesta. Stessa autenticazione, stesso contratto di idempotenza, stesso formato webhook dall'altra parte.

WhatsApp con fallback.

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

Un payload, un'autenticazione. Scadenza sessione, mancato opt-in, template non approvato: tutto instradato automaticamente via SMS.

SMS diretto.

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

Gli stessi canali, indirizzati direttamente. Usalo quando vuoi il percorso SMS in modo esplicito.

A partire da $0,005 per messaggio + tariffa di conversazione Meta al costo.

Tariffazione a consumo. La tariffa di conversazione Meta viene trasferita al costo — senza ricarico. Sconti volume automatici sopra 100K/mese e di nuovo sopra 1M/mese. Nessun costo per utente, nessuna funzionalità bloccata dietro impegni annuali.

Inizia con un canale.
Aggiungi gli altri quando sei pronto.

Una chiave API di test è subito tua. La produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

Inizia oraLeggi la documentazioneo

Using Claude Code, Cursor, or Codex? Point it at our MCP server — tools for every channel we expose, with scoped agent keys.

Cursor