Add Counterparty External Bank Accounts
How do I create external bank accounts for counterparty payouts?
Overview
Create external bank accounts for counterparties to enable third-party payouts. You provide bank routing details and beneficiary information to create accounts using raw routing details.
Counterparty external bank accounts support credit operations only. You can send funds to them but cannot withdraw. The exception is an Interac e-Transfer account, which you can also use to request money from the counterparty. Requesting money from and sending money to a counterparty over Interac e-Transfer requires explicit compliance approval from Cybrid before production use.
Important Notes for Self-Transfer (US to India) Use Cases:
- When creating a counterparty for self-transfers (e.g., a US customer sending to their own Indian bank account), create the counterparty with the
customer_guidand using a customer-scoped token. This ensures the counterparty is only visible to that customer and avoids scoping errors. - The counterparty's address should use the most relevant address for the customer (often their US address, especially for NRE accounts that may not have an Indian address).
- Required fields for counterparties include:
type(must beindividual),name.first,name.lastandaddress.country_code. The address must also meet your bank's counterparty address requirements for its country, which can require fields such asaddress.city,address.streetandaddress.postal_code. - After creating and verifying the counterparty, create the external bank account using both the
customer_guidand thecounterparty_guid. - If you encounter errors such as "Counterparty not found" or "Invalid bank configuration," ensure that the counterparty was created with the correct scoping and that your bank is configured to support counterparty external bank accounts. Contact support if you need this enabled for your sandbox or production bank.
- For more details on required fields for counterparties, see the counterparty creation guide.
Payment directionCounterparty external bank accounts can only receive payments (credits), not send them (debits). Interac e-Transfer accounts are the exception: the counterparty can pay a Request for Money addressed to the account.
Feature availabilityCybrid disables this feature by default in Production. Contact Cybrid Support to enable it for your bank.
Prerequisites
Before creating a counterparty external bank account:
- Create a counterparty. See Creating a Counterparty.
- Verify the counterparty's identity. See Verifying a Counterparty.
Interac e-Transfer counterparty requirements
When creating an Interac e-Transfer external bank account:
- If you pass
counterparty_guid, do not also sendcounterparty_name,counterparty_address, orcounterparty_email_address. Use the counterparty record for the account holder's details. - Use a counterparty with plain-letter first and last names and a unique
email_address; the e-Transfer partner rejects names with digits or special characters. - In
counterparty_bank_account_details,account_identifier_type: "EMAIL"is required.PHONE_NUMBERis optional. - If the request fails with
legal_entity_incomplete_pii, recreate the counterparty with the corrected details, verify it, and then create the external bank account again.
The counterparty must have passed counterparty verification before the external bank account can be created. This is the type: counterparty identity verification described in Verifying a Counterparty, not a customer KYC or KYB verification. From API version 2026-09-01, this precondition is checked on every create. A counterparty that is not yet verified returns 400 with unverified_counterparty.
Create a counterparty external bank account
After you complete the prerequisites, create an external bank account for the counterparty using the POST /api/external_bank_accounts endpoint.
Accept-Version header requiredInclude the header
Accept-Version: 2025-10-01or later in your request. Requests without this header may result in errors about missing required fields.
Omit holder details from2026-09-01From API version
2026-09-01, do not sendcounterparty_name,counterparty_addressorcounterparty_email_addresswhen you supplycounterparty_guid. Sending any of them returns400withinvalid_parameter. The Platform creates the account with the counterparty's own verified details from when you created the counterparty. Earlier versions requirecounterparty_nameandcounterparty_addressonly whencounterparty_guidis omitted. See API Versioning.
Ownership is impliedOwnership of a counterparty account is implied to be the counterparty's, so the Platform runs no ownership check: no holder-name match, no
bank_accountidentity verification and no Persona inquiry. The account usually movesstoring→pending→completed. If the counterparty matches an existing identity that needs a compliance review, it moves toreviewingand endscompleted,failedwithcompliance_rejection, orexpired. SendAccept-Version: 2026-09-01when you poll the account, orpendingandreviewingread asstoringandexpiredasfailed. In sandbox,expected_behavioursis accepted and ignored for counterparty accounts.
The following example creates a domestic USD external bank account:
POST /api/external_bank_accounts
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN
Accept-Version: 2025-10-01
{
"name": "external_bank_account_name",
"account_kind": "raw_routing_details",
"customer_guid": "customer_guid",
"counterparty_guid": "counterparty_guid",
"asset": "USD",
"counterparty_bank_account_details": [
{
"bank_code_type": "ABA",
"bank_code": "routing_number",
"account_identifier": "account_number",
"payment_rail": "ACH"
}
]
}POST /api/external_bank_accounts
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN
Accept-Version: 2026-09-01
{
"name": "external_bank_account_name",
"account_kind": "raw_routing_details",
"customer_guid": "customer_guid",
"counterparty_guid": "counterparty_guid",
"asset": "USD",
"counterparty_bank_account_details": [
{
"bank_code_type": "ABA",
"bank_code": "routing_number",
"account_identifier": "account_number",
"payment_rail": "ACH"
}
]
}{
"guid": "external_bank_account_guid",
"name": "external_bank_account_name",
"account_kind": "raw_routing_details",
"customer_guid": "customer_guid",
"counterparty_guid": "counterparty_guid",
"asset": "USD",
"state": "completed",
"counterparty_bank_account_details": [
{
"bank_code_type": "ABA",
"bank_code": "routing_number",
"account_identifier": "account_number",
"payment_rail": "ACH"
}
]
}Interac e-Transfer accounts
From API version 2026-09-01, an Interac e-Transfer entry in counterparty_bank_account_details is addressed by an identifier rather than a bank code. Set payment_rail to ETRANSFER, set account_identifier_type to EMAIL or PHONE_NUMBER, and put the address or number in account_identifier. Do not send bank_code_type. Earlier versions keep the bank code form for this rail, which describes an EFT account at the provider rather than an addressable contact.
Restricted functionalityRequesting money from and sending money to a counterparty over Interac e-Transfer is not part of a standard remittance flow. It is reserved for specific use cases that require additional due diligence and explicit compliance approval from Cybrid. The functionality may be available in sandbox, but it is not available in production without that approval. Contact Cybrid support to discuss your use case.
Send the email and phone entries as two entries in the same counterparty_bank_account_details array. They describe one contact, so the request creates a single external bank account rather than one account per identifier.
An email identifier is always requiredAn Interac e-Transfer contact must carry an
PHONE_NUMBERentry returns400withinvalid_account_number, on every API version. APHONE_NUMBERidentifier must be a Canadian number in E.164 format; a valid number from another country is rejected.
POST /api/external_bank_accounts
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN
Accept-Version: 2026-09-01
{
"name": "external_bank_account_name",
"account_kind": "raw_routing_details",
"counterparty_guid": "counterparty_guid",
"asset": "CAD",
"counterparty_bank_account_details": [
{
"payment_rail": "ETRANSFER",
"account_identifier_type": "EMAIL",
"account_identifier": "[email protected]"
},
{
"payment_rail": "ETRANSFER",
"account_identifier_type": "PHONE_NUMBER",
"account_identifier": "+14165550123"
}
]
}Use an Interac e-Transfer account on an etransfer funding transfer by setting external_bank_account_guid to its guid. On a deposit, the Platform sends a Request for Money to the counterparty; on a withdrawal, it sends the e-transfer to the counterparty. See Request money from a counterparty and Send money to a counterparty.
For foreign fiat external bank accounts, see Foreign Fiat External Bank Accounts.
For detailed API reference, see Create External Bank Account.
Failure codes
The following errors occur when creating a counterparty external bank account:
- unverified_counterparty: Verify the counterparty before creating a counterparty external bank account. Returned with
400. - invalid_parameter: From API version
2026-09-01, removecounterparty_name,counterparty_addressandcounterparty_email_addressfrom the request. A counterparty account takes the counterparty's own verified details. Returned with400. - create_failed and legal_entity_incomplete_pii: From API version
2026-09-01, a permanent provider or validation error during account creation ends the account infailedwithcreate_failed, or withlegal_entity_incomplete_piiwhere the counterparty's details are incomplete. Re-create the counterparty with the required information, verify it, and then create the external bank account again.
Updated 7 days ago

