Skip to Content

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 (sentdeliveredread) 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

StatusExample
400Meta 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 our whatsapp.message_status event type — see Webhook Events.