Send airtime
POST
/airtime-api/sendAirtimeDebits your wallet and tops up the number. The transfer starts as submitted; the final state arrives on your callback URL or through Check airtime status.
Parameters
phone_numberstringrequiredNumber to top up.
amountdecimalrequiredAmount in GHS, 0.50 to 100.
network_idstringrequiredFrom List networks.
transaction_idstringrequiredYour unique reference, 12 to 36 characters.
callback_urlstringoptionalReceives the webhook when the top-up succeeds or fails.
| Field | Type | Required | Description |
|---|---|---|---|
phone_number | string | required | Number to top up. |
amount | decimal | required | Amount in GHS, 0.50 to 100. |
network_id | string | required | From List networks. |
transaction_id | string | required | Your unique reference, 12 to 36 characters. |
callback_url | string | optional | Receives the webhook when the top-up succeeds or fails. |
Errors
- 400Insufficient wallet balance
- 422The transaction id has already been taken.
Request
curl -X POST "https://api.bulkclix.com/api/v1/airtime-api/sendAirtime" \ -H "x-api-key: YOUR_API_KEY" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "phone_number": "0241234567", "amount": 10, "network_id": "a1b2c3d4-0000-4000-8000-000000000001", "transaction_id": "ORDER-2026-000123", "callback_url": "https://example.com/webhooks/bulkclix" }'
Response · 200
application/json
{ "message": "Airtime Sent Successfully", "data": { "transaction_id": "ORDER-2026-000123", "ext_transaction_id": "AT-7f3a9c" } }