Ihre erste Anfrage an die bexio-API besteht aus drei Dingen: einem Token, den Sie über den Authorization Code Flow bei auth.bexio.com holen, den Headern Accept und Authorization und einer Adresse unter api.bexio.com, zum Beispiel für die Kontaktliste. Dieser Beitrag führt Sie von der Anmeldung bis zum ersten erfolgreichen Aufruf und zeigt, wie Sie sicher testen. Wie Sie Zugang und Scopes einrichten, steht im Beitrag bexio-API: Zugang und Token einrichten.
Das Wichtigste in Kürze
- Alle Endpunkte liegen unter
https://api.bexio.com. Der Pfad enthält die Version, zum Beispiel/2.0/contact. - Jede Anfrage braucht die Header
Accept: application/jsonundAuthorization: Bearer <Token>. - Den Token holen Sie serverseitig über den Authorization Code Flow. Alle Parameter gehören bei der Token-Anfrage in den Body, nicht in die URL.
- Zum Testen nennt bexio einen Sandbox-Account. Löschen über die API ist endgültig.
- Bei zu vielen Anfragen antwortet die Schnittstelle mit 429 und nennt die Restmenge in Kopfzeilen.
Der Ablauf im Überblick
| Schritt | Was passiert |
|---|---|
| 1 | Ihre Anwendung leitet den Benutzer zum Autorisierungs-Endpunkt von bexio |
| 2 | Der Benutzer meldet sich an und stimmt den Scopes zu |
| 3 | bexio leitet mit einem Code zu Ihrer Redirect-URL zurück |
| 4 | Ihr Server tauscht den Code gegen Tokens |
| 5 | Ihr Server ruft die API mit dem Access Token auf |
Die Dokumentation nennt dafür den «Authorization Code Grant» nach OAuth 2.0 (RFC 6749, Abschnitt 4.1). Die Anwendung muss serverseitig laufen, weil sie das Client Secret mitsendet.
Schritt 1: Autorisierung starten
Die Adressen der Anmeldung liefert die Discovery-Datei unter https://auth.bexio.com/realms/bexio/.well-known/openid-configuration. Der Autorisierungs-Endpunkt lautet https://auth.bexio.com/realms/bexio/protocol/openid-connect/auth. Die Dokumentation kündigte die Abschaltung der älteren Adresse idp.bexio.com für den 31. März 2025 an. Verwenden Sie nur die neuen Adressen.
Leiten Sie den Benutzer mit diesen Parametern weiter. Die Namen stammen aus dem Standard:
https://auth.bexio.com/realms/bexio/protocol/openid-connect/auth?response_type=code&client_id=<CLIENT_ID>&redirect_uri=<REDIRECT_URI>&scope=openid%20offline_access%20contact_show&state=<ZUFALLSWERT>
response_type=codeverlangt einen Autorisierungscode.redirect_urimuss genau zu einer Adresse passen, die Sie in der App eingetragen haben.scopenennt die gewünschten Rechte, getrennt durch Leerzeichen.offline_accessbrauchen Sie für ein Refresh Token.stateist ein Zufallswert, den bexio unverändert zurückgibt. Er schützt vor gefälschten Rückleitungen.
Nach der Zustimmung hängt bexio den code an Ihre Redirect-URL.
Schritt 2: Code gegen Token tauschen
Senden Sie den Code an den Token-Endpunkt https://auth.bexio.com/realms/bexio/protocol/openid-connect/token. Die Dokumentation zeigt dafür kein Beispiel und verweist auf RFC 6749. Die Parameter unten folgen deshalb dem Standard:
curl -X POST 'https://auth.bexio.com/realms/bexio/protocol/openid-connect/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=authorization_code' \
-d 'code=<CODE>' \
-d 'redirect_uri=<REDIRECT_URI>' \
-d 'client_id=<CLIENT_ID>' \
-d 'client_secret=<CLIENT_SECRET>'
bexio nimmt Parameter nur im Body entgegen. Die Antwort enthält ein Access Token und ein ID Token. Mit offline_access kommt ein Refresh Token dazu. Den Code verwenden Sie nur einmal.
Schritt 3: Die erste Anfrage
Die Kontaktliste verlangt den Scope contact_show. Mit dem Access Token rufen Sie sie so ab:
curl -X GET 'https://api.bexio.com/2.0/contact?limit=20&order_by=name_1' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <ACCESS_TOKEN>'
Erhalten Sie eine Liste mit Kontakten, funktionieren Anmeldung, Token und Scope. Ein Personal Access Token verwenden Sie genauso im Header. Der Unterschied liegt nur darin, wie Sie ihn bekommen.
Schritt 4: Das Token erneuern
Mit offline_access erhalten Sie ein Refresh Token. Senden Sie es mit grant_type=refresh_token an denselben Token-Endpunkt und Sie bekommen ein neues Access Token. Die Scopes ändern sich dabei nicht. Die Dokumentation fordert in ihrer Migrationsanleitung, ein neu ausgegebenes Refresh Token anstelle des alten zu speichern. Übernehmen Sie das auch im Normalbetrieb. Eine Offline-Sitzung wird geschlossen, wenn sie ein Jahr lang nicht erneuert wird. Wie lange ein Access Token gültig bleibt, nennt die Dokumentation nicht. Verlassen Sie sich auf die Fehlerantwort 401 und erneuern Sie dann.
Endpunkte und Konventionen
| Thema | Regel laut Dokumentation |
|---|---|
| Adresse | Host https://api.bexio.com, dazu der relative Pfad mit Version |
| Verben | GET lesen, POST anlegen, PATCH teilweise ändern, PUT vollständig ändern, DELETE löschen |
| Sprache | Accept-Language: de liefert übersetzte Elemente, etwa Steuerbezeichnungen |
| Liste | limit (bei Kontakten Standard 500, höchstens 2000), offset, order_by |
| Suche | Ältere Endpunkte: POST auf /…/search mit Suchkriterien im Body |
Löschen ist laut Dokumentation endgültig und lässt sich nicht rückgängig machen. Bei der Suche besteht jedes Kriterium aus field, value und criteria. Fehlt criteria, gilt like. Möglich sind unter anderem =, !=, >, <, like, is_null und in. Was die Schnittstelle abdeckt und wo Grenzen liegen, erklärt der Beitrag Die bexio-Schnittstelle: was damit möglich ist.
Fehlercodes und Anfragelimit
Fehler kommen als Statuscode mit einem JSON-Body wie {"error_code": 404, "message": "Page not found"}.
| Code | Bedeutung laut Dokumentation |
|---|---|
| 200, 201 | Anfrage in Ordnung, Ressource angelegt |
| 400 | Parameter ungültig |
| 401 | Token ungültig |
| 403 | Fehlendes Recht für die Ressource |
| 404 | Ressource nicht gefunden |
| 422 | Entität konnte nicht gespeichert werden |
| 429 | Zu viele Anfragen |
| 500, 503 | Unerwarteter Fehler, Wartungsarbeiten |
Das Limit gilt pro Unternehmen und Minute. Die Kopfzeilen RateLimit-Limit, RateLimit-Remaining und RateLimit-Reset zeigen Grenze, Restmenge und Sekunden bis zum Neustart. Lesen Sie sie aus und pausieren Sie, bevor die Schnittstelle 429 meldet. Bei 401 und 403 hilft der Beitrag bexio-Schnittstelle meldet 401 oder 403, bei 429 und 500 der Beitrag bexio-Schnittstelle meldet 429 oder 500.
Sicher testen
- Sandbox verwenden: Zum Entwickeln nennt bexio einen API-Sandbox-Account. Testen Sie dort, nicht in Ihrer echten Buchhaltung.
- Musterdaten anlegen: Legen Sie zum Beispiel einen Kontakt «Muster Haustechnik AG» an. Pflichtfelder sind laut Dokumentation
contact_type_id(1 für Firmen, 2 für Personen),name_1,user_idundowner_id. Die Benutzer-IDs liefert die Benutzerverwaltung der Schnittstelle. - Erst lesen, dann schreiben: Prüfen Sie mit
GET, was Ihre Anfrage liefert, bevor SiePOSToderPATCHeinsetzen. - Zwei Apps trennen: Für die Produktion legen Sie eine zweite App mit eigenem Client Secret an.
- Anfragen nachstellen: Reproduzieren Sie Probleme mit einem Werkzeug wie Postman. Die Dokumentation verlangt das, bevor Sie einen Fehler melden. Geben Sie im Meldeformular keine Zugangsdaten an.
- Versand beachten: Bei den Endpunkten zum Versenden von Dokumenten nennt die Dokumentation für die Testphase eine Einschränkung auf die Adresse, die zum Token gehört.
Häufige Fragen
Gibt es eine OpenAPI-Definition?
Laut den FAQ der Dokumentation nicht, sie ist aber geplant. Prüfen Sie den Stand in der Dokumentation, bevor Sie Code daraus generieren wollen.
Wo erfahre ich von Änderungen?
Die Dokumentation führt ein Änderungsprotokoll, eine Statusseite und einen Entwickler-Newsletter. Neue Pflichtfelder und abgelöste Felder stehen im Protokoll.
Wer hilft bei Problemen in meiner Anbindung?
Die Schnittstelle wird laut Dokumentation und Hilfe so bereitgestellt, wie sie beschrieben ist. Es gibt keine begleitete Umsetzung und keinen Code-Support. Anwender mit einer Anbindung von Dritten wenden sich an den Anbieter.
Fazit
Mit drei Bausteinen klappt der Einstieg: Token über den Authorization Code Flow, die Header Accept und Authorization und die Adresse unter api.bexio.com. Starten Sie in der Sandbox, lesen Sie vor dem Schreiben und beachten Sie das Anfragelimit. Löschen ist endgültig, deshalb gehört echte Buchhaltung nicht in Ihre ersten Tests.
Quellen
- bexio API documentation bexio API-Dokumentation
- API bexio
- RFC 6749: The OAuth 2.0 Authorization Framework | RFC Editor rfc-editor.org
- API Zugänge und Anbindungen an bexio bexio Hilfe
- Meine Anbindung an die bexio legacy API funktioniert nicht mehr bexio Hilfe
Stand: Oktober 2026. bexio ist eine Marke der bexio AG, efatto ist unabhängig.