Send SMS
POST /sms/send
{
"to": "+27764378335",
"message": "Your order #123 is confirmed."
}
Response:
{
"success": true,
"message": "SMS sent",
"credits_remaining": 94,
"cost": 1,
"destination": "South Africa"
}
Bulk SMS (up to 50)
POST /sms/send-bulk
{
"messages": [
{ "to": "+27764378335", "message": "Order ready." },
{ "to": "+26879531182", "message": "Payment received." }
]
}
Response:
{ "success": true, "sent": 2, "total": 2 }
Check Balance
GET /sms/balance
Response:
{ "notification_credits": 468 }
Usage History
GET /sms/usage
Response:
{
"total": 6,
"recent": [
{
"timestamp": "2026-04-12T06:03:38",
"recipient": "268761***",
"success": true,
"preview": "Reminder: Please verify..."
}
]
}
Price Check
POST /sms/price-check
{ "to": "+447846426683" }
Response:
{
"country": "UK",
"credits_per_sms": 2
}
Pricing Table
GET /sms/pricing
Response:
{ "rates": [
{ "country": "Eswatini", "credits_per_sms": 1 },
{ "country": "South Africa", "credits_per_sms": 1 },
{ "country": "UK", "credits_per_sms": 2 },
{ "country": "US/Canada", "credits_per_sms": 2 },
{ "country": "International", "credits_per_sms": 3 }
]}
400 Missing fields or message too long (max 480 chars)
401 Invalid or missing API key
402 Insufficient SMS credits
500 SMS delivery failed
cURL
curl -X POST https://api.ekukhulenilabs.co.za/sms/send \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"to": "+27764378335", "message": "Hello from Ekukhuleni Labs!"}'
Python
import requests
r = requests.post(
'https://api.ekukhulenilabs.co.za/sms/send',
headers={'X-Api-Key': 'YOUR_API_KEY'},
json={'to': '+27764378335', 'message': 'Hello from Ekukhuleni Labs!'})
print(r.json())
Node.js
const res = await fetch(
'https://api.ekukhulenilabs.co.za/sms/send',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': process.env.EK_API_KEY
},
body: JSON.stringify({
to: '+27764378335',
message: 'Hello from Ekukhuleni Labs!'
})
}
);
const data = await res.json();