Messaging API
Send messages on any supported channel, retrieve delivery status, retry failed sends, and manage reusable templates.
Base path: /v1/messages
Send SMS
POST /v1/messages/sms
Send an SMS message to a single recipient.
Recipient phone number in E.164 format (e.g., +14155552671)
The text content of the SMS (max 1600 characters; automatically segmented)
URL to receive delivery status callbacks for this message
Arbitrary key-value pairs attached to the message for your reference
curl -X POST https://orbit-api.devotel.io/api/v1/messages/sms \
-H "X-API-Key: dv_live_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155552671",
"body": "Your verification code is 123456",
"webhook_url": "https://example.com/webhooks/sms",
"metadata": { "campaign": "onboarding" }
}'
{
"data": {
"message_id": "msg_abc123",
"channel": "sms",
"to": "+14155552671",
"status": "queued",
"created_at": "2026-03-08T12:00:00Z"
},
"meta": {
"request_id": "req_xyz789",
"timestamp": "2026-03-08T12:00:00Z"
}
}
Send WhatsApp Message
POST /v1/messages/whatsapp
Send a WhatsApp message — free-form text, a pre-approved template, or media.
Recipient phone number in E.164 format
Free-form text message object
Pre-approved WhatsApp template (use instead of text for business-initiated conversations)
Media attachment
Publicly accessible URL to the media file
Arbitrary key-value pairs attached to the message
curl -X POST https://orbit-api.devotel.io/api/v1/messages/whatsapp \
-H "X-API-Key: dv_live_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"to": "+905551234567",
"text": { "body": "Hello from Orbit!" }
}'
{
"data": {
"message_id": "msg_wa_456",
"channel": "whatsapp",
"to": "+905551234567",
"status": "queued",
"created_at": "2026-03-08T12:00:00Z"
},
"meta": {
"request_id": "req_abc456",
"timestamp": "2026-03-08T12:00:00Z"
}
}
Send Email
POST /v1/messages/email
Send a transactional email.
to
string | string[]
required
Recipient email address or array of addresses
HTML body of the email (provide html or text, or both)
Plain-text body of the email
Arbitrary key-value pairs attached to the message
curl -X POST https://orbit-api.devotel.io/api/v1/messages/email \
-H "X-API-Key: dv_live_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"to": "user@example.com",
"subject": "Welcome to Orbit",
"html": "<h1>Welcome!</h1><p>Thanks for signing up.</p>"
}'
{
"data": {
"message_id": "msg_em_789",
"channel": "email",
"to": "user@example.com",
"status": "queued",
"created_at": "2026-03-08T12:00:00Z"
},
"meta": {
"request_id": "req_em_101",
"timestamp": "2026-03-08T12:00:00Z"
}
}
Send RCS / Viber Message
POST /v1/messages/rcs | POST /v1/messages/viber
Send a message on the RCS or Viber channel. Both use the same generic payload.
Recipient phone number in E.164 format
Arbitrary key-value pairs attached to the message
curl -X POST https://orbit-api.devotel.io/api/v1/messages/rcs \
-H "X-API-Key: dv_live_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155552671",
"body": "Your order has shipped!"
}'
{
"data": {
"message_id": "msg_rcs_321",
"channel": "rcs",
"to": "+14155552671",
"status": "queued",
"created_at": "2026-03-08T12:00:00Z"
},
"meta": {
"request_id": "req_rcs_555",
"timestamp": "2026-03-08T12:00:00Z"
}
}
List Messages
GET /v1/messages
Retrieve a paginated list of sent messages with optional filters.
Cursor for pagination (returned in previous response)
Number of results per page (max 100)
Filter by channel: sms, whatsapp, rcs, viber, email
Filter by status: queued, sent, delivered, failed, read
Filter by recipient (exact match)
curl "https://orbit-api.devotel.io/api/v1/messages?channel=sms&status=delivered&limit=10" \
-H "X-API-Key: dv_live_sk_your_key_here"
{
"data": [
{
"message_id": "msg_001",
"channel": "sms",
"to": "+14155552671",
"status": "delivered",
"created_at": "2026-03-08T11:00:00Z"
}
],
"meta": {
"request_id": "req_list_001",
"timestamp": "2026-03-08T12:00:00Z",
"pagination": {
"cursor": "cur_msg_abc",
"has_more": true,
"total": 1542
}
}
}
Get Message
GET /v1/messages/{id}
Retrieve details of a single message, including delivery status and timestamps.
Message ID (e.g., msg_abc123)
curl https://orbit-api.devotel.io/api/v1/messages/msg_abc123 \
-H "X-API-Key: dv_live_sk_your_key_here"
{
"data": {
"message_id": "msg_abc123",
"channel": "sms",
"to": "+14155552671",
"body": "Your verification code is 123456",
"status": "delivered",
"created_at": "2026-03-08T12:00:00Z",
"delivered_at": "2026-03-08T12:00:03Z"
},
"meta": {
"request_id": "req_get_001",
"timestamp": "2026-03-08T12:01:00Z"
}
}
Retry Message
POST /v1/messages/{id}/retry
Re-send a message that previously failed. The original message parameters are reused.
ID of the failed message to retry
curl -X POST https://orbit-api.devotel.io/api/v1/messages/msg_fail_001/retry \
-H "X-API-Key: dv_live_sk_your_key_here"
{
"data": {
"message_id": "msg_retry_002",
"original_message_id": "msg_fail_001",
"status": "queued",
"created_at": "2026-03-08T12:05:00Z"
},
"meta": {
"request_id": "req_retry_001",
"timestamp": "2026-03-08T12:05:00Z"
}
}
Templates
List Templates
GET /v1/messages/templates
Retrieve all message templates with cursor-based pagination.
Number of results per page (max 100)
curl "https://orbit-api.devotel.io/api/v1/messages/templates?limit=10" \
-H "X-API-Key: dv_live_sk_your_key_here"
Create Template
POST /v1/messages/templates
Create a new message template for a given channel.
Channel the template is for: sms, whatsapp, rcs, viber, email
Template name (unique per channel)
Template body content — use {{variable_name}} for dynamic placeholders
Template category (e.g., marketing, transactional, otp)
Language code (e.g., en, tr, ar)
List of variable definitions used in the template content
Initial status: draft or pending_approval
curl -X POST https://orbit-api.devotel.io/api/v1/messages/templates \
-H "X-API-Key: dv_live_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"channel": "whatsapp",
"name": "order_confirmation",
"content": "Hi {{customer_name}}, your order #{{order_id}} has been confirmed.",
"category": "transactional",
"language": "en"
}'
{
"data": {
"id": "tpl_abc123",
"channel": "whatsapp",
"name": "order_confirmation",
"content": "Hi {{customer_name}}, your order #{{order_id}} has been confirmed.",
"category": "transactional",
"language": "en",
"status": "pending_approval",
"created_at": "2026-03-08T12:00:00Z"
},
"meta": {
"request_id": "req_tpl_001",
"timestamp": "2026-03-08T12:00:00Z"
}
}
Delete Template
DELETE /v1/messages/templates/{id}
Permanently delete a message template.
Response: 204 No Content