Title
Create new category
Edit page index title
Edit category
Edit link
Crear Códigos QR
Esta especificación está sujeta a cambios. El estándar colombiano EASPBV está evolucionando para soportar las capacidades de la red Bre-B. Passport colabora activamente con entidades del sector para definir un modelo robusto y flexible de integración de códigos QR para pagos en tiempo real.
Visión General
Este endpoint permite crear un Código QR compatible con Bre-B utilizando la API de la Plataforma PaaS de Passport. El código QR codifica información de pago y metadatos contextuales de acuerdo con el estándar colombiano EASPBV, devolviendo un identificador único del QR y los detalles asociados.
Tipos de QR
Bre-B maneja 2 tipos funcionales:
Estático (STATIC):
No lleva valor (sin
amount).
Dinámico (DYNAMIC)
Siempre lleva valor (con
amount).No existe QR dinámico sin valor.
QRs dinámicos, “valor” (sin el objeto amount definido) no es válido.
Detalles del Endpoint
Parámetro | Descripción |
|---|---|
Endpoint | |
Método | POST |
Encabezados | Content-Type: application/json, Authorization |
Autenticación | Token de Acceso (Bearer Token) |
Reglas de Importe (Tag 54)
El Tag 54 (amount.value) es el único valor monetario que Bre-B utiliza para procesar el pago.
El importe que se envía en
amount.valuedebe incluir ya sumado cualquier:TIPINCVAT
Cuerpo de la Solicitud
Parámetro | Tipo | Cardinalidad | Descripción |
|---|---|---|---|
key_id | String | Obligatorio | ID único de la llave Bre-B asociada a la cuenta del comercio. |
customer_id | String | Obligatorio | ID único del cliente (comercio) que inicia la transacción. |
type | ENUM | Obligatorio | Tipo de código QR: |
channel | ENUM | Obligatorio | Canal en el cual se presentará el QR: |
additional_info | Objeto | Obligatorio VER SECCION: Regla de Obligatoriedad. | Objeto con metadatos adicionales de la transacción. |
additional_info.transaction_purpose | ENUM | Obligatorio | Finalidad de la transacción: 00: Compras 02: Anulaciones 03: Transferencias 04: Retiro 05: Recaudo 06: Recargas 07: Depósito Se debe enviar el código de 2 dígitos. |
qr_code_reference | String | Obligatorio | Referencia única que se puede añadir y enviar a la red bre-b, relacionada con el pago. Máximo 17 caracteres alfanuméricos. La letra P no está permitida. Luego en Bre-B la lógica interna le agrega a ese campo el identificador del adquirente “CO.COM.VISI.TRXID” y la letra P que corresponde a una identificación interna del Nodo. Por ejemplo. Si se envía a plataforma Passport PaaS al crear el QR
Al recibir el pago de ese QR se obtendrá:
|
additional_info.invoice_number | String | Opcional | Número de factura (máx. 25 caracteres). |
additional_info.mobile_phone_number | String | Opcional | Número móvil vinculado a la transacción. |
additional_info.store_label | String | Opcional | Identificador de tienda. |
additional_info.loyalty_label | String | Opcional | Referencia a programa de lealtad del comprador. |
additional_info.reference_label | String | Opcional | Referencia única de la transacción. |
additional_info.customer_label | String | Opcional | Identificador único del comprador. |
additional_info.terminal_label | String | Obligatorio | ID del terminal de punto de venta (POS). |
additional_info.customer_info | ENUM | Opcional | Datos por solicitar al consumidor: Usar uno de los DIGITOs:
|
additional_info.channel_presentation | String | Opcional | Código de 3 dígitos que indica cómo fue presentado el QR. |
vat | Objeto | Condicional | Información del IVA si se incluye monto. Obligatorio para QR dinámicos. |
vat.vat_type | ENUM | Condicional | Tipo de cálculo del IVA: |
vat.vat_value | String | Condicional | Valor fijo en COP o porcentaje (5 decimales). |
vat.vat_base | String | Condicional | Base del valor sobre el cual se calcula el IVA. |
inc | Objeto | Condicional | Información del INC. Aplicable si se incluye monto. |
inc.inc_type | ENUM | Condicional | Tipo de cálculo del INC: |
inc.inc_value | String | Condicional | Valor fijo en COP o porcentaje (5 decimales). |
amount | Objeto | Opcional | Valor de la transacción codificada en el QR. |
amount.value | String | Opcional | Valor del pago (e.g., "100000.00"). |
amount.currency | ENUM | Opcional | Debe ser |
tip | Objeto | Opcional | Información sobre propina (opcional). |
tip.tip_type | ENUM | Opcional | Método de cálculo: |
tip.tip_value | String | Opcional | Requerido si el tipo es |
tip.tip_percentage | String | Opcional | Requerido si el tipo es |
Regla de Obligatoriedad - Objeto: additional_info
El objeto additional.info es opcional. Si se incluye, debe contener obligatoriamente los parámetros terminal_label y transaction_purpose.
Ejemplo de Solicitud
Cuerpo de la Respuesta
Código HTTP: 201 Created.
Retorna un código QR creado y asociado a los metadatos de la solicitud.
Ejemplo de Respuesta
La respuesta de Códigos QR incluye la imagen en formato Base64. Puedes usar cualquier librería de frontend para convertirla en una imagen legible para tu audiencia.
Los códigos QR también son visibles en el dashboard para fines de validación.
El
idque se devuelve es elqr_code_id, el cual se puede usar en otras peticiones
Errores Comunes y Manejo
Código HTTP | Significado | Descripción |
|---|---|---|
400 Bad Request | Datos inválidos | Faltan campos requeridos o contienen valores incorrectos. |
401 Unauthorized | Token inválido | El token de acceso ha expirado o es inválido. |
403 Forbidden | Acceso denegado | La solicitud no está autorizada para validar la entidad. |
500 Server Error | Error del servidor | Se produjo un error inesperado al procesar la validación. |
Buenas Prácticas
Verifica que el
key_idycustomer_idsean válidos y estén asociados correctamente.Usa el campo
channel_presentationpara detallar cómo y dónde se muestra el QR.Si se incluye un monto, asegúrate de incluir los objetos
vateinccon la estructura y tipos adecuados
Consideraciones para Lectura de QRs e iniciación de Pagos
INC, VAT y TIP son Informativos (no sumables al pagar)
Al leer un QR, aunque aparezcan campos INC, VAT y TIP, estos son informativos.
Si se crea un pago, NO se deben sumar esos valores al importe.
El pago se crea solo con el
amount.value
Lectura de QR Estático (Sin Importe):
Al leer un QR STATIC, se debe validar si contiene importe (amount.value):
Si NO tiene importe: solicitar en la terminal que el cliente ingrese el valor.
Si SÍ tiene importe: es un QR “híbrido” y el cliente puede modificar el valor a enviar en el pago.
QR Dinámico Sin Valor: Inválido
Un QR dinámico sin valor no debe aceptarse.