Skip to main content
Once a customer has messaged you, you have a 24-hour window to reply with free-form text, media, or a quick-reply button message — no template required. This is the API your inbox and bots use to actually converse.

Endpoint

Request body

string
required
Recipient’s phone number in E.164 format.
string
required
One of text, image, document, interactive.
string
Message body, required when type is text.
string
Publicly reachable URL, required when type is image or document.
object
Required when type is interactive. Currently supports quick-reply buttons only: { "body": "...", "buttons": [{ "id": "yes", "title": "Yes" }] }. List-style interactive messages aren’t supported through this endpoint yet.
Not sure which Windows tab to use? The two aren’t interchangeable — pasting one into the wrong shell fails with a ... is not recognized error. Use CMD only in classic Command Prompt. Use PowerShell if your terminal is PowerShell, Windows Terminal, or VS Code’s integrated terminal — the default on most modern Windows setups. The PowerShell example uses Invoke-RestMethod rather than curl.exe to avoid PowerShell’s known issues passing complex quoted JSON to external executables.
Response

Checking message status

Response
status here reflects WhatsApp’s actual delivery lifecycle: sent, delivered, read, or failed (the accepted you get back from the POST just means Tanvik accepted the request — check this endpoint or the message.status webhook for what actually happened on the wire).
Sending outside the 24-hour window fails with send_failed — the error message will say the session window is closed. Use Send Templates to re-open the conversation instead.

Receiving messages

Inbound customer messages arrive as message.received webhook events, not through this endpoint — see the Webhook page for the payload shape, and Webhooks to register an endpoint.