HonestQR API v1
Crea códigos QR y consulta estadísticas de escaneo mediante programación. Obtén una API key en el panel (sección de claves API) y pásala como token Bearer.
URL base: https://qr.zalize.com
Autenticación: Authorization: Bearer hqr_…
Límite de tasa: 60 solicitudes por minuto por API key (HTTP 429 al superarlo).
Renderizar un código QR estático
GET /api/v1/static — devuelve la imagen directamente. No se almacena nada; los códigos estáticos nunca caducan. Parámetros: data (obligatorio, máx. 2048 caracteres), format (png por defecto o svg), size (px, 128–4096, por defecto 1024).
curl -H "Authorization: Bearer $HONESTQR_KEY" \
"https://qr.zalize.com/api/v1/static?data=https%3A%2F%2Fexample.com&format=png&size=1024" \
-o qr.png
curl -H "Authorization: Bearer $HONESTQR_KEY" \
"https://qr.zalize.com/api/v1/static?data=https%3A%2F%2Fexample.com&format=svg" \
-o qr.svgCrear un código QR dinámico
POST /api/v1/qrcodes — crea un enlace corto editable (https://qr.zalize.com/r/<slug>) y devuelve las URLs de imagen. Campos del body: target_url (obligatorio), name, folder. El plan gratuito incluye 3 códigos dinámicos.
curl -X POST https://qr.zalize.com/api/v1/qrcodes \
-H "Authorization: Bearer $HONESTQR_KEY" \
-H "Content-Type: application/json" \
-d '{"target_url": "https://example.com/menu", "name": "Menu"}'{
"qrcode": { "id": "…", "slug": "abc1234", "short_url": "https://qr.zalize.com/r/abc1234", … },
"image_png": "https://qr.zalize.com/api/v1/qrcodes/<id>/image?format=png",
"image_svg": "https://qr.zalize.com/api/v1/qrcodes/<id>/image?format=svg"
}Ejemplo en JavaScript
Funciona en Node.js 18+ y cualquier runtime con fetch (Workers, Deno, Bun; navegadores solo mediante un proxy de backend — nunca envíes tu clave al cliente).
const BASE = 'https://qr.zalize.com';
const headers = {
Authorization: `Bearer ${process.env.HONESTQR_KEY}`,
'Content-Type': 'application/json',
};
// Create a dynamic code
const res = await fetch(`${BASE}/api/v1/qrcodes`, {
method: 'POST',
headers,
body: JSON.stringify({ target_url: 'https://example.com/menu', name: 'Menu' }),
});
if (!res.ok) throw new Error(`HonestQR ${res.status}: ${(await res.json()).error}`);
const { qrcode } = await res.json();
// Fetch its stats later
const stats = await (await fetch(`${BASE}/api/v1/qrcodes/${qrcode.id}/stats`, { headers })).json();
console.log(qrcode.short_url, stats.total);Ejemplo en Python
import os, requests
BASE = "https://qr.zalize.com"
HEADERS = {"Authorization": f"Bearer {os.environ['HONESTQR_KEY']}"}
# Render a static QR code (never stored, never expires)
png = requests.get(
f"{BASE}/api/v1/static",
params={"data": "https://example.com", "format": "png", "size": 1024},
headers=HEADERS,
)
png.raise_for_status()
open("qr.png", "wb").write(png.content)
# Create a dynamic code
r = requests.post(
f"{BASE}/api/v1/qrcodes",
json={"target_url": "https://example.com/menu", "name": "Menu"},
headers=HEADERS,
)
r.raise_for_status()
print(r.json()["qrcode"]["short_url"])Descargar la imagen de un código dinámico
GET /api/v1/qrcodes/:id/image — parámetros format (png/svg) y size.
curl -H "Authorization: Bearer $HONESTQR_KEY" \
"https://qr.zalize.com/api/v1/qrcodes/<id>/image?format=svg" -o menu.svgListar tus códigos QR
GET /api/v1/qrcodes
curl -H "Authorization: Bearer $HONESTQR_KEY" https://qr.zalize.com/api/v1/qrcodesEstadísticas de escaneo
GET /api/v1/qrcodes/:id/stats — totales más desgloses por día (últimos 30 días), país y dispositivo.
curl -H "Authorization: Bearer $HONESTQR_KEY" https://qr.zalize.com/api/v1/qrcodes/<id>/statsErrores
Todos los errores son JSON: {"error": "…"}.
| Estado | Significado | Qué hacer |
|---|---|---|
400 | Solicitud no válida (parámetro ausente o inválido) | Revisa el mensaje error y corrige el parámetro. |
401 | API key ausente o no válida | Envía Authorization: Bearer hqr_…; regenera la clave en el panel si fue revocada. |
402 | Límite del plan alcanzado (plan gratis: 3 códigos dinámicos) | Elimina códigos sin uso o pasa a Pro. |
404 | Código QR no encontrado (o pertenece a otra cuenta) | Verifica el id con GET /api/v1/qrcodes. |
429 | Límite de tasa (60 solicitudes/minuto por clave) | Espera un minuto y reintenta; agrupa las lecturas cuando sea posible. |
¿Prefieres una integración sin código?
También puedes poner el generador completo en tu propio sitio como widget integrable gratuito — un snippet, sin API key.
¿Usas un agente de IA?
HonestQR también ofrece un servidor MCP gratuito para que Claude, Cursor y otros clientes MCP generen y decodifiquen códigos QR directamente — sin API key.