API Reference
Send Message API
Send WhatsApp messages via the Vobiz REST API - text, images, video, audio, documents, stickers, and Meta-approved templates over a single endpoint.
POST
Send Message API
Authentication:
X-Auth-ID: MA_…, X-Auth-Token, Content-Type: application/json
This endpoint sends these WhatsApp message types:
text, image, audio, video, document, sticker, and template. Set the type field to one of these and include the matching object (text, media, or template).Inbound-only types. WhatsApp also defines
interactive (buttons, list pickers), location, and contacts message types. You receive these on inbound messages (see the Webhook Events Reference), and you can offer buttons/URLs/quick replies on outbound template messages (see Templates). To send a structured prompt outside the 24-hour window, use an approved template with buttons rather than a free-form interactive message.Endpoint
Request Body
| Property | Type | Required | Description |
|---|---|---|---|
channel_id | string (UUID) | Required | The WhatsApp channel to send from |
waba_id | string | Required | The WhatsApp Business Account ID for the channel |
to | string | Required | Recipient phone number in E.164 format (e.g. +919876543210) |
type | string | Required | One of text, template, image, audio, video, document, sticker |
text | object | When type=text | Text message body |
media | object | For media types | Shared media object for image, audio, video, document, sticker |
template | object | When type=template | Template message payload |
Sending Text Messages
Send plain text messages to your customers. Provide thetext object with a body field.
| Property | Type | Description |
|---|---|---|
text.body | string | Message content |
cURL
Sending Media Messages
Send images, audio, video, documents, or stickers. All media types share a singlemedia object. Supply either a public link (HTTPS URL) or a Meta media id.
Media Object Properties
| Property | Type | Description |
|---|---|---|
link | string | Public HTTPS URL of the media file |
id | string | A previously uploaded Meta media ID (alternative to link) |
caption | string | Optional caption (for image, video, document) |
filename | string | Optional filename (for document) |
cURL - image example
cURL - document example
Sending Template Messages
Send pre-approved template messages for marketing, authentication, or utility purposes.Template Object Properties
| Property | Type | Description |
|---|---|---|
name | string | Template name from Meta Business Manager |
language | object | Language object with a code field (e.g. { "code": "en_US" }) |
category | string | Optional template category |
components | array | Optional array of component objects for template variables |
Templates must be created and approved in Meta Business Manager before you can use them. See our Templates Guide for details.
cURL - template example
Response
Success Response (201 Created)
Returns the createdMessage object.
Message Object Fields
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Unique message ID |
account_id | string | Your account ID (MA_…) |
channel_id | string (UUID) | Channel the message was sent from |
contact_id | string (UUID) | Contact the message was sent to |
conversation_id | string (UUID) or null | Conversation the message belongs to |
direction | string | outbound for sent messages |
type | string | The message type (text, image, etc.) |
status | string | One of pending, sent, delivered, read, failed |
content | string | JSON-encoded string of the message content |
meta_message_id | string or null | The Meta WhatsApp message ID (wamid) once accepted by Meta |
created_at | string (RFC3339 UTC) | When the message was created |
Common Errors
400 Bad Request- Missing or invalid fields (e.g. missingchannel_id,waba_id,to, ortype), or a malformedtype-specific object.401 Unauthorized- Missing or invalid authentication credentials.403 Forbidden- Valid credentials but insufficient permissions for the channel.
2xx from Vobiz means the message was accepted, not delivered. A message can still end as failed later — watch the message.status webhook for the final state and any error reason from Meta.
The 24-hour window (most common real-world failure)
WhatsApp only lets you send free-form messages (text and media) within 24 hours of the customer’s last inbound message. Outside that window — including the first message to a contact who has never replied — you can send only an approved template.
- Inside the window: any
typeworks. Each new inbound message from the customer resets the 24h timer. - Outside the window: send
type: "template". A free-form send is rejected by WhatsApp; the rejection surfaces as afailedstatus on themessage.statuswebhook. - Open a new window: sending a template (re)opens a fresh 24-hour service window once the customer replies.
Idempotency and correlation
- The response
idis the Vobiz message UUID. The Meta id (wamid) arrives asmeta_message_idonce Meta accepts the message — it isnullin the initial201response. - Correlate later
message.statuswebhooks back to the send using thewamid(thestatuses[].idin the webhook equalsmeta_message_id).