HonestQR API v1

Créez des QR codes et lisez les statistiques de scan par programmation. Obtenez une clé API dans le tableau de bord (section clés API), puis passez-la comme token Bearer.

URL de base : https://qr.zalize.com

Auth : Authorization: Bearer hqr_…

Limite de débit : 60 requêtes par minute et par clé API (HTTP 429 en cas de dépassement).

Générer un QR code statique

GET /api/v1/static — renvoie directement l’image. Rien n’est stocké ; les codes statiques n’expirent jamais. Paramètres : data (requis, 2048 caractères max), format (png par défaut ou svg), size (px, 128–4096, 1024 par défaut).

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.svg

Créer un QR code dynamique

POST /api/v1/qrcodes — crée un lien court modifiable (https://qr.zalize.com/r/<slug>) et renvoie les URLs d’image. Champs du body : target_url (requis), name, folder. Le plan gratuit inclut 3 codes dynamiques.

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"
}

Exemple JavaScript

Fonctionne avec Node.js 18+ et tout runtime disposant de fetch (Workers, Deno, Bun ; navigateurs via un proxy backend — n’exposez jamais votre clé côté client).

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);

Exemple 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"])

Télécharger l’image d’un code dynamique

GET /api/v1/qrcodes/:id/image — paramètres format (png/svg) et size.

curl -H "Authorization: Bearer $HONESTQR_KEY" \
  "https://qr.zalize.com/api/v1/qrcodes/<id>/image?format=svg" -o menu.svg

Lister vos QR codes

GET /api/v1/qrcodes

curl -H "Authorization: Bearer $HONESTQR_KEY" https://qr.zalize.com/api/v1/qrcodes

Statistiques de scan

GET /api/v1/qrcodes/:id/stats — totaux et répartition par jour (30 derniers jours), pays et appareil.

curl -H "Authorization: Bearer $HONESTQR_KEY" https://qr.zalize.com/api/v1/qrcodes/<id>/stats

Erreurs

Toutes les erreurs sont en JSON : {"error": "…"}.

StatutSignificationQue faire
400Requête invalide (paramètre manquant/invalide)Consultez le message error ; corrigez le paramètre.
401Clé API manquante ou invalidePassez Authorization: Bearer hqr_… ; régénérez la clé dans le tableau de bord si elle a été révoquée.
402Limite du plan atteinte (plan gratuit : 3 codes dynamiques)Supprimez les codes inutilisés ou passez à Pro.
404QR code introuvable (ou appartenant à un autre compte)Vérifiez l’id via GET /api/v1/qrcodes.
429Débit limité (60 requêtes/minute par clé)Attendez une minute avant de réessayer ; regroupez les lectures si possible.

Vous préférez une intégration sans code ?

Vous pouvez aussi placer le générateur complet sur votre propre site sous forme de widget intégrable gratuit — un snippet, pas de clé API.

Vous utilisez un agent IA ?

HonestQR propose aussi un serveur MCP gratuit pour que Claude, Cursor et les autres clients MCP génèrent et décodent des QR codes directement — sans clé API.