API Documentation
All endpoints are authenticated with your reseller API key (shown once on the API Keys page). Keys start with ink_live_.
Authentication
Send your API key on every request as a Bearer token in the Authorization header, or via the x-api-key header. Keys are shown only once — store them like a password.
Authorization: Bearer ink_live_xxxxxxxxxxxxMissing or invalid keys return 401 { success: false, error: "Invalid or missing API key" }.
Endpoints
/v1/balancecurl https://api.inkoom.com/v1/balance \
-H "Authorization: Bearer ink_live_..." Response: { success: true, data: { currency, wallet_balance, commission_balance, role } }
/v1/networkscurl https://api.inkoom.com/v1/networks \
-H "Authorization: Bearer ink_live_..." Response: { success: true, data: [{ id, code, name }] }
/v1/products?network=mtnQuery params: network (required), service (data | airtime).
curl "https://api.inkoom.com/v1/products?network=mtn" \
-H "Authorization: Bearer ink_live_..." Response: { success: true, data: [{ id, name, service, volume_mb, validity_days, price }] }
/v1/purchaseThe reference field makes the call idempotent — retrying with the same reference never charges twice.
curl https://api.inkoom.com/v1/purchase \
-H "Authorization: Bearer ink_live_..." \
-H "Content-Type: application/json" \
-d '{
"product_id": "0000-...-0000",
"recipient": "0241234567",
"reference": "my-order-00123"
}'Response: { success: true, data: { order_id, reference, recipient, amount, status, reason } }
status: "success"— delivered immediately.status: "processing"— accepted upstream, waiting for confirmation.status: "failed"—reasonexplains why.
/v1/orders/{id_or_reference}curl https://api.inkoom.com/v1/orders/my-order-00123 \
-H "Authorization: Bearer ink_live_..." Response: { success: true, data: { order_id, reference, recipient, amount, status, refunded, reason } }
Webhooks
Subscribe an HTTPS endpoint in your Reseller dashboard and we'll POST signed events for every purchase and status change. Headers include X-Inkoom-Signature with an HMAC-SHA256 signature of the body.
{
"event": "order.completed",
"data": {
"order_id": "...",
"reference": "my-order-00123",
"status": "success",
"amount": 15.00,
"recipient": "0241234567"
}
}Events: order.completed, order.failed, order.processing, balance.debited.
Errors
Every error returns JSON with success: false, an error string and a code for programmatic handling.
{
"success": false,
"error": "Insufficient wallet balance",
"code": "insufficient_funds"
}Base URL: https://api.inkoom.com · All amounts in GHS · Rate limit: 120 requests/min per key · Need help? Email support@inkoom.com