API-Überblick
Die Engine ist als kleine HTTP-API veröffentlicht. Es gibt zwei Wege, dich zu authentifizieren.
Zwei Kanäle
1. RapidAPI Marketplace (Bestandskunden)
Ruf https://api.qr-branding.com mit deinem RapidAPI-Proxy-Secret auf. KI-Endpunkte nutzen deinen eigenen LLM-Schlüssel, oder den verwalteten Endpunkt, der keinen braucht. Keine Änderung gegenüber der ursprünglichen Signet QR API.
2. Consumer-Credit-Pakete (neu)
Kauf ein Paket unter /pricing. Deine KI-Endpunkte nutzen serverseitige LLM-Schlüssel (Groq / Gemini / OpenAI), und pro erfolgreicher Generierung werden Credits abgebucht. Der Editor im Frontend nutzt diesen Kanal transparent.
Endpunkte
| Methode | Pfad | Zweck |
|---|---|---|
POST | /api/qr/generate | Einen QR-Code aus einer expliziten QrConfig rendern. |
POST | /api/qr/ai/generate | Marketplace-KI – eigener LLM-Schlüssel. |
POST | /api/qr/ai/generate-managed | Verwaltete Marketplace-KI – kein LLM-Schlüssel nötig. |
POST | /api/qr/ai/generate/server | Consumer-KI – serverseitiger LLM-Schlüssel, Abrechnung über Credits. |
GET | /api/qr/templates | Die 118 vorgefertigten Vorlagen auflisten (optional ?category=…). |
POST | /api/qr/templates/{templateId} | Einen QR-Code per Vorlagen-ID rendern, mit optionalen Überschreibungen. |
POST | /api/qr/content/wifi | Helfer: WLAN-Payload-String bauen. |
POST | /api/qr/content/vcard | Helfer: vCard-Payload-String bauen. |
POST | /api/qr/content/geo | Helfer: Geostandort-Payload-String bauen. |
GET | /api/qr/ai/providers | Unterstützte LLM-Anbieter + Modelle auflisten. |
GET | /api/ping | Health-Check (anonym). |
Auth-Header
RapidAPI
X-RapidAPI-Proxy-Secret: <secret>
Internes BFF (Consumer-Website)
X-Internal-Service-Secret: <secret>
X-Internal-Customer-Id: <customer id>
X-Internal-Ts: <unix seconds>
X-Internal-Signature: <HMAC-SHA256(signing-key, "{customerId}.{ts}")>
Anti-Replay-TTL: 60 Sekunden. Wird intern vom Next.js-Frontend genutzt – diese Header setzt du nie von Hand.
Fehlerformat
Jede Antwort außerhalb von 2xx hat eine stabile Struktur:
{
"success": false,
"error": "Content length (5000) exceeds maximum allowed (4296 characters).",
"code": "CONTENT_TOO_LONG",
"field": "content"
}
field ist gesetzt, wenn sich der Fehler auf eine bestimmte Eingabe bezieht.
Rate-Limits
| Stufe | Pro Minute | Hinweise |
|---|---|---|
| RapidAPI allgemein | 60 | Doku, Ping, Helfer |
| RapidAPI Generierung | 30 | /api/qr/generate |
| RapidAPI KI | 15 | externe LLM-Aufrufe |
| Consumer allgemein | 120 | pro Kunden-ID |
| Consumer Generierung | 60 | pro Kunden-ID |
| Consumer KI | 30 | pro Kunden-ID |
Zusätzlich gibt es globale Obergrenzen pro Minute, die die kostenlose Azure-Stufe schützen. Erreichst du eine davon, bekommst du 429 mit einem Retry-After-Header.
Ausgabeformate
png (Standard, base64), jpg, svg, pdf, webp. Setze "responseType": "binary", um die Datei direkt herunterzuladen, statt base64 in JSON zu erhalten.