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

EndpointMethodDescription
/bank_list_third_party_withdraw/GETList available banks by country
/base/document_type/GETList document types
/create_third_party_banks/POSTCreate bank account
/list_third_party_banks/GETList user’s accounts (filter by country)
/api/v1/thirdpartybank/thirdpartybankPUTUpdate USD account: name or deactivate
/api/v1/usd/accountsGETList 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

Countryaccount_typeDescription
CO, US0Savings
CO, US1Checking
MX2CLABE (18 digits)
BR3PIX Email
BR4PIX CPF (11 digits)
BR5PIX CNPJ (14 digits)
BR6PIX Phone (10-11 digits)
BR7PIX 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/json

Response (200)

200 OK
[
  { "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/json

Response (200)

200 OK
[
  { "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/json

Request (common and country-specific fields)

FieldTypeRequiredDescription
account_holder_namestringAccount holder full name
account_typeintSee table by country (0-1 CO/US, 2 MX, 3-7 BR)
account_holder_document_typeintDocument type ID
account_holder_documentstringDocument number
account_numberstringAccount number (format depends on type)
bank_nameintBank ID
country_registeredstringCO, US, MX, or BR
nicknamestringAlias (optional in CO/MX/BR; required in US)
wirestringBank name for SWIFT (required in US)
routing_numberstringRouting/ABA (required in US)
addressstringBank address (required in US)

Validations

  • Bank by country: bank_name must be a valid bank for country_registered.
  • Account type by country: account_type must 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, and nickname are required.

Success response (200)

200 OK
{
  "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

CodeCause
400Bank not valid for the given country
400Account type not valid for the country
400Invalid account number format (CLABE, PIX, etc.)
400Document type not valid for the country
400”Account already registered in the system”
400For 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=CO

Query parameters

ParameterTypeDescription
countrystringOptional. Filter by country: CO, US, MX, BR

Headers

Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]
Accept: application/json

Response (200)

200 OK
{
  "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

stateDescription
CreatedAccount just registered
In registration processBeing validated
RegisteredActive
Has a problemError

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)
IDNumeric (e.g. 85)Alphanumeric (e.g. account_abc123)
Aliasnickname (set on create only)name (updatable via PUT)
Update / DeactivateNot availableYes: 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/thirdpartybank

Headers

Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]
Content-Type: application/json

Request

FieldTypeRequiredDescription
bank_account_idstringUSD account ID (alphanumeric)
namestringNew alias/name for the account
statusstringOnly 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.

Change alias only
{
"bank_account_id": "account_abc123",
"name": "My Main USD Account"
}

Success response (200)

200 OK
{
  "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

CodeCause
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
404USD account not found

List USD accounts

Returns the user’s USD accounts. Deactivated accounts are not included.

Endpoint

GET /api/v1/usd/accounts

Headers

Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]
Accept: application/json

Response (200)

200 OK
{
  "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 the third_party_bank_id field (Colombia COP) or in USD flows.
  • Exchange (FX): POST /v2/exchange/initiate/ with the bank_account_id field 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).