← Tilbake til Billbook

Fjernregnskap-API

Sist oppdatert: 10. mai 2026

Logg oppføringer fra cURL, iOS-snarveier eller automatiseringsskript med en personlig API-token. Tokenet er kun for skriving — kan sette inn transaksjoner og lese kategori- / tag-lister, men kan ikke lese eller slette transaksjonsdata.

1. Hent et token

Logg inn som admin, åpne Innstillinger → 🔑 Fjernregnskap-API, og klikk "Generer token".

Klartekst-tokenet vises kun én gang — kopier det umiddelbart. Serveren lagrer bare SHA-256-hashen, så et tapt token kan kun erstattes ved rotasjon (som ugyldiggjør det gamle).

Token-format: bb_<userId>_<secret>. Send det med hver forespørsel som Authorization: Bearer <token>.

2. POST /api/ingest — sett inn én transaksjon

Forespørselsbody er et JSON-objekt med følgende felter:

  • title (string, påkrevd) — transaksjonsnavn
  • amount (number, påkrevd) — må være positiv
  • type (string, valgfritt, standard expense) — en av expense / income / prepaid_expense / pending_income
  • category (string, valgfritt) — kategorinavn
  • note (string, valgfritt) — fritt notat
  • created_at (string, valgfritt) — ISO 8601; standard er nå
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 — liste kategorier

Returnerer admins kategorinavn i samme rekkefølge som dropdown i dashbordet. Svaret inneholder bare navn — ingen ids, user ids eller transaksjonsdata.

curl https://billbook.me/api/ingest/categories \
  -H "Authorization: Bearer bb_<userId>_<secret>"

# response: 200
{ "categories": ["Food", "Rent", "..."] }

4. GET /api/ingest/tags — nylig brukte tagger

Returnerer de nylig oppdaterte tag-prefiksene (#XXX-markørene innebygd i titler). Standard 20; bruk ?limit= for å overstyre (maks 100).

Returnerer en tom array i stedet for en feil hvis tabellen tag_prefixes ikke finnes ennå.

curl "https://billbook.me/api/ingest/tags?limit=20" \
  -H "Authorization: Bearer bb_<userId>_<secret>"

# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }

5. Feilkoder

Alle feil er JSON: { "error": "melding" }.

  • 401 — manglende autorisasjon, feil token-format, tilbakekalt eller ikke samsvarer
  • 402 — abonnement utløpt; fornyelse kreves for å skrive
  • 405 — metode ikke støttet (f.eks. GET på /api/ingest)
  • 501 — serveren mangler SUPABASE_SERVICE_ROLE_KEY
  • 500 — annen intern feil

6. Sikkerhet og begrensninger

Etter design kan tokenet kun skrive til sin egen organisasjon — kan ikke utgi seg for andre orgs eller lese eksisterende data:

  • user_id er alltid token-eieren; kan ikke forfalskes
  • org_id er alltid eierens org; skriving mellom orgs er umulig
  • Tokens utstedes kun til admin-rollen (manager / staff får 403)
  • Svar lekker aldri andre rader — kun { id, created_at } returneres
  • Tilbakekalling er umiddelbar; roter når som helst fra Innstillinger

7. iOS-snarvei eksempel

Legg til en "Hent innhold 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"}. Koble title og amount til Snarvei-inndata eller "Spør hver gang"-variabler.

Dette dokumentet er en hurtigreferanse; backend-koden er fasit for faktisk atferd.