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 nimiamount(number, pakollinen) — täytyy olla positiivinentype(string, valinnainen, oletusexpense) — yksi seuraavista:expense/income/prepaid_expense/pending_incomecategory(string, valinnainen) — luokan niminote(string, valinnainen) — vapaa muistiinpanocreated_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 kirjoittamiseen405— menetelmää ei tueta (esim. GET kohteeseen/api/ingest)501— palvelimelta puuttuuSUPABASE_SERVICE_ROLE_KEY500— 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_idon aina tokenin omistaja; sitä ei voi väärentääorg_idon 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.