Introduction:
This document provides technical details and usage guidelines for integrating UPI Refund API. It includes 3 Refund APIs and Refund Status Check API that enable merchants to process and track refunds.
List of APIs:
- 1. Original Transaction Refund APIs
- Allows the merchant to initiate a refund request against a completed UPI transaction.
- There are 3 refund APIs based on merchant use case a merchant could use them:
- Standard Refund API
- Instant Refund API
- Smart Refund API
- 2. Refund Status Check API
- Enables the merchant to check the real-time status of a previously initiated refund.
These APIs are intended for scenarios where:
- A customer has paid for goods or services, but the merchant is unable to fulfill the order and initiates a refund.
- A customer returns goods due to quality or other issues, and the merchant issues a refund as per their return policy.
API Reference:
Original Transaction Refund API:
The Original Transaction Refund API allows a merchant to initiate a refund directly against a customer’s UPI transaction ID. It supports both full and partial refunds, depending on the transaction value and refund requirement.
The API also allows the merchant to specify the refund speed at the time of initiation.
1. Standard: Refund will be processed within 3–5 working days.
2. Instant: Refund is credited to the customer instantly.
3. Smart: Refund is processed instantly if system bandwidth is available, otherwise, it is processed under Standard mode.
Process of Refund
1.The merchant has to check UPI transaction status for which he’s willing to initiate refund, for this either could refer to UPI Transaction Callback logs, UPI Transaction Status via UPI Status Check API or Via UPI Transaction Reports available on Merchant Portal, where if the UPI Transaction Status is “SUCCESS” then could proceed with next step to Initiating Refund, else for UPI Transaction status “INITITATED” or “FAILED”, system will not allow to initiate refund
2.Merchant need to Choose Refund Speed by which, willing to refund to the customer, accordingly the merchant has to choose the API to initiate the refund i.e
- Instant Refund API
- Standard Refund API
- Smart Refund API
Note: If a refund request is initiated from any of the above APIs for a specific UPI Transaction ID, subsequent refund requests for the same Transaction ID from any API will not be allowed.
3.On successful initiation of refund the API will provide response as “INITIATED” with Status Code “REIS001” else will get Status “FAILED” to initiate refund with respective failed scenario status code, Kindly refer to Refund Status code Table for all status codes and their description
4.Once refund is initiated successfully the Merchant could check the further status of refund via Refund Status Check API, where initially api will provide status as “INPROGESS” with Status code “REIP001” as its under refund processing queue i.e Instant, Standard or Smart based on initiation and on Successful refund credit to customer the API will provide status as “SUCCESS” with Status code “RESF001” or “FAILED” with respective failed scenario status code.
Note:
1.Refund processing is asynchronous. Merchants are advised to check the final refund status via Callback or Refund Status Check API.
2.In cases where the refund fails with Status Code “REIF009”, merchants may initiate the refund again with the same UPI Transaction ID after 24 hours from the last status check (with Status “FAILED” and Code “REIF009”).
Instant Refund Flow:

Smart Refund Flow:

Standard Refund Flow:

Headers
Request Body Parameters
Parameter | Description | Data type | Min | Max | Mandatory | Example | Additional Validation |
merchant_id | Unique identifier of the merchant assigned by Iserveu | String | 15 | 15 | Yes | NSDLM0000000001 |
|
org_txn_id | UPI transaction ID for which merchant is initiating refund to customer | Integer | 18 | 18 | Yes | 537835452729000483 |
|
org_txn_clientRefId | UPI Client Transaction reference ID for which merchant is initiating refund to customer | String | 10 | 19 | Yes | SAMPLEUPI000000078 |
|
org_txn_rrn | Original UPI transaction RRN for which merchant is initiating refund to customer | Integer | 12 | 12 | Yes | 7654788653 |
|
org_txn_date | Original UPI Transaction final Status date and Time | Date and Time | - | - | Yes | 2019-09-27 10:41:05 | |
clientRefId | Unique refund ID generated by the client for tracking | String | 10 | 19 | Yes | SAMPLEREF0000022 |
|
remarks | Reason for refund | String | 1 | 255 | Yes | Goods are not in stock |
|
refund_amount | Amount to be refunded (blank implies full refund else merchant could enter amount upto max transacted amount for given transacted Id) | Decimal | 1 | 10 | No | 100 |
|
org_txn_date | Date of original UPI Transaction | Date | 20 | 20 | Yes | 2019-09-09 |
|
paramA | Additional custom parameter(optional) | String | NA | NA | NO | N/A |
|
paramB | Additional custom parameter(optional) | String | NA | NA | NO | N/A |
|
paramC | Additional custom parameter(optional) | String | NA | NA | NO | N/A |
|
Sample Request Body
Response Body Parameters
Parameter | Description | Data type | Min | Max | Mandatory | Example |
merchant_id | Unique identifier of the merchant assigned by Iserveu | String | 15 | 15 | Yes | NSDLM0000000001 |
org_txn_id | UPI transaction ID assigned by the processor(iServeU) | string | 18 | 18 | Yes | 537835452729000483 |
clientRefId | Unique refund ID generated by the client for tracking | String | 10 | 19 | Yes | SAMPLEREF0000022 |
org_txn_clientRefId | Original UPI transaction ID from the merchant/client system | String | 10 | 19 | Yes | SAMPLEUPI000000078 |
org_txn_date | Original UPI Transaction final Status date and Time | Date and Time | - | - | Yes | 2019-09-27 10:41:05 |
org_txn_rrn | Original UPI transaction RRN forvwhich merchant is initiating refund to customer | Integer | 12 | 12 | Yes | 7654788653 |
refund_id | Refund ID generated by the refund system | String | 18 | 18 | Yes | 598767854345675445 |
refund_amount | Refunded amount | Decimal | 1 | 10 | Yes | 100 |
remarks | Reason for the refund | String | 1 | 255 | Yes | Good are not in stock, for which customer paid |
req_timestamp | Timestamp of refund request triggered by the merchant | DateTime | 20 | 20 | Yes | 2019-09-24 14:21:05 |
resp_timestamp | Timestamp when refund was created in the system | DateTime | 20 | 20 | Yes | 2019-09-24 14:21:05 |
refund_status | Current status of the refund | String | 5 | 15 | Yes | Success |
statusCode | Status code indicating success or failure of refund process | String | 10 | 10 | Yes | REF001 |
statusDesc | Description of the refund status | String | 1 | 100 | Yes | Refund Processed Succesfully |
speed_requested | Speed requested by the merchant while initiating the refund | String | 5 | 8 | Yes | STANDARD,INSTANT,SMART |
Sample Response Body
Individual Refund Status Check:
The Individual Refund Status Check API allows the merchant to check the real-time status of a refund initiated to the customer by passing the required identifiers such as refund date and client refund ID.
Headers
Request Body Parameters
Parameter | Description | Data type | Min | Max | Mandatory | Example |
productCode | Code representing the product type for which refund was initiated | String | 10 | 10 | Yes | UPI_REFUND |
txnDate | Date on which the refund was initiated | Date(YYYY-MM-DD) | 10 | 10 | Yes | 2025-04-10 |
clientRefId | Unique refund identifier generated by the merchant/client | String | 10 | 19 | Yes | CLIENT_REFUND_ID |
Sample Request Body
Response Body Parameters
Parameter | Description | Data type | Min | Max | Mandatory | Example |
merchant_id | Unique identifier of the merchant assigned by Iserveu | String | 15 | 15 | Yes | NSDLM0000000001 |
org_txn_id | UPI transaction ID assigned by the processor(iServeU) | string | 18 | 18 | Yes | 537835452729000483 |
clientRefId | Unique refund ID generated by the client for tracking | String | 10 | 19 | Yes | SAMPLEREF0000022 |
org_txn_clientRefId | Original UPI transaction ID from the merchant/client system | String | 10 | 19 | Yes | SAMPLEUPI000000078 |
org_txn_date | Original UPI Transaction final Status date and Time | Date and Time | - | - | Yes | 2019-09-27 10:41:05 |
refund_id | Refund ID generated by the refund system | String | 18 | 18 | Yes | 598767854345675445 |
bank_refund_id | Refund ID generated by the NPCI for refund | String | 18 | 18 | Yes | 598767854345675445 |
refund_amount | Refunded amount | Decimal | 1 | 10 | Yes | 100 |
refund_rrn | RRNgenerated for Refund | Integer | 12 | 12 | Yes | 876543675765 |
remarks | Reason for the refund | String | 1 | 255 | Yes | Good are not in stock, for which customer paid |
refund_createDate | Timestamp of refund request entered by the merchant | DateTime | 20 | 20 | Yes | 2019-09-24 14:21:05 |
refund_updateDate | Timestamp when refund status was updated by system | DateTime | 20 | 20 | Yes | 2019-09-24 14:21:05 |
refund_status | Current status of the refund | String | 5 | 15 | Yes | Success |
statusCode | Status code indicating success or failure of refund process | String | 10 | 10 | Yes | REF001 |
statusDesc | Description of the refund status | String | 1 | 100 | Yes | Refund Processed Succesfully |
speed_processed | Actual speed at which refund was processed by the system | String | 5 | 8 | Yes | STANDARD,INSTANT,SMART |
speed_requested | Speed requested by the merchant while initiating the refund | String | 5 | 8 | Yes | STANDARD,INSTANT,SMART |
Sample Response Body
Status Code and Descriptions:
Status | Reason | StatusCode | Status Desciption | Response at API |
Initiated | Refund Created Successfully | REIS001 | Refund Created Successfully | Initiate Refund |
Success | Refund Successfully | RESF001 | Refund Successfully | Status Check |
Inprogress | Refund has successfully created, but in system refund queue | REIP001 | Refund Inprogress | Status Check |
Failed | Product Code | REEF0001 | Product Code is invalid. | Status Check |
Failed | txnDate | REEF0002 | Refund date does not match the given client reference id or is invalid. | Status Check |
Failed | clientRefId | REEF0003 | Refund Client reference ID not available or is invalid | Status Check |
Failed | Invalid Merchant ID | REIF001 | Merchant ID not found or is invalid. | Initiate Refund |
Failed | org_txn_id or UPI Transaction ID not found | REIF002 | Original UPI Transaction ID not found or is invalid. | Initiate Refund |
Failed | org_txn_clientRefId does not match the given UPI transaction or validation failed | REIF003 | Client Reference ID does not match the given UPI transaction or is invalid. | Initiate Refund |
Failed | refund_amount not equal to original transaction amount or validation failed | REIF004 | Refund amount does not match the given UPI transaction amount or is invalid. | Initiate Refund |
Failed | remarks Validation failed | REIF005 | Remark is invalid. | Initiate Refund |
Failed | Org_txn_date not equal to original transaction date or validation failed | REIF006 | Original UPI transaction date does not match the given UPI transaction or is invalid. | Initiate Refund |
Failed | clientRefId validation | REIF007 | Client reference ID already exists or is invalid. | Initiate Refund |
Failed | Refund request failed due to system or bank/NPCI issue. | REIF009 | Refund request failed due to system or bank/NPCI issue. | Initiate Refund |
Failed | org_txn_rr | REIF008 | Original UPI transaction RRN does not match the given UPI transaction or is invalid. | Initiate Refund, Status Check |
Failed | ParamA validation failed | REIF010 | ParamA is invalid. | Initiate Refund |
Failed | ParamB validation failed | REIF011 | ParamB is invalid. | Initiate Refund |
Failed | ParamC validation failed | REIF012 | ParamC is invalid. | Initiate Refund |
Failed | NewRefund cannot be initiated as full refund already processed. | REIF013 | Refund cannot be initiated, full amount already refunded. | Initiate Refund |
Failed | NewRefund cannot be initiated as another refund is in progress with same UPI transaction ID | REIF014 | Another refund is already in progress for the given UPI transaction. | Initiate Refund |
Failed | Transaction not eligible for refund | REIF015 | Refund not allowed for in progress or failed UPI transactions. | Initiate Refund |
RESERVED | Reserved | REIF016 | __ | — |
Failed | Refund window expired (Max 45 day from Org UPI Transaction Date) | REIF017 | Refund not allowed as the refund window has expired. | Initiate Refund |
Failed | Insufficient balance in merchant account | REIF018 | Refunds failed due to insufficient balance in the merchant account. | Initiate Refund, Status Check |
Failed | org_txn_rrn does not match the given UPI transaction or validation failed | REIF019 | Original UPI transaction RRN does not match the given UPI transaction or is invalid. | Initiate Refund |
Failed | Any error getting from Bank/ NPCI regarding Beneficiary Account Details. Publish same error message along with BANK/NPCI error code in given format | REIF098 | Bank/NPCI error code: XXXXXXX, message: XXXX XXXX XXXX | Initiate Refund, Status Check |
Failed | One Partner tried to initiate refund for another partner Merchant. | REIF099 | Refund not allowed. | Initiate Refund |
Status Codes Abbreviations
- REIS – Refund Initiated Successfully
Refund has been successfully initiated from the system. Awaiting confirmation from bank. - REIP – Refund In Progress
Refund request has been received and is currently being processed. Final status will be shared once completed. - REIF – Refund Failed (for both Initiation Failed and Inprogress Failed)
Refund attempt was unsuccessful. Check the corresponding Status Code and Status Description for the reason. - RESF – Refund Successful
Refund has been successfully processed and credited to the customer’s account. - REEF – Refund Enquiry Failed
Refund enquiry failed.