Content-Type: application/json. Body is forwarded as-is to WhatsApp Cloud API. Success response is raw Cloud API JSON (not wrapped in V3Response). For legacy form send use POST /bizgate/app/{appId}/messaging/send instead. One endpoint sends every message type — the type is chosen with the type field and the sibling object it names. Every type below has its own named cURL in the code-samples panel, and the matching payload under Examples on the request body: | # | Example | type | Notes |
|---|---------|--------|-------|
| 1 | Text | text | context replies to an earlier message; preview_url renders link previews |
| 2 | Image | image | id (uploaded) or link (hosted), optional caption |
| 3 | Video | video | id or link; .3gp/.mp4, 16 MB max |
| 4 | Document | document | filename sets the name shown in chat |
| 5 | Audio | audio | id or link; no caption |
| 6 | Sticker | sticker | WebP, uploaded beforehand |
| 7 | Contacts | contacts | array of contact cards |
| 8 | Interactive buttons | interactive | interactive.type=button, up to 3 reply buttons |
| 9 | Reaction | reaction | empty emoji removes the reaction |
| 10 | Flow | interactive | interactive.type=flow |
| 11 | Template | template | components carry the body parameters |
| 12 | PIX template (Brazil) | template | order_details button with pix_dynamic_code |
| 13 | Boleto (Brazil) | interactive | interactive.type=order_details with boleto |
| 14 | Session message | text | free-form reply inside the 24-hour window | Session vs template messages. A session message is any non-template message sent while the customer service window is open — the window opens when the user messages the business and closes 24 hours after their most recent message. Examples 1-10 and 14 are session messages; 11-13 are template messages, the only kind that may be sent once the window has closed. The request shape is the same either way, so the difference is not visible in the payload: the window state at send time decides whether WhatsApp accepts it, and a send outside the window is rejected upstream and relayed back as a Meta error. Session messages (1–10) need an open 24-hour customer service window; templates (11, 12) do not. Media ids come from the media upload API; link must be a publicly reachable URL.
Request parameters
Path parameters
| Key | Description | Values | Data Type | Required/Optional |
|---|---|---|---|---|
| appId | Identifier of the WhatsApp app the call acts on. | 6f414190-d45c-4671-bca1-fb6c3018cb13 | String | Required |
Body
| Key | Description | Values | Data Type | Required/Optional |
|---|---|---|---|---|
| messaging_product | Always "whatsapp". | — | Required | |
| recipient_type | Always "individual"; group recipients are not supported here. | individual | — | Optional |
| to | E.164 without + | 12XXXXXXX92 | — | Required |
| type | text, template, image, … | template | — | Optional |
| template | Required when type=template | — | — | Optional |
Sample success response (200)
{
"messages": [
{
"id": "GUPSHUP_MESSAGE_ID"
}
],
"messaging_product": "whatsapp",
"contacts": [
{
"input": "DESTINATION_PHONE_NO",
"wa_id": "DESTINATION_PHONE_NO"
}
]
}| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||