API de QR Paraguay v1

Creá, modificá y medí tus QR dinámicos por código. Disponible desde el plan Pro. La clave se genera en Panel → Desarrolladores.

Autenticación

curl https://qr.com.py/api/v1/ping \
  -H "Authorization: Bearer qrp_TU_CLAVE"

Todas las llamadas llevan la cabecera Authorization. Límite: 120 solicitudes por minuto por clave.

GET /api/v1/qrs — listar

curl "https://qr.com.py/api/v1/qrs?q=menu&limite=20" -H "Authorization: Bearer qrp_TU_CLAVE"

POST /api/v1/qrs — crear

curl -X POST https://qr.com.py/api/v1/qrs \
  -H "Authorization: Bearer qrp_TU_CLAVE" -H "Content-Type: application/json" \
  -d '{"nombre": "Promo primavera", "destino": "https://misitio.com.py/promo"}'
{
  "ok": true,
  "qr": {
    "codigo": "A8f62Kp",
    "nombre": "Promo primavera",
    "destino": "https://misitio.com.py/promo",
    "url_corta": "https://qr.com.py/A8f62Kp",
    "imagen_png": "https://qr.com.py/qr-img.php?d=…&s=600",
    "estado": "activo"
  }
}

PATCH /api/v1/qrs/{codigo} — cambiar destino, nombre o estado

curl -X PATCH https://qr.com.py/api/v1/qrs/A8f62Kp \
  -H "Authorization: Bearer qrp_TU_CLAVE" -H "Content-Type: application/json" \
  -d '{"destino": "https://misitio.com.py/promo-2"}'

El QR impreso no cambia: solo el destino. También acepta {"estado": "pausado"} y {"nombre": "…"}.

GET /api/v1/qrs/{codigo}/stats — estadísticas

curl "https://qr.com.py/api/v1/qrs/A8f62Kp/stats?dias=30" -H "Authorization: Bearer qrp_TU_CLAVE"

POST /api/v1/qrs/bulk — creación masiva (hasta 100)

curl -X POST https://qr.com.py/api/v1/qrs/bulk \
  -H "Authorization: Bearer qrp_TU_CLAVE" -H "Content-Type: application/json" \
  -d '{"items": [{"nombre": "Mesa 1", "destino": "https://misitio.com.py/menu"},
               {"nombre": "Mesa 2", "destino": "https://misitio.com.py/menu"}]}'

Webhooks salientes

Configurables en Panel → Desarrolladores. Cada entrega es un POST JSON con cabeceras X-QRP-Evento y X-QRP-Firma (HMAC SHA-256 del cuerpo con tu secreto). Respondé 2xx para confirmar; si no, reintentamos a 1 m, 5 m, 30 m, 2 h y 12 h. Verificación en PHP:

$firma = hash_hmac('sha256', file_get_contents('php://input'), $miSecreto);
if (!hash_equals($firma, $_SERVER['HTTP_X_QRP_FIRMA'] ?? '')) { http_response_code(401); exit; }

Formato abierto: QR RUC (ruc_py)

El QR RUC de facturación codifica un JSON plano, público y libre — cualquier software de facturación puede leerlo, sea o no cliente de QR Paraguay:

{"v":1,"t":"ruc_py","ruc":"4567890","dv":"1","rs":"COMERCIAL EJEMPLO S.A.","dir":"Avda. España 1234, Asunción","em":"facturas@ejemplo.com.py"}
vVersión del formato (1)
tTipo fijo: ruc_py
rucRUC sin dígito verificador
dvDígito verificador
rsRazón social
dirDirección fiscal (opcional)
emEmail para factura electrónica (opcional)

Si preferís no parsearlo vos, la API lo valida: POST /api/v1/ruc/parse con {"payload": "…contenido crudo del QR…"}.

¿Dudas? Escribinos desde tu panel. — QR Paraguay