WhatsApp Cloud API developer resources
Any business can use Meta's WhatsApp Cloud API directly, without a BSP in the message path. This page covers the two things that stop most integrations on day one, system user tokens and webhook signature verification, then points at the references that go deep rather than restating them.
1. Authentication & System User Tokens
WhatsApp Cloud API requests require a permanent Meta System User Access Token sent in the
Authorization: Bearer header.
curl -X POST "https://graph.facebook.com/v25.0/YOUR_PHONE_NUMBER_ID/messages" \
-H "Authorization: Bearer YOUR_SYSTEM_USER_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "15551234567",
"type": "text",
"text": {
"preview_url": false,
"body": "Hello from direct Meta Cloud API!"
}
}'
2. Template Message API Request
Send outbound utility or marketing templates with dynamic header, body, and button parameters.
curl -X POST "https://graph.facebook.com/v25.0/YOUR_PHONE_NUMBER_ID/messages" \
-H "Authorization: Bearer YOUR_SYSTEM_USER_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"to": "15551234567",
"type": "template",
"template": {
"name": "order_confirmation",
"language": { "code": "en_US" },
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "Customer Name" },
{ "type": "text", "text": "ORDER-9821" }
]
}
]
}
}'
3. Interactive Buttons & Quick Replies
Send interactive button choices directly within the chat window.
curl -X POST "https://graph.facebook.com/v25.0/YOUR_PHONE_NUMBER_ID/messages" \
-H "Authorization: Bearer YOUR_SYSTEM_USER_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"to": "15551234567",
"type": "interactive",
"interactive": {
"type": "button",
"body": { "text": "Would you like to schedule a demo?" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "btn_yes", "title": "Book Demo" } },
{ "type": "reply", "reply": { "id": "btn_no", "title": "Not Now" } }
]
}
}
}'
4. Klaros Self-Deployed REST API
Send outbound messages through your self-deployed Cloudflare Worker instance with scoped API keys and zero messaging markup.
curl -X POST "https://your-workspace.workers.dev/api/v1/messages/send" \
-H "Authorization: Bearer uni_agt_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+15551234567",
"message": "Hello from Klaros self-deployed infrastructure!"
}'
5. Webhook Verification Protocol
Meta verifies inbound webhooks using a GET handshake token and signs POST payloads with HMAC SHA-256.