Create an Instant Refund
Create an Instant Refund using Razorpay Refunds API.
optimum when creating a refund request to ensure refunds are processed instantly. We will consider the default speed if you do not specify the same during the refund request. Know more about setting the default speed from the Dashboard.
- Refunds 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.
processed state, the refund response displays the speed_processed parameter, the final state of the refund.
Path Parameters
Request Parameters
- For a partial refund, enter a value lesser than the payment amount. For example, if the payment amount is ₹1200, and you want to refund only ₹200, you must pass
20000. - In case of a full refund, enter the full payment amount. If
amountparameter is not passed, the entire payment amount will be refunded.
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.
"note_key": "Beam me up Scotty”.Response Parameters
rfnd_FgRAHdNOM4ZVbO.refund.For example, if the refund value is ₹30 it will be
3000.pay_FgR9UMzgmKDJRi.1600856650.batch_00000000000001."note_key": "Beam me up Scotty”.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.
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.
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.
The API {key/secret} provided is invalid.
4xxThe API credentials passed in the API call differ from the ones generated on the Dashboard.Solution: The API keys must be active and entered correctly with no whitespace before or after.{Payment_id} is not a valid id.
{Payment_id} is not a valid id.
400The payment_id provided is invalid.Solution: Use a valid payment_id.The requested URL was not found on the server.
The requested URL was not found on the server.
400Possible reasons:- The URL is wrong or is missing something.
- A POST API is executed by GET method.
- Ensure that the URL is correct and complete.
- Use the correct method, that is, POST.
{any Extra field} is/are not required and should not be sent.
{any Extra field} is/are not required and should not be sent.
400An additional or unrequired parameter is passed.Solution: Ensure that you only pass the required parameters in the request body.The refund amount provided is greater than amount captured.
The refund amount provided is greater than amount captured.
400The refund amount entered is more than the amount captured.Solution: Enter an amount equal to or less than the amount captured.The payment has been fully refunded already.
The payment has been fully refunded already.
400The payment_id has already been refunded fully.Solution: Use a payment_id that has not been fully refunded.Your account does not have enough balance to carry out the refund operation.
Your account does not have enough balance to carry out the refund operation.
400The 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: Add funds to your Razorpay account from the Dashboard or capture additional payments to increase your balance, then retry the refund.The payment status should be captured for action to be taken.
The payment status should be captured for action to be taken.
400The 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: Confirm the payment status using GET /v1/payments/:id before refunding. Only attempt refunds on payments where status is captured.Amount cannot be blank.
Amount cannot be blank.
400The 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: Pass amount as a positive integer in currency subunits (paise for INR).Instant refund not supported for the payment.
Instant refund not supported for the payment.
400The payment cannot be refunded at instant speed — typically because the underlying payment method, gateway or acquirer does not support instant refunds.Solution: Retry the refund without speed: optimum, or omit the speed parameter to fall back to a normal refund.Refund is currently not supported for this payment method.
Refund is currently not supported for this payment method.
400The payment method used for this transaction (for example, Cash on Delivery, offline, BharatQR) does not support refunds via API.Solution: Reconcile the refund offline with the customer. Do not retry the API call.Partial refund is currently not supported for this payment method.
Partial refund is currently not supported for this payment method.
400The gateway or payment method used for this payment supports only full refunds, not partial ones.Solution: Issue a full refund by omitting the amount parameter, or pass the full captured amount.Refunds cannot be created on your account.
Refunds cannot be created on your account.
400Refunds are disabled at the account level for the merchant making the request.Solution: Contact Razorpay support to enable refunds on your account.Refunds cannot be created on your account for {payment method} payments.
Refunds cannot be created on your account for {payment method} payments.
400Refunds 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: Contact Razorpay support to enable refunds for that payment method, or use a different payment method.Refund has already been processed.
Refund has already been processed.
400A refund for this payment has already moved to a final state and cannot be re-initiated using the same request.Solution: Use the Fetch Refunds API to check the existing refund status before retrying.The refund on this payment is blocked due to ongoing dispute investigation.
The refund on this payment is blocked due to ongoing dispute investigation.
400The payment is under an active dispute (chargeback) and cannot be refunded until the dispute is resolved.Solution: Wait for the dispute to be resolved before initiating a refund. Track the dispute status from the Razorpay Dashboard.Duplicate receipt found for this refund request.
Duplicate receipt found for this refund request.
400The 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: Pass a unique value in receipt, or check the existing refund created with the same receipt before retrying.Notes validation failed.
Notes validation failed.
400The notes object failed validation. Possible reasons: more than 15 keys, a key longer than 255 characters, or a value longer than 512 characters.Solution: Limit notes to a maximum of 15 key-value pairs, keep each key under 256 characters, and each value under 512 characters.Request failed because another payment operation is in progress.
Request failed because another payment operation is in progress.
400A concurrent operation (such as another refund attempt or a capture) is already running for the same payment.Solution: Wait a few seconds and retry. If the issue persists, fetch the payment and its existing refunds to confirm the current state before retrying.Void is not supported for partial refunds.
Void is not supported for partial refunds.
400A partial-amount refund was requested on a payment that is still in the authorized state. A void can only be performed for the full authorised amount.Solution: Either capture the payment first and then issue a partial refund, or void the full authorised amount by omitting the amount parameter.