Identificador de la venta proporcionado por el negocio (ej. UUID).
QRwey! API (1.0.0)
La API de QRwey! permite a los negocios generar códigos QR seguros y efímeros para representar intenciones de autofactura.
- Los comercios registran una venta enviando los datos de la transacción.
- La API retorna un código QR con un enlace seguro (deep link).
- Los clientes escanean el QR con la app móvil de QRwey! y pueden consultar los detalles de la venta para generar un CFDi.
- La API asegura la integridad de cada transacción usando tokens opacos firmados con HMAC-SHA256, con control de expiración y protección contra reuso.
Request
Crea una nueva intención de autofactura y genera su correspondiente código QR seguro y efímero.
El flujo de operación:
- La aplicación del comercio envía los detalles de una venta y su API Key
- La API valida la API Key y guarda la información de la transacción
- Genera un token opaco y único, firmado con HMAC para garantizar su integridad
- Almacena una correspondencia entre el token y los detalles de la transacción
- Aplica un TTL (Time To Live) basado en la fecha de expiración (expires_at)
- Genera y devuelve el código QR para intención de autofactura en tres formatos: imagen base64, URL de descarga firmada y contenido de texto (deep link)
Clave única (ej. UUID) generada por el cliente para garantizar que la solicitud pueda reintentarse de forma segura sin crear transacciones duplicadas. Si el servidor ve la misma clave, devolverá la respuesta original.
Monto total de la transacción. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Subtotal de la transacción. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Código de moneda de 3 letras en formato ISO 4217 (ej. 'MXN', 'USD').
Método de pago SAT (PUE o PPD). Default PUE si no se envía.
Clave de Forma de Pago de 2 caracteres según el catálogo del SAT (forma_pago).
Tipo de comprobante SAT (ej. I Ingreso, E Egreso, P Pago). Default I si no se envía.
Identifica si la factura ampara una operación de exportación. Default 01 (No aplica) si no se envía.
Fecha y hora de expiración del QR en formato ISO 8601.
Tipo de operación: INVOICE, PAYMENT, REFUND.
Para facturas globales. Información relacionada con el comprobante global de operaciones con el público en general.
Un arreglo de objetos, donde cada objeto representa un producto o servicio.
Identificador único de producto (SKU) para control interno.
Descripción del producto o servicio.
Monto total del concepto. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Número de unidades vendidas. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Clave de Unidad de hasta 3 caracteres según el catálogo del SAT (clave_unidad).
Precio unitario del producto. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Clave de Producto/Servicio de 8 dígitos según el catálogo del SAT (clave_prod_serv).
Clave que indica si el concepto es objeto de impuesto según el catálogo del SAT (objeto_imp).
- Mock serverhttps://developers.qrwey.com/_mock/apis/qrwey/v1/qrs
- Entorno de Producciónhttps://api.qrwey.com/v1/qrs
- Entorno de Desarrollo/Pruebashttps://api-dev.qrwey.com/v1/qrs
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://developers.qrwey.com/_mock/apis/qrwey/v1/qrs \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY_HERE' \
-H 'X-TIME-ZONE: America/Mexico_City' \
-H 'idempotency-key: a8f2d7a6-c5f1-4a94-9a1c-1f7a2c4e6a3b' \
-d '{
"store_uid": "store_abc123",
"sale_id": "fcd68791-6a27-412f-a50f-8d47b7bc34d2",
"operation": "INVOICE",
"amount": 133,
"subtotal": 115.08,
"currency": "MXN",
"exchange_rate": 1,
"sat_payment_method": "PUE",
"sat_payment_form": "04",
"expires_at": "2026-01-03T23:59:59Z",
"type_of_receipt": "I",
"export_code": "01",
"related_cfdis": null,
"global_info": null,
"metadata": null,
"operation_data": [
{
"sku": "GAS87",
"description": "Gasolina Magna",
"amount": 115.08,
"quantity": 5.662,
"sat_unit_key": "LTR",
"unit_price": 20.325,
"discount": 0,
"sat_product_service_key": "15101515",
"sat_tax_object_key": "02",
"taxes": [
{
"type": "Traslado",
"tax": "002",
"factor": "Tasa",
"rate": "0.160000",
"taxable_base": 112,
"amount": 17.92
}
]
}
]
}'QR generado exitosamente
Identificador único de la transacción QR.
Identificador de la venta proporcionado por el negocio.
Clave de idempotencia usada en la solicitud.
Estado actual de la transacción QR.
Detalle de los conceptos con descripciones SAT resueltas.
Identificador único de producto (SKU) para control interno.
Descripción del producto o servicio.
Monto total del concepto (unit_price * quantity). Precisión: Hasta nueve enteros con seis decimales (15, 6).
Número de unidades vendidas. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Clave de Unidad según el catálogo del SAT.
Descripción de la clave de unidad del SAT.
Precio unitario del producto. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Clave de Producto / Servicio según el catálogo del SAT.
Descripción de la clave de Producto / Servicio del SAT.
Clave que indica si el concepto es objeto de impuesto.
Descripción de la clave de objeto de impuesto del SAT.
La imagen del QR codificada en base64, lista para ser incrustada o impresa.
Una URL pública para ver o descargar la imagen PNG del código QR.
La URL segura (deep link) contenida en el QR, que incluye el token (t) y la firma HMAC (m).
Fecha y hora de creación de la transacción en formato ISO 8601.
{ "qr_id": "tra_4aca0361cfcd41c097663db44008fbb9", "store_uid": "store_abc123", "sale_id": "fcd68791-6a27-412f-a50f-8d47b7bc34d2", "idempotency_key": "550e8400-e29b-41d4-a716-446655440000", "amount": 133, "subtotal": 115.08, "currency": "MXN", "exchange_rate": 1, "sat_payment_method": "PUE", "sat_payment_form": "04", "type_of_receipt": "I", "export_code": "01", "operation": "INVOICE", "status": "PENDING", "operation_data": [ { … } ], "metadata": null, "qr_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", "qr_url": "https://api.qrwey.com/qr.png?t=YWFh...", "qr_content": "https://api.qrwey.com/go?v=1&t=YWFh...&m=YmJi...", "created_at": "2026-01-01T13:00:00Z", "expires_at": "2026-01-03T23:59:59Z" }
Request
Obtiene el detalle completo de una transacción QR usando su identificador único.
Este endpoint permite:
- Consultar el estado actual de la transacción (
status) - Verificar si la transacción ya fue facturada (campo
invoice) - Obtener los datos fiscales del cliente que facturó (campo
customer) - Acceder a los datos completos de la transacción con descripciones SAT resueltas
El campo status indica el estado actual de la transacción:
- PENDING: QR generado, esperando a ser escaneado
- SCANNED: QR escaneado por el usuario desde la app
- INVOICED: La intención fue confirmada y el CFDi fue timbrado
- EXPIRED: El QR alcanzó su fecha
expires_atsin ser facturado - CANCELLED: El QR fue cancelado manualmente
- Mock serverhttps://developers.qrwey.com/_mock/apis/qrwey/v1/qrs/{qrId}
- Entorno de Producciónhttps://api.qrwey.com/v1/qrs/{qrId}
- Entorno de Desarrollo/Pruebashttps://api-dev.qrwey.com/v1/qrs/{qrId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://developers.qrwey.com/_mock/apis/qrwey/v1/qrs/tra_4aca0361cfcd41c097663db44008fbb9 \
-H 'X-API-Key: YOUR_API_KEY_HERE'Detalle de la transacción QR
Identificador único de la transacción QR.
Identificador de la venta proporcionado por el negocio.
Clave de idempotencia usada al generar el QR.
Monto total de la transacción. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Subtotal de la transacción. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Descripción del método de pago según el catálogo del SAT.
Descripción de la forma de pago según el catálogo del SAT.
Descripción del Tipo de comprobante según el catálogo del SAT.
Identifica si la factura ampara una operación de exportación.
Estado actual de la transacción QR.
Para facturas globales. Información relacionada con el comprobante global de operaciones con el público en general.
Detalle de los conceptos con descripciones SAT resueltas.
Identificador único de producto (SKU) para control interno.
Descripción del producto o servicio.
Monto total del concepto (unit_price * quantity). Precisión: Hasta nueve enteros con seis decimales (15, 6).
Número de unidades vendidas. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Clave de Unidad según el catálogo del SAT.
Descripción de la clave de unidad del SAT.
Precio unitario del producto. Precisión: Hasta nueve enteros con seis decimales (15, 6).
Clave de Producto / Servicio según el catálogo del SAT.
Descripción de la clave de Producto / Servicio del SAT.
Clave que indica si el concepto es objeto de impuesto.
Descripción de la clave de objeto de impuesto del SAT.
Detalle de la factura generada. Presente cuando la transacción ya fue timbrada a CFDi.
La imagen del QR codificada en base64.
URL pública para ver o descargar la imagen PNG del código QR.
La URL segura (deep link) contenida en el QR.
Fecha y hora de creación de la transacción en formato ISO 8601.
Fecha y hora de la última actualización.
Fecha y hora en que el QR fue escaneado. Null si aún no ha sido escaneado.
{ "qr_id": "tra_4aca0361cfcd41c097663db44008fbb9", "store_uid": "store_abc123", "store_name": "PetroStation #45", "sale_id": "fcd68791-6a27-412f-a50f-8d47b7bc34d2", "idempotency_key": "550e8400-e29b-41d4-a716-446655440000", "operation": "INVOICE", "issuer_rfc": "EKU9003173C9", "issuer_name": "ESCUELA KEMPER URGATE", "amount": 133, "subtotal": 115.08, "currency": "MXN", "exchange_rate": 1, "sat_payment_method": "PUE", "sat_payment_method_desc": "Pago en una sola exhibición", "sat_payment_form": "04", "sat_payment_form_desc": "Tarjeta de crédito", "type_of_receipt": "I", "type_of_receipt_desc": "Ingreso", "export_code": "01", "export_code_desc": "No aplica", "status": "PENDING", "related_cfdis": null, "global_info": null, "operation_data": [ { … } ], "metadata": null, "invoice": null, "customer": null, "qr_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", "qr_url": "https://api.qrwey.com/qr.png?t=YWFh...", "qr_content": "https://api.qrwey.com/go?v=1&t=YWFh...&m=YmJi...", "created_at": "2026-01-01T13:00:00Z", "updated_at": "2026-01-01T13:00:00Z", "scanned_at": null, "expires_at": "2026-01-03T23:59:59Z" }