Especificación Técnica Servicio API QR SIMPLE con OAuth 2.0
1. INTRODUCCIÓN
El presente documento describe los lineamientos y especificaciones técnicas para la integración con la API de Generación y Consulta de Códigos QR SIMPLE de ATC (Redenlace Bolivia). El servicio permite a establecimientos y aplicaciones cliente generar códigos QR de cobro y verificar el estado de las transacciones asociadas.
La integración contempla los siguientes flujos:
- Autenticación mediante OAuth 2.0 (Client Credentials) para obtención del Access Token.
- Generación de un código QR de pago.
- Verificación del estado de la transacción QR.
- Notificación automática de pago confirmado mediante Webhook.
Credenciales
El Token Basic (Authorization), el client_id y el access_token de producción son proporcionados exclusivamente por ATC para cada integrador habilitado. Los valores mostrados en este documento corresponden únicamente al ambiente de pruebas.

Las llaves obtenidas a través de este Developer Portal son exclusivamente para el ambiente Sandbox.
Para solicitar las llaves de Producción, se debe seguir el siguiente proceso:
- Coordinar con el equipo de ATC para realizar las pruebas en el ambiente Sandbox.
- Las pruebas en Sandbox deben ser aprobadas por nuestro equipo de integraciones.
- Completar el formulario de checklist correspondiente que te otorgará nuestro equipo de integraciones.
- Una vez concluidas y aprobadas las pruebas, y con el checklist debidamente llenado, se podrá solicitar la generación de las llaves productivas.
Sin la aprobación de las pruebas en Sandbox y el checklist completo, no se generarán llaves de producción.
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). El token Basic requerido en ese paso es provisto por ATC.
3. GENERAR TRANSACCIÓN QR
3.1. Autenticación — Obtención del Access Token
Antes de poder generar un QR, el integrador debe obtener un Access Token válido mediante el flujo OAuth 2.0 Client Credentials.
| Atributo | Valor |
|---|
| Método HTTP | POST |
| URL (TEST) | /oauth-client-credentials/access-token?grant_type=client_credentials |
| Content-Type | application/x-www-form-urlencoded |
| Query Param | grant_type=client_credentials |
Request — Autenticación (obtener Access Token)
600;">POST /oauth-client-credentials/access-token?grant_type=client_credentials
Headers:
Authorization: Basic ODBiM2M1NWQtNWNiNi00OWRlLTkxYTAtMDcwZDM1==
Content-Type: application/x-www-form-urlencoded
600;">POST /oauth-client-credentials/access-token?grant_type=client_credentials
Headers:
Authorization: Basic ODBiM2M1NWQtNWNiNi00OWRlLTkxYTAtMDcwZDM1==
Content-Type: application/x-www-form-urlencoded
| Header | Descripción | Obligatorio |
|---|
Authorization | Token Basic. Codificado en Base64 (client_id:client_secret). | Sí |
Content-Type | application/x-www-form-urlencoded | Sí |
Respuesta exitosa — Access Token
{
"access_token": "1442981c-....-....-b...-ea12258c9...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "api.qr"
}
{
"access_token": "1442981c-....-....-b...-ea12258c9...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "api.qr"
}
| Campo | Tipo | Descripción |
|---|
access_token | String | Token de portador para usar en los headers de los servicios QR. |
token_type | String | Tipo de token. Siempre 'Bearer'. |
expires_in | Integer | Tiempo de validez en segundos. |
scope | String | Alcance del token otorgado. |
3.2. Servicio de Generación de QR
Una vez obtenido el Access Token, se puede invocar el servicio de generación del código QR de pago.
Request — Generar QR
| Atributo | Valor |
|---|
| Método HTTP | POST |
| URL | /qr/simple/v2/generate |
Header: access_token | {access_token obtenido en autenticación} |
Header: client_id | {client_id provisto por ATC} |
Header: Content-Type | application/json |
600;">POST /qr/simple/v2/generate
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
600;">POST /qr/simple/v2/generate
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
Campos del Request Body
{
"glosa": "Pago de servicio",
"moneda": "BOB",
"monto": 10.5,
"numeroReferencia": "4024",
"vigencia": 45,
"idEstablecimiento": xxxxxx,
"nombreEstablecimiento": "Tienda Central",
"webhook": {
"url": "https://dominio.com/qr/confirmed",
"key": "x-api-key",
"value": "46bc-b2a2-ea12258c99ab"
}
}
{
"glosa": "Pago de servicio",
"moneda": "BOB",
"monto": 10.5,
"numeroReferencia": "4024",
"vigencia": 45,
"idEstablecimiento": xxxxxx,
"nombreEstablecimiento": "Tienda Central",
"webhook": {
"url": "https://dominio.com/qr/confirmed",
"key": "x-api-key",
"value": "46bc-b2a2-ea12258c99ab"
}
}
| Campo | Tipo | Obligatorio | Descripción |
|---|
glosa | String | Sí | Descripción del pago o concepto del cobro. Ej: 'Pago de servicio'. |
moneda | String | Sí | Código ISO de moneda. Valores permitidos: BOB. |
monto | Decimal | Sí | Importe del pago. Máximo 2 decimales. Ej: 10.50. |
numeroReferencia | String | Sí | Referencia interna del sistema originante (asignada por el integrador). Ej: '2320'. |
vigencia | Integer | Sí | Tiempo de validez del QR en segundos. Ej: 45. |
idEstablecimiento | Integer | Sí | Identificador del establecimiento registrado en ATC. |
nombreEstablecimiento | String | Sí | Nombre del establecimiento habilitado. Ej: 'Tienda Central'. |
webhook.url | String | Sí | Endpoint que recibirá la confirmación del pago. |
webhook.key | String | Sí | Nombre de la cabecera utilizada para autenticación del webhook. |
webhook.value | String | Sí | Valor de autenticación enviado en la cabecera del webhook. |
Campos de la Respuesta Exitosa
Response — QR generado
{
"success": true,
"message": "QR generado exitosamente",
"data": {
"numeroReferencia": "153980",
"estado": "PENDIENTE",
"fechaExpiracion": "2026-03-12T18:01:52.304302",
"moneda": "BOB",
"monto": 10.5,
"numeroReferenciaOriginante": "2320",
"qr": "iVBORw0KGgoAAAANSUhEUgAAAT8AAAE/CAYAAAAwps..."
}
}
{
"success": true,
"message": "QR generado exitosamente",
"data": {
"numeroReferencia": "153980",
"estado": "PENDIENTE",
"fechaExpiracion": "2026-03-12T18:01:52.304302",
"moneda": "BOB",
"monto": 10.5,
"numeroReferenciaOriginante": "2320",
"qr": "iVBORw0KGgoAAAANSUhEUgAAAT8AAAE/CAYAAAAwps..."
}
}
| Campo | Tipo | Descripción |
|---|
success | Boolean | true si el QR se generó correctamente. |
message | String | Mensaje descriptivo del resultado de la operación. |
data.numeroReferencia | String | Referencia interna asignada por ATC a la transacción QR. Usar este valor para consultas posteriores. |
data.estado | String | Estado inicial del QR recién generado. Siempre 'PENDIENTE'. |
data.fechaExpiracion | String (ISO 8601) | Fecha y hora de expiración del QR. Formato: yyyy-MM-dd'T'HH:mm:ss. |
data.moneda | String | Moneda de la transacción. Ej: 'BOB'. |
data.monto | Decimal | Importe del QR generado. |
data.numeroReferenciaOriginante | String | Referencia interna del sistema integrador tal como fue enviada en el request. |
data.qr | String (Base64) | Imagen PNG del código QR codificada en Base64. Decodificar para mostrar al usuario. |
4. VERIFICAR ESTADO QR
Permite consultar el estado actual de un QR previamente generado. Se usa el numeroReferencia interno asignado por ATC (campo data.numeroReferencia de la respuesta de generación), no el numeroReferencia originante del integrador.
| Atributo | Valor |
|---|
| Método HTTP | GET |
| URL | /qr/simple/v2/verify/{numeroReferencia} |
Header: access_token | {access_token obtenido en autenticación} |
Header: client_id | {client_id provisto por ATC} |
Header: Content-Type | application/json |
| Parámetro de ruta | {numeroReferencia} — Referencia interna ATC. Ej: 458263 |
600;">GET /qr/simple/v2/verify/1111545
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
600;">GET /qr/simple/v2/verify/1111545
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
4.1. Campos de la Respuesta Exitosa
Response — Estado QR (pago exitoso)
{
"success": true,
"message": "Estado de QR consultado exitosamente",
"data": {
"estado": "PENDIENTE",
"mensaje": "QR generado, esperando pago",
"importe": 10.5,
"moneda": "BOB",
"numeroReferenciaOriginante": "4023",
"numeroReferencia": "1111545",
"clienteOrigen": {
"nombreCliente": "",
"numeroCuenta": "",
"ciNitCliente": ""
},
"bancoOrigen": {
"numeroOrdenAch": "",
"codigoBanco": "",
"nombreBanco": "",
"fechaTransaccion": ""
}
}
}
{
"success": true,
"message": "Estado de QR consultado exitosamente",
"data": {
"estado": "PENDIENTE",
"mensaje": "QR generado, esperando pago",
"importe": 10.5,
"moneda": "BOB",
"numeroReferenciaOriginante": "4023",
"numeroReferencia": "1111545",
"clienteOrigen": {
"nombreCliente": "",
"numeroCuenta": "",
"ciNitCliente": ""
},
"bancoOrigen": {
"numeroOrdenAch": "",
"codigoBanco": "",
"nombreBanco": "",
"fechaTransaccion": ""
}
}
}
| Campo | Tipo | Descripción |
|---|
estado | String | Nombre del estado de la transacción. Valores posibles: PENDIENTE, PAGADO, CANCELADO, EXPIRADO, ERROR. |
mensaje | String | Mensaje descriptivo del estado de la transacción. |
importe | Decimal (BigDecimal) | Monto de la transacción. |
moneda | String | Moneda de la transacción. Ej: BOB. |
numeroReferenciaOriginante | String | Referencia del sistema integrador enviada al generar el QR. |
numeroReferencia | String | Referencia interna del sistema ATC. |
clienteOrigen | Object | Datos del cliente pagador. Ver estructura ClienteOrigen. |
bancoOrigen | Object | Datos del banco del pagador. Ver estructura BancoOrigen. |
Estructura Cliente Origen
| Campo | Tipo | Descripción |
|---|
nombreCliente | String | Nombre completo del titular de la cuenta pagadora. |
numeroCuenta | String | Número de cuenta bancaria del pagador. |
ciNitCliente | String | Número de CI o NIT del pagador. |
Estructura Banco Origen
| Campo | Tipo | Descripción |
|---|
nombreBanco | String | Nombre de la entidad financiera del pagador. |
fechaTransaccion | String (ISO 8601) | Fecha y hora en que se procesó el pago en el banco. |
numeroOrdenAch | String | Número de orden ACH. |
codigoBanco | String | Código de la entidad financiera del pagador. |
4.2. Webhook — Notificación de Pago
Cuando el cliente realiza el pago del QR, ATC envía automáticamente una notificación HTTP POST a la Webhook (url, key, value) especificada al generar el QR. El cuerpo del POST sigue exactamente la misma estructura de la respuesta de consulta de estado (sección 4.1).
Webhook — Notificación POST recibida por el integrador
POST https://dominio.com/qr/confirmed
POST https://dominio.com/qr/confirmed
| Atributo | Descripción |
|---|
| Método HTTP | POST (enviado por ATC al sistema del integrador) |
| URL destino | La webhookUrl especificada al generar el QR. |
| Content-Type enviado | application/json |
| Respuesta esperada | El servidor del integrador DEBE responder HTTP 200 para confirmar recepción. |
{
"detalleRespuesta": "Transacción procesada correctamente",
"codigoRespuesta": "SUCCESS",
"numeroReferencia": "233324",
"monto": 10.5,
"fechaHoraTransaccion": "2026-05-26T14:35:20",
"moneda": "BOB",
"clienteOrigen": {
"ciCliente": "12345678",
"nombreCliente": "Juan Perez",
"numeroCuenta": "1234567890"
},
"bancoOrigen": {
"codigoBanco": "101",
"nombreBanco": "Banco Unión",
"numeroOrdenAch": "987654321"
}
}
{
"detalleRespuesta": "Transacción procesada correctamente",
"codigoRespuesta": "SUCCESS",
"numeroReferencia": "233324",
"monto": 10.5,
"fechaHoraTransaccion": "2026-05-26T14:35:20",
"moneda": "BOB",
"clienteOrigen": {
"ciCliente": "12345678",
"nombreCliente": "Juan Perez",
"numeroCuenta": "1234567890"
},
"bancoOrigen": {
"codigoBanco": "101",
"nombreBanco": "Banco Unión",
"numeroOrdenAch": "987654321"
}
}

Validación del Webhook
Procesar el pago únicamente cuando sea (Exitoso/Pagado). Validar que el numeroReferencia y el importe coincidan con la transacción.
4.3. Respuesta de Error — Consulta Estado
{
"success": false,
"message": "Error al consultar estado de QR",
"errors": [
{
"field": "numeroReferencia",
"message": "Transacción no encontrada con número de referencia: 260825000010075",
"code": "TRANSACCION_NO_ENCONTRADA"
}
]
}
{
"success": false,
"message": "Error al consultar estado de QR",
"errors": [
{
"field": "numeroReferencia",
"message": "Transacción no encontrada con número de referencia: 260825000010075",
"code": "TRANSACCION_NO_ENCONTRADA"
}
]
}
| Campo | Tipo | Descripción |
|---|
success | Boolean | false en caso de error en la consulta. |
message | String | Descripción general del error. |
errors[].field | String | Campo que originó el error. |
errors[].message | String | Descripción detallada del error. |
errors[].code | String | Código de error interno. Ej: TRANSACCION_NO_ENCONTRADA. |
5. CANCELAR QR GENERADO
Permite realizar la cancelación de un QR previamente generado (pero no la cancelación de un QR pagado). Se usa el numeroReferencia interno asignado por ATC (campo data.numeroReferencia de la respuesta de generación), no el numeroReferencia originante del integrador.
| Atributo | Valor |
|---|
| Método HTTP | POST |
| URL | /qr/simple/v2/cancel/{numeroReferencia} |
Header: access_token | {access_token obtenido en autenticación} |
Header: client_id | {client_id provisto por ATC} |
Header: Content-Type | application/json |
| Parámetro de ruta | {numeroReferencia} — Referencia interna ATC. Ej: 11199226 |
600;">POST /qr/simple/v2/cancel/11199226
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
600;">POST /qr/simple/v2/cancel/11199226
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
5.1. Campos de la Respuesta Exitosa
Response — cancelar QR (cancelación exitosa de un qr generado, pero no pagado)
{
"success": true,
"message": "Transacción cancelada",
"data": {
"estado": "CANCELADO",
"mensaje": "Transacción cancelada",
"importe": 10.50,
"moneda": "BOB",
"numeroReferenciaOriginante": "7070",
"numeroReferencia": "11199226"
}
}
{
"success": true,
"message": "Transacción cancelada",
"data": {
"estado": "CANCELADO",
"mensaje": "Transacción cancelada",
"importe": 10.50,
"moneda": "BOB",
"numeroReferenciaOriginante": "7070",
"numeroReferencia": "11199226"
}
}
| Campo | Tipo | Descripción |
|---|
success | Boolean | true si la acción de cancelar se ejecutó correctamente. |
message | String | Mensaje descriptivo del resultado de la operación. |
data.estado | String | Estado del QR recién cancelado. mensaje mostrado 'CANCELADO'. |
data.mensaje | String | Mensaje descriptivo del resultado de la operación. |
data.importe | Decimal | Importe del QR de se ha generado y luego ser cancelado. |
data.moneda | String | Moneda de la transacción. Ej: 'BOB'. |
data.numeroReferenciaOriginante | String | Referencia interna del sistema integrador tal como fue enviada en el request. |
data.numeroReferencia | String | Referencia interna asignada por ATC a la transacción QR que se ha generado. |
5.2. Cuando se realiza la cancelación de un QR cancelado.
Cuando se intenta realizar la cancelación de qr ya cancelado, este retorna un mensaje de error en la operación.
request de cancelación de un QR, con un numeroReferencia ya cancelado
600;">POST /qr/simple/v2/cancel/11199226
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
600;">POST /qr/simple/v2/cancel/11199226
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
Campos de la Respuesta
Response — cancelar QR (cancelación de un qr cancelado, pero no pagado)
{
"success": false,
"message": "Error al anular QR",
"errors": [
{
"field": "numeroReferencia",
"message": "El QR ya está en estado CANCELADO, no se puede anular (solo se anulan QR en estado PENDIENTE)",
"code": "ESTADO_INVALIDO"
}
]
}
{
"success": false,
"message": "Error al anular QR",
"errors": [
{
"field": "numeroReferencia",
"message": "El QR ya está en estado CANCELADO, no se puede anular (solo se anulan QR en estado PENDIENTE)",
"code": "ESTADO_INVALIDO"
}
]
}
| Campo | Tipo | Descripción |
|---|
success | Boolean | falso si la acción de cancelar se ejecutó correctamente. |
message | String | Mensaje descriptivo del resultado de la operación - Error al anular QR. |
errors.field | String | Mensaje descriptivo del campo donde se encuentra el error: numeroReferencia`. |
errors.mensaje | String | Mensaje descriptivo del resultado de la operación. |
errors.code | String | Mensaje descriptivo del resultado de la operación de codigo: ESTADO_INVALIDO |
5.3. Cuando se realiza la cancelación de un QR pagado.
Cuando se intenta realizar la cancelación de qr ya pagado, este retorna un mensaje de error en la operación.
request de cancelación de un QR, con un numeroReferencia ya pagado
600;">POST /qr/simple/v2/cancel/11199241
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
600;">POST /qr/simple/v2/cancel/11199241
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
Campos de la Respuesta
Response — cancelar QR (cancelación de un qr pagado)
{
"success": false,
"message": "Error al anular QR",
"errors": [
{
"field": "numeroReferencia",
"message": "El QR ya está en estado PAGADO, no se puede anular (solo se anulan QR en estado PENDIENTE)",
"code": "ESTADO_INVALIDO"
}
]
}
{
"success": false,
"message": "Error al anular QR",
"errors": [
{
"field": "numeroReferencia",
"message": "El QR ya está en estado PAGADO, no se puede anular (solo se anulan QR en estado PENDIENTE)",
"code": "ESTADO_INVALIDO"
}
]
}
| Campo | Tipo | Descripción |
|---|
success | Boolean | false si la acción de cancelar se no ejecutó correctamente. |
message | String | Mensaje descriptivo del resultado de la operación - Error al anular QR. |
errors.field | String | Mensaje descriptivo del campo donde se encuentra el error: numeroReferencia`. |
errors.mensaje | String | Mensaje descriptivo del resultado de la operación. |
errors.code | String | Mensaje descriptivo del resultado de la operación de codigo: ESTADO_INVALIDO |
6. ESTADO
El campo estado de la respuesta de consulta y del webhook devuelve un valor de texto que describe el estado actual de la transacción QR.
6.1. Valores del campo estado
| Estado | Descripción | Acción recomendada |
|---|
PENDIENTE | El QR fue generado correctamente. Aún no se ha registrado ningún pago ni interacción. | Esperar el webhook o consultar nuevamente según el tiempo de vigencia. |
PAGADO | El pago fue confirmado y procesado exitosamente. | Acreditar el pago en el sistema. Estado final positivo. |
CANCELADO | El QR fue cancelado antes de completarse el pago. | Informar al usuario. Generar un nuevo QR si corresponde. |
EXPIRADO | El tiempo de vigencia del QR transcurrió sin que se realizara el pago. | Informar al usuario. Generar un nuevo QR si corresponde. |
ERROR | Ocurrió un error en el procesamiento de la transacción. | Revisar el campo mensaje. Contactar a ATC si el error persiste. |
6.2. Estado del QR (generación)
| Valor | Descripción |
|---|
PENDIENTE | Estado inicial al generar el QR. El cliente aún no realizó el pago. |
ERROR | Ocurrió un error en el procesamiento de la transacción. |
7. EJEMPLOS
7.1. Generar Transacción QR
Request — Autenticación (obtener Access Token)
600;">POST /oauth-client-credentials/access-token?grant_type=client_credentials
Headers:
Authorization: Basic ODBiM2M1NWQtNWNiNi00OWRlLTkxYTAtMDcwZDM1M2IwMDQ==
Content-Type: application/x-www-form-urlencoded
600;">POST /oauth-client-credentials/access-token?grant_type=client_credentials
Headers:
Authorization: Basic ODBiM2M1NWQtNWNiNi00OWRlLTkxYTAtMDcwZDM1M2IwMDQ==
Content-Type: application/x-www-form-urlencoded
Response — Access Token
{
"access_token": "1442981c-....-....-b...-ea12258c9...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "api.qr"
}
{
"access_token": "1442981c-....-....-b...-ea12258c9...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "api.qr"
}
Request — Generar QR
600;">POST /qr/simple/v2/generate
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
600;">POST /qr/simple/v2/generate
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
{
"glosa": "Pago de servicio",
"moneda": "BOB",
"monto": 10.5,
"numeroReferencia": "4024",
"vigencia": 45,
"idEstablecimiento": xxxxxx,
"nombreEstablecimiento": "Tienda Central",
"webhook": {
"url": "https://dominio.com/qr/confirmed",
"key": "x-api-key",
"value": "46bc-b2a2-ea12258c99ab"
}
}
{
"glosa": "Pago de servicio",
"moneda": "BOB",
"monto": 10.5,
"numeroReferencia": "4024",
"vigencia": 45,
"idEstablecimiento": xxxxxx,
"nombreEstablecimiento": "Tienda Central",
"webhook": {
"url": "https://dominio.com/qr/confirmed",
"key": "x-api-key",
"value": "46bc-b2a2-ea12258c99ab"
}
}
Response — QR generado
{
"success": true,
"message": "QR generado exitosamente",
"data": {
"numeroReferencia": "153980",
"estado": "PENDIENTE",
"fechaExpiracion": "2026-03-12T18:01:52.304302",
"moneda": "BOB",
"monto": 10.5,
"numeroReferenciaOriginante": "2320",
"qr": "iVBORw0KGgoAAAANSUhEUgAAAT8AAAE/CAYAAAAwps..."
}
}
{
"success": true,
"message": "QR generado exitosamente",
"data": {
"numeroReferencia": "153980",
"estado": "PENDIENTE",
"fechaExpiracion": "2026-03-12T18:01:52.304302",
"moneda": "BOB",
"monto": 10.5,
"numeroReferenciaOriginante": "2320",
"qr": "iVBORw0KGgoAAAANSUhEUgAAAT8AAAE/CAYAAAAwps..."
}
}
7.2. Verificar Estado QR
Request — Consulta de Estado
600;">GET /qr/simple/v2/verify/1111545
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
600;">GET /qr/simple/v2/verify/1111545
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
Response — Estado QR (pago exitoso)
{
"success": true,
"message": "Estado de QR consultado exitosamente",
"data": {
"estado": "PENDIENTE",
"mensaje": "QR generado, esperando pago",
"importe": 10.5,
"moneda": "BOB",
"numeroReferenciaOriginante": "4023",
"numeroReferencia": "1111545",
"clienteOrigen": {
"nombreCliente": "",
"numeroCuenta": "",
"ciNitCliente": ""
},
"bancoOrigen": {
"numeroOrdenAch": "",
"codigoBanco": "",
"nombreBanco": "",
"fechaTransaccion": ""
}
}
}
{
"success": true,
"message": "Estado de QR consultado exitosamente",
"data": {
"estado": "PENDIENTE",
"mensaje": "QR generado, esperando pago",
"importe": 10.5,
"moneda": "BOB",
"numeroReferenciaOriginante": "4023",
"numeroReferencia": "1111545",
"clienteOrigen": {
"nombreCliente": "",
"numeroCuenta": "",
"ciNitCliente": ""
},
"bancoOrigen": {
"numeroOrdenAch": "",
"codigoBanco": "",
"nombreBanco": "",
"fechaTransaccion": ""
}
}
}
Response — Error (referencia no encontrada)
{
"success": false,
"message": "Error al consultar estado de QR",
"errors": [
{
"field": "numeroReferencia",
"message": "Transacción no encontrada con número de referencia: 260825000010075",
"code": "TRANSACCION_NO_ENCONTRADA"
}
]
}
{
"success": false,
"message": "Error al consultar estado de QR",
"errors": [
{
"field": "numeroReferencia",
"message": "Transacción no encontrada con número de referencia: 260825000010075",
"code": "TRANSACCION_NO_ENCONTRADA"
}
]
}
Webhook — Notificación POST recibida por el integrador
POST https://dominio.com/qr/confirmed
POST https://dominio.com/qr/confirmed
{
"detalleRespuesta": "Transacción procesada correctamente",
"codigoRespuesta": "SUCCESS",
"numeroReferencia": "233324",
"monto": 10.5,
"fechaHoraTransaccion": "2026-05-26T14:35:20",
"moneda": "BOB",
"clienteOrigen": {
"ciCliente": "12345678",
"nombreCliente": "Juan Perez",
"numeroCuenta": "1234567890"
},
"bancoOrigen": {
"codigoBanco": "101",
"nombreBanco": "Banco Unión",
"numeroOrdenAch": "987654321"
}
}
{
"detalleRespuesta": "Transacción procesada correctamente",
"codigoRespuesta": "SUCCESS",
"numeroReferencia": "233324",
"monto": 10.5,
"fechaHoraTransaccion": "2026-05-26T14:35:20",
"moneda": "BOB",
"clienteOrigen": {
"ciCliente": "12345678",
"nombreCliente": "Juan Perez",
"numeroCuenta": "1234567890"
},
"bancoOrigen": {
"codigoBanco": "101",
"nombreBanco": "Banco Unión",
"numeroOrdenAch": "987654321"
}
}
7.3. CANCELAR QR
Request — CANCELAR QR
600;">POST /qr/simple/v2/cancel/11199226
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
600;">POST /qr/simple/v2/cancel/11199226
Headers:
access_token: 1442981c-....-....-b...-ea12258c9...
client_id: 1e063b89-....-....-....-ed73d60cbc67
Content-Type: application/json
Response — CANCELAR QR (Consulta Exitosa)
{
"success": true,
"message": "Transacción cancelada",
"data": {
"estado": "CANCELADO",
"mensaje": "Transacción cancelada",
"importe": 10.50,
"moneda": "BOB",
"numeroReferenciaOriginante": "7070",
"numeroReferencia": "11199226"
}
}
{
"success": true,
"message": "Transacción cancelada",
"data": {
"estado": "CANCELADO",
"mensaje": "Transacción cancelada",
"importe": 10.50,
"moneda": "BOB",
"numeroReferenciaOriginante": "7070",
"numeroReferencia": "11199226"
}
}
Response — Error (QR ya pagado)
{
"success": false,
"message": "Error al anular QR",
"errors": [
{
"field": "numeroReferencia",
"message": "El QR ya está en estado PAGADO, no se puede anular (solo se anulan QR en estado PENDIENTE)",
"code": "ESTADO_INVALIDO"
}
]
}
{
"success": false,
"message": "Error al anular QR",
"errors": [
{
"field": "numeroReferencia",
"message": "El QR ya está en estado PAGADO, no se puede anular (solo se anulan QR en estado PENDIENTE)",
"code": "ESTADO_INVALIDO"
}
]
}
Response — Error (QR cancelado anteriormente)
{
"success": false,
"message": "Error al anular QR",
"errors": [
{
"field": "numeroReferencia",
"message": "El QR ya está en estado CANCELADO, no se puede anular (solo se anulan QR en estado PENDIENTE)",
"code": "ESTADO_INVALIDO"
}
]
}
{
"success": false,
"message": "Error al anular QR",
"errors": [
{
"field": "numeroReferencia",
"message": "El QR ya está en estado CANCELADO, no se puede anular (solo se anulan QR en estado PENDIENTE)",
"code": "ESTADO_INVALIDO"
}
]
}
8. AMBIENTES
El siguiente cuadro contiene los datos de los ambientes disponibles con la URL base y el tipo de token requerido. Las credenciales específicas (Token Basic, client_id, access_token) son proporcionadas por ATC para cada ambiente y cada integrador habilitado.
| Ambiente | URL base | Credenciales | Estado |
|---|
| Certificación | https://atcgwapitest.redenlace.com.bo/sandbox/ | Provisto por ATC | Activo |
| Producción | https://api.redenlace.com.bo/ | Provisto por ATC | Restringido |