API voor Boekhouden op Afstand
Laatst bijgewerkt: 10 mei 2026
Leg vermeldingen vast vanuit cURL, iOS-Opdrachten of automatiseringsscripts met een persoonlijk API-token. Het token is alleen-schrijven: het kan transacties invoegen en de categorie-/taglijsten lezen, maar geen transactiegegevens lezen of verwijderen.
1. Token ophalen
Log in als admin, open Instellingen → 🔑 API voor Boekhouden op Afstand en klik op "Token genereren".
Het tekst-token wordt slechts één keer getoond — kopieer het direct. De server bewaart alleen de SHA-256-hash; een verloren token kun je alleen vervangen door te roteren (wat het oude ongeldig maakt).
Token-formaat: bb_<userId>_<secret>. Stuur het bij elk verzoek als Authorization: Bearer <token>.
2. POST /api/ingest — één transactie invoegen
De request body is een JSON-object met deze velden:
title(string, vereist) — naam van de transactieamount(number, vereist) — moet positief zijntype(string, optioneel, standaardexpense) — een vanexpense/income/prepaid_expense/pending_incomecategory(string, optioneel) — categorienaamnote(string, optioneel) — vrije notitiecreated_at(string, optioneel) — ISO 8601; standaard nu
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 — categorieën opvragen
Geeft de categorienamen van de admin terug in de volgorde van het dashboard-dropdown. Het antwoord bevat alleen namen — geen ids, user ids of transactiegegevens.
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — recent gebruikte tags
Geeft de meest recent bijgewerkte tagvoorvoegsels terug (de #XXX-markeringen in titels). Standaard 20; gebruik ?limit= om te overschrijven (max. 100).
Geeft een lege array terug in plaats van een fout als de tabel tag_prefixes nog niet bestaat.
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. Foutcodes
Alle fouten zijn JSON: { "error": "bericht" }.
401— autorisatie ontbreekt, foutief token-formaat, ingetrokken of niet overeenkomend402— abonnement verlopen; vernieuwing vereist om te schrijven405— methode niet ondersteund (bijv. GET op/api/ingest)501—SUPABASE_SERVICE_ROLE_KEYontbreekt op de server500— andere interne fout
6. Beveiliging en limieten
Door de opzet kan het token alleen schrijven binnen de eigen organisatie — geen impersonatie van andere orgs of lezen van bestaande gegevens:
user_idis altijd de eigenaar van het token; niet vervalsbaarorg_idis altijd de org van de eigenaar; cross-org schrijven is onmogelijk- Tokens worden alleen uitgegeven aan de admin-rol (manager / staff krijgen 403)
- Antwoorden lekken nooit andere rijen — alleen
{ id, created_at }wordt geretourneerd - Intrekken is onmiddellijk; roteer wanneer je wilt vanuit Instellingen
7. iOS-Opdracht voorbeeld
Voeg een "URL-inhoud ophalen"-actie toe, URL https://billbook.me/api/ingest, methode POST, headers Authorization: Bearer bb_... en Content-Type: application/json, en request body als JSON: {"title":"Koffie","amount":120,"type":"expense"}. Koppel title en amount aan invoer van de Opdracht of "Vraag elke keer"-variabelen.
Dit document is een snelle referentie; de backend-code is leidend voor het werkelijke gedrag.