API Reference
WhatsApp Messaging

Send a WhatsApp message

POST
/v1/whatsapp/messages

Sends a text or template message from one of your connected WhatsApp numbers.

Pick the sending number with EITHER connection_id (the WhatsApp connection; its WhatsApp number is used) OR number_id (the Meta phone_number_id directly). Exactly one is required.

Returns 202 with Meta's wamid. Delivery is asynchronous — subscribe to the whatsapp.event.received workspace webhook, which relays Meta's delivery-status payloads to you verbatim.

Sautikit does not store messages. The wamid is your handle for correlating the status events that follow.

WhatsApp only permits free-form text inside a 24-hour customer service window opened by the contact messaging you. Outside it, use type: template with a Meta-approved template.

API-key scope: whatsapp.messages.

Authorization

bearerAuth
AuthorizationBearer <token>

Long-lived ES256 JWT minted from the dashboard (https://app.sautikit.com/developers/api-keys). Signed by the platform keyring. Carries workspace_id and scopes claims; revoked via the platform deny-list.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/whatsapp/messages" \  -H "Content-Type: application/json" \  -d '{    "number_id": "109876543210987",    "to": "254700000001",    "type": "text",    "text": {      "body": "Your order is ready for pickup."    }  }'
{  "wamid": "string",  "status": "accepted"}
{  "error": {    "code": "validation.bad_request",    "message": "string",    "request_id": "string",    "details": [      "string"    ]  }}
{  "error": {    "code": "validation.bad_request",    "message": "string",    "request_id": "string",    "details": [      "string"    ]  }}
{  "error": {    "code": "validation.bad_request",    "message": "string",    "request_id": "string",    "details": [      "string"    ]  }}