Transfers🔗
You can transfer funds to your linked accounts using the Razorpay Route Transfer APIs. Know more about transfers and related fees.
Transfer Requirements🔗
Below are the requirements to initiate a transfer:
- Your account must have sufficient funds to process the transfer to the linked account. The transfer will fail in case of insufficient funds.
- You can only transfer the
capturedpayments. - You can create more than one transfer on a
payment_id. However, the total transfer amount should not exceed the captured payment amount. - You cannot request a transfer on payment once a refund has been initiated.
Types of Transfers🔗
You can transfer funds to linked accounts using one of the following methods:
-
Transfer via Orders
You can set up a transfer at the time of order creation.

Watch Out!
If a Transfer via Order initiated by you fails, we will retry this transfer on consecutive days. There will be maximum of 3 retries. -
Transfer via Payments
You can initiate a transfer once the payment has been received from the customer.

-
Direct Transfer
You can initiate a transfer directly from existing funds in your Razorpay account.

Watch Out!
Direct Transfers is an on-demand feature. Please raise a request with our Support team to get this feature activated on your Razorpay account.
Transfer Entity🔗
Route transfers can be performed only on captured payments. You can capture payments from the Razorpay Dashboard or using the Payment Capture API.
The attributes of the transfer entity are listed below:
id-
stringUnique identifier of the transfer. entity-
stringThe name of the entity. Here, it istransfer. transfer_status-
stringThe status of the transfer. Possible values are:createdpendingprocessedfailedreversedpartially_reversed
settlement_status-
stringThe status of the settlement. Possible values are:pendingon_holdsettled
source-
stringUnique identifier of the transfer source. The source can be apaymentor anorder. recipient-
stringUnique identifier of the transfer destination, that is, the linked account. amount-
integerThe amount to be transferred to the linked account, in paise. For example, for an amount of ₹200.35, the value of this field should be 20035. currency-
stringISO currency code. We support route transfers only inINR. amount_reversed-
integerAmount reversed from this transfer for refunds. notes-
json objectSet of key-value pairs that can be associated with an entity. These pairs can be useful for storing additional information about the entity. A maximum of 15 key-value pairs, each of 256 characters (maximum), are supported. For example,"region": "south", "city": "Bangalore". error-
Provides error details that may occur during transfers.
codestringType of the error.descriptionstringError description.fieldstringName of the parameter in the API request that caused the error.sourcestringThe point of failure in the specific operation. For example, customer, business and so on.stepstringThe stage where the transaction failure occurred. Stages can be different depending on the payment method used to make the transaction.reasonstringThe exact error reason. It can be handled programmatically.
linked_account_notes-
arrayList of keys from thenotesobject which needs to be shown to linked accounts on their Dashboard. For example,"region", "city". Only the keys will be shown, not values. on_hold-
booleanIndicates whether the account settlement for transfer is on hold. Possible values:1- Puts the settlement on hold.0- Releases the settlement.
on_hold_until-
integerTimestamp, in Unix format, indicates until when the settlement of the transfer must be put on hold. If no value is passed, the settlement is put on hold indefinitely. recipient_settlement_id-
stringUnique identifier of the settlement. created_at-
integerTimestamp, in Unix, at which the record was created.
Transfer Status🔗
The following table lists transfer statuses and their description:
Status | Description |
|---|---|
| As soon as the transfer is initiated, it moves to the |
| The transfer will be in the |
| Once the transfer is processed, the status will change from |
| If the transfer processing fails because of errors like insufficient balance, the transfer status will change to the |
| If the complete reversal is done for the transfer, then it will be marked as |
| If the partial reversal is done on transfer, it will be marked as |
Settlement Status🔗
The following table lists settlement statuses and their description:
Status | Description |
|---|---|
| This status indicates that the transfer is processed and the settlement is pending. You can create the reversal if required. |
| If you have used the |
| When the transfer is settled to the Linked Account. |
Create Transfers from Orders🔗
You can set up a transfer of funds when creating an order using the Orders API. This can be done by passing the transfers parameters as part of the Order API request body.
Request Parameters🔗
amountmandatory-
integerThe transaction amount, in paise. For example, for an amount of ₹299.35, the value of this field should be 29935. currencymandatory-
stringThe currency in which the transaction should be made. We support onlyINRfor Route transactions. receiptoptional-
stringUnique identifier that you can use for internal reference. transfers-
Details regarding the transfer.
accountmandatorystringUnique identifier of the linked account to which the transfer is to be made.amountmandatoryintegerThe amount to be transferred to the linked account. For example, for an amount of ₹200.35, the value of this field should be 20035. This amount cannot exceed the order amount.currencymandatorystringThe currency in which the transfer should be made. We support onlyINRfor Route transactions.notesjson objectSet of key-value pairs that can be associated with an entity. These pairs can be useful for storing additional information about the entity. A maximum of 15 key-value pairs, each of 256 characters (maximum), are supported. For example,"region": "south", "city": "Bangalore".linked_account_notesarrayList of keys from thenotesobject which needs to be shown to linked accounts on their Dashboard. For example,"region", "city". Only the keys will be shown, not values.on_holdmandatorybooleanIndicates whether the account settlement for transfer is on hold. Possible values:1- Puts the settlement on hold.0- Releases the settlement.
on_hold_untiloptionalintegerTimestamp, in Unix format, that indicates until when the settlement of the transfer must be put on hold. If no value is passed, the settlement is put on hold indefinitely.
Response Parameters🔗
id-
stringUnique identifier of the Order created. entity-
stringThe name of the entity. Here, it isorder. amount-
integerThe Order amount, in paise. For example, for an amount of ₹299.35, the value of this field should be 29935. amount_paid-
integerThe amount paid against the Order. amount_due-
integerThe amount pending against the Order. currency-
stringThe currency in which the order should be created. We support onlyINRfor Route transactions. receipt-
stringUnique identifier that you can use for internal reference. status-
stringThe status of the Order. Below are the possible values:- created
- attempted
- paid
notes-
json objectSet of key-value pairs that can be associated with an entity. These pairs can be useful for storing additional information about the entity. A maximum of 15 key-value pairs, each of 256 characters (maximum), are supported. created_at-
integerTimestamp in Unix. This indicates the time of the order created. transfers-
Details regarding the transfer.
id-
stringUnique identifier of the transfer. recipient-
stringUnique identifier of the linked account to which the transfer is to be made. transfer_status-
stringThe status of the transfer. Possible values are:createdpendingprocessedfailedreversedpartially_reversed
settlement_status-
stringThe status of the settlement. Possible values are:pendingon_holdsettled
amount-
integerThe amount to be transferred to the linked account, in paise. For example, for an amount of ₹200.35, the value of this field should be 20035.This amount cannot exceed the order amount. currency-
stringThe currency in which the transfer should be made. We support onlyINRfor Route transactions. notes-
json objectSet of key-value pairs that can be associated with an entity. These pairs can be useful for storing additional information about the entity. A maximum of 15 key-value pairs, each of 256 characters (maximum), are supported. For example,"region": "south", "city": "Bangalore". linked_account_notes-
arrayList of keys from thenotesobject which needs to be shown to linked accounts on their Dashboard. For example,"region", "city". Only the keys will be shown, not values. on_hold-
booleanIndicates whether the account settlement for transfer is on hold. Possible values:1- Puts the settlement on hold.0- Releases the settlement.
on_hold_until-
integerTimestamp, in Unix, that indicates until when the settlement of the transfer must be put on hold. If no value is passed, the settlement is put on hold indefinitely. error-
Provides error details that may occur during transfers.
codestringType of the error.descriptionstringError description.fieldstringName of the parameter in the API request that caused the error.sourcestringThe point of failure in the specific operation. For example, customer, business and so on.stepstringThe stage where the transaction failure occurred. Stages can be different depending on the payment method used to make the transaction.reasonstringThe exact error reason. It can be handled programmatically.
Watch Out!
- You cannot create transfers on orders which has the
partial_paymentparameter enabled. Ensure that this parameter is set to0. - You cannot create transfers on orders for international currencies. Currently, this feature only supports orders created using INR.
Create Transfers from Payments🔗
You can create and capture payments in the regular payments flow using the Razorpay Checkout and Payment APIs.
To disburse payments using Razorpay Route, there is an additional step in the payment flow called transfers which is described below:
- The customer pays the amount via normal payment flow.
- Once the payment is
captured, you can initiate a transfer to linked accounts with a transfer API call. You have to specify the details of theaccount_idandamount.
The following endpoint transfers a captured payment to one or more linked accounts using account_id. A response will be generated on a successful transfer with a collection of transfer entities created for the payment.
In the sample request given, transfers to multiple linked accounts are specified. The payments transferred to the linked accounts will be settled to their respective bank accounts as per the pre-defined settlement_period.
Path Parameter🔗
idmandatorystringUnique identifier of the payment on which the transfer must be created.
Request Parameters🔗
transfers-
Details regarding the transfer.
accountmandatorystringUnique identifier of the linked account to which the transfer is to be made.amountmandatoryintegerThe amount to be transferred to the linked account. For example, for an amount of ₹200.35, the value of this field should be 20035.currencymandatorystringThe currency in which the transfer should be made. We support onlyINRfor Route transactions.notesjson objectSet of key-value pairs that can be associated with an entity. These pairs can be useful for storing additional information about the entity. A maximum of 15 key-value pairs, each of 256 characters (maximum), are supported. For example,"region": "south", "city": "Bangalore".linked_account_notesarrayList of keys from thenotesobject which needs to be shown to linked accounts on their Dashboard. For example,"region", "city". Only the keys will be shown, not values.on_holdbooleanIndicates whether the account settlement for transfer is on hold. Possible values:1- Puts the settlement on hold.0- Releases the settlement.
on_hold_untilintegerTimestamp, in Unix, that indicates until when the settlement of the transfer must be put on hold. If no value is passed, the settlement is put on hold indefinitely.
The response parameters are same as the transfer entity parameters.
Direct Transfers🔗
Watch Out!
Direct Transfers is an on-demand feature. Please raise a request with our Support team to get this feature activated on your Razorpay account.
Apart from transferring payments received from customers, you can also transfer funds to your linked accounts directly from your account balance using the Direct Transfers API.
This API creates a direct transfer of funds from your account to a linked account.
On successful creation, the API responds with the created transfer entity.
Request Parameters🔗
accountmandatorystringUnique identifier of the linked account to which the transfer must be made.amountmandatoryintegerThe amount (in paise) to be transferred to the linked account. For example, for an amount of ₹200.35, the value of this field should be 20035.currencymandatorystringThe currency used in the transaction. We support onlyINRfor Route transactions.notesoptionaljson objectSet of key-value pairs that can be associated with an entity. These pairs can be useful for storing additional information about the entity. A maximum of 15 key-value pairs, each of 256 characters (maximum), are supported.