Build on Wafonic.
Ship in an afternoon.
A straightforward REST API for WhatsApp: send text, media and template messages, manage instances, and get a webhook every time a message changes state — no raw Graph API required.
curl -X POST https://api.wafonic.com/api/v1/messages \ -H "Authorization: Bearer $WAFONIC_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "instance_id": "inst_8f21c0", "to": "+15550100", "type": "text", "text": { "body": "Your order #1042 has shipped." } }'Everything you need
An API built for shipping
Simple REST API
Send a WhatsApp message with one POST request — the same call for QR and Official numbers.
Multi-instance support
Connect multiple numbers and target any of them by instance_id.
Reliable webhooks
Delivery status and inbound messages pushed to your endpoint, with retries.
API keys you control
Generate and revoke keys from the dashboard, scoped per workspace.
Secure by default
HTTPS only, credentials encrypted at rest, signed webhook payloads.
Delivery log
Inspect every request and webhook attempt when something looks off.
Works with any language
Simple HTTP calls mean you can integrate in minutes.
const res = await fetch("https://api.wafonic.com/api/v1/messages", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WAFONIC_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
instance_id: "inst_8f21c0",
to: "+15550100",
type: "text",
text: { body: "Hello from Node.js! 👋" },
}),
});
console.log(await res.json());Core endpoints
Every endpoint works the same way on QR / Unofficial and Meta Business API numbers.
- POST
/api/v1/messagesSend text, media or template messages - GET
/api/v1/messages/:idFetch a message and its delivery state - GET
/api/v1/instancesList connected WhatsApp numbers - POST
/api/v1/instancesCreate a new instance and get a QR code - POST
/api/v1/webhooksRegister or update your webhook endpoint
Webhook events
Point one HTTPS endpoint at Wafonic and receive delivery status plus inbound messages.
- message.sent
- The message was accepted and sent.
- message.delivered
- The recipient's device received the message.
- message.failed
- Delivery failed, with a reason code.
- message.received
- An inbound message arrived on one of your numbers.
You don't have to manage all of this over the wire: generate and revoke API keys from the dashboard, and inspect every webhook attempt in the webhook delivery log when something looks off. Access tokens and credentials are encrypted at rest.
Ready to add WhatsApp to your app?
Start free, get an API key in minutes and send your first message today.