← Tillbaka till Billbook

Fjärrbokföring-API

Senast uppdaterad: 10 maj 2026

Logga poster från cURL, iOS-genvägar eller automatiseringsskript med en personlig API-token. Token är endast för skrivning — kan infoga transaktioner och läsa kategori- / tagglistor, men kan inte läsa eller ta bort transaktionsdata.

1. Skaffa en token

Logga in som admin, öppna Inställningar → 🔑 Fjärrbokföring-API och klicka på "Skapa token".

Klartext-token visas endast en gång — kopiera direkt. Servern lagrar bara SHA-256-hashen, så en förlorad token kan endast bytas genom rotation (vilket ogiltigförklarar den gamla).

Token-format: bb_<userId>_<secret>. Skicka i varje förfrågan som Authorization: Bearer <token>.

2. POST /api/ingest — infoga en transaktion

Förfråganskroppen är ett JSON-objekt med följande fält:

  • title (string, obligatorisk) — transaktionens namn
  • amount (number, obligatorisk) — måste vara positiv
  • type (string, valfri, standard expense) — en av expense / income / prepaid_expense / pending_income
  • category (string, valfri) — kategorinamn
  • note (string, valfri) — fri anteckning
  • created_at (string, valfri) — 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 — lista kategorier

Returnerar adminens kategorinamn i dashboardens dropdown-ordning. Svaret innehåller endast namn — inga 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 — nyligen använda taggar

Returnerar de senast uppdaterade taggprefixen (#XXX-markörerna inbäddade i titlar). Standard 20; använd ?limit= för att åsidosätta (max 100).

Returnerar en tom array istället för ett fel om tabellen tag_prefixes ännu inte finns.

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

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

5. Felkoder

Alla fel är JSON: { "error": "meddelande" }.

  • 401 — saknar auktorisering, felaktigt token-format, återkallad eller icke matchande
  • 402 — prenumeration utgången; förnyelse krävs för att skriva
  • 405 — metod stöds inte (t.ex. GET på /api/ingest)
  • 501 — servern saknar SUPABASE_SERVICE_ROLE_KEY
  • 500 — annat internt fel

6. Säkerhet och begränsningar

Designmässigt kan token endast skriva till sin egen organisation — kan inte utge sig för andra orgs eller läsa befintliga data:

  • user_id är alltid token-ägaren; kan inte förfalskas
  • org_id är alltid ägarens org; skrivningar mellan orgs är omöjliga
  • Tokens utfärdas endast till admin-roll (manager / staff får 403)
  • Svar läcker aldrig andra rader — endast { id, created_at } returneras
  • Återkallning gäller omedelbart; rotera när som helst från Inställningar

7. iOS-genväg-exempel

Lägg till en "Hämta innehåll från URL"-åtgärd, URL https://billbook.me/api/ingest, metod POST, headers Authorization: Bearer bb_... och Content-Type: application/json, och kropp som JSON: {"title":"Kaffe","amount":120,"type":"expense"}. Koppla title och amount till Genvägs-inmatning eller "Fråga varje gång"-variabler.

Detta dokument är en snabbreferens; backend-koden är auktoritativ för faktiskt beteende.