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 namnamount(number, obligatorisk) — måste vara positivtype(string, valfri, standardexpense) — en avexpense/income/prepaid_expense/pending_incomecategory(string, valfri) — kategorinamnnote(string, valfri) — fri anteckningcreated_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 matchande402— prenumeration utgången; förnyelse krävs för att skriva405— metod stöds inte (t.ex. GET på/api/ingest)501— servern saknarSUPABASE_SERVICE_ROLE_KEY500— 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örfalskasorg_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.