Integrate data bundles for MTN, GLO, AIRTEL, 9MOBILE, SMILE instantly. Wallet debited immediately. Auto-refund on failure.
https://onepayment.com.ngAuthorization: Token YOUR_TOKEN IsAuthenticatedMTN=1, GLO=2, 9MOBILE=3, AIRTEL=4
Get all network IDs. Use the returned `id` as `network` in purchase requests.
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/network/" -H "Authorization: Token YOUR_TOKEN"
RESPONSE 200
[ {"id": 1, "name": "MTN"}, {"id": 2, "name": "GLO"}, {"id": 3, "name": "9MOBILE"}, {"id": 4, "name": "AIRTEL"} ]
Get all available data plans grouped by network. Use `id` as `plan` in purchase requests.
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/data_plans/" -H "Authorization: Token YOUR_TOKEN"
RESPONSE 200
{ "MTN_PLAN": [ { "id": 12, "network": 1, "plan_type": "SME", "month_validate": "30 Days", "plan": "1.5GB", "plan_amount": "490" } ], "GLO_PLAN": [], "9MOBILE_PLAN": [], "AIRTEL_PLAN": [] }
Purchase data bundle. Routes automatically
cURL EXAMPLE
curl -X POST "https://onepayment.com.ng/api/data/" \
-H "Authorization: Token YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"network": 1, "plan": 12, "mobile_number": "08031234567", "Ported_number": false}'PAYLOAD
| Field | Type | Required | Description |
|---|---|---|---|
| network | integer | Yes | Network ID from /api/network/ |
| plan | integer | Yes | Plan ID from /api/data_plans/ |
| mobile_number | string | Yes | 11 digits |
| Ported_number | boolean | No | Default: false |
RESPONSE SUCCESS 201
{ "id": 102, "ident": "24082714310098765432def456", "mobile_number": "08031234567", "Status": "successful", "plan_name": "1.5GB", "plan_network": "MTN", "purchase_amount": "500", "plan_amount": "490", "balance_before": "4500", "balance_after": "4010", "create_date": "2026-08-27T14:31:00Z" }
RESPONSE ERROR 400
{ "error": "You can't purchase this plan due to insufficient balance ₦400.00 Kindly Fund your Wallet" }
List all your data transactions. Supports search and pagination.
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/data/?search=08031234567" -H "Authorization: Token YOUR_TOKEN"
QUERY PARAMS
| Param | Type | Description |
|---|---|---|
| search | string | Search by id, ident, or mobile_number |
| page | integer | Page number |
RESPONSE 200
{ "count": 25, "next": "https://onepayment.com.ng/api/data/?page=2", "previous": null, "results": [ { "id": 101, "ident": "24082714302212345678abc123", "mobile_number": "08031234567", "Status": "successful", "plan_name": "1.5GB", "plan_amount": "490" } ] }
Get details of a single data transaction. No trailing slash.
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/data/102" -H "Authorization: Token YOUR_TOKEN"
RESPONSE 200
{ "id": 101, "ident": "24082714302212345678abc123", "user": 12, "network": 1, "plan": 12, "mobile_number": "08031234567", "Ported_number": false, "Status": "successful", "plan_name": "1.5GB", "plan_network": "MTN", "purchase_amount": "500", "plan_amount": "490", "balance_before": "4500", "balance_after": "4010", "create_date": "2026-08-27T14:31:00Z", "update_date": "2026-08-27T14:31:05Z" }
RESPONSE ERROR 404
{"detail": "Not found."}
Common error responses you may encounter when using the Data API
| Code | Message | Description |
|---|---|---|
| 400 | invalid mobile number | Phone number format is invalid or doesn't match network |
| 400 | insufficient balance | Wallet balance is less than plan amount |
| 400 | Phone number has been Blacklist | Number is blacklisted and cannot receive data |
| 400 | Data not available on this network currently | Network vendor is temporarily down |
| 400 | GIFTING/SME/SOCIAL Data under maintainace | Plan type is currently under maintenance |
| 400 | Unverified User are limited to {limit} naira per day | Daily transaction limit exceeded for unverified account |
| 404 | invalid plan id for {network} | Plan ID does not exist for selected network |
Status becomes failed, amount is automatically refunded to wallet with description DATA topup Refund for {number}Buy VTU and Share and Sell airtime for all networks. Discount applied based on your user_type.
https://onepayment.com.ngAuthorization: Token YOUR_TOKEN IsAuthenticatedMTN=1, GLO=2, 9MOBILE=3, AIRTEL=4
Purchase airtime instantly. Wallet debited immediately.
PAYLOAD
| Field | Type | Required | Description |
|---|---|---|---|
| network | integer | Yes | 1=MTN, 2=GLO, 3=9MOBILE, 4=AIRTEL |
| mobile_number | string | Yes | 11 digits |
| amount | string | Yes | Minimum ₦100 |
| airtime_type | string | Yes | VTU or Share and Sell |
| Ported_number | boolean | No | Default: false |
cURL EXAMPLE
curl -X POST "https://onepayment.com.ng/api/v1/airtime/" \
-H "Authorization: Token YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"network": 1, "mobile_number": "08031234567", "amount": "500", "airtime_type": "VTU"}'RESPONSE SUCCESS 201
{ "id": 55, "ident": "24082814310012345678abc123", "Status": "successful", "paid_amount": "490.00", "balance_after": "4010.00" }
Get single airtime transaction by ID
RESPONSE 200
{"id": 55, "Status": "successful", "mobile_number": "08031234567"}
Verify NIN by NIN, Phone, Tracking ID, or Demography. Wallet is debited on submission. Returns verified data + signed PDF download link valid for 30 days.
https://onepayment.com.ngAuthorization: Token YOUR_TOKEN IsAuthenticatedregular, premiumNIN Verification, NIN Phone Search, NIN Tracking, NIN Demography Searchstatus: processing until admin approves.create_date. Signed link expires in 5 minutes.
Get available pricing and supported verification types
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/v1/nin-verification/?init=1" \ -H "Authorization: Token YOUR_TOKEN"
RESPONSE 200
{ "fees": [ {"name": "NIN Verification", "card_type": "regular", "amount": 100.0, "image": "https://onepayment.com.ng/media/nin_cards/regular.png"}, {"name": "NIN Verification", "card_type": "premium", "amount": 200.0, "image": "https://onepayment.com.ng/media/nin_cards/premium.png"}, {"name": "NIN Phone Search", "card_type": "regular", "amount": 150.0, "image": "https://onepayment.com.ng/media/nin_cards/regular.png"}, {"name": "NIN Tracking", "card_type": "regular", "amount": 100.0, "image": "https://onepayment.com.ng/media/nin_cards/regular.png"}, {"name": "NIN Demography Search", "card_type": "premium", "amount": 250.0, "image": "https://onepayment.com.ng/media/nin_cards/premium.png"} ], "pdf_expiry_days": 30, "verification_types": ["NIN Verification", "NIN Phone Search", "NIN Tracking", "NIN Demography Search"] }
Submit verification request. Wallet is debited immediately.
1. NIN Verification
{ "verification_type": "NIN Verification", "card_type": "regular", "nin": "12345678901", "Accept_Terms": true }
| Field | Type | Required | Description |
|---|---|---|---|
| verification_type | string | Yes | NIN Verification |
| card_type | string | Yes | regular or premium |
| nin | string | Yes | 11 digits |
| Accept_Terms | boolean | Yes | Must be true. write_only |
2. NIN Phone Search
{ "verification_type": "NIN Phone Search", "card_type": "regular", "phone": "08012345678", "Accept_Terms": true }
| Field | Type | Required | Description |
|---|---|---|---|
| verification_type | string | Yes | NIN Phone Search |
| card_type | string | Yes | regular or premium |
| phone | string | Yes | Phone number linked to NIN |
| Accept_Terms | boolean | Yes | Must be true |
3. NIN Tracking
{ "verification_type": "NIN Tracking", "card_type": "regular", "tracking_id": "TRK123456", "Accept_Terms": true }
| Field | Type | Required | Description |
|---|---|---|---|
| verification_type | string | Yes | NIN Tracking |
| card_type | string | Yes | regular or premium |
| tracking_id | string | Yes | Tracking ID |
| Accept_Terms | boolean | Yes | Must be true |
4. NIN Demography Search
{ "verification_type": "NIN Demography Search", "card_type": "premium", "firstname_search": "John", "lastname_search": "Doe", "gender_search": "Male", "dob_search": "1990-01-01", "Accept_Terms": true }
| Field | Type | Required | Description |
|---|---|---|---|
| verification_type | string | Yes | NIN Demography Search |
| card_type | string | Yes | regular or premium |
| firstname_search | string | Yes | First name |
| lastname_search | string | Yes | Last name |
| gender_search | string | Yes | Male or Female |
| dob_search | string | Yes | Format: YYYY-MM-DD |
| Accept_Terms | boolean | Yes | Must be true |
RESPONSE SUCCESS 200
{ "success": true, "message": "NIN Verification successful", "verification_id": 456, "amount": 100.0, "pdf_expiry_days": 30, "data": { "verification_id": 456, "verification_type": "NIN Verification", "card_type": "regular", "nin": "12345678901", "phone": null, "tracking_id": null, "firstname_search": null, "lastname_search": null, "gender_search": null, "dob_search": null, "full_name": "JOHN MICHAEL DOE", "photo_url": "https://onepayment.com.ng/media/nin_photos/nin_12345678901.jpg", "card_image": "https://onepayment.com.ng/media/nin_cards/regular.png", "status": "successful", "amount": 100.0, "message": "NIN Verification successful", "report_id": "RPT12345", "create_date": "2026-08-25T10:00:00Z", "pdf_expired": false, "expires_at": "2026-09-24T10:00:00Z", "pdf_url": "https://onepayment.com.ng/api/v1/nin-verification/download/456/", "pdf_download_url": "https://onepayment.com.ng/api/v1/nin-verification/pdf/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9/", "can_download_pdf": true }, "result": { } }
RESPONSE PROCESSING 200
{ "success": true, "message": "Request submitted successfully. Awaiting admin review.", "verification_id": 456, "amount": 100.0, "status": "processing" }
RESPONSE ERROR 400
{ "success": false, "error": "Invalid form", "errors": {"nin": ["NIN must be exactly 11 digits."]} }
List all your past verifications
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/v1/nin-verification/history/" -H "Authorization: Token YOUR_TOKEN"
RESPONSE 200
{ "count": 1, "results": [ { "verification_id": 456, "verification_type": "NIN Verification", "card_type": "regular", "status": "successful", "full_name": "JOHN DOE", "amount": 100.0, "pdf_expired": false, "expires_at": "2026-09-24T10:00:00Z", "pdf_download_url": "https://onepayment.com.ng/api/v1/nin-verification/pdf/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9/", "can_download_pdf": true, "create_date": "2026-08-25T10:00:00Z" } ] }
Get details of a single verification. Returns the same object as data in the POST response.
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/v1/nin-verification/456/" -H "Authorization: Token YOUR_TOKEN"
RESPONSE 200
{ "verification_id": 456, "verification_type": "NIN Verification", "card_type": "regular", "nin": "12345678901", "phone": null, "tracking_id": null, "firstname_search": null, "lastname_search": null, "gender_search": null, "dob_search": null, "full_name": "JOHN DOE", "photo_url": "https://onepayment.com.ng/media/nin_photos/nin_12345678901.jpg", "card_image": "https://onepayment.com.ng/media/nin_cards/regular.png", "status": "successful", "amount": 100.0, "message": "NIN Verification successful", "report_id": "RPT12345", "create_date": "2026-08-25T10:00:00Z", "pdf_expired": false, "expires_at": "2026-09-24T10:00:00Z", "pdf_url": "https://onepayment.com.ng/api/v1/nin-verification/download/456/", "pdf_download_url": "https://onepayment.com.ng/api/v1/nin-verification/pdf/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9/", "can_download_pdf": true }
Generate a new 5-minute signed download link. Only works if status: successful and within 30 days of create_date.
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/v1/nin-verification/456/generate-pdf/" -H "Authorization: Token YOUR_TOKEN"
RESPONSE SUCCESS 200
{ "success": true, "message": "PDF ready", "pdf_url": "https://onepayment.com.ng/api/v1/nin-verification/pdf/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9/", "expires_at": "2026-08-25T15:35:00Z" }
RESPONSE ERROR 403
{ "success": false, "error": "PDF download expired. 30 days limit." }
Send money instantly to any bank in Nigeria. Wallet is debited only on success. Failed transfers are auto-refunded by OnePayment.
https://onepayment.com.ngAuthorization: Token YOUR_TOKEN IsAuthenticatedUse this to load the bank dropdown, show user wallet balance, and check daily transfer limits before initiating a transfer.
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/v1/fundtransfer/banks/" \ -H "Authorization: Token YOUR_TOKEN"
RESPONSE 200
{ "status": true, "banks": [ { "id": 1, "code": "000013", "name": "Guaranty Trust Bank", "short_name": "GTBANK", "logo_url": "https://cdn.onepayment.ng/banks/gtb.png", "is_active": true } ], "bank_count": 25, "wallet_balance": 20010.00, "daily_limit": 50000.00, "today_spent": 15000.00, "today_remaining": 35000.00 }
Admin only. Updates your bank list from OnePayment to ensure you always have the latest banks and codes.
RESPONSE 200
{ "status": true, "message": "25 banks updated successfully", "banks": [], "bank_count": 25 }
Verify a beneficiary account number and bank before sending money. Call this on blur of account number to show account name.
PAYLOAD
| Field | Type | Required | Validation |
|---|---|---|---|
| bank_code | string | Yes | Bank code from /banks/ |
| account_number | string | Yes | Exactly 10 digits |
cURL EXAMPLE
curl -X POST "https://onepayment.com.ng/api/v1/fundtransfer/verify-account/" \
-H "Authorization: Token YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bank_code": "000013", "account_number": "0123456789"}'
RESPONSE SUCCESS 200
{ "status": true, "account_name": "JOHN DOE" }
RESPONSE ERROR 400
{"status": false, "message": "Account number must be 10 digits"}
Preview the fee and total amount that will be debited. Also validates KYC limit and wallet balance before you send.
PAYLOAD
| Field | Type | Required | Description |
|---|---|---|---|
| amount | number/string | Yes | Amount to send. Min ₦100.00 |
RESPONSE 200
{ "status": true, "amount": "5000.00", "fee": "0.00", "total_debited": "5000.00", "wallet_balance": "20010.00", "daily_remaining": "35000.00", "message": "Fee calculated successfully" }
Send money to a bank account. You must verify the account first. Wallet is only debited if the transfer is successful.
PAYLOAD
| Field | Type | Required | Description |
|---|---|---|---|
| bank_id | integer | Yes | Use the `id` from /banks/ endpoint |
| account_number | string | Yes | 10 digit account number |
| amount | number | Yes | Min ₦100.00 |
| narration | string | No | Max 255. Defaults to your Full Name |
cURL EXAMPLE
curl -X POST "https://onepayment.com.ng/api/v1/fundtransfer/" \
-H "Authorization: Token YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bank_id": 1, "account_number": "0123456789", "amount": 5000.00, "narration": "Invoice Payment"}'
RESPONSE SUCCESS 201
{ "status": true, "message": "₦5000.00 sent to JOHN DOE successfully. Fee: ₦0.00", "transfer": { "id": 801, "reference": "OP7A8B9C0D1E2", "ident": "OP7A8B9C0D1E2", "bank": {"id": 1, "code": "000013", "name": "Guaranty Trust Bank", "short_name": "GTB", "logo_url": "...", "is_active": true}, "bank_name": "Guaranty Trust Bank", "bank_code": "000013", "account_number": "0123456789", "account_name": "JOHN DOE", "amount": "5000.00", "charge": "0.00", "total_debited": "5000.00", "narration": "Invoice Payment", "Status": "successful", "failure_reason": null, "session_id": "SESS123", "provider_reference": "OPX123456", "create_date": "2026-08-27T14:31:00Z", "completed_at": "2026-08-27T14:31:05Z" } }
Check the current status of a specific transfer. This endpoint also auto-updates the status with OnePayment if it was pending.
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/v1/fundtransfer/status/OP7A8B9C0D1E2/" \ -H "Authorization: Token YOUR_TOKEN"
RESPONSE 200
{ "status": true, "transfer": {... Full transfer object } }
Get your transfer history. This endpoint automatically checks and updates the status of your first 5 pending transfers.
QUERY PARAMS
| Param | Type | Description |
|---|---|---|
| status | string | Filter: all, successful, pending, failed, reversed |
cURL EXAMPLE
curl -X GET "https://onepayment.com.ng/api/v1/fundtransfer/history/?status=pending" \ -H "Authorization: Token YOUR_TOKEN"
RESPONSE 200
{ "status": true, "transfers": [... array of transfer objects ] }
| Status | Meaning | Wallet Action |
|---|---|---|
pending | Sent to OnePayment. Awaiting bank confirmation | Not debited |
successful | Credited to beneficiary | Debited immediately |
failed | Rejected by destination bank | Not debited |
reversed | Failed and auto-refunded | Refunded total_debited |
deleted | Soft deleted | N/A |
total_debited amount to your wallet. A wallet log is created: Fund Transfer Refund ({bank_name}) - {account_number}