API Documentation
The Strongmb REST API lets you integrate airtime, data, cable TV, electricity, and bill payment services directly into your application. All requests return JSON.
The Strongmb API is a REST API. All responses are JSON. All requests must be made over HTTPS. Requests made over plain HTTP will be rejected.
POST /v1/purchases/airtime HTTP/1.1 Host: api.strongmb.ng Authorization: Bearer YOUR_API_KEY Content-Type: application/json Accept: application/json
{
"status": true,
"message": "Request successful",
"data": { // payload varies per endpoint },
"metadata": {
"code": "MACHINE_READABLE_CODE",
"timestamp": 1773796899,
"trace_id": "05E3F2360E"
}
}
All API requests require authentication using a Bearer token in the Authorization header. In your dashboard, click the Developer tab to view your API key.
Authorization: Bearer YOUR_API_KEY
Use the sandbox URL during development and the live URL in production.
The API uses standard HTTP status codes. All error responses include a machine-readable code and a human-readable message.
| HTTP Code | Meaning | Common Cause |
|---|---|---|
| 200 | OK | Request was successful |
| 201 | Created | Transaction completed successfully |
| 400 | Bad Request | Missing or invalid parameters |
| 401 | Unauthorized | Missing or invalid API key |
| 402 | Insufficient Balance | Wallet balance too low for the transaction |
| 403 | Forbidden | Account is inactive or suspended |
| 404 | Not Found | Resource does not exist |
| 422 | Unprocessable Entity | Validation failed — invalid phone, missing field |
| 429 | Too Many Requests | Daily limit exceeded — contact support to increase |
| 503 | Service Unavailable | Provider gateway is temporarily down |
{
"status": false,
"message": "Invalid mobile number.",
"data": null,
"metadata": {
"code": "ERR_INVALID_MOBILE_NUMBER",
"timestamp": 1773797071,
"trace_id": "99643G15FA"
}
}
Returns the profile and account information of the currently authenticated user.
| Header | Value | Required |
|---|---|---|
| Authorization | Bearer YOUR_API_KEY | Required |
{
"status": true,
"message": "User details retrieved successfully",
"data": {
"account": {
"name": "Strongmb User",
"email": "example@strongmb.ng",
"phone": "09077193312",
"account_status": "active",
"kyc_status": "incomplete",
"tier": "tier 1"
}
},
"metadata": {
"code": "USER_DETAILS_RETRIEVED",
"timestamp": 1773796899,
"trace_id": "05E3F2360E"
}
}
{
"status": false,
"message": "Unauthenticated. Invalid or missing API key.",
"data": null,
"metadata": {
"code": "ERR_UNAUTHENTICATED",
"timestamp": 1773796900,
"trace_id": "A1B2C3D4E5"
}
}
Returns all wallets associated with the authenticated user including balances, limits, and status.
| Header | Value | Required |
|---|---|---|
| Authorization | Bearer YOUR_API_KEY | Required |
{
"status": true,
"message": "Wallet details retrieved successfully",
"data": {
"wallets": [
{
"id": "c99c1747-d5d4-4a51-bbfc-d82d1b2c5640",
"type": "primary_ngn",
"currency": "NGN",
"balance": 44584,
"locked_balance": 0,
"tier": "tier 1",
"transaction_limit": 100000,
"balance_limit": 500000,
"status": "normal",
"updated_at": "2026-03-15 02:27:54+01"
}
]
},
"metadata": {
"code": "WALLET_DETAILS_RETRIEVED",
"timestamp": 1773796949,
"trace_id": "D9E6E57BE9"
}
}
Returns the most recent transactions for the authenticated user.
{
"status": true,
"message": "Transactions retrieved successfully",
"data": {
"count": 50,
"transactions": [
{
"uuid": "72f69533-5f11-45d6-8f26-a553f890b277",
"wallet_type": "primary_ngn",
"direction": "debit",
"type": "airtime",
"amount": 99,
"balance_before": 44114,
"balance_after": 44015,
"status": "successful",
"date": "2026-03-18 02:26:38+01",
"reference": "SMBD260aa1352a53aaa7sFAC9",
"details": {
"provider": "mtn",
"recipient": "0812345678",
"airtime_amount": 100,
"performed_via": "api"
}
}
]
},
"metadata": {
"code": "TRANSACTIONS_RETRIEVED",
"timestamp": 1773797290,
"trace_id": "DF008819CD"
}
}
{
"status": false,
"message": "No transactions found.",
"data": null,
"metadata": {
"code": "ERR_TRANSACTIONS_NOT_FOUND",
"timestamp": 1773797291,
"trace_id": "FF009820DE"
}
}
Returns a single transaction that matches the provided reference.
| Parameter | Type | Required | Description |
|---|---|---|---|
| reference | string | Required | Unique transaction reference e.g. SMBD260aa1352a53aaa7sFAC9 |
{
"status": true,
"message": "Transaction details retrieved successfully",
"data": {
"transaction": {
"uuid": "72f69533-5f11-45d6-8f26-a553f890b277",
"wallet_type": "primary_ngn",
"direction": "debit",
"type": "airtime",
"amount": 99,
"balance_before": 44114,
"balance_after": 44015,
"status": "successful",
"date": "2026-03-18 02:26:38+01",
"reference": "SMBD260aa1352a53aaa7sFAC9",
"details": {
"provider": "mtn",
"recipient": "0812345678",
"airtime_amount": 100,
"performed_via": "api"
}
}
},
"metadata": {
"code": "TRANSACTION_DETAILS_RETRIEVED",
"timestamp": 1773797403,
"trace_id": "F07C7189C0"
}
}
{
"status": false,
"message": "Transaction not found.",
"data": null,
"metadata": {
"code": "ERR_TRANSACTIONS_NOT_FOUND",
"timestamp": 1773797291,
"trace_id": "FF009820DE"
}
}
Returns available
airtime providers and their product codes. Use the product_code when making a
purchase.
{
"status": true,
"message": "Products retrieved successfully",
"data": {
"billers": {
"551978d5-1a65-41d5-904f-f2fd667b98a5": {
"name": "MTN NIGERIA",
"description": "Airtime",
"products": {
"vtu": {
"name": "VTU",
"api_access": true,
"plans": [
{
"name": "MTN AIRTIME",
"discount": 1,
"pricing_model": "percent",
"product_code": "smb_mtn_vtu"
}
]
}
}
},
"9b704812-08bd-42a1-82b2-20de2c7f395e": {
"name": "AIRTEL NIGERIA",
"description": "Airtime",
"products": {
"vtu": {
"plans": [
{
"name": "AIRTEL AIRTIME",
"discount": 1,
"pricing_model": "percent",
"product_code": "smb_air_vtu"
}
]
}
}
}
}
},
"metadata": {
"code": "PRODUCTS_RETRIEVED",
"timestamp": 1773797472,
"trace_id": "6D7C4DE84B"
}
}
Top up airtime for any Nigerian network. Amount is deducted from the user's wallet balance.
| Field | Type | Required | Description |
|---|---|---|---|
| phone | string | Required | Recipient phone number (e.g. 0812345678) |
| product_code | string | Required | From /products/airtime (e.g. smb_mtn_vtu) |
| amount | string | Required | Airtime face value in Naira as string (e.g. "100") |
| reference | string | Required | Your unique reference. a-zA-Z0-9 only. |
{
"phone": "0812345678",
"product_code": "smb_mtn_vtu",
"amount": "100",
"reference": "SMBD260aa1352a53aaa7sFAC9"
}
{
"status": true,
"message": "Airtime purchase is being processed.",
"data": {
"transaction_status": "processing",
"type": "airtime",
"provider": "mtn",
"recipient": "0812345678",
"airtime_amount": 100,
"reference": "SMBD260aa1352a53aaa7sFAC9",
"currency": "NGN",
"balance_before": "44114.00",
"balance_after": "44015.00",
"amount": 99
},
"metadata": {
"code": "ERR_TRANSACTION_PROCESSING",
"timestamp": 1773797068,
"trace_id": "96640DE2C7"
}
}
{
"status": true,
"message": "Airtime purchased successfully.",
"data": {
"transaction_status": "successful",
"type": "airtime",
"provider": "mtn",
"recipient": "0812345678",
"airtime_amount": 100,
"reference": "SMBD260aa1352a53aaa7sFAC9",
"currency": "NGN",
"balance_before": "44114.00",
"balance_after": "44015.00",
"amount": 99
},
"metadata": {
"code": "TRANSACTION_SUCCESSFUL",
"timestamp": 1773797069,
"trace_id": "C2D3E4F5A6"
}
}
{
"status": false,
"message": "Insufficient wallet balance.",
"data": null,
"metadata": {
"code": "ERR_INSUFFICIENT_BALANCE",
"timestamp": 1773797069,
"trace_id": "97641EF3D8"
}
}
{
"status": false,
"message": "Invalid mobile number.",
"data": null,
"metadata": {
"code": "ERR_INVALID_MOBILE_NUMBER",
"timestamp": 1773797071,
"trace_id": "99643G15FA"
}
}
{
"status": false,
"message": "Daily limit exceeded. Contact support to increase.",
"data": null,
"metadata": {
"code": "ERR_DAILY_LIMIT_EXCEEDED",
"timestamp": 1773797073,
"trace_id": "BB645I37HC"
}
}
{
"status": false,
"message": "Service provider temporarily unavailable.",
"data": null,
"metadata": {
"code": "ERR_PRODUCT_GATEWAY_UNAVAILABLE",
"timestamp": 1773797070,
"trace_id": "98642F04E9"
}
}
Returns all available
data plans. Use the product_code from each plan
when making a purchase.
{
"status": true,
"message": "Products retrieved successfully",
"data": {
"billers": {
"551978d5-...": {
"name": "MTN NIGERIA",
"products": {
"sme": {
"name": "SME",
"api_access": true,
"plans": [
{
"name": "100MB",
"bundle_size_mb": 100,
"amount": 120,
"validity": "2DAYS",
"product_code": "smb_mtn_sme_100mb_2days"
},
{
"name": "1GB",
"bundle_size_mb": 1024,
"amount": 470,
"validity": "30DAYS",
"product_code": "smb_mtn_sme_1gb_30days"
}
]
}
}
}
}
},
"metadata": {
"code": "PRODUCTS_RETRIEVED",
"timestamp": 1773797441,
"trace_id": "EA3E9D3EDC"
}
}
Purchase a data plan using a product_code obtained from /products/internet.
| Field | Type | Required | Description |
|---|---|---|---|
| phone | string | Required | Recipient phone number |
| product_code | string | Required | From /products/internet (e.g. smb_mtn_sme_1gb_30days) |
| reference | string | Required | Unique reference. a-zA-Z0-9 only. |
{
"phone": "0812345678",
"product_code": "smb_mtn_sme_1gb_30days",
"reference": "SMsadkjhdfkgfjaaa1fhaa"
}
{
"status": true,
"message": "Data purchase is being processed.",
"data": {
"transaction_status": "processing",
"type": "data",
"provider": "mtn",
"title": "1gb mtn sme data",
"recipient": "0812345678",
"data_type": "sme",
"plan": "1gb",
"validity": "30days",
"bundle_size_mb": 1024,
"reference": "SMsadkjhdfkgfjaaa1fhaa",
"currency": "NGN",
"balance_before": "44584.00",
"balance_after": "44114.00",
"amount": 470
},
"metadata": {
"code": "ERR_TRANSACTION_PROCESSING",
"timestamp": 1773797068,
"trace_id": "96640DE2C7"
}
}
{
"status": true,
"message": "Data purchased successfully.",
"data": {
"transaction_status": "successful",
"type": "data",
"provider": "mtn",
"title": "1gb mtn sme data",
"recipient": "0812345678",
"data_type": "sme",
"plan": "1gb",
"validity": "30days",
"bundle_size_mb": 1024,
"reference": "SMsadkjhdfkgfjaaa1fhaa",
"currency": "NGN",
"balance_before": "44584.00",
"balance_after": "44114.00",
"amount": 470
},
"metadata": {
"code": "TRANSACTION_SUCCESSFUL",
"timestamp": 1773797069,
"trace_id": "D4E5F6A7B8"
}
}
{
"status": false,
"message": "Insufficient wallet balance.",
"data": null,
"metadata": {
"code": "ERR_INSUFFICIENT_BALANCE",
"timestamp": 1773797069,
"trace_id": "97641EF3D8"
}
}
{
"status": false,
"message": "Invalid mobile number.",
"data": null,
"metadata": {
"code": "ERR_INVALID_MOBILE_NUMBER",
"timestamp": 1773797071,
"trace_id": "99643G15FA"
}
}
{
"status": false,
"message": "Daily limit exceeded. Contact support to increase.",
"data": null,
"metadata": {
"code": "ERR_DAILY_LIMIT_EXCEEDED",
"timestamp": 1773797073,
"trace_id": "BB645I37HC"
}
}