> ## Documentation Index
> Fetch the complete documentation index at: https://docs.livingsecurity.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Riferimento degli errori

> Tutti gli errori che l'API pubblica /v1 di Living Security può restituire, con il relativo codice macchina stabile, lo stato HTTP e le indicazioni per risolverli.

Ogni risposta di errore `/v1` è `application/problem+json` ([RFC 9457](https://www.rfc-editor.org/rfc/rfc9457)) con un insieme fisso di campi:

```json theme={null}
{
  "type": "https://docs.livingsecurity.com/developers/v1/errors/resource_not_found",
  "title": "Not Found",
  "status": 404,
  "detail": "No such organization.",
  "code": "resource_not_found",
  "request_id": "req_...",
  "doc_url": "https://docs.livingsecurity.com/developers/v1/errors/resource_not_found",
  "retryable": false
}
```

Utilizzare `code` per la logica condizionale, mai `detail`: `code` è un contratto macchina stabile, mentre `detail` è leggibile da un essere umano e può cambiare. `param` è presente quando l'errore è attribuibile a uno specifico parametro della richiesta. Includere `request_id` quando si contatta il supporto.

## Codici di errore

| Codice | Stato HTTP | Ripetibile |
| - | - | - |
| [`unauthorized`](/it/developers/v1/errors/unauthorized) | 401 | No |
| [`credential_inactive`](/it/developers/v1/errors/credential_inactive) | 401 | No |
| [`credential_expired`](/it/developers/v1/errors/credential_expired) | 401 | No |
| [`credential_revoked`](/it/developers/v1/errors/credential_revoked) | 401 | No |
| [`not_entitled`](/it/developers/v1/errors/not_entitled) | 403 | No |
| [`insufficient_permission`](/it/developers/v1/errors/insufficient_permission) | 403 | No |
| [`permission_denied`](/it/developers/v1/errors/permission_denied) | 403 | No |
| [`resource_not_found`](/it/developers/v1/errors/resource_not_found) | 404 | No |
| [`invalid_request`](/it/developers/v1/errors/invalid_request) | 400 o 409 | No |
| [`invalid_filter`](/it/developers/v1/errors/invalid_filter) | 400 | No |
| [`unsupported_version`](/it/developers/v1/errors/unsupported_version) | 400 | No |
| [`idempotency_key_reuse`](/it/developers/v1/errors/idempotency_key_reuse) | 409 | Dipende dal conflitto |
| [`rate_limited`](/it/developers/v1/errors/rate_limited) | 429 | Sì |
| [`service_unavailable`](/it/developers/v1/errors/service_unavailable) | 503 | Sì |
| [`internal_error`](/it/developers/v1/errors/internal_error) | 500 | Sì |

L'insieme dei codici è chiuso: l'aggiunta di nuovi codici costituisce una modifica del contratto pubblico e viene comunicata tramite il changelog dell'API. Una risposta `retryable: true` indica che la condizione potrebbe risolversi, ma non dimostra che una scrittura non abbia avuto effetto. Ripetere le letture con un numero finito di tentativi e un budget di tempo definito, applicando backoff esponenziale e jitter. Rispettare `Retry-After` quando presente, anche in caso di `409` o `429` ripetibile.

Per le operazioni di modifica, seguire il contratto di idempotenza e di ripristino documentato per l'operazione. Conservare la chiave originale e la richiesta originale, quando supportato. Non generare una nuova chiave dopo un timeout o un `5xx`: in tal caso si rischia di ripetere una scrittura già riuscita. Un'intestazione `Idempotency-Key` non offre alcuna protezione su un'operazione che non la supporta.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.