Este flujo utiliza el mismo endpoint base de autorización. Revisa los ambientes y la configuración general en el Overview.
Características del flujo
Tipo de flujo
Asíncrono.
Método de pago
Permite generar un código QR para que el usuario complete el pago desde su app bancaria o billetera compatible.
Generación del QR
El API devuelve la imagen del QR en base 64 dentro de
transaction.processor_response.qr_image.Validación final
El resultado final debe confirmarse por backend con notificación o consulta.
Consideraciones
Este flujo permite enviar
callback_url para recibir una notificación host to host cuando el estado de la operación cambie.QR no utiliza
redirect_url ni retorno del navegador al comercio. El código QR se obtiene en la respuesta inicial del POST /charges.Aunque el QR se genera en la respuesta inicial, la confirmación final del pago sigue la misma lógica operativa de los métodos asíncronos. Complementa este flujo con Notificaciones o con Consulta.
Request
Antes de consumir este endpoint, solicita tu
Access Token en Autenticación.Headers
| Campo | Descripción | Valor | Tipo | Obligatorio |
|---|---|---|---|---|
Authorization | Token Bearer obtenido desde autenticación | Bearer {access_token} | String | SI |
Content-Type | Formato del request | application/json | String | SI |
ALG-API-VERSION | Versión del API | 1709847567 | String | SI |
Body
Objeto raíz del request
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
action | Acción a ejecutar | authorize | String | SI |
channel | Canal de la operación | ecommerce | String | SI |
merchant_code | Código del comercio | your_merchant_code | String | SI |
merchant_operation_number | Identificador único de la operación en el comercio. Debe ser diferente en cada transacción. | 5733813 | String | SI |
payment_method | Objeto con la información del método de pago | Object | Object | SI |
payment_details | Objeto con el detalle del pago y datos del cliente | Object | Object | SI |
Objeto payment_method
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
method_name | Nombre del método de pago | QR | String | SI |
method_details | Objeto con la información específica del pago con QR | Object | Object | SI |
Objeto payment_method.method_details
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
callback_url | URL donde se realizará la notificación host to host (server to server) | https://pay-me.com/callback | String | NO |
Si envías
callback_url, asegúrate de que sea una URL backend accesible para recibir confirmaciones server to server.Objeto payment_details
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
amount | Monto de la operación en centavos | 15000 | String | SI |
currency | Código de la moneda | 604 | String | SI |
billing | Datos de facturación | Object | Object | SI |
shipping | Datos de envío | Object | Object | SI |
customer | Datos del cliente | Object | Object | SI |
product_details | Lista de productos asociados a la operación | [] | Array | SI |
Para
billing, shipping y customer, usa la estructura ecommerce estándar con first_name, last_name, email, phone y location.Ejemplo de request
Response
Objeto transaction
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
transaction_id | Identificador único de la transacción | 5hk8rwa3h3cq9oyfs3a28v1ms | String | SI |
channel | Canal por el cual se realizó la transacción | ecommerce | String | SI |
state | Estado actual de la transacción | PENDIENTE | String | SI |
state_reason | Observación o descripción del estado actual | QR generado exitosamente | String | SI |
amount | Monto de la transacción | 15000 | String | SI |
currency | Código de la moneda de la operación | 604 | String | SI |
payment_method | Objeto con información del método de pago usado en la transacción | Object | Object | SI |
expiration_date | Fecha en la que expirará la transacción | Object | Object | NO |
processor_response | Resultado devuelto por la procesadora con información del QR generado | Object | Object | NO |
additional_fields | Datos adicionales enviados en el request | Object | Object | NO |
lifecycle | Historial de estados por los que pasó la transacción | Array | Array | SI |
state puede devolver valores como PENDIENTE o INVALIDO. Cuando el QR fue generado correctamente, la transacción normalmente queda en PENDIENTE hasta que el pago sea completado o expire.Objeto transaction.payment_method
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
method_name | Nombre del método de pago usado en la transacción | QR | String | SI |
method_details | Objeto que contiene el detalle del método de pago usado en la transacción | Object | Object | NO |
Objeto transaction.payment_method.method_details
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
callback_url | URL de callback enviada en el request | https://pay-me.com/callback | String | NO |
Objeto transaction.expiration_date
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
utc_time | Fecha de expiración en UTC | 2024-03-12T22:49:36.018Z | String | NO |
unix_time | Fecha de expiración en unix time | 1711585037 | Integer | NO |
Objeto transaction.processor_response
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
date | Fecha devuelta por la procesadora | 2024-03-26 19:17:19.599715 | String | NO |
qr_image | Imagen del QR en base 64 | data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA... | String | NO |
qr_id | ID del QR | 6d5d1ffc79234991b5592b825d6ec097 | String | NO |
result_message | Mensaje del resultado de la autorización | Object | Object | NO |
Objeto transaction.processor_response.result_message
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
code | Código del resultado de la autorización | 0 | String | NO |
description | Descripción del resultado de la autorización | Exito | String | NO |
Objeto transaction.lifecycle
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
state | Estado registrado en el historial | PENDIENTE | String | SI |
date | Fecha del cambio de estado | Object | Object | SI |
En
lifecycle puedes recibir estados como REGISTRADO, PENDIENTE e INVALIDO.Objeto transaction.lifecycle[].date
| Campo | Descripción | Ejemplo | Tipo | Obligatorio |
|---|---|---|---|---|
utc_time | Fecha en UTC | 2024-03-12T22:49:36.018Z | String | SI |
unix_time | Fecha en unix time | 1710282940 | Integer | SI |
Ejemplo de response
Buenas prácticas
- Confirma el resultado final por backend antes de actualizar la orden.
- Asegúrate de enviar un
merchant_operation_numberúnico por transacción. - No asumas que un QR generado significa pago completado; interpreta
PENDIENTEcomo un estado intermedio. - Usa
callback_urlsi tu operación necesita confirmación server to server. - Conserva
transaction_id,merchant_operation_number,qr_idy la fecha de expiración para seguimiento, soporte y conciliación.
Errores comunes
Pago asumido como exitoso
Generar el QR no equivale a autorizar el pago. El usuario todavía debe escanearlo y completar la operación.
QR expirado
Si el usuario intenta pagar después de
expiration_date, deberás generar una nueva operación en lugar de reutilizar la anterior.Siguiente paso
Api de Consulta con QR
Aprende a consultar el estado actualizado de una operación QR.

