Send a message
Build a request to copy
This page never sends a request. Fill in the fields, then copy the request and run it from your server.
curl -X POST 'https://api.whatsable.app/v1/messages' \
-H 'Content-Type: application/json' \
-d '{
"to": "+5491155550000",
"from": "cm2v8a1b20002qz8h9i0j1k2l",
"type": "template",
"template": {
"id": "cm2v8t1a00001qz8habcd1234",
"variables": {
"1": "Ana",
"2": "#1042",
"header_image": {
"url": "https://acme.example/box.jpg"
},
"button_0": "1042"
}
}
}'Sends one WhatsApp message: text, a template, an image, a video, an audio file, a sticker, a document or reply buttons.
Check
status, not the status code. A 201 means that the message was recorded.
sent: WhatsApp accepted it.failed, retryable: try again later with a newIdempotency-Key.failed, not retryable: do not resend. Showerror.how_to_fixto whoever can fix it.
Outside the 24-hour window, only a template reaches the contact.
bearerAuthAuthorizationBearer <nfy_live_<32 characters>>An API key from Settings > API keys, sent as Authorization: Bearer <key>.
Idempotency-Key?stringAny string up to 255 characters. A repeat with the same key and body answers the stored response; with another body, 409 idempotency_key_reused.
length <= 255application/json- body
A message to send. type decides which object carries the content. Every type except template is a session message and needs an open 24-hour window.
to?stringAn E.164 phone (+, spaces, dashes optional), a Business-Scoped User ID or a WhatsApp @username. A new phone or ID creates a contact; a username must be known.
1 <= length <= 256conversation_id?stringSend into this existing conversation, from its number. Exactly one of to and conversation_id.
1 <= length <= 64from?stringThe number to send from, by id or E.164 phone. Absent, the key's default number sends. Never another fallback.
1 <= length <= 64type*stringtext*Created does not mean sent: check status.
application/json- response
A WhatsApp message, inbound or outbound.
object*stringid*string1 <= length <= 64conversation_id*string1 <= length <= 64contact_id*string1 <= length <= 64number_id*stringThe business number the message was sent from or received on.
1 <= length <= 64direction*string"inbound""outbound"type*|stringstatus*stringpending (Meta did not acknowledge it yet), sent, delivered, read or failed. A send answers sent or failed.
"pending""sent""delivered""read""failed"sent_by*||Who sent an outbound message. Null on inbound.
to*|The recipient of an outbound message. Null on inbound.
from*|The sender of an inbound message. Null on outbound.
text*|The text, a caption, or the body of a template or buttons message.
template*|The template a template message used. Null otherwise.
media*|nullwhatsapp_message_id*|Meta's message id (wamid). Null when Meta never accepted the message.
error*|Why the message failed. Null unless status is failed.
created_at*stringdate-timedelivered_at*|nullread_at*|nulledited_at*|When the customer edited this inbound message.
deleted_at*|When the customer withdrew this inbound message. Its text is kept.
referral*|Meta's Click-to-WhatsApp referral object as Meta sent it, with keys such as ctwa_clid. Set only on the inbound message that started a chat from an ad or a post.
button_reply*|nullcurl -X POST 'https://api.whatsable.app/v1/messages' \ -H 'Content-Type: application/json' \ -d '{ "to": "+5491155550000", "from": "cm2v8a1b20002qz8h9i0j1k2l", "type": "template", "template": { "id": "cm2v8t1a00001qz8habcd1234", "variables": { "1": "Ana", "2": "#1042", "header_image": { "url": "https://acme.example/box.jpg" }, "button_0": "1042" } }}'{ "object": "message", "id": "cm2v8m1a00001qz8h0p1q2r3s", "conversation_id": "cm2v8c1a00001qz8h4t5u6v7w", "contact_id": "cm2v8k1a00001qz8h8x9y0z1a", "number_id": "cm2v8a1b20002qz8h9i0j1k2l", "direction": "outbound", "type": "template", "status": "sent", "sent_by": "api", "to": { "phone": "+5491155550000", "wa_user_id": null, "username": null }, "from": null, "text": "Hi Ana, your order #1042 is on its way.", "template": { "id": "cm2v8t1a00001qz8habcd1234", "name": "order_shipped", "language": "en_US" }, "media": null, "whatsapp_message_id": "wamid.HBgMNTQ5MTE1NTU1MDAwMBUCABEYEjQ", "error": null, "created_at": "2026-10-20T19:51:21Z", "delivered_at": null, "read_at": null, "edited_at": null, "deleted_at": null, "referral": null, "button_reply": null}