← Tilbage til Billbook

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) — transaktionsnavn
  • amount (number, påkrævet) — skal være positiv
  • type (string, valgfri, standard expense) — en af expense / income / prepaid_expense / pending_income
  • category (string, valgfri) — kategorinavn
  • note (string, valgfri) — fri note
  • created_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 ikke
  • 402 — abonnement udløbet; fornyelse kræves for at skrive
  • 405 — metode ikke understøttet (fx GET på /api/ingest)
  • 501 — serveren mangler SUPABASE_SERVICE_ROLE_KEY
  • 500 — 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_id er altid token-ejeren; kan ikke forfalskes
  • org_id er 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.