Cómo enviar cuenta a cuenta
Guia sobre transferencias cuenta a cuenta
El flujo base de ACH En Línea permite procesar transferencias reguladas y no reguladas a través de esquemas dinámicos referenciados en el campo MovementType. El sistema al detectar el valor para el flujo no regulado habilita las capacidades requeridas para el procesamiento de la transaccional no regulada (sin aplicar los topes de Bre-B y sin liquidación en el MOL).
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-TRANSFER, P2B-TRANSFER, B2B-TRANSFER y B2P-TRANSFER.
Ejemplo de una transferencia no 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 | SI |
| 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 |
| deviceHash | 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 |
| 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.
Aceptación en el flujo no regulado
La aceptación de una transferencia no depende de una acción explícita por parte del usuario final. 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.
Modelo de liquidación
Para el flujo no regulado, ACH En Línea implementa su propio mecanismo de liquidación y compensación a través de Prefondeo y reintegro de recursos soportados a través del movimiento de dinero en las cuentas CUD de las Entidades Participantes y ACH Colombia.
