3. Create Subsequent Payments

Create and charge subsequent payments using Razorpay APIs after the customer's selected payment method is authorised.


You should perform the following steps to create and charge your customer subsequent payments:

You have to create a new order every time you want to charge your customers. This order is different from the one created during the authorisation transaction.

The following endpoint creates an order.

POST
/orders

amount

mandatory

integer Amount in currency subunits. For cards, the minimum value is 100 (ā‚¹1.00).

currency

mandatory

string The 3-letter ISO currency code for the payment. Currently, we only support INR.

receipt

optional

string A user-entered unique identifier for the order. For example, Receipt No. 1. You should map this parameter to the order_id sent by Razorpay.

notification

object Details of the pre-debit notification. This object is optional. You should use it only if you want to control pre-debit notifications and debits. If you do not pass this object, we will automatically try to debit 25 hours after the pre-debit notification is delivered.

Watch Out!

We will not attempt any retry if the debit fails for tokens with the notification object in the created order. You should manually retry the debit attempt.

token_id

mandatory

string The token_id generated when the customer successfully completes the authorisation payment. Different payment instruments for the same customer have different token_id.

payment_after

optional

integer UNIX timestamp post which the debit is supposed to happen. Defaults to 25 hours after the pre-debit notification is delivered.

notes

optional

object Key-value pair you can use to store additional information about the entity. Maximum of 15 key-value pairs, 256 characters each. For example, "note_key": "Beam me up Scottyā€¯.

payment_capture

mandatory

boolean Determines whether the payment status should be changed to captured automatically or not. Possible values:

  • true: Payments are captured automatically.
  • false: Payments are not captured automatically. You can manually capture payments using the .

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.

amount_paid

integer The amount that has been paid.

amount_due

integer The amount that is yet to pay.

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.

status

string The status of the order.

notes

object Key-value pair you can use to store additional information about the entity. Maximum of 15 key-value pairs, 256 characters each. For example, "note_key": "Beam me up Scottyā€¯.

created_at

integer The Unix timestamp at which the order was created.

Given below is a list of possible errors you may face while creating an Order.

ErrorCauseSolution
The api key provided is invalidThis error occurs when you enter the wrong API key or secret.Make sure to enter the valid API key and secret.
The amount must be atleast INR 1.00.This error occurs when you enter an amount less than INR 1.Make sure the entered amount is atleast INR 1.
The currency should be INR when method is upiThis error occurs when you enter a currency other than INR.Make sure the currency is INR.

Once you have generated an order_id, use it with the token_id to create a payment and charge the customer. The following endpoint creates a payment to charge the customer.

POST
/payments/create/recurring

UPI Payments

  • We recommend sending a pre-debit notification to the customer 48 hours before the debit date.
  • For UPI, it may take between 24-36 hours for the subsequent payment to reflect on your Dashboard.
  • This is because of the failure of pre-debit notification and/or any retries that we attempt for the payment.
  • Do not create another subsequent payment until you get the status of the previous one.

UPI Payments

  • The subsequent payment may fail if there is late authorisation of an earlier payment.
  • For UPI, do not create subsequent payments on the last day of the cycle. This will cause the payment to fail.

email

mandatory

string The customer's email address. For example, gaurav.kumar@example.com.

contact

mandatory

integer The customer's phone number. For example, 9876543210.

currency

mandatory

string 3-letter ISO currency code for the payment. Currently, only INR is allowed.

amount

mandatory

integer The amount you want to charge your customer. This should be the same as the order amount.

order_id

mandatory

string The unique identifier of the order created. For example, order_1Aa00000000002.

customer_id

mandatory

string The unique identifier of the customer you want to charge. For example, cust_1Aa00000000002.

token

mandatory

string The token_id generated when the customer successfully completes the authorisation payment. Different payment instruments for the same customer have different token_id.

recurring

mandatory

boolean Determines whether recurring payment is enabled or not.

description

optional

string A user-entered description for the payment. For example, Creating recurring payment for Gaurav Kumar.

notes

optional

object Key-value pair you can use to store additional information about the entity. Maximum of 15 key-value pairs, 256 characters each. For example, "note_key": "Beam me up Scottyā€¯.

razorpay_payment_id

string The unique identifier of the payment that is created. For example, pay_1Aa00000000001.

razorpay_order_id

string The unique identifier of the order that is created. For example, order_1Aa00000000001.

razorpay_signature

string The signature generated by the Razorpay. For example, 9ef4dffbfd84f1318f6739a3ce19f9d85851857ae648f114332d8401e0949a3d

Given below is a list of possible errors you may face while creating a Recurring Payment.

ErrorCauseSolution
Amount exceeds maximum amount allowedThis error occurs when you enter an amount greater than the authorized maximum amount.Make sure the amount is equal to or less than the maximum amount for the particular token.
Your payment amount is different from your order amount. To pay successfully, please try using right amount.This error occurs when you enter a different amount while creating a subsequent payment.Make sure the order and the subsequent payment amounts are the same.
bank_account_invalidThis error occurs when The customer's bank account is either closed or no longer valid. The customer or bank may have closed the account.The customer should re-register the mandate.
bank_account_validation_failedThis error occurs when the bank could not validate the customer registration for debiting the customer.You can retry after some time or reach out to Razorpay.
bank_technical_errorThe destination bank was facing technical problems at the time the payment was attempted. This error usually occurs when the Core Banking System encounters a technical error while processing the payment.You can retry after some time or reach out to Razorpay.
debit_instrument_blockedThis error occurs when the bank temporarily blocks withdrawals on the customer's account.The customer should reach out to their bank to get the account unblocked.
debit_instrument_inactiveThis error occurs when the bank temporarily blocks withdrawals on the customer's account.The customer should reach out to their bank to get the account unblocked.
gateway_technical_errorThe payment failed due to a technical error at the gateway. This error usually occurs when the gateway server encounters a technical error while processing the payment.You can retry after some time or reach out to Razorpay.
input_validation_failedThe payment failed due to the wrong request or input sent in the payment request. You can also get this error while creating a payment with incorrect parameter values on the Dashboard.Rectify the validation issues and try again. Check the error description and field parameters for more information about the error. Check your integration/payment request or reach out to Razorpay. Refer to the .
insufficient_fundsThis error occurs when the customer does not have sufficient funds in the account to complete the payment.You can retry after asking the customer to add funds to their bank account.
invalid_amountThis error occurs when the amount or currency passed in the payment request is not supported or invalid. This can arise when you pass a different variable type in the amount field or pass an unsupported amount value.You can check your integration and payment request.
mandate_not_activeThis error occurs when the registered mandate is no longer active. The customer or bank could have cancelled the mandate.The customer should re-register the mandate.
payment_cancelledThis error occurs when the customer has explicitly cancelled the payment. The customer could have given a cancellation instruction to their banks.You can retry after informing the customer to remove the cancellation request.
payment_declinedDestination Bank or Gateway has declined the payment due to business or technical reasons such as terminal and pricing.You can retry after some time or reach out to Razorpay.
payment_failedThis error occurs when the destination Bank or Gateway has declined the payment due to business or technical reasons such as terminal and pricing.You can retry after some time or reach out to Razorpay.
payment_mandate_not_activeThis error occurs when the is not yet activated the registered mandate. Banks sometimes take longer to activate the mandates at their end.You can retry after some time or reach out to Razorpay.
payment_timed_outThis error occurs when the bank with the registered mandate could not debit the customer's account in time.You can retry after some time or reach out to Razorpay.
server_errorThis error occurs when there is a technical error at Razorpay's server.You can retry after some time or reach out to Razorpay.
transaction_limit_exceededThis error occurs when customers exceed their account's credit or debit limit during high-value transactions.You can retry after some time by informing the customer to update their transaction limits.
invalid_requestThis error occurs when you attempt a debit before the date mentioned in the pre-debit notification.You can only attempt a debit after the date mentioned in the notification object.
debit_attempts_exceededThis error occurs when the number of debit attempts is greater than 10.Debits can only be attempted 10 times corresponding to a pre-debit notification.
mandate_cancelledThis error occurs when the mandate is cancelled after a pre-debit notification.You cannot attempt a debit on a cancelled mandate.
mandate_pausedThis error occurs when the mandate is paused after a pre-debit notification.You cannot attempt a debit on a paused mandate.
pre_debit_notification_not_sentThis error occurs when a pre-debit notification is not sent and a debit attempt is made.Make sure to send a pre-debit notification before an attempt.
invalid_requestThis error occurs when you attempt a debit within 25 hours of a notification being delivered.You can only attempt a manual debit 25 hours after the notification is delivered.

Was this page helpful?