A WhatsApp API you can ship this afternoon
One API key, one webhook, and the official Cloud API underneath. No Meta app review of your own to get started.
Send a message
Templates, text, media and interactive messages with idempotency keys and a durable retry queue.
Onboard a customer number
Create a link, send it to your customer, and receive account.connected when they approve on their phone.
Receive events
Inbound messages, delivery and read receipts, phone-app echoes and account status, all HMAC-signed.
Send a template
curl -X POST https://app.wacheap.com/v1/messages \
-H "Authorization: Bearer wbr_live_..." \
-H "Idempotency-Key: order-1042-confirmation" \
-H "Content-Type: application/json" \
-d '{
"account_id": "wa_account_123",
"to": "971501234567",
"type": "template",
"template": {
"name": "order_confirmation",
"language": "ar",
"parameters": ["Sara", "1042"]
}
}'Create an onboarding link
curl -X POST https://app.wacheap.com/v1/onboarding/links \
-H "Authorization: Bearer wbr_live_..." \
-H "Content-Type: application/json" \
-d '{
"label": "Al Noor Clinic",
"external_ref": "customer_8841",
"locale": "ar",
"redirect_url": "https://app.example.com/whatsapp/done"
}'
# 201 Created
{
"id": "onb_k3J9aB",
"status": "pending",
"url": "https://app.wacheap.com/connect/wbo_...",
"expires_at": "2026-11-15T09:00:00.000Z"
}Webhook when the number is connected
POST https://app.example.com/webhooks/wacheap
X-WaCheap-Signature: t=...,v1=...
{
"event": "account.connected",
"data": {
"account_id": "wa_account_456",
"onboarding_link_id": "onb_k3J9aB",
"external_ref": "customer_8841",
"display_phone": "+971 50 123 4567",
"connection": "coexistence"
}
}What you get
- OpenAPI 3.1 document and interactive reference
- TypeScript SDK and examples for Next.js and NestJS
- Scoped, hashed and revocable API keys per project
- Idempotent sends, retries with backoff and dead-letter visibility
- Signed webhooks with replay from the dashboard
- Coexistence status endpoint: linked state and history-sync progress
Connect your number today
Your phone app keeps working the whole time. If it is not for you, disconnect from the app in one tap.
14 days free. No card needed to start.