Get message status
Retrieves the current status and details of a message by ID. Includes delivery status, timestamps, and error information if applicable. A message that is or was held for a later time (a send you scheduled with scheduled_at, or a quiet-hours hold) is returned as a ScheduledMessageResponse: the same fields plus scheduled_at, the release instant in UTC. A message sent immediately has no scheduled_at key.
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v3/messages/8ba7b830-9dad-11d1-80b4-00c04fd430c8"{
"success": true,
"data": {
"id": "8ba7b830-9dad-11d1-80b4-00c04fd430c8",
"customer_id": "550e8400-e29b-41d4-a716-446655440000",
"contact_id": "550e8400-e29b-41d4-a716-446655440002",
"phone": "+14155551234",
"phone_international": "+1 415-555-1234",
"region_code": "US",
"template_id": "7ba7b820-9dad-11d1-80b4-00c04fd430c8",
"template_name": "Welcome Message",
"template_category": "UTILITY",
"channel": "sms",
"message_body": {
"header": null,
"content": "Welcome to our service, John! We're excited to have you.",
"footer": null,
"buttons": null,
"subject": null,
"media": null,
"headerMedia": null
},
"status": "DELIVERED",
"direction": "OUTBOUND",
"created_at": "2026-09-30T12:13:13.6049671+00:00",
"price": 0.0055,
"active_contact_price": 0.015,
"events": [
{
"status": "QUEUED",
"timestamp": "2026-09-30T12:13:13.6050241+00:00",
"description": "Message queued for sending",
"reason_code": null,
"reason": null
},
{
"status": "SENT",
"timestamp": "2026-09-30T12:13:18.6050456+00:00",
"description": "Message sent via SMS",
"reason_code": null,
"reason": null
},
{
"status": "DELIVERED",
"timestamp": "2026-09-30T12:13:23.6050479+00:00",
"description": "Message delivered to recipient",
"reason_code": null,
"reason": null
}
],
"reason_code": null,
"reason": null
},
"error": null,
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-09-30T14:13:13.6050754+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "VALIDATION_001",
"message": "Invalid message ID format.",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-09-30T14:13:13.6050778+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "RESOURCE_003",
"message": "Message not found",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-09-30T14:13:13.6050783+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "INTERNAL_001",
"message": "An unexpected error occurred while retrieving the message.",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-09-30T14:13:13.6050788+00:00",
"version": "v3"
}
}Send a message POST
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. Sends gated before any delivery attempt do not reject the request — an account-level precondition such as insufficient balance, a template not approved for sending, or free-form content with no open conversation with the contact. The send is accepted with 202 and the affected messages are reported as BLOCKED on GET /messages/{id} and the message.blocked webhook.
Get message activities GET
Retrieves the activity log for a specific message. Activities track the message lifecycle including acceptance, processing, sending, delivery, and any errors.