Send a message
Sends a message to one or more recipients using a template. Supports multi-channel broadcast — when multiple channels are specified (e.g. ["sms", "whatsapp"]), a separate message is created for each (recipient, channel) pair. Returns immediately with per-recipient message IDs for async tracking via webhooks or the GET /messages/{id} endpoint. Account-level preconditions such as insufficient balance do not reject the request: the send is accepted with 202 and the affected messages are reported as BLOCKED on GET /messages/{id} and the message status webhook.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v3/messages" \ -H "Idempotency-Key: req_abc123_retry1" \ -H "Content-Type: application/json" \ -d '{ "to": [ "+14155551234", "+14155555678" ], "channel": [ "sms", "whatsapp" ], "template": { "id": "7ba7b820-9dad-11d1-80b4-00c04fd430c8", "name": "order_confirmation", "parameters": { "name": "John Doe", "order_id": "12345" } }, "text": null, "sandbox": false }'{
"success": true,
"data": {
"status": "QUEUED",
"template_id": "7ba7b820-9dad-11d1-80b4-00c04fd430c8",
"template_name": "order_confirmation",
"recipients": [
{
"message_id": "8ba7b830-9dad-11d1-80b4-00c04fd430c8",
"to": "+14155551234",
"channel": "sms",
"body": "Hi John Doe, your order #12345 has been confirmed."
},
{
"message_id": "8ba7b831-9dad-11d1-80b4-00c04fd430c8",
"to": "+14155551234",
"channel": "whatsapp",
"body": "Hi John Doe, your order #12345 has been confirmed."
},
{
"message_id": "9ba7b840-9dad-11d1-80b4-00c04fd430c8",
"to": "+14155555678",
"channel": "sms",
"body": "Hi John Doe, your order #12345 has been confirmed."
},
{
"message_id": "9ba7b841-9dad-11d1-80b4-00c04fd430c8",
"to": "+14155555678",
"channel": "whatsapp",
"body": "Hi John Doe, your order #12345 has been confirmed."
}
]
},
"error": null,
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-07-27T14:38:35.3206969+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "VALIDATION_004",
"message": "Request validation failed",
"details": {
"to": [
"'to' must contain at least one recipient"
],
"template": [
"'template' is required"
]
},
"doc_url": "https://docs-dev.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-07-27T14:38:35.3207065+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "RESOURCE_002",
"message": "Template not found",
"details": null,
"doc_url": "https://docs-dev.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-07-27T14:38:35.3207077+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "INTERNAL_001",
"message": "Failed to queue message for processing.",
"details": null,
"doc_url": "https://docs-dev.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-07-27T14:38:35.3207088+00:00",
"version": "v3"
}
}Glossary of Sent Messaging, Compliance, and API Terms
Definitions of the messaging, compliance, and API terms used across the Sent platform, from channels, contacts, and Sender Profiles to templates and webhooks
Get message status GET
Retrieves the current status and details of a message by ID. Includes delivery status, timestamps, and error information if applicable.