Create Recurring Card Payments with Partner Auth
Steps to integrate Recurring Card Payments with Partner Auth using Razorpay APIs.
Use Razorpay
APIs to seamlessly schedule and manage recurring card payments for your customers, with full control over payment intervals and frequency.Token sharing eliminates the need for customers to re-enter card details when making purchases across different businesses under the same legal entity, creating a seamless payment experience. This feature allows tokens created under any merchant ID (MID) to be automatically shared across all MIDs within the same entity, significantly improving customer convenience and reducing checkout friction. Know more about
.Given below are the integration steps.
Handy Tips
To use Partner Auth in APIs, you must:
- Add the basic auth with partner credentials (client_id and client_secret).
- Add the
account_idof the sub-merchant using X-Razorpay-Account in the header. For example,-H "X-Razorpay-Account: acc_KBrJAIEqre5ucn"
Razorpay links recurring tokens to customers via a unique identifier. You can generate this identifier using the Customer API.
You can create customers with basic information such as email and contact and use them for various Razorpay offerings. The following endpoint creates a customer.
curl -X POST https://api.razorpay.com/v1/customers \-u [YOUR_PARTNER_KEY_ID]:[YOUR_PARTNER_KEY_SECRET]\-H "X-Razorpay-Account: acc_KBrJAIEqre5ucn" \-H "Content-Type: application/json" \-d '{"name": "Gaurav Kumar","email": "gaurav.kumar@example.com","contact": "9876543210","fail_existing": "0","notes":{"note_key_1": "November Rains.","note_key_2": "Snow on the beach."}}'
name
mandatory
string The name of the customer. For example, Gaurav Kumar.
mandatory
string The email id of the customer. For example, gaurav.kumar@example.com.
contact
mandatory
string The phone number of the customer. For example, 9876543210.
fail_existing
optional
string The request throws an exception by default if a customer with the exact details already exists. You can pass an additional parameter fail_existing to get the existing customer's details in the response. Possible values:
1(default): If a customer with the same details already exists, throws an error.0: If a customer with the same details already exists, fetches details of the existing customer.
notes
optional
json object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key_1": November Rains".
id
string The unique identifier of the customer. For example, cust_1Aa00000000001.
entity
string The name of the entity. Here, it is customer.
name
string The name of the customer. For example, Gaurav Kumar.
string The email id of the customer. For example, gaurav.kumar@example.com.
contact
string The phone number of the customer. For example, 9876543210.
notes
json object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, For example, "note_key_1": November Rains".
created_at
integer A Unix timestamp, at which the customer was created.
You can create the registration payment using:
- Consolidated Orders and Payments API
- Individual and APIs
Given below is the sample code for the Consolidated Orders and Payments API.
curl -X POST https://api.razorpay.com/v1/orders \-u [YOUR_PARTNER_KEY_ID]:[YOUR_PARTNER_KEY_SECRET] \-H "X-Razorpay-Account: acc_KBrJAIEqre5ucn" \-H "Content-Type: application/json" \-d '{"amount": 100,"currency": "INR","customer_id": "cust_KhOZydVZbcThjW","notes": {"key1": "notes debugging 1","key2": "notes debugging 2"},"token": {"max_amount": 200,"expire_at": 2709971120,"frequency": "monthly"},"payment": {"amount": 100,"email": "gaurav.kumar@example.com","contact": "9876543210","method": "card","notes": {"key1": "paymentvalue3","key2": "paymentvalue2"},"customer_id": "cust_KhOZydVZbcThjW","recurring": 1,"card": {"name": "Gaurav Kumar","number": "4718609108204366","cvv": "092","expiry_month": "11","expiry_year": "30"},"authentication": {"authentication_channel": "browser"},"browser": {"java_enabled": false,"javascript_enabled": false,"timezone_offset": 11,"color_depth": 23,"screen_width": 23,"screen_height": 100},"ip": "105.107.107.100","referer": "https://merchansite.com/example/paybill"}}'
amount
mandatory
integer Amount in currency subunits. For cards, the amount should be 100 (₹1).
currency
mandatory
string The 3-letter ISO currency code for the payment. We support INR only.
customer_id
mandatory
string The unique identifier of the customer to be charged. For example, cust_D0cs04OIpPPU1F.
notes
optional
json object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each.
token
mandatory
json object Details related to the authorisation such as max amount and bank account information.
max_amount
optional
integer The maximum amount in paise a customer can be charged in a transaction. The value can range from 500 to 100000000. The default value is 9999900 (₹99,999).
expire_at
optional
integer The Unix timestamp to indicate till when you can use the token (authorisation on the payment method) to charge the customer upcoming payments.
frequency
mandatory
string The frequency at which you can charge your customer. Currently supported frequencies are as_presented and monthly. The support for other frequencies is expected to be live soon.
payment
mandatory
json object Details related to the payment.
amount
mandatory
integer Payment amount in the smallest currency unit. For example, paise for INR.
mandatory
string Customer's email address for payment notifications and receipts.
contact
mandatory
string Customer's phone number.
method
mandatory
string Payment method used for the payment. Here, it is card.
notes
optional
json object Key-value pairs for storing custom metadata related to the payment.
customer_id
optional
string Unique identifier of the customer.
recurring
optional
integer Indicates whether the payment is of recurring nature. Possible values are:
1: Recurring payment.0: One-time payment.
card
conditional
json object Card details object (required when method is card).
name
mandatory
string Cardholder's name as printed on the card.
number
mandatory
string The card number.
cvv
mandatory
string 3-digit number printed at the back of the card.
expiry_month
mandatory
string Card expiry month in MM format.
expiry_year
mandatory
string Card expiry year in YY format.
authentication
optional
json object Authentication parameters for enhanced security.
authentication_channel
optional
string Channel used for authentication. Possible values are browser and app.
browser
mandatory
json object Information regarding the customer's browser. This parameter need not be passed when authentication_channel=app.
java_enabled
boolean Indicates whether the customer's browser supports Java. Obtained from the navigator HTML DOM object. Possible values:
true: Customer's browser supports Java.false: Customer's browser does not support Java.
javascript_enabled
boolean Indicates whether the customer's browser can execute JavaScript. Obtained from the navigator HTML DOM object. Possible values:
true: Customer's browser can execute JavaScript.false: Customer's browser cannot execute JavaScript.
timezone_offset
integer Time difference between UTC time and the cardholder's browser local time. Obtained from the getTimezoneOffset() method applied to the Date object.
screen_width
integer Total width of the payer's screen in pixels. Obtained from the screen.width HTML DOM property.
screen_height
integer Obtained from the navigator HTML DOM object.
color_depth
integer Obtained from the payer's browser using the screen.colorDepth HTML DOM property.
ip
mandatory
string Client's browser IP address. For example, 117.217.74.98.
referer
mandatory
string Value of referer header passed by the client's browser. For example, .
id
string A unique identifier of the order created. For example order_1Aa00000000001.
entity
string The entity that has been created. Here it is order.
attempts
integer The number of payment attempts, successful and failed, that have been made against this order. For example, 1.
amount
integer Amount in currency subunits. For cards, the amount should be 100 (₹1).
amount_paid
integer The amount that has been paid.
amount_due
integer The amount that is yet to be paid.
currency
string The 3-letter ISO currency code for the payment. Currently, we only support INR.
receipt
string A user-entered unique identifier of the order. For example, rcptid #1. You should map this parameter to the order_id sent by Razorpay.
status
string The status of the order.
notes
json object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.
created_at
integer The Unix timestamp at which the order was created.
method
string The authorisation method. Here, it is card.
customer_id
string The unique identifier of the customer. For example, cust_4xbQrmEoA5WJ01.
offer_id
string Unique identifier of the offer.
payment_workflow
json object Details of the payment workflow.
razorpay_payment_id
string Unique identifier of the payment. Present for all responses.
next
array A list of action objects available to continue the payment process. Present when the payment requires further processing.
action
string An indication of the next step available for payment processing. Possible values:
otp_generate: Use this URL to allow the customer to generate the OTP.redirect: Use this URL to redirect the customer to payment page to complete the payment.
url
string URL to be used for the action indicated.
You can fetch the recurring token using the Fetch Payments API or by subscribing to the payment.authorized and token.confirmed webhook events. Use this recurring token to initiate subsequent debits.
Use this endpoint to fetch the payment details with the payment_id generated in the response of the previous step.
curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET]-X GET https://api.razorpay.com/v1/payments/pay_QwuuwwlU9Ggkwp
id
mandatory
string Unique identifier of the payment to be retrieved.
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 ₹1.00 enter 100.
currency
string The currency in which the payment is made.
status
string The status of the payment. Possible values:
createdauthorizedcapturedrefundedfailed
method
string The payment method used for making the payment. Here, it is card.
order_id
string Order id, if provided.
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:
nullpartialfull
amount_refunded
integer The amount refunded in currency subunits. For example, if amount_refunded = 100, it is equal to ₹1.00.
captured
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.
contact
string Customer contact number used for the payment.
fee
integer Fee (including GST) charged by Razorpay.
tax
integer GST charged for the payment.
error_code
string Error that occurred during payment. For example, BAD_REQUEST_ERROR.
error_description
string Description of the error which 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, at which the payment was created.
card_id
string The unique identifier of the card used by the customer to make the payment.
customer_id
string Unique identifier of the customer created in step 1.
token_id
string Unique identifier of the token.
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
json object A dynamic array consisting of a unique reference numbers.
rrn
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.
auth_code
string Authorisation code from the issuing bank indicating transaction approval or decline status. Used to verify that the transaction was authorised by the bank.
arn
string A unique reference number provided by the banking partner.
The token_id is also present in the payment.authorized webhook event payload.
Check the token activation status from the token.confirmed webhook event payload.
{"payload": {"entity": "event","account_id": "acc_4bnk7yysqr5Wx5","event": "token.confirmed","contains": ["token"],"payload": {"token": {"entity": {"id": "token_Qno09XPByBrRUI","entity": "token","token": "B50RIktG4yQUIz","bank": null,"wallet": null,"method": "card","card": {"entity": "card","name": "","iin": "999999","last4": "2002","network": "Visa","type": "credit","issuer": "ICIC","international": false,"emi": true,"sub_type": "consumer","token_iin": "482028343","expiry_month": "01","expiry_year": "2099","flows": {"otp": true,"recurring": true},"cobranding_partner": null},"recurring": true,"recurring_details": {"status": "confirmed","failure_reason": null},"auth_type": null,"mrn": null,"used_at": 1751373404,"created_at": 1751373404,"expired_at": 1896114599,"status": "active","notes": [],"error_description": null,"source": "business","entity_id": null,"dcc_enabled": false,"max_amount": 87500,"error_code": null,"compliant_with_tokenisation_guidelines": true}}},"created_at": 1751373407}}
Subscribe to the token.service_provider_token.activated webhook event to automatically retrieve saved card tokens. These tokens streamline the card addition process across sub-merchant accounts and reduce user friction. When triggered, this webhook notifies the parent account, which can then cascade the information to all associated child accounts.
- Partner has to retrieve the card network information to assess if it is a Visa, Mastercard or Rupay card.
- If the card is of Visa or Mastercard network, then partner can enable the composite API using the saved card token id received in this webhook,
- If the network is Rupay, the partner should follow the normal Composite Order API flow shared above in Step 2 as Rupay does not support mandate registration using saved card token.
{"entity": "event","account_id": "acc_4bnk7yysqr5Wx5","event": "token.service_provider_token.activated","contains": ["service_provider_token","token"],"payload": {"service_provider_token": {"entity": {"id": "spt_1234abcd","entity": "service_provider_token","provider_type": "network","provider_name": "Visa","interoperable": true,"status": "active","provider_data": {"token_reference_number": "sas7wqaoidasdfssdjjk","card_reference_number": "8324ssdas7wqaoidassdjjk","token_iin": "453335","token_expiry_month": 12,"token_expiry_year": 2028}},"token": {"entity": {"id": "token_4lsdksD31GaZ09","entity": "token","customer_id": "cust_1Aa00000000001","method": "card","card": {"last4": "3335","network": "Visa","type": "debit","issuer": "HDFC","international": false,"emi": true,"sub_type": "consumer","token_iin": "453335"},"compliant_with_tokenisation_guidelines": true,"service_provider_tokens": [{"id": "spt_1234abcd","entity": "service_provider_token","provider_type": "network","provider_name": "Visa","interoperable": true,"status": "active","provider_data": {"token_reference_number": "sas7wqaoidasdfssdjjk","card_reference_number": "8324ssdas7wqaoidassdjjk","token_iin": "453335","token_expiry_month": 12,"token_expiry_year": 2028}},{"id": "spt_1234abcd","entity": "service_provider_token","provider_type": "aggregator","provider_name": "razorpay","interoperable": false,"status": "activated","provider_data": {"expired_at": 1748716199}}],"expired_at": 1748716199,"status": "active","notes": []}}}}}
Use the Composite Order API to create a registration payment using saved card token.
Watch Out!
Rupay does not support registration payment using a saved card token.
curl -X POST https://api.razorpay.com/v1/orders \-u [YOUR_PARTNER_KEY_ID]:[YOUR_PARTNER_KEY_SECRET] \-H "X-Razorpay-Account: acc_KBrJAIEqre5ucn" \-H "Content-Type: application/json" \-d'{"amount": 100,"currency": "INR","notes": {"key1": "value3","key2": "value2"},"payment": {"amount": 100,"email": "gaurav.kumar@example.com","contact": "9876543210","method": "card","notes": {"key1": "value3","key2": "value2"},"customer_id": "cust_P6BCqqddZzNkJa","recurring": 1,"token": "token_QqsJMAhHRmIPio","save": 1,"authentication": {"authentication_channel": "browser"},"browser": {"java_enabled": false,"javascript_enabled": false,"timezone_offset": 11,"color_depth": 23,"screen_width": 23,"screen_height": 100},"ip": "105.106.107.108","referer": "https://merchansite.com/example/paybill"}}'
{"amount": 100,"amount_due": 100,"amount_paid": 0,"attempts": 1,"created_at": 1752043784,"currency": "INR","entity": "order","id": "order_QqsMZ12p7MytBA","notes": {"key1": "value3","key2": "value2"},"offer_id": null,"payment_workflow": {"next": [{"action": "redirect","url": "https://api.razorpay.com/v1/payments/pay_FVmAstJWfsD3SO/authorize"},{"action": "otp_generate","url": "https://api.razorpay.com/v1/payments/pay_FVmAstJWfsD3SO/otp_generate?track_id=FVmAtLUe9XZSGM&key_id=<YOUR_KEY_ID>"}],"razorpay_payment_id": "pay_QqsMa9GhrUxvtx"},"receipt": null,"status": "attempted"}
amount
mandatory
integer Amount in currency subunits. For cards, the amount should be 100 (₹1).
currency
mandatory
string The 3-letter ISO currency code for the payment. We support INR only.
notes
optional
json object Key-value object used for passing tracking info. Refer to
payment
mandatory
json object Details related to the payment.
amount
mandatory
integer Payment amount in the smallest currency unit. For example, paise for INR.
mandatory
string Customer's email address for payment notifications and receipts.
contact
mandatory
string Customer's phone number.
method
mandatory
string Payment method used for the payment. Here, it is card.
notes
optional
json object Key-value pairs for storing custom metadata related to the payment.
customer_id
optional
string Unique identifier of the customer.
recurring
optional
integer Indicates whether the payment is of recurring nature. Possible values are:
1: Recurring payment.0: One-time payment.
token_id
mandatory
string Unique identifier of the token.
save
mandatory
integer Determines whether to save the card details. Possible values:
1: Save the card details.0: Do not save the card details.
authentication
optional
json object Authentication parameters for enhanced security.
authentication_channel
optional
string Channel used for authentication. Possible values: browser, mobile_app, api.
browser
mandatory
json object Information regarding the customer's browser. This parameter need not be passed when authentication_channel=app.
java_enabled
boolean Indicates whether the customer's browser supports Java. Obtained from the navigator HTML DOM object. Possible values:
true: Customer's browser supports Java.false: Customer's browser does not support Java.
javascript_enabled
boolean Indicates whether the customer's browser can execute JavaScript. Obtained from the navigator HTML DOM object. Possible values:
true: Customer's browser can execute JavaScript.false: Customer's browser cannot execute JavaScript.
timezone_offset
integer Time difference between UTC time and the cardholder's browser local time. Obtained from the getTimezoneOffset() method applied to the Date object.
screen_width
integer Total width of the payer's screen in pixels. Obtained from the screen.width HTML DOM property.
screen_height
integer Obtained from the navigator HTML DOM object.
color_depth
integer Obtained from the payer's browser using the screen.colorDepth HTML DOM property.
ip
mandatory
string Client's browser IP address. For example, 117.217.74.98.
referer
mandatory
string Value of referer header passed by the client's browser. For example, .
id
string A unique identifier of the order created. For example order_1Aa00000000001.
entity
string The entity that has been created. Here it is order.
amount
integer Amount in currency subunits. For cards, the amount should be 100 (₹1).
amount_paid
integer The amount that has been paid.
amount_due
integer The amount that is yet to be paid.
currency
string The 3-letter ISO currency code for the payment. We support INR only.
receipt
string A user-entered unique identifier of the order. For example, rcptid #1. You should map this parameter to the order_id sent by Razorpay.
status
string The status of the order.
notes
json object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.
created_at
integer The Unix timestamp at which the order was created.
method
string The authorisation method. Here, it is card.
customer_id
string The unique identifier of the customer. For example, cust_4xbQrmEoA5WJ01.
payment_workflow
json object Details of the payment workflow.
razorpay_payment_id
string Unique identifier of the payment. Present for all responses.
next
array A list of action objects available to continue the payment process. Present when the payment requires further processing.
action
string An indication of the next step available for payment processing. Possible values:
otp_generate: Use this URL to allow the customer to generate the OTP.redirect: Use this URL to redirect the customer to payment page to complete the payment.
url
string URL to be used for the action indicated.
error
json object The error object.
code
string The type of error. Here, it is BAD_REQUEST_ERROR.
description
string Descriptive text about the error.
source
string The point of failure in the specific operation (payment in this case).
step
string The stage where the transaction failure occurred.
reason
string The exact error reason.
metadata
json object Contains additional information about the request.
Submit OTP/Complete Redirection Flow for Successful Payment
Ensure the payment is completed successfully via OTP submission or redirection to the bank's OTP page. Razorpay supports both Native OTP (via Composite API response) and Non-Native OTP (bank's OTP page).
To create subsequent payments, you need to
- Create an Order using Orders API.
- Create a Payment using Recurring Payments API.
Create an Order using the Orders API. Pass the customer_id in the request body along with the other parameters.
curl -X POST https://api.razorpay.com/v1/orders \-u [YOUR_PARTNER_KEY_ID]:[YOUR_PARTNER_KEY_SECRET] \-H "X-Razorpay-Account: acc_KBrJAIEqre5ucn" \-H "Content-Type: application/json" \-d '{"amount": 100,"currency": "INR","notes": {"key1": "value3","key2": "value2"},"customer_id": "cust_QqZY02dRJtOUEi"}'
amount
mandatory
integer Payment amount in the smallest currency sub-unit.
currency
mandatory
string ISO code for the currency in which you want to accept the payment.
receipt
string Receipt number that corresponds to this order, set for your internal reference. Can have a maximum length of 40 characters and has to be unique.
notes
json object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.
customer_id
mandatory
string Unique identifier of the customer created in step 1.
id
string The unique identifier of the order.
amount
integer The amount for which the order was created, in currency subunits. For example, for an amount of ₹295.00, enter 29500.
entity
string Name of the entity. Here, it is order.
amount_paid
integer The amount paid against the order.
amount_due
integer The amount pending against the order.
currency
string The 3-digit ISO code for the currency in which you want to accept the payment.
receipt
string Receipt number that corresponds to this order.
status
string The status of the order. Possible values:
created: When you create an order it is in the created state. It stays in this state till a payment is attempted on it.attempted: An order moves from created to attempted state when a payment is first attempted on it. It remains in the attempted state till one payment associated with that order is captured.paid: After the successful capture of the payment, the order moves to the paid state. No further payment requests are permitted once the order moves to the paid state. The order stays in the paid state even if the payment associated with the order is refunded.
attempts
integer The number of payment attempts, successful and failed, that have been made against this order.
notes
json object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each.
created_at
integer Indicates the Unix timestamp when this order was created.
Create a Payment using the Recurring Payments API. Use the recurring token fetched in step 3.
curl -X POST https://api.razorpay.com/v1/payments/create/recurring \-u [YOUR_PARTNER_KEY_ID]:[YOUR_PARTNER_KEY_SECRET] \-H "X-Razorpay-Account: acc_KBrJAIEqre5ucn" \-H "Content-Type: application/json" \-d '{"email": "gaurav.kumar@example.com","contact": "9876543210","amount": 100,"currency": "INR","order_id": "order_QrlHEejkEUxseS","customer_id": "cust_QqZY02dRJtOUEi","token": "token_QqcPbYVLtQdbKh","recurring": "1","description": "Creating recurring payment for Gaurav Kumar","notes": {"note_key 1": "Beam me up Scotty","note_key 2": "Tea. Earl Gray. Hot."}}'
mandatory
string The customer's email address.
contact
mandatory
string The customer's phone number.
amount
mandatory
integer The payment amount in currency subunits.
currency
mandatory
string The 3-digit ISO code for the currency in which you want to accept the payment.
order_id
mandatory
string Unique identifier of the order created in the previous step.
customer_id
mandatory
string Unique identifier of the customer created in step 1.
token
mandatory
string Unique identifier of the token.
recurring
optional
integer Indicates whether the payment is of recurring nature. Possible values are:
1: Recurring payment.0: One-time payment.
description
string Description of the payment, if any.
notes
json object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each.
Subscribe to the payment.captured webhook event to confirm the payment. You may also subscribe to the token.rejected webhook to get notified in case the token is rejected.
Given below is the webhook payload for the payment.captured event.
{"account_id": "acc_E7tq4f47sTz3Aw","contains": ["payment"],"created_at": 1751876065,"entity": "event","event": "payment.captured","payload": {"payment": {"entity": {"acquirer_data": {"auth_code": "000132","rrn": "518808059702"},"amount": 100,"amount_refunded": 0,"amount_transferred": 0,"bank": null,"base_amount": 100,"captured": true,"card": {"emi": false,"entity": "card","id": "card_Qq6j0s9wJMtcZa","iin": "999999","international": false,"issuer": "HSBC","last4": "8825","name": "","network": "Visa","sub_type": "consumer","type": "credit"},"card_id": "card_Qq6j0s9wJMtcZa","contact": "+919876543210","created_at": 1751876022,"currency": "INR","description": null,"email": "gaurav.kumar@example.com","entity": "payment","error_code": null,"error_description": null,"error_reason": null,"error_source": null,"error_step": null,"fee": 2,"id": "pay_Qq6j0s9wJMtcZa","international": false,"invoice_id": null,"method": "card","notes": {"key1": "OTP - Using Partner Key ","key2": "value2"},"order_id": "order_Qq6j0iO7BmuXbq","refund_status": null,"status": "captured","tax": 0,"token_id": "token_Qq6jgr6xmNQWs0","vpa": null,"wallet": null}}}}
Given below is the webhook payload for the token.rejected event.
{"entity": "event","account_id": "acc_QAacr3KpeJigFb","event": "token.rejected","contains": ["token"],"payload": {"token": {"entity": {"id": "token_QrGgCeVyxl4v15","entity": "token","token": "GBogvBJ1iOAnxk","bank": null,"wallet": null,"method": "card","card": {"entity": "card","name": "","last4": "5513","network": "Visa","type": "credit","issuer": "INDB","international": false,"emi": true,"sub_type": "consumer","token_iin": "462003186","expiry_month": "01","expiry_year": "2099","flows": {"otp": true,"recurring": true,"iframe": false},"cobranding_partner": null},"recurring": true,"recurring_details": {"status": "rejected","failure_reason": "Failed to tokenised the card"},"auth_type": null,"mrn": null,"used_at": 1752129420,"created_at": 1752129418,"customer": {"id": "cust_QrGgCAqdYytSZI","entity": "customer","name": null,"email": "gaurav.kumar@example.com","contact": "CONTACT_MASKED","gstin": null,"notes": [],"created_at": 1752129418},"expired_at": 1853951399,"status": null,"notes": [],"error_description": null,"source": "business","entity_id": "QrGeNBOZIZdd0W","dcc_enabled": false,"max_amount": null,"error_code": null,"compliant_with_tokenisation_guidelines": false}}},"created_at": 1752129649}
Was this page helpful?
ON THIS PAGE