Title
Create new category
Edit page index title
Edit category
Edit link
Guía Sobre Códigos QR
Descripción General
Los Códigos QR ofrecen un mecanismo ágil para iniciar Pagos entre partes. Una persona puede generar un QR para compartir datos de pago, mientras que un Comercio puede exhibirlo para que el comprador complete una compra en un Punto de Venta (POS).
La plataforma Passport PaaS permite crear Códigos QR conformes a la especificación de la industria EMVCo en Colombia (vigente a la fecha de redacción, última actualización de julio de 2025). Estos QR pueden usarse en canales digitales y fuera de línea, reduciendo errores manuales y mejorando la experiencia de compra.
Los QR Bre-B simplifican la venta al incrustar información esencial (p. ej., Llave Bre-B, monto, propósito) en un formato escaneable, reduciendo fricción y mejorando la seguridad, ahorrando tiempo al Cliente.
Los requisitos para QR son definidos por instituciones como: ACH Colombia, Banco de la República, Credibanco, EMVCo, Mastercard, Redeban, Servibanca, Visa y Visionamos. Passport colabora con estos grupos para aportar claridad a la especificación de pagos Bre-B.
Passport, en alianza con Visionamos, opera un punto de acceso nacional a Bre-B para procesar pagos y emitir Códigos QR de uso en todo el ecosistema.
Ciclo de Vida del Pago
Los QR Bre-B pueden usarse en canales físicos y digitales: afiches, terminales POS, cajeros automáticos (ATM), sitios web y apps móviles.
Ejemplo: Compra en una Cafetería

Ejemplo de Ciclo de Vida de un Pago
La imagen representa una transacción sencilla donde un comprador realiza una compra en un punto de venta. Los pasos son:
- El Comercio crea una Venta en su sistema POS.
- El POS genera un QR Dinámico con la información de la venta usando la API de Passport PaaS y lo muestra al comprador.
- El Comprador escanea el QR con su app bancaria dentro de la Zona Bre-B.
- La app precarga destinatario (Llave Bre-B), monto y propósito de la transacción.
- El Comprador revisa y confirma la transferencia hacia la Llave Bre-B indicada.
- El pago se envía por la red Bre-B desde el banco del Comprador al Banco Sponsor de Passport.
- Passport PaaS recibe la confirmación del Nodo Bre-B e identifica al Comercio correspondiente.
- Se envía un Webhook al POS del Comercio para confirmar el pago.
Requisitos Previos
Para crear Códigos QR en la Plataforma, deben cumplirse varias condiciones. La información para generar el QR se toma de diversas fuentes:
- Cliente: El cliente creado contiene datos como nombre del Comercio y dirección (nombre, ciudad, código postal y país), que son campos obligatorios del QR.
- Llave Bre-B: Una Llave creada para una Cuenta debe incluirse en el QR Estático o Dinámico para enrutar los pagos al Comercio por la red Bre-B.
- Configuración: La Merchant Category Code (MCC) debe estar configurada en el perfil/Configuración del Comercio; es otro campo obligatorio del QR.
- Solicitud API: La mayor parte de la información se provee vía el endpoint Crear Códigos QR, con campos obligatorios u opcionales según el caso de uso.
Pasos Requeridos
Para cumplir los requisitos previos, completa:
| Paso | Descripción |
|---|---|
| 1 | Vincular Merchant con razón social, dirección, ciudad, país y código postal. |
| 2 | Vincular Cuenta asociada al Cliente activo. |
| 3 | Crear Llave Bre-B: al menos una Llave Bre-B vinculada a esa cuenta. |
Al finalizar estos pasos, reúne la información necesaria desde las fuentes relevantes para el perfil del QR. Usa el endpoint Crear Códigos QR para completar los campos restantes al crear un QR Estático o Dinámico.
Creación de Códigos QR
Para crear un QR, el debes considerar los campos principales y la información disponible para cada caso de uso.
La siguiente tabla resume consideraciones para maximizar el impacto del QR. No es la lista de campos obligatorios por endpoint, sino los principales que determinan el contenido del QR según el caso.
| Campo | Dinámico | Estático |
|---|---|---|
| type | QR de uso único, ligado a un monto específico y a la actividad en el ecosistema del desarrollador. | QR reutilizable, pues no contiene información específica de transacción. |
| channel | Dónde y cómo se presenta: p. ej., POS o MPOS (POS móvil). El POS ya generó la información de la transacción y está a la espera del pago. | Usualmente en un afiche o medio impreso. El QR Estático comparte información que no cambia por transacción (p. ej., Llave Bre-B). |
| qr_code_reference | Referencia única para asociar el QR con la acción/seguimiento del desarrollador. | No requerido |
| transaction_purpose | Describe qué representa el QR (p. ej., PURCHASE/SHOPPING). | Similar al Dinámico; también puede fijarse en el QR Estático. |
Estos son los campos más comunes para ajustar la implementación Dinámica o Estática, además de la Llave Bre-B y el Monto, cuando corresponda.
El caso de uso previsto para el QR Dinámico es aquel que está vinculado de forma única a un pago específico - por ejemplo, un comprador en el Punto de Venta (POS). El código QR se genera bajo demanda para esa compra en particular y se configura “dinámicamente” para esa venta.
El QR Estático puede imprimirse en masa y dejarse disponible para que cualquiera lo encuentre; no requiere información específica de la venta para cada persona que lo escanee. Por ejemplo, una organización benéfica podría imprimir Códigos QR Estáticos en un periódico nacional, mientras que la persona que escanee define el monto de la donación directamente en su app bancaria.
Los ejemplos a continuación demuestran como pueden ser implementados:
Type hereUn QR Estático contiene información fija de pago y no cambia una vez creado. Suele imprimirse y exhibirse en soportes físicos (sticker, póster, mostrador).
Ideal para entornos con interacción presencial directa, como pequeños comercios o ventas informales:
- El comprador escanea el QR con su app bancaria.
- El comprador ingresa el monto y envía el pago.
- El comercio confirma manualmente (p. ej., revisando su app bancaria).
No requiere integración con POS, lo que lo hace una solución ligera para aceptar Bre-B.
La plataforma soporta múltiples caminos de implementación: con cuentas dedicadas de comercio o flujos gestionados por la plataforma donde mantienes el control del ciclo de pago.
QR Estático: Ejemplo de Solicitud
El siguiente ejemplo aplica a un vendedor ambulante que desea aceptar pagos Bre-B mediante un QR Estático impreso en un sticker adherido a su carrito.
| Parámetro | Descripción |
|---|---|
| key_id | ID único de la Llave Bre-B creada en el prerrequisito. |
| customer_id | ID único del Comercio (Customer). |
| type | STATIC para indicar que el QR es estático (DYNAMIC es otra opción). |
| channel | MPOS para indicar POS móvil. |
| additional_info.transaction_purpose | Dentro de additional_info, especifica el propósito (ej.: SHOPPING). |
| additional_info.transaction.channel_presentation | Código opcional de tres dígitos que describe el medio para detallar el canal. En este ejemplo “010”: Sticker impreso (0), fuera del domicilio comercial registrado (1), cajero presente (0). |
QR Estático: Cuerpo de la Solicitud
xxxxxxxxxxcurl --location --request POST 'https://api.paas-sandbox.co.passportfintech.com/qrcodes' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer 17d5cc1adb6f6c90d5aa73f74b38f9fa3336d04aee6cf8121a3cf19f190e6213' \--data '{ "key_id": "1f2046b7-428d-4682-b6f2-3fe438ae5a3e", "customer_id": "291b10c1-b86a-4741-a49f-ff55c46190d8", "type": "STATIC", "channel": "POS", "additional_info":{ "transaction_purpose": "SHOPPING" }}'Existen campos opcionales adicionales dentro de additional_info para enriquecer el QR. Revisa el endpoint Crear Códigos QR para conocerlos y sus usos.
QR Estático: Ejemplo de Respuesta
Una vez enviada la solicitud, la plataforma PaaS combina la información de las distintas fuentes y genera un QR conforme a la Especificación EASPBV (Colombia) para QR. La respuesta mantiene un formato similar al de otros recursos.
| Parámetro | Descripción |
|---|---|
| id | ID único del QR creado; úsalo para futuras consultas o eliminación. |
| qr_code data | Cadena formateada del QR; puede presentarse digitalmente o imprimirse. |
| key | Objeto con key_value y key_type usados, referenciados por key_id. |
| acquirer_network identifier | Los QR siempre serán emitidos por VISI, emisor autorizado por el Banco de la República para llaves Bre-B. |
| merchant | Objeto con información del Comercio (nombre, ciudad, CP, país, MCC). |
| status | Estado de creación (ACTIVE - ACTIVO). |
| created_at | Marca de tiempo de creación. |
| key_id | ID único de la Llave usada. |
| customer_id | ID único del Cliente. |
| type | STATIC o DYNAMIC (en este ejemplo, STATIC). |
| channel | Cómo se presenta el QR (p. ej., MPOS). |
| transaction_purpose | Dentro de additional_info; en el ejemplo, SHOPPING. |
| channel_presentation | Dentro de additional_info; código de tres dígitos para detallar el canal (ej.: 010 = Sticker impreso (0), fuera del domicilio (1), cajero presente (0)). |
QR Estático: Cuerpo de la Respuesta
xxxxxxxxxx{ "created_at": "2025-05-12T20:30:17.547227Z", "qr_code_data": "00020101021226550015CO.COM.VISI.LLA0332jimmyjohns1111402545255@test.com49270015CO.COM.VISI.RED0104VISI52045782530317054130000100000.005802CO5919Test Business O9F126006Bogota61059827362120808PURCHASE80290017CO.COM.VISI.CANAL0104MPOS81260016CO.COM.VISI.CIVA01020282290015CO.COM.VISI.IVA0106100.0083300016CO.COM.VISI.BASE0106100.0084260016CO.COM.VISI.CINC01020285280015CO.COM.VISI.INC010510.0090610017CO.COM.VISI.TRXID01364A07229A-7B14-4B63-85D5-79572E130E0763040351", "qr_code_image": "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", "acquirer_network_identifier": "VISI", "key_id": "7756cfcb-0d28-4e89-bbc0-d4ebdc5b6ca1", "id": "7aa184b7-c549-467b-917f-460b4224b459", "entity_customer_id": "0d93dea5-00c4-4a9e-b3fa-cbaf5280818b", "merchant": { "merchant_category_code": "1234", "country": "CO", "merchant_name": "Test Business O9F12", "merchant_city": "Bogota", "merchant_zip_code": "98273" }, "status": "ACTIVE", "type": "STATIC", "key": { "key_type": "EMAIL", "key_value": "jimmyjohns1111402545255@test.com" }, "channel": "MPOS", "additional_info": { "transaction_purpose": "SHOPPING" }}El QR se creó correctamente. Puedes usar el id para consultarlo o eliminarlo más adelante.
El campo qr_code_data contiene la cadena codificada imprimible (tantas copias como desees). Alternativamente, qr_code_image entrega la imagen en base64 para uso inmediato.
Ventajas del QR Estático
- Datos fijos: El mismo Qr generado con todos sus datos una única vez puede reimprimirse y reutilizarse.
- El sticker puede colocarse en múltiples lugares para facilitar el escaneo.
- Sin integración compleja con POS para generar y recibir pagos.
La Plataforma de PaaS no verifica que los cálculos de IVA o INC sean correctos - no mantenemos un listado completo de impuestos o recargos aplicables a todas las transacciones en Colombia.
Nuestros Bancos Sponsor no asumen responsabilidad por la exactitud de esos cálculos. Corresponde al Desarrollador garantizar que los impuestos, tarifas y recargos se calculen adecuadamente como parte de la contabilidad del proceso de venta.