yuno.chat

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"
  }
}
ChampDescription
typeLa catégorie générale, décrite ci-dessous.
codeUne raison stable, exploitable par votre code pour adapter son comportement.
messageUne explication lisible par une personne. Elle peut changer ; ne l’analysez pas dans votre code.
paramLe paramètre à l’origine de l’erreur, le cas échéant.
request_idJoignez cet identifiant lorsque vous nous contactez ; il permet de retrouver la requête dans nos journaux.

Codes de statut

StatutSignification
200 OKL’opération a réussi.
201 CreatedUn nouvel objet a été créé.
202 AcceptedL’opération a été mise en file d’attente, par exemple la synchronisation d’une source de connaissances.
400 Bad RequestLa requête est mal formée, par exemple en raison d’un JSON invalide.
401 UnauthorizedLa clé secrète est absente ou invalide.
403 ForbiddenLa clé est valide mais n’autorise pas cette action, ou la fonctionnalité n’est pas incluse dans votre offre.
404 Not FoundL’objet n’existe pas ou appartient à l’autre mode (test ou production).
409 ConflictL’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 EntityLe JSON est valide, mais un paramètre est absent ou incorrect.
429 Too Many RequestsVous avez atteint une limite de débit.
500, 502, 503Un problème est survenu de notre côté. Vous pouvez réessayer en espaçant progressivement les tentatives.

Types d’erreur

TypeSignification
authentication_errorLa clé est absente, invalide ou révoquée.
permission_errorLa clé ou l’offre ne permet pas cette action.
invalid_request_errorLa requête comporte une erreur. Consultez param et message.
not_found_errorL’objet n’existe pas.
rate_limit_errorTrop de requêtes.
api_errorUn 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
}