Zum Inhalt springen

Quick Start

fiskaly bietet Fiskalkonformitäts-APIs in ganz Europa. Wählen Sie unten Ihr Land, um direkt zur Integrierungsanleitung zu springen, oder scrollen Sie nach unten für eine praktische SIGN DE-Komplettanleitung.


Die folgende Anleitung verwendet Deutschland (SIGN DE) als konkretes Beispiel. Der Ablauf ist: authentifizieren → TSS erstellen → Transaktion signieren.

Zeitbedarf: ~5 Minuten mit cURL, ~15 Minuten beim Einbau in Anwendungscode.

Sie benötigen drei Dinge, bevor Sie beginnen:

  1. Ein fiskaly-Konto — kostenlos registrieren unter hub.fiskaly.com
  2. API-Zugangsdaten — generieren Sie einen API Key und ein Secret im HUB unter Ihrer Organisation
  3. Einen HTTP-Client — cURL, Postman oder die HTTP-Bibliothek Ihrer Sprache

Dieser Guide verwendet die Sandbox (TEST)-Umgebung. Alle neuen Organisationen starten hier. Es werden keine echten Fiskaldaten erstellt und Ihnen werden keine Kosten berechnet.

Sandbox (TEST)Produktion (LIVE)
Basis-URLhttps://kassensichv-middleware.fiskaly.com/api/v2https://kassensichv.fiskaly.com/api/v2
DatenFlüchtig — sicher zum ExperimentierenDauerhaft — prüfungsrelevant
AbrechnungKostenlosPer Vertrag
WechselStandard für neue OrgsAktivierung über HUB

Tauschen Sie Ihren API Key und Ihr Secret gegen einen Bearer-Token.

curl -X POST https://kassensichv-middleware.fiskaly.com/api/v2/auth \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "YOUR_API_KEY",
    "api_secret": "YOUR_API_SECRET"
  }'

Erwartete Antwort (200 OK):

{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"access_token_expires_in": 86400,
"refresh_token": "eyJhbGciOiJSUzI1NiIs...",
"refresh_token_expires_in": 172800
}

Der access_token ist 24 Stunden gültig. Der refresh_token ist 48 Stunden gültig. Fügen Sie den Access-Token als Authorization: Bearer <token> in alle nachfolgenden Anfragen ein.

Ein TSS (Technisches Sicherheitssystem) ist die zertifizierte Signing-Ressource. Sie benötigen eines pro physischem Standort. Das Erstellen eines TSS umfasst drei Unterschritte: erstellen, Admin-PIN setzen und initialisieren.

a) TSS erstellen

TSS_ID=$(uuidgen)

curl -X PUT "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Mein erstes TSS"
  }'

Erwartete Antwort (200 OK) — beachten Sie das Feld admin_puk:

{
"_id": "a1b2c3d4-...",
"description": "My first TSS",
"state": "UNINITIALIZED",
"admin_puk": "123456"
}

b) Admin-PIN setzen (mit dem admin_puk aus der obigen Antwort):

curl -X PATCH "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/admin" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "admin_puk": "123456",
    "new_admin_pin": "your-secure-admin-pin"
  }'

c) Als Admin authentifizieren und initialisieren:

# Als Admin authentifizieren
curl -X POST "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/admin/auth" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{ "admin_pin": "your-secure-admin-pin" }'

# TSS initialisieren
curl -X PATCH "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{ "state": "INITIALIZED" }'

Nach der Initialisierung ändert sich der TSS-state zu INITIALIZED. Sie können nun Clients erstellen und Transaktionen signieren.

Ein Client repräsentiert ein einzelnes POS-Terminal oder eine Anwendungsinstanz, die mit dem TSS verbunden ist.

CLIENT_ID=$(uuidgen)

curl -X PUT "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/client/${CLIENT_ID}" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{ "serial_number": "POS-001" }'

Transaktionen haben einen Lebenszyklus: starten (Status ACTIVE) dann abschließen (Status FINISHED). Die Abschluss-Antwort enthält die kryptografische Signatur.

a) Transaktion starten:

TX_ID=$(uuidgen)

curl -X PUT "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/tx/${TX_ID}?tx_revision=1" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "ACTIVE",
    "client_id": "YOUR_CLIENT_ID"
  }'

b) Transaktion abschließen (hier wird die Signatur generiert):

curl -X PUT "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/tx/${TX_ID}?tx_revision=2" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "FINISHED",
    "client_id": "YOUR_CLIENT_ID",
    "schema": {
      "standard_v1": {
        "receipt": {
          "receipt_type": "RECEIPT",
          "amounts_per_vat_rate": [
            { "vat_rate": "NORMAL", "amount": "10.00" }
          ],
          "amounts_per_payment_type": [
            { "payment_type": "CASH", "amount": "10.00" }
          ]
        }
      }
    }
  }'

Erwartete Antwort (200 OK) — die Schlüsselfelder sind signature und qr_code_data:

{
"_id": "tx-uuid-...",
"state": "FINISHED",
"number": 1,
"time_start": 1700000000,
"time_end": 1700000001,
"signature": {
"value": "dGVzdC1zaWduYXR1cmU=",
"algorithm": "ecdsa-plain-SHA384",
"counter": 1,
"public_key": "BHHz..."
},
"qr_code_data": "V0;TSS-ID;TX-NUMBER;..."
}

Der qr_code_data-String ist das, was Sie in den QR-Code kodieren, der auf dem Beleg gedruckt wird.

Nach Abschluss der Einrichtung melden Sie den Admin vom TSS ab:

Terminal-Fenster
curl -X POST "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/admin/logout" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
FehlerUrsacheLösung
401 UnauthorizedAbgelaufener oder falscher TokenErneut mit /auth authentifizieren. Prüfen Sie, ob Sie den richtigen API Key für diese Umgebung verwenden.
400 E_TSS_NOT_INITIALIZEDVersuch, einen Client oder eine Transaktion auf einem nicht initialisierten TSS zu erstellenAlle drei TSS-Einrichtungsschritte abschließen: erstellen, Admin-PIN setzen, initialisieren.
400 mit “admin_puk”-FehlerFalscher PUK beim Setzen der Admin-PINVerwenden Sie den admin_puk-Wert aus der TSS-Erstellungsantwort, nicht einen selbst gewählten Wert.
409 ConflictWiederverwendete UUID, die bereits existiertGenerieren Sie eine neue UUID für jede Ressource (TSS, Client, Transaktion).
422 E_TX_INVALID_STATEVersuch, eine Transaktion abzuschließen, die nicht ACTIVE istStarten Sie die Transaktion zuerst (Revision 1 mit state: ACTIVE), dann abschließen (Revision 2).

Für die vollständige Fehlerreferenz siehe Fehlercodes.

Wenn Sie einen GUI-basierten Workflow bevorzugen, laden Sie die vorkonfigurierte Postman-Sammlung herunter:

  1. Herunterladen

    Laden Sie die Postman-Sammlung und die Umgebungsdatei herunter.

  2. Importieren

    Importieren Sie beide Dateien in Postman.
  3. Konfigurieren

    Setzen Sie Ihren api_key und Ihr api_secret in den Umgebungsvariablen.

  4. Ausführen

    Führen Sie die Anfragen der Reihe nach aus — die Sammlung verwendet Variablen, um Antworten automatisch zu verketten.

Siehe das vollständige Postman-Tutorial für eine detaillierte Anleitung.

Was this page helpful?