Sending Messages — Overview
All message-sending endpoints follow the same base structure, regardless of the channel. Understanding this structure makes it easier to work with multiple channels at the same time.
Base structure
{
"from": "<channel-uuid-or-channel-specific-id>",
"to": "<recipient-identifier>",
"content": { ... }
}
| Field | Type | Required | Description |
|---|---|---|---|
from | string | ✅ | Sender Application Channel: UUID (always works), or the channel-specific alternate when supported — see from field. Web Chatt: UUID only. |
to | string | ✅ | Recipient identifier (varies by channel) |
content | object | ✅ | The message content (see types below) |
from field (sender channel)
For WhatsApp, Instagram, Messenger, Telegram, and SMS, from selects which Application Channel sends the message. You may pass:
- Application channel UUID — always accepted (shown in Hub as Application Channel ID).
- Alternate identifier — must match the channel configuration for your Application (Hub shows copyable values on the channel details screen):
| Channel | Alternate from |
|---|---|
| Telegram | Bot username (botUsername), with or without a leading @ |
Business phone number (phoneNumber), with or without a leading + | |
Instagram username (username), with or without a leading @ | |
| Messenger | Facebook Page ID (pageId), or configured account id when used |
| SMS | Sender phone number (phoneNumber), with or without a leading + |
Web Chatt accepts only the application channel UUID for from (not the widget public key). See Web Chatt.
Web Chatt replies use the same from, to, and content shape, but the dedicated send operation for Web Chatt is not included in the OpenAPI pages bundled here. Use from as your Web Chatt application channel UUID and to as the visitor id from webhooks. Embed and Hub setup are covered in Web Chatt.
Endpoints by channel
| Channel | Endpoint |
|---|---|
POST /v1/communication/whatsapp/message | |
POST /v1/communication/instagram/message | |
| Messenger | POST /v1/communication/messenger/message |
| Telegram | POST /v1/communication/telegram/message |
| SMS | POST /v1/communication/sms/message |
| Web Chatt | POST /v1/communication/web-chatt2me/message |
to field format by channel
The format of to varies by channel. See to field formats in Concepts & Architecture for the complete reference.
Response status
Every send returns a messageId and a status:
{
"messageId": "9307b9ab-5fab-4151-b7c2-b00c2a8a6e8e",
"status": "sent"
}
| Status | Channels | Meaning |
|---|---|---|
sent | Telegram, Instagram, SMS | Successfully delivered to the channel server |
enqueued | WhatsApp, Messenger | Received and in the send queue (async processing) |
error | All | Failed — check errorMessage and errorCode |
enqueued?The WhatsApp Business API processes messages asynchronously. enqueued means the message was accepted — the actual delivery confirmation arrives via webhook with a MessageStatus event.
Content types
The content field determines the type of message sent. The available types are:
| Type | Main field | Description |
|---|---|---|
| Text | text | Simple text message |
| Image | imageUrl | Image with optional caption |
| Video | videoUrl | Video with optional caption |
| Audio | audioUrl | Audio file |
| Document | documentUrl | File (PDF, DOCX, etc.) |
| Sticker | stickerUrl | Sticker |
| Location | location | Geographic coordinates |
| Contact | contact / contacts | One or multiple vCard contacts |
| Interactive | interactive | Buttons, list, CTA URL, location request |
| Template | template | Meta-approved template (WhatsApp) |
| Reaction | reaction | React to an existing message |
| Mark as seen | markSeen | Mark message as read |
| Payment Request | paymentRequest | Charge via PIX, Boleto, or Link |
| Order Status | orderStatus | Order status update |
See availability of each type per channel in Content Types.
Next steps
- Content Types — channel support and examples for each type
- Interactive Messages — buttons, lists, and CTA URL
- WhatsApp Templates — sending outside the 24h window