CreateQR Entwicklerhandbuch

Automatisiere die QR-Erstellung ohne den langweiligen Teil

Nutze drei Endpunkte, um QR-Codes zu erstellen, aufzulisten und zu löschen – mit voller Kontrolle über das Styling. Integration am selben Tag, sauberes JSON, und deine QRs bleiben in deinem Dashboard.

Basispfad: /api/v1 Auth: Authorization: Bearer <key> (empfohlen)

Beispiele für mit unserer API generierte QR-Codes

Derselbe Endpunkt, unterschiedliche Looks. Halte es schlicht, setze voll auf deine Marke oder rahme es für Offline-Kampagnen ein.

QR-Codes erstellen

Erstellen Sie einen statischen oder dynamischen QR-Code und speichern Sie ihn in Ihrem Konto.

POST https://createqr.app/api/v1/create

Senden Sie nur JSON. Für die Schlüsselauthentifizierung ist ein Header Best Practice. Schlüssel-Felder im Body sind aus Kompatibilitätsgründen mit bestehenden Integrationen vorhanden.

Schnellstart (cURL)

Das ist der schnellste Hello-World-Einstieg.

curl -sS -X POST 'https://createqr.app/api/v1/create' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer ck_live_XXXXXXXXXXXXXXXXXXXXXXXX' \
  -d '{"data":"https://createqr.app","qrtype":"static"}'

Authentifizierung & Kompatibilität

  • Empfohlen: Authorization: Bearer <key>
  • Auch akzeptiert: X-API-Key
  • JSON-Fallback: apikey oder api_key
  • Content-Type muss application/json sein
  • Nicht-POST-Methoden geben 405 method_not_allowed zurück

Hauptparameter

Parameter Typ Standard Beschreibung
apikey String Erforderlich Geheimer API-Schlüssel. Empfohlen im Authorization-Header (Bearer). JSON-Body apikey/api_key wird ebenfalls akzeptiert.
data String Erforderlich Zu codierender Inhalt. Für dynamische QR muss dies eine gültige URL sein.
qrtype String static QR-Modus: statisch oder dynamisch.
title String Optional QR-Titel, der im Dashboard angezeigt wird (auf 120 Zeichen gekürzt).
folderid Number Optional Positive ganzzahlige Ordner-ID, die Ihrem Konto gehört.

Farb- & Formparameter

Parameter Typ Standard Beschreibung
transparent String/Bool off on/off, true/false, 1/0, yes/no werden akzeptiert.
backcolor String #FFFFFF Hintergrund-Hexfarbe im Format #RRGGBB.
frontcolor String #000000 Hexfarbe der Hauptpunkte im Format #RRGGBB.
gradient String/Bool off Zweifarbigen Punktverlauf aktivieren.
radial String/Bool off Radialen Verlauf aktivieren (funktioniert, wenn gradient aktiviert ist).
gradient_color String #15A97C Zweite Verlaufsfarbe in #RRGGBB.
marker_out_color String #000000 Farbe des äußeren Finder-Markers.
marker_in_color String #000000 Farbe des inneren Finder-Markers.
pattern String default Stilvorgabe für die Körperpunkte.
default circle star diamond sparkle danger cross plus x heart shake blob special-circle-orizz special-circle-vert special-circle special-diamond ribbon oriental ellipse
marker String default Stilvorgabe für den äußeren Marker.
default flurry sdoz drop_in drop dropeye dropeyeleft dropeyeleaf dropeyeright squarecircle circle rounded flower flower_in leaf
marker_in String default Stilvorgabe für den inneren Marker.
default flurry sdoz drop_in drop dropeye circle rounded sun star diamond danger cross plus x heart
optionlogo String none none, empfohlener lokaler SVG-Wasserzeichenpfad, veralteter lokaler PNG-Pfad oder base64-Bilddaten.
none data:image/*;base64,... /images/watermarks/v2/01-link.svg /images/watermarks/v2/02-location.svg /images/watermarks/v2/03-email.svg /images/watermarks/v2/04-whatsapp.svg /images/watermarks/v2/05-wifi.svg /images/watermarks/v2/06-vcard.svg /images/watermarks/v2/07-menu.svg /images/watermarks/v2/08-app.svg /images/watermarks/v2/09-video.svg /images/watermarks/v2/10-feedback.svg /images/watermarks/v2/11-event.svg /images/watermarks/v2/12-coupon.svg /images/watermarks/v2/13-music.svg /images/watermarks/v2/14-social.svg /images/watermarks/v2/15-paypal.svg /images/watermarks/v2/16-bitcoin.svg /images/watermarks/v2/17-scan.svg
no_logo_bg String/Bool off Hintergrundfläche des Logos deaktivieren.

Rahmenparameter

Parameter Typ Standard Beschreibung
outer_frame String none Stilvorgabe für den Rahmen.
none bottom top balloon-bottom balloon-top ribbon-bottom ribbon-top phone cine
framelabel String SCAN ME Textbeschriftung des Rahmens (auf 80 Zeichen gekürzt).
label_font String Arial, Helvetica, sans-serif Schriftarten-Stack für die Rahmenbeschriftung.
custom_frame_color String/Bool off Benutzerdefinierte Rahmenfarbe aktivieren.
framecolor String #000000 Rahmen-Hexfarbe im Format #RRGGBB.

Beispiele für Erstellungsanfragen

Beispiel: Schlichter QR

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "https://createqr.app",
    "qrtype": "static",
    "title": "Launch Landing QR",
    "transparent": "off",
    "backcolor": "#FFFFFF",
    "frontcolor": "#000000",
    "marker_out_color": "#000000",
    "marker_in_color": "#000000",
    "pattern": "default",
    "marker": "default",
    "marker_in": "default",
    "optionlogo": "none"
}
Vorschau der Beispielausgabe

Beispiel: Farbe + Logo

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "https://createqr.app/features",
    "qrtype": "static",
    "title": "Feature Tour QR",
    "transparent": "off",
    "backcolor": "#033895",
    "frontcolor": "#FFFFFF",
    "marker_out_color": "#669DF4",
    "marker_in_color": "#669DF4",
    "pattern": "oriental",
    "marker": "flower",
    "marker_in": "circle",
    "optionlogo": "/images/watermarks/v2/01-link.svg"
}

Beispiel: Gerahmter Kampagnen-QR

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "https://createqr.app/pricing",
    "qrtype": "static",
    "title": "Pricing Poster QR",
    "transparent": "off",
    "frontcolor": "#2B0011",
    "marker_out_color": "#3B0001",
    "marker_in_color": "#3B0001",
    "pattern": "ellipse",
    "marker": "sdoz",
    "marker_in": "sdoz",
    "optionlogo": "none",
    "outer_frame": "balloon-top",
    "framelabel": "SCAN ME",
    "label_font": "Arial, Helvetica, sans-serif",
    "custom_frame_color": "on",
    "framecolor": "#3B0001"
}
Vorschau der Beispielausgabe

Erfolgreiche Antwortstruktur

{
    "success": true,
    "data": {
        "qrid": "1284",
        "svg": "<svg ...>...</svg>",
        "type": "static",
        "title": "Pricing Poster QR",
        "dashboard_url": "https://createqr.app/app/qrs/1284",
        "download_url": "https://createqr.app/app/qrs/1284/download/svg"
    },
    "request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}

QR-Codes löschen

Löschen Sie einen QR-Code per ID (nur Eigentümer).

POST https://createqr.app/api/v1/delete

Anfrage-Body

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "qrid": "1284"
}

Antwort

{
    "success": true,
    "data": {
        "deleted": true,
        "qrid": "1284"
    },
    "request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}

QR-Codes auflisten

Listen Sie Ihre QR-Codes in Seiten mit je 100 Einträgen auf, neueste zuerst.

POST https://createqr.app/api/v1/list

Verwenden Sie die Paginierung ab 1. Pro Seite werden bis zu 100 Einträge zurückgegeben.

Request-Body

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "pagination": "1"
}

Antwort

{
    "success": true,
    "data": {
        "pagination": "1",
        "page_size": 100,
        "total": 2,
        "items": [
            {
                "qrid": "1284",
                "title": "Campaign QR",
                "type": "dynamic",
                "created_at": "2026-02-17 09:12:30",
                "short_url": "https://createqr.app/r/a1b2c3",
                "dashboard_url": "https://createqr.app/app/qrs/1284"
            },
            {
                "qrid": "1269",
                "title": "Storefront QR",
                "type": "static",
                "created_at": "2026-02-17 08:02:08",
                "dashboard_url": "https://createqr.app/app/qrs/1269"
            }
        ]
    },
    "request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}

Fehlerantworten, Limits und Wiederholungen

Jede Antwort enthält request_id. Bewahren Sie sie auf, wenn Sie den Support kontaktieren, damit wir schnell debuggen können.

Typische Fehlerstruktur

{
    "success": false,
    "error": {
        "code": "validation_error",
        "message": "Dynamic QR requires a valid URL in data."
    },
    "request_id": "5f5fbd38-f82f-49ad-bf11-f7f04ca9747a"
}

Wiederholungsstrategie

  • 429 rate_limited: mit exponentiellem Backoff plus Jitter erneut versuchen.
  • Retry-After beachten, wenn vorhanden.
  • 429 monthly_quota_exceeded: auf das Zurücksetzen des Kontingents warten oder einen Schlüssel mit verbleibendem Kontingent verwenden.
  • 5xx: mit begrenzter Anzahl an Versuchen erneut versuchen, dann Ihr Team benachrichtigen.
Fehlercode HTTP Wann es auftritt Was zu tun ist
invalid_api_key 401 Fehlender oder ungültiger API-Schlüssel Geben Sie einen gültigen Schlüssel über Bearer, X-API-Key oder das JSON-Body-Feld an.
invalid_content_type 415 Der Body ist nicht application/json Senden Sie Content-Type: application/json.
request_too_large 413 Die Payload überschreitet das konfigurierte Limit Reduzieren Sie die Body-Größe, insbesondere bei base64-Logos.
plan_upgrade_required 403 Der Tarif ist für die API nicht zulässig Wechseln Sie in Billing zu Business.
validation_error 422 Ungültige Felder wie URL, Farbe oder folderid Korrigieren Sie das Payload-Format und senden Sie es erneut.
rate_limited 429 Limit pro Minute erreicht Mit exponentiellem Backoff erneut versuchen und Retry-After beachten.
monthly_quota_exceeded 429 Monatliches Kontingent ausgeschöpft Auf das Zurücksetzen warten oder Kontingent- und Schlüsseleinstellungen anpassen.
qr_not_found 404 Das Löschziel fehlt oder gehört Ihnen nicht Prüfen Sie den Besitz von qrid und versuchen Sie es erneut.
internal_error 500 Unerwartetes serverseitiges Problem Mit Backoff erneut versuchen und request_id für den Support aufbewahren.

FAQ

Kurze Antworten auf die Fragen, die wir bei Integrationen am häufigsten sehen.

Wie viele API-Anfragen kann ich ausführen?

Die API ist nur für Business verfügbar. Das monatliche Kontingent ergibt sich aus deinem aktiven Tarif und den Schlüssel-Overrides. Das standardmäßige Business-Kontingent ist hoch, und Admins können es pro Schlüssel fein abstimmen.

Kann ich API-Schlüssel im JSON-Body senden?

Ja. Header-basierte Authentifizierung wird empfohlen, aber die Kompatibilitätsfelder apikey oder api_key im Body werden ebenfalls akzeptiert.

Werden per API erstellte QRs in meinem Dashboard angezeigt?

Ja. Jede erfolgreiche Erstellung wird in deinem Konto gespeichert und kann wie jeder andere QR verwaltet werden.

Was passiert, wenn ich Limits erreiche?

Du erhältst JSON-Fehler. Bei 429-Antworten beachte Retry-After und verwende exponentielles Backoff mit Jitter.

Kann ich einen QR aus einem anderen Konto löschen?

Nein. Löschen und Auflisten sind auf den Eigentümer des authentifizierten API-Schlüssels beschränkt.

Sicherheits-Best-Practices

  • API-Schlüssel niemals ungeschützt in Browser-JavaScript, mobilen Bundles oder öffentlichen Repositories offenlegen.
  • Verwenden Sie IP-Allowlists für API-Schlüssel, um die Nutzung auf vertrauenswürdige Server zu beschränken.
  • Protokollieren Sie request_id zusammen mit Ihren eigenen Trace-IDs, um Vorfälle schneller zu analysieren.
  • Rotieren Sie Schlüssel regelmäßig und sofort nach dem Bekanntwerden von Zugangsdatenlecks.
API-Schlüsselverwaltung öffnen