Send email
One call, up to 100 recipients. Receipts, OTPs, notifications. Each recipient is billed individually and tracked to delivery.
Send
POST/api/v1/email/send
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| to | string[] | Yes | Up to 100 recipient addresses. Duplicates are collapsed; suppressed addresses are skipped (and not billed). |
| subject | string | Yes | The subject line. |
| html | string | No | HTML body. At least one of html or text is required. |
| text | string | No | Plain-text body/fallback. |
| from | string | No | Local part (billing) or full address on your verified domain. Omit to use the domain's default from-address. |
| domain_uuid | uuid | No | Required only when your team has more than one verified domain. |
curl -X POST https://api.mobilesasa.com/api/v1/email/send \
-H "Authorization: Bearer $MOBILESASA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"to": [
"[email protected]",
"[email protected]"
],
"subject": "Your July invoice is ready",
"html": "<p>Hi! Invoice INV-2041 for KES 12,400 is attached to your account page.</p>",
"from": "billing"
}'Response: 200
{
"success": true,
"data": {
"accepted": 2,
"suppressed": 0,
"failed": 0,
"cost_total": 0.2,
"messages": [
{ "uuid": "aa1f…", "to_email": "[email protected]", "status": "sent" },
{ "uuid": "bb2e…", "to_email": "[email protected]", "status": "sent" }
]
}
}Track what happened
GET/api/v1/email/messages
Every recipient is a message row whose status advances as the provider reports back: sent → delivered, or bounced / complained (both of which also suppress the address for you).
curl "https://api.mobilesasa.com/api/v1/email/messages?status=bounced&page=1" \
-H "Authorization: Bearer $MOBILESASA_TOKEN"Suppression is permanent by design
A hard bounce means the mailbox doesn't exist; a complaint means the person marked you as spam. Sending to either again damages your domain's reputation, so the platform won't. Those addresses come back in the response as
suppressed and cost nothing. Contact support to lift a suppression that was genuinely transient.Need thousands of recipients?
Use bulk campaigns. Same billing, asynchronous fan-out with progress counters.