Aller au contenu
Bilanzi

Schnittstelle

Die Bücher eines Betriebs lesen und Buchungsentwürfe vorbereiten, aus einem eigenen Programm, einer Tabelle oder einem KI-Werkzeug. Eine Adresse, ein Token, JSON.

Gebucht, bezahlt, eingereicht und abgeschlossen wird nicht über die Schnittstelle. Ein Programm bereitet vor; entschieden wird im Arbeitsbereich von einem Menschen. Das ist keine fehlende Funktion, sondern die Linie, an der dieses Produkt gebaut ist.

In drei Schritten

  1. Token holen. Im Arbeitsbereich unter Einstellungen › Schnittstelle: Name vergeben, ankreuzen was es darf, Gültigkeit wählen. Der Schlüssel wird einmal angezeigt und nirgends gespeichert.
  2. Aufruf machen. Das Token als Authorization: Bearer …mitschicken. Mehr Kopfzeilen braucht es beim Lesen nicht.
  3. Dranbleiben. Läuft es in einem KI-Werkzeug, nimm den MCP-Endpunkt weiter unten. Dieselben Aufrufe, als Werkzeuge.
curl -s https://bilanzi.ch/api/v1/invoices \
  -H "Authorization: Bearer $BILANZI_TOKEN"

Was es gibt

Jedes Token gehört zu genau einem Betrieb; eine Kennung des Betriebs steht deshalb in keinem Weg. Beträge sind Zeichenketten mit zwei Nachkommastellen, Daten sind ISO-8601, und gelistet wird in Seiten zu höchstens hundert Zeilen: ?limit=50&after=…, wobei after die Kennung aus nextAfter der letzten Antwort ist.

AufrufWas er tutGeltungsbereich
GET /api/v1/entityDen Betrieb lesen, zu dem das Token gehört: Name, Rechtsform, Währung.entity:read
GET /api/v1/accountsDen Kontenplan lesen.ledger:read
GET /api/v1/ledgerGebuchte Buchungen mit ihren Zeilen lesen.ledger:read
GET /api/v1/contactsKunden und Lieferanten lesen.contacts:read
GET /api/v1/invoicesAusgangsrechnungen mit Stand und offenem Betrag lesen.invoices:read
GET /api/v1/documentsBelege auflisten: Name, Typ, Grösse, Prüfsumme, Herkunft. Ohne Lohnbelege, und ohne die Datei selbst.documents:read
POST /api/v1/booking-draftsEinen Buchungsentwurf vorbereiten. Gebucht wird er nicht: das entscheidet ein Mensch im Arbeitsbereich.booking-drafts:write

Die vollständige Beschreibung als OpenAPI 3.1 steht unter /api/v1/openapi.json. Daraus erzeugst du dir einen Client, ohne hier abzuschreiben.

Einen Entwurf anlegen

Der einzige schreibende Aufruf. Er verlangt einen Idempotency-Key: ein Wiederholversuch nach einer abgebrochenen Verbindung gibt dieselbe Antwort zurück statt ein zweites Mal anzulegen. Derselbe Schlüssel mit anderem Inhalt ist ein Fehler, kein zweiter Entwurf.

curl -s -X POST https://bilanzi.ch/api/v1/booking-drafts \
  -H "Authorization: Bearer $BILANZI_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: rechnung-4711" \
  -d '{
    "postingDate": "2026-09-12",
    "currency": "CHF",
    "sourceReference": "RE-4711",
    "description": "Telefonrechnung September",
    "lines": [
      { "accountId": "…", "side": "debit",  "amount": "48.00" },
      { "accountId": "…", "side": "credit", "amount": "48.00" }
    ]
  }'

Soll und Haben müssen aufgehen, die Konten zum Betrieb gehören und die Währung die des Betriebs sein. Danach liegt der Entwurf im Arbeitsbereich unter Mehr › Entwürfe, wo ihn jemand prüft und bucht.

Für KI-Werkzeuge: MCP

Derselbe Zugang spricht das Model Context Protocol über HTTP. In Claude Desktop, Claude Code, Cursor oder einem anderen Werkzeug mit MCP-Unterstützung trägst du ein:

{
  "mcpServers": {
    "bilanzi": {
      "type": "http",
      "url": "https://bilanzi.ch/api/mcp",
      "headers": { "Authorization": "Bearer BLZ_TOKEN_HIER" }
    }
  }
}

Danach kennt das Werkzeug die Werkzeuge bilanzi_entity_get, bilanzi_accounts_list, bilanzi_ledger_list, bilanzi_contacts_list, bilanzi_invoices_list, bilanzi_documents_list und bilanzi_booking_draft_create, und es sieht nur die, für die dein Token einen Geltungsbereich hat.

Wenn etwas schiefgeht

Jeder Fehler ist ein JSON-Objekt mit error.code und error.message. Der Code ist für dein Programm, der Satz für dich.

StatusCodeHeisst
401authorization_required, api_token_invalidKein Token mitgeschickt, oder es ist zurückgezogen oder abgelaufen.
403api_scope_missingDas Token darf diesen Aufruf nicht. Neues Token mit dem Häkchen erstellen.
429api_rate_limitedMehr als 120 Aufrufe in einer Minute mit demselben Token. Die Antwort trägt Retry-After; wer sich daran hält, kommt gleich wieder durch.
409idempotency_conflictDerselbe Schlüssel wurde schon mit einem anderen Inhalt benutzt.
422journal_unbalanced, account_unavailableDer Entwurf geht nicht auf oder nennt ein fremdes Konto.

Grenzen, ehrlich genannt

  • Kein Schreiben ausser Entwürfen. Buchen, Zahlungen auslösen, Lohn rechnen, MWST einreichen und abschliessen bleibt beim Menschen.
  • Kein Lohn. Personendaten gehen nicht über diese Schnittstelle, auch nicht lesend. Belege, die als Lohnbelege gekennzeichnet sind, erscheinen deshalb in /documents gar nicht: der Filter steht in der Datenbank, nicht im Aufruf.
  • Belege ohne Datei. /documents nennt Name, Typ, Grösse, Prüfsumme und Herkunft eines Belegs, gibt aber weder die Datei noch ihren Ablageort heraus. Die Datei holst du im Arbeitsbereich.
  • Ein Betrieb je Token. Wer mehrere Betriebe anbindet, erstellt mehrere Token.
  • Ein Jahr höchstens. Danach läuft ein Token ab und wird ersetzt.
  • 120 Aufrufe je Minute und Token. Reichlich für eine Tabelle, die stündlich Zahlen holt, und für ein KI-Werkzeug; wenig für eine Schleife ohne Abbruch. Darüber kommt 429 mit Retry-After.