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

# Erreurs

> Codes de réponse, format des erreurs, et comment réagir à chacune.

Une erreur répond toujours en JSON avec au moins un `message` lisible. Les messages sont dans la langue par défaut de l'installation : fiez-vous au code HTTP et aux noms de champs, pas au texte.

## Les codes

| Code        | Signifie                                                                                                    | Que faire                                            |
| ----------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `200` `201` | Réussi, ou créé.                                                                                            |                                                      |
| `202`       | Accepté et mis en file : le travail se fait en arrière-plan (import, gros lot).                             | Suivez l'`url` renvoyée.                             |
| `204`       | Supprimé. Pas de corps.                                                                                     |                                                      |
| `400`       | Requête mal formée (clé d'idempotence trop longue…).                                                        | Corrigez l'appel.                                    |
| `401`       | Pas de jeton, ou jeton révoqué.                                                                             | Vérifiez l'en-tête `Authorization`.                  |
| `403`       | Aptitude, rôle ou équipe insuffisants, ou équipe suspendue.                                                 | Lisez `message`.                                     |
| `404`       | Ressource introuvable dans cette équipe.                                                                    | Vérifiez l'`id`.                                     |
| `409`       | Conflit : campagne en cours d'envoi, personne déjà dans l'automatisation, appel idempotent encore en cours. | Lisez `message`, ne renvoyez pas tel quel.           |
| `422`       | Données refusées.                                                                                           | Lisez `errors` ou `message`.                         |
| `429`       | Trop d'appels.                                                                                              | Attendez `Retry-After` secondes.                     |
| `502`       | E-mail transactionnel refusé par le fournisseur d'envoi.                                                    | Le détail est dans `failure_reason`.                 |
| `5xx`       | Problème de Lekalao.                                                                                        | Réessayez plus tard, avec la même `Idempotency-Key`. |

## Erreurs de validation

`422` avec le détail par champ :

```json theme={null}
{
    "message": "Le champ email doit être une adresse e-mail valide.",
    "errors": {
        "email": ["Le champ email doit être une adresse e-mail valide."],
        "tags.2": ["Le champ tags.2 ne doit pas dépasser 255 caractères."]
    }
}
```

Les champs de tableaux sont désignés par leur position : `subscribers.14.email` est la 15ᵉ ligne d'un lot.

## Refus métier

Certains `422` n'ont qu'un `message`, parce que la donnée est valide mais l'opération impossible :

| Message                                                        | Situation                                                               |
| -------------------------------------------------------------- | ----------------------------------------------------------------------- |
| « This address is blocked. »                                   | L'adresse est dans la liste de suppression.                             |
| « Your plan holds 3 subscribers. Move up a plan to add more. » | Limite d'abonnés de la formule atteinte.                                |
| « This campaign cannot be sent yet. »                          | La campagne n'est pas prête ; la liste des raisons est dans `problems`. |
| Adresse d'expédition refusée                                   | L'expéditeur n'est pas sur un domaine autorisé. Le message dit lequel.  |

```json theme={null}
{
    "message": "This campaign cannot be sent yet.",
    "problems": [
        "Add a visible unsubscribe link to the content, with {{ unsubscribe_url }}.",
        "Set the postal address of your organisation in the general settings."
    ]
}
```

## Réessayer ou non

* **Réessayez** sur `429`, `5xx` et les erreurs réseau, avec un délai croissant et la même `Idempotency-Key`.
* **Ne réessayez pas** sur `4xx` : le même appel donnera la même réponse. Corrigez d'abord.
