Skip to navigation

Purchase Airtime

View as Markdown

Buys airtime for a phone number.

Body (JSON):

FieldTypeRules
idempotencyKeystringrequired, 4–250 chars, unique per purchase
serviceCategoryIdstringrequired, 4–250; an active Airtime category (network)
phoneNumberstringrequired, exactly 11 digits (e.g. 08031234567)
amountnumberrequired, ₦100–₦50,000
settlementIdintegerrequired; one of your active settlement accounts

Purchase outcomes (shared flow):

  • 200 data.status: "SUCCESS" — delivered.
  • 200 data.status: "PENDING" with message ... purchase is being confirmed. Do not retry; check the transaction status. — provider outcome unknown; you have been debited and not refunded. Poll Fetch Single VTU Transaction; do not resend.
  • 400 ... purchase failed. Your balance has been refunded. — provider definitively rejected; safe to retry with a new idempotencyKey.
  • 409 Duplicate request in flight — another request with the same idempotencyKey is being processed.
  • 200 Duplicate request — returning existing transaction — the idempotencyKey was already used; the original transaction is returned and nothing is charged.

Your settlement balance must be strictly greater than the amount (balance <= amount is rejected as insufficient).

Error format: body validation failures (Joi) return { "status": "error", "message": "Validation error", "details": [ ... ] }; all other errors return { "success": false, "message": "..." }. Money fields (amount, fee) are Prisma Decimals and are serialized as strings (e.g. "1000").

Authentication

AuthorizationBearer

Access token from Generate Access Token (valid 15 minutes).

Request

This endpoint expects an object.
idempotencyKeystringOptional
serviceCategoryIdstringOptional
phoneNumberstringOptional
amountintegerOptional
settlementIdintegerOptional

Response

Success / Pending (being confirmed) / Duplicate (existing transaction)

successbooleanOptional
dataobjectOptional
messagestringOptional

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
409
Conflict Error
500
Internal Server Error