What is Bre-B
Bre-B is Colombia’s instant payment network. It settles transfers in real time and addresses the beneficiary through a key — an email address, a phone number or an alias — instead of a traditional bank account number.
For Colombian off ramps you can send the payout either over Bre-B or over the
traditional ACH cycle. You choose per bank account, using the optional rail field on
POST /bank-accounts.
The rail field
rail is optional and applies only to Colombian bank accounts. It accepts two
values:
| Value | Rail |
|---|---|
BANK | Traditional bank transfer, settled through the ACH cycle |
BREB | Bre-B instant transfer, addressed by key |
Any other value is rejected.
If you omit rail, the payout rail is inferred from the shape of the destination:
an all-numeric accountNumber with a valid bankCode is routed over ACH, while a
destination that looks like a key (an email address, a phone number) is routed over
Bre-B.
Omitting rail is not the same as sending rail: BANK. Inference is a convenience
for unambiguous destinations, not a default. Declare rail explicitly whenever the
destination could be read either way — most importantly when the key is a NIT, which
is all digits and therefore indistinguishable from an account number.
Existing integrations that register traditional bank accounts do not need to change:
a numeric account with its bankCode keeps being routed over ACH exactly as before.
Registering a Bre-B key
With rail: BREB, the accountNumber field no longer holds an account number — it
holds the beneficiary’s Bre-B key, exactly as given to them by their financial
institution. It must be entered as an exact mirror copy of that key — without adding,
removing or altering a single character.
bankCode and accountType are required for every Colombian bank account, whichever
rail you use — they are not a Bre-B requirement. The request body marks them optional
because it is shared across countries, and Colombia validates them on top of it. Send a
bankCode from GET /bank-info/COL and a valid accountType, the same way you would
for a traditional account.
The per-bank account number validations for Colombia apply to traditional accounts. A Bre-B key is not validated against those formats — it is passed through exactly as provided.
BANK and BREB are separate destinations
The rail is part of a destination’s identity. Registering the same value with and
without rail: BREB creates two different bank accounts, each with its own _id.
This is deliberate: the same number really can be two destinations. A NIT-based Bre-B key is all digits, so it can collide with a genuine account number belonging to the same beneficiary — one reachable over ACH, the other over Bre-B.
Store the _id returned when you register each account. The _id is what you pass as
destinationAddress when you create an
order, and it is what determines
which rail the money goes out through. Passing the _id of the wrong registration
sends the payout over the wrong rail.
Creating the order
Nothing changes in POST /orders. The rail is
already fixed by the bank account you registered, so you only pass its _id in
destinationAddress as usual.