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.svgCré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.svgLister vos QR codes
GET /api/v1/qrcodes
curl -H "Authorization: Bearer $HONESTQR_KEY" https://qr.zalize.com/api/v1/qrcodesStatistiques 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>/statsErreurs
Toutes les erreurs sont en JSON : {"error": "…"}.
| Statut | Signification | Que faire |
|---|---|---|
400 | Requête invalide (paramètre manquant/invalide) | Consultez le message error ; corrigez le paramètre. |
401 | Clé API manquante ou invalide | Passez Authorization: Bearer hqr_… ; régénérez la clé dans le tableau de bord si elle a été révoquée. |
402 | Limite du plan atteinte (plan gratuit : 3 codes dynamiques) | Supprimez les codes inutilisés ou passez à Pro. |
404 | QR code introuvable (ou appartenant à un autre compte) | Vérifiez l’id via GET /api/v1/qrcodes. |
429 | Dé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.