A

AfriRoute

Developer Portal

public api
Sign in
Messaging

Send a message, observe delivery, and scale safely

Messaging should read like an implementation workflow: authenticate, test in sandbox, send one message, inspect status, subscribe to events, then scale into bulk or verification flows.

Messaging workflow

Start with one real request, then add delivery logic before scale

Developers should not have to infer the happy path. Show them the exact first request, the endpoint family that matters, and the operational checks required before moving into higher-volume messaging.

Three-step path

1

Authenticate once

Use a sandbox or production API key in the Authorization header before touching any messaging endpoint.

2

Send a single request

Start with one SMS send so teams can confirm sender identity, country, and response handling without throughput noise.

3

Observe delivery

Check status lookups and delivery webhooks before scaling into bulk, retry, or OTP workflows.

Core endpoints

POST /api/v1/sms/send
POST /api/v1/sms/bulk
GET /api/v1/sms/{messageId}
GET /api/v1/messages

Operational checks

Handle auth and sender errors early

A 401 or 403 usually means the API key, scope, tenant, or sender identity is wrong for the current market.

Retry only the right failures

Use backoff for 429 and 503 responses, then rely on webhook status updates to avoid duplicate application logic.

Keep sandbox and production separate

Validate payload shape and webhook handling in sandbox first, then move to live keys only when the request path is stable.

Delivery lifecycle

Status values should map directly to application behavior

Keep status handling close to the send example so developers know what to store, when to retry, and when to wait for asynchronous delivery events.

acceptedAfriRoute accepted the request and created a message record.
queuedThe message is waiting for provider or route capacity.
sentThe upstream route accepted the message for delivery.
deliveredA delivery report confirmed the recipient-side handoff where available.
failedThe message could not be delivered; inspect the error code and provider detail.

Callback checklist

messageId
status
channel
provider
errorCode
timestamp

Accept unknown fields safely so future delivery metadata does not break webhook processing.

Delivery event example

What your webhook receives

{
  "event": "message.delivered",
  "messageId": "msg_01JPFZ0D4PT4X6YQ8ZZ8E1KS8R",
  "status": "delivered",
  "channel": "sms",
  "occurredAt": "2026-03-09T10:15:00Z"
}