/v1/messagesSend a message
Accepted is not delivered. The response tells you the message was taken and charged; whether it arrived comes back later on a webhook. Pass an Idempotency-Key header when a network failure leaves you unsure whether a send went through — a repeat with the same key returns the original message rather than sending twice.
Headers
Idempotency-Keystring- Makes a retry safe. Use something stable and tied to the event, not a UUID generated at call time.
Body
channelstringrequired- Email, Sms or WhatsApp.
tostringrequired- Email address, or a phone number in E.164 (+27821234567).
contentobjectrequired- type plus the body: text for SMS, subject and html for email, templateName outside the WhatsApp window.
fromobject- address and optional name. Ignored until the domain is verified, when it becomes the Reply-To. Never set for SMS — South African traffic leaves from a shared originator.
templatestring- Name of a stored template to render instead of an inline body.
variablesobject- Values substituted into the template placeholders.
cc / bccstring[]- Email only.
replyTostring- Where replies go, when that is not the sender.
tagsstring[]- Your own labels, returned on the message and useful for filtering.
metadataobject- Key-value pairs stored with the message and never sent to the recipient.
Request body
{
"channel": "Sms",
"to": "+27821234567",
"content": {
"type": "text",
"text": "Your order has shipped."
},
"tags": ["order-confirmation"],
"metadata": { "orderId": "1042" }
}Response · 202 Accepted
{
"id": "msg_9f2c7a1b4e",
"channel": "Sms",
"status": "queued"
}