# Erreurs

> Les codes, la forme des messages, et quoi faire de chacun.

## La forme

```json
{
  "statusCode": 404,
  "message": "Cette ressource n'existe pas, ou elle ne t'appartient pas."
}
```

`message` est parfois un tableau, quand plusieurs champs sont invalides :

```json
{
  "statusCode": 400,
  "message": ["name: Donne un nom à cette sauvegarde."]
}
```

Les messages sont en français et écrits pour être montrés tels quels à la personne qui
les lira. Le CLI les affiche sans les retoucher.

## Les codes

| Code | Ce qu'il veut dire | Quoi faire |
| --- | --- | --- |
| `400` | Le corps de la requête ne convient pas. | Lis `message` : il nomme le champ. |
| `401` | Jeton absent, expiré ou révoqué. | En créer un nouveau. |
| `403` | Jeton de portée insuffisante. | Créer un jeton `FULL`. |
| `404` | La ressource n'existe pas, ou n'est pas à toi. | Vérifier l'identifiant. |
| `409` | L'état ne permet pas ce geste. | Un service en `DELETING` ne redémarre pas. |
| `429` | Trop d'appels. | Espacer, et préférer le WebSocket au sondage. |
| `502`, `503` | Le nœud n'a pas répondu. | Réessayer. Ce n'est pas toujours une panne. |

## Le cas du nœud muet

Une partie des routes — console, fichiers, journaux, sauvegardes — passe par le nœud
qui héberge le service. Quand il ne répond pas, l'API ne l'invente pas :

```json
{
  "statusCode": 502,
  "message": "L'hébergement n'a pas répondu. Réessaye dans quelques instants."
}
```

Ce n'est pas la même chose qu'un service arrêté : un service arrêté répond très bien,
il dit juste qu'il ne tourne pas.

## Ce que fait le CLI

Il traduit les cas courants en message avec une suite :

```
x Ton jeton a été refusé.
  Relance `ark login` avec un jeton valable.
```

```
x Ce jeton ne sert qu'au registre. Crée un jeton complet pour piloter tes services.
  Crée un jeton complet dans l'espace client, onglet Clés SSH & API.
```

Et pour les pannes de liaison, il devine la cause plutôt que de rendre une trace :

```
x Rien n'écoute sur https://api.arkya.gg.
  Vérifie ta connexion, puis relance.
```
