Fernbuchhaltungs-API
Zuletzt aktualisiert: 10. Mai 2026
Erfasse Einträge per cURL, iOS-Kurzbefehlen oder Automatisierungsskripten mit einem persönlichen API-Token. Der Token ist nur zum Schreiben vorgesehen: Er kann Transaktionen einfügen und die Kategorie-/Tag-Liste lesen, aber keine Transaktionsdaten lesen oder löschen.
1. Token erhalten
Melde dich als Admin an, öffne Einstellungen → 🔑 Fernbuchhaltungs-API und klicke auf „Token erzeugen".
Der Klartext-Token wird genau einmal angezeigt — kopiere ihn sofort. Der Server speichert nur den SHA-256-Hash, ein verlorener Token kann nur durch Rotieren ersetzt werden (was den alten ungültig macht).
Token-Format: bb_<userId>_<secret>. Sende ihn bei jeder Anfrage als Authorization: Bearer <token>.
2. POST /api/ingest — eine Transaktion einfügen
Der Anfragerumpf ist ein JSON-Objekt mit folgenden Feldern:
title(string, erforderlich) — Name der Transaktionamount(number, erforderlich) — muss positiv seintype(string, optional, Standardexpense) — eines vonexpense/income/prepaid_expense/pending_incomecategory(string, optional) — Kategorienamenote(string, optional) — freie Notizcreated_at(string, optional) — ISO 8601; Standard ist jetzt
curl -X POST https://billbook.me/api/ingest \
-H "Authorization: Bearer bb_<userId>_<secret>" \
-H "Content-Type: application/json" \
-d '{"title":"Coffee","amount":120,"type":"expense","category":"Food"}'
# response: 201
{ "id": "...", "created_at": "..." }3. GET /api/ingest/categories — Kategorien auflisten
Gibt die Kategorienamen des Admins in der Reihenfolge des Dashboard-Dropdowns zurück. Die Antwort enthält nur Namen — keine IDs, User-IDs oder Transaktionsdaten.
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — kürzlich verwendete Tags
Gibt die zuletzt aktualisierten Tag-Präfixe zurück (die in Titeln eingebetteten #XXX-Markierungen). Standard 20; mit ?limit= änderbar (max. 100).
Gibt ein leeres Array statt einen Fehler zurück, falls die Tabelle tag_prefixes noch nicht existiert.
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. Fehlercodes
Alle Fehler sind JSON: { "error": "Nachricht" }.
401— fehlende Autorisierung, ungültiges Token-Format, widerrufen oder abweichend402— Abo abgelaufen; Verlängerung zum Schreiben erforderlich405— Methode nicht unterstützt (z. B. GET auf/api/ingest)501— Server hat keinSUPABASE_SERVICE_ROLE_KEY500— sonstiger interner Fehler
6. Sicherheit und Limits
Vom Design her kann der Token nur in der eigenen Organisation schreiben — keine Org-Übergriffe und kein Lesen bestehender Daten:
user_idist immer der Token-Besitzer; nicht fälschbarorg_idist immer die Org des Besitzers; orgübergreifende Schreibvorgänge unmöglich- Tokens werden nur an die Rolle Admin ausgegeben (manager / staff erhalten 403)
- Antworten geben keine fremden Zeilen preis — nur
{ id, created_at }wird zurückgegeben - Widerruf wirkt sofort; jederzeit aus den Einstellungen rotierbar
7. iOS-Kurzbefehl-Beispiel
Füge die Aktion „URL-Inhalte abrufen" hinzu, setze URL auf https://billbook.me/api/ingest, Methode POST, Header Authorization: Bearer bb_... und Content-Type: application/json, Anfrage-Body als JSON: {"title":"Kaffee","amount":120,"type":"expense"}. Verbinde title und amount mit der Kurzbefehl-Eingabe oder „Jedes Mal fragen"-Variablen.
Dieses Dokument ist eine Schnellreferenz; maßgeblich für das tatsächliche Verhalten ist der Backend-Code.