Codici di Errore & Risposte Standard
SalernOS adotta risposte di errore standardizzate conformi alle specifiche HTTP e al modello RFC 7807 (Problem Details for HTTP APIs). Nessun errore interno o stack-trace viene mai esposto direttamente al client in ambienti di produzione.
Formato di Risposta Errore
Ogni risposta di errore restituisce un oggetto JSON contenente almeno i campi error e detail:
{
"ok": false,
"status": 400,
"error": "invalid_parameters",
"detail": "Il parametro 'limit' deve essere un numero compreso tra 1 e 100.",
"timestamp": "2026-09-30T14:00:00Z"
}Matrice degli Errori HTTP
| HTTP Status | Codice Macchina | Descrizione & Quando si verifica |
|---|---|---|
| HTTP 400 | bad_request | Il payload inviato non è valido o contiene parametri mancanti/errati. {"error": "invalid_email", "detail": "Il campo email non è conforme."} |
| HTTP 401 | unauthorized | Credenziali non valide o token di sessione mancante o scaduto. {"error": "invalid_credentials", "detail": "Email o password errate."} |
| HTTP 403 | forbidden | Violazione CSRF, origine non autorizzata o tenant mismatch. {"error": "forbidden", "detail": "Richiesta cross-site non autorizzata."} |
| HTTP 404 | not_found | La risorsa richiesta (luogo, evento, partner o pagina) non esiste. {"error": "not_found", "detail": "Nessun luogo corrisponde a questo identificatore."} |
| HTTP 409 | conflict | Conflitto di unicità: email o identificatore già registrati. {"error": "email_already_registered", "detail": "Attività già registrata con questa email."} |
| HTTP 410 | gone / not_on_sale | Funzionalità o acquisto disattivato/gated (es. checkout pass in preparazione). {"error": "not_on_sale", "detail": "La vendita dei pass non è attiva su questo ambiente."} |
| HTTP 429 | rate_limited | Superata la soglia massima di richieste consentite per IP nella finestra temporale. {"error": "rate_limited", "detail": "Troppe richieste. Riprova tra 60 secondi."} |
| HTTP 503 | service_unavailable | Servizio a monte temporaneamente non disponibile o operazione non completata. {"error": "provider_unavailable", "detail": "Impossibile contattare il catalogo in questo momento."} |