Guide

Transactional SMS API for Africa — The Complete Guide

Everything developers need to send order confirmations, payment receipts, and alerts across Africa: DND bypass, sender ID rules, delivery webhooks, and how to choose a provider that survives the continent's carrier landscape.

What is transactional SMS?

Transactional SMS are time-sensitive, user-triggered text messages sent to confirm an action a customer just took — an order, a payment, a login, an appointment. They carry no marketing content and are not bulk broadcasts. In Africa, where email open rates are low and mobile penetration is high, transactional SMS is the most reliable channel for confirmations and alerts.

The distinction matters because African regulators (the NCC in Nigeria, the CA in Kenya, the NCA in Ghana) treat transactional and promotional traffic differently. Transactional messages can reach numbers on the Do-Not-Disturb list; promotional ones cannot. Sender IDs, delivery guarantees, and compliance obligations all differ by category.

Transactional vs promotional SMS in Africa

Misclassifying your traffic is the most common cause of failed deliveries. The table below covers the five differences that affect delivery in African markets.

AspectTransactional SMSPromotional / bulk SMS
DND bypassYes — alerts, receipts, and OTP reach DND-registered numbers.No — blocked by DND filters in Nigeria, Kenya, and others.
Sender IDRequired, alphanumeric, registered per country.Often numeric or generic; stricter marketing rules apply.
Delivery guaranteeBest-effort with retries and failover; near real-time.Throttled and batched; lower priority on carrier queues.
Regulatory compliancePer-country classification (transactional vs marketing).Marketing consent, opt-out, and DND rules per regulator.
Content rulesNo marketing copy; user-triggered, time-sensitive only.Promotional offers, discounts, and CTAs allowed.

Common use cases for transactional SMS in Africa

Order confirmations & shipping updates

E-commerce and fintech apps send a confirmation at checkout and updates at each fulfilment stage — packed, shipped, out for delivery, delivered.

Payment receipts & alerts

Notify customers the moment a payment succeeds, fails, or is reversed — critical for trust in mobile money and card-based flows.

Account security notifications

Warn users about logins from new devices, password changes, and suspicious activity so they can act before damage spreads.

Appointment reminders

Healthcare clinics and service businesses cut no-shows by sending a reminder 24 hours and 1 hour before the appointment.

Delivery status updates

Logistics companies keep senders and recipients in sync with pickup, in-transit, and delivery confirmations.

Two-way transaction alerts

Banks and wallets push debit, credit, and balance alerts so users always know their account state.

How to send transactional SMS

The Robase API exposes a single POST /v1/sms/send endpoint. The examples below cover the four most common languages, plus delivery polling and webhook subscription.

cURL

# Send an order confirmation
curl -X POST https://api.robase.dev/v1/sms/send \
  -H "Authorization: Bearer $ROBASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phone_number":"+2348012345678","message":"Your order #12345 has shipped."}'

Node.js

const res = await fetch('https://api.robase.dev/v1/sms/send', {
  method: 'POST',
  headers: {
    Authorization: `Bearer $${process.env.ROBASE_API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    phone_number: '+2348012345678',
    message: 'Your order #12345 has shipped.'
  })
});
const { id, status } = await res.json();

PHP

$ch = curl_init('https://api.robase.dev/v1/sms/send');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('ROBASE_API_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'phone_number' => '+2348012345678',
        'message' => 'Your order #12345 has shipped.',
    ]),
]);
$data = json_decode(curl_exec($ch), true);

Go

payload := strings.NewReader(`{"phone_number":"+2348012345678","message":"Your order #12345 has shipped."}`)
req, _ := http.NewRequest("POST", "https://api.robase.dev/v1/sms/send", payload)
req.Header.Set("Authorization", "Bearer "+os.Getenv("ROBASE_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)

Get delivery status

GET /v1/sms/{id}
{ "status": "delivered",
  "credit_cost": 1,
  "delivered_at": "2026-07-06T12:01:22Z" }

Subscribe to delivery webhooks

// POST to your webhook URL
{ "event": "sms.delivered",
  "id": "sms_...",
  "phone_number": "+2348012345678",
  "credit_cost": 1 }

Events include sms.sent, sms.delivered, and sms.failed. Configure your webhook endpoint in the dashboard and Robase signs each payload so you can verify authenticity.

Choosing a transactional SMS provider for Africa

Not every SMS gateway is built for Africa. The six checks below separate a reliable transactional provider from one that will silently drop your alerts.

Multi-provider failover

Africa's carrier landscape is fragmented. A provider that routes through a single upstream per country will fail when that carrier has an outage. Look for automatic failover to alternates.

DND compliance

Transactional traffic must be correctly categorised with the local DND filter (e.g. NCC in Nigeria) so alerts reach DND-registered numbers without you managing classification yourself.

Delivery receipts

You need per-message status — sent, delivered, failed — to reconcile with your own systems and to retry failed notifications.

Webhook support

Real-time callbacks on status transitions let you update order systems, billing, and dashboards without polling.

Transparent per-country pricing

Interconnect rates vary widely across Africa. A provider that prices per destination country, with no hidden surcharges, makes cost predictable.

SDK availability

Native SDKs for Node, Go, and PHP cut integration time and keep typings in sync with the API.

Transactional SMS FAQ

What is a transactional SMS API for Africa?

A REST API that sends non-promotional SMS — order confirmations, payment receipts, alerts, and reminders — to phone numbers across African countries, with routing logic that accounts for per-country carriers, DND rules, and sender ID regulations.

How is transactional SMS different from promotional or bulk SMS in Africa?

Transactional messages are time-sensitive, user-triggered, and can typically bypass the Do-Not-Disturb (DND) filter that blocks promotional SMS in countries like Nigeria. They require an alphanumeric sender ID, carry no marketing content, and are usually regulated separately from bulk marketing traffic.

Can transactional SMS reach DND-registered numbers in Nigeria?

Yes. Properly classified transactional messages — OTP, order updates, payment alerts — are delivered to numbers on the DND list, whereas promotional SMS are filtered out. Your provider must register the message category with the NCC-approved DND filter to guarantee bypass.

How do I send a transactional SMS with the Robase API?

POST to /v1/sms/send with the recipient phone number and message body. Robase routes the message through multiple upstream carriers per country and automatically fails over to an alternate route if the primary is unavailable. You can poll GET /v1/sms/{id} for delivery status or subscribe to sms.sent, sms.delivered, and sms.failed webhooks.

Do I need a sender ID for transactional SMS in Africa?

Yes in most markets. Nigeria, Kenya, Ghana, and South Africa require an alphanumeric sender ID (e.g. ROBASE) registered with the local regulator or carrier. Some countries only allow numeric shortcodes. A good provider registers sender IDs per country on your behalf.

What does delivery reporting look like for transactional SMS?

Each message returns an ID you can poll via GET /v1/sms/{id} for statuses like sent, delivered, or failed. For real-time tracking, subscribe to webhooks that fire on each status transition with the message ID, phone number, and credit cost.

How much does transactional SMS cost in Africa?

Pricing is per destination country and per message, prepaid with credits. In Nigeria it starts from ₦6 per message; other countries vary based on carrier interconnect rates. There is no monthly fee — you only pay for messages delivered.

Is transactional SMS API the same as the OTP API?

On Robase, yes — one integration and one set of credentials cover both. They share the same routing, failover, and prepaid credits, so you can send order notifications and verification codes from a single SDK.

Send your first transactional SMS in minutes

Robase gives you one API for transactional SMS and OTP on published prepaid routes (Nigeria, Kenya, Ghana, South Africa, the UK, and the US), with multi-provider failover, delivery webhooks, and prepaid credits from ₦6.

Last updated: July 6, 2026