Especificación Técnica API Dispersión de Fondos Asíncrona

1. INTRODUCCION

Este documento describe cómo integrarse con la API de procesamiento de lotes de ATC. A través de este servicio, los comercios pueden gestionar sus transacciones utilizando lotes de forma simple y controlada.

Con esta API es posible autorizar lotes, consultar su estado en cualquier momento y recibir notificaciones automáticas con el resultado de cada lote.

La integración incluye los siguientes pasos:

  • Autenticarse mediante OAuth 2.0 (Client Credentials) para obtener un Access Token.
  • Enviar un lote para su autorización.
  • Consultar el estado del lote cuando sea necesario.
  • Recibir una notificación automática (Webhook/Callback) con el resultado del lote.

Credenciales

El Token Basic (Authorization), el client_id y el access_token de producción son proporcionados exclusivamente por ATC para cada integrador habilitado.

2. HEADER

Todos los servicios de la API requieren el envío de los siguientes encabezados HTTP en cada petición. El Access Token debe obtenerse previamente mediante el servicio de autenticación OAuth 2.0 (ver sección 3.1).

HeaderDescripciónOblig.Ejemplo
AuthorizationToken de autorización. Se envía como Basic.SíBasic ODBiM2M1NWQtNWNiNi00OWRlLTkxYTAtMDcwZDM1M2IwM==
client_idIdentificador único del cliente integrador. Proporcionado por ATC.Sí1e063b89-....-....-....-ed73d60cbc67
Content-TypeFormato del cuerpo de la petición. Para todos los servicios JSON.Síapplication/json
branchCodeCódigo de comercio.Sí445545
information icon
Autenticación previa obligatoria Para obtener el access_token que se usa en el header Authorization, primero debe invocarse el servicio de autenticación OAuth (sección 3.1).

3. AUTORIZACION DE LOTES

3.1. Autenticación — Obtención del Access Token

Antes de poder autorizar lotes, el integrador debe obtener un Access Token válido mediante el flujo OAuth 2.0 Client Credentials.

AtributoValor
Método HTTPPOST
ENDPOINT/oauth-client-credentials/access-token
Content-Typeapplication/x-www-form-urlencoded
Query Paramgrant_type=client_credentials

Header de autenticación

HeaderDescripciónObligatorio
AuthorizationCodificado en Base64 (client_id:client_secret). Ej: Basic ODBiM2M1NWQtNWNiNi00OWRlLTkxYTAtM==Sí
Content-Typeapplication/x-www-form-urlencodedSí

Request — Autenticación (obtener Access Token)

http
600;">POST /oauth-client-credentials/access-token?grant_type=client_credentials Headers: Authorization: Basic ODBiM2M1NWQtNWNiNi00OWRlLTkxYTAtMDcwZDM1M2IwMDQ3OmQ2OWVlZjQxLTFkMmYtNDBlZC1iNGQ0LTc5MzFiYjljYmI3NA== Content-Type: application/x-www-form-urlencoded

Response — Access Token

json
{ "access_token": "1442981c-....-....-b...-ea12258c9...", "token_type": "access_token", "expires_in": 3600 }

Respuesta exitosa — Access Token

CampoTipoDescripción
access_tokenStringToken de portador para usar en los headers de los servicios QR.
token_typeStringTipo de token. Siempre Bearer.
expires_inIntegerTiempo de validez en segundos.
scopeStringAlcance del token otorgado.

4. Autorizar Lote

4.1. Método para autorizar el lote

Este método autoriza y valida el lote de transacciones. Una vez obtenido el Access Token, se puede invocar los servicios.

AtributoValor
Método HTTPPOST
URL (TEST)/payout/async/v3/lote/autorizar
Header: access_token{access_token obtenido en autenticación}
Header: client_id{client_id provisto por ATC}
Header: Content-Typeapplication/json
Header: branchCode455544 ID de comercio

Request — autorizar lote

http
600;">POST /payout/async/v3/lote/autorizar Headers: access_token: 1442981c-....-....-b...-ea12258c9... client_id: 1e063b89-....-....-....-ed73d60cbc67 branchCode: 455544 Content-Type: application/json

Campos del Request Body

json
{ "processId": "66ec5b3d-61ea-4254-b366-7104545aa3c6", "webhookUrl": "https://dominio.com/api/confirmed?token=<token_del_comercio>", "transacciones": [ { "transaccionId": "001002", "importe": 50.00, "fechaTransaccion": "2026-01-19", "cuentaOrigen": "484811311404044", "cuentaDestino": "1311404044", "codeBanco": "1018", "codeSucursal": "LPZ", "glosa": "DETALLE", "ciNitDestino": "54524525212", "titularDestino": "JOSE PEREZ", "tipoMoneda": "BOB" } ] }

Campos de la solicitud

Encabezado de la Solicitud
CampoTipo de DatoLongitudRequeridoDescripción
processIdstring36SíIdentificador único del proceso de transacciones.
webhookUrlstring255SíLa información se usará para notificar el pago mediante método POST.
Transacciones (array de objetos)
Cada objeto dentro del array transacciones debe contener los siguientes campos:
CampoTipo de DatoLongitudRequeridoDescripción
transaccionIdstringMin=3, Max=14SíIdentificador único de la transacción.
importedecimal19.2SíMonto de dinero que será transferido.
fechaTransaccionstring10SíFecha de realización de la transacción (yyyy-mm-dd).
cuentaOrigenstringMin=6, Max=30SíLa cuenta virtual de ATC.
cuentaDestinostringMin=6, Max=30SíNúmero de cuenta bancaria destino.
codeBancostringMin=3, Max=8SíCódigo del banco destinatario donde se acreditará el importe (API – Lista de código bancos).
codeSucursalstring3SíSucursal de la cuenta origen: Cochabamba CBB, Cobija COB, La Paz LPZ, Oruro ORU, Potosí POT, Santa Cruz SCZ, Sucre SUC, Tarija TJA y Trinidad TRI.
glosastringMin=3, Max=80SíDescripción o motivo de la transacción.
ciNitDestinostringMin=5, Max=20SíDocumento de identidad o NIT del titular de la cuenta destino.
titularDestinostringMin=3, Max=80SíNombre completo del titular de la cuenta destino.
tipoMonedastring3SíTipo de moneda: BOB, USD.
Reservado1stringMax=255OpcionalReservado para otros usos.
Reservado2stringMax=255OpcionalReservado para otros usos.

Respuesta Exitosa

json
{ "code": "00", "message": "success", "data": { "nroLote": "2601191040", "processId": "4554645646446", "transacciones": [ { "transaccionId": "001001", "estado": "PENDIENTE", "numeroReferencia": "502125545442601", "mensaje": "Transacción en proceso." } ] } }

Detalle de la respuesta

CampoTipoLongitudDescripción
nroLotestringMax=14Número de lote de transacciones.
processIdstring36Identificador único del proceso.
transaccionesarray—Lista de transacciones procesadas.
transaccionIdstringMax=14ID único de cada transacción del cliente.
estadostringMax=16Estado actual de la transacción (INICIALIZADO, ERROR).
numeroReferenciaIntegerMax=20Número de referencia de transacción de ATC.
mensajestringMax=80Mensaje descriptivo del estado.
codestringMax=2Código de respuesta del sistema.
messagestring80Mensaje general de la operación.
Descripción:
  • data: Objeto principal con la respuesta.
  • transacciones: Array que contiene objetos de transacción.
  • Cada transacción tiene: transaccionId, estado, mensaje.
En caso de no encontrar al banco:

Respuesta de Error

json
{ "data": { "nroLote": "2601191040", "processId": "66ec5b3d-61ea-4254-b366-7104545aa3c9", "transacciones": [ { "transaccionId": "001002", "estado": "ERROR", "mensaje": "Codigo de banco no habilitado" } ] }, "code": "00", "message": "Operación exitosa" }
Errores de Validaciones:
json
{ "data": null, "code": "02", "message": "processId: El processId debe tener formato UUID y contener 36 caracteres" }
json
{ "data": null, "code": "02", "message": "transacciones[0].fechaTransaccionValida: La fecha debe ser mayor o igual al día de hoy" }

5. Consultar Estado de Lote o Transacción

5.1. Método para consultar el estado

Este método permite consultar el estado actual de un lote o una transacción específica.

Una vez obtenido el Access Token, se puede invocar los servicios.

AtributoValor
Método HTTPGET
URL (TEST)/payout/async/v3/lote/estado
Header: access_token{access_token obtenido en autenticación}
Header: client_id{client_id provisto por ATC}
Header: Content-Typeapplication/json
Header: branchCode455544 ID de comercio

Request — Consultar Estado de Lote

Ejemplos de solicitud:

Método 1 con numero de lote

http
600;">POST /payout/async/v3/lote/estado/{processId}?nroLote=2601191045 Headers: access_token: 1442981c-....-....-b...-ea12258c9... client_id: 1e063b89-....-....-....-ed73d60cbc67 branchCode: 455544 Content-Type: application/json

Método 2 con ID de transacción

http
600;">POST /payout/async/v3/lote/estado/{processId}?transaccionId=545455 Headers: access_token: 1442981c-....-....-b...-ea12258c9... client_id: 1e063b89-....-....-....-ed73d60cbc67 branchCode: 455544 Content-Type: application/json

Parámetros de la Solicitud de Consulta

CampoTipo de DatoLongitudRequeridoDescripción
nroLotestringMax=14NoNúmero del lote que se desea consultar.
transaccionIdstring36NoIdentificador único de la transacción a consultar.

Response

CampoTipoLongitudDescripción
nroLotestringMax=14Número de lote de transacciones.
transaccionesarray—Lista de transacciones procesadas.
transaccionIdstringMax=14ID único de cada transacción.
numeroReferenciastringMax=20ID único referencia ATC.
estadostringMax=16Estado actual de la transacción (PAGADO, PENDIENTE, TRANSITO, CANCELADO).
mensajestringMax=80Mensaje descriptivo del estado.
cuentaOrigenstringMax=30Número de cuenta originante (cuenta virtual ATC).
cuentaDestinostringMax=30Número de cuenta destino asociada.
numeroAchstring20Número de identificación ACH.
numeroDestinatariostring20Número de identificación Banco destinatario.
ciClientestringMax=30Cédula de identidad del cliente.
nombreClientestringMax=30Nombre completo del cliente.
fechaHoraTransaccionLocalDateTime—Fecha y hora de la transacción.
codigoBancostringMax=10Código de Banco.
nombreBancostringMax=100Nombre de Banco.
importedouble19.2Importe de la transacción.
monedastring3Tipo de moneda de la transacción.
codestring2Código de respuesta del sistema.
messagestring80Mensaje general de la operación.
Descripción:
  • processId no está presente en esta respuesta.
  • message/code es "00" (éxito).
  • Nuevos campos: cuentaOrigen/cuentaDestino, numeroAch, ciCliente, nombreCliente.

Respuesta Exitosa

json
{ "code": "00", "message": "Operación procesada correctamente", "nroLote": "L20260518000123", "transacciones": [ { "transaccionId": "0121214", "numeroReferencia": "51021455454645646", "estado": "PAGADO", "mensaje": "Transacción acreditada en cuenta destino", "cuentaOrigen": "000123456", "cuentaDestino": "1234567890123", "numeroAch": "14000260518000001", "numeroDestinatario": "20260518000001", "ciCliente": "4567890", "nombreCliente": "Juan Pérez", "fechaHoraTransaccion": "2026-05-18T09:15:42", "codigoBanco": "1014", "nombreBanco": "Banco Nacional de Bolivia S.A.", "importe": 85.00, "moneda": "BOB" } ] }

Respuesta de Error

Errores posibles:
CódigoDescripción
04Lote o transacción no encontrados: no se encontró el lote o la transacción.
99Error de consulta: ocurrió un error en la consulta del estado.
02Error en la validación: campo requerido al menos uno: nroLote o transaccionId.
json
{ "data": null, "code": "04", "message": "Transacción no encontrada" }

6. Consultar de Bancos

6.1. Método Consultar de Bancos

Este método permite obtener la lista de bancos disponibles para realizar transacciones o acreditaciones.

Parámetros de la Solicitud de Consulta

CampoTipo de DatoRequeridoDescripción
No aplica——Este método no requiere parámetros.

Respuesta Exitosa

json
{ "code": "00", "message": "success", "data": [ { "codigoBanco": "0101", "descripcion": "Banco Nacional de Crédito" }, { "codigoBanco": "0202", "descripcion": "Banco de la Comunidad" } ] }

7. Webhook de Notificación Transacciones

El comercio debe exponer un endpoint que recibirá las notificaciones de ATC una vez procesadas las transacciones. La URL y el token de seguridad se registran en el campo webhookUrl al momento de consumir el API de Autorizar.
text
POST https://dominio.com/api/confirmed?token=<token_del_comercio>
information icon
Nota: Solo se permite conexión tras coordinación con el área de Infraestructura y Redes. Seguridad: token.

Campos enviados por ATC

CampoTipoLongitudDescripción
nroLotestringMax=14Número de lote de transacciones.
transaccionIdstringMax=14ID único de cada transacción.
numeroReferenciastringMax=20ID único referencia ATC.
estadostringMax=16Estado actual de la transacción (PAGADO, CANCELADO).
mensajestringMax=80Mensaje descriptivo del estado.
cuentaOrigenstringMax=30Número de cuenta originante (cuenta virtual ATC).
cuentaDestinostringMax=30Número de cuenta destino asociada.
numeroAchstring20Número de identificación ACH.
numeroDestinatariostring20Número de identificación Banco destinatario.
ciClientestringMax=30Cédula de identidad del cliente.
nombreClientestringMax=30Nombre completo del cliente.
fechaHoraTransaccionLocalDateTime—Fecha y hora de la transacción.
codigoBancostringMax=10Código de Banco.
nombreBancostringMax=100Nombre de Banco.

Ejemplo — Body recibido por el comercio

json
{ "nroLote": "2601191045", "transaccionId": "0121214", "numeroReferencia": "51021455454645646", "estado": "PAGADO", "mensaje": "Transacción acreditada en cuenta destino", "cuentaOrigen": "000123456", "cuentaDestino": "1234567890123", "numeroAch": "14000260518000001", "numeroDestinatario": "20260518000001", "ciCliente": "4567890", "nombreCliente": "Juan Pérez", "fechaHoraTransaccion": "2026-05-18T09:15:42", "codigoBanco": "1014", "nombreBanco": "Banco Nacional de Bolivia S.A.", "importe": 85.00, "moneda": "BOB" }

Response Esperado del Comercio

CampoTipoDescripción
nroLotestringNúmero de referencia a la transacción.
numeroReferenciastringID único referencia ATC.
codigoRespuestastringEXITOSO o FALLIDO confirmando que el webhook fue recibido correctamente.
detalleRespuestastringMensaje opcional (por ejemplo, null si todo OK).

Ejemplo JSON

json
{ "nroLote": "2601191045", "numeroReferencia": "582154541121", "codigoRespuesta": "EXITOSO", "detalleRespuesta": null }

8. Resumen de APIs

MétodoEndpointDescripción
POST/payout/async/v3/lote/autorizarRegistro de autorizaciones.
GET/payout/async/v3/lote/estado/{processId}Consulta el estado de un lote o una transacción. Puedes consultar por {nroLote} o {transaccionId}.
POST/payout/async/v3/bancosDevuelve la lista de bancos disponibles para las transacciones. No requiere parámetros adicionales.

9. AMBIENTES

El siguiente cuadro contiene los datos de ambientes con la URL y Token respectivamente.

DesarrolloCertificaciónProducción
URL BASEhttps://atcgwapitest.redenlace.com.bo/desarrollo/https://atcgwapitest.redenlace.com.bo/sandbox/https://api.redenlace.com.bo/
Token BasicClient ID=80b3c55d-5cb6-49de-91a0-070d353b0047
Client Secret=d69eef41-1d2f-40ed-b4d4-7931bb9cbb74
Solicitar el user y pass mediante correo electrónico.Solicitar el user y pass mediante correo electrónico.