Zum Inhalt springen

Schritt-für-Schritt-Integration

Diese Anleitung führt Sie durch den vollständigen Prozess der Einrichtung Ihres Systems mit fiskaly SIGN DE, unter Verwendung einer Kombination aus dem fiskaly HUB, der Management API und der SIGN DE API. Am Ende verfügen Sie über eine vollständig eingerichtete verwaltete Organisation mit einem TSS und einem Client, der bereit ist, Transaktionen zu signieren.

Bevor wir mit der Einrichtung beginnen, hier ist, was Sie konfigurieren werden:

🏢

Account & Gruppe

Ihr Account ist die übergeordnete Entität, die bei der Registrierung im HUB erstellt wird — er repräsentiert Ihr Unternehmen als POS-Anbieter oder Händler. Eine Gruppe ist eine Zwischenschicht innerhalb des Accounts, die dazu dient, verwaltete Organisationen logisch zu bündeln (z. B. eine Gruppe pro Land).

🔑

API-Schlüssel & Token

Im HUB generierte Zugangsdaten und über die Management API und SIGN DE erhaltene Token, die zur Authentifizierung aller nachfolgenden Anfragen verwendet werden.

🏬

Verwaltete Organisation

Repräsentiert einen einzelnen physischen Standort (z. B. ein Geschäft oder Restaurant), im HUB als Unit bezeichnet. Wird über die Management API erstellt und mit einer Gruppe innerhalb Ihres Accounts verknüpft.

🛡️

TSS (Technische Sicherheitseinrichtung)

Die zentrale Signierkomponente. Muss erstellt, mit einer Admin-PIN konfiguriert und initialisiert werden, bevor sie Transaktionen signieren kann.

💻

Client

Repräsentiert ein POS-Terminal oder eine Anwendung, die Transaktionen gegen ein TSS erstellt.

🧾

Transaktion

Ein signierter Fiskalbeleg. Sobald Ihr TSS und Client bereit sind, können Sie Transaktionen starten und abschließen, um kryptografische Signaturen zu erzeugen.

Das folgende Diagramm zeigt alle zehn Schritte der SIGN DE-Integration. Klicken Sie auf eine Kachel, um zum entsprechenden Einrichtungsschritt zu springen.

SIGN DE integration workflowTen-step SIGN DE integration workflow with tiles linking to the matching setup steps below.Register on HUBHUBCreate Account &OrganizationGroupHUBCreate API KeyHUBCreate Token(Management API)Management APICreate managedorganization(s)Management APICreate API Key(managed org)Management APICreate Token(SIGN DE)SIGN DE APICreate TSSSIGN DE APICreate ClientSIGN DE APICreateTransactionSIGN DE API
  1. Im HUB registrieren

    Gehen Sie zu hub.fiskaly.com und erstellen Sie Ihren fiskaly-Account. Sie erhalten eine Bestätigungs-E-Mail — klicken Sie auf den Link, um Ihre Adresse zu verifizieren und Ihren Account zu aktivieren.

  2. Account & Gruppe erstellen

    Wenn Sie sich zum ersten Mal im HUB anmelden, werden Sie aufgefordert, Ihren Account einzurichten — die übergeordnete Entität, die Ihr Unternehmen (POS-Anbieter oder Händler) repräsentiert. Der HUB führt Sie auch zur Erstellung einer Gruppe, einer Zwischenschicht innerhalb Ihres Accounts zur logischen Bündelung von verwalteten Organisationen (z. B. eine Gruppe pro Land).

    HUB Organisationserstellung

    Nach Abschluss der Einrichtung zeigt der HUB Ihre aktuelle Übersicht — zunächst mit 0 TSS und 0 Clients.

    HUB Übersicht
  3. API-Schlüssel erstellen

    Navigieren Sie im fiskaly HUB zum Bereich API-Schlüssel und erstellen Sie einen neuen API-Schlüssel für Ihren Account.

    API-Schlüssel-Bereich im fiskaly HUB

    Sie erhalten einen API-Schlüssel und ein API-Geheimnis. Bewahren Sie diese sicher auf — Sie benötigen sie für alle nachfolgenden API-Anfragen.

  4. Token erstellen (Management API)

    Verwenden Sie den API-Schlüssel und das API-Geheimnis aus dem vorherigen Schritt, um ein Management API-Zugriffstoken zu erhalten.

    curl -X POST https://dashboard.fiskaly.com/api/v0/auth \
      -H "Content-Type: application/json" \
      -d '{
        "api_key": "your_api_key",
        "api_secret": "your_api_secret"
      }'
    Beispielantwort (200 OK)
    {
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "access_token_claims": {
    "env": "TEST",
    "organization_id": "00000000-0000-0000-0000-000000000000"
    },
    "access_token_expires_in": 300,
    "access_token_expires_at": 1577833200,
    "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token_expires_in": 300,
    "refresh_token_expires_at": 1577833200
    }

    Verwenden Sie das access_token als Bearer-Token im Authorization-Header für alle Management API-Anfragen.

  5. Verwaltete Organisation(en) erstellen

    Erstellen Sie eine oder mehrere verwaltete Organisationen (im HUB auch als Units bezeichnet) unter Ihrer Gruppe. Jede Unit repräsentiert typischerweise einen einzelnen physischen Standort wie ein Geschäft oder Restaurant.

    curl -X POST "https://dashboard.fiskaly.com/api/v0/organizations" \
      -H "Authorization: Bearer ${MANAGEMENT_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "My Store Berlin",
        "managed_by_organization_id": "your-group-id",
        "address_line1": "Unter den Linden 1",
        "zip": "10117",
        "town": "Berlin",
        "country_code": "DEU"
      }'
    Beispielantwort (200 OK)
    {
    "_id": "your-managed-org-id",
    "_type": "ORGANIZATION",
    "name": "My Store Berlin",
    "managed_by_organization_id": "your-group-id",
    "address_line1": "Unter den Linden 1",
    "zip": "10117",
    "town": "Berlin",
    "country_code": "DEU",
    "state": "active",
    "time_creation": "2026-03-01T10:00:00Z"
    }

    Notieren Sie die _id aus der Antwort — dies ist Ihre verwaltete Organisations-ID, die Sie im nächsten Schritt benötigen.

  6. API-Schlüssel erstellen (verwaltete Organisation)

    Generieren Sie einen dedizierten API-Schlüssel für die verwaltete Organisation. Dieser Schlüssel wird zur Authentifizierung von SIGN DE API-Anfragen verwendet, die auf diese Organisation beschränkt sind.

    curl -X POST "https://dashboard.fiskaly.com/api/v0/organizations/${ORG_ID}/api-keys" \
      -H "Authorization: Bearer ${MANAGEMENT_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "sign-de-key",
        "status": "enabled",
        "managed_by_organization_id": "your-group-id"
      }'
    Beispielantwort (200 OK)
    {
    "_id": "your-api-key-id",
    "_type": "MANAGED_API_KEY",
    "_envs": ["TEST"],
    "name": "sign-de-key",
    "key": "your-api-key",
    "secret": "your-api-secret",
    "status": "enabled",
    "managed_by_organization_id": "your-group-id",
    "created_at": 1577833200
    }
  7. Token erstellen (SIGN DE)

    Verwenden Sie den API-Schlüssel und das API-Geheimnis der verwalteten Organisation, um ein SIGN DE-Zugriffstoken zu erhalten.

    curl -X POST https://kassensichv-middleware.fiskaly.com/api/v2/auth \
      -H "Content-Type: application/json" \
      -d '{
        "api_key": "managed_org_api_key",
        "api_secret": "managed_org_api_secret"
      }'
    Beispielantwort (200 OK)
    {
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "access_token_claims": {
    "env": "TESTING",
    "organization_id": "your-managed-org-id"
    },
    "access_token_expires_in": 86400,
    "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token_expires_in": 172800
    }

    Verwenden Sie dieses access_token als Bearer-Token für alle nachfolgenden SIGN DE API-Anfragen.

  8. TSS erstellen

    Erstellen Sie eine neue Technische Sicherheitseinrichtung (TSS) durch Senden einer PUT-Anfrage mit einer eindeutigen TSS-ID (UUID). Die TSS muss dann initialisiert werden, bevor sie Transaktionen signieren kann.

    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 '{"metadata": {}}'
    Beispielantwort (200 OK)
    {
    "_id": "your-tss-id",
    "_type": "TSS",
    "_env": "TEST",
    "_version": "2.2.2",
    "admin_puk": "initial-puk-from-creation",
    "state": "CREATED",
    "serial_number": "a1b2c3d4e5f6...",
    "public_key": "MFkwEwYH...",
    "certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
    "signature_algorithm": "ECDSA",
    "signature_timestamp_format": "unixTime",
    "transaction_data_encoding": "UTF-8",
    "max_number_registered_clients": 100,
    "max_number_active_transactions": 1000,
    "time_creation": 1577833200,
    "metadata": {}
    }

    Initialisieren Sie die TSS nach der Erstellung in vier Teilschritten:

    a) TSS personalisieren

    Verschieben Sie die TSS vom Zustand CREATED in den Zustand UNINITIALIZED, bevor Sie die Admin-PIN ändern:

    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": "UNINITIALIZED"}'

    b) Admin-PIN ändern

    Die TSS wird im Zustand UNINITIALIZED erstellt. Sie müssen eine neue Admin-PIN mit dem admin_puk aus der Erstellungsantwort festlegen.

    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": "puk-from-creation-response",
        "new_admin_pin": "your-secure-admin-pin"
      }'

    c) 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"
      }'

    d) TSS initialisieren

    Aktualisieren Sie den TSS-Status auf INITIALIZED:

    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"
      }'
    Beispielantwort (200 OK)
    {
    "_id": "your-tss-id",
    "_type": "TSS",
    "state": "INITIALIZED",
    "certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
    "serial_number": "a1b2c3d4e5f6...",
    "signature_algorithm": "ECDSA",
    "max_number_registered_clients": 100,
    "max_number_active_transactions": 1000,
    "time_creation": "2026-03-01T10:00:00Z"
    }
    curl -X POST "https://kassensichv-middleware.fiskaly.com/api/v2/tss/${TSS_ID}/admin/logout" \
      -H "Authorization: Bearer ${ACCESS_TOKEN}"
  9. Client erstellen

    Mit der initialisierten TSS erstellen Sie einen Client, der Ihr POS-Terminal oder Ihre Anwendung repräsentiert.

    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"
      }'
    Beispielantwort (200 OK)
    {
    "_id": "your-client-id",
    "_type": "CLIENT",
    "serial_number": "POS-001",
    "state": "REGISTERED",
    "tss_id": "your-tss-id",
    "time_creation": "2026-03-01T10:00:00Z"
    }
  10. Täglicher Betrieb: Transaktion erstellen

    Da Ihr TSS und Client nun bereitgestellt sind, sind Sie bereit für den täglichen Betrieb. Transaktionen folgen einem zweistufigen Lebenszyklus, der dem realen Kassierprozess entspricht:

    • Starten der Transaktion (Kasse öffnen) — senden Sie nur state: "ACTIVE" und client_id. An diesem Punkt ist kein Belegschema erforderlich.
    • Abschließen der Transaktion (nach Zahlungsabschluss) — senden Sie das vollständige Belegschema mit Beträgen und Zahlungsart, um die kryptografische Signatur zu erzeugen.

    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

    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" }
              ]
            }
          }
        }
      }'
    Beispielantwort (200 OK)
    {
    "_id": "your-tx-id",
    "_type": "TRANSACTION",
    "state": "FINISHED",
    "client_id": "your-client-id",
    "tss_id": "your-tss-id",
    "time_start": "2026-03-01T10:00:00Z",
    "time_end": "2026-03-01T10:05:00Z",
    "qr_code_data": "V0;955002-00;Kassenbeleg-V1;...",
    "signature": {
    "value": "MEUCIQDx...",
    "timestamp": "2026-03-01T10:05:00Z",
    "serial_number": "a1b2c3d4e5f6..."
    }
    }

    Die Antwort enthält die signierte Transaktion mit einem qr_code_data-String für den Beleg-QR-Code und einer kryptografischen signature der TSS.

Was this page helpful?