Aller au contenu

Erreurs

Toutes les erreurs respectent un format uniforme avec un code HTTP standard et un code métier stable pour faciliter le traitement programmatique.

{
"code": "CUSTOMER_NOT_FOUND",
"message": "Client non trouvé",
"details": { /* optionnel */ }
}
  • code : identifiant stable — faites votre logique dessus, pas sur message
  • message : phrase en français destinée à être affichée (peut changer entre versions)
  • details : objet optionnel avec des infos supplémentaires (ex: erreurs de validation par champ)
{
"code": "VALIDATION_ERROR",
"message": "Requête invalide",
"details": {
"email": ["Requis pour la création"],
"name": ["Requis pour la création"]
}
}
Code HTTPCode métierQuand ?
401AUTH_API_KEY_MISSINGHeader X-API-Key absent
401AUTH_API_KEY_INVALIDClé mal formatée ou ne correspondant à aucune app
403AUTH_API_KEY_FORBIDDENClé publique (pk_live_) utilisée sur une route server-only
Code HTTPCode métierQuand ?
400VALIDATION_ERRORBody invalide — voir details pour le détail par champ
Code HTTPCode métierQuand ?
404CUSTOMER_NOT_FOUNDexternalId inconnu dans votre app
409CUSTOMER_EMAIL_EXISTSEmail déjà pris par un autre client de votre app
Code HTTPCode métierQuand ?
403PLAN_LIMIT_REACHEDQuota mensuel de tickets atteint
404TICKET_NOT_FOUNDID de ticket inconnu (routes de lecture)
Code HTTPCode métierQuand ?
429TOO_MANY_REQUESTSRate limit global dépassé (3 req/s, 20 req/10s, 100 req/min)
500INTERNAL_ERRORErreur serveur — à remonter au support si persistant
  • Retry uniquement sur 5xx et 429. Sur un 4xx, corriger la requête plutôt que de retenter.
  • Exponential backoff sur 429 : 1s, 2s, 4s, 8s…
  • Pivoter sur le code métier, pas sur le message FR qui peut évoluer.
  • Logguer code + details pour vos traces internes.
async function callSupportDesk(path, body) {
const res = await fetch(`https://supportdesk.innovartx.com/api/v1${path}`, {
method: 'POST',
headers: {
'X-API-Key': process.env.SUPPORTDESK_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
});
if (!res.ok) {
const err = await res.json().catch(() => null);
const code = err?.code ?? 'UNKNOWN';
if (code === 'CUSTOMER_NOT_FOUND') {
// logique métier spécifique
}
throw new Error(`SupportDesk ${res.status} ${code}`);
}
return res.json();
}