← Zpět na Billbook

API vzdáleného účetnictví

Naposledy aktualizováno: 10. května 2026

Zaznamenávejte záznamy z cURL, Zkratek iOS nebo automatizačních skriptů pomocí osobního API tokenu. Token je pouze pro zápis — umí vkládat transakce a číst seznamy kategorií / tagů, ale nemůže číst ani mazat žádná transakční data.

1. Získat token

Přihlaste se jako admin, otevřete Nastavení → 🔑 API vzdáleného účetnictví a klikněte na „Vygenerovat token".

Token v otevřené podobě se zobrazí pouze jednou — okamžitě jej zkopírujte. Server uchovává jen jeho SHA-256 hash, takže ztracený token lze nahradit pouze rotací (která zneplatní starý).

Formát tokenu: bb_<userId>_<secret>. Posílejte v každém požadavku jako Authorization: Bearer <token>.

2. POST /api/ingest — vložit jednu transakci

Tělo požadavku je JSON objekt s následujícími poli:

  • title (string, povinné) — název transakce
  • amount (number, povinné) — musí být kladné
  • type (string, volitelné, výchozí expense) — jedno z expense / income / prepaid_expense / pending_income
  • category (string, volitelné) — název kategorie
  • note (string, volitelné) — volná poznámka
  • created_at (string, volitelné) — ISO 8601; výchozí nyní
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 — seznam kategorií

Vrací názvy kategorií admina v pořadí rozbalovacího menu na dashboardu. Odpověď obsahuje pouze názvy — žádná ids, user ids ani transakční data.

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

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

4. GET /api/ingest/tags — nedávno použité tagy

Vrací nejnověji aktualizované předpony tagů (značky #XXX vložené v titulech). Výchozí 20; použijte ?limit= k přepsání (max. 100).

Vrací prázdné pole místo chyby, pokud tabulka tag_prefixes ještě neexistuje.

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

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

5. Chybové kódy

Všechny chyby jsou JSON: { "error": "zpráva" }.

  • 401 — chybí autorizace, špatný formát tokenu, zrušený nebo neshodný
  • 402 — předplatné vypršelo; pro zápis je potřeba obnovit
  • 405 — metoda není podporována (např. GET na /api/ingest)
  • 501 — serveru chybí SUPABASE_SERVICE_ROLE_KEY
  • 500 — jiná interní chyba

6. Bezpečnost a omezení

Záměrně může token zapisovat pouze do své vlastní organizace — nemůže se vydávat za jiné orgs ani číst existující data:

  • user_id je vždy vlastník tokenu; nelze jej padělat
  • org_id je vždy org vlastníka; zápisy mezi org jsou nemožné
  • Tokeny se vydávají pouze roli admin (manager / staff dostanou 403)
  • Odpovědi nikdy neunikají jiné řádky — vrací se pouze { id, created_at }
  • Zrušení je okamžité; rotujte kdykoli z Nastavení

7. Příklad Zkratky iOS

Přidejte akci „Získat obsah URL", URL https://billbook.me/api/ingest, metoda POST, hlavičky Authorization: Bearer bb_... a Content-Type: application/json, tělo požadavku jako JSON: {"title":"Káva","amount":120,"type":"expense"}. Propojte title a amount se vstupem Zkratky nebo proměnnými „Zeptat se pokaždé".

Tento dokument je rychlý odkaz; skutečné chování určuje kód backendu.