# Erreurs

> Statuts HTTP et objet error homogène : type, code, message en français, param et doc_url.

Documentation de l’API de WoWDB des Défias : https://docs.wowdb.assemblee-defias.fr/erreurs

## Statuts HTTP

| Statut | Signification |
| --- | --- |
| `200 OK` | Réussite. |
| `304 Not Modified` | Rien n’a changé depuis l’ETag envoyé dans `If-None-Match` ([cache](https://docs.wowdb.assemblee-defias.fr/cache)). |
| `400 Bad Request` | Requête à corriger : paramètre inconnu, valeur invalide, curseur invalide. |
| `404 Not Found` | Fiche, version du jeu ou route introuvable. |
| `405 Method Not Allowed` | Méthode autre que `GET`, `HEAD` ou `OPTIONS` : l’API est en lecture seule. |
| `429 Too Many Requests` | Trop de requêtes : attendez `Retry-After` secondes ([limites](https://docs.wowdb.assemblee-defias.fr/limites)). |
| `500 Internal Server Error` | Erreur de WoWDB, rare : réessayez plus tard, et signalez-la avec `X-Request-Id` si elle persiste. |

**Requête (Exemple : 404)**

#### cURL

```bash
curl https://api.wowdb.assemblee-defias.fr/v1/classic/items/999999
```

**Réponse** (statut 404)

```json
{
  "error": {
    "type": "invalid_request_error",
    "code": "resource_missing",
    "message": "Aucun objet n° 999999 dans la version classic. Vérifiez la version : un même numéro n'existe pas forcément dans les trois.",
    "param": null,
    "doc_url": "https://docs.wowdb.assemblee-defias.fr/erreurs#resource_missing"
  }
}
```

## L’objet error

Toute réponse en erreur a le même corps JSON :

- `error` (objet) : L’erreur.
  - `type` (chaîne) : Famille : invalid_request_error (requête à corriger), rate_limit_error (trop de requêtes), api_error (erreur de WoWDB).
  - `code` (chaîne) : Code précis et stable, à tester dans votre code (parameter_invalid, resource_missing…).
  - `message` (chaîne) : Explication en français, lisible par un humain.
  - `param` (chaîne ou null) : Paramètre en cause, s’il y en a un.
  - `doc_url` (chaîne) : Section de la documentation qui explique cette erreur.

Testez `error.code` dans votre code : il est stable. `message` est en français et peut évoluer.

**Gérer une erreur**

#### cURL

```bash
# -i affiche le statut et les en-têtes ; le corps reste du JSON.
curl -i "https://api.wowdb.assemblee-defias.fr/v1/classic/items?quality=mythic"
```

#### JavaScript

```js
const res = await fetch("https://api.wowdb.assemblee-defias.fr/v1/classic/items?quality=mythic");
if (!res.ok) {
  const { error } = await res.json();
  // error.type, error.code, error.message, error.param, error.doc_url
  if (error.code === "parameter_invalid") console.error(`${error.param} : ${error.message}`);
  if (res.status === 429) await new Promise(r => setTimeout(r, Number(res.headers.get("Retry-After")) * 1000));
}
```

#### Python

```python
import json
import urllib.error
import urllib.request

try:
    urllib.request.urlopen("https://api.wowdb.assemblee-defias.fr/v1/classic/items?quality=mythic")
except urllib.error.HTTPError as e:
    error = json.load(e)["error"]
    print(e.code, error["code"], error["param"], error["message"])
    # 400 parameter_invalid quality Valeur inconnue pour quality : « mythic »…
```

## Codes d’erreur

### parameter_invalid

`400` : valeur invalide (`limit=500`, `quality=mythic`, `rogue=oui`, identifiant non numérique) ou paramètre répété. `param` nomme le paramètre, `message` donne les valeurs permises.

### parameter_unknown

`400` : paramètre inconnu de cette route (`qualite=4`). Le message liste les paramètres acceptés.

### parameter_missing

`400` : paramètre obligatoire absent (`q` de la recherche).

### cursor_invalid

`400` : curseur illisible ou venu d’une autre requête ([pagination](https://docs.wowdb.assemblee-defias.fr/pagination#curseur-invalide)).

### resource_missing

`404` : aucune fiche de ce numéro dans cette version.

### version_unknown

`404` : version du jeu inconnue ; versions : `classic`, `tbc`, `wotlk`.

### route_unknown

`404` : aucune route à cette adresse.

### method_not_allowed

`405` : méthode refusée ; l’en-tête `Allow` liste `GET, HEAD, OPTIONS`.

### rate_limited

`429` : quota dépassé ; type `rate_limit_error`.

### internal_error

`500` : erreur de WoWDB ; type `api_error`.

**Requête (Exemple : 400)**

#### cURL

```bash
curl -G https://api.wowdb.assemblee-defias.fr/v1/classic/items \
  -d quality=mythic
```

**Réponse** (statut 400)

```json
{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_invalid",
    "message": "Valeur inconnue pour quality : « mythic ». Valeurs possibles : poor, common, uncommon, rare, epic, legendary, artifact, heirloom.",
    "param": "quality",
    "doc_url": "https://docs.wowdb.assemblee-defias.fr/erreurs#parameter_invalid"
  }
}
```

---

API de WoWDB des Défias, v1 (2026-10-01). Adresse de base : https://api.wowdb.assemblee-defias.fr/v1. Index : https://docs.wowdb.assemblee-defias.fr/llms.txt.
