> ## Documentation Index
> Fetch the complete documentation index at: https://developers.0flaw.fr/llms.txt
> Use this file to discover all available pages before exploring further.

# Erreurs

> Format des erreurs et catalogue des codes.

Toutes les erreurs suivent le même format :

```json theme={null}
{ "message": "Scope requis : write:employees", "code": "INSUFFICIENT_SCOPE" }
```

<Warning>
  Basez votre logique sur **`code`**, qui est stable et fait partie du contrat. Le champ `message`
  est destiné aux humains : sa formulation peut changer sans préavis, et il est en français.
</Warning>

## Catalogue

| Statut | Code                    | Signification                              | Que faire                                                                                               |
| ------ | ----------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
| 400    | `VALIDATION_ERROR`      | Corps de requête invalide                  | Corrigez le payload — le message indique le premier champ fautif                                        |
| 401    | `API_KEY_MISSING`       | Aucune clé transmise                       | Vérifiez l'en-tête `Authorization`                                                                      |
| 401    | `API_KEY_INVALID`       | Clé inconnue, révoquée ou expirée          | Créez une nouvelle clé au dashboard                                                                     |
| 403    | `INSUFFICIENT_SCOPE`    | La clé ne porte pas la permission requise  | Recréez une clé avec le scope indiqué                                                                   |
| 403    | `QUOTA_MAXIMUM_ATTEINT` | Le lot dépasserait votre nombre de sièges  | **Aucune écriture n'a été faite.** Réduisez le lot ou augmentez le quota                                |
| 404    | `NOT_FOUND`             | Endpoint inconnu                           | Vérifiez la méthode et le chemin                                                                        |
| 404    | `EMPLOYEE_NOT_FOUND`    | Employé absent de votre entreprise         | Vérifiez l'identifiant ou l'`external_id`                                                               |
| 409    | `SSO_ACCOUNT`           | L'employé se connecte via Google/Microsoft | Aucune invitation par mot de passe n'est possible                                                       |
| 409    | `EMPLOYEE_ARCHIVED`     | L'employé est archivé                      | Réactivez-le avant de l'inviter                                                                         |
| 409    | `ALREADY_ACTIVE`        | L'employé s'est déjà connecté              | Utilisez `force: true` pour écraser son mot de passe, sinon laissez-le utiliser « mot de passe oublié » |
| 413    | `TOO_MANY_RECORDS`      | Plus de 1000 employés en un appel          | Découpez votre liste                                                                                    |
| 429    | `RATE_LIMIT_EXCEEDED`   | Limite de débit atteinte                   | Attendez la fenêtre indiquée par `RateLimit-Reset`                                                      |
| 502    | `EMAIL_SEND_FAILED`     | L'email d'invitation n'a pas pu partir     | **Le mot de passe n'a pas été modifié** : rejouez l'appel                                               |

## Deux garanties utiles

<CardGroup cols={2}>
  <Card title="Le quota ne laisse jamais un import à moitié fait" icon="shield-check">
    Le contrôle de sièges a lieu **avant** toute écriture. Si le lot dépasse votre quota, vous
    recevez `QUOTA_MAXIMUM_ATTEINT` et rien n'a été créé.
  </Card>

  <Card title="Un envoi d'email en échec ne casse rien" icon="envelope">
    Sur `EMAIL_SEND_FAILED`, le mot de passe de l'employé n'est pas modifié. Vous pouvez rejouer
    l'appel sans risquer de le laisser avec des identifiants qu'il n'a jamais reçus.
  </Card>
</CardGroup>

## Erreurs par employé

Sur les opérations de masse, une erreur individuelle **n'interrompt pas** le lot : elle apparaît
dans `results[]` avec son motif.

| Motif                             | Signification                                                      |
| --------------------------------- | ------------------------------------------------------------------ |
| `email_conflict_other_tenant`     | Cet email appartient déjà à une autre entreprise 0flaw             |
| `email_exists_non_employe`        | Cet email correspond à un compte existant qui n'est pas un employé |
| `duplicate_in_payload`            | Le même employé apparaît deux fois dans votre liste                |
| `insert_failed` / `update_failed` | Échec technique sur cette ligne — les autres sont traitées         |
