Bundle Wasp · API
Developer documentation

Bundle Wasp API

Sell MTN, Telecel and AirtelTigo data bundles in Ghana from your own website, app or reseller system. List bundles, place orders paid from your Bundle Wasp wallet, and track delivery.

Base URL https://bundlewasp.com/api/v1

Quick start

This documentation is public. To call the API you need a Bundle Wasp account.

1Create an accountSign up and wait for your account to be approved.
2Fund your walletOrders placed through the API are paid from your wallet balance.
3Create an API keyIn your dashboard open API → API Keys and generate a key.
4Make requestsSend the key with every request and place your first order.

Authentication

Every request must include your API key in the Authorization header as a Bearer token. Keys start with dhk_.

Authorization: Bearer dhk_your_api_key_here
Keep your key secret. Anyone with your key can place orders paid from your wallet. Call the API from your server only, never from browser JavaScript or a mobile app, and revoke a key in your dashboard straight away if it leaks.

Requests and responses use JSON. Send Content-Type: application/json with request bodies.

Endpoints

MethodPathDescription
GET/bundlesList active data bundles and prices
GET/bundles/{id}Get one bundle
GET/networksList available networks
POST/ordersPlace a data bundle order
GET/ordersList your orders (paginated)
GET/orders/{id}Get one order and its status
GET/balanceGet your wallet balance
GET/api/v1/bundles

Returns every active bundle with its price in Ghana cedis (GHS). Use the id when placing an order.

Response 200
{
  "success": true,
  "data": [
    { "id": 1, "network": "MTN", "type": "Daily", "size": "1GB", "price": 5.00 },
    { "id": 2, "network": "Telecel", "type": "Weekly", "size": "5GB", "price": 20.00 }
  ],
  "total": 2
}
GET/api/v1/bundles/{id}

Returns one bundle, including whether it can currently be ordered (active).

Response 200
{
  "success": true,
  "data": { "id": 1, "network": "MTN", "type": "Daily", "size": "1GB", "price": 5.00, "active": true }
}

Returns 404 with "error": "Bundle not found" for an unknown id.

GET/api/v1/networks

Returns the networks you can currently buy bundles for.

Response 200
{
  "success": true,
  "data": [
    { "id": 1, "name": "MTN", "code": "mtn" },
    { "id": 3, "name": "AirtelTigo", "code": "airteltigo" },
    { "id": 4, "name": "Telecel", "code": "telecel" }
  ]
}
POST/api/v1/orders

Places an order for one bundle to one phone number. The bundle's price is taken from your wallet when the order is accepted.

Request body
FieldTypeDescription
bundleIdintegerRequired. The bundle id from GET /bundles.
phonestringRequired. The number to receive the data: 0XXXXXXXXX, 233XXXXXXXXX or +233XXXXXXXXX.
{ "bundleId": 1, "phone": "0241234567" }
Response 201
{
  "success": true,
  "data": {
    "orderId": 42,
    "reference": "API-1709901234567-abc123",
    "bundle": { "id": 1, "network": "MTN", "type": "Daily", "size": "1GB", "price": 5.00 },
    "phone": "0241234567",
    "amount": 5.00,
    "status": "pending",
    "message": "Order placed successfully. Data bundle will be delivered shortly."
  }
}

Save the orderId and use GET /orders/{id} to follow delivery. If your balance is too low you get 402 and nothing is charged.

GET/api/v1/orders?page=1&limit=20

Returns your orders, newest first. limit defaults to 20 (maximum 100).

Response 200
{
  "success": true,
  "orders": [
    {
      "orderId": 42,
      "reference": "API-1709901234567-abc123",
      "phone": "0241234567",
      "amount": 5.00,
      "status": "completed",
      "bundle": { "network": "MTN", "type": "Daily", "size": "1GB" },
      "createdAt": "2026-09-27T10:15:00.000+00:00"
    }
  ],
  "pagination": { "page": 1, "limit": 20, "total": 1, "totalPages": 1 }
}
GET/api/v1/orders/{id}

Returns one of your orders with its current status.

Response 200
{
  "success": true,
  "data": {
    "orderId": 42,
    "reference": "API-1709901234567-abc123",
    "phone": "0241234567",
    "amount": 5.00,
    "status": "completed",
    "bundle": { "network": "MTN", "type": "Daily", "size": "1GB" },
    "createdAt": "2026-09-27T10:15:00.000+00:00",
    "updatedAt": "2026-09-27T10:17:42.000+00:00"
  }
}
GET/api/v1/balance

Returns your current wallet balance.

Response 200
{
  "success": true,
  "data": { "balance": 95.00, "currency": "GHS" }
}

Order status

An order's status follows the data provider's own delivery status. An accepted order is pending until the bundle is actually delivered.

StatusMeaning
pendingOrder received and paid; waiting to be delivered.
processingThe network is delivering the bundle.
completedThe bundle has been delivered to the phone number.
failedThe bundle could not be delivered. Contact support if you were charged.
cancelledThe order was cancelled and refunded to your wallet.
refundedThe order's amount was returned to your wallet.

Most bundles are delivered within minutes. To follow an order, check GET /orders/{id} about once a minute until it is completed, failed, cancelled or refunded.

Errors

Errors use standard HTTP status codes and always return a JSON body:

{ "success": false, "error": "Invalid or inactive API key" }
CodeWhen it happens
400Missing bundleId or phone, or the phone number format is invalid.
401The Authorization header is missing, or the API key is wrong or revoked.
402Your wallet balance is too low for this order.
403Your account is suspended or not yet approved.
404The bundle or order doesn't exist (or isn't yours).
500Something went wrong on our side. Try again shortly.

Code examples

Placing an order. Replace dhk_your_api_key_here with your key and run the code on your server.

curl -X POST https://bundlewasp.com/api/v1/orders \
  -H "Authorization: Bearer dhk_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"bundleId": 1, "phone": "0241234567"}'

FAQ

Do I need an account to use the API?

You can read this documentation without an account. To make API calls you need an approved Bundle Wasp account and an API key, which you create in your dashboard under API.

How are orders paid for?

Each order is paid from your Bundle Wasp wallet at the bundle's listed price. Top up your wallet in the dashboard before placing orders, and check it any time with GET /balance.

Which networks are supported?

The networks returned by GET /networks, currently MTN, Telecel and AirtelTigo in Ghana.

What if an order fails?

Its status becomes failed. Contact support with the order's reference and we'll retry it or refund your wallet.

Can I have more than one API key?

Yes. Create a separate key for each app or website so you can revoke one without affecting the others.

Ready to start selling?

Create a free account, then generate your API key in the dashboard.

Create account