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
captured
payments. - 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
-
string
Unique identifier of the transfer. entity
-
string
The name of the entity. Here, it istransfer
. transfer_status
-
string
The status of the transfer. Possible values are:created
pending
processed
failed
reversed
partially_reversed
settlement_status
-
string
The status of the settlement. Possible values are:pending
on_hold
settled
source
-
string
Unique identifier of the transfer source. The source can be apayment
or anorder
. recipient
-
string
Unique identifier of the transfer destination, that is, the linked account. amount
-
integer
The 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
-
string
ISO currency code. We support route transfers only inINR
. amount_reversed
-
integer
Amount reversed from this transfer for refunds. notes
-
json object
Set 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.
code
string
Type of the error.description
string
Error description.field
string
Name of the parameter in the API request that caused the error.source
string
The point of failure in the specific operation. For example, customer, business and so on.step
string
The stage where the transaction failure occurred. Stages can be different depending on the payment method used to make the transaction.reason
string
The exact error reason. It can be handled programmatically.
linked_account_notes
-
array
List of keys from thenotes
object 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
-
boolean
Indicates whether the account settlement for transfer is on hold. Possible values:1
- Puts the settlement on hold.0
- Releases the settlement.
on_hold_until
-
integer
Timestamp, 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
-
string
Unique identifier of the settlement. created_at
-
integer
Timestamp, 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🔗
amount
mandatory-
integer
The transaction amount, in paise. For example, for an amount of ₹299.35, the value of this field should be 29935. currency
mandatory-
string
The currency in which the transaction should be made. We support onlyINR
for Route transactions. receipt
optional-
string
Unique identifier that you can use for internal reference. transfers
-
Details regarding the transfer.
account
mandatorystring
Unique identifier of the linked account to which the transfer is to be made.amount
mandatoryinteger
The 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.currency
mandatorystring
The currency in which the transfer should be made. We support onlyINR
for Route transactions.notes
json object
Set 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
array
List of keys from thenotes
object 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
mandatoryboolean
Indicates whether the account settlement for transfer is on hold. Possible values:1
- Puts the settlement on hold.0
- Releases the settlement.
on_hold_until
optionalinteger
Timestamp, 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
-
string
Unique identifier of the Order created. entity
-
string
The name of the entity. Here, it isorder
. amount
-
integer
The Order amount, in paise. For example, for an amount of ₹299.35, the value of this field should be 29935. amount_paid
-
integer
The amount paid against the Order. amount_due
-
integer
The amount pending against the Order. currency
-
string
The currency in which the order should be created. We support onlyINR
for Route transactions. receipt
-
string
Unique identifier that you can use for internal reference. status
-
string
The status of the Order. Below are the possible values:- created
- attempted
- paid
notes
-
json object
Set 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
-
integer
Timestamp in Unix. This indicates the time of the order created. transfers
-
Details regarding the transfer.
id
-
string
Unique identifier of the transfer. recipient
-
string
Unique identifier of the linked account to which the transfer is to be made. transfer_status
-
string
The status of the transfer. Possible values are:created
pending
processed
failed
reversed
partially_reversed
settlement_status
-
string
The status of the settlement. Possible values are:pending
on_hold
settled
amount
-
integer
The 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
-
string
The currency in which the transfer should be made. We support onlyINR
for Route transactions. notes
-
json object
Set 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
-
array
List of keys from thenotes
object 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
-
boolean
Indicates whether the account settlement for transfer is on hold. Possible values:1
- Puts the settlement on hold.0
- Releases the settlement.
on_hold_until
-
integer
Timestamp, 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.
code
string
Type of the error.description
string
Error description.field
string
Name of the parameter in the API request that caused the error.source
string
The point of failure in the specific operation. For example, customer, business and so on.step
string
The stage where the transaction failure occurred. Stages can be different depending on the payment method used to make the transaction.reason
string
The exact error reason. It can be handled programmatically.
Watch Out!
- You cannot create transfers on orders which has the
partial_payment
parameter 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_id
andamount
.
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🔗
id
mandatorystring
Unique identifier of the payment on which the transfer must be created.
Request Parameters🔗
transfers
-
Details regarding the transfer.
account
mandatorystring
Unique identifier of the linked account to which the transfer is to be made.amount
mandatoryinteger
The amount to be transferred to the linked account. For example, for an amount of ₹200.35, the value of this field should be 20035.currency
mandatorystring
The currency in which the transfer should be made. We support onlyINR
for Route transactions.notes
json object
Set 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
array
List of keys from thenotes
object 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
boolean
Indicates whether the account settlement for transfer is on hold. Possible values:1
- Puts the settlement on hold.0
- Releases the settlement.
on_hold_until
integer
Timestamp, 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🔗
account
mandatorystring
Unique identifier of the linked account to which the transfer must be made.amount
mandatoryinteger
The 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.currency
mandatorystring
The currency used in the transaction. We support onlyINR
for Route transactions.notes
optionaljson object
Set 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.