Entwickler-Handbuch

STS-Online in Ihr Programm einbinden

Die REST-Schnittstelle macht die Funktionen von STS-Online für andere Programme nutzbar, hier mit Blick auf Software von Buchstellen, Kanzleien und Beratungsstellen. Es sind dieselben Funktionen wie in der Oberfläche, abgesichert nach dem OAuth-2.0-Standard.

REST · JSON · UTF-8OAuth 2.0 Client CredentialsSignierte WebhooksOpenAPI 3

Überblick

1Zugang

Der Inhaber der Organisation legt in STS-Online einen Zugang an und gibt Ihnen Kennung und Geheimnis.

2Token

Ihr Programm tauscht Kennung und Geheimnis gegen ein kurzlebiges Zugriffstoken.

3Aufrufe

Mit dem Token rufen Sie die Endpunkte auf. Sie sehen ausschließlich die Daten dieser einen Organisation.

4Ereignisse

Auf Wunsch meldet STS-Online Änderungen per Webhook an Ihr Programm.

Basisadresse: https://www.steuersoft.online. Alle Pfade beginnen mit /api/v1/. Verbindungen sind ausschließlich per HTTPS möglich.

Ihre Schwerpunkte

Typische Bereiche für Software von Buchstellen, Kanzleien und Beratungsstellen. Die Endpunkt-Referenz stellt sie nach vorn.

Stammdaten abgleichen

Mandanten mit Ihrer Nummer als externe_id anlegen und doppelte Anlage vermeiden.

Erklärungen

Fälle anlegen, Werte schreiben, berechnen, prüfen und übermitteln.

Belege & Dateien

Belege und E-Bilanz-Dateien am Fall hinterlegen.

Benachrichtigungen

Änderungen und Übermittlungen per Webhook empfangen.

Die übrigen Funktionen stehen ebenfalls zur Verfügung. Was ein Zugang tatsächlich darf, legt die Organisation über die Rechte fest.

Schnellstart

1. Zugriffstoken anfordern

Kennung (stsc_…) und Geheimnis (stss_…) im Basic-Kopf, grant_type=client_credentials im Körper. Die Antwort enthält access_token und expires_in (Sekunden). Fordern Sie kurz vor Ablauf oder nach einer Antwort 401 ein neues Token an.

curl -s -u "$STS_CLIENT_ID:$STS_CLIENT_SECRET" \
  -d grant_type=client_credentials \
  https://www.steuersoft.online/api/v1/extern/token

2. Verbindung testen

GET /api/v1/extern/ich zeigt Zugang, Organisation und Berechtigungen.

curl -s -H "Authorization: Bearer $TOKEN" https://www.steuersoft.online/api/v1/extern/ich

3. Daten anlegen – sicher gegen Doppel

curl -s -X POST https://www.steuersoft.online/api/v1/mandanten \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"nachname": "Muster", "vorname": "Erika", "externe_id": "M-100"}'
Geheimnis schützen
Legen Sie das Geheimnis nur serverseitig bzw. im Passwort-Tresor Ihres Programms ab, nie im Quelltext, in Protokollen oder im Browser. Geht es verloren, lässt der Inhaber es erneuern. Das alte Geheimnis und alle damit ausgestellten Token sind dann sofort ungültig.

Zugang & Rechte

Jeder Zugang gehört zu genau einer Organisation. Der Inhaber vergibt beim Anlegen die Rechte und kann sie jederzeit einschränken. Das wirkt sofort, auch für bereits ausgestellte Token. Die Referenz nennt je Aufruf die nötigen Rechte.

RechtErlaubt
lesenAlle lesenden Aufrufe (GET).
schreibenAnlegen und Ändern (POST, PUT, PATCH), Prüfen und Vorbereiten.
loeschenLöschen (DELETE). Zusätzlich zu „schreiben“, standardmäßig aus.
elsterAlles, was an die Finanzverwaltung geht oder von dort kommt.
kiKostenpflichtige KI-Funktionen.
  • Token mit weniger Rechten: scope=lesen bei der Tokenanforderung, etwa für reine Lese-Abgleiche. Mehr Rechte als der Zugang sind nicht möglich.
  • IP-Freigabe: Der Zugang kann auf feste Adressen oder Netze beschränkt sein. Anfragen von anderswo werden mit 403 abgewiesen.
  • Gültigkeit: Zugänge laufen nach der vereinbarten Frist ab und können jederzeit widerrufen werden.
  • Nicht über die Schnittstelle: Anmeldung, Benutzer- und Rechteverwaltung, Organisationseinstellungen und die Verwaltung von Zugängen und Webhooks.

Konventionen

Format

JSON in UTF-8. Kennungen sind UUIDs. Zeitpunkte nach ISO 8601 mit Zeitzone, Datumsangaben JJJJ-MM-TT.

Listen

Paging über limit und offset, wo angeboten. Filter als Query-Parameter.

Gleichzeitige Änderungen

Wo eine version geliefert wird, senden Sie sie beim Schreiben mit. Hat sich der Datensatz inzwischen geändert, kommt 409: neu lesen, erneut schreiben.

Zwei Schritte bei Übermittlungen

Erst vorbereiten (Vorschau und Prüfsumme), dann bestätigen. Ein wiederholtes Bestätigen übermittelt nicht doppelt.

Nachverfolgung

Jede Antwort trägt X-Request-ID. Bitte bei Rückfragen angeben.

Dateien

Uploads als multipart/form-data, Downloads mit passendem Content-Type (z. B. PDF).

Doppelte Anlage vermeiden

Zwei Mechanismen ergänzen sich. Nutzen Sie beide.

Externe Kennung

Geben Sie Mandanten und Fällen Ihre eigene Nummer als externe_id mit. Sie ist je Organisation eindeutig. Eine zweite Anlage liefert 409 mit detail.vorhanden_id, dem schon vorhandenen Datensatz.

Suche: GET /api/v1/mandanten?externe_id=M-100

Idempotency-Key

Senden Sie bei jeder ändernden Anfrage einen eigenen Schlüssel (z. B. eine UUID) im Kopf Idempotency-Key und verwenden Sie ihn bei einer Wiederholung unverändert. Nach einem Netzabbruch bekommen Sie dann die ursprüngliche Antwort (Idempotent-Replayed: true) statt einer zweiten Ausführung.

SituationAntwort
Wiederholung, erste Anfrage erfolgreichgespeicherte Antwort (24 Stunden)
Wiederholung, erste Anfrage läuft noch409, kurz warten
Gleicher Schlüssel, andere Anfrage422
Erste Anfrage war nicht erfolgreichWiederholung wird normal ausgeführt

Webhooks

Der Inhaber trägt in STS-Online eine HTTPS-Adresse Ihres Programms ein und wählt die Ereignisse. Bei jedem Ereignis kommt ein POST mit JSON. Er enthält nur Kennungen und den Bearbeitungsstand, keine Namen, Beträge oder Steuerdaten. Die Einzelheiten holen Sie über die Schnittstelle.

JSON
{
  "id": "0b8e6a0e-…",
  "ereignis": "fall.status_geaendert",
  "zeitpunkt": "2026-09-28T10:15:02+00:00",
  "organisation_id": "…",
  "ausgeloest_von": "api:stsc_…",
  "daten": {
    "fall_id": "…",
    "externe_id": "F-2025-100",
    "status": "validiert",
    "status_vorher": "in_bearbeitung"
  }
}

Signatur prüfen

Kopf X-STS-Signature: t=<Unix-Zeit>,v1=<HMAC>. HMAC-SHA256 mit Ihrem Signaturgeheimnis (whsec_…) über <t>. und den unveränderten Körper. Weisen Sie Nachrichten mit falscher Signatur oder mehr als 5 Minuten Zeitabweichung ab.

# Prüfung im Empfänger — Beispiel mit openssl:
# erwartet = HMAC-SHA256(Geheimnis, "<t>." + roher Körper), hexadezimal
printf '%s.%s' "$T" "$KOERPER" | openssl dgst -sha256 -hmac "$WHSEC" -hex
  • Schnell antworten: innerhalb von 10 Sekunden mit 2xx, danach verarbeiten. Umleitungen werden nicht verfolgt.
  • Wiederholungen: Bei Fehlern wird bis zu etwa drei Tage lang in wachsenden Abständen erneut zugestellt. Ist Ihr Endpunkt dauerhaft nicht erreichbar, wird der Webhook abgeschaltet.
  • Mindestens einmal: Ein Ereignis kann ausnahmsweise doppelt kommen. Erkennen Sie Doppel an id bzw. X-STS-Event-Id. Die Reihenfolge ist nicht garantiert, im Zweifel lesen Sie den aktuellen Stand.
  • Eigene Änderungen: ausgeloest_von nennt Ihren Zugang (api:stsc_…), wenn Ihr Programm die Änderung selbst ausgelöst hat.
  • Adresse: nur HTTPS auf Port 443 oder 8443, öffentlich erreichbar.

Die Liste aller Ereignistypen steht in der Endpunkt-Referenz.

Partner-Zugang für Software-Anbieter

Verbindet sich Ihr Programm mit vielen Organisationen (z. B. allen Kunden Ihrer Software), erhalten Sie einen Partner-Zugang: eine Kennung (stsp_…) und ein Geheimnis, ausgestellt vom Betreiber. Kennung und Geheimnis einzelner Organisationen brauchen Sie dann nicht.

  1. Freigabe durch den Kunden: Der Inhaber einer Organisation gibt Ihren Zugang selbst frei und wählt die Rechte. Führen Sie ihn mit diesem Link dorthin:https://www.steuersoft.online/organisation?tab=schnittstelle&partner=<Ihre Kennung>Nach der Freigabe sieht er dort auch die Kennung seiner Organisation.
  2. Freigaben abfragen: GET /api/v1/extern/partner/freigaben mit Ihrer Kennung und Ihrem Geheimnis (Basic) liefert alle Organisationen, die Sie freigegeben haben, mit organisation_id und Rechten.
  3. Token je Organisation: POST /api/v1/extern/token wie im Schnellstart, zusätzlich organisation_id. Jedes Token gilt nur für diese eine Organisation und höchstens mit den dort freigegebenen Rechten.
# 1. Welche Organisationen haben Sie freigegeben?
curl -s -u "$STS_PARTNER_ID:$STS_PARTNER_SECRET" https://www.steuersoft.online/api/v1/extern/partner/freigaben

# 2. Token für GENAU EINE dieser Organisationen
curl -s -u "$STS_PARTNER_ID:$STS_PARTNER_SECRET"   -d grant_type=client_credentials -d organisation_id="$ORG_ID"   https://www.steuersoft.online/api/v1/extern/token
  • Widerruf: Eine Organisation kann die Freigabe jederzeit widerrufen. Laufende Token antworten dann mit 401, neue Token mit 403 access_denied. Entfernen Sie die Organisation in diesem Fall aus Ihrem Abgleich.
  • Partner-Webhook: Auf Wunsch richtet der Betreiber einen Webhook für Ihren Zugang ein. Sie erhalten dann die Ereignisse aller Organisationen, die Sie freigegeben haben; organisation_id in der Nachricht ordnet sie zu. Die Signatur prüfen Sie wie oben.
  • Getrennte Daten: Organisationen sind strikt getrennt. Eine externe Kennung darf in verschiedenen Organisationen gleich lauten.

Fehler & Grenzen

Fehlerantworten tragen detail mit einer lesbaren Meldung. Der Tokenendpunkt antwortet nach RFC 6749 mit error und error_description.

StatusBedeutungWas tun
400Anfrage fehlerhaftAnfrage korrigieren
401Token fehlt, ist abgelaufen oder der Zugang wurde gesperrtNeues Token holen; scheitert das, Zugang prüfen lassen
403Recht fehlt (WWW-Authenticate: insufficient_scope), Adresse nicht freigegeben oder Aufruf für Zugänge nicht verfügbarRechte bzw. IP-Freigabe beim Inhaber anpassen lassen
404Nicht vorhanden oder nicht in Ihrer OrganisationKennung prüfen
409Versionskonflikt, schon vorhandene externe Kennung, Vorgang abgeschlossen oder Anfrage mit demselben Idempotency-Key läuft nochAktuellen Stand lesen bzw. kurz warten
422Werte ungültig oder Idempotency-Key für andere Anfrage verwendetEingaben laut Antwort korrigieren
429AnfragebremseRetry-After abwarten
5xxVorübergehender FehlerMit demselben Idempotency-Key wiederholen

Anfragen je Zugang sind begrenzt (Vorgabe: 600 pro Minute, für Uploads weniger). Bei 429 nennt Retry-After die Wartezeit in Sekunden.

Endpunkt-Referenz

Die vollständige Liste der Endpunkte mit Parametern und Datenstrukturen ist nicht öffentlich. Sie lädt mit einem gültigen Zugriffstoken Ihres REST-Zugangs. Das Token wird nur für diesen einen Abruf verwendet und nicht gespeichert.

Die Beschreibung steht auch maschinenlesbar bereit (OpenAPI 3): GET /api/v1/extern/openapi.json mit Bearer-Token. Damit lassen sich Client-Klassen erzeugen, z. B. mit openapi-generator.

Checkliste vor dem Produktivgang

  • Geheimnis nur serverseitig bzw. im Tresor abgelegt, nicht im Quelltext
  • IP-Freigabe mit den festen Adressen Ihres Servers beim Inhaber angefragt
  • Nur die nötigen Rechte beantragt (loeschen, elster, ki nur bei Bedarf)
  • Token wird vor Ablauf bzw. nach 401 automatisch erneuert
  • Jede ändernde Anfrage mit Idempotency-Key, Wiederholung mit demselben Schlüssel
  • Eigene Nummern als externe_id, 409 mit vorhanden_id behandelt
  • 429, Retry-After und 409 (Version) behandelt
  • Webhook-Signatur und Zeitabweichung werden geprüft, Doppel über die Ereignis-Kennung erkannt
  • X-Request-ID wird in Ihren Protokollen mitgeschrieben