API Test Keys

Capture a Payment

POST
/v1/payments/:id/capture

Click to copy

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 of payments on the Dashboard.

Is this page helpful?

Curl

change language

change language

1
curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \
2
-H 'content-type: application/json' \
3
-X POST https://api.razorpay.com/v1/payments/pay_29QQoUBi66xm2f/capture \
4
-d '{
5
"amount": 1000,
6
"currency": ""
7
}'

Success

Failure

1
{
2
"id": "pay_LPpN6ssnoEVNv0",
3
"entity": "payment",
4
"amount": 1000,
5
"currency": "",
6
"status": "captured",
7
"order_id": null,
8
"invoice_id": null,
9
"international": false,
10
"method": "card",
11
"amount_refunded": 0,
12
"refund_status": null,
13
"captured": true,
14
"description": "Test Transaction",
15
"card_id": "card_LPpN6ubeosLH4g",
16
"card": {
17
"id": "card_LPpN6ubeosLH4g",
18
"entity": "card",
19
"name": "",
20
"last4": "0153",
21
"network": "Visa",
22
"type": "debit",
23
"issuer": null,
24
"international": false,
25
"sub_type": "consumer",
26
"token_iin": null
27
},
28
"bank": null,
29
"wallet": null,
30
"email": "nur.aisyah@example.com",
31
"contact": "+60123456789",
32
"notes": {
33
"address": "Corporate Office"
34
},
35
"fee": 100,
36
"tax": 0,
37
"error_code": null,
38
"error_description": null,
39
"error_source": null,
40
"error_step": null,
41
"error_reason": null,
42
"acquirer_data": {
43
"auth_code": "878694"
44
},
45
"created_at": 1678452635
46
}
Path Parameters
id

*

string

Unique identifier of the payment to be captured.

Request Parameters
amount

*

integer

The amount to be captured (should be equal to or less than 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.

Handy Tips

If the payment amount is less than the authorised total order amount (partial capture), please contact our

for assistance.

Partial capture is available only for card payment and on manual payment capture mode.

currency

*

string

ISO code of the currency in which the payment was made.

Response Parameters
id
string

Unique identifier of the payment.

entity
string

Indicates the type of entity.

amount
integer

The payment amount in currency subunits. For example, for an amount of RM 1 enter 100.

currency
string

The currency in which the payment is made.

status
string

The status of the payment. Possible values:

  • created
  • authorized
  • captured
  • refunded
  • failed

method
string

The payment method used for making the payment. Possible values:

  • card
  • fpx
  • wallet

order_id
string

Order id, if provided. Know more about

.

description
string

Description of the payment, if any.

international
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.

refund_status
string

The refund status of the payment. Possible values:

  • null
  • partial
  • full

amount_refunded
integer

The amount refunded in currency subunits. For example, if amount_refunded = 100, it is equal to RM 1.

captured
boolean

Indicates if the payment is captured. Possible values:

  • true: Payment has been captured.
  • false: Payment has not been captured.

email
string

Customer email address used for the payment.

contact
string

Customer contact number used for the payment.

fee
integer

Fee (including tax) charged by Razorpay Curlec.

tax
integer

Tax charged for the payment.

error_code
string

Error that occurred during payment. For example, BAD_REQUEST_ERROR.

error_description
string

Description of the error that occurred during payment. For example, Payment processing failed because of incorrect OTP.

error_source
string

The point of failure. For example, customer.

error_step
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.

error_reason
string

The exact error reason. For example, incorrect_otp.

notes
json object

Contains user-defined fields, stored for reference purposes.

created_at
integer

Timestamp, in UNIX format, on which the payment was created.

card_id
string

The unique identifier of the card used by the customer to make the payment.

Show child parameters (3)

upi
object

Details of the UPI payment received. Only applicable if method is upi.

Show child parameters (3)

bank
string

The 4-character bank code which the customer's account is associated with. For example, UTIB for Axis Bank.

vpa
string

The customer's VPA (Virtual Payment Address) or UPI id used to make the payment. For example, gauravkumar@exampleupi.

wallet
string

The name of the wallet used by the customer to make the payment. For example, payzapp.

acquirer_data
array

A dynamic array consisting of a unique reference numbers.

Show child parameters (3)

card
object

Details of the card used to make the payment.

Show child parameters (8)

bank
string

The 4-character bank code which the customer's account is associated with.

wallet
string

The name of the wallet used by the customer to make the payment. For example, grabpay.

acquirer_data
array

A dynamic array consisting of a unique reference number.

Show child parameters (2)

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

Capture amount must be equal to the amount authorized.

Error Status: 400

  • The capture amount is incorrect.
  • The amount you are trying to capture differs from the authorised amount .

Solution

Your payment has been declined as the order is already paid. Please initiate the payment with a new order.

Error Status: 400

This payment has already been captured.

Solution

The id provided does not exist

Error Status: 400

The payment_id provided is incorrect.

Solution

The requested URL was not found on the server.

Error Status: 400

The URL is incorrect.

Solution

The amount must be an integer

Error Status: 400

The amount specified is incorrect.

Solution

Could not validate payment capture request due to: amount: cannot be blank.

Error Status: 400

The amount field was omitted from the capture request body.

Solution

Could not validate payment capture request due to: amount: required key is missing.

Error Status: 400

The capture request body is empty or missing the amount key.

Solution

Capture request currency must be same as payment currency.

Error Status: 400

The currency passed in the capture request does not match the currency of the underlying payment.

Solution

The payment has already been either captured or voided.

Error Status: 400

A 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

Payment is not in authorized state.

Error Status: 400

Capture 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

Only payments which have been authorized and not yet captured can be captured.

Error Status: 400

The payment is not in a captureable state. This message surfaces for payments that have already settled, been voided or failed.

Solution

Payment is pending authorization from approver.

Error Status: 400

For corporate-card payments and other approval-flow gateways, the payment is waiting for an internal approver and is not yet authorised.

Solution

Payment amount is greater than the amount due for order.

Error Status: 400

The capture amount exceeds the order's outstanding amount_due. This typically happens when partial payments have already been captured on the order.

Solution

Payment already done for this order.

Error Status: 400

The order linked to this payment is already in the paid state. Another payment has already been captured against it.

Solution

Request failed because another payment operation is in progress.

Error Status: 400

A concurrent operation (another capture or a refund) is already running for this payment.

Solution

The payment has already been processed.

Error Status: 400

The payment has already moved to a final state (such as captured or refunded) and cannot be processed again.

Solution

Capture a Payment

POST
/v1/payments/:id/capture

Click to copy

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 of payments on the Dashboard.

Is this page helpful?

Path Parameters
id

*

string

Unique identifier of the payment to be captured.

Request Parameters
amount

*

integer

The amount to be captured (should be equal to or less than 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.

Handy Tips

If the payment amount is less than the authorised total order amount (partial capture), please contact our

for assistance.

Partial capture is available only for card payment and on manual payment capture mode.

currency

*

string

ISO code of the currency in which the payment was made.

Response Parameters
id
string

Unique identifier of the payment.

entity
string

Indicates the type of entity.

amount
integer

The payment amount in currency subunits. For example, for an amount of RM 1 enter 100.

currency
string

The currency in which the payment is made.

status
string

The status of the payment. Possible values:

  • created
  • authorized
  • captured
  • refunded
  • failed

method
string

The payment method used for making the payment. Possible values:

  • card
  • fpx
  • wallet

order_id
string

Order id, if provided. Know more about

.

description
string

Description of the payment, if any.

international
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.

refund_status
string

The refund status of the payment. Possible values:

  • null
  • partial
  • full

amount_refunded
integer

The amount refunded in currency subunits. For example, if amount_refunded = 100, it is equal to RM 1.

captured
boolean

Indicates if the payment is captured. Possible values:

  • true: Payment has been captured.
  • false: Payment has not been captured.

email
string

Customer email address used for the payment.

contact
string

Customer contact number used for the payment.

fee
integer

Fee (including tax) charged by Razorpay Curlec.

tax
integer

Tax charged for the payment.

error_code
string

Error that occurred during payment. For example, BAD_REQUEST_ERROR.

error_description
string

Description of the error that occurred during payment. For example, Payment processing failed because of incorrect OTP.

error_source
string

The point of failure. For example, customer.

error_step
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.

error_reason
string

The exact error reason. For example, incorrect_otp.

notes
json object

Contains user-defined fields, stored for reference purposes.

created_at
integer

Timestamp, in UNIX format, on which the payment was created.

card_id
string

The unique identifier of the card used by the customer to make the payment.

Show child parameters (3)

upi
object

Details of the UPI payment received. Only applicable if method is upi.

Show child parameters (3)

bank
string

The 4-character bank code which the customer's account is associated with. For example, UTIB for Axis Bank.

vpa
string

The customer's VPA (Virtual Payment Address) or UPI id used to make the payment. For example, gauravkumar@exampleupi.

wallet
string

The name of the wallet used by the customer to make the payment. For example, payzapp.

acquirer_data
array

A dynamic array consisting of a unique reference numbers.

Show child parameters (3)

card
object

Details of the card used to make the payment.

Show child parameters (8)

bank
string

The 4-character bank code which the customer's account is associated with.

wallet
string

The name of the wallet used by the customer to make the payment. For example, grabpay.

acquirer_data
array

A dynamic array consisting of a unique reference number.

Show child parameters (2)

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

Capture amount must be equal to the amount authorized.

Error Status: 400

  • The capture amount is incorrect.
  • The amount you are trying to capture differs from the authorised amount .

Solution

Your payment has been declined as the order is already paid. Please initiate the payment with a new order.

Error Status: 400

This payment has already been captured.

Solution

The id provided does not exist

Error Status: 400

The payment_id provided is incorrect.

Solution

The requested URL was not found on the server.

Error Status: 400

The URL is incorrect.

Solution

The amount must be an integer

Error Status: 400

The amount specified is incorrect.

Solution

Could not validate payment capture request due to: amount: cannot be blank.

Error Status: 400

The amount field was omitted from the capture request body.

Solution

Could not validate payment capture request due to: amount: required key is missing.

Error Status: 400

The capture request body is empty or missing the amount key.

Solution

Capture request currency must be same as payment currency.

Error Status: 400

The currency passed in the capture request does not match the currency of the underlying payment.

Solution

The payment has already been either captured or voided.

Error Status: 400

A 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

Payment is not in authorized state.

Error Status: 400

Capture 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

Only payments which have been authorized and not yet captured can be captured.

Error Status: 400

The payment is not in a captureable state. This message surfaces for payments that have already settled, been voided or failed.

Solution

Payment is pending authorization from approver.

Error Status: 400

For corporate-card payments and other approval-flow gateways, the payment is waiting for an internal approver and is not yet authorised.

Solution

Payment amount is greater than the amount due for order.

Error Status: 400

The capture amount exceeds the order's outstanding amount_due. This typically happens when partial payments have already been captured on the order.

Solution

Payment already done for this order.

Error Status: 400

The order linked to this payment is already in the paid state. Another payment has already been captured against it.

Solution

Request failed because another payment operation is in progress.

Error Status: 400

A concurrent operation (another capture or a refund) is already running for this payment.

Solution

The payment has already been processed.

Error Status: 400

The payment has already moved to a final state (such as captured or refunded) and cannot be processed again.

Solution

Curl

change language

change language

1
curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \
2
-H 'content-type: application/json' \
3
-X POST https://api.razorpay.com/v1/payments/pay_29QQoUBi66xm2f/capture \
4
-d '{
5
"amount": 1000,
6
"currency": ""
7
}'

Success

Failure

1
{
2
"id": "pay_LPpN6ssnoEVNv0",
3
"entity": "payment",
4
"amount": 1000,
5
"currency": "",
6
"status": "captured",
7
"order_id": null,
8
"invoice_id": null,
9
"international": false,
10
"method": "card",
11
"amount_refunded": 0,
12
"refund_status": null,
13
"captured": true,
14
"description": "Test Transaction",
15
"card_id": "card_LPpN6ubeosLH4g",
16
"card": {
17
"id": "card_LPpN6ubeosLH4g",
18
"entity": "card",
19
"name": "",
20
"last4": "0153",
21
"network": "Visa",
22
"type": "debit",
23
"issuer": null,
24
"international": false,
25
"sub_type": "consumer",
26
"token_iin": null
27
},
28
"bank": null,
29
"wallet": null,
30
"email": "nur.aisyah@example.com",
31
"contact": "+60123456789",
32
"notes": {
33
"address": "Corporate Office"
34
},
35
"fee": 100,
36
"tax": 0,
37
"error_code": null,
38
"error_description": null,
39
"error_source": null,
40
"error_step": null,
41
"error_reason": null,
42
"acquirer_data": {
43
"auth_code": "878694"
44
},
45
"created_at": 1678452635
46
}