Erreurs
Les erreurs utilisent les codes de statut HTTP standards et incluent toujours un corps JSON expliquant le problème.
L’objet erreur
422 Unprocessable Entity
{
"error": {
"type": "invalid_request_error",
"code": "parameter_missing",
"message": "Le paramètre subject est obligatoire.",
"param": "subject",
"doc_url": "https://yuno.chat/docs/api/tickets#create-a-ticket",
"request_id": "req_6Gm2pX0aLk"
}
}| Champ | Description |
|---|---|
type | La catégorie générale, décrite ci-dessous. |
code | Une raison stable, exploitable par votre code pour adapter son comportement. |
message | Une explication lisible par une personne. Elle peut changer ; ne l’analysez pas dans votre code. |
param | Le paramètre à l’origine de l’erreur, le cas échéant. |
request_id | Joignez cet identifiant lorsque vous nous contactez ; il permet de retrouver la requête dans nos journaux. |
Codes de statut
| Statut | Signification |
|---|---|
| 200 OK | L’opération a réussi. |
| 201 Created | Un nouvel objet a été créé. |
| 202 Accepted | L’opération a été mise en file d’attente, par exemple la synchronisation d’une source de connaissances. |
| 400 Bad Request | La requête est mal formée, par exemple en raison d’un JSON invalide. |
| 401 Unauthorized | La clé secrète est absente ou invalide. |
| 403 Forbidden | La clé est valide mais n’autorise pas cette action, ou la fonctionnalité n’est pas incluse dans votre offre. |
| 404 Not Found | L’objet n’existe pas ou appartient à l’autre mode (test ou production). |
| 409 Conflict | L’opération entre en conflit avec l’état actuel, par exemple lorsqu’une clé d’idempotence est réutilisée avec des paramètres différents. |
| 422 Unprocessable Entity | Le JSON est valide, mais un paramètre est absent ou incorrect. |
| 429 Too Many Requests | Vous avez atteint une limite de débit. |
| 500, 502, 503 | Un problème est survenu de notre côté. Vous pouvez réessayer en espaçant progressivement les tentatives. |
Types d’erreur
| Type | Signification |
|---|---|
authentication_error | La clé est absente, invalide ou révoquée. |
permission_error | La clé ou l’offre ne permet pas cette action. |
invalid_request_error | La requête comporte une erreur. Consultez param et message. |
not_found_error | L’objet n’existe pas. |
rate_limit_error | Trop de requêtes. |
api_error | Un problème est survenu de notre côté. |
Gérer les erreurs
Réessayez les réponses 429 et 5xx en espaçant les tentatives de façon exponentielle, et envoyez un en-tête Idempotency-Key avec les requêtes POST pour éviter les doublons lors des nouvelles tentatives. Ne réessayez pas les autres erreurs 4xx sans modifier la requête.
retry.js
async function yuno(path, init = {}, attempt = 0) {
const res = await fetch(`https://api.yuno.chat/v1${path}`, {
...init,
headers: {
Authorization: `Bearer ${process.env.YUNO_SECRET_KEY}`,
"Content-Type": "application/json",
...init.headers,
},
})
const retryable = res.status === 429 || res.status >= 500
if (retryable && attempt < 4) {
const wait = Number(res.headers.get("Retry-After")) * 1000 || 2 ** attempt * 500
await new Promise((r) => setTimeout(r, wait))
return yuno(path, init, attempt + 1)
}
const body = await res.json()
if (!res.ok) throw Object.assign(new Error(body.error.message), body.error)
return body
}