STRONGMB
API Docs v1.0 arrow_back Back
Developer Reference

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.

Base URL https://api.strongmb.ng/v1
Overview

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.

info This API is currently in v1. Breaking changes will be communicated via email before deployment.
Request Format
HTTP
POST /v1/purchases/airtime HTTP/1.1
Host: api.strongmb.ng
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: application/json
warning Always check metadata.code in every response. Do not rely only on HTTP status codes when deciding transaction state.
Response Format
JSON
{
  "status": true,
  "message": "Request successful",
  "data": { // payload varies per endpoint },
  "metadata": {
    "code": "MACHINE_READABLE_CODE",
    "timestamp": 1773796899,
    "trace_id": "05E3F2360E"
  }
}
Authentication

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.

1
Find your API Key
Log in to your Strongmb dashboard, open the Developer tab, and copy your API key. Keep it safe — do not share it.
2
Add the key to every request
Include it as a Bearer token in the Authorization header of every API request.
3
Keep it secret
Never expose your API key in frontend code or public repositories. Store it in environment variables.
Authorization Header
Authorization: Bearer YOUR_API_KEY
warning Store your API key securely in environment variables and never expose it in frontend code or public repositories.
Base URL

Use the sandbox URL during development and the live URL in production.

Production
Live https://api.strongmb.ng/v1
Sandbox
Test https://sandbox.api.strongmb.ng/v1
Error Codes

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
Error Response Example
JSON — 422 Validation Error
{
  "status": false,
  "message": "Invalid mobile number.",
  "data": null,
  "metadata": {
    "code": "ERR_INVALID_MOBILE_NUMBER",
    "timestamp": 1773797071,
    "trace_id": "99643G15FA"
  }
}
Account
GET /user Get authenticated user details

Returns the profile and account information of the currently authenticated user.

Headers
Header Value Required
Authorization Bearer YOUR_API_KEY Required
JSON Response
{
  "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"
  }
}
JSON Response
{
  "status": false,
  "message": "Unauthenticated. Invalid or missing API key.",
  "data": null,
  "metadata": {
    "code": "ERR_UNAUTHENTICATED",
    "timestamp": 1773796900,
    "trace_id": "A1B2C3D4E5"
  }
}
GET /wallets Get all user wallets

Returns all wallets associated with the authenticated user including balances, limits, and status.

Headers
Header Value Required
Authorization Bearer YOUR_API_KEY Required
JSON Response
{
  "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"
  }
}
GET /transactions List transaction history

Returns the most recent transactions for the authenticated user.

JSON Response
{
  "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"
  }
}
JSON Response
{
  "status": false,
  "message": "No transactions found.",
  "data": null,
  "metadata": {
    "code": "ERR_TRANSACTIONS_NOT_FOUND",
    "timestamp": 1773797291,
    "trace_id": "FF009820DE"
  }
}
GET /transactions/{reference} Get transaction by reference

Returns a single transaction that matches the provided reference.

Path Parameter
Parameter Type Required Description
reference string Required Unique transaction reference e.g. SMBD260aa1352a53aaa7sFAC9
JSON Response
{
  "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"
  }
}
JSON Response
{
  "status": false,
  "message": "Transaction not found.",
  "data": null,
  "metadata": {
    "code": "ERR_TRANSACTIONS_NOT_FOUND",
    "timestamp": 1773797291,
    "trace_id": "FF009820DE"
  }
}
Airtime
GET /products/airtime Airtime plans and product codes

Returns available airtime providers and their product codes. Use the product_code when making a purchase.

JSON Response
{
  "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"
  }
}
POST /purchases/airtime Purchase airtime

Top up airtime for any Nigerian network. Amount is deducted from the user's wallet balance.

info The reference must be unique per transaction and contain only a-z A-Z 0-9. No spaces, dashes, or special characters allowed.
Request Body
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.
Request Example
JSON Payload
{
  "phone": "0812345678",
  "product_code": "smb_mtn_vtu",
  "amount": "100",
  "reference": "SMBD260aa1352a53aaa7sFAC9"
}
JSON Response — 200 Processing
{
  "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"
  }
}
JSON Response — 201 Successful
{
  "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"
  }
}
JSON Response — 402
{
  "status": false,
  "message": "Insufficient wallet balance.",
  "data": null,
  "metadata": {
    "code": "ERR_INSUFFICIENT_BALANCE",
    "timestamp": 1773797069,
    "trace_id": "97641EF3D8"
  }
}
JSON Response — 422
{
  "status": false,
  "message": "Invalid mobile number.",
  "data": null,
  "metadata": {
    "code": "ERR_INVALID_MOBILE_NUMBER",
    "timestamp": 1773797071,
    "trace_id": "99643G15FA"
  }
}
JSON Response — 429
{
  "status": false,
  "message": "Daily limit exceeded. Contact support to increase.",
  "data": null,
  "metadata": {
    "code": "ERR_DAILY_LIMIT_EXCEEDED",
    "timestamp": 1773797073,
    "trace_id": "BB645I37HC"
  }
}
JSON Response — 503
{
  "status": false,
  "message": "Service provider temporarily unavailable.",
  "data": null,
  "metadata": {
    "code": "ERR_PRODUCT_GATEWAY_UNAVAILABLE",
    "timestamp": 1773797070,
    "trace_id": "98642F04E9"
  }
}
Data
GET /products/internet Get data plans and product codes

Returns all available data plans. Use the product_code from each plan when making a purchase.

JSON Response
{
  "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"
  }
}
POST /purchases/data Purchase a data plan

Purchase a data plan using a product_code obtained from /products/internet.

Request Body
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.
Request Example
JSON Payload
{
  "phone": "0812345678",
  "product_code": "smb_mtn_sme_1gb_30days",
  "reference": "SMsadkjhdfkgfjaaa1fhaa"
}
JSON Response — 200 Processing
{
  "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"
  }
}
JSON Response — 201 Successful
{
  "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"
  }
}
JSON Response — 402
{
  "status": false,
  "message": "Insufficient wallet balance.",
  "data": null,
  "metadata": {
    "code": "ERR_INSUFFICIENT_BALANCE",
    "timestamp": 1773797069,
    "trace_id": "97641EF3D8"
  }
}
JSON Response — 422
{
  "status": false,
  "message": "Invalid mobile number.",
  "data": null,
  "metadata": {
    "code": "ERR_INVALID_MOBILE_NUMBER",
    "timestamp": 1773797071,
    "trace_id": "99643G15FA"
  }
}
JSON Response — 429
{
  "status": false,
  "message": "Daily limit exceeded. Contact support to increase.",
  "data": null,
  "metadata": {
    "code": "ERR_DAILY_LIMIT_EXCEEDED",
    "timestamp": 1773797073,
    "trace_id": "BB645I37HC"
  }
}