Skip to content

QRwey! utiliza dos esquemas de autenticación según el tipo de integración:

  • X-API-Key — lo usan los Comercios para consumir los endpoints de generación y resolución de QR. Esta guía cubre ese esquema.
  • Authorization: Bearer {access_token} (OAuth 2.0) — lo usan los Integradores para consumir la Gestión de Clientes (administración de grupos, emisores, comercios, y timbrado directo de CFDI). Consulta Gestión de Clientes.

Los Integradores son quienes mantienen la relación comercial con QRwey!: crean grupos, dan de alta emisores (RFCs ante el SAT) y registran los comercios bajo cada emisor. A cada comercio le emiten la X-API-Key que describe esta guía.

Esta sección explica cómo usar X-API-Key correctamente, dónde almacenarla y cómo evitar errores comunes.


Header requerido

QRwey! utiliza un esquema simple de autenticación basado en headers HTTP.

Todas las peticiones deben incluir:

X-API-Key: TU_API_KEY

Este header es obligatorio tanto en lecturas como en operaciones de escritura.


Dónde usar la API Key

La API Key de QRwey! es una credencial sensible y debe manejarse con cuidado.

Uso correcto

  • ✅ Backend (server-to-server)
  • ✅ Servicios internos
  • ✅ Jobs o workers

Uso incorrecto (NO permitido)

  • ❌ Frontend (React, Vue, Angular, etc.)
  • ❌ Aplicaciones móviles
  • ❌ URLs o query parameters
  • ❌ Repositorios de código
  • ❌ Logs públicos

⚠️ Regla simple: si el usuario puede verla, está comprometida.


Ambientes (DEV y PROD)

QRwey! opera con ambientes separados:

  • Desarrollo / Pruebas: https://api-dev.qrwey.com
  • Producción: https://api.qrwey.com

Recomendaciones importantes:

  • Las API Keys suelen ser distintas por ambiente
  • No mezcles una API Key de DEV con el host de PROD
  • Un error de ambiente normalmente resulta en 401 Unauthorized

Obtener un token de acceso (Integradores)

Esta sección es exclusiva para los Integradores de QRwey!. Los Comercios que solo generan y resuelven QR no necesitan un token: usan el header X-API-Key descrito arriba.

Los Integradores consumen la Gestión de Clientes con Authorization: Bearer {access_token} (OAuth 2.0, flujo client credentials). El access_token se obtiene del servidor de autenticación de QRwey! con una petición POST.

Endpoint por ambiente

  • Desarrollo / Pruebas: https://auth-dev.qrwey.com/auth/realms/petrovol/protocol/openid-connect/token
  • Producción: https://auth.qrwey.com/auth/realms/qrwey/protocol/openid-connect/token

Petición

La petición es POST con Content-Type: application/x-www-form-urlencoded y los siguientes campos en el cuerpo:

CampoDescripción
client_idProporcionado por correo electrónico al registrar al Integrador en el portal de QRwey!
client_secretProporcionado por correo electrónico al registrar al Integrador en el portal de QRwey!
grant_typeConstante client_credentials

Ejemplo con curl (ambiente de desarrollo):

curl -X POST \
  'https://auth-dev.qrwey.com/auth/realms/petrovol/protocol/openid-connect/token' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'client_id=TU_CLIENT_ID' \
  -d 'client_secret=TU_CLIENT_SECRET' \
  -d 'grant_type=client_credentials'

Respuesta

{
  "access_token": "eyJhbGciOiJSUzI1NiIsI-Ro5_QhgBNGDpGznTERiFLGyqtHeSeDF2od4KsSqwxXPoVmfq342G2zDkw4tblrJ3h6bI97oCHuoq6_F8SKIN8SjKZBzcYxGiUE26yodtjPAqbx29Dw08Tg",
  "expires_in": 2419200,
  "refresh_expires_in": 0,
  "token_type": "Bearer",
  "not-before-policy": 0,
  "scope": "profile email"
}

Usa el valor de access_token en el header Authorization de cada petición a la Gestión de Clientes:

Authorization: Bearer {access_token}

El campo expires_in indica la vigencia del token en segundos; solicita uno nuevo cuando esté por expirar. Trata el client_secret y el access_token como credenciales sensibles: aplican las mismas reglas de manejo que la X-API-Key (nunca en frontend, URLs, logs públicos ni repositorios de código).


Operaciones con idempotency-key

Para operaciones de escritura (por ejemplo, generar un QR), además de X-API-Key es obligatorio enviar:

idempotency-key: <uuid>

Este header evita que se creen transacciones duplicadas en caso de reintentos.

Consulta: Idempotencia & Reintentos


Errores comunes

401 Unauthorized

Este error indica que la solicitud no pudo autenticarse.

Causas frecuentes:

  • X-API-Key ausente
  • API Key inválida o revocada
  • API Key no corresponde al ambiente
  • Espacios o comillas al copiar la key

Ejemplo incorrecto:

X-API-Key: "TU_API_KEY"

Ejemplo correcto:

X-API-Key: TU_API_KEY

Rotación y revocación de API Keys

Buenas prácticas recomendadas:

  • Rota tus API Keys de forma periódica
  • Mantén dos keys activas durante una migración, si es posible
  • Revoca inmediatamente una key comprometida
  • Monitorea respuestas 401 como indicador de incidentes

Buenas prácticas adicionales

  • Usa variables de entorno o un secret manager
  • Nunca hardcodees la API Key
  • Limita el acceso a las keys por equipo o servicio
  • Registra errores de autenticación para depuración

¿Qué sigue?