Skip to main content
POST
Use this endpoint to change the payment status from authorized to captured. Attempting to capture a payment whose status is not authorized will produce an error.
  • After the customer’s bank authorises the payment, you must verify if the authorised amount deducted from the customer’s account is the same as the amount paid by the customer on your website or app.
  • You can configure automatic capture of payments on the Dashboard.

Path Parameters

string
required
Unique identifier of the payment to be captured.

Request Parameters

integer
required
The amount to be captured (should be equal to the order amount, in the smallest unit of the currency). While creating a capture request, in the amount field, enter only the amount associated with the order that is stored in your database.
string
required
ISO code of the currency in which the payment was made. Refer to the list of supported currencies.
Handy TipsRazorpay has added support for zero decimal currencies, such as JPY, and three decimal currencies, such as KWD, BHD, and OMR, allowing businesses to accept international payments in these currencies. Know more about Currency Conversion (May 2024).

Response Parameters

string
Unique identifier of the payment.
string
Indicates the type of entity.
integer
The payment amount in currency subunits. For example, for an amount of ₹1 enter 100.
string
The currency in which the payment is made. Refer to the list of international currencies that we support.
string
The status of the payment. Possible values:
  • created
  • authorized
  • captured
  • refunded
  • failed
string
The payment method used for making the payment. Possible values:
  • card
  • netbanking
  • wallet
  • emi
  • upi
string
Order id, if provided. Know more about Orders.
string
Description of the payment, if any.
boolean
Indicates whether the payment is done via an international card or a domestic one. Possible values:
  • true: Payment made using international card.
  • false: Payment not made using international card.
string
The refund status of the payment. Possible values:
  • null
  • partial
  • full
integer
The amount refunded in currency subunits. For example, if amount_refunded = 100, it is equal to ₹1.
boolean
Indicates if the payment is captured. Possible values:
  • true: Payment has been captured.
  • false: Payment has not been captured.
string
Customer email address used for the payment.
string
Customer contact number used for the payment.
integer
Fee (including GST) charged by Razorpay.
integer
GST charged for the payment.
string
Error that occurred during payment. For example, BAD_REQUEST_ERROR.
string
Description of the error that occurred during payment. For example, Payment processing failed because of incorrect OTP.
string
The point of failure. For example, customer.
string
The stage where the transaction failure occurred. The stages can vary depending on the payment method used to complete the transaction. For example, payment_authentication.
string
The exact error reason. For example, incorrect_otp.
json object
Contains user-defined fields, stored for reference purposes.
integer
Timestamp, in UNIX format, on which the payment was created.
string
The unique identifier of the card used by the customer to make the payment.
object
Details of the card used to make the payment.
string
The unique identifier of the card used by the customer to make the payment.
string
The name of the entity. Here, it is card.
string
Name of the cardholder.
integer
The last 4 digits of the card number.
string
The card network. Possible values:
  • American Express
  • Diners Club (Only available for private limited and registered businesses)
  • Maestro
  • MasterCard
  • RuPay
  • Unknown
  • Visa
string
The card type. Possible values:
  • credit
  • debit
  • prepaid
  • unknown
string
The card issuer. The 4-character code denotes the issuing bank. This attribute will not be set for the card issued by a foreign bank.
boolean
Indicates whether the card can be used for EMI payment method. Possible values:
  • true: Card can be used for EMI payments.
  • false: Card cannot be used for EMI payments.
string
The sub-type of the customer’s card. Possible values:
  • customer
  • business
Know how to accept payments made by customers using corporate cards.
object
Details of the UPI payment received. Only applicable if method is upi.
string
The payment method used for making the payment. Possible values:
  • bank_account
  • credit_card
  • wallet
  • credit_line
string
The customer’s VPA (Virtual Payment Address) or UPI id used to make the payment. For example, gauravkumar@exampleupi.
string
The type of UPI flow. Possible values:
  • intent: When a UPI app is selected and user is redirected to it.
  • collect: The user enters their UPI ID and receives a notification from the UPI app. They open the app and complete the payment.
  • in_app In case of Turbo UPI Payments.
string
The 4-character bank code which the customer’s account is associated with. For example, UTIB for Axis Bank.
string
The customer’s VPA (Virtual Payment Address) or UPI id used to make the payment. For example, gauravkumar@exampleupi.
string
The name of the wallet used by the customer to make the payment. For example, payzapp.
array
A dynamic array consisting of a unique reference numbers.
string
A unique bank reference number 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.
string
A unique reference number generated for RuPay card payments.
string
A unique reference number provided by the banking partner in case of netbanking payments.

Errors

Code: 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.
Code: 400
  • The capture amount is incorrect.
  • The amount you are trying to capture differs from the authorised amount .
Solution:
  • Enter the correct capture amount.
  • Ensure that the amount to be captured is equal to the authorised amount.
Code: 400This payment has already been captured.Solution: Ensure that the payment is in the authorized state to capture it successfully.
Code: 400The payment_id provided is incorrect.Solution: Enter the correct payment_id.
Code: 400The URL is incorrect.Solution: Use the correct URL.
Code: 400The amount specified is incorrect.Solution: Enter the correct amount without any decimal points.
Code: 400The amount field was omitted from the capture request body.Solution: Always include amount (in currency subunits) in the capture request body.
Code: 400The capture request body is empty or missing the amount key.Solution: Send a JSON body containing both amount and currency.
Code: 400The currency passed in the capture request does not match the currency of the underlying payment.Solution: Pass the same currency that was used when the payment was created. Capture currency cannot be changed.
Code: 400A capture was attempted on a payment that has already moved out of the authorized state. It is either already captured or has been voided.Solution: Fetch the payment using GET /v1/payments/:id and check status. Only retry capture if the payment is still in authorized state.
Code: 400Capture can only be performed on payments in the authorized state. The payment is currently in a different state (failed, created, refunded or already captured).Solution: Confirm the payment status using the Fetch Payment API before capturing.
Code: 400The payment is not in a captureable state. This message surfaces for payments that have already settled, been voided or failed.Solution: Inspect the payment status. Only authorized payments are eligible for capture.
Code: 400For corporate-card payments and other approval-flow gateways, the payment is waiting for an internal approver and is not yet authorised.Solution: Wait for the approver to complete the authorisation. Retry capture once status moves to authorized.
Code: 400The capture amount exceeds the order’s outstanding amount_due. This typically happens when partial payments have already been captured on the order.Solution: Capture an amount less than or equal to the order’s amount_due. Fetch the order to confirm the remaining due amount.
Code: 400The order linked to this payment is already in the paid state. Another payment has already been captured against it.Solution: Create a new order for the next transaction. An order in the paid state cannot accept additional captures.
Code: 400A concurrent operation (another capture or a refund) is already running for this payment.Solution: Wait a few seconds and retry. Fetch the payment to confirm its current state before retrying.
Code: 400The payment has already moved to a final state (such as captured or refunded) and cannot be processed again.Solution: Use the Fetch Payment API to check the current status. No further capture is required.