← Terug naar Billbook

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 transactie
  • amount (number, vereist) — moet positief zijn
  • type (string, optioneel, standaard expense) — een van expense / income / prepaid_expense / pending_income
  • category (string, optioneel) — categorienaam
  • note (string, optioneel) — vrije notitie
  • created_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 overeenkomend
  • 402 — abonnement verlopen; vernieuwing vereist om te schrijven
  • 405 — methode niet ondersteund (bijv. GET op /api/ingest)
  • 501SUPABASE_SERVICE_ROLE_KEY ontbreekt op de server
  • 500 — 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_id is altijd de eigenaar van het token; niet vervalsbaar
  • org_id is 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.