Create an external account
Create an external account for bank transfers or proxy-based payments.
Deduplication
Create is find-or-create. Matching differs for bank vs proxy accounts:
Bank accounts match by customer plus the exact set of normalized bank identifiers you supply (any of swiftBic, iban, routingNumber, accountNumber that are present) — not by paymentRails. All supplied identifiers must match; adding or omitting one (e.g. SEPA with only iban, then SWIFT with the same iban plus swiftBic) produces a different identity and a new account. Reusing the same identifier set with a different rail (e.g. ACH after WIRE) returns the existing account and does not add that rail.
Proxy accounts match by customer + normalized alias + payment rail. The same alias on another proxy rail creates a separate account.
On a bank-account reuse (created: false):
- Existing paymentRails stay unchanged.
- Missing create-only fields (branch, beneficiary document, correspondent details) may be backfilled when supplied; conflicting values return 400.
- A closed account (closed via the API) is reopened with the same ID; fixed routes disabled when it was closed stay disabled and must be re-enabled separately.
To add compatible bank rails to an existing account (e.g. ACH onto a WIRE-only US account), use PATCH /v1/external-bank-accounts/{id} with the full resulting paymentRails list. Do not rely on a second create.
On every create response, check created. For bank accounts also check paymentRails; for proxy accounts check paymentRail (proxies do not return paymentRails). HTTP 201 with created: false means identity reuse, not a new rail set.
Field Mapping
We use generic field names that adapt to country-specific identifiers:
| Field | US | UK | EU | India | Mexico | Australia |
|---|---|---|---|---|---|---|
| routingNumber | ABA (9 digits) | Sort code (6 digits) | - | IFSC (11 chars) | - | BSB (6 digits) |
| accountNumber | Account number | Account (8 digits) | - | Account number | CLABE (18 digits) | Account number |
| iban | - | - | IBAN | - | - | - |
Bank Account Requirements by Rail
| Rail | Required Fields |
|---|---|
| ACH/Wire (US) | routingNumber + accountNumber |
| SWIFT (IBAN countries) | swiftBic + iban |
| SWIFT (US) | swiftBic + accountNumber (routingNumber optional) |
| SWIFT (AU) | swiftBic + routingNumber (BSB) + accountNumber |
| SEPA | iban (swiftBic optional) |
| Faster Payments (UK) | routingNumber (sort code) + accountNumber |
| IMPS/NEFT (India) | routingNumber (IFSC) + accountNumber |
| SPEI (Mexico) | accountNumber (18-digit CLABE) |
Proxy Accounts
For instant payment rails (PIX, UPI, PromptPay), provide alias details instead of bank details:
- aliasType: phone, email, tax_id, national_id, or random
- aliasValue: The identifier value
The payment network resolves the alias to the recipient's account.
Headers
API key
Request body
Example request
{
"correspondentBankName": "Bank of America",
"correspondentBankSwiftCode": "IRVTUS3NXXX",
"correspondentAccountNumber": "9876543210",
"customerId": "cust_abc123",
"counterpartyId": "cp_abc123",
"beneficiaryName": "John Smith",
"paymentRails": [
"ACH",
"WIRE"
],
"beneficiaryType": "INDIVIDUAL",
"metadata": {
"nickname": "Main Checking Account",
"purpose": "Business operations",
"tags": [
"primary",
"operations"
]
},
"aliasType": "TAX_ID",
"aliasValue": "12345678901",
"beneficiaryAddress": {
"addressLine1": "123 Main Street",
"addressLine2": "Apt 4B",
"city": "San Francisco",
"state": "CA",
"postalCode": "94102",
"country": "US",
"transliterated": {
"addressLine1": "123 Main Street",
"addressLine2": "Apt 4B",
"city": "Beijing",
"state": "Hebei"
}
},
"beneficiaryPhone": "+14155551234",
"beneficiaryDateOfBirth": "1990-01-31",
"bankName": "JPMorgan Chase Bank",
"bankAddress": {
"addressLine1": "123 Main Street",
"addressLine2": "Apt 4B",
"city": "San Francisco",
"state": "CA",
"postalCode": "94102",
"country": "US"
},
"swiftBic": "CHASUS33",
"iban": "DE89370400440532013000",
"accountNumber": "1234567890",
"routingNumber": "021000021",
"branchCode": "001",
"beneficiaryDocumentType": "CC",
"beneficiaryDocumentNumber": "12345678901",
"beneficiaryStateProvince": "LIMA",
"bankAccountType": "checking",
"currencyCodes": [
"USD"
]
}Response
External account created, reused, or reopened successfully. Bank reuse preserves existing paymentRails (other create-only fields may backfill). Proxy reuse matches alias+rail. Check created on the body; bank responses also include paymentRails, proxy responses include paymentRail.
Example response
{
"id": "eba_1234567890abcdef",
"customerId": "cust_abc123",
"counterpartyId": "cp_abc123",
"type": "EXTERNAL_BANK",
"status": "IN_REVIEW",
"beneficiaryType": "INDIVIDUAL",
"beneficiaryName": "John Smith",
"metadata": {
"nickname": "Main Checking Account",
"purpose": "Business operations",
"tags": [
"primary",
"operations"
]
},
"paymentRail": "SWIFT",
"paymentRails": [
"ACH",
"ACH_SAME_DAY",
"WIRE"
],
"beneficiaryAddress": {
"addressLine1": "123 Main Street",
"addressLine2": "Suite 100",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"beneficiaryPhone": "+12125551234",
"beneficiaryDateOfBirth": "1990-01-31",
"bankName": "JPMorgan Chase Bank",
"bankAddress": {
"addressLine1": "270 Park Avenue",
"addressLine2": "Floor 10",
"city": "New York",
"state": "NY",
"postalCode": "10017",
"country": "US"
},
"swiftBic": "CHASUS33",
"iban": "GB82WEST12345698765432",
"accountNumber": "1234567890",
"routingNumber": "021000021",
"branchCode": "001",
"beneficiaryDocumentType": "CC",
"beneficiaryDocumentNumber": "12345678901",
"beneficiaryStateProvince": "LIMA",
"correspondentBankName": "Bank of America",
"correspondentBankSwiftCode": "IRVTUS3NXXX",
"correspondentAccountNumber": "9876543210",
"bankAccountType": "checking",
"currencyCodes": [
"USD",
"EUR"
],
"aliasType": "TAX_ID",
"aliasValue": "12345678901",
"createdAt": "2026-01-15T10:00:00Z",
"updatedAt": "2026-01-15T10:00:00Z",
"created": true
}