Mobile & DTH recharge,
over one REST API.
Neropay gives you a single, JSON-first interface for prepaid mobile and DTH recharge across every major operator. Predictable status codes, real-time callbacks, and a wallet you can query any time.
Mobile & DTH
Prepaid recharge for all operators and every DTH provider through one endpoint.
Wallet balance
Fetch your live wallet balance programmatically, any time, from your own system.
Callbacks
Register a URL and receive a server-to-server push the moment a status changes.
Disputes
Raise and track disputes for failed or stuck recharges, all over the API.
From sign-up to first call
Create a developer account
Register on the Neropay portal to unlock your dashboard.
Generate your API token
Mint an access token from the Developer API section and store it as a secret.
Configure your callback URL
Add the endpoint where Neropay should push transaction updates.
Go live
Start sending recharges once your test transactions behave as expected.
Authenticate with a token
Every recharge API request takes your access token as a query parameter. Generate it from the Developer API section of your Neropay dashboard and keep it secret.
Token as query parameter
Append your token to the request URL on every call.
curl -X GET "https://app.neropay.co.in/apiservice/recharge?token=YOUR_TOKEN&..."
Token lifespan. Tokens don't expire on a fixed schedule. If a token stops working, generate a fresh one from the Developer API portal and swap it in. Also whitelist your server IP in the portal.
Operator List
Look up the operator codes you'll pass into recharge calls — one code per operator across mobile and DTH.
Parameters
| Logo | Category | Operator Name | Operator Code |
|---|---|---|---|
![]() |
Prepaid | Airtel | AT |
![]() |
Prepaid | BSNL | BSNL |
![]() |
Prepaid | Jio | Jio |
| Prepaid | Vi | VI | |
![]() |
DTH | Airtel Digital TV | ATV |
![]() |
DTH | Dish TV | DTV |
![]() |
DTH | Sun Direct | STV |
![]() |
DTH | Tata Play | TTV |
![]() |
DTH | Videocon D2H | VTV |
Do Recharge
Initiate a mobile or DTH recharge. Pass a unique refid you generate, so you can reconcile the request later regardless of the outcome.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| token | string | required | API access token for authentication. |
| customer_id | int / string | required | Mobile number or DTH subscriber ID being recharged. |
| operatorcode | string | required | Operator code from the Operator List. |
| amount | integer | required | Recharge amount. |
| refid | string | required | Your unique reference ID to track this request. |
Example request
https://app.neropay.co.in/apiservice/utility_payments?token=xxxxxxx&customer_id=8989908110&operatorcode=VI&amount=10&refid=156165165
Responses
The status field is one of SUCCESS, FAILED, PENDING or REFUND. Always persist the transaction against this value.
Recharge completed. operatorid carries the operator reference.
{
"txnid": "T20260625180232JUKR",
"status": "SUCCESS",
"mobileno": "8763381822",
"amount": "899",
"operatorcode": "JIO",
"operator_name": "Jio",
"request_time": "2026-06-25 18:02:32",
"response_time": "2026-06-25 18:02:37",
"refid": "T20260625180231CRZK",
"operatorid": "BR000DPM5NVI",
"message": "Transaction Successfully Completed",
"remainamount": "71337.10"
}Recharge could not be completed. Read message for the reason.
{
"txnid": "T20260625180232JUKR",
"status": "FAILED",
"mobileno": "8763381822",
"amount": "899",
"operatorcode": "JIO",
"operator_name": "Jio",
"request_time": "2026-06-25 18:02:32",
"response_time": "2026-06-25 18:02:37",
"refid": "T20260625180231CRZK",
"operatorid": "",
"message": "Transaction Failed",
"remainamount": "72236.10"
}Still processing at the operator. Confirm later via Status Check.
{
"txnid": "T20260625180232JUKR",
"status": "PENDING",
"mobileno": "8763381822",
"amount": "899",
"operatorcode": "JIO",
"operator_name": "Jio",
"request_time": "2026-06-25 18:02:32",
"response_time": "2026-06-25 18:02:37",
"refid": "T20260625180231CRZK",
"operatorid": "",
"message": "Transaction under process",
"remainamount": "71337.10"
}Recharge failed and the amount has been refunded to your wallet.
{
"txnid": "T20260625180232JUKR",
"status": "REFUND",
"mobileno": "8763381822",
"amount": "899",
"operatorcode": "JIO",
"operator_name": "Jio",
"request_time": "2026-06-25 18:02:32",
"response_time": "2026-06-25 18:05:10",
"refid": "T20260625180231CRZK",
"operatorid": "",
"message": "Transaction Refunded",
"remainamount": "72236.10"
}- Call this endpoint over GET.
- Always persist the transaction against the
statuskey — one ofSUCCESS,FAILED,PENDINGorREFUND. remainamountis your wallet balance remaining after the transaction.- On
PENDING, reconcile via Status Check — never blindly resend the same request.
Wallet Balance
Fetch your live wallet balance at any time — useful before bulk recharges or for displaying available funds in your own dashboard.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| token | string | required | API access token for authentication. |
Example response
Returns the current available balance.
{
"status_code": 1,
"message": "Data fetched successfully",
"main": "645",
"utility": "0",
"aeps": "0",
"total": "645",
"creditDue": "0"
}Unable to fetch data due to user not exists
{
"status_code": 0,
"message": "Unable to fetch data due to user not exists",
}token is required
{
"status_code": 2,
"message": "token is required",
}Status Check
Resolve any recharge whose immediate response was PENDING. Query by your refid to get the final settled state.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| token | string | required | API access token for authentication. |
| refid | string | required | The reference ID you sent with the recharge. |
Example response
Returns the final settled status for the transaction. The status field is one of SUCCESS, FAILED, PENDING or REFUND.
Recharge completed successfully.
{
"txnid": "T20260625180232JUKR",
"status": "SUCCESS",
"mobileno": "8763381822",
"amount": "899",
"operatorcode": "JIO",
"operator_name": "Jio",
"request_time": "2026-06-25 18:02:32",
"response_time": "2026-06-25 18:02:37",
"refid": "T20260625180231CRZK",
"operatorid": "BR000DPM5NVI",
"message": "Transaction Successfully Completed",
"remainamount": "71337.10"
}Recharge failed at the operator.
{
"txnid": "T20260625180232JUKR",
"status": "FAILED",
"mobileno": "8763381822",
"amount": "899",
"operatorcode": "JIO",
"operator_name": "Jio",
"request_time": "2026-06-25 18:02:32",
"response_time": "2026-06-25 18:02:37",
"refid": "T20260625180231CRZK",
"operatorid": "",
"message": "Transaction Failed",
"remainamount": "72236.10"
}Still under process at the operator.
{
"txnid": "T20260625180232JUKR",
"status": "PENDING",
"mobileno": "8763381822",
"amount": "899",
"operatorcode": "JIO",
"operator_name": "Jio",
"request_time": "2026-06-25 18:02:32",
"response_time": "2026-06-25 18:02:37",
"refid": "T20260625180231CRZK",
"operatorid": "",
"message": "Transaction under process",
"remainamount": "71337.10"
}Failed recharge refunded to your wallet.
{
"txnid": "T20260625180232JUKR",
"status": "REFUND",
"mobileno": "8763381822",
"amount": "899",
"operatorcode": "JIO",
"operator_name": "Jio",
"request_time": "2026-06-25 18:02:32",
"response_time": "2026-06-25 18:05:10",
"refid": "T20260625180231CRZK",
"operatorid": "",
"message": "Transaction Refunded",
"remainamount": "72236.10"
}Don't double-spend. When a recharge returns PENDING, poll Status Check to confirm the outcome — never blindly retry the original request.
Raise a Dispute
Flag a recharge that failed, got stuck, or was charged incorrectly. Submit the dispute against neropay txn_id and track its resolution over the API.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| token | string | required | API access token for authentication. |
| txn_id | string | required | txn_id of transaction, should be 19 chars |
Responses
Dispute registered with a tracking ID.
{
"status_code": 1,
"message": "Dispute Raised",
"complaint_id": 21564541,
}Read message for the reason.
{
"status_code": 0,
"message": "Complaint already under review"
}- A dispute moves through
UNDER REVIEW→RESOLVED-SUCCESS/RESOLVED-FAILED. - You'll also receive a callback when the dispute status changes.
Callback
We notify your server the moment a recharge status changes, so you don't have to poll. We send a GET request to your configured callback URL with the transaction details as query parameters.
Once the status of a recharge changes, we will hit your configured callback URL with the parameters appended as a query string. We pass these parameters ourselves — you do not need to add them. Register your callback URL in the portal.
Webhook example
# GET request to your URL http://yourdomain.com/callback_url?event=Transaction_Status &status=SUCCESS &rechno=8763381822 &amount=899 &txnid=T20260625180232JUKR &opid=BR000DPM5NVI &msg=Transaction+Successfully+Completed &refid=T20260625180231CRZK &operatorcode=JIO &remainbalance=71337.10
Parameters
| Parameter | Type | Description |
|---|---|---|
| event | string | The callback event, e.g. Transaction_Status, Complaint_Status, Agent_Onboarding_Status. |
| status | string | One of SUCCESS, FAILED or REFUND. REFUND is sent only when a recharge went from Success to Failed. |
| rechno | string | The Prepaid / Postpaid / DTH number for which the recharge was requested. |
| amount | integer | Amount for which the recharge was requested. |
| txnid | string | Our unique transaction ID. |
| opid | string | Operator ID passed from the operator / provider. |
| msg | string | Response message from the operator / API. |
| refid | string | Your unique reference ID — use it to update the recharge at your end. |
| operatorcode | string | Operator code (e.g. JIO for Jio Prepaid). See the Operator List. |
| remainbalance | string | Your remaining wallet balance. |
- The callback is sent as a GET request to your URL.
- We append the parameters ourselves — do not add your own parameters to the callback URL.
- Always update your transaction using the
statuskey, which can beSUCCESS,PENDING,FAILEDorREFUND. - Match callbacks to your records by
refid, and implement error handling based on thestatusandmsgfields.







