Before you start
- Connect an MTN SIM in My SIM Cards. This is the SIM that receives the airtime.
- Open Airtime Cash in the dashboard and set your spending limits.
- Register a webhook if you want push notifications (see Webhooks).
The flow
1. Start a session
session_id.
2. Verify the code
active. Store the session_id against this user. OnePanel keeps their MTN login (encrypted) so the next sale needs no OTP.
3. Transfer airtime
pinis the user’s 4-digit MTN airtime-transfer PIN. Ask for it on every sale. OnePanel never stores it, and you should not either.referenceis your own unique ID. Sending the same reference again returns the original result and never transfers twice, so it is safe to retry after a network error.
4. Credit the user
Credit the user only whenstatus is success.
Sessions that need a new OTP
If a user’s MTN login can no longer be renewed, or the session has been unused for longer than your inactivity limit, the transfer returns 409 withsession_status of reauth_required or expired. Nothing is sent. Start a new session for that number (steps 1 and 2) and use the new session_id.
To stop a user’s session yourself, call DELETE /airtime-cash/sessions/{id}. The stored MTN login is erased immediately.
Limits
You set these in the dashboard or withPUT /airtime-cash/settings. Transfers that would break a limit are refused with 422 before anything is sent.
The minimum transfer is ₦50. Daily limits reset at midnight Nigerian time. Pending and unconfirmed transfers count toward them.
After 3 failed transfers on one session within an hour, further transfers on it return 429 for a while. This protects the user’s PIN from being locked by MTN.
Webhooks
If you have a webhook endpoint, OnePanel posts these events, signed like every other OnePanel webhook. Failed deliveries are retried automatically.Good to know
- OnePanel never gives you the user’s MTN token. You only ever hold a
session_id. - Airtime transfers cannot be reversed. Only pay out on
success. - Every OTP, transfer and revocation is recorded in an audit trail on our side.

