Recharge APIv1

API reference

Core

5 endpoints

The modern surface for new integrations. JSON in, JSON out, machine-readable string errors alongside a numeric code support can trace.

Simple or signed — your choice. Your API token alone is enough for every call on this page. You may also sign them (see Request signing); a signature you send is checked.

What you can call today

GET/api/corp/v1/services

Notes

Read this instead of hardcoding a service list.

enabled means the endpoints exist. ready means a vendor is switched on right now — if it is false the calls still answer safely and nothing is charged.

Request
curl "https://apipe.in/api/corp/v1/services" \
  -H "X-Api-Token: <your-token>"
Replace each <…> with your own value.
Response
{
    "status": "success",
    "code": 200,
    "client": "Acme Pvt Ltd",
    "services": [
        {
            "service": "recharge",
            "name": "Mobile & DTH recharge",
            "enabled": true,
            "ready": true,
            "note": null
        }
    ]
}

Your wallet balance

GET/api/corp/v1/balance

Query parameters

NameDescription
detailoptionalSend 1 to also get available (what you can spend now) and on_hold (held by us). Without it the reply is exactly as shown.

Notes

With detail=1: {"status":"success","code":200,"balance":"5000.0000","available":"4750.0000","on_hold":"250.0000"}. A transaction needs available to cover it.

Request
curl "https://apipe.in/api/corp/v1/balance" \
  -H "X-Api-Token: <your-token>"
Replace each <…> with your own value. Only the required fields are shown.
Response
{
    "status": "success",
    "code": 200,
    "balance": "5000.0000"
}

Raise a complaint on a transaction

POST/api/corp/v1/complaints

Body parameters

NameDescription
txn_refrequiredOur order id of the transaction (the order_id / orderid we gave you).
reasonrequiredWhat is wrong, up to 500 characters.
confirm_relaunchoptionalSend 1 to raise a NEW complaint on a transaction whose earlier complaint was already decided.

Notes

Only a successful transaction can be disputed. Answers 201 with your complaint_ref.

409 already_open — a complaint on this transaction is still open; its complaint_ref comes back in the reply so you can follow it.

422 prior_resolved — an earlier complaint on this transaction was decided. The reply names it (prior_complaint_ref); send the request again with confirm_relaunch=1 if you really want a new one.

404 not_found — no such transaction on your account.

When the complaint is cleared we send the transaction's status to your callback URL again, and a complaint callback to your complaint callback URL if you set one (see Complaint callbacks).

Request
curl "https://apipe.in/api/corp/v1/complaints" \
  -X POST \
  -H "X-Api-Token: <your-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "txn_ref": "<txn_ref>",
    "reason": "<reason>"
  }'
Replace each <…> with your own value. Only the required fields are shown.
Response
{
    "ok": true,
    "complaint_ref": "CP261001103000A1B2C3D4E5F6"
}

Status of one complaint

GET/api/corp/v1/complaints/{ref}

Notes

Read outcome: OPEN (being checked), RESOLVED (checked — the transaction stands, no money moves) or REFUNDED (the transaction failed and the money is back in your wallet; refund_amount says how much).

status is our internal state (open, resolved_success, resolved_failed) and is kept for integrations already reading it. Prefer outcome.

Request
curl "https://apipe.in/api/corp/v1/complaints/<ref>" \
  -H "X-Api-Token: <your-token>"
Replace each <…> with your own value.
Response
{
    "ok": true,
    "complaint": {
        "complaint_ref": "CP261001103000A1B2C3D4E5F6",
        "txn_ref": "R2610011030…",
        "status": "resolved_failed",
        "outcome": "REFUNDED",
        "reason": "Recharge not received",
        "created_at": "2026-10-01 10:30:00",
        "resolved_at": "2026-10-01 12:05:41",
        "refund_amount": "100.0000"
    }
}

Your complaints, newest first

GET/api/corp/v1/complaints

Query parameters

NameDescription
txn_refoptionalOnly complaints on this transaction — how to find a complaint when you did not keep its ref.
fromoptionalRaised on or after this date, YYYY-MM-DD.
tooptionalRaised on or before this date, YYYY-MM-DD.
limitoptionalDefault 50, max 100.
pageoptionalDefault 1.

Notes

Each item has the same fields as the single lookup. A malformed date, limit or page is refused with 422 rather than ignored.

Request
curl "https://apipe.in/api/corp/v1/complaints" \
  -H "X-Api-Token: <your-token>"
Replace each <…> with your own value. Only the required fields are shown.
Response
{
    "ok": true,
    "page": 1,
    "limit": 50,
    "complaints": [
        {
            "complaint_ref": "CP261001103000A1B2C3D4E5F6",
            "txn_ref": "R2610011030…",
            "status": "open",
            "outcome": "OPEN",
            "reason": "Recharge not received",
            "created_at": "2026-10-01 10:30:00",
            "resolved_at": null,
            "refund_amount": null
        }
    ]
}