Pillar Guide · Meta Graph API v25.0+

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 · Send Text Message
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 · Send Template Message
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 · Send Interactive Buttons
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 · Klaros REST API Outbound
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.

Quick Resource Navigation

→ Error Code Index (100+ codes) → Webhook cURL Debugger → WhatsApp Flows Blueprints → BSP Markup Index