← Takaisin Billbookiin

Etäkirjanpito-API

Viimeksi päivitetty: 10. toukokuuta 2026

Kirjaa merkintöjä cURL:lla, iOS-pikakomennoilla tai automaatioskripteillä henkilökohtaisella API-tokenilla. Token on vain kirjoitusoikeudellinen — voi lisätä tapahtumia ja lukea luokka- / tagilistoja, mutta ei voi lukea tai poistaa mitään tapahtumadataa.

1. Hae token

Kirjaudu sisään adminina, avaa Asetukset → 🔑 Etäkirjanpito-API ja napsauta "Luo token".

Selkokielinen token näytetään vain kerran — kopioi se heti. Palvelin tallentaa vain sen SHA-256-tiivisteen, joten kadonnut token voidaan korvata vain rotaatiolla (mikä mitätöi vanhan).

Tokenin muoto: bb_<userId>_<secret>. Lähetä jokaisessa pyynnössä muodossa Authorization: Bearer <token>.

2. POST /api/ingest — lisää yksi tapahtuma

Pyynnön runko on JSON-objekti seuraavin kentin:

  • title (string, pakollinen) — tapahtuman nimi
  • amount (number, pakollinen) — täytyy olla positiivinen
  • type (string, valinnainen, oletus expense) — yksi seuraavista: expense / income / prepaid_expense / pending_income
  • category (string, valinnainen) — luokan nimi
  • note (string, valinnainen) — vapaa muistiinpano
  • created_at (string, valinnainen) — ISO 8601; oletus nyt
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 — luokkalista

Palauttaa adminin luokkanimet kojelaudan pudotusvalikon järjestyksessä. Vastaus sisältää vain nimet — ei id:itä, user id:itä tai tapahtumadataa.

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

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

4. GET /api/ingest/tags — viimeksi käytetyt tagit

Palauttaa viimeksi päivitetyt tagi-etuliitteet (otsikoihin upotetut #XXX-merkit). Oletus 20; käytä ?limit= ohittaaksesi (maks. 100).

Palauttaa tyhjän taulukon virheen sijaan, jos tag_prefixes-taulua ei vielä ole.

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

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

5. Virhekoodit

Kaikki virheet ovat JSON: { "error": "viesti" }.

  • 401 — puuttuva valtuutus, virheellinen tokenin muoto, peruutettu tai ei täsmää
  • 402 — tilaus vanhentunut; uusiminen vaaditaan kirjoittamiseen
  • 405 — menetelmää ei tueta (esim. GET kohteeseen /api/ingest)
  • 501 — palvelimelta puuttuu SUPABASE_SERVICE_ROLE_KEY
  • 500 — muu sisäinen virhe

6. Turvallisuus ja rajoitukset

Suunnittelun mukaan token voi kirjoittaa vain omaan organisaatioonsa — ei voi esiintyä muina orgeina tai lukea olemassa olevaa dataa:

  • user_id on aina tokenin omistaja; sitä ei voi väärentää
  • org_id on aina omistajan org; org-rajat ylittävät kirjoitukset ovat mahdottomia
  • Tokenit myönnetään vain admin-roolille (manager / staff saavat 403)
  • Vastaukset eivät vuodata muita rivejä — vain { id, created_at } palautetaan
  • Peruutus on välitön; rotatoi koska tahansa Asetuksista

7. iOS-pikakomento esimerkki

Lisää "Hae URL-osoitteen sisältö" -toiminto, URL https://billbook.me/api/ingest, menetelmä POST, otsakkeet Authorization: Bearer bb_... ja Content-Type: application/json, runko JSON: {"title":"Kahvi","amount":120,"type":"expense"}. Yhdistä title ja amount Pikakomennon syötteeseen tai "Kysy joka kerta" -muuttujiin.

Tämä dokumentti on pikaohje; todellinen käyttäytyminen perustuu backend-koodiin.