Fjernbogføring-API
Sidst opdateret: 10. maj 2026
Log poster fra cURL, iOS-genveje eller automatiseringsscripts med et personligt API-token. Tokenen er kun til skrivning — kan indsætte transaktioner og læse kategori- / tag-lister, men kan ikke læse eller slette nogen transaktionsdata.
1. Få et token
Log ind som admin, åbn Indstillinger → 🔑 Fjernbogføring-API, og klik på "Generer token".
Klartekst-tokenet vises kun én gang — kopiér med det samme. Serveren gemmer kun SHA-256-hashen, så et tabt token kan kun erstattes ved rotation (som ugyldiggør det gamle).
Token-format: bb_<userId>_<secret>. Send det i hver anmodning som Authorization: Bearer <token>.
2. POST /api/ingest — indsæt én transaktion
Anmodningens body er et JSON-objekt med disse felter:
title(string, påkrævet) — transaktionsnavnamount(number, påkrævet) — skal være positivtype(string, valgfri, standardexpense) — en afexpense/income/prepaid_expense/pending_incomecategory(string, valgfri) — kategorinavnnote(string, valgfri) — fri notecreated_at(string, valgfri) — ISO 8601; standard 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 — list kategorier
Returnerer adminens kategorinavne i dashboardets dropdown-rækkefølge. Svaret indeholder kun navne — ingen ids, user ids eller transaktionsdata.
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — senest brugte tags
Returnerer de senest opdaterede tag-præfikser (#XXX-markørerne indlejret i titler). Standard 20; brug ?limit= for at tilsidesætte (maks. 100).
Returnerer et tomt array i stedet for en fejl, hvis tag_prefixes-tabellen endnu ikke findes.
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. Fejlkoder
Alle fejl er JSON: { "error": "besked" }.
401— manglende autorisation, forkert token-format, tilbagekaldt eller stemmer ikke402— abonnement udløbet; fornyelse kræves for at skrive405— metode ikke understøttet (fx GET på/api/ingest)501— serveren manglerSUPABASE_SERVICE_ROLE_KEY500— anden intern fejl
6. Sikkerhed og grænser
Pr. design kan tokenen kun skrive til sin egen organisation — kan ikke udgive sig for andre orgs eller læse eksisterende data:
user_ider altid token-ejeren; kan ikke forfalskesorg_ider altid ejerens org; skrivninger på tværs af orgs er umulige- Tokens udstedes kun til admin-rollen (manager / staff får 403)
- Svar lækker aldrig andre rækker — kun
{ id, created_at }returneres - Tilbagekaldelse er øjeblikkelig; roter når som helst fra Indstillinger
7. iOS-genvej-eksempel
Tilføj en "Hent indhold fra URL"-handling, URL https://billbook.me/api/ingest, metode POST, headers Authorization: Bearer bb_... og Content-Type: application/json, og body som JSON: {"title":"Kaffe","amount":120,"type":"expense"}. Forbind title og amount til Genvej-input eller "Spørg hver gang"-variabler.
Dette dokument er en hurtig reference; backend-koden er afgørende for den faktiske adfærd.