Sender IDs
Per-country Sender ID fees, and listing and requesting sender IDs for your account.
Overview
A sender ID is the name (up to 11 characters) or number shown as the sender of your SMS. Registration rules and fees differ by country. For the product overview and how approval works, see the Sender IDs guide.
| Method | Path | Description |
|---|---|---|
GET | /api/sender-ids/fees | Sender ID fees for all 54 countries (public, no auth) |
GET | /api/sender-ids | List your sender IDs |
POST | /api/sender-ids | Request a sender ID |
Get Sender ID fees
GET https://sms.esmsafrica.io/api/sender-ids/feesPublic - no authentication. Cached for up to 5 minutes. Returns the Sender ID fee for every one of the 54 African countries, in USD.
Fees are charged from your wallet only when a request is approved - one fee per country in the request that has a fee. Nothing is charged on rejection.
Response
{
"currency": "USD",
"countries": [
{
"country_code": "GH",
"country_name": "Ghana",
"fee_usd": 150,
"fee_type": "one_time",
"covers": "all_networks",
"fee_table": null,
"note": null
},
{
"country_code": "KE",
"country_name": "Kenya",
"fee_usd": null,
"fee_type": "per_network",
"covers": null,
"fee_table": [
["Bundled Safaricom & Airtel", "KES 14,100", "None"],
["Safaricom only", "KES 8,700", "None"],
["Airtel only", "KES 8,700", "None"],
["Telkom", "KES 4,500", "None"],
["Equitel", "KES 9,000", "None"]
],
"note": "One-off setup per network - no monthly maintenance."
},
{
"country_code": "NG",
"country_name": "Nigeria",
"fee_usd": null,
"fee_type": "on_request",
"covers": null,
"fee_table": null,
"note": "Confirmed during onboarding"
}
]
}| Field | Type | Description |
|---|---|---|
country_code | string | ISO 3166-1 alpha-2 code. |
country_name | string | Display name. |
fee_usd | number | null | Flat fee in USD. 150 for flat-fee countries; null when the country uses a per-network fee table or the fee is confirmed at onboarding. |
fee_type | string | one_time - a single flat fee for the country. on_request - fees are confirmed during onboarding. Countries with a fee_table may use another value, so check fee_table first. |
covers | string | null | all_networks when one fee registers the sender ID on every network in the country. |
fee_table | array | null | Per-network fees as rows of [network, setup, recurring], in local currency. null when not applicable. |
note | string | null | Extra detail, for example Confirmed during onboarding. |
Fees by country
| Countries | Fee |
|---|---|
| Cameroon, Djibouti, Egypt, Ghana, Somalia, Tanzania | USD 150 one-time per country - covers registration on all networks |
| Kenya | Per-network table (one-off setup, no monthly maintenance) - see below |
| Uganda | Per-network table - see below |
| All other countries | Confirmed during onboarding |
Kenya
| Network | Setup | Recurring |
|---|---|---|
| Bundled Safaricom & Airtel | KES 14,100 | None |
| Safaricom only | KES 8,700 | None |
| Airtel only | KES 8,700 | None |
| Telkom | KES 4,500 | None |
| Equitel | KES 9,000 | None |
Uganda
| Network | Setup | Recurring |
|---|---|---|
| MTN | None | UGX 250,000 / month |
| Airtel | UGX 250,000 | None |
The endpoint is the source of truth - read it for current fees.
Example
curl https://sms.esmsafrica.io/api/sender-ids/feesList your sender IDs
GET https://sms.esmsafrica.io/api/sender-idsNeeds a signed-in session or an API key (Authorization: Bearer esms_live_your_api_key).
Returns your sender IDs, newest first.
[
{
"id": 17,
"name": "AcmeFoods",
"countries": ["GH", "KE"],
"use_case": "Order updates",
"status": "approved",
"rejection_reason": null,
"fee_usd": 150,
"fee_charged_at": "2026-10-08T09:30:00+00:00",
"created_at": "2026-10-07T14:12:00+00:00"
}
]| Field | Description |
|---|---|
status | pending, approved or rejected. |
fee_usd | The Sender ID fee charged for this request (0 when no fee applied). |
fee_charged_at | When the fee was charged (on approval), or null. |
Request a sender ID
POST https://sms.esmsafrica.io/api/sender-ids{
"name": "AcmeFoods",
"countries": ["GH", "KE"],
"use_case": "Order updates"
}| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | 1-11 characters. |
countries | string[] | Yes | ISO country codes to register in. |
use_case | string | No | What you will send. Helps the networks approve faster. |
Response
{
"id": 17,
"name": "AcmeFoods",
"status": "pending",
"estimated_fee_usd": 150,
"fee_countries": ["GH"]
}estimated_fee_usd is the flat Sender ID fee that will be charged when the request is
approved (one fee per country in fee_countries). Nothing is charged now, and nothing
is charged if the request is rejected. Per-network fees (for example Kenya and Uganda)
are confirmed by the team during onboarding.