Create an ExternalBankAccount.
Account creation
Accounts can be created for a Bank or a Customer.
To create accounts for your Bank, omit the customer_guid parameter in the request body. To create accounts for your Customers, include the customer_guid parameter in the request body.
State
| State | Description |
|---|---|
| storing | The Platform is storing the external bank account details in our private store |
| completed | The Platform has created the external bank account |
| unverified | The external bank account is created, but it has not yet been verified |
| failed | The Platform was not able to successfully create the external bank account |
| refresh_required | The Platform has created the external bank account, but needs to be refreshed |
| deleting | The Platform is deleting the external bank account |
| deleted | The Platform has deleted the external bank account |
Failure codes
| Code | Description |
|---|---|
| invalid_routing_number | The provided routing number is invalid |
| invalid_account_number | The account number is invalid |
| invalid_account_type | The account type is invalid |
| duplicate | An account with the same details already exists |
| plaid_processor_token | An account could not be created due to an invalid Plaid processor token or an error with Plaid |
| plaid_multiple_accounts | The supplied Plaid token is associated with multiple accounts. Must only be a single account. |
| create_failed | The bank account and associated holder could not be created correctly |
| unverified_counterparty | The counterparty account is unverified |
| legal_entity_incomplete_pii | The financial institution could not create the account because the information held for the account holder is insufficient. For a counterparty-owned account, re-create the counterparty with the required information; for a customer-owned or bank-owned account, contact Cybrid Support -- those records cannot be corrected through the API. |
| missing_holder_info | The account holder's details could not be determined. On a plaid account the linked financial institution did not return an account holder name; re-link the account or create it with account_kind: raw_routing_details. On a raw_routing_details account, counterparty_name or counterparty_address was omitted; supply both and retry. |
Sandbox simulation
On 2026-09-01+, in sandbox only, expected_behaviours lets you deterministically drive the holder-name-match outcome instead of aligning your KYC/KYB data with Plaid's fixed sandbox identity: passed_immediately or failed_immediately. It is accepted and ignored on account kinds whose plan runs no holder-name match (for example, a bank-owned account). Outside of sandbox the parameter is rejected with a 400.
A simulated passed_immediately writes the same compliance decision a real pass would, and can move a customer to Tier Basic -- it is a stand-in for the check, not a bypass of its consequences.
Required scope: external_bank_accounts:execute
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||

