VTU API
Get API keys
Buy Bulk Airtime API

Bulk airtime

POST https://api.paybeta.ng/v2/bulk-airtime

Queue airtime for every recipient in the list. Saves batch_id / reference for the other requests.

Field Required Notes
reference yes your id for the whole request, unique per account
description no your label, max 100 chars
recipients yes 1 – 1,000 items
recipients[].biller yes mtn · glo · airtel · 9mobile
recipients[].phone_number yes 2348031234567 (or 08031234567)
recipients[].amount yes NGN50 – NGN20,000
recipients[].reference no your id for this number; default <reference>-<row>
Send your secret key in the P-API-KEY header. Keep it on your server, never in an app or browser.

Body (JSON)

  • reference string Required
    Example: PAYROLL-{{$timestamp}}
  • description string Required
    Example: October staff airtime
  • recipients array Required
  • recipients[].biller string Required
    Example: mtn
  • recipients[].phone_number string Required
    Example: 2348031234567
  • recipients[].amount integer Required
    Example: 1000
  • recipients[].reference string Optional
    Example: STAFF-{{$timestamp}}-ADA

Responses

  • 201Success
  • 422Error
Request
curl --request POST \
  --url 'https://api.paybeta.ng/v2/bulk-airtime' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'P-API-KEY: YOUR_SECRET_KEY' \
  --data '{
    "reference": "PAYROLL-{{$timestamp}}",
    "description": "October staff airtime",
    "recipients": [
        {
            "biller": "mtn",
            "phone_number": "2348031234567",
            "amount": 1000,
            "reference": "STAFF-{{$timestamp}}-ADA"
        },
        {
            "biller": "glo",
            "phone_number": "2348051234567",
            "amount": 500
        },
        {
            "biller": "airtel",
            "phone_number": "08021234567",
            "amount": 200
        }
    ]
}'
Response
{
    "status": "successful",
    "message": "Bulk airtime queued. 3 recipient(s) will be processed shortly.",
    "data": {
        "reference": "PAYROLL-OCT",
        "batch_id": "BLK-K3P9XQ2M7Z1A",
        "description": "October staff airtime",
        "status": "queued",
        "total_recipients": 3,
        "total_amount": 1700,
        "total_charge": 1644,
        "amount_charged": 0,
        "summary": {
            "successful": 0,
            "pending": 0,
            "failed": 0,
            "queued": 3,
            "cancelled": 0
        },
        "created_at": "2026-10-05T09:00:00+01:00",
        "started_at": null,
        "completed_at": null,
        "cancelled_at": null,
        "recipients": [
            {
                "row": 1,
                "reference": "STAFF-OCT-ADA",
                "biller": "mtn",
                "phone_number": "08031234567",
                "amount": 1000,
                "charged_amount": null,
                "status": "queued",
                "response_description": null,
                "transaction_id": null,
                "processed_at": null
            },
            {
                "row": 2,
                "reference": "PAYROLL-OCT-2",
                "biller": "glo",
                "phone_number": "08051234567",
                "amount": 500,
                "charged_amount": null,
                "status": "queued",
                "response_description": null,
                "transaction_id": null,
                "processed_at": null
            },
            {
                "row": 3,
                "reference": "PAYROLL-OCT-3",
                "biller": "airtel",
                "phone_number": "08021234567",
                "amount": 200,
                "charged_amount": null,
                "status": "queued",
                "response_description": null,
                "transaction_id": null,
                "processed_at": null
            }
        ]
    }
}