- Cómo enviar a Bre-b
- Cómo debitar al usuario origen
- Cómo aceptar la transferencia
- Cómo acreditar al beneficiario
- Notificación estado final
- Como enviar marcas de tiempo
- Cómo reintentar créditos
- Lineamientos del flujo regulatorio
- Errores del MOL
- Como consultar una transferencia
- Gestión de errores servicios ACH En-línea
- Flujos de excepción
- Tablas de referencia
- Token de autenticación
Cómo aceptar la transferencia
Validación de aceptación por el banco destino
Una vez confirmado el débito, ACH En Línea ejecuta controles antifraude sobre la transferencia y contacta a la Entidad Receptora para solicitar la aceptación del pago (prepare credit). Este paso permite a la Entidad Receptora validar la información de la cuenta destino y confirmar que el pago puede ser recibido correctamente.
Durante esta etapa, la Entidad Receptora debe realizar las siguientes validaciones:
- Que la cuenta destino exista.
- Que la cuenta esté activa y habilitada para recibir pagos.
- Que los datos del beneficiario coincidan con los de la cuenta.
- Que el monto de la transferencia no supere los límites definidos por la Entidad Receptora.
La notificación de este paso lo realiza la Entidad Participante Receptora a través de la respuesta al llamado orquestado por ACH En Línea para la preparación del crédito.
Aceptación de la transferencia – Paso a paso detallado
sequenceDiagram
autonumber
participant ach as ACH En Línea
participant tb as Entidad Receptora
ach ->> tb: Llama al prepare credit
status: prepare
Note over tb,ach: POST /v1/credits
tb -->> ach: 200 OK
tb ->> tb: Validar que
la cuenta exista
tb ->> tb: Validar que
la cuenta esté activa
tb ->> tb: Validar que
los datos del benficiario
coincidan con la cuenta
tb ->> tb: Validar montos
y reglas de negocio
tb ->> tb: Validar otras
reglas de negocio
tb ->> ach: Confirma preparación del credit
status: prepared
note over tb,ach: POST /v1/money-movement/transfers/{id}/status
ach -->> +tb: 200 OK
1. ACH En Línea llama a la Entidad Receptora para procesar la operación de preparación del crédito
ACH En Línea inicia el proceso mediante una solicitud POST al endpoint v1/credits de la Entidad Receptora, con la información completa de la transferencia. Estado "prepare"
Dominio: URL Base Entidado POST /v1/credits Campos de entrada preparación del crédito
| Campo | Tipo | Validación | Longitud | Obligatoriedad |
|---|---|---|---|---|
| meta | objeto | N/A | N/A | SI |
| id | cadena | Identificador único de la transacción. | Min 1 Max 36 | SI |
| status | cadena | Estado de la transacción. Ver Tablas de referencia: "Estados de las transacciones". | Min 1 Max 8 | SI |
| data | objeto | N/A | N/A | SI |
| creditId | cadena | Identificador del credit prepare, el banco debe guardar este valor. | Min 1 Max 36 | SI |
| movementType | lista | Identificador del schema del flujo transaccional. Ver Tablas de referencia: "Valores para el campo movementType". | 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. | (13,2) | SI |
| currency | lista | Valor por defecto "COP" | Lista | SI |
| source | objeto | N/A | N/A | SI |
| personType | lista | Tipo de persona que originda la transacción. Ver Tablas de referencia: "Valores para el campo personType". | lista | SI |
| document | objeto | N/A | N/A | SI |
| number | cadena | Número de identificación del ordenante del pago. Solo números, si el campo type es NIT. El valor no debe superar los 9 dígitos y sin caracteres especiales. | entero | SI |
| type | lista | Tipo de identificación del ordenante del pago. Ver Tablas de referencia: "Tipos 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 |
| accountInformation | objeto | N/A | N/A | SI |
| accountId | cadena | Número de cuenta del origen de la transacción. Tomar la parte en negrilla. svgs:20753228543@bancorojo.com.co | Min 1 Max 34 | SI |
| accountType | lista | Tipo de cuenta del origen de la transacción. "VALORES PARA EL TIPO DE CUENTA". Traducir de la tabla la parte en negrilla. svgs:20753228543@bancorojo.com.co | lista | SI |
| financialInstitutionId | entero | Identificador de la entidad origen. Número NIT sin dígito de verificación y sin caracteres especiales. | Min 1 Max 9 | SI |
| target | objeto | N/A | N/A | SI |
| personType | lista | Tipo de persona beneficiaria de la transacción. Ver Tablas de referencia: "Valores para el campo personType". | lista | SI |
| document | Objeto | N/A | N/A | SI |
| number | cadena | Número de identificación del beneficiario del pago. Solo números, si el campo type es NIT. El valor no debe superar los 9 dígitos y sin caracteres especiales. | entero | SI |
| type | lista | Tipo de identificación del beneficiario del pago. Ver Tablas de referencia: "Tipos 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 |
| accountInformation | objeto | N/A | N/A | SI |
| accountId | cadena | Número de cuenta del beneficiario de la transacción. Tomar la parte en negrilla. svgs:20753228543@bancorojo.com.co | Min 1 Max 34 | SI |
| accountType | lista | Tipo de cuenta del beneficiario de la transacción. Traducir de la tabla la parte en negrilla. svgs:20753228543@bancorojo.com.co | lista | SI |
| financialInstitutionId | entero | Identificador de la entidad destino. Número NIT sin dígito de verificación y sin caracteres especiales. | Min 1 Max 9 | SI |
Request preparación del crédito
curl --location 'https://url_participante/v1/credits' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJkZW1vLXVzdWFyaW8iLCJyb2xlIjoiYXBwLXRlc3QiLCJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTcwMDA4NjQwMH0.abc123xyz987fakeSignatureOnlyForDemoPurposes' \
--data '{...}' Data:
{
"meta": {
"id": "7d7c8b5c-9e2c-4ed8-a0d1-9a240f8c1002",
"status": "prepare"
},
"data": {
"creditId": "crd-98ab1234-5678-4def-9876-123456789001",
"movementType": "B2B-TRANSFER",
"amountInformation": {
"amount": 2500000.00,
"currency": "COP"
},
"source": {
"personType": "LEGAL",
"document": {
"number": "900123456",
"type": "NIT"
},
"fullName": "COMERCIALIZADORA ABC SAS",
"accountInformation": {
"accountId": "200000123456",
"accountType": "CCTE",
"financialInstitutionId": 900123456
}
},
"target": {
"personType": "LEGAL",
"document": {
"number": "901234567",
"type": "NIT"
},
"fullName": "PROVEEDORES XYZ SAS",
"accountInformation": {
"accountId": "300000987654",
"accountType": "CCTE",
"financialInstitutionId": 901234567
}
}
}
} Response preparación del crédito
HTTP/1.1 200 OK
Content-Length: 0 2. Validaciones de reglas de negocio y demás controles
Después de recibir la solicitud de preparación del crédito, La Entidad Participante realiza todas las validaciones de reglas de negocio y controles para garantizar la integridad de la operación. Si alguna validación no se cumple, se rechaza la operación. Si todas se validan correctamente, se procede con la confirmación.
3. Procesar rechazo de la transferencia
Si alguna de las validaciones no se cumple, la Entidad Participante receptora rechaza la operación enviando una solicitud al endpoint v1/money-movement/transfers/{id}/status con el estado "failed".
Dominio: https://bank.apihub.crt.achcolombia.com.co POST v1/money-movement/transfers/{id}/status Campos de entrada rechazo
Campos de entrada error en la preparación del crédito (header)
| Campo | Tipo | Validación | Descripción | Obligatoriedad |
|---|---|---|---|---|
| x-hash | String | Min 64 – Máx 64 | Cadena de comprobación de integridad de la trama. Serializar el objeto data y aplicar SHA256. | SI |
Campos de entrada error en la preparación del crédito (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 | N/A | SI |
| data | objeto | N/A | N/A | SI |
| movementType | lista | Identificador del schema del flujo transaccional. Ver Tablas de referencia: "Valores para el campo movementType". | Lista | SI |
| status | cadena | Estado de la transacción. Ver Tablas de referencia: "Estados de las transacciones". | Lista | SI |
| creationDateTime | fecha | Momento en el que se confirma la preparación del débito o crédito | N/A | SI |
| creditId | cadena | Identificador del credit prepare, el banco debe enviar el valor que corresponde a la transferencia. Este valor fue entregado por ACH En-línea en el llamado al endpoint /v1/credits. | Min 1 Max 36 | COND Si la acción es un débito se debe informar este campo |
| coreId | cadena | Identificador interno del banco para la preparación del débito o crédito. | Min 1 Max 255 | SI |
| custom | objeto | N/A | N/A | COND Si el status = failed o aborted. Se debe informar este objeto con sus campos. |
| error | subobjeto | N/A | N/A | COND |
| code | cadena | Identificador del error. Ver tabla "VALORES PARA EL CAMPO CODE DEL STATUS". | Min 1 Max 36 | COND |
| description | cadena | Descripción del error | Min 1 Max 255 | COND |
Request rechazo
curl --location 'https://url_ach/v1/money_movement/transfers/{id}/status' \
--header 'hash: 695ffdf84f0dad0c19e3b8b09a4565246c156d747ffb26149e4c2dc5d3b66ca1' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJkZW1vLXVzdWFyaW8iLCJyb2xlIjoiYXBwLXRlc3QiLCJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTcwMDA4NjQwMH0.abc123xyz987fakeSignatureOnlyForDemoPurposes' \
--data '{
"meta": {
"requestId": "45cdaa41-b567-4057-9fb7-7240efdfb437",
"version": "1.0.0",
"timestamp": "2026-06-15T14:27:28.001"
},
"data": {
"movementType": "P2P-TRANSFER",
"status": "failed",
"creationDateTime": "2026-06-15T14:27:28.001",
"creditId": "deb_03rgXTmRB7aI7jomy",
"coreId": "13456278395678906789"
},
"custom": {
"error": {
"code": "bridge.account-not-found",
"description": "1039: Cuenta no encontrada"
}
}
}' Response rechazo preparación crédito
HTTP/1.1 200 OK
Content-Length: 0 4. Confirma preparación del crédito
La Entidad Receptora envía la confirmación de la preparación del crédito a ACH En Línea enviando la confirmación al servicio expuesto por ACH En-líneav1/money-movement/transfers/{id}/status con el estado "prepared".
Dominio: https://bank.apihub.crt.achcolombia.com.co POST v1/money-movement/transfers/{id}/status Campos de entrada confirmación preparación crédito
Campos de entrada confirmación preparación crédito (header)
| Campo | Tipo | Validación | Descripción | Obligatoriedad |
|---|---|---|---|---|
| x-hash | String | Min 64 – Máx 64 | Cadena de comprobación de integridad de la trama. Serializar el objeto data y aplicar SHA256. | SI |
Campos de entrada confirmación del débito (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 | N/A | SI |
| data | objeto | N/A | N/A | SI |
| movementType | lista | Identificador del schema del flujo transaccional. Ver Tablas de referencia: "Valores para el campo movementType". | Lista | SI |
| status | cadena | Estado de la transacción. Ver Tablas de referencia: "Estados de las transacciones". | Lista | SI |
| creationDateTime | fecha | Momento en el que se confirma la preparación del débito o crédito | N/A | SI |
| creditId | cadena | Identificador del credit prepare, el banco debe enviar el valor que corresponde a la transferencias. Este valor fue entregado por ACH En-línea en el llamado al endpoint /v1/credits. | Min 1 Max 36 | COND Si la acción es un débito se debe informar este campo |
| coreId | cadena | Identificador interno del banco para la preparación del débito o crédito. | Min 1 Max 255 | SI |
Request confirmación de preparación del crédito
curl --location 'https://url_ach/v1/money-movement/transfers/{id}/status' \
--header 'x-hash: 695ffdf84f0dad0c19e3b8b09a4565246c156d747ffb26149e4c2dc5d3b66ca1' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJkZW1vLXVzdWFyaW8iLCJyb2xlIjoiYXBwLXRlc3QiLCJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTcwMDA4NjQwMH0.abc123xyz987fakeSignatureOnlyForDemoPurposes' \
--data '{...}' {
"meta": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"version": "1.0.0",
"timestamp": "2026-08-20T14:30:00-05:00"
},
"data": {
"movementType": "P2P-TRANSFER",
"status": "prepared",
"creationDateTime": "2026-08-20T14:35:20-05:00",
"creditId": "dbt-3f8d8b9a-1234-4567-89ab-123456789abc",
"coreId": "CORE-987654321"
}
} Response confirmación preparación crédito
HTTP/1.1 200 OK
Content-Length: 0 