Create a Normal Refund (Idempotent Request)
Retry or send the same normal refund request multiple times safely using the Razorpay API.
- When you try to create a normal refund, in some cases due to network downtimes, you may not get a response from our servers. As a consequence, you will not be aware of the refund id or its state. In such cases, you can safely retry the transaction using the same idempotency key without risk of double-refund or duplication.
- To make a normal refund request idempotent, add the header
X-Refund-Idempotencyto the request and pass an idempotency key against it. The idempotency key must be at least 10 character long and can contain alphabets, numbers, hyphens and underscores only. For example,550e8400-e29b-41d4-a716-446655440000. - Idempotency is supported for both Normal and Instant Refunds APIs.
- When retrying a request, the request body must be the same as the first request for idempotency to work. A different payload will be rejected as a
BAD_REQUEST. - The idempotency key in retries must be the same as the original request.
- Use unique idempotency keys for each unique request.
- If a request is received while a prior request is still being processed, the system will return a 409 Conflict status code. You may retry the request upon receiving this response.
Path Parameters
Request Parameters
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 ₹1500 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.
normal. Refund will be processed via the normal speed, and the customer will receive the refund within 5-7 working days.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 amount must be at least
INR 1.00.
The amount must be at least INR 1.00.
400The refund amount entered is less than .Solution: Enter an amount of at least .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.Different request with the same idempotency key has already been processed.
Different request with the same idempotency key has already been processed.
409Another refund request with different parameters has been processed using the same idempotency key.Solution: Use a unique idempotency key for the new request and retry.Another request with the same idempotency key is still in progress.
Another request with the same idempotency key is still in progress.
409A refund request with the same idempotency key is currently being processed and has not yet returned a response.Solution: Wait for the previous request to complete or use a different idempotency key.Internal server error - Failed to fetch idempotency record
Internal server error - Failed to fetch idempotency record
500The server encountered an error while retrieving the idempotency record.Solution: Retry the request after some time. If the issue persists, contact Razorpay Support.Internal server error - Failed to parse request body
Internal server error - Failed to parse request body
500The server failed to parse the request body to generate the request hash.Solution: Ensure the request body is properly formatted as valid JSON. If the issue persists, contact Razorpay Support.The idempotency key must be at least 10 characters long.
The idempotency key must be at least 10 characters long.
400The idempotency key provided is less than 10 characters in length.Solution: Use an idempotency key that is at least 10 characters long.The idempotency key must only contain alphanumeric characters, underscores, and hyphens
The idempotency key must only contain alphanumeric characters, underscores, and hyphens
400The idempotency key contains invalid special characters.Solution: Ensure the idempotency key only contains alphanumeric characters (A-Z, a-z, 0-9), underscores (_), and hyphens (-).Merchant id not found in authentication
Merchant id not found in authentication
500The request contains an idempotency key but the merchant authentication is invalid or missing.Solution: Ensure you are using valid API credentials (Key ID and Key Secret) for authentication. If the issue persists, contact Razorpay Support.