API di Contabilità Remota
Ultimo aggiornamento: 10 maggio 2026
Registra voci da cURL, Comandi iOS o script di automazione con un token API personale. Il token è di sola scrittura: può inserire transazioni e leggere gli elenchi di categorie / tag, ma non può leggere né eliminare dati di transazione.
1. Ottenere un token
Accedi come admin, apri Impostazioni → 🔑 API di Contabilità Remota e clicca su "Genera token".
Il token in chiaro viene mostrato una sola volta — copialo subito. Il server memorizza solo l'hash SHA-256, quindi un token smarrito può essere sostituito solo ruotandolo (cosa che invalida quello vecchio).
Formato del token: bb_<userId>_<secret>. Invialo a ogni richiesta come Authorization: Bearer <token>.
2. POST /api/ingest — inserire una transazione
Il corpo della richiesta è un oggetto JSON con questi campi:
title(string, obbligatorio) — nome della transazioneamount(number, obbligatorio) — deve essere positivotype(string, opzionale, defaultexpense) — uno traexpense/income/prepaid_expense/pending_incomecategory(string, opzionale) — nome della categorianote(string, opzionale) — nota liberacreated_at(string, opzionale) — ISO 8601; default ora
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 — elenco categorie
Restituisce i nomi delle categorie dell'admin nell'ordine del menu a tendina della dashboard. La risposta contiene solo i nomi — niente id, user id o dati di transazione.
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — tag usati di recente
Restituisce i prefissi tag aggiornati di recente (i marcatori #XXX incorporati nei titoli). Default 20; usa ?limit= per modificare (max 100).
Restituisce un array vuoto invece di un errore se la tabella tag_prefixes non esiste ancora.
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. Codici di errore
Tutti gli errori sono in JSON: { "error": "messaggio" }.
401— autorizzazione mancante, token malformato, revocato o non corrispondente402— abbonamento scaduto; serve rinnovare per scrivere405— metodo non supportato (es. GET su/api/ingest)501— al server mancaSUPABASE_SERVICE_ROLE_KEY500— altro errore interno
6. Sicurezza e limiti
Per design il token può scrivere solo nella propria organizzazione — non può impersonare altre org né leggere dati esistenti:
user_idè sempre il proprietario del token; non falsificabileorg_idè sempre l'org del proprietario; le scritture cross-org sono impossibili- I token sono emessi solo al ruolo admin (manager / staff ricevono 403)
- Le risposte non rivelano altre righe — viene restituito solo
{ id, created_at } - La revoca è immediata; ruota in qualsiasi momento dalle Impostazioni
7. Esempio di Comandi iOS
Aggiungi un'azione "Ottieni contenuto URL", URL https://billbook.me/api/ingest, metodo POST, header Authorization: Bearer bb_... e Content-Type: application/json, e corpo della richiesta in JSON: {"title":"Caffè","amount":120,"type":"expense"}. Collega title e amount all'input del Comando o a variabili "Chiedi ogni volta".
Questo documento è un riferimento rapido; per il comportamento effettivo fa fede il codice del backend.