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.
Überblick
Der Inhaber der Organisation legt in STS-Online einen Zugang an und gibt Ihnen Kennung und Geheimnis.
Ihr Programm tauscht Kennung und Geheimnis gegen ein kurzlebiges Zugriffstoken.
Mit dem Token rufen Sie die Endpunkte auf. Sie sehen ausschließlich die Daten dieser einen Organisation.
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/token2. 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/ich3. 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"}'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.
| Recht | Erlaubt |
|---|---|
lesen | Alle lesenden Aufrufe (GET). |
schreiben | Anlegen und Ändern (POST, PUT, PATCH), Prüfen und Vorbereiten. |
loeschen | Löschen (DELETE). Zusätzlich zu „schreiben“, standardmäßig aus. |
elster | Alles, was an die Finanzverwaltung geht oder von dort kommt. |
ki | Kostenpflichtige KI-Funktionen. |
- Token mit weniger Rechten:
scope=lesenbei 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
403abgewiesen. - 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.
| Situation | Antwort |
|---|---|
| Wiederholung, erste Anfrage erfolgreich | gespeicherte Antwort (24 Stunden) |
| Wiederholung, erste Anfrage läuft noch | 409, kurz warten |
| Gleicher Schlüssel, andere Anfrage | 422 |
| Erste Anfrage war nicht erfolgreich | Wiederholung 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.
{
"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
idbzw.X-STS-Event-Id. Die Reihenfolge ist nicht garantiert, im Zweifel lesen Sie den aktuellen Stand. - Eigene Änderungen:
ausgeloest_vonnennt 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.
- 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. - Freigaben abfragen:
GET /api/v1/extern/partner/freigabenmit Ihrer Kennung und Ihrem Geheimnis (Basic) liefert alle Organisationen, die Sie freigegeben haben, mitorganisation_idund Rechten. - Token je Organisation:
POST /api/v1/extern/tokenwie im Schnellstart, zusätzlichorganisation_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 mit403 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_idin 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.
| Status | Bedeutung | Was tun |
|---|---|---|
400 | Anfrage fehlerhaft | Anfrage korrigieren |
401 | Token fehlt, ist abgelaufen oder der Zugang wurde gesperrt | Neues Token holen; scheitert das, Zugang prüfen lassen |
403 | Recht fehlt (WWW-Authenticate: insufficient_scope), Adresse nicht freigegeben oder Aufruf für Zugänge nicht verfügbar | Rechte bzw. IP-Freigabe beim Inhaber anpassen lassen |
404 | Nicht vorhanden oder nicht in Ihrer Organisation | Kennung prüfen |
409 | Versionskonflikt, schon vorhandene externe Kennung, Vorgang abgeschlossen oder Anfrage mit demselben Idempotency-Key läuft noch | Aktuellen Stand lesen bzw. kurz warten |
422 | Werte ungültig oder Idempotency-Key für andere Anfrage verwendet | Eingaben laut Antwort korrigieren |
429 | Anfragebremse | Retry-After abwarten |
5xx | Vorübergehender Fehler | Mit 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,kinur bei Bedarf) - Token wird vor Ablauf bzw. nach
401automatisch erneuert - Jede ändernde Anfrage mit
Idempotency-Key, Wiederholung mit demselben Schlüssel - Eigene Nummern als
externe_id,409mitvorhanden_idbehandelt 429,Retry-Afterund409(Version) behandelt- Webhook-Signatur und Zeitabweichung werden geprüft, Doppel über die Ereignis-Kennung erkannt
X-Request-IDwird in Ihren Protokollen mitgeschrieben