Bank accounts
Endpoints to list banks, document types, and create or list third-party bank accounts associated with the user. These accounts are used for Withdrawals and Exchange (FX) disbursement.
All endpoints require authentication with Authorization: Bearer [TOKEN] and x-api-key.
Endpoints summary
| Endpoint | Method | Description |
|---|---|---|
/bank_list_third_party_withdraw/ | GET | List available banks by country |
/base/document_type/ | GET | List document types |
/create_third_party_banks/ | POST | Create bank account |
/list_third_party_banks/ | GET | List user’s accounts (filter by country) |
/api/v1/thirdpartybank/thirdpartybank | PUT | Update USD account: name or deactivate |
/api/v1/usd/accounts | GET | List user’s USD accounts |
Third Party accounts (CO, MX, BR, classic US) are immutable: no endpoints to update or delete. USD accounts (identified by alphanumeric ID) allow updating the alias and deactivating (hiding).
Countries and account types
The system supports Colombia (CO), United States (US), Mexico (MX), and Brazil (BR). Each country has its own account types and validations.
Account types by country
| Country | account_type | Description |
|---|---|---|
| CO, US | 0 | Savings |
| CO, US | 1 | Checking |
| MX | 2 | CLABE (18 digits) |
| BR | 3 | PIX Email |
| BR | 4 | PIX CPF (11 digits) |
| BR | 5 | PIX CNPJ (14 digits) |
| BR | 6 | PIX Phone (10-11 digits) |
| BR | 7 | PIX Random (1-37 characters) |
US accounts: required fields
For country_registered: "US", required fields: wire, routing_number, address, and nickname.
List available banks
Returns the list of banks available for withdrawals/transfers by country.
Endpoint
GET /bank_list_third_party_withdraw/Headers
Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]
Accept: application/jsonResponse (200)
[
{ "id": 0, "name": "Bancolombia" },
{ "id": 1, "name": "Banco de Bogota" },
{ "id": 2, "name": "Davivienda" },
{ "id": 3, "name": "BBVA Colombia" }
]Use the bank id as bank_name when creating an account. The system supports 35+ banks in Colombia, 50+ in the US, and banks in Mexico (CLABE) and Brazil (PIX).
List document types
Returns valid identity document types for the account holder.
Endpoint
GET /base/document_type/Headers
Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]
Accept: application/jsonResponse (200)
[
{ "id": 0, "name": "CC" },
{ "id": 1, "name": "CE" },
{ "id": 2, "name": "NIT" },
{ "id": 3, "name": "TI" },
{ "id": 4, "name": "PPT" }
]Use the id in account_holder_document_type. Valid types depend on country.
Create bank account
Registers a third-party bank account for the user. The account is then used for withdrawals or Exchange (disbursement).
Endpoint
POST /create_third_party_banks/Headers
Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]
Content-Type: application/jsonRequest (common and country-specific fields)
| Field | Type | Required | Description |
|---|---|---|---|
account_holder_name | string | ✅ | Account holder full name |
account_type | int | ✅ | See table by country (0-1 CO/US, 2 MX, 3-7 BR) |
account_holder_document_type | int | ✅ | Document type ID |
account_holder_document | string | ✅ | Document number |
account_number | string | ✅ | Account number (format depends on type) |
bank_name | int | ✅ | Bank ID |
country_registered | string | ✅ | CO, US, MX, or BR |
nickname | string | ❌ | Alias (optional in CO/MX/BR; required in US) |
wire | string | ❌ | Bank name for SWIFT (required in US) |
routing_number | string | ❌ | Routing/ABA (required in US) |
address | string | ❌ | Bank address (required in US) |
Validations
- Bank by country:
bank_namemust be a valid bank forcountry_registered. - Account type by country:
account_typemust be one allowed for that country. - Account format: For CLABE (MX) and PIX (BR), format is validated by regex (e.g. CLABE 18 digits, PIX CPF 11 digits).
- Document type by country: Document type must be valid for the country.
- Duplicate account: The same account (same number, document, holder, type, country) cannot be registered twice.
- US: For
country_registered: "US",wire,routing_number,address, andnicknameare required.
Success response (200)
{
"code_transaction": "OK",
"data": {
"id": 85,
"account_holder_name": "Sofia Martin",
"account_type": 0,
"account_holder_document_type": 0,
"account_holder_document": "12345678",
"account_number": "58200011161",
"bank_name": 0,
"country_registered": "CO",
"wire": null,
"routing_number": null,
"address": null,
"nickname": "Main Account"
}
}Save the id (or data.id) to use in withdrawals (third_party_bank_id) or in Exchange (bank_account_id).
Possible errors
| Code | Cause |
|---|---|
400 | Bank not valid for the given country |
400 | Account type not valid for the country |
400 | Invalid account number format (CLABE, PIX, etc.) |
400 | Document type not valid for the country |
400 | ”Account already registered in the system” |
400 | For US: missing wire, routing_number, address, or nickname |
List user bank accounts
Lists the user’s registered bank accounts, with optional country filter.
Endpoint
GET /list_third_party_banks/?country=COQuery parameters
| Parameter | Type | Description |
|---|---|---|
country | string | Optional. Filter by country: CO, US, MX, BR |
Headers
Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]
Accept: application/jsonResponse (200)
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"pk": 85,
"account_holder_name": "Sofia Martin",
"account_type": 1,
"account_holder_document_type": 0,
"account_holder_document": "12345678",
"account_number": "58200011161",
"bank_name": 0,
"state": "Created",
"country_registered": "CO",
"wire": null,
"routing_number": null
}
]
}Account states
| state | Description |
|---|---|
| Created | Account just registered |
| In registration process | Being validated |
| Registered | Active |
| Has a problem | Error |
USD accounts (alphanumeric ID)
USD (dollar) accounts identified by an alphanumeric ID support withdrawals and deposits in USD. Unlike Third Party accounts (numeric ID), these accounts allow changing the name/alias and deactivating the account (hiding it).
Differences from Third Party Banks
| Third Party (CO, MX, BR, US) | USD accounts (alphanumeric ID) | |
|---|---|---|
| ID | Numeric (e.g. 85) | Alphanumeric (e.g. account_abc123) |
| Alias | nickname (set on create only) | name (updatable via PUT) |
| Update / Deactivate | Not available | Yes: PUT to change name or status: DEACTIVATED |
Update USD account (change name or deactivate)
Allows changing the alias (name) or deactivating the account. You cannot deactivate and change name in the same request.
Endpoint
PUT /api/v1/thirdpartybank/thirdpartybankHeaders
Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]
Content-Type: application/jsonRequest
| Field | Type | Required | Description |
|---|---|---|---|
bank_account_id | string | ✅ | USD account ID (alphanumeric) |
name | string | ❌ | New alias/name for the account |
status | string | ❌ | Only allowed value: DEACTIVATED (deactivates/hides the account) |
Rules: In a single request send either name or status=DEACTIVATED, not both. The name must be unique among the user’s accounts.
{
"bank_account_id": "account_abc123",
"name": "My Main USD Account"
}Success response (200)
{
"code_transaction": "OK",
"result": "The bank account have been updated"
}When deactivating (status: DEACTIVATED), the system updates the local state and removes the account from the provider; the account no longer appears in the list.
Possible errors
| Code | Cause |
|---|---|
400 | ”If client deactivated the account can not update the nickname” — Both name and status=DEACTIVATED sent |
400 | ”The {status} is not allowed” — status other than DEACTIVATED |
400 | ”The {name} is already taken, please use another one” — Name already used by another account |
404 | USD account not found |
List USD accounts
Returns the user’s USD accounts. Deactivated accounts are not included.
Endpoint
GET /api/v1/usd/accountsHeaders
Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]
Accept: application/jsonResponse (200)
{
"data": {
"payment_types": [
{
"id": 1,
"payment_method": "BANK_TRANSFER",
"account_id": "account_abc123",
"name": "My Main USD Account",
"routing": "021000021",
"account_number": "1234567890",
"status": "DEPOSIT_ONLY",
"type": "CHECKING",
"created_at": "2026-02-03T10:00:00Z"
}
]
},
"message": "ok"
}Use each account’s account_id as bank_account_id in the PUT request to update or deactivate.
Deactivation is permanent. Only the name (name) of the account can be updated; other data such as routing or account number cannot.
Using the accounts
Once created, the account is used in:
- Bank withdrawals:
POST /create/third_party_withdraw/with thethird_party_bank_idfield (Colombia COP) or in USD flows. - Exchange (FX):
POST /v2/exchange/initiate/with thebank_account_idfield for automatic disbursement when the movement completes.
The system validates that the account belongs to the authenticated user before executing the withdrawal or movement.
For the full withdrawal flow by country, see Bank Withdrawals. For cross-border movements with disbursement, see Exchange (FX).