Creating Transfers and Reversals
To start splitting payments across your connected accounts, you need to add connected accounts and create transfers using the Zoho Payments API. Once transfers are created, you can also reverse them if needed.
Insight: To test the Split feature before going live, use the Zoho Payments Sandbox environment. For setup instructions, refer to the Sandbox developer doc.
Create Connected Accounts
A connected account represents a seller, vendor, or service provider on your platform who will receive a portion of the split payment. Before you can create transfers, the connected account must be added and verified. To create a connected account:
- Go to Split in the Zoho Payments app and select Connected Accounts.
- Click + Add Connected Account and enter the required details (account name, business PAN, email address, business type, and bank account details).
- Once created, the account enters a Pending status while the Zoho Payments team performs background verifications.
- After the account is verified and marked as Active, transfers and payouts are enabled for the account.
Note: Transfers cannot be processed until the connected account is verified and the transfer_status is enabled. You can check the account status using the List Connected Accounts API.
Create Transfers
A transfer moves funds from your account to a connected account as part of a payment split. You can create transfers at the time of payment or after a payment has been processed using the Create Transfer API.
Fetch Connected Accounts
Before creating transfers, fetch your active connected accounts using the List Connected Accounts API to retrieve the connected_account_id for each account you wish to transfer to.
{
"code": 0,
"message": "success",
"connected_accounts": [
{
"connected_account_id": "933000000702001",
"account_name": "Charles",
"email_id": "abcd@gmail.com",
"under_writing_status": "pending",
"transfer_status": "disabled",
"created_by": "abcd@gmail.com",
"last_modified_by": "abcd@gmail.com",
"created_time": "1770014182355",
"last_modified_time": "1770014182355"
},
{
"connected_account_id": "933000000645017",
"account_name": "Zylker",
"email_id": "charles@zylker.com",
"under_writing_status": "pending",
"transfer_status": "disabled",
"created_by": "charles@zylker.com",
"last_modified_by": "charles@zylker.com",
"created_time": "1763027675472",
"last_modified_time": "1763027675472"
}
],
"page_context": {
"page": 1,
"per_page": 200,
"total": 2,
"total_pages": 1,
"has_more_page": false,
"select_columns": [],
"group_by": "",
"sort_column": "created_time",
"sort_order": "D"
}
}
Once you have the connected_account_id values, create transfers using one of the following approaches.
Create Transfers via Payment Session
To split a payment before it is completed, include the transfer_details array in the Create Payment Session API request. The transfers are defined upfront and processed automatically once the payment is successful. Provide the connected_account_id and the corresponding amount for each transfer.
-
Call the Create Payment Session API from your server with the
transfer_detailsincluded in the request body. -
Verify the transfers once the payment is received. The transfers are processed automatically and can be retrieved using the Transfer List API.
{
"amount": 100.5,
"currency": "INR",
"expires_in": 900,
"transfer_details": [
{
"connected_account_id": 23137556,
"amount": 10
},
{
"connected_account_id": 23137556,
"amount": 20.5
}
]
}
Note: The sum of all transfer amounts must not exceed the total payment amount.
Create Transfers After Payment
To split a payment that has already been processed, use the Create Transfer API. Provide the payment_id and the transfer_split details in the request body.
- Call the Create Transfer API with the
payment_idof the completed payment. - Specify the
transfer_splitarray with the connected accounts and amounts.
{
"payment_id": 6485000000045015,
"transfer_split": [
{
"connected_account_id": 6485000000021081,
"amount": 20,
"description": "Testing"
},
{
"connected_account_id": 6485000000031001,
"amount": 20,
"description": "Testing"
}
]
}
Insight: To split a payment across multiple connected accounts, create separate transfers for the same payment_id with the respective connected_account_id and amount for each account.
Reverse Transfers
A transfer reversal credits the transfer amount back to your account and debits the connected account’s balance. You can reverse a transfer partially or in full. Transfers can be reversed using the Transfer Reversal API or as part of a refund from your Zoho Payments app.
Warning: A transfer reversal cannot be undone. Review the reversal amount carefully before confirming.
Reverse Transfers via API
Use the Reverse Transfer API to reverse a transfer programmatically. Provide the transfer_id, reversal_amount, and description in the request body.
{
"transfer_id": 6485000000046007,
"reversal_amount": 100,
"description": "Reverse 100"
}
The request body supports the following fields:
| Parameter | Type | Required | Description |
|---|---|---|---|
transfer_id |
Number | Yes | The unique identifier of the transfer to reverse. |
reversal_amount |
Number | Yes | The amount to reverse from the transfer. |
description |
String | No | A brief description of the reversal. |
Note: You can reverse a transfer partially or in full. The remaining amount, if any, stays with the connected account.
Reverse Transfers with a Refund
When you refund a payment, you can simultaneously reverse all transfers linked to it. To do this from the Zoho Payments app:
- Go to the Payments module and select the payment you want to refund.
- Click Refund and check the Reverse all transfers option to reverse all transfers linked to the payment along with the refund.
- Click Confirm.
This will reverse all transfers associated with the payment. Individual transfer amounts will be debited from the respective connected accounts and credited back to your account.
Insight: Always verify the transfer status after creating or reversing a transfer. Use the Transfer List API to confirm that transfers have been processed as expected.