# API — Catalogo e convenzioni Ultimo aggiornamento: **{{DATA}}** Il contratto è [`openapi.yaml`](openapi.yaml), **fonte di verità**: in caso di differenza fra questo documento, il codice e il contratto, vale il contratto. Si scrive il contratto **prima** del codice (contract-first). --- ## 1. Convenzioni | Aspetto | Regola | |---|---| | Prefisso | `/api/v1` | | Formato | JSON, UTF-8, date ISO 8601 in UTC | | Nomi | | | Autenticazione | | ## 2. Errori Forma unica per tutti gli errori: ```json { "error": { "code": "stringa_stabile", "message": "testo leggibile", "details": {} } } ``` | Codice HTTP | Quando | |:-:|---| | 400 | Richiesta malformata | | 401 | Non autenticato | | 403 | Autenticato ma non autorizzato | | 404 | Risorsa inesistente **o di un altro tenant** (non si rivela l'esistenza) | | 409 | Conflitto (duplicato, stato non compatibile) | | 422 | Validazione fallita | ## 3. Paginazione ## 4. Catalogo ### — `SPEC-…` | Metodo | Percorso | Ruolo minimo | Descrizione | |---|---|---|---| | | | | | ## 5. API interne — non esposte ## 6. Idempotenza e concorrenza ## 7. Limiti