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 3 tipos funcionales:

  1. Estático (STATIC):

    • No lleva valor (sin amount).
  2. Dinámico (DYNAMIC)

    • Siempre lleva valor (con amount).
    • No existe QR dinámico sin valor.
  3. Híbrido (HYBRID):

    • Es un QR estático al que se le incluye un valor.
    • En la API se representa como type: STATIC + amount presente.

QRs dinámicos, “valor” (sin el objeto amount definido) no es válido.

Detalles del Endpoint

ParámetroDescripción
Endpointhttps://api.paas.sandbox.co.passportfintech.com/v1/qrcodes
MétodoPOST
EncabezadosContent-Type: application/json, Authorization
AutenticaciónToken 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.value debe incluir ya sumado cualquier:
    • TIP
    • INC
    • VAT

Cuerpo de la Solicitud

ParámetroTipoCardinalidadDescripción
key_idStringObligatorioID único de la llave Bre-B asociada a la cuenta del comercio.
customer_idStringObligatorioID único del cliente (comercio) que inicia la transacción.
typeENUMObligatorioTipo de código QR: STATIC o DYNAMIC.
channelENUMObligatorioCanal en el cual se presentará el QR: MAN, POS, APP, ECOMM, MPS, ATM.
additional_infoObjetoObligatorio VER SECCION: Regla de Obligatoriedad.Objeto con metadatos adicionales de la transacción.
additional_info.transaction_purposeENUMObligatorio

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_referenceStringObligatorio

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

qr_code_reference:"11213344556677889"

Al recibir el pago de ese QR se obtendrá:

qr_code_reference:"CO.COM.VISI.TRXIDP11213344556677889"

additional_info.invoice_numberStringOpcionalNúmero de factura (máx. 25 caracteres).
additional_info.mobile_phone_numberStringOpcionalNúmero móvil vinculado a la transacción.
additional_info.store_labelStringOpcionalIdentificador de tienda.
additional_info.loyalty_labelStringOpcionalReferencia a programa de lealtad del comprador.
additional_info.reference_labelStringOpcionalReferencia única de la transacción.
additional_info.customer_labelStringOpcionalIdentificador único del comprador.
additional_info.terminal_labelStringCondicionalID del terminal de punto de venta (POS).
additional_info.customer_infoENUMOpcionalInformación requerida del comprador: ADDRESS, EMAIL, PHONE.
additional_info.channel_presentationStringOpcionalCódigo de 3 dígitos que indica cómo fue presentado el QR.
vatObjetoCondicionalInformación del IVA si se incluye monto. Obligatorio para QR dinámicos.
vat.vat_typeENUMCondicionalTipo de cálculo del IVA: FIXED, PERCENTAGE, WALLET.
vat.vat_valueStringCondicionalValor fijo en COP o porcentaje (5 decimales).
vat.vat_baseStringCondicionalBase del valor sobre el cual se calcula el IVA.
incObjetoCondicionalInformación del INC. Aplicable si se incluye monto.
inc.inc_typeENUMCondicionalTipo de cálculo del INC: FIXED, PERCENTAGE, WALLET.
inc.inc_valueStringCondicionalValor fijo en COP o porcentaje (5 decimales).
amountObjetoOpcionalValor de la transacción codificada en el QR.
amount.valueStringOpcionalValor del pago (e.g., "100000.00").
amount.currencyENUMOpcionalDebe ser COP.
tipObjetoOpcionalInformación sobre propina (opcional).
tip.tip_typeENUMOpcionalMétodo de cálculo: REQUEST, FIXED, PERCENTAGE.
tip.tip_valueStringOpcionalRequerido si el tipo es FIXED.
tip.tip_percentageStringOpcionalRequerido si el tipo es PERCENTAGE.

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

QR Dinamico
QR Estatico
Copy

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

QR Dinamico
QR Estatico
Copy
  1. 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.
  2. Los códigos QR también son visibles en el dashboard para fines de validación.
  3. El id que se devuelve es el qr_code_id, el cual se puede usar en otras peticiones

Errores Comunes y Manejo

Código HTTPSignificadoDescripción
400 Bad RequestDatos inválidosFaltan campos requeridos o contienen valores incorrectos.
401 UnauthorizedToken inválidoEl token de acceso ha expirado o es inválido.
403 ForbiddenAcceso denegadoLa solicitud no está autorizada para validar la entidad.
500 Server ErrorError del servidorSe produjo un error inesperado al procesar la validación.

Buenas Prácticas

  • Verifica que el key_id y customer_id sean válidos y estén asociados correctamente.
  • Usa el campo channel_presentation para detallar cómo y dónde se muestra el QR.
  • Si se incluye un monto, asegúrate de incluir los objetos vat e inc con 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.

Type to search, ESC to discard
Type to search, ESC to discard
Type to search, ESC to discard