Bre-B Key

Create a payout to a beneficiary's Bre-B key instead of a bank account, routed through Cobre.

How to activate it

Set channel to "bre-b" and put the beneficiary's Bre-B key in account_id. account_type
stays a regular Colombian account type — it has no effect on routing for this rail.

AttributeData typeRequiredNotes
channelstringYesMust be exactly "bre-b" (case-insensitive) to route through Bre-B. Any other value sends a regular bank-account transfer instead
account_idstringYesThe beneficiary's Bre-B key (document, phone, email, or an alphanumeric key like @JAR1234). Must not be empty.
account_typestringYesAny valid Colombia account type (ca, cc, tp, dp). Not used to buildl the destination sent to Cobre — kept because every transaction requires one.
bank.integerYesA valid Bank id. Not used to build the destination either — kept because the field is mandatory on every transaction.
📘

About the "@" prefix

Cobre confirmed that the alphanumeric keys they generate always start with @ (e.g.
@JAR1234). Keys registered as document/phone/email may not have it — Cobre's own
API reference shows a valid Bre-B key example without @. ALPS does not require the
@ prefix on account_id; it only requires it to be non-empty. The @ is used internally only
to flag a row where the key looks alphanumeric but channel was not set to "bre-b".


Example payload

[
 {
  "order_id": "20260901002",
  "credit_note": "20260901113",
  "account_id": "@JAR1234",
  "account_type": "cc",
  "vat_id_type": "nit",
  "vat_id": "1089713337",
  "name": "Jose Paez",
  "amount": 2,
  "currency": 9,
  "subject": "TEST COBRE BREB",
  "bank_detail": "TEST COBRE BREB",
  "bank": 10000,
  "user_email": "[email protected]",
  "phone_number": "+573000000000",
  "channel": "bre-b",
  "transfer_status": 1
  }
]

What happens after you send it

POST /api/transactions/ only validates and stores the transaction — it does not call Cobre
synchronously. A row can return 200 on that call and still never reach Cobre if channel/account_id are inconsistent. Rather than send a malformed request, ALPS excludes the row and records why in the audit trail; the transaction stays approved and is retried on the next batch once the payload is fixed.

Audit reasonWhen it happens
breb_disabledchannel is "bre-b" but the rail is turned off.
breb_missing_keychannel is "bre-b" but account_id is empty.
breb_channel_missingaccount_id looks like an alphanumeric Bre-B key (@
prefix) but channel is not "bre-b".
📘

Amount limit

Bre-B payouts are limited to 12,110,000 COP per transaction.