Skip to content
Sendozi
Live

Transactional & OTP SMS

The code your customer is waiting for, right now

One-time passwords, payment alerts and account notifications, sent from your product through an HTTP API. Idempotent requests, per-recipient delivery states, signed webhooks, and a route that is not filtered as marketing. ₦7.00 per page to MTN, Airtel, Glo, 9mobile.

Developer proof

POST /v1/sms/send

curlnodephppython
curl https://api.sendozi.com/v1/sms/send   -H "Authorization: Bearer $SENDOZI_API_KEY"   -H "Idempotency-Key: otp-248391"   -H "Content-Type: application/json"   -d '{
    "sender": "Sendozi",
    "recipient": "+2348012345678",
    "message": "Your Sendozi OTP is 248391.",
    "sms_type": "transactional"
  }'

Webhook event preview

{
  "type": "message.delivered",
  "id": "evt_sample_92f1",
  "message_id": "msg_8F41",
  "status": "delivered",
  "delivered_at": "2026-07-02T12:06:18+01:00"
}

Product capabilities

What this channel handles

01

API-led, not dashboard-led

Transactional messages are triggered by something the customer just did, so they belong in your code. One POST with the recipient, the body and sms_type: transactional, and a message ID you can follow.

02

A Sender ID approved for this route

The networks approve a transactional Sender ID against an OTP or alert sample message. Sendozi checks the route and the sender together on every production request: a transactional send naming a promotional Sender ID fails before wallet reservation, and the reverse fails too.

03

Not filtered as marketing

Transactional traffic travels the corporate route, which is not filtered against the Do Not Disturb register the way promotional traffic is. That is what the route is for; it is not a way to send campaigns to DND numbers.

04

Idempotent by design

Send an Idempotency-Key with the request. A client retry after a timeout returns the original result instead of sending the code twice and charging for it twice.

05

Signed delivery webhooks

Delivery, failure and rejection events are posted to your endpoint and signed, so your system can react to a failed OTP rather than waiting for the customer to complain.

06

Around the clock

No delivery window applies. A code requested at 03:00 is handed to the network at 03:00, because the customer is on your login screen right now.

How delivery works

Transactional messages travel the operators' corporate route, which is not filtered against the Do Not Disturb register, and are delivered at any hour. The route is for messages the recipient triggered: sending campaigns over it is a misuse the networks act on. Final delivery is the recipient network's decision, and Sendozi reports the state it receives.

Use cases

Where Transactional & OTP SMS fits

Each use case maps to a concrete workflow, report or next channel.

02

Transaction alerts

Debits, credits and confirmations, delivered within seconds of the event that caused them.

For fintech teams

03

Order and delivery updates

Dispatch, out-for-delivery and delivered notices triggered from your own order system.

For stores and retailers

04

Account notifications

Password changes, new-device sign-ins and expiry notices the recipient expects because they caused them.

SMS API reference

Pricing note

Transactional SMS is ₦7.00 per page, the same rate as promotional traffic. No setup fee, no monthly minimum and no contract See SMS pricing.

Request a transactional Sender ID

POST with sms_type

Read the message ID

Receive signed delivery events

Where this runs

Transactional and OTP SMS is API-led and needs a Sender ID approved on the transactional route. The Console shows the delivery record, the wallet and the Sender ID request, but the send itself comes from your code.

Read the SMS API reference

Learn how it works

Frequently asked questions

Start sending with Transactional & OTP SMS

Create a free account, or talk to sales before a larger rollout.