> ## 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.

# Référence des erreurs

> Toutes les erreurs que l'API publique /v1 de Living Security peut renvoyer, avec leur code machine stable, leur statut HTTP et la marche à suivre pour les résoudre.

Chaque réponse d'erreur `/v1` est `application/problem+json` ([RFC 9457](https://www.rfc-editor.org/rfc/rfc9457)) et comporte un ensemble de champs fixe :

```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
}
```

Basez votre logique de branchement sur `code`, jamais sur `detail` : `code` constitue un contrat machine stable, tandis que `detail` est destiné aux humains et peut changer. `param` est présent lorsque l'erreur est attribuable à un paramètre précis de la requête. Incluez `request_id` lorsque vous communiquez avec le soutien technique.

## Codes d'erreur

| Code | Statut HTTP | Nouvelle tentative possible |
| - | - | - |
| [`unauthorized`](/fr-CA/developers/v1/errors/unauthorized) | 401 | Non |
| [`credential_inactive`](/fr-CA/developers/v1/errors/credential_inactive) | 401 | Non |
| [`credential_expired`](/fr-CA/developers/v1/errors/credential_expired) | 401 | Non |
| [`credential_revoked`](/fr-CA/developers/v1/errors/credential_revoked) | 401 | Non |
| [`not_entitled`](/fr-CA/developers/v1/errors/not_entitled) | 403 | Non |
| [`insufficient_permission`](/fr-CA/developers/v1/errors/insufficient_permission) | 403 | Non |
| [`permission_denied`](/fr-CA/developers/v1/errors/permission_denied) | 403 | Non |
| [`resource_not_found`](/fr-CA/developers/v1/errors/resource_not_found) | 404 | Non |
| [`invalid_request`](/fr-CA/developers/v1/errors/invalid_request) | 400 ou 409 | Non |
| [`invalid_filter`](/fr-CA/developers/v1/errors/invalid_filter) | 400 | Non |
| [`unsupported_version`](/fr-CA/developers/v1/errors/unsupported_version) | 400 | Non |
| [`idempotency_key_reuse`](/fr-CA/developers/v1/errors/idempotency_key_reuse) | 409 | Selon le conflit |
| [`rate_limited`](/fr-CA/developers/v1/errors/rate_limited) | 429 | Oui |
| [`service_unavailable`](/fr-CA/developers/v1/errors/service_unavailable) | 503 | Oui |
| [`internal_error`](/fr-CA/developers/v1/errors/internal_error) | 500 | Oui |

L'ensemble des codes est fermé : tout nouveau code constitue une modification du contrat public et est annoncé dans le journal des modifications de l'API. Une réponse `retryable: true` signifie que la condition peut se résorber; elle ne prouve pas qu'une écriture est restée sans effet. Relancez les lectures avec un nombre de tentatives et une durée totale limités, un délai d'attente exponentiel et une composante aléatoire (gigue). Respectez `Retry-After` lorsqu'il est présent, y compris en cas de `409` ou de `429` pouvant faire l'objet d'une nouvelle tentative.

Pour les mutations, suivez le contrat d'idempotence et de reprise documenté de l'opération. Conservez la clé et la requête d'origine lorsque cela est pris en charge. N'inventez pas de nouvelle clé après un délai d'attente dépassé ou un `5xx` : vous risqueriez de répéter une écriture ayant réussi. Un en-tête `Idempotency-Key` n'offre aucune protection sur une opération qui ne le prend pas en charge.


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