HonestQR API v1

Erstelle QR-Codes und lies Scan-Statistiken programmatisch. Hole dir einen API-Key im Dashboard (Bereich API-Keys) und übergib ihn als Bearer-Token.

Basis-URL: https://qr.zalize.com

Auth: Authorization: Bearer hqr_…

Rate-Limit: 60 Anfragen pro Minute pro API-Key (HTTP 429 bei Überschreitung).

Statischen QR-Code rendern

GET /api/v1/static — liefert das Bild direkt. Nichts wird gespeichert; statische Codes laufen nie ab. Query-Parameter: data (erforderlich, max. 2048 Zeichen), format (png Standard oder svg), size (px, 128–4096, Standard 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.svg

Dynamischen QR-Code erstellen

POST /api/v1/qrcodes — erstellt einen editierbaren Kurzlink (https://qr.zalize.com/r/<slug>) und liefert Bild-URLs. Body-Felder: target_url (erforderlich), name, folder. Der Free-Plan enthält 3 dynamische Codes.

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

JavaScript-Beispiel

Funktioniert in Node.js 18+ und jeder Runtime mit fetch (Workers, Deno, Bun; Browser nur über einen Backend-Proxy — den Key nie an den Client ausliefern).

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

Python-Beispiel

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

Bild eines dynamischen Codes herunterladen

GET /api/v1/qrcodes/:id/image — Query-Parameter format (png/svg) und size.

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

Deine QR-Codes auflisten

GET /api/v1/qrcodes

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

Scan-Statistiken

GET /api/v1/qrcodes/:id/stats — Gesamtzahlen plus Aufschlüsselung nach Tag (letzte 30 Tage), Land und Gerät.

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

Fehler

Alle Fehler sind JSON: {"error": "…"}.

StatusBedeutungWas tun
400Ungültige Anfrage (fehlender/ungültiger Parameter)Die error-Meldung prüfen und den Parameter korrigieren.
401Fehlender oder ungültiger API-KeyAuthorization: Bearer hqr_… übergeben; bei Widerruf den Key im Dashboard neu generieren.
402Plan-Limit erreicht (Free-Plan: 3 dynamische Codes)Ungenutzte Codes löschen oder auf Pro upgraden.
404QR-Code nicht gefunden (oder gehört einem anderen Konto)Die id über GET /api/v1/qrcodes prüfen.
429Rate-Limit erreicht (60 Anfragen/Minute pro Key)Kurz warten und nach einer Minute erneut versuchen; Lesezugriffe bündeln.

Lieber ohne Code einbetten?

Du kannst den kompletten Generator auch als kostenloses einbettbares Widget auf deine eigene Website setzen — ein Snippet, kein API-Key.

Mit einem KI-Agenten unterwegs?

HonestQR bietet auch einen kostenlosen MCP-Server, mit dem Claude, Cursor und andere MCP-Clients QR-Codes direkt generieren und dekodieren — ohne API-Key.