Create a Normal Refund
POST/v1/payments/:id/refundClick to copy
Use this endpoint to create a normal refund for a payment.
Is this page helpful?
1curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \2-X POST https://api.razorpay.com/v1/payments/pay_29QQoUBi66xm2f/refund \3-H 'Content-Type: application/json' \4-d '{5"amount": 5001006}'
Success
Failure
1{2"id": "rfnd_FP8QHiV938haTz",3"entity": "refund",4"amount": 500100,5"receipt": "Receipt No. 31",6"currency": "",7"payment_id": "pay_29QQoUBi66xm2f",8"notes": [],9"receipt": null,10"acquirer_data": {11"arn": null12},13"created_at": 1597078866,14"batch_id": null,15"status": "processed",16"speed_processed": "normal",17"speed_requested": "normal"18}
Path Parameters
id *
stringThe unique identifier of the payment which needs to be refunded.
Request Parameters
amount integer The amount to be refunded. Amount should be in the smallest unit of the currency in which the payment was made. In the case of three decimal currencies, such as KWD, BHD and OMR, to refund a payment of 295.991, pass the value as 295990. And in the case of zero decimal currencies such as JPY, to refund a payment of 295, pass the value as 295.
- For a partial refund, enter a value lesser than the payment amount. For example, if the payment amount is ₹1,500 and you want to refund only ₹500, you must pass
50000. - For full refund, enter the entire payment amount. If the
amountparameter is not passed, the entire payment amount will be refunded.
Watch Out!
As per payment guidelines, you should pass the last decimal number as 0 for three decimal currency payments. For example, if you want to refund a customer 99.991 KD for a transaction, you should pass the value for the amount parameter as 99990 and not 99991.
speed string The speed at which the refund is to be processed. The default value is normal. Refund will be processed via the normal speed, and the customer will receive the refund within 5-7 working days.
notes json objectKey-value pairs used to store additional information. A maximum of 15 key-value pairs can be included.
receipt stringA unique identifier provided by you for your internal reference.
Response Parameters
idstring The unique identifier of the refund. For example, rfnd_FgRAHdNOM4ZVbO.
entitystring Indicates the type of entity. Here, it is refund.
amountinteger The amount to be refunded (in the smallest unit of currency).
For example, if the refund value is ₹30 it will be 3000.
currencystringThe currency of payment amount for which the refund is initiated. Check the list of
.payment_idstring The unique identifier of the payment for which a refund is initiated. For example, pay_FgR9UMzgmKDJRi.
created_atinteger Unix timestamp at which the refund was created. For example, 1600856650.
batch_idstring This parameter is populated if the refund was created as part of a batch upload. For example, batch_00000000000001.
notesjson object Key-value store for storing your reference data. A maximum of 15 key-value pairs can be included. For example, "note_key": "Beam me up Scotty".
receiptstringA unique identifier provided by you for your internal reference.
acquirer_dataarrayA dynamic array consisting of a unique reference number (either RRN, ARN or UTR) that is provided by the banking partner when a refund is processed. This reference number can be used by the customer to track the status of the refund with the bank.
statusstringIndicates the state of the refund. Possible values:
pending: This state indicates that Razorpay is attempting to process the refund.processed: This is the final state of the refund.failed: A refund can attain the failed state in the following scenarios:
- Normal refund is not possible for a payment which is more than 6 months old.
- Instant Refund can sometimes fail because of customer's account or bank-related issues.
- Normal refund is not possible for a payment which is more than 6 months old.
speed_requestedstring The processing mode of the refund seen in the refund response.
This attribute is seen in the refund response only if the speed parameter is set in the refund request.
Possible values:
normal: Indicates that the refund will be processed via the normal speed. The refund will take 5-7 working days.optimum: Indicates that the refund will be processed at an optimal speed based on Razorpay's internal fund transfer logic.- If the refund can be processed instantly, Razorpay will do so, irrespective of the payment method used to make the payment.
- If an instant refund is not possible, Razorpay will initiate a refund that is processed at the normal speed.
speed_processedstring This is a parameter in the response which describes the mode used to process a refund.
This attribute is seen in the refund response only if the speed parameter is set in the refund request. Possible values:
instant: Indicates that the refund has been processed instantly via fund transfer.normal: Indicates that the refund has been processed by the payment processing partner. The refund will take 5-7 working days.
Errors
The API {key/secret} provided is invalid.
Error Status: 4xx
The API credentials passed in the API call differ from the ones generated on the Dashboard.
Solution
{Payment_id} is not a valid id.
Error Status: 400
The payment_id provided is invalid.
Solution
The requested URL was not found on the server.
Error Status: 400
Possible reasons:
- The URL is wrong or is missing something.
- A POST API is executed by GET method.
Solution
{any Extra field} is/are not required and should not be sent.
Error Status: 400
An additional or unrequired parameter is passed.
Solution
The refund amount provided is greater than amount captured.
Error Status: 400
The refund amount entered is more than the amount captured.
Solution
The amount must be at least INR 1.00.
Error Status: 400
The refund amount entered is less than ₹1.
Solution
The payment has been fully refunded already.
Error Status: 400
The payment_id has already been refunded fully.
Solution
The amount must be an integer.
Error Status: 400
A non-integer value (for example a string or a decimal) was passed for the amount field.
Solution
The selected speed is invalid.
Error Status: 400
An unsupported value was passed for the speed field.
Solution
Your account does not have enough balance to carry out the refund operation.
Error Status: 400
The merchant's Razorpay balance is lower than the refund amount being requested. Refunds are paid out from the merchant balance, not directly from the original payment.
Solution
The payment status should be captured for action to be taken.
Error Status: 400
The payment is not in the captured state. This typically happens because it failed, is still authorized, was cancelled or has already been fully refunded. Refunds can only be initiated against payments that are currently in the captured state.
Solution
Amount cannot be blank.
Error Status: 400
The amount field was passed as 0. Razorpay treats 0 as a missing value rather than a zero-amount refund. Omitting amount is valid and triggers a full refund.
Solution
Refund is currently not supported for this payment method.
Error Status: 400
The payment method used for this transaction (for example, Cash on Delivery, offline, BharatQR) does not support refunds via API.
Solution
Partial refund is currently not supported for this payment method.
Error Status: 400
The gateway or payment method used for this payment supports only full refunds, not partial ones.
Solution
Refunds cannot be created on your account.
Error Status: 400
Refunds are disabled at the account level for the merchant making the request.
Solution
Refunds cannot be created on your account for {payment method} payments.
Error Status: 400
Refunds are disabled on your account for the specific payment method used (for example, card, upi, netbanking, wallet, emi, pay later). The placeholder is replaced with the actual method name in the response.
Solution
Refund has already been processed.
Error Status: 400
A refund for this payment has already moved to a final state and cannot be re-initiated using the same request.
Solution
The refund on this payment is blocked due to ongoing dispute investigation.
Error Status: 400
The payment is under an active dispute (chargeback) and cannot be refunded until the dispute is resolved.
Solution
Duplicate receipt found for this refund request.
Error Status: 400
The value passed in the receipt parameter has already been used for an earlier refund on the same payment. receipt is treated as an idempotency key.
Solution
Notes validation failed.
Error Status: 400
The notes object failed validation. Possible reasons: more than 15 keys, a key longer than 255 characters, or a value longer than 512 characters.
Solution
Request failed because another payment operation is in progress.
Error Status: 400
A concurrent operation (such as another refund attempt or a capture) is already running for the same payment.
Solution
Create a Normal Refund
POST/v1/payments/:id/refundClick to copy
Use this endpoint to create a normal refund for a payment.
Is this page helpful?
Path Parameters
id *
stringThe unique identifier of the payment which needs to be refunded.
Request Parameters
amount integer The amount to be refunded. Amount should be in the smallest unit of the currency in which the payment was made. In the case of three decimal currencies, such as KWD, BHD and OMR, to refund a payment of 295.991, pass the value as 295990. And in the case of zero decimal currencies such as JPY, to refund a payment of 295, pass the value as 295.
- For a partial refund, enter a value lesser than the payment amount. For example, if the payment amount is ₹1,500 and you want to refund only ₹500, you must pass
50000. - For full refund, enter the entire payment amount. If the
amountparameter is not passed, the entire payment amount will be refunded.
Watch Out!
As per payment guidelines, you should pass the last decimal number as 0 for three decimal currency payments. For example, if you want to refund a customer 99.991 KD for a transaction, you should pass the value for the amount parameter as 99990 and not 99991.
speed string The speed at which the refund is to be processed. The default value is normal. Refund will be processed via the normal speed, and the customer will receive the refund within 5-7 working days.
notes json objectKey-value pairs used to store additional information. A maximum of 15 key-value pairs can be included.
receipt stringA unique identifier provided by you for your internal reference.
Response Parameters
idstring The unique identifier of the refund. For example, rfnd_FgRAHdNOM4ZVbO.
entitystring Indicates the type of entity. Here, it is refund.
amountinteger The amount to be refunded (in the smallest unit of currency).
For example, if the refund value is ₹30 it will be 3000.
currencystringThe currency of payment amount for which the refund is initiated. Check the list of
.payment_idstring The unique identifier of the payment for which a refund is initiated. For example, pay_FgR9UMzgmKDJRi.
created_atinteger Unix timestamp at which the refund was created. For example, 1600856650.
batch_idstring This parameter is populated if the refund was created as part of a batch upload. For example, batch_00000000000001.
notesjson object Key-value store for storing your reference data. A maximum of 15 key-value pairs can be included. For example, "note_key": "Beam me up Scotty".
receiptstringA unique identifier provided by you for your internal reference.
acquirer_dataarrayA dynamic array consisting of a unique reference number (either RRN, ARN or UTR) that is provided by the banking partner when a refund is processed. This reference number can be used by the customer to track the status of the refund with the bank.
statusstringIndicates the state of the refund. Possible values:
pending: This state indicates that Razorpay is attempting to process the refund.processed: This is the final state of the refund.failed: A refund can attain the failed state in the following scenarios:
- Normal refund is not possible for a payment which is more than 6 months old.
- Instant Refund can sometimes fail because of customer's account or bank-related issues.
- Normal refund is not possible for a payment which is more than 6 months old.
speed_requestedstring The processing mode of the refund seen in the refund response.
This attribute is seen in the refund response only if the speed parameter is set in the refund request.
Possible values:
normal: Indicates that the refund will be processed via the normal speed. The refund will take 5-7 working days.optimum: Indicates that the refund will be processed at an optimal speed based on Razorpay's internal fund transfer logic.- If the refund can be processed instantly, Razorpay will do so, irrespective of the payment method used to make the payment.
- If an instant refund is not possible, Razorpay will initiate a refund that is processed at the normal speed.
speed_processedstring This is a parameter in the response which describes the mode used to process a refund.
This attribute is seen in the refund response only if the speed parameter is set in the refund request. Possible values:
instant: Indicates that the refund has been processed instantly via fund transfer.normal: Indicates that the refund has been processed by the payment processing partner. The refund will take 5-7 working days.
Errors
The API {key/secret} provided is invalid.
Error Status: 4xx
The API credentials passed in the API call differ from the ones generated on the Dashboard.
Solution
{Payment_id} is not a valid id.
Error Status: 400
The payment_id provided is invalid.
Solution
The requested URL was not found on the server.
Error Status: 400
Possible reasons:
- The URL is wrong or is missing something.
- A POST API is executed by GET method.
Solution
{any Extra field} is/are not required and should not be sent.
Error Status: 400
An additional or unrequired parameter is passed.
Solution
The refund amount provided is greater than amount captured.
Error Status: 400
The refund amount entered is more than the amount captured.
Solution
The amount must be at least INR 1.00.
Error Status: 400
The refund amount entered is less than ₹1.
Solution
The payment has been fully refunded already.
Error Status: 400
The payment_id has already been refunded fully.
Solution
The amount must be an integer.
Error Status: 400
A non-integer value (for example a string or a decimal) was passed for the amount field.
Solution
The selected speed is invalid.
Error Status: 400
An unsupported value was passed for the speed field.
Solution
Your account does not have enough balance to carry out the refund operation.
Error Status: 400
The merchant's Razorpay balance is lower than the refund amount being requested. Refunds are paid out from the merchant balance, not directly from the original payment.
Solution
The payment status should be captured for action to be taken.
Error Status: 400
The payment is not in the captured state. This typically happens because it failed, is still authorized, was cancelled or has already been fully refunded. Refunds can only be initiated against payments that are currently in the captured state.
Solution
Amount cannot be blank.
Error Status: 400
The amount field was passed as 0. Razorpay treats 0 as a missing value rather than a zero-amount refund. Omitting amount is valid and triggers a full refund.
Solution
Refund is currently not supported for this payment method.
Error Status: 400
The payment method used for this transaction (for example, Cash on Delivery, offline, BharatQR) does not support refunds via API.
Solution
Partial refund is currently not supported for this payment method.
Error Status: 400
The gateway or payment method used for this payment supports only full refunds, not partial ones.
Solution
Refunds cannot be created on your account.
Error Status: 400
Refunds are disabled at the account level for the merchant making the request.
Solution
Refunds cannot be created on your account for {payment method} payments.
Error Status: 400
Refunds are disabled on your account for the specific payment method used (for example, card, upi, netbanking, wallet, emi, pay later). The placeholder is replaced with the actual method name in the response.
Solution
Refund has already been processed.
Error Status: 400
A refund for this payment has already moved to a final state and cannot be re-initiated using the same request.
Solution
The refund on this payment is blocked due to ongoing dispute investigation.
Error Status: 400
The payment is under an active dispute (chargeback) and cannot be refunded until the dispute is resolved.
Solution
Duplicate receipt found for this refund request.
Error Status: 400
The value passed in the receipt parameter has already been used for an earlier refund on the same payment. receipt is treated as an idempotency key.
Solution
Notes validation failed.
Error Status: 400
The notes object failed validation. Possible reasons: more than 15 keys, a key longer than 255 characters, or a value longer than 512 characters.
Solution
Request failed because another payment operation is in progress.
Error Status: 400
A concurrent operation (such as another refund attempt or a capture) is already running for the same payment.
Solution
1curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \2-X POST https://api.razorpay.com/v1/payments/pay_29QQoUBi66xm2f/refund \3-H 'Content-Type: application/json' \4-d '{5"amount": 5001006}'
Success
Failure
1{2"id": "rfnd_FP8QHiV938haTz",3"entity": "refund",4"amount": 500100,5"receipt": "Receipt No. 31",6"currency": "",7"payment_id": "pay_29QQoUBi66xm2f",8"notes": [],9"receipt": null,10"acquirer_data": {11"arn": null12},13"created_at": 1597078866,14"batch_id": null,15"status": "processed",16"speed_processed": "normal",17"speed_requested": "normal"18}