API ya Uhasibu wa Mbali
Imesasishwa mwisho: 10 Mei 2026
Andika miamala kutoka cURL, Njia za mkato za iOS au hati za otomatiki ukitumia tokeni binafsi ya API. Tokeni ni ya kuandika tu — inaweza kuingiza miamala na kusoma orodha za kategoria / lebo, lakini haiwezi kusoma au kufuta data yoyote ya miamala.
1. Pata tokeni
Ingia kama admin, fungua Mipangilio → 🔑 API ya Uhasibu wa Mbali na bofya "Tengeneza tokeni".
Tokeni ya maandishi wazi inaonyeshwa mara moja tu — inakili mara moja. Seva huhifadhi tu heshi yake ya SHA-256, hivyo tokeni iliyopotea inaweza kubadilishwa tu kwa kuzungusha (jambo linalobatilisha ile ya zamani).
Muundo wa tokeni: bb_<userId>_<secret>. Ituma kwa kila ombi kama Authorization: Bearer <token>.
2. POST /api/ingest — ingiza muamala mmoja
Mwili wa ombi ni kitu cha JSON chenye sehemu hizi:
title(string, inahitajika) — jina la muamalaamount(number, inahitajika) — lazima iwe chanyatype(string, hiari, chaguo-msingiexpense) — moja kati yaexpense/income/prepaid_expense/pending_incomecategory(string, hiari) — jina la kategorianote(string, hiari) — maelezo hurucreated_at(string, hiari) — ISO 8601; chaguo-msingi sasa
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 — orodhesha kategoria
Hurudisha majina ya kategoria ya admin kwa mpangilio wa menyu kunjuzi ya dashibodi. Jibu lina majina tu — hakuna ids, user ids au data ya miamala.
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — lebo zilizotumika hivi karibuni
Hurudisha viambishi awali vya lebo vilivyosasishwa hivi karibuni (alama za #XXX zilizopachikwa kwenye vichwa). Chaguo-msingi 20; tumia ?limit= kubadilisha (kiwango cha juu 100).
Hurudisha safu tupu badala ya hitilafu ikiwa jedwali tag_prefixes bado halipo.
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. Misimbo ya hitilafu
Hitilafu zote ni JSON: { "error": "ujumbe" }.
401— idhini haipo, tokeni iliyoharibika, iliyobatilishwa au isiyolingana402— usajili umeisha; uandishi unahitaji kuhuisha405— mbinu haitumiki (mfano GET kwenye/api/ingest)501— seva hainaSUPABASE_SERVICE_ROLE_KEY500— hitilafu nyingine ya ndani
6. Usalama na vikomo
Kwa muundo, tokeni inaweza kuandika tu kwenye shirika lake yenyewe — haiwezi kujifanya orgs nyingine wala kusoma data iliyopo:
user_iddaima ni mmiliki wa tokeni; haiwezi kughushiwaorg_iddaima ni org ya mmiliki; uandishi kati ya orgs hauwezekani- Tokeni hutolewa tu kwa jukumu la admin (manager / staff hupata 403)
- Majibu hayavuji kamwe safu nyingine —
{ id, created_at }pekee hurudishwa - Ubatilishaji ni wa papo hapo; zungusha wakati wowote kutoka Mipangilio
7. Mfano wa Njia ya mkato ya iOS
Ongeza kitendo cha "Get Contents of URL", weka URL kuwa https://billbook.me/api/ingest, mbinu POST, vichwa Authorization: Bearer bb_... na Content-Type: application/json, na mwili wa ombi kama JSON: {"title":"Kahawa","amount":120,"type":"expense"}. Unganisha title na amount na ingizo la Njia ya mkato au vigeu vya "Uliza Kila Mara".
Hati hii ni rejea ya haraka; msimbo wa backend ndio chanzo cha ukweli kwa tabia halisi.