Kasseneck API

HTTPS-Schnittstelle für österreichische Registrierkassen nach RKSV. Erstelle signierte Belege, rufe sie ab und lade Beleg-PDFs – für POS-Systeme, Kassenhersteller und Integrationspartner.

Interaktive Referenz → OpenAPI-Spezifikation Dart/Flutter-Paket JS/TS-Paket llms.txt

Was ist die Kasseneck API?

Die Kasseneck API setzt die österreichische Registrierkassensicherheitsverordnung (RKSV) um (BAO §131, BMF-DEP). Jeder Beleg wird kryptografisch signiert (ES256) und in eine manipulationssichere Kette (DEP – Datenerfassungsprotokoll) eingehängt. Kasseneck ist ein Produkt der Kreiseck.

Offizielle Pakete

Für die Anbindung gibt es zwei gepflegte Pakete – der schnellste Weg ohne manuelle HTTP-Aufrufe. Beide bilden denselben Funktionsumfang ab.

Dart und Flutter: kasseneck_api auf pub.dev.

flutter pub add kasseneck_api

JavaScript und TypeScript: @kreiseck/kasseneck-api auf npm.

npm install @kreiseck/kasseneck-api

Basis-URL

Alle direkten Aufrufe laufen über HTTPS unter der versionierten Basis:

https://api.kasseneck.at/v3/<endpoint>

/v3 ist die aktuelle Fassung aller Endpunkte: englische Feldnamen, Werte und Fehlercodes (Fließtext wie message bleibt deutsch). /v1 und /v2 laufen unverändert weiter, sind aber abgekündigt (Kopfzeilen Deprecation/Sunset/Link, Abschaltung erst nach nachgewiesen null Aufrufen); was sich geändert hat, steht in der OpenAPI je Bereich unter „Migrating from v1“.

Authentifizierung

Geräte-Endpunkte verwenden zwei Merkmale im HTTP-Header:

HeaderBeschreibung
Authorization: Bearer <api_key>Geräte-/API-Schlüssel (kr_live_… bzw. kr_test_…).
cashregister-token: <token>Kassen-Token der Registrierkasse (cb_live_… / cb_test_…).

Test- und Live-Umgebung

Schlüssel mit dem Präfix kr_test_ arbeiten in einer Sandbox (production:false) mit Testsignatur – strukturell valide, aber keine rechtsgültigen RKSV-Belege. Ideal zum Integrieren. kr_live_ erzeugt echte, rechtsgültige Belege.

Antwortformat

JSON-Endpunkte liefern HTTP 200 mit einem einheitlichen Envelope:

{ "status": "success" | "error", "message": "...", "data": { ... } }

Fachliche Fehler kommen ebenfalls mit HTTP 200 und status: "error".

Endpunkte

POST /v3/createReceipt

Erstellt und signiert einen Beleg. Der erste Beleg einer Kasse muss ein start-Beleg sein, danach folgen standard-Belege. Erfordert das aktive Modul registrierkasse.

receiptType: start, standard, zero, training. Bezahlt wird über die Liste payments (unter /v3 Pflicht, auch mehrere Zahlungen je Beleg); ein Storno läuft über /v3/cancelReceipt.

POST /v3/getReceipt

Ruft einen zuvor erstellten Beleg anhand seiner receiptId ab.

POST /v3/cancelReceipt

Storniert einen Beleg ganz oder teilweise; das Original bleibt unverändert.

GET /v3/downloadReceipt?fullReceiptId=…

Liefert das Beleg-PDF direkt. Autorisierung über den verschlüsselten fullReceiptId-Token aus der createReceipt-Antwort (Capability-Link, kein API-Schlüssel nötig).

Dazu Belegmail, Berichte, Zahlungsterminals und FinanzOnline; alle Endpunkte stehen in der Referenz, Abschnitt Receipts.

Rechnungs-API

Rechnungen nach § 11 UStG (keine Belege) aus Shop, Buchhaltungs- oder Branchensoftware: Kunden, Ausstellen (festgeschrieben, fortlaufend nummeriert), Gutschriften, PDF und E-Rechnung (UBL/CII). Anmeldung mit dem API-Schlüssel des Betriebs, ohne cashregister-token. Alle Endpunkte unter https://api.kasseneck.at/v3/<endpoint> in der Referenz, Abschnitt Invoices.

Lager-API

Artikel, Standorte, Bestand und Lagerbewegungen lesen und jede Bestandsänderung per Webhook erfahren (signiert, mit Wiederholung), etwa um einen Online-Shop mit dem Lager im Geschäft abzugleichen. Anmeldung mit dem API-Schlüssel des Betriebs, nur unter /v3; Mengen als Ganzzahl in Tausendstel, Geld in Cent.

Schreiben ist möglich, sobald Kasseneck „Lager-API schreiben“ für den Betrieb freischaltet: Artikel anlegen, ändern und stilllegen, Wareneingang, Umbuchung, Abgang und Zustand buchen sowie Ware für Bestellungen reservieren – jeder schreibende Aufruf mit idempotencyKey. Der Ablauf einer Bestellung: reservieren (createReservation), dann die Rechnung mit issueInvoice und reservationId je Position ausstellen; beim Buchen der Rechnung wird die Reservierung eingelöst, sonst läuft sie ab oder wird freigegeben. Mindestbestände je Standort melden sich am verfügbaren Bestand (Bestand minus reserviert), per Hinweis an der Buchung und per Webhook stock.below_minimum. Alle Endpunkte und Ereignisse in der Referenz, Abschnitt Inventory.

Varianten (Größe, Farbe, bis zu drei Merkmale) legt ein Shop als Variantengruppe an (createVariantGroup), mit genau den Kombinationen, die er führt, und seiner eigenen Kennung je Variante; jede Variante ist ein gewöhnlicher Artikel mit eigenem Bestand. Eine neue Größe kommt mit updateVariantGroup (addAttributeValues) und addVariant dazu, Änderungen meldet der Webhook variant_group.updated. Grenzen: höchstens 100 Kombinationen je Aufruf, 250 aktive Varianten je Gruppe, 3 Merkmale und 30 Werte je Merkmal.

Inventur je Standort: anlegen (createStocktake, Stichtag oder permanent, standardmäßig blind), von beliebig vielen Geräten zählen (recordStocktakeCount, Zählungen einer Position werden addiert), prüfen (reviewStocktake: erst jetzt gibt es Soll und Differenz, gerechnet zum Zeitpunkt der letzten Zählung je Position), bei Bedarf nachzählen und abschließen (closeStocktake). Der Abschluss bucht die Differenzen im Hintergrund in Teilen und legt ein unveränderliches Protokoll an (getStocktakePdf). Höchstens eine offene Inventur je Standort und 5000 Positionen je Inventur.

Partner-API

Für Partner (Software-Anbieter, Steuerberatungen, Wiederverkäufer), die Betriebe bei Kasseneck anmelden: Anmeldung mit einem Partner-Schlüssel (Authorization: Bearer pk_live_… / pk_test_…) aus dem Partner-Portal, ohne cashregister-token. Ein Betrieb entsteht mit einem Aufruf (createPartnerCustomer, alle Pflichtdaten, Feldfehler mit Pfad, idempotencyKey), danach richtet der Betrieb seinen FinanzOnline-Zugang über einen Link ein; Status und Webhooks (signiert, mit Wiederholung) sagen, wie es weitergeht. Alle Endpunkte, Felder, Fehlercodes, der Statuskatalog und die Signaturprüfung stehen in der Referenz, Abschnitt Partner.

Aktuelle Basis-URL: https://api.kasseneck.at/v3/<endpoint>, englische Feldnamen und Werte durchgehend (Fließtext wie message und note bleibt deutsch). /v1 läuft unverändert weiter, ist aber abgekündigt (siehe oben); die Umstellung steht in der OpenAPI unter „Migrating from v1“.

curl -s https://api.kasseneck.at/v3/getPartnerInfo \
  -H "Authorization: Bearer pk_test_…" \
  -H "Content-Type: application/json" \
  -d '{"params":{}}'

Über die Partner-API laufen auch Signaturantrag (requestCustomerSignature), Kassenanlage und Inbetriebnahme (createCustomerCashregister, activateCashregister) sowie die Zugangsdaten des Betriebs für createReceipt (getCustomerCredentials). Die Referenz ist englisch.

Noch nicht verfügbar: eine laufende Kasse außer Betrieb nehmen und eine defekte Karte ersetzen; beides erledigt Kasseneck. Fragen dazu: hello@kasseneck.at.

Schnellstart

1) Startbeleg (einmalig zuerst pro Kasse):

curl -X POST https://api.kasseneck.at/v3/createReceipt \
  -H "Authorization: Bearer kr_test_…" \
  -H "cashregister-token: cb_test_…" \
  -H "Content-Type: application/json" \
  -d '{"params":{"receiptType":"start"}}'

2) Umsatzbeleg:

curl -X POST https://api.kasseneck.at/v3/createReceipt \
  -H "Authorization: Bearer kr_test_…" \
  -H "cashregister-token: cb_test_…" \
  -H "Content-Type: application/json" \
  -d '{"params":{"receiptType":"standard",
       "items":[{"name":"Kaffee","quantity":2,"unitPriceCents":350,"vatRate":20}],
       "payments":[{"method":"cash","amountCents":700}]}}'

Die Antwort enthält den signierten Beleg (data.receipt.sig, data.receipt.qr) und den fullReceiptId-Token für das PDF.


Vollständige Schemas, alle Felder und Fehlercodes findest du in der interaktiven Referenz und der maschinenlesbaren OpenAPI-Spezifikation. Zugang und Schlüssel auf Anfrage.