Developer hub

Build on Eudor's telecom APIs

Documentation, quickstarts and integration guides for every Eudor product. Your API key and API host are shared with you during integration.

Bulk SMS API

Send transactional SMS and OTPs to single or multiple recipients, schedule sends and receive delivery reports.

RESTBearer keyIP whitelist
Download the docs (PDF)

VAS Aggregation API

Manage products, receive subscription, renewal and keyword webhooks, and handle USSD menu requests.

RESTWebhooksSandbox key
Read the docs (opens in a new tab)
Quickstart

Send your first SMS

Use the API key and API host we share with you during integration. Requests must come from a whitelisted IP.

  1. Generate a unique ref_id (max 15 characters) for each request.
  2. Use an approved sender ID.
  3. Send the number in international format: +234 followed by 10 digits (the + is optional).
curl -X POST https://YOUR_API_HOST/v1/sms/send \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "ref_id": "REQ001",
    "sender_id": "BANKXYZ",
    "recipient": "+2348012345678",
    "message": "Your OTP is 482915"
  }'
Reference

Bulk SMS API at a glance

Base URL: https://YOUR_API_HOST — shared with you during integration. All requests and responses are JSON over HTTPS.

MethodEndpointWhat it does
POST/v1/sms/sendTransactional SMS or OTP to one recipient. Reaches DND numbers.
POST/v1/sms/bulkThe same transactional message to many recipients in one request.
POST/v1/sms/promotionalOffers and marketing. Not delivered to DND numbers; 08:00–20:00 WAT.
GET/v1/sms/report/{request_id}Delivery status for every recipient of a request.
GET/v1/sms/status/{request_id}/{recipient}Delivery status for one recipient.
GET/v1/account/balanceYour wallet balance in SMS units.
GET/v1/account/rateYour current price per page, by network and route.

Request fields for sending

FieldTypeRequiredNotes
ref_idStringYesYour unique reference, max 15 characters. Re-using one returns 409, so retries never double-send.
sender_idStringYesAn approved sender ID on your account.
recipient / recipientsString / ArrayYesNumbers in international format, e.g. +2348012345678 (the + is optional).
messageStringYesUp to 160 characters per page (70 with unicode). Write NGN rather than ₦.
telcoStringNoMTN, Airtel, Glo or 9mobile. Optional — leave it out and the platform determines the network.
unicodeBooleanNoSet true for messages with emoji or non-Latin characters.
scheduleStringNoISO 8601 time to send later, e.g. 2026-11-02T09:00:00+01:00.
delivery_reportBooleanNoSet false to turn off delivery reports for this request. Default true.

Response

{
  "ref_id": "REQ001",
  "request_id": "sms-5f4g3d2s2c",
  "status": "success",
  "message_count": 1,
  "recipient_count": 1,
  "units": 1.0
}

Delivery-report webhook

{
  "request_id": "sms-5f4g3d2s1a",
  "recipient": "+2348012345678",
  "status": "delivered",
  "error_code": null,
  "timestamp": "2026-11-02T09:00:04+01:00"
}

Status moves queued → sent → delivered, failed or expired. Reply 200 OK; we retry twice if you don't.

Errors

400Bad request — a missing or invalid parameter.
401Invalid or missing API key, or the request came from an IP that isn't whitelisted.
409Duplicate request — this ref_id has already been used.
429Rate limit exceeded. Limits are set per client; see the X-RateLimit headers.
500Server error. Retry later or contact support.
Essentials

Before you go live

AuthenticationSend your key as Authorization: Bearer YOUR_API_KEY. Keys don't expire but can be revoked and reissued on request.
IP whitelistingShare your server IPs during onboarding. Only whitelisted IPs can call the API.
Message length160 characters per SMS, or 70 with unicode: true. Write NGN rather than ₦ to stay at 160.
SchedulingPass schedule as an ISO 8601 time to send later.
IdempotencyEvery request needs a unique ref_id. Re-sending one returns 409, so a retry never sends twice.
Rate limitsSet per client to match your traffic. Watch the X-RateLimit-Remaining header.
Need integration help?Our technical team supports you from sandbox to go-live.

Learn more

All guides →