Salta ai contenuti

API Reference

XIQUIL espone un’API REST completa per integrare e automatizzare la gestione finanziaria.

Per gli sviluppatori ci sono due superfici API distinte:

  • API core sotto /api/, usata dal frontend XIQUIL e dalle integrazioni esterne;
  • API plugin sotto /api/plugins/{nome_plugin}/, montata dinamicamente dai plugin abilitati.

L’API supporta due metodi di autenticazione:

Usato dall’interfaccia web. Login via POST, token in cookie HTTP-only.

Terminal window
# Login
curl -X POST https://localhost/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "password": "password"}' \
-c cookies.txt
# Richiesta autenticata
curl https://localhost/api/uscite/ -b cookies.txt

Il token di accesso dura 15 minuti. Il refresh token dura 30 giorni e viene rinnovato automaticamente.

Per integrazioni programmatiche. Genera una chiave dalla pagina Impostazioni.

Terminal window
curl https://localhost/api/uscite/ \
-H "Authorization: Bearer cs_la_tua_api_key"

Le API key hanno il prefisso cs_ e non richiedono CSRF token.

Le richieste mutanti (POST, PUT, DELETE) con autenticazione cookie richiedono un token CSRF:

  1. Leggi il cookie csrftoken
  2. Invia il valore come header X-CSRF-Token

Le API key non richiedono CSRF.

Tutti gli endpoint sono sotto il prefisso /api/.

RisorsaMetodoEndpointDescrizione
AmbitiGET/api/ambiti/Lista ambiti accessibili
POST/api/ambiti/Crea ambito
GET/api/ambiti/{id}Dettaglio ambito
SoggettiGET/api/soggetti/Lista soggetti
FornitoriGET/api/fornitori/Lista fornitori
ClientiGET/api/clienti/Lista clienti
FondiGET/api/fondi/Lista fondi
GET/api/fondi/{id}/saldoSaldo corrente
UsciteGET/api/uscite/Lista uscite (paginata)
POST/api/uscite/Crea uscita
GET/api/uscite/{id}Dettaglio con voci/scadenze
EntrateGET/api/entrate/Lista entrate (paginata)
POST/api/entrate/Crea entrata
TransazioniGET/api/transazioni/Lista transazioni
ScadenzeGET/api/scadenze/Lista scadenze
POST/api/scadenze/{id}/pagaPaga scadenza
BudgetGET/api/budget/Lista budget
FinanziamentiGET/api/finanziamenti/Lista finanziamenti
CalendarioGET/api/calendario/Eventi calendario
NotificheGET/api/notifiche/Notifiche utente
ImpostazioniGET/api/impostazioni/Impostazioni globali

I plugin che dichiarano provides_routes: true espongono le proprie API sotto:

/api/plugins/{nome_plugin}/...

Esempio:

Terminal window
curl https://localhost/api/plugins/xq_bank_reconciliation/ping \
-H "Authorization: Bearer cs_la_tua_api_key"

Le route plugin sono FastAPI standard e usano le stesse regole del core:

  • autenticazione cookie o API key;
  • permission dependency del core quando leggono o modificano dati XIQUIL;
  • scope per ambito quando lavorano su risorse legate ad ambiti, fondi, uscite o entrate;
  • risposta JSON con codici HTTP coerenti.

Per creare un plugin API-first, parti da Creare un plugin e dalla reference Plugin SDK Python.

Le API di gestione dei plugin vivono sotto /api/system/plugins. Quasi tutte richiedono un utente admin; /manifest richiede solo un utente autenticato, perche serve al frontend per costruire la navigazione.

MetodoEndpointDescrizione
GET/api/system/plugins/Lista plugin installati e scoperti
GET/api/system/plugins/manifestManifest frontend per utenti autenticati
GET/api/system/plugins/catalogCatalogo Hub con stato locale
POST/api/system/plugins/{name}/installInstalla dal Marketplace
POST/api/system/plugins/{name}/update-from-hubAggiorna dal Marketplace
POST/api/system/plugins/{name}/updateAggiorna manualmente da upload .tar.gz
POST/api/system/plugins/{name}/toggleAbilita o disabilita
DELETE/api/system/plugins/{name}Disinstalla
POST/api/system/plugins/uploadUpload .tar.gz in developer mode
POST/api/system/plugins/install-urlInstalla da URL in developer mode
POST/api/system/plugins/restartRiavvia per applicare modifiche

Gli endpoint upload e install-url sono disponibili solo con licenza plugin_developer=true oppure PLUGIN_DEVELOPER_MODE=True.

Le liste supportano paginazione server-side:

GET /api/uscite/?offset=0&limit=25&sort_by=-data_documento
ParametroDefaultDescrizione
offset0Quanti record saltare
limit25Quanti record restituire (max 500)
sort_byvariaCampo di ordinamento (prefisso - per desc)

Risposta:

{
"items": [...],
"total": 142
}

L’API applica limiti di frequenza:

  • API generiche: 30 richieste/secondo
  • Upload file: 2 richieste/secondo
  • Login: 10 tentativi in 15 minuti per email

Superando il limite, ricevi HTTP 429 (Too Many Requests).

Se il server e in modalita debug (DEBUG=True), la documentazione interattiva Swagger e disponibile su:

https://localhost/api/docs
CodiceSignificato
200Successo
201Creato
400Richiesta non valida (dati mancanti o errati)
401Non autenticato
403Non autorizzato (permessi insufficienti) o CSRF mancante
404Risorsa non trovata
429Troppi tentativi
500Errore interno del server