Standard Bundles API Ghana — MTN, Telecel & AirtelTigo Internet Bundles
List the live bundle catalog per network and family, then buy a bundle from your wallet at face price. You earn a share of the provider commission into your Commission Wallet after delivery. Orders are delivered in the background; use webhooks for the final status (or poll sparingly). Orders that cannot be delivered are refunded to your wallet automatically.
Endpoints
Base URL: https://api.kingflexygh.com/api/v2 · Requires a Commission Services API key (kf_cs_live_...) sent raw in the Authorization header.
GET /bundles/catalog
List live Standard Bundles for a network
POST /bundles/purchase
Buy a Standard Bundle, a Special Bundle (by pack_id) or a Telecel Broadband top-up
GET /bundles/orders
List your recent Standard Bundle orders
GET /bundles/orders/{reference}
Check one Standard Bundle order's status
Example request
curl -X POST 'https://api.kingflexygh.com/api/v2/bundles/purchase' \
-H 'Authorization: kf_cs_live_your_commission_key_here' \
-H 'Content-Type: application/json' \
-d '{
"network": "MTN",
"beneficiary_phone": "0200000000",
"value": "value-from-/bundles/catalog",
"amount": 20,
"reference": "bundle-1001"
}'Special Bundle example
curl -X POST 'https://api.kingflexygh.com/api/v2/bundles/purchase' \
-H 'Authorization: kf_cs_live_your_commission_key_here' \
-H 'Content-Type: application/json' \
-d '{
"pack_id": "pack_id-from-/bundles/catalog",
"beneficiary_phone": "0200000000",
"reference": "bundle-1002"
}'Tips & recommendations
- Cache GET /bundles/catalog and refresh it every few minutes to an hour; do not call it before every purchase. Use the ETag with If-None-Match for cheap revalidation. Excessive catalog or status polling is rate limited.
- Prefer webhooks (order.completed / order.failed, product "bundles", verify the X-KFT-Signature HMAC-SHA256 of the raw body, deduplicate on event_id) over polling. If you poll an order, do it sparingly with back-off and stop at a terminal status (completed, failed, refunded).
- Send a unique reference per purchase and reuse the SAME reference on any retry; never generate a new reference for a retry. A repeat returns the original order (is_duplicate: true); a 409 means the first attempt is still being processed.
- If you get a 429, wait the time in the response (Retry-After header) and slow your overall request rate.
- Pass a bundle's value and amount back exactly as the catalog returned them, or send only pack_id for a Special Bundle.
Also on USSD
Customers can also buy this on USSD by dialling *713*9939#. Shop owners can activate their own USSD code branded with their shop name from Dashboard > Shop > USSD.
Get started
- Full API documentation with every request and response
- OpenAPI 3 specification
- Sign in or create an account to generate your API key