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.
Phone number formats
UgaText delivers to Uganda (+256), Kenya (+254), Tanzania (+255), and DR Congo (+243). Each of these formats is accepted:
The API normalizes leading zeros and local formatting before sending. Invalid numbers return
422 INVALID_PHONE_NUMBER. To test for free, send to +256700000000, +254700000000, +255700000000, or +243810000000. See Sandbox.
Tanzania numbers
Tanzanian national numbers have 9 digits after the country code and start with6 or 7, for example 0712 345 678 or 0682 123 456. Send them as +255712345678 or 255712345678.
Supported destinations
Costs and currency
Rates are listed in Supported destinations. Volume discounts apply. See ugatext.com/pricing for current rates. Send and status responses report cost in several currencies:Cross-border billing
Accounts billed in UGX, KES, or USD can send to Tanzania (+255) numbers directly. The TZS 16 rate is converted to your wallet currency at the real-time exchange rate and deducted from your balance.Send bulk SMS
POST /sms/bulk sends one message to up to 5,000 recipients per request. Larger batches return 400 BATCH_SIZE_EXCEEDED.
recipientsalso accepts the aliasesphones,to, andmessages.- Items can be objects with their own
to,message, andsender_id, so each recipient can get a different message.
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
404 NOT_FOUND. Cancelling a message that is already cancelled returns 400 ALREADY_CANCELLED, and cancelling one that was already sent or delivered returns 400 CANNOT_CANCEL.
Campaigns
Group a broadcast under a named campaign to track and cancel it as one unit.Track delivery
Messages move fromqueued 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, andprovider_reference. - Push: register a webhook to receive
sms.sent,sms.delivered, andsms.failedevents. - History:
GET /sms/history(aliasGET /messages) lists your recent messages.
GET /sms/history accepts these optional query parameters:
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.
402 INSUFFICIENT_BALANCE. Top up with MTN Mobile Money, Airtel Money, or M-Pesa from the dashboard.
