Zappi
Get started
Now in public beta

WhatsApp infrastructure built for developers.

REST, signed webhooks, realtime events. Spin up an instance in 60 seconds. No Twilio markup. No Meta business-verification ladder. Just an HTTP API that returns predictable JSON.

99.95%
API uptime (last 90d)
180ms
Median webhook delivery
2.4M+
Webhook deliveries / month
terminalbash
curl -sX POST https://api.zappi.dev/v1/instances \
  -H "Authorization: Bearer $ZAPPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "primary"}'

# → 201 Created
{
  "id": "inst_01J5XZ3RX9...",
  "name": "primary",
  "status": "pending",
  "created_at": "2026-05-01T12:34:56Z"
}
What you get

Infrastructure, not a SaaS chatbot.

Zappi is the layer between your application and WhatsApp. Everything is typed, signed, and observable.

REST API

Instances, messages, webhooks, API keys. JSON in, JSON out. Same Zod schemas the gateway validates against.

Signed webhooks

X-Zappi-Signature: t=…,v1=… verified the same way Stripe does. Automatic retries with exponential backoff.

Realtime SSE

/v1/events streams QR codes and instance state changes. No polling, no WebSocket gymnastics.

Instance lifecycle FSM

pending → qr → connecting → connected → disconnected. Every transition is a typed event.

Single-binary deploy

Postgres, Redis, one Node process. Run on Railway, Fly, Hetzner, or your laptop.

Open contracts

@zappi/contracts ships every request, response, and webhook payload as a Zod schema. Zero drift.

Talk to the API

From zero to first message in five steps.

Curl-first because if it works in curl it works in your stack. The same calls work from Node, Python, Go, anywhere with HTTP.

curlbash
curl -sX POST https://api.zappi.dev/v1/instances \
  -H "Authorization: Bearer $ZAPPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "primary"}'

# → 201 Created
{
  "id": "inst_01J5XZ3RX9...",
  "name": "primary",
  "status": "pending",
  "created_at": "2026-05-01T12:34:56Z"
}
How it works

Realtime architecture, observable from day one.

One Postgres, one Redis, one stateful Node process per region. SSE for clients, BullMQ for retried delivery, prom-client for everything that matters.

Your app
HTTPS
Gateway
api.zappi.dev
Baileys session
Baileys
Your endpoint
POST /webhook
Webhook queue
BullMQ · Redis
Gateway
emit('message.received')

Ship messaging in an afternoon.

Free tier covers one instance. Upgrade when you outgrow it.