QR-Code-API

Der QR-Code für Ihre Rechnungen, mit einem Aufruf.

Text oder Link senden und nur das Bild des QR-Codes erhalten, als PNG oder SVG, bereit für Ihre Rechnung, Ihren Beleg oder Ihr Etikett. Ein Code pro Aufruf, nichts wird gespeichert.

Kostenlos · 1.000 Codes pro Monat · SVG oder PNG

POST /v1/qr"text": "FT 2026/118""brand": "qrsensei"
Ihr Systemfragt den Code an
QrSenseiliefert das Bild in ~50 ms
Bäckerei MariaToastbrot ×412,40Monatsbestellung137,50Gesamt149,90 €
Ihr DokumentSie setzen den Code, wo Sie wollen

In drei Schritten bereit.

Ohne Karte, ohne Installation.

  1. Mit Google anmelden
    1

    Mit Google anmelden

    Kostenlos, ohne Karte, ohne Installation.

  2. Ihr Schlüssel · einmal gezeigtqs_live_7hK2…Kopieren
    2

    Schlüssel erstellen

    Ein Klick im Tab Entwickler Ihres Profils. Wir behalten nur einen Fingerabdruck.

  3. POST
    3

    Aufrufen und das Bild verwenden

    Sie erhalten nur das Bild des Codes und wie viele Ihnen bleiben. Das Dokument bleibt Ihres.

Erst sehen, dann programmieren.

Wählen Sie und sehen Sie den Code auf einem Beispieldokument in echter Größe. Gleich darunter der fertige Aufruf.

Das Wichtigste auf einen Blick.

  • Der Schlüssel bleibt auf Ihrem Server

    Er steht im Authorization-Header. Nie in einem Browser oder einer App.

  • 6201.000

    1.000 Codes pro Monat

    Beginnt am 1. neu. Bis zu 30 Aufrufe pro Minute, je ein Code.

  • Die Marke kommt von selbst

    Ein WhatsApp-Link bekommt das WhatsApp-Logo. Oder wählen Sie Ihre, oder keine.

  • +52

    59 Inhaltstypen

    Dieselben wie im Editor, mit denselben Prüfregeln.

  • Ihr Stil, gespeichert

    Im Profil gestalten und per id nutzen, oder direkt im Aufruf angeben.

  • 400 · content.ssid: required429 · quota-exceeded500 · render-failed

    Fehler, die sagen, was los ist

    Ein Code für Ihr Programm, ein Satz für Menschen. Fehler kosten kein Kontingent.

Drei Adressen, mehr nicht.

Alle unter https://api.qrsensei.com, mit Ihrem Schlüssel im Authorization-Header. Antworten sind immer JSON.

  • POST/v1/qr

    Zählt 1 Code Ihres Monats (1.000)

    Erzeugt einen Code: Inhalt senden (und auf Wunsch Marke, Stil, Format und Größe) und das Bild als data-URL erhalten, mit Ihrem Restkontingent.

    { "image": "data:image/png;base64,…", "format": "png", "remaining": 902, "limit": 1000, "resetsAt": "…" }
  • GET/v1/usage

    Wird nicht gezählt

    Wie viel Sie verbraucht haben und was diesen Monat bleibt, kostenlos. Praktisch vor einem großen Rechnungslauf.

    { "used": 98, "remaining": 902, "limit": 1000, "resetsAt": "…" }
  • GET/v1/brands

    Wird nicht gezählt

    Die Marken, die Sie in brand angeben können. Öffentlich, ohne Schlüssel, gecacht.

    { "brands": ["qrsensei", "instagram", "whatsapp", …], "auto": "auto", "none": "none" }

Häufige Fragen

Ist es wirklich kostenlos? Wie viele Codes kann ich erzeugen?

Ja. Jedes Konto hat 1.000 Codes pro Monat, alle Anwendungen zusammen, und der Zähler beginnt am 1. neu. Der aktuelle Wert steht immer hier und in Ihrem Profil.

Speichern Sie den Inhalt meiner Codes?

Nein. Der Inhalt reist im Request-Body, wird gezeichnet und zurückgegeben; nichts davon wird gespeichert oder geloggt. Für Ihr Konto behalten wir nur einen Monatszähler.

PNG oder SVG?

SVG, wann immer Ihr PDF oder Ihre Seite es annimmt: in jeder Größe scharf und leichter. PNG für Systeme, die nur Bilder annehmen; es wird in der gewünschten Größe gezeichnet.

Welche Größe auf einer Rechnung?

Gedruckt 2 bis 3 cm, also size 256 bis 384 bei 300 dpi. Unter 1,5 cm zögern viele Handys. Das Testlabor zeigt die echte Größe auf dem Papier.

Kann ich die API aus dem Browser oder einer App aufrufen?

Nein: Der Schlüssel wäre für alle sichtbar. Rufen Sie sie von Ihrem Server auf und schicken Sie das fertige Bild an Browser oder App.

Wie bringe ich das Bild in ein PDF?

Die Antwort enthält das Bild als data-URL. In einem HTML-zu-PDF-Generator direkt in ein <img> setzen. In PDF-Bibliotheken das Base64 nach dem Komma nehmen, dekodieren und als Bild einfügen.

Ist der Code immer lesbar?

Jeder Stil wird vor der Annahme geprüft (passende Formen, mindestens 4,5:1 Kontrast), und die Fehlerkorrektur wird nach Größe und Logo gewählt. Testen Sie im Testlabor: Es liest den Code wie ein Handy.

Was passiert, wenn ich das Limit überschreite?

Die API antwortet mit 429 (quota-exceeded) und dem Datum des Neustarts; es wird nichts berechnet. Aufrufe mit Fehler zählen nie, und GET /v1/usage zeigt, was übrig ist.

Kann ich meine eigene Marke in die Mitte setzen?

Sie können die am Link erkannte Marke ("auto"), eine Katalogmarke, die von QrSensei oder keine verwenden. Eigene Logos lassen sich noch nicht über die API senden.

Welche Zahlungen kann der Code enthalten?

Jeden Zahlungslink (Stripe, PayPal, Mercado Pago …) als Link sowie die Formate, die Banken direkt lesen: SEPA (EPC, in Europa) und PIX (in Brasilien).

Kann sich die API ändern und mein System brechen?

Nicht ohne Ankündigung. Alles liegt unter /v1: Was heute funktioniert, bleibt; Neues kommt als optionale Felder.

Vollständige Referenz: alle Felder, Typen und Fehler

Code erzeugen

Ein POST mit dem Inhalt im Body. Der Inhalt steht nie in der Adresse, damit er nicht in den Logs von Servern unterwegs landet.

curl https://api.qrsensei.com/v1/qr \
  -H "Authorization: Bearer $QRSENSEI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "content": {
    "type": "text",
    "text": "FT 2026/118 · 149,90 EUR"
  },
  "brand": "qrsensei",
  "style": {
    "color": {
      "kind": "solid",
      "color": "#18181B"
    }
  },
  "format": "png",
  "size": 256
}'

Request-Body

FeldWerteBedeutung
contentObjektWas der Code enthält, mit seinem type. Siehe Inhalte.
format"svg" · "png"Standardmäßig SVG: in jeder Größe scharf und leichter. PNG für Systeme, die nur Bilder annehmen.
size128 – 1024Die Bildseite in Pixeln (Standard 512). Für eine Rechnung reicht 256.
styleid · ObjektEiner Ihrer Stile per id, oder ein im Aufruf geschriebener Stil. Ohne ihn: der Stil der Anwendung oder der Standard des Kontos.
brand"auto" · "none" · …Das Logo in der Mitte: am Link erkannt (auto), der Name einer Marke, oder keines.

Antwort

200 OK
{
  "image": "data:image/png;base64,iVBORw0KGgo…",
  "format": "png",
  "remaining": 902,
  "limit": 1000,
  "resetsAt": "2026-12-01T00:00:00.000Z"
}

Dieselben Zahlen stehen in den Headern X-QrSensei-Remaining, X-QrSensei-Limit und X-QrSensei-Reset.

Authentifizierung

Jeder Aufruf trägt den Schlüssel Ihrer Anwendung im Header Authorization: Bearer qs_live_….

  • Der Schlüssel wird nur einmal gezeigt, beim Erstellen. Wir behalten nur einen Fingerabdruck: Geht er verloren, erstellen Sie im Profil einen neuen, und der alte funktioniert nicht mehr.
  • Rufen Sie von Ihrem Server auf, nie aus einem Browser oder einer App: Ein Schlüssel im Frontend-Code kann von jedem gelesen werden.
  • Von den Codes wird nichts gespeichert: weder Inhalt noch Bilder. Nur eine Zählung pro Monat.

Inhalte

Dieselben Typen wie im Editor, mit denselben Regeln. Diese Tabelle wird aus den Regeln gelesen, die jeden Aufruf prüfen: Sie kann nicht veralten.

typePflichtOptional
urlurl—
texttext—
phonephone—
emailemailsubject, body
smsphonemessage
wifissid, passwordencryption, hidden
vcardfirstNamelastName, organization, title, phone, email, website, address, note
rawpayload—
whatsappphonemessage
telegramusernameOrHandlemessage
signalrecipientmessage
viberrecipientmessage
mecardnameorganization, phone, email, website, address, note
geolatitude, longitudelabel
googleMaps—latitude, longitude, query
waze—latitude, longitude, query
eventtitle, start, endlocation, description, allDay
pixpixKey, merchantName, merchantCityamount, txid, description
epcbeneficiaryName, ibanbic, amount, reference, remittance
paypalpaypalHandleOrEmailamount, currency, note, paymentUrl
mbwayphoneamount, note
cryptoWalletaddresscurrency, amount, network, memo
deepLinkuri—
otpissuer, accountName, secretotpType, algorithm, digits, period, counter
authuri—
structuredTexttext—
paramUrlbaseUrlparams
customContentcontent—
LinksurlcalendarLink · instagram · facebook · linkedin · x · tiktok · youtube · github · spotify · snapchat · pinterest · threads · discord · appStore · googlePlay · appGallery · microsoftStore · pdf · fileDownload · onlineDocument · portfolio · menu · digitalCard · coupon · landingPage · form · review · checkIn · rsvp · catalog · credentialLink

Ein WLAN ohne Passwort bekommt encryption "nopass". Ein weggelassenes Feld bleibt leer; ein fehlendes Pflichtfeld wird im detail des Fehlers genannt.

Stile

Im Profil gestaltet, mit dem Code live daneben. Jeder hat eine id, einer ist Ihr Standard; oder schreiben Sie den Stil direkt in den Aufruf, als style.

Das Aussehen der Marke, ihr Logo auf einer Platte
{}
Für Rechnungen: schwarz, ohne Hintergrund
{ "color": { "kind": "solid", "color": "#18181B" }, "background": { "kind": "transparent" }, "quietZone": 2 }
Verlaufstinte auf cremefarbenem Papier
{ "dots": "dots", "finders": "drop", "color": { "kind": "gradient", "type": "linear", "angle": 45, "stops": [ "#0F172A", "#1E40AF" ] }, "background": { "kind": "solid", "color": "#FFF7ED" } }

Ein Stil wird nur angenommen, wenn er lesbar ist: Formen, die zusammenpassen, und Tinte dunkler als ihr Papier, mit mindestens 4,5:1 Kontrast. Ein transparenter Code wird gegen Weiß geprüft, das Papier einer Rechnung.

Marken

"auto" erkennt die Marke am Link (ein Instagram-Link bekommt das Instagram-Logo). Ein Name legt die Marke fest; "none" lässt die Mitte frei. Die Liste kommt auch von GET /v1/brands.

Gegen Phishing: Auf einem Link wird eine festgelegte Marke nur verwendet, wenn der Link ihr gehört. Das Logo einer Bank landet nie auf einem gefälschten Link.

  • qrsensei
  • instagram
  • facebook
  • linkedin
  • x
  • tiktok
  • youtube
  • github
  • spotify
  • whatsapp
  • telegram
  • signal
  • viber
  • snapchat
  • pinterest
  • threads
  • discord
  • reddit
  • messenger
  • googleMaps
  • appleMaps
  • waze
  • paypal
  • revolut
  • wise
  • stripe

Limits

Pro Monat1.000 Codes pro Konto, alle Anwendungen zusammen. Beginnt am 1. um 00:00 UTC neu.
Pro Minute30 Aufrufe pro Anwendung. Ein Code pro Aufruf: keine Massenerzeugung.
Nicht gezähltAufrufe mit Fehler, GET /v1/usage und GET /v1/brands.

Fehler

Immer ein error-Objekt mit code, message und, wo es hilft, detail: Der code ist für Ihr Programm, die message für Menschen. Ein Aufruf mit Fehler wird nicht gezählt.

StatuscodeWann
401missing-keyKein Schlüssel im Authorization-Header.
401invalid-keyDer Schlüssel existiert nicht oder wurde ersetzt.
400invalid-jsonDer Body ist kein JSON.
400invalid-requestEin Feld außerhalb der Liste oder ein Wert außerhalb des Bereichs; detail nennt es.
400invalid-contentEin Pflichtfeld fehlt oder ist falsch; detail nennt es.
400unknown-brandDiese Marke steht nicht in GET /v1/brands.
422brand-mismatchEine festgelegte Marke auf einem fremden Link.
404unknown-styleDiese Stil-id gehört nicht zu Ihrem Konto.
403not-developerDer Entwicklermodus ist im Konto ausgeschaltet.
403suspendedDas Konto kann die API gerade nicht nutzen.
413too-largeDer Body ist größer als 16 KB.
429quota-exceededDie Codes dieses Monats sind aufgebraucht.
429rate-limitedZu viele Aufrufe in dieser Minute; Retry-After sagt, wie lange zu warten ist.
500render-failedDer Code konnte nicht gezeichnet werden. Nicht gezählt.
503api-offDie API ist vorübergehend abgeschaltet. Nicht gezählt.