Skip to main content
All requests go to https://ugatext.com/api/v1 and need your API credentials.

Send a single SMS

POST /sms/send sends one message.
The response contains a message_id (format msg_<13-digit-unix-ms>_<8-hex-chars>) and the initial status queued. Add an Idempotency-Key header to retry safely. See Idempotency.
sender_id is required. A missing, blank, or unapproved value returns 403 SENDER_ID_NOT_APPROVED.

Phone number formats

UgaText delivers to Uganda (+256), Kenya (+254), and DR Congo (+243). Each of these formats is accepted: Invalid numbers return 422 INVALID_PHONE_NUMBER. To test for free, send to +256700000000, +254700000000, or +243810000000. See Sandbox.

Costs and currency

Volume discounts apply. See ugatext.com/pricing for current rates. Send and status responses report cost in several currencies:

Send bulk SMS

POST /sms/bulk sends one message to up to 5,000 recipients per request.
  • recipients also accepts the aliases phones, to, and messages.
  • Items can be objects with their own to, message, and sender_id, so each recipient can get a different message.
The response includes a batch_id, totals (total_recipients, dispatched_count, failed_count, total_segments, total_cost_ugx), and a results array with one entry per recipient. See Bulk results.

Schedule a message

POST /sms/schedule queues a message for a future time. Send to one number or pass an array for a scheduled bulk broadcast.
Response (200 OK)

Cancel or reschedule

You can change a scheduled message until its send time.
Cancel response
Cancelling an unknown ID returns 404 NOT_FOUND.

Track delivery

Messages move from queued to sent to delivered, or end as failed.
  • Poll: GET /sms/status/{id} returns the status, timestamps (sent_at, delivered_at, failed_at), failure_reason, network, and provider_reference.
  • Push: register a webhook to receive sms.sent, sms.delivered, and sms.failed events.
  • History: GET /sms/history lists your recent sent and queued messages.

Segments and encoding

Long messages are split into segments, and you’re billed per segment. Unicode supports Luganda, Swahili, and other regional character sets. Each response includes segments and encoding so you can confirm the cost. To check a message before sending, use the compliance pre-check.

Check your balance

GET /sms/balance returns your wallet balance in UGX, the price per SMS, and the remaining SMS units.
When the balance is too low, sends return 402 INSUFFICIENT_BALANCE. Top up with MTN Mobile Money, Airtel Money, or M-Pesa from the dashboard.