Errori
Un unico formato per ogni errore, con un codice stabile leggibile dalle macchine e un messaggio per le persone.
{ "error": "entitlement_required", "message": "Guard is not enabled for this organisation", "details": { "upgrade": "/settings#plan" } }| Status | error | Quando |
|---|---|---|
| 400 | invalid_body | Il body non ha superato la validazione; details.fieldErrors indica i campi |
| 400 | invalid_json · invalid_query · empty | JSON malformato, query string errata, payload vuoto |
| 400 | no_agent_build · endpoint_required · no_connection | Progetto non pronto per un’esecuzione o per Guard |
| 400 | invalid_cron · unknown_template · no_scenarios | Pianificazioni ed esecuzioni |
| 400 | missing_signature · invalid_signature · turnstile_failed | Verifica di webhook e moduli pubblici |
| 400 | config_error · invalid_provider · weak_password | Validazione delle impostazioni |
| 400 | restricted_key_required · invalid_key_format · stripe_key_rejected · missing_permission · mode_mismatch · account_mismatch | Collegamento o rotazione di Stripe: le chiavi live devono essere limitate; details.missing indica i permessi mancanti |
| 400 | project_required · egress_blocked · secret_required · not_configured | Osservazioni e servizio di accesso |
| 401 | unauthorized · invalid_credentials | Credenziale mancante o errata |
| 402 | plan_limit_reached | Esecuzioni mensili del piano esaurite |
| 403 | forbidden · entitlement_required · wrong_password | Ruolo insufficiente, funzionalità non sbloccata |
| 404 | not_found · mandate_not_found · project_not_found · connection_not_found · agent_build_not_found | Sconosciuto o non tuo |
| 409 | idempotency_key_reused · business_key_conflict | Stessa chiave con body diverso; stesso effetto già proposto |
| 409 | digest_mismatch · approval_expired · not_reviewable · no_pending_approval · already_decided | Approvazioni |
| 409 | mandate_inactive · project_paused | Autorità terminata, oppure il kill-switch è attivo |
| 409 | slug_taken · exists · already_enabled · already_onboarded | Conflitti |
| 409 | use_billing · billing_not_configured · already_subscribed · no_billing_account | I cambi di piano passano dalla fatturazione |
| 409 | connection_in_use | Mandati attivi od operazioni non concluse usano ancora la connessione |
| 413 | payload_too_large | Body oltre il limite |
| 422 | no_priced_models · no_valid_cases | Catalogo AI o input di red-team non utilizzabile |
| 429 | rate_limited | Troppe richieste da questo IP |
| 500 | internal_error | Imprevisto; riprova una volta, poi contatta il supporto indicando l’ora della richiesta |
| 502 | sandbox_unavailable · sync_failed · stripe_unreachable | Una dipendenza non ha risposto |
Le decisioni non sono errori: un DENY è un 202 con decision: "DENY" e decision_reasons espliciti. Nemmeno i verdetti sono errori.