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 detallado
sequenceDiagram
autonumber
participant ach as ACH En Línea
participant tb as Entidad Receptora
ach ->> +tb: Llama al prepare credit
Note over tb,ach: /v1/credits
tb -->> -ach: 200 OK
tb ->> +tb: Valida que la cuenta exista
tb ->> tb: Valida que la cuenta esté activa
tb ->> tb: Valida que los datos del beneficiario coincidan con la cuenta
tb ->> tb: Valida montos y reglas de negocio
alt las validaciones no se cumplen
tb ->> -ach: Envía rechazo
end
tb ->> +ach: Confirma prepare credit
Note over ach,tb: /v1/money-movements/transfers/{id}/status
ach ->> -tb: 200 OK 1. ACH En Línea llama al banco receptor 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 del banco receptor, con la información completa de la transferencia.
Campos de entrada preparación del crédito
| Campo | Tipo | Validación | Longitud | Mapeo de datos |
|---|---|---|---|---|
| meta | objeto | N/A | N/A | N/A |
| id | cadena | Identificador único de la transacción | Min 1 Max 36 | transfers.data.handle |
| status | cadena | Estado de la transacción. Ver tabla "VALORES PARA LAS ACCIONES Y ESTADOS (status)" | lista | meta.status |
| data | objeto | N/A | N/A | N/A |
| creditId | cadena | Identificador único del crédito. La Entidad debe guardar este valor. | Min 1 Max 255 | handle |
| movementType | lista | Identificador del schema del flujo transaccional | lista | transfers.data.schema |
| amountInformation | objeto | N/A | N/A | N/A |
| amount | decimal | Valor de la transacción en base 100 | (13,2) | amount |
| currency | lista | Símbolo de la moneda de la transacción | lista | transfers.data.claims.source.symbol.handle |
| source | objeto | N/A | N/A | N/A |
| personType | lista | Tipo de persona que hace la transacción | lista | transfers.data.claims.source.custom.entityType |
| document | objeto | N/A | N/A | N/A |
| number | cadena | Número de identificación del ordenante del pago | entero | transfers.data.claims.source.custom.documentNumber |
| type | lista | Tipo de identificación del ordenante del pago | lista | transfers.data.claims.source.custom.documentType |
| fullName | cadena | Nombre comercial, se usa para persona jurídica | Min 1 Max 160 | transfers.data.claims.source.custom.name |
| firstName | cadena | Primer nombre | Min 1 Max 40 | transfers.data.claims.source.custom.firstName |
| secondName | cadena | Segundo nombre | Min 1 Max 40 | transfers.data.claims.source.custom.secondName |
| firstLastName | cadena | Primer apellido | Min 1 Max 40 | transfers.data.claims.source.custom.firstLastName |
| secondLastName | cadena | Segundo apellido | Min 1 Max 40 | transfers.data.claims.source.custom.secondLastName |
| spbviCode | lista | Nombre del SPBVI origen | lista | transfers.data.claims.source.custom.spbviCode |
| accountInformation | objeto | N/A | N/A | N/A |
| accountId | cadena | Número de cuenta del origen de la transacción | Min 1 Max 34 | transfers.data.claims.target.handle |
| accountType | lista | Tipo de cuenta del origen de la transacción | lista | transfers.data.claims.target.handle |
| financialInstitutionId | entero | Identificador de la entidad destino | Min 1 Max 9 | transfers.data.claims.target.custom.participantCode |
| target | objeto | N/A | N/A | N/A |
| personType | lista | Tipo de persona que recibe la transacción | lista | transfers.data.claims.target.custom.entityType |
| document | objeto | N/A | N/A | N/A |
| number | cadena | Número de identificación del beneficiario del pago | entero | transfers.data.claims.target.custom.documentNumber |
| type | lista | Tipo de identificación del beneficiario del pago | lista | transfers.data.claims.target.custom.documentType |
| fullName | cadena | Nombre comercial, se usa para persona jurídica | Min 1 Max 160 | transfers.data.claims.target.custom.name |
| firstName | cadena | Primer nombre | Min 1 Max 40 | transfers.data.claims.target.custom.firstName |
| secondName | cadena | Segundo nombre | Min 1 Max 40 | transfers.data.claims.target.custom.secondName |
| firstLastName | cadena | Primer apellido | Min 1 Max 40 | transfers.data.claims.target.custom.firstLastName |
| secondLastName | cadena | Segundo apellido | Min 1 Max 40 | transfers.data.claims.target.custom.secondLastName |
| targetSpbviCode | lista | Nombre del SPBVI origen | lista | transfers.data.claims.target.custom.targetSpbviCode |
| alias | objeto | N/A | N/A | N/A |
| aliasType | lista | Identificador del tipo de llave | lista | transfers.data.claims.target.custom.aliasType |
| aliasValue | cadena | Llave | Min 1 Max 92 | transfers.data.claims.target.custom.aliasValue |
| accountInformation | objeto | N/A | N/A | N/A |
| accountId | cadena | Número de cuenta del destino de la transacción | Min 1 Max 34 | transfers.data.claims.target.handle |
| accountType | lista | Tipo de cuenta del destino de la transacción | lista | transfers.data.claims.target.handle |
| financialInstitutionId | entero | Identificador de la entidad destino | Min 1 Max 9 | transfers.data.claims.target.custom.participantCode |
| qr | Objeto | N/A | N/A | N/A |
| qrId | cadena | Identificador del QR | Min 35 Max 35 | transfers.data.claims.target.custom.idQr |
Request preparación del crédito
curl --location 'https://url_participante/v1/credits' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2Vy
SWQiOiJkZW1vLXVzdWFyaW8iLCJyb2xlIjoiYXBwLXRlc3QiLCJpYXQ iOjE3MDAwMDAwMDAsImV4cCI6MTcwMDA4NjQwMH0.abc123xyz987fakeSignatureOnlyForDemoPurposes' \
--data '{...}' Data:
{
"meta": {
"id": "string",
"status": "string"
},
"data": {
"creditId": "string",
"movementType": ["lista"],
"amountInformation": {
"amount": "decimal",
"currency": ["lista"]
},
"source": {
"personType": ["lista"],
"document": {
"number": "string",
"type": ["lista"],
"fullName": "string",
"firstName": "string",
"secondName": "string",
"firstLastName": "string",
"secondLastName": "string"
},
"spbviCode": ["lista"],
"accountInformation": {
"accountId": "string",
"accountType": ["lista"],
"financialInstitutionId": "entero"
}
},
"target": {
"personType": ["lista"],
"document": {
"number": "string",
"type": ["lista"],
"fullName": "string",
"firstName": "string",
"secondName": "string",
"firstLastName": "string",
"secondLastName": "string"
},
"targetSpbviCode": ["lista"],
"alias": {
"aliasType": ["lista"],
"aliasValue": "string"
},
"accountInformation": {
"accountId": "string",
"accountType": ["lista"],
"financialInstitutionId": "entero"
},
"qr": {
"qrId": "string"
}
}
}
} 2. Validaciones de reglas de negocio y demás controles (Paso 2 al 5)
La Entidad Receptora ejecuta las validaciones de reglas de negocio y demás controles sobre el beneficiario.
3. Procesar rechazo de la transferencia (Paso 7)
En caso de que aplique y las validaciones de la Entidad Participante hayan generado alguna novedad. La transferencia debe rechazarse, por ende, la Entidad debe enviar el respectivo rechazo via POST al endpoint v1/money-movements/transfers/{id}/status.
Campos de entrada rechazo
Campos de entrada rechazo (Headers)
| Campo | Descripción | Validación | Longitud |
|---|---|---|---|
| x-hash | Hash de seguridad de la solicitud | Requerido | Min 64 Max 64 |
Campos de entrada rechazo (Body)
| Campo | Tipo | Validación | Longitud | Mapeo de datos |
|---|---|---|---|---|
| data | Object | Requerido | - | N/A |
| status | String | Requerido = REJECTED | Max 100 | transfers.data.status |
| creationDateTime | DateTime | Requerido | - | transfers.data.creationDateTime |
| coreId | String | Opcional | Max 100 | transfers.data.coreId |
| operation | String | Opcional | Max 100 | transfers.data.operation |
Request rechazo
curl --location 'https://url_ach/v1/money-movements/transfers/{id}/status' \
--header 'x-hash: 695ffdf84f0dad0c19e3b8b09a4565246c156d747ffb26149e4c2dc5d3b66ca1' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VySWQiOiJkZW1vLXVzdWFyaW8iLCJyb2xlIjoiYXBwLXRlc3QiLCJpYXQ iOjE3MDAwMDAwMDAsImV4cCI6
MTcwMDA4NjQwMH0.abc123xyz987fakeSignatureOnlyForDemoPurposes' \
--data '{...}' {
"data": {
"status": "REJECTED",
"creationDateTime": "2026-05-15T14:30:00Z",
"coreId": "string",
"operation": "string"
}
} Campos de salida rechazo
| Campo | Tipo | Validación | Longitud | Mapeo de datos |
|---|---|---|---|---|
| data | objeto | N/A | N/A | N/A |
| id | cadena | Identificador único de la transacción | Min 1 Max 36 | data.handle |
| status | cadena | Estado actual de la transacción. Ver tabla "VALORES PARA LAS ACCIONES Y ESTADOS (status)" | lista | meta.status |
| creationDateTime | fecha | Momento del mensaje de respuesta | Ver tabla "REGLAS PARA LOS VALORES DE TIPO FECHA" | N/A |
| movementType | lista | Identificador del schema del flujo transaccional. Ver tabla "VALORES PARA LAS LOS MOVEMENT TYPE" | lista | data.schema |
Response rechazo
{
"data": {
"id": "string",
"status": "REJECTED",
"creationDateTime": "2026-05-15T14:30:00Z",
"movementType": ["lista"]
}
} 4. Confirma preparación del crédito (Paso 8)
La Entidad Receptora envía la confirmación de la preparación del crédito a ACH En Línea. Solicitud POST al endpoint v1/money-movements/transfers/{id}/status
Campos de entrada confirmación preparación crédito
Campos de entrada confirmación de 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 confirmación del crédito (body)
| Campo | Tipo | Validación | Longitud | Obligatoriedad |
|---|---|---|---|---|
| data | objeto | N/A | N/A | SI |
| status | cadena | Estado en el que quedará la transacción. Ver tabla "VALORES PARA LAS ACCIONES Y ESTADOS (status)" | Lista | SI |
| creationDateTime | fecha | Momento en el que se confirma la preparación del crédito | Ver tabla "REGLAS PARA LOS VALORES DE TIPO FECHA" | SI |
| coreId | cadena | Identificador interno del banco para la preparación del crédito. | Min 1 Max 255 | SI |
| operation | cadena | Operación que se está reportando. Ver tabla "VALORES PARA LAS OPERACIONES" | Lista | SI |
Request confirmación preparación del crédito
curl --location 'https://url_ach/v1/money-movements/transfers/{id}/status' \
--header 'x-hash: 695ffdf84f0dad0c19e3b8b09a4565246c156d747ffb26149e4c2dc5d3b66ca1' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyS
WQiOiJkZW1vLXVzdWFyaW8iLCJyb2xlIjoiYXBwLXRlc3QiLCJpYXQ iOjE3MDAwMDAwMDAsImV4cCI6MTcwMDA4NjQwMH0.abc123xyz987fakeSignatureOnlyForDemoPurposes' \
--data '{...}' {
"data": {
"status": "string",
"creationDateTime": "2026-05-15T14:30:00Z",
"coreId": "string",
"operation": "string"
}
} Response confirmación preparación del crédito
{
"data": {
"id": "string",
"status": "string",
"creationDateTime": "fecha",
"movementType": ["lista"]
}
} 