Send a WhatsApp message
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 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" ] }}Toggle transcription for a number's WhatsApp calls PUT
Sets the SautiKit-side "transcribe WhatsApp calls" flag. Like recording, this is SautiKit-side speech-to-text over our own SIP media leg — Meta's native transcription is Cloud/WebRTC-only and unavailable to a BYOC SIP integration.
Mark an inbound message as read POST
Sends a read receipt for an inbound message — the blue ticks the contact sees. Name the number the message arrived on with either `connection_id` or `number_id`, exactly as you would for a send. Sautikit does not retain messages, so it cannot infer the number from the `wamid` alone; the `wamid` comes from the `whatsapp.event.received` webhook that delivered the message. **API-key scope:** `whatsapp.messages`.