Send Messages
Send a WhatsApp message from one of your customers’ onboarded phone numbers.
POST /api/v25.0/{PHONE_NUMBER_ID}/messages
Authorization: Bearer pk_live_<your-key>
Content-Type: application/json{PHONE_NUMBER_ID} is one of the IDs returned by
Phone Numbers. Phone IDs
that don’t belong to a customer under your partner account return 403.
Request body
The body is the WhatsApp Cloud API message envelope. The most common shapes:
Text
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "+919999999999",
"type": "text",
"text": {
"preview_url": false,
"body": "Hello from Splashify!"
}
}Template
{
"messaging_product": "whatsapp",
"to": "+919999999999",
"type": "template",
"template": {
"name": "order_confirmation",
"language": { "code": "en_US" },
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "Aditya" },
{ "type": "text", "text": "ORD-1234" }
]
}
]
}
}Media (image / video / document / audio)
{
"messaging_product": "whatsapp",
"to": "+919999999999",
"type": "image",
"image": {
"link": "https://example.com/banner.png",
"caption": "Your order is on the way"
}
}Interactive (buttons, list)
{
"messaging_product": "whatsapp",
"to": "+919999999999",
"type": "interactive",
"interactive": {
"type": "button",
"body": { "text": "Choose an option" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "yes", "title": "Yes" } },
{ "type": "reply", "reply": { "id": "no", "title": "No" } }
]
}
}
}All other Cloud API message types (location, contacts, sticker,
reaction) work the same way — see the WhatsApp Cloud API reference
for the exact envelope shape.
Response — 200
{
"messaging_product": "whatsapp",
"contacts": [
{ "input": "+919999999999", "wa_id": "919999999999" }
],
"messages": [
{
"id": "wamid.HBgMOTE5OTk5OTk5OTk5FQIAERgSNzg5MTIzNDU2Nzg5MEFCQ0RFAA==",
"message_status": "accepted"
}
]
}The id is the wamid — store it; subsequent webhook status events
(sent → delivered → read) reference it.
Billing
Every accepted send is recorded against your partner wallet. When the
delivery webhook lands (or sent if delivery never fires), we debit
your wallet at the per-category rate (m Marketing / u Utility /
a Authentication / s Service / ai Authentication-International).
See Billing Deductions for the
ledger and the daily-spend chart.
Errors
| Status | Example |
|---|---|
400 | Meta returns 400 verbatim when the envelope is malformed (missing to, unknown type, template not found, etc.) |
401 | { "success": false, "message": "unauthorized" } |
403 | { "success": false, "message": "id does not belong to your account" } |
404 | { "success": false, "message": "id not found" } |
502 | { "success": false, "message": "WhatsApp request failed. Try again shortly." } |
cURL
curl -X POST \
"https://api.splashifypro.com/api/v25.0/$PHONE_NUMBER_ID/messages" \
-H "Authorization: Bearer $SPLASHIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"to": "+919999999999",
"type": "text",
"text": { "body": "Hello!" }
}'Notes
- Wallet preflight. If your partner wallet is depleted and the per-partner deduction toggle is on, sends may be blocked at our layer before reaching Meta. Check the wallet page for current balance + low-balance alerts.
- Webhook fan-out. Status updates Meta sends back
(
sent/delivered/read/failed) are forwarded to your configured webhook URL with ourwhatsapp.message_statusevent type — see Webhook Events.