eSMS AfricaeSMS Africa

Quickstart

Send your first SMS in under 5 minutes.

Get started with eSMS Africa in three steps.

  1. Create an account at auth.esmsafrica.io

  2. Top up your balance - go to Billing → Top Up and deposit using Flutterwave

  3. Get an API key - go to API Keys → Create key, choose live environment

Send your first message

Replace YOUR_API_KEY and YOUR_ACCOUNT_ID with your credentials from the dashboard.

Terminal
curl -X POST https://sms.esmsafrica.io/api/messages/send \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+254712345678",
    "text": "Hello from eSMS Africa!"
  }'
send_sms.py
import httpx

resp = httpx.post(
    "https://sms.esmsafrica.io/api/messages/send",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "to": "+254712345678",
        "text": "Hello from eSMS Africa!",
    },
)
print(resp.json())
send_sms.js
const resp = await fetch("https://sms.esmsafrica.io/api/messages/send", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    to: "+254712345678",
    text: "Hello from eSMS Africa!",
  }),
});

const data = await resp.json();
console.log(data);
send_sms.php
$ch = curl_init("https://sms.esmsafrica.io/api/messages/send");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST           => true,
  CURLOPT_HTTPHEADER     => [
    "Authorization: Bearer YOUR_API_KEY",
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "to"   => "+254712345678",
    "text" => "Hello from eSMS Africa!",
  ]),
]);
$result = curl_exec($ch);
echo $result;

Successful response

Response 200
{
  "id": "msg-a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "submitted",
  "segments": 1,
  "cost": 9.10,
  "cost_currency": "NGN",
  "route_cost": 450.00,
  "route_currency": "NGN",
  "route": "ESMS_NG",
  "balance_after": 990.90
}

The message is now in the gateway queue. Use the id to check delivery status.

Always use E.164 format for phone numbers - include the country code, no spaces or dashes. Example: +256712345678 not 0712345678.

What's next?

On this page