Skip to main content

Bank Account COP

Introduction

COP Beneficiary is used as the destination when you transact with COP (Colombian Peso) fiat. A single beneficiary can support two rails:

RailRequired fieldsUse for
PSE (Bank Transfer)Full bank fields: bankAccountNumber, bankId, documentNumber, address, etc.Colombian bank-to-bank transfer.
Bre-BJust breBKeyTransfer to any Bre-B-enabled Colombian bank using a key.

You can register a beneficiary with only Bre-B, only bank fields, or both. The rail used at payout time is driven by the quote's outputPaymentMethod:

  • outputPaymentMethod=BANK-TRANSFER → beneficiary must have bank fields registered
  • outputPaymentMethod=BRE-B → beneficiary must have breBKey registered
info

All the endpoints here are applicable to subAccounts, just pass the subAccountId field followed by the subaccount id as the request parameter.

warning

COP transfers are irreversible once executed — ensure beneficiary details are correct before creating a payout ticket.

Supported Banks

Before registering a beneficiary, retrieve the list of supported Colombian banks:

HTTP GET Request

Endpoint:

https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/supported-banks

cURL Example:

curl -X GET "https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/supported-banks" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

JSON Response

{
"banks": [
{ "bankId": "bank_cop_022", "bankName": "BANCOLOMBIA" },
{ "bankId": "bank_cop_007", "bankName": "BANCOLOMBIA (NEQUI)" },
{ "bankId": "bank_cop_001", "bankName": "BANCAMIA S.A." }
]
}

Response Fields Explained

FieldTypeDescription
banksarrayList of supported Colombian banks (44 banks)
banks[].bankIdstringUnique bank identifier — use this when creating a beneficiary
banks[].bankNamestringHuman-readable bank name
info

Bank IDs use the format bank_cop_XXX (e.g. bank_cop_022 for Bancolombia). Always use the bankId returned by this endpoint — do not construct bank IDs manually.

Register a COP Beneficiary Account

Endpoint (same for all 3 registration modes):

POST https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/

Required fields (all modes)

FieldTypeValidation RulesDescription
aliasstringMax 100 characters; unique per userA custom name for the beneficiary.
descriptionstringMax 500 charactersOptional description.
beneficiaryNamestringMax 140 charactersFull legal name of the recipient.

Mode 1 — Bre-B only (minimal cadastro)

Provide only breBKey alongside the required fields. Avenia validates the key against the Bre-B network before persisting.

curl -X POST "https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-d '{
"alias": "Juan Bre-B",
"description": "",
"beneficiaryName": "Juan Carlos Garcia",
"breBKey": "@CBW0ZWQT6"
}'
FieldTypeValidation RulesDescription
breBKeystringMax 100 charactersA valid Bre-B key registered to the recipient. Validated at registration time.

Mode 2 — Bank fields only (PSE)

Provide all bank fields. No breBKey.

curl -X POST "https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-d '{
"alias": "Juan Bancolombia",
"description": "Cuenta principal de Juan en Bancolombia",
"beneficiaryName": "Juan Carlos Garcia",
"beneficiaryType": "individual",
"beneficiaryEmail": "juan@example.com",
"beneficiaryAddress": {
"address1": "Calle 100 #15-20",
"address2": "Apto 501",
"country": "CO",
"subDivision": "Cundinamarca",
"city": "Bogota",
"postalCode": "110111"
},
"phoneNumber": "+573001234567",
"accountType": "CHECKING",
"bankAccountNumber": "00123456",
"documentNumber": "1234567890",
"documentType": "NATIONAL_ID",
"bankId": "bank_cop_022",
"bankName": "BANCOLOMBIA"
}'
FieldTypeRequired when bank fields usedValidation RulesDescription
beneficiaryTypestringYesindividual or businessType of account holder.
beneficiaryEmailstringYesValid emailEmail of the beneficiary.
beneficiaryAddress.address1stringYesStreet address line 1.
beneficiaryAddress.address2stringNoApartment / suite.
beneficiaryAddress.countrystringYesMust be COISO country code.
beneficiaryAddress.subDivisionstringYesState/Department.
beneficiaryAddress.citystringYesCity name.
beneficiaryAddress.postalCodestringYesColombian postal code.
phoneNumberstringYesInternational formatPhone number (e.g. +573001234567).
accountTypestringYesCHECKING or SAVINGSType of bank account.
bankAccountNumberstringYes6–18 digitsBank account number.
documentNumberstringYes6–10 digits (Cedula)Government-issued ID.
documentTypestringYesNATIONAL_ID, RUC_NIT, PASSPORT, or RESIDENT_IDDocument type.
bankIdstringYesMust be from /supported-banksBank identifier.
bankNamestringYesBank name.
warning

Document validation: The documentNumber for Colombian nationals (Cedula de Ciudadanía) must be 6 to 10 digits. Brazilian CPF numbers (11 digits) will be rejected. For business entities, use documentType: "RUC_NIT" with the Colombian NIT number.

info

Partial bank cadastro is rejected. If you provide any bank field (e.g. bankAccountNumber), all bank fields above become mandatory. To register a Bre-B-only beneficiary, leave all bank fields out of the request.

Mode 3 — Both rails (bank + Bre-B)

Combine all bank fields with breBKey. The same beneficiary can then be used for both PSE and Bre-B payouts depending on the quote's outputPaymentMethod.

curl -X POST "https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-d '{
"alias": "Juan (PSE + Bre-B)",
"description": "Cuenta + clave Bre-B",
"beneficiaryName": "Juan Carlos Garcia",
"beneficiaryType": "individual",
"beneficiaryEmail": "juan@example.com",
"beneficiaryAddress": {
"address1": "Calle 100 #15-20",
"country": "CO",
"subDivision": "Cundinamarca",
"city": "Bogota",
"postalCode": "110111"
},
"phoneNumber": "+573001234567",
"accountType": "CHECKING",
"bankAccountNumber": "00123456",
"documentNumber": "1234567890",
"documentType": "NATIONAL_ID",
"bankId": "bank_cop_022",
"bankName": "BANCOLOMBIA",
"breBKey": "@CBW0ZWQT6"
}'

Common Errors

ErrorCause
breBKey or bank fields is invalidNeither breBKey nor any bank field was provided. Provide at least one.
bankAccountNumber is invalidBank field present but bankAccountNumber missing or not 6–18 digits.
breBKey is invalidThe provided Bre-B key was not recognised by the Bre-B network (not registered, not active, etc.).

JSON Response

{
"id": "550e8400-e29b-41d4-a716-446655440000"
}

Response Fields Explained

FieldTypeDescription
idstring (UUID)Unique identifier for this beneficiary account — SAVE THIS for future payout operations

List all COP beneficiaries bank accounts

To get all the COP bank accounts, let's use the endpoint below, with filter fields:

info

All the endpoints here are applicable to subAccounts, just pass the subAccountId field followed by the subaccount id as the request parameter.

HTTP GET Request

https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/

Filter Fields

FieldTypeDescription
subAccountIdstringThe ID of a sub-account. If provided, data will be fetched for the sub-account; leave empty for main account.
createdAfterint64Filters results to include only those created after this timestamp.
createdBeforeint64Filters results to include only those created before this timestamp.
cursorstringCursor for pagination. Pass the value from the previous response to retrieve the next set of results.
aliasstringFilters results to include only those with the specified alias.

cUrl Example:

curl -X GET "https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/?subAccountId=&createdAfter=1700000000&createdBefore=1800000000&cursor=NEXT_CURSOR&alias=Juan Bancolombia" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

JSON Response

{
"bankAccounts": [
{
"id": "00000000-0000-0000-0000-000000000000",
"userId": "11111111-1111-1111-1111-111111111111",
"alias": "Juan Bancolombia",
"description": "Cuenta principal de Juan en Bancolombia",
"beneficiaryName": "Juan Carlos Garcia",
"beneficiaryType": "individual",
"bankId": "bank_cop_022",
"bankName": "BANCOLOMBIA",
"accountType": "CHECKING",
"bankAccountNumber": "00123456",
"documentNumber": "1234567890",
"documentType": "NATIONAL_ID",
"breBKey": "@CBW0ZWQT6",
"createdAt": "2026-02-20T15:13:08.320462Z"
},
{
"id": "ee93dbbb-15a7-401b-88db-0ff12abe5a86",
"userId": "11111111-1111-1111-1111-111111111111",
"alias": "Juan Bre-B only",
"description": "",
"beneficiaryName": "Juan Carlos Garcia",
"breBKey": "@CBW0ZWQT6",
"createdAt": "2026-04-29T16:20:07.466341Z"
}
],
"cursor": "MzItMTc0MDA2NDM4ODMyMA..."
}
info

Fields not registered for a beneficiary are omitted from the response. A Bre-B-only entry will not include bankAccountNumber, bankId, etc.

Response Fields Explained

FieldTypeDescription
bankAccountsarrayArray of COP beneficiary accounts for this user
bankAccounts[].idstring (UUID)Unique account identifier
bankAccounts[].userIdstring (UUID)Your user ID (account owner)
bankAccounts[].aliasstringThe friendly name you assigned
bankAccounts[].descriptionstringThe description you provided
bankAccounts[].beneficiaryNamestringFull name of the account holder
bankAccounts[].beneficiaryTypestringindividual or business
bankAccounts[].bankIdstringBank identifier (e.g. bank_cop_022)
bankAccounts[].bankNamestringName of the bank
bankAccounts[].accountTypestringCHECKING or SAVINGS
bankAccounts[].bankAccountNumberstringBank account number
bankAccounts[].documentNumberstringBeneficiary document number
bankAccounts[].documentTypestringType of identity document (omitted for Bre-B-only)
bankAccounts[].breBKeystringRegistered Bre-B key (omitted if not registered)
bankAccounts[].createdAttimestampISO 8601 creation date
cursorstringPagination cursor for next page (only if more results exist)

Pagination

  • If cursor is present in the response, there are more results available
  • Pass this cursor value in the next request as a query parameter to fetch the next batch
  • No cursor in response means you've reached the last page

Get COP beneficiary bank account by ID

To retrieve the details of a specific COP bank account:

info

All the endpoints here are applicable to subAccounts, just pass the subAccountId field followed by the subaccount id as the request parameter.

HTTP GET Request

https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/00000000-0000-0000-0000-000000000000

cUrl Example

curl -X GET "https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

JSON Response

{
"bankAccount": {
"id": "00000000-0000-0000-0000-000000000000",
"userId": "11111111-1111-1111-1111-111111111111",
"alias": "Juan Bancolombia",
"description": "Cuenta principal de Juan en Bancolombia",
"beneficiaryName": "Juan Carlos Garcia",
"beneficiaryType": "individual",
"bankId": "bank_cop_022",
"bankName": "BANCOLOMBIA",
"accountType": "CHECKING",
"bankAccountNumber": "00123456",
"documentNumber": "1234567890",
"documentType": "NATIONAL_ID",
"createdAt": "2026-02-20T15:13:08.320462Z"
}
}

Response Fields Explained

FieldTypeDescription
bankAccountobjectWrapper object containing the account details
bankAccount.idstring (UUID)Unique account identifier
bankAccount.userIdstring (UUID)Your user ID (account owner)
bankAccount.aliasstringThe friendly name you assigned
bankAccount.descriptionstringThe description you provided
bankAccount.beneficiaryNamestringFull name of the account holder
bankAccount.beneficiaryTypestringindividual or business
bankAccount.bankIdstringBank identifier
bankAccount.bankNamestringName of the bank
bankAccount.accountTypestringCHECKING or SAVINGS
bankAccount.bankAccountNumberstringBank account number
bankAccount.documentNumberstringBeneficiary document number
bankAccount.documentTypestringType of identity document (omitted for Bre-B-only)
bankAccount.breBKeystringRegistered Bre-B key (omitted if not registered)
bankAccount.createdAttimestampISO 8601 creation date

Delete COP beneficiary bank Account

To delete a specific COP bank account:

info

All the endpoints here are applicable to subAccounts, just pass the subAccountId field followed by the subaccount id as the request parameter.

HTTP DELETE Request

https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/00000000-0000-0000-0000-000000000000

cUrl Example

curl -X DELETE "https://api.sandbox.avenia.io:10952/v2/account/beneficiaries/bank-accounts/cop/00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

JSON Response

{}

Status Code: HTTP 200 OK

Response: Empty JSON object - indicates successful deletion

Your COP bank account has been deleted!

Conclusion

In this section, you have learned how to manage COP beneficiaries within the Avenia API system.

What we've covered:

  • Listing Supported Colombian Banks – Retrieve the 44 supported banks and their IDs.
  • Creating a COP Beneficiary – 3 modes: Bre-B only, bank only (PSE), or both rails.
  • Fetching All COP Beneficiaries – Retrieve all registered beneficiaries.
  • Fetching a Specific COP Beneficiary by ID – Retrieve details by UUID.
  • Deleting a COP Beneficiary – Permanently remove the registration.

By following these steps, you now have full control over your COP beneficiaries within Avenia API. The returned id is used as beneficiaryCopBankAccountId when creating COP payout tickets — Avenia routes the payout via PSE or Bre-B based on the quote's outputPaymentMethod and what the beneficiary supports.