Developers
Mobile recharge API documentation
JSON over HTTPS. Authenticate with a bearer key, bill to your wallet, and read every call in your dashboard.
Get an API keyAuthentication
Create a key in your dashboard and send it on every request. Keep it on your server: anyone holding it can spend your wallet. Base URL:
https://zrecharge.bottercc.com/api/v1
Authorization: Bearer rk_live_...Wallet balance
GET /balance
Returns your current wallet balance.
Request
curl https://zrecharge.bottercc.com/api/v1/balance \
-H "Authorization: Bearer rk_live_..."Response
{ "success": true, "data": { "balance": 1250.5, "currency": "INR" } }Detect operator
GET /detect?number=
Finds the operator and circle for a 10-digit number.
Request
curl "https://zrecharge.bottercc.com/api/v1/detect?number=98XXXXXXXX" \
-H "Authorization: Bearer rk_live_..."Response
{
"success": true,
"data": { "operator_id": 1, "operator": "Airtel", "circle_id": 2, "circle": "Assam" }
}List plans
GET /plans?operator_id=&circle_id=
Returns plans grouped by category for the operator and circle.
Request
curl "https://zrecharge.bottercc.com/api/v1/plans?operator_id=1&circle_id=2" \
-H "Authorization: Bearer rk_live_..."Response
{
"success": true,
"data": {
"groups": {
"Unlimited": [
{ "rs": 199, "validity": "28 day", "desc": "Calls : Unlimited | Data : 2GB" }
]
}
}
}Place a recharge
POST /recharge
Debits your wallet and submits the recharge. Send a unique client_ref: repeating a request with the same client_ref returns the original recharge and does not charge you twice.
Request
curl -X POST https://zrecharge.bottercc.com/api/v1/recharge \
-H "Authorization: Bearer rk_live_..." \
-H "Content-Type: application/json" \
-d '{"number":"98XXXXXXXX","operator_id":1,"circle_id":2,"amount":349,"client_ref":"order_1042"}'Response
{
"success": true,
"data": {
"id": "cmh1x9...",
"number": "98XXXXXXXX",
"operator": "Airtel",
"circle": "Assam",
"amount": 349,
"status": "SUCCESS",
"client_ref": "order_1042",
"operator_ref": null,
"created_at": "2026-11-01T10:15:00.000Z",
"completed_at": "2026-11-01T10:15:04.000Z"
}
}Recharge status
GET /recharge/{id}
Looks up a recharge by our id or your client_ref. Status is SUCCESS, FAILED or PENDING. A FAILED recharge has already been refunded to your wallet.
Request
curl https://zrecharge.bottercc.com/api/v1/recharge/order_1042 \
-H "Authorization: Bearer rk_live_..."Response
{ "success": true, "data": { "id": "cmh1x9...", "status": "PENDING", "...": "..." } }Errors
Errors return a matching HTTP status and this body:
{ "success": false, "error": { "code": "insufficient_balance", "message": "..." } }| Status | Codes | Meaning |
|---|---|---|
| 401 | missing_key, invalid_key | The key is missing, wrong or revoked. |
| 402 | insufficient_balance | Your wallet can't cover the recharge. |
| 403 | account_blocked, ip_blocked | API access is off, or the IP isn't on the key's whitelist. |
| 409 | duplicate | Same number and amount were just recharged, or client_ref is already in use. |
| 422 | validation_error, invalid_number, invalid_amount, not_available | The request needs fixing. |
| 429 | rate_limited, daily_limit | Slow down, or the daily limit was reached. |
| 503 | service_unavailable, maintenance | Temporarily unavailable. Nothing was debited. |