₹ZeroRecharge

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 key

Authentication

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": "..." } }
StatusCodesMeaning
401missing_key, invalid_keyThe key is missing, wrong or revoked.
402insufficient_balanceYour wallet can't cover the recharge.
403account_blocked, ip_blockedAPI access is off, or the IP isn't on the key's whitelist.
409duplicateSame number and amount were just recharged, or client_ref is already in use.
422validation_error, invalid_number, invalid_amount, not_availableThe request needs fixing.
429rate_limited, daily_limitSlow down, or the daily limit was reached.
503service_unavailable, maintenanceTemporarily unavailable. Nothing was debited.