Un arreglo de objetos, donde cada objeto representa un producto o servicio.
QRwey! API (1.2.0)
La API de QRwey! permite a los negocios generar códigos QR seguros y efímeros para representar intenciones de factura.
- 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 factura 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 intento de autofactura en tres formatos: imagen base64, URL de descarga firmada y contenido de texto
Identificador único de la tienda que realiza la venta.
RFC del emisor de la factura. Útil cuando el comercio tiene más de un emisor y no desea usar el predeterminado.
Monto total de la transacción. Debe coincidir con la suma de los productos. 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').
Clave de Forma de Pago de 2 caracteres según el catálogo del SAT (forma_pago).
Fecha y hora de expiración del QR en formato ISO 8601. Después de este momento, el QR será inválido.
Tipo de operación: INVOICE, PAYMENT, REFUND.
Identificador único de producto (SKU) para control interno.
Descripción del producto o servicio.
Monto total del concepto, es la multiplicación del precio unitario por la cantidad (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 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/api/v1/qrs
- Entorno de Producciónhttps://clients.qrwey.com/api/v1/qrs
- Entorno de Desarrollo/Pruebashttps://api-dev.qrwey.com/api/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/api/v1/qrs \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: a8f2d7a6-c5f1-4a94-9a1c-1f7a2c4e6a3b' \
-H 'X-API-Key: YOUR_API_KEY_HERE' \
-d '{
"store": "PetroStation #45",
"issuer_rfc": "EKU9003173C9",
"amount": 133,
"subtotal": 115.08,
"currency": "MXN",
"sat_payment_method": "04",
"expires_at": "2025-11-01T23:59:59Z",
"operation": "INVOICE",
"operation_data": [
{
"sku": "GAS87",
"description": "Gasolina Magna",
"amount": 115.08,
"quantity": 5.662,
"sat_unit_key": "LTR",
"unit_price": 20.325,
"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
La imagen del QR codificada en base64, lista para ser incrustada o impresa.
Una URL pública, firmada y de corta duración para ver o descargar la imagen PNG del código QR. Evita la enumeración de QRs.
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_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", "qr_url": "https://clients.qrwey.com/qr.png?t=YWFh...&exp=1696200000&sig=YmJi...", "qr_content": "https://clients.qrwey.com/go?v=1&t=YWFh...&m=YmJi...", "created_at": "2025-09-11T18:25:43Z", "expires_at": "2025-09-30T23:59:59Z" }
Request
Este endpoint es invocado cuando un cliente final escanea el QR. Valida el token y devuelve los detalles de la transacción.
El flujo de operación:
- El cliente escanea el código QR desde la aplicación QRwey!
- La aplicación extrae los parámetros de la URL (v, t, m)
- La aplicación solicita al API el detalle de la venta
- El API valida la firma HMAC para asegurar que el token no ha sido alterado
- Verifica que el token no haya expirado y que no haya sido consumido
- Si todas las validaciones son correctas, responde con los detalles completos de la transacción
El sistema utiliza:
- Tokens Opacos: Identificadores aleatorios sin secuencia
- Integridad (Anti-manipulación): Firmado con HMAC-SHA256 truncado
- Expiración Forzada: Basada en el campo expires_at
- Control de Reutilización (Anti-replay): Puede configurarse para un solo uso
- Mock serverhttps://developers.qrwey.com/_mock/apis/qrwey/api/v1/qrs
- Entorno de Producciónhttps://clients.qrwey.com/api/v1/qrs
- Entorno de Desarrollo/Pruebashttps://api-dev.qrwey.com/api/v1/qrs
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://developers.qrwey.com/_mock/apis/qrwey/api/v1/qrs?v=1&t=YWFhYWFh...&m=YmJiYmJi...' \
-H 'X-API-Key: YOUR_API_KEY_HERE'Transacción resuelta exitosamente
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 de la forma de pago según el catálogo del SAT.
Fecha y hora de creación de la transacción en formato ISO 8601.
Fecha y hora de expiración del código QR en formato ISO 8601.
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.
{ "id": "tra_4aca0361cfcd41c097663db44008fbb9", "store": "PetroStation #45", "issuer_rfc": "EKU9003173C9", "issuer_name": "ESCUELA KEMPER URGATE", "amount": 133, "subtotal": 115.08, "currency": "MXN", "sat_payment_method": "04", "sat_payment_method_desc": "Tarjeta de crédito", "created_at": "2025-09-29T13:00:00Z", "expires_at": "2025-09-30T23:59:59Z", "operation": "INVOICE", "operation_data": [ { … } ] }