Cómo enviar a Bre-b
Origen y destino de la transferencia
Las transferencias reguladas se definen como transferencias de cuenta a cuenta. Estas transacciones no deberían diferenciarse de las transferencias actuales entre cuentas en ACH En Línea.
Nota: La resolución de llaves debe realizarse antes de crear una transferencia.
Concepto Transfers
ACH En Línea utiliza el concepto de “transfers” para iniciar pagos en el sistema agnósticos al caso de uso o tipo de transferencia.
Identificador de flujo
Cuando se inicia un transfer se activa uno de los flujos de pago orquestados por la plataforma.
El flujo es definido por el campo movementType dentro del Transfers, que para el caso de transferencias reguladas debe ser alguno de estos valores: P2P-BREB, P2B-BREB, B2B-BREB y B2P-BREB.
Ejemplo de una transferencia regulada
Campos de entrada creación de transferencia
Campos de entrada (Headers)
| Campo | Tipo | Validación | Descripción | Obligatoriedad |
|---|---|---|---|---|
| x-hash | String | Min 64 – Máx 64 | Cadena de comprobación de integridad de la trama. Se obtiene al serializar el objeto data y aplicar SHA256. | Si |
Campos de entrada (Body)
| Campo | Tipo | Validación | Longitud | Obligatoriedad |
|---|---|---|---|---|
| meta | objeto | N/A | N/A | SI |
| requestId | cadena | UUID que identifica el mensaje. | Min 36 - Max 36 | SI |
| version | cadena | versión del protocolo de mensajería. valor fijo "1.0.0" | Min 1 Max 15 | SI |
| timestamp | fecha | Marca de tiempo de envío del mensaje | Ver tabla “REGLAS PARA LOS VALORES DE TIPO FECHA” | SI |
| data | objeto | N/A | N/A | SI |
| id | cadena | Identificador único de la transacción. según el valor del movementType - [P2P-BREB, P2B-BREB]: Responde al id regulatorio Bre-B, ver la especificación de la tabla “FORMATO DE ID REGULATORIO – BREB”, para estos esquemas debe ser obligatorio, para los demás es opcional. | Min 1 Max 36 | NO |
| movementType | lista | Identificador del schema del flujo transaccional. Ver tabla “VALORES PARA LAS LOS MOVEMENT TYPE” | Lista | SI |
| amountInformation | objeto | N/A | N/A | SI |
| amount | decimal | Valor de la transacción. 13 enteros, 2 decimales, siempre mayor que cero. El monto máximo por transacción corresponde a 250 MM. Ver tabla “REGLAS PARA LOS VALORES DE TIPO DECIMAL” | (13,2) | SI |
| currency | lista | Símbolo de la moneda de la transacción. Ver tabla “VALORES PARA TIPOS DE MONEDA (CURENCY)” | Lista | SI |
| source | objeto | N/A | N/A | SI |
| personType | lista | Tipo de persona que hace la transacción. Ver tabla “VALORES PARA TIPOS DE PERSONA (PERSONTYPE)” | lista | SI |
| document | Objeto | N/A | N/A | SI |
| number | entero | Número de identificación del ordenante del pago. Solo números | Entero | SI |
| type | lista | Tipo de identificación del ordenante del pago. Ver tabla “VALORES PARA EL TIPO DE DOCUMENTO” | Lista | SI |
| fullName | cadena | Nombre comercial, se usa para persona jurídica | Min 1 Max 160 | COND Obligatorio si personType es LEGAL |
| firstName | cadena | Primer nombre | Min 1 Max 40 | Obligatorio si personType es NATURAL |
| secondName | cadena | Segundo nombre | Min 1 Max 40 | NO |
| firstLastName | cadena | Primer apellido | Min 1 Max 40 | Obligatorio si personType es NATURAL |
| secondLastName | cadena | segundo apellido | Min 1 Max 40 | NO |
| location | objeto | N/A | N/A | NO |
| city | cadena | Código de la ciudad (códigos DANE) | Min 1 Max 5 | SI |
| postalCode | cadena | Código postal de la ciudad | Min 1 Max 10 | SI |
| accountInformation | objeto | N/A | N/A | SI |
| accountId | cadena | Número de cuenta del origen de la transacción | Min 1 Max 34 | SI |
| accountType | lista | Tipo de cuenta del origen de la transacción. Ver tabla “VALORES PARA EL TIPO DE CUENTA” | lista | SI |
| financialInstitutionId | entero | Identificador de la entidad origen. Número NIT sin digito de verificación. | Min 1 Max 9 | SI |
| target | objeto | N/A | N/A | |
| personType | lista | Tipo de persona que recibe la transacción. Ver tabla “VALORES PARA TIPOS DE PERSONA (PERSONTYPE)” | Lista | SI |
| document | Objeto | N/A | N/A | SI |
| number | entero | Número de identificación del beneficiario del pago. Solo números. | entero | SI |
| type | lista | Tipo de identificación del beneficiario del pago. Ver tabla “VALORES PARA EL TIPO DE DOCUMENTO” | lista | SI |
| fullName | cadena | Nombre comercial, se usa para persona jurídica | Min 1 Max 160 | COND Obligatorio si personType es LEGAL |
| firstName | cadena | Primer nombre | Min 1 Max 40 | COND Obligatorio si personType es NATURAL |
| secondName | cadena | Segundo nombre | Min 1 Max 40 | NO |
| firstLastName | cadena | Primer apellido | Min 1 Max 40 | COND Obligatorio si personType es NATURAL |
| secondLastName | cadena | segundo apellido | Min 1 Max 40 | NO |
| spbviCode | lista | Nombre del SPBVI destino. Ver tabla “VALORES PARA LOS SPBVI HABILITADOS” | lista | COND Obligatorio si el movementType es *-BREB |
| location | objeto | N/A | N/A | NO |
| city | cadena | Código de la ciudad (código DANE) | Min 1 Max 5 | SI |
| postalCode | cadena | Código postal de la ciudad | Min 1 Max 10 | SI |
| alias | objeto | N/A | N/A | COND Obligatorio si el movementType es *-BREB |
| aliasType | lista | Identificador del tipo de llave. Ver tabla “VALORES PARA EL TIPO DE LLAVE” | lista | SI |
| aliasValue | cadena | Valor de la llave Debe responder a las reglas según tipo de llave descritas en la tabla de tipos de llave | Min 1 Max 92 | SI |
| qr | objeto | N/A | N/A | NO |
| qrId | cadena | Identificador del QR Ver tabla “COMO OBTENER EL ID PARA EL ID QR” | Min 35 Max 35 | NO |
| hash | cadena | Cadena de seguridad del QR. Se obtiene del Tag 91 - SubTag 01 del estándar EMVCo v1.5 | Min 64 Max 64 | NO |
| crc | cadena | Código de redundancia cíclica del QR. Se obtiene del Tag 63 del estándar EMVCo v1.5 | Min 1 Max 4 | NO |
| accountInformation | objeto | N/A | N/A | SI |
| accountId | cadena | Número de cuenta del destino de la transacción | Min 1 Max 34 | SI |
| accountType | lista | Tipo de cuenta del beneficiario de la transacción Ver tabla “VALORES PARA EL TIPO DE CUENTA” | lista | SI |
| financialInstitutionId | entero | Identificador de la entidad destino Número NIT sin digito de verificación. | Min 1 Max 9 | SI |
| purposeInformation | objeto | N/A | N/A | COND Obligatorio si el movementType es *-BREB |
| transactionPurpose | lista | Motivo de la transacción Ver tabla “VALORES PARA EL MOTIVO DE LA TRANSACCIÓN.” | Min 1 - Máx 25 | SI |
| useCaseInformation | objeto | N/A | N/A | COND Obligatorio si el movementType es *-BREB |
| channel | Lista | Canal origen de la transacción. Ver lista “VALORES PARA EL CANAL (Channel)” | Lista | SI |
| timestamps | objeto | N/A | N/A | COND Obligatorio si el movementType es *-BREB |
| received | fecha | El participante recibe del cliente la orden de intent. Es obligatorio con el movementType [P2P-BREB, P2B-BREB]. | Ver tabla “REGLAS PARA LOS VALORES DE TIPO FECHA” | SI |
| dispatched | fecha | El participante envía el intent luego de hacer validaciones. Es obligatorio con el movementType [P2P-BREB, P2B-BREB]. | Ver tabla “REGLAS PARA LOS VALORES DE TIPO FECHA” | SI |
| deviceFingerprint | objeto | N/A | N/A | NO |
| ipAddress | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| ipLocation | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| ipCountryCode | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceIpRegion | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceIsp | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceModel | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| latitude | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| longitude | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceScreenHeight | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceScreenWidth | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceLanguage | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceCookiesEnabled | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceUserAgent | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceBrowser | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceBrowserVersion | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| deviceOs | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
| ipAddress | cadena | Entregado por el SDK de prevención fraude o por la entidad | Min 1 - Máx 255 | NO |
Request creación de transferencia
curl --location 'https://url_ach/v1/money_movements/transfers' \
--header 'x-hash: 695ffdf84f0dad0c19e3b8b09a4565246c156d747ffb26149e4c2dc5d3b66ca1' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer XXXXXXXXXXXXXXXXXX' \
--data '{...}' Data:
{
"meta": {
"requestId": "cadena",
"version": "cadena",
"timestamp": "fecha"
},
"data": {
"id": "cadena",
"movementType": ["lista"],
"amountInformation": {
"amount": "decimal",
"currency": ["lista"]
},
"source": {
"personType": ["lista"],
"document": {
"number": "cadena",
"type": ["lista"],
"fullName": "cadena",
"firstName": "cadena",
"secondName": "cadena",
"firstLastName": "cadena",
"secondLastName": "cadena"
},
"accountInformation": {
"accountId": "cadena",
"accountType": ["lista"],
"financialInstitutionId": "entero"
}
},
"target": {
"personType": ["lista"],
"document": {
"number": "cadena",
"type": ["lista"],
"fullName": "cadena",
"firstName": "cadena",
"secondName": "cadena",
"firstLastName": "cadena",
"secondLastName": "cadena"
},
"spbviCode": ["lista"],
"alias": {
"aliasType": ["lista"],
"aliasValue": "cadena"
},
"qr": {
"qrId": "cadena",
"accountInformation": {
"accountId": "cadena",
"accountType": ["lista"],
"financialInstitutionId": "entero"
}
}
},
"purposeInformation": {
"transactionPurpose": ["lista"]
},
"useCaseInformation": {
"channel": ["lista"]
},
"timestamps": {
"received": "fecha",
"dispatched": "fecha"
},
"deviceFingerprint": {
"deviceHash": "cadena",
"ipAddress": "cadena",
"ipLocation": "cadena",
"ipCountryCode": "cadena",
"deviceIpRegion": "cadena",
"deviceIsp": "cadena",
"deviceModel": "cadena",
"latitude": "cadena",
"longitude": "cadena",
"deviceScreenHeight": "cadena",
"deviceScreenWidth": "cadena",
"deviceLanguage": "cadena",
"deviceCookiesEnabled": "cadena",
"deviceUserAgent": "cadena",
"deviceBrowser": "cadena",
"deviceBrowserVersion": "cadena",
"deviceOs": "cadena"
}
}
} Campos de salida creación de transferencia
| Campo | Tipo | Validación | Longitud | Mapeo de datos |
|---|---|---|---|---|
| meta | objeto | N/A | N/A | N/A |
| requestId | cadena | UUID que identifica el mensaje | Min 36 - Max 36 | N/A |
| version | cadena | Versión del protocolo de mensajería. valor fijo "1.0.0" | Min 1 Max 15 | N/A |
| timestamp | fecha | Marca de tiempo de envío del mensaje | Ver tabla “REGLAS PARA LOS VALORES DE TIPO FECHA” | N/A |
| data | Objeto | Contiene información | N/A | N/A |
| id | cadena | Identificador único de la transacción (Regulatorio o no) | Min 1 Max 36 | data.handle |
| movementType | cadena | Identificador del schema del flujo transaccional. Ver tabla “VALORES PARA LAS LOS MOVEMENT TYPE” | lista | data.schema |
| status | cadena | Estado de la transacción. Ver tabla “VALORES PARA LAS ACCIONES Y ESTADOS (status)” | lista | meta.status |
| creationDateTime | fecha | Momento de la respuesta al participante | Ver tabla “REGLAS PARA LOS VALORES DE TIPO FECHA” | N/A |
Response creación de transferencia
{
"meta": {
"requestId": "string",
"version": "string",
"timestamp": "2026-02-23T15:20:50Z"
},
"data": {
"id": "string",
"movementType": "string",
"status": "string",
"creationDateTime": "2026-02-23T15:20:50Z"
}
} Campo id:identificación única asignada por la Entidad Participante origen de la transacción “YYYYMMDD#########TFY000000000000005”
- YYYYMMDD: fecha (8 caracteres), en horario local y que corresponde a la fecha del momento en que el SPBVI originador recibe la confirmación de la orden de pago y/o transferencia de fondo inmediata por parte del Participante Originador.
- NIT: (9 caracteres - #########) NIT del Participante Originador (sin dígito de verificación) o código asignado por el BR.
- Sigla del SPBVI Originador TFY: Corresponde a la abreviación del Sistema de Pago de Bajo Valor Inmediato Originador.
- Secuencia (15 dígitos): Número ascendente que debe ser único para cada fecha en formato “YYYYMMDD”. Si el valor tiene menos de 15 dígitos, se debe completar con ceros a la izquierda como en el ejemplo.
Aceptación en el flujo regulado
En el modelo regulado, la aceptación de una transferencia no depende de una acción explícita por parte del usuario final, como podría suceder en flujos tradicionales. Sin embargo, sí requiere de una validación formal por parte de la entidad financiera que actúa como banco receptor.
Este paso de aceptación es obligatorio antes de continuar con el procesamiento y consiste en que la entidad receptora verifique que la cuenta destino:
- Existe y está activa.
- Está habilitada para recibir pagos.
- Cumple con los requisitos establecidos por la regulación, como los límites de monto o tipo de moneda.
Una vez realizada esta validación, el banco destinatario confirma la aceptación utilizando el mecanismo estándar ya existente en ACH En Línea para flujos asincrónicos. Esta aceptación por parte de la entidad equivale a una aprobación regulatoria que habilita a continuar con la operación de crédito y la posterior liquidación a través del MOL.
Modelo de liquidación
Una vez que MOL entre en funcionamiento, cada transferencia deberá enviarse a MOL para su procesamiento y se pausará el procesamiento interno hasta recibir una llamada de continuación desde MOL.
