curl --request POST \
--url https://api.kairosafrika.com/v1/external/email/send \
--header 'x-api-key: YOUR_API_KEY' \
--header 'x-api-secret: YOUR_API_SECRET' \
--header 'x-api-version: 2025-08-01' \
--header 'Content-Type: application/json' \
--data '{
"from": "no-reply@example.com",
"to": ["recipient1@example.com", "recipient2@example.com"],
"cc": "cc@example.com",
"bcc": "bcc@example.com",
"subject": "Welcome to Kairos Afrika",
"html": "<h1>Hello</h1><p>Welcome!</p>",
"text": "Hello, welcome!",
"replyTo": "support@example.com",
"tags": { "campaign": "onboarding" },
"headers": { "X-Custom": "value" }
}'
const response = await fetch('https://api.kairosafrika.com/v1/external/email/send', {
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
'x-api-version': '2025-08-01',
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: 'no-reply@example.com',
to: ['recipient1@example.com', 'recipient2@example.com'],
cc: 'cc@example.com',
bcc: 'bcc@example.com',
subject: 'Welcome to Kairos Afrika',
html: '<h1>Hello</h1><p>Welcome!</p>',
text: 'Hello, welcome!',
replyTo: 'support@example.com',
tags: { campaign: 'onboarding' },
headers: { 'X-Custom': 'value' }
})
});
const result = await response.json();
console.log(result);
import requests
response = requests.post(
'https://api.kairosafrika.com/v1/external/email/send',
headers={
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
'x-api-version': '2025-08-01',
'Content-Type': 'application/json'
},
json={
'from': 'no-reply@example.com',
'to': ['recipient1@example.com', 'recipient2@example.com'],
'cc': 'cc@example.com',
'bcc': 'bcc@example.com',
'subject': 'Welcome to Kairos Afrika',
'html': '<h1>Hello</h1><p>Welcome!</p>',
'text': 'Hello, welcome!',
'replyTo': 'support@example.com',
'tags': { 'campaign': 'onboarding' },
'headers': { 'X-Custom': 'value' }
}
)
result = response.json()
print(result)
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.kairosafrika.com/v1/external/email/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode(array(
'from' => 'no-reply@example.com',
'to' => array('recipient1@example.com', 'recipient2@example.com'),
'cc' => 'cc@example.com',
'bcc' => 'bcc@example.com',
'subject' => 'Welcome to Kairos Afrika',
'html' => '<h1>Hello</h1><p>Welcome!</p>',
'text' => 'Hello, welcome!',
'replyTo' => 'support@example.com',
'tags' => array('campaign' => 'onboarding'),
'headers' => array('X-Custom' => 'value')
)),
CURLOPT_HTTPHEADER => array(
'x-api-key: YOUR_API_KEY',
'x-api-secret: YOUR_API_SECRET',
'x-api-version: 2025-08-01',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
{
"statusCode": "200",
"statusMessage": "Email scheduled successfully",
"transactionId": "01J...ulid",
"sequenceNo": "01J...ulid",
"data": {},
"timestamp": "2023-11-07T05:31:56Z"
}Endpoints
Send Email
Send a single email to one or more recipients
POST
/
v1
/
external
/
email
/
send
curl --request POST \
--url https://api.kairosafrika.com/v1/external/email/send \
--header 'x-api-key: YOUR_API_KEY' \
--header 'x-api-secret: YOUR_API_SECRET' \
--header 'x-api-version: 2025-08-01' \
--header 'Content-Type: application/json' \
--data '{
"from": "no-reply@example.com",
"to": ["recipient1@example.com", "recipient2@example.com"],
"cc": "cc@example.com",
"bcc": "bcc@example.com",
"subject": "Welcome to Kairos Afrika",
"html": "<h1>Hello</h1><p>Welcome!</p>",
"text": "Hello, welcome!",
"replyTo": "support@example.com",
"tags": { "campaign": "onboarding" },
"headers": { "X-Custom": "value" }
}'
const response = await fetch('https://api.kairosafrika.com/v1/external/email/send', {
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
'x-api-version': '2025-08-01',
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: 'no-reply@example.com',
to: ['recipient1@example.com', 'recipient2@example.com'],
cc: 'cc@example.com',
bcc: 'bcc@example.com',
subject: 'Welcome to Kairos Afrika',
html: '<h1>Hello</h1><p>Welcome!</p>',
text: 'Hello, welcome!',
replyTo: 'support@example.com',
tags: { campaign: 'onboarding' },
headers: { 'X-Custom': 'value' }
})
});
const result = await response.json();
console.log(result);
import requests
response = requests.post(
'https://api.kairosafrika.com/v1/external/email/send',
headers={
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
'x-api-version': '2025-08-01',
'Content-Type': 'application/json'
},
json={
'from': 'no-reply@example.com',
'to': ['recipient1@example.com', 'recipient2@example.com'],
'cc': 'cc@example.com',
'bcc': 'bcc@example.com',
'subject': 'Welcome to Kairos Afrika',
'html': '<h1>Hello</h1><p>Welcome!</p>',
'text': 'Hello, welcome!',
'replyTo': 'support@example.com',
'tags': { 'campaign': 'onboarding' },
'headers': { 'X-Custom': 'value' }
}
)
result = response.json()
print(result)
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.kairosafrika.com/v1/external/email/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode(array(
'from' => 'no-reply@example.com',
'to' => array('recipient1@example.com', 'recipient2@example.com'),
'cc' => 'cc@example.com',
'bcc' => 'bcc@example.com',
'subject' => 'Welcome to Kairos Afrika',
'html' => '<h1>Hello</h1><p>Welcome!</p>',
'text' => 'Hello, welcome!',
'replyTo' => 'support@example.com',
'tags' => array('campaign' => 'onboarding'),
'headers' => array('X-Custom' => 'value')
)),
CURLOPT_HTTPHEADER => array(
'x-api-key: YOUR_API_KEY',
'x-api-secret: YOUR_API_SECRET',
'x-api-version: 2025-08-01',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
{
"statusCode": "200",
"statusMessage": "Email scheduled successfully",
"transactionId": "01J...ulid",
"sequenceNo": "01J...ulid",
"data": {},
"timestamp": "2023-11-07T05:31:56Z"
}Send Email
This endpoint allows you to send a single email to one or more recipients. Endpoint:POST /v1/external/email/send
curl --request POST \
--url https://api.kairosafrika.com/v1/external/email/send \
--header 'x-api-key: YOUR_API_KEY' \
--header 'x-api-secret: YOUR_API_SECRET' \
--header 'x-api-version: 2025-08-01' \
--header 'Content-Type: application/json' \
--data '{
"from": "no-reply@example.com",
"to": ["recipient1@example.com", "recipient2@example.com"],
"cc": "cc@example.com",
"bcc": "bcc@example.com",
"subject": "Welcome to Kairos Afrika",
"html": "<h1>Hello</h1><p>Welcome!</p>",
"text": "Hello, welcome!",
"replyTo": "support@example.com",
"tags": { "campaign": "onboarding" },
"headers": { "X-Custom": "value" }
}'
const response = await fetch('https://api.kairosafrika.com/v1/external/email/send', {
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
'x-api-version': '2025-08-01',
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: 'no-reply@example.com',
to: ['recipient1@example.com', 'recipient2@example.com'],
cc: 'cc@example.com',
bcc: 'bcc@example.com',
subject: 'Welcome to Kairos Afrika',
html: '<h1>Hello</h1><p>Welcome!</p>',
text: 'Hello, welcome!',
replyTo: 'support@example.com',
tags: { campaign: 'onboarding' },
headers: { 'X-Custom': 'value' }
})
});
const result = await response.json();
console.log(result);
import requests
response = requests.post(
'https://api.kairosafrika.com/v1/external/email/send',
headers={
'x-api-key': 'YOUR_API_KEY',
'x-api-secret': 'YOUR_API_SECRET',
'x-api-version': '2025-08-01',
'Content-Type': 'application/json'
},
json={
'from': 'no-reply@example.com',
'to': ['recipient1@example.com', 'recipient2@example.com'],
'cc': 'cc@example.com',
'bcc': 'bcc@example.com',
'subject': 'Welcome to Kairos Afrika',
'html': '<h1>Hello</h1><p>Welcome!</p>',
'text': 'Hello, welcome!',
'replyTo': 'support@example.com',
'tags': { 'campaign': 'onboarding' },
'headers': { 'X-Custom': 'value' }
}
)
result = response.json()
print(result)
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.kairosafrika.com/v1/external/email/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode(array(
'from' => 'no-reply@example.com',
'to' => array('recipient1@example.com', 'recipient2@example.com'),
'cc' => 'cc@example.com',
'bcc' => 'bcc@example.com',
'subject' => 'Welcome to Kairos Afrika',
'html' => '<h1>Hello</h1><p>Welcome!</p>',
'text' => 'Hello, welcome!',
'replyTo' => 'support@example.com',
'tags' => array('campaign' => 'onboarding'),
'headers' => array('X-Custom' => 'value')
)),
CURLOPT_HTTPHEADER => array(
'x-api-key: YOUR_API_KEY',
'x-api-secret: YOUR_API_SECRET',
'x-api-version: 2025-08-01',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
from | string | Yes | Sender email address |
to | string or string[] | Yes | Recipient(s), max 150 |
subject | string | Yes | Email subject line |
html | string | No | HTML content |
text | string | No | Plain text content |
cc | string or string[] | No | CC recipient(s), max 150 |
bcc | string or string[] | No | BCC recipient(s), max 150 |
replyTo | string | No | Reply-to address |
attachments | object[] | No | File attachments |
tags | object | No | Key-value tags (e.g. { "campaign": "onboarding" }) |
headers | object | No | Custom email headers (e.g. { "X-Custom": "value" }) |
scheduledAt | string | No | Schedule delivery (ISO 8601) |
Attachment Object
| Field | Type | Required | Description |
|---|---|---|---|
filename | string | Yes | File name |
content | string | No | Base64-encoded file content |
path | string | No | File path on server |
contentType | string | No | MIME type (e.g. application/pdf) |
Responses
Success (200 OK)
{
"statusCode": "200",
"statusMessage": "Email scheduled successfully",
"transactionId": "01J...ulid",
"sequenceNo": "01J...ulid",
"data": null,
"timestamp": "2026-07-24T..."
}
Error Responses
| Status Code | Description |
|---|---|
400 | Validation error (invalid email, missing fields, etc.) |
401 | Authentication failed (invalid API key or secret) |
429 | Rate limit exceeded (5 requests per minute) |
502 | Email service unavailable |
Headers
API version header
Available options:
2025-08-01 Body
application/json
Sender email address
Recipient(s), max 150
Email subject line
HTML content
Plain text content
CC recipient(s)
BCC recipient(s)
Reply-to address
Show child attributes
Show child attributes
Key-value tags (e.g. { "campaign": "onboarding" })
Show child attributes
Show child attributes
Custom email headers
Show child attributes
Show child attributes
Schedule delivery (ISO 8601)
⌘I