Erreurs et identifiants de requête
Le corps d'erreur, le requestId à communiquer au support, les codes possibles et les erreurs à réessayer.
Format des erreurs
Chaque erreur a un statut HTTP et un corps JSON avec un code stable (sur lequel brancher votre logique), un message lisible (non stable, ne l'analysez pas) et un requestId.
{
"error": {
"code": "agent_not_found",
"message": "Agent not found",
"requestId": "req_01J9Z3K8M2V5N7Q1R4T6W8Y0AB"
}
}Le même identifiant est renvoyé dans l'en-tête X-Request-Id de chaque réponse, réussie ou non. Journalisez-le à chaque appel : c'est avec lui que la requête se retrouve dans les journaux d'API du dashboard et que le support enquête.
const res = await fetch("https://infynia.quantylcore.com/api/v1/calls/CALL_ID", {
headers: { Authorization: `Bearer ${process.env.INFYNIA_API_KEY}` },
});
if (!res.ok) {
const { error } = await res.json();
// Log requestId: support finds the request with it.
console.error(error.code, error.message, error.requestId);
throw new Error(error.code);
}Codes
| Statut | Codes | Signification |
|---|---|---|
| 400 | invalid_body, invalid_number, invalid_query, invalid_idempotency_key | La requête est mal formée. Corrigez-la, ne la renvoyez pas telle quelle. |
| 401 | unauthorized | Clé absente, invalide, expirée ou révoquée. |
| 403 | forbidden, forbidden_agent, plan_required, test_mode_not_supported, country_not_allowed, do_not_call | La clé n'a pas le droit de le faire, ou l'appel est bloqué par une garde (pays, liste d'opposition). |
| 404 | not_found, agent_not_found | La ressource n'existe pas pour cette organisation. |
| 409 | agent_inactive, not_cancellable, idempotency_in_progress | La ressource n'est pas dans un état qui permet l'action. |
| 422 | outside_hours, idempotency_mismatch | La requête est valide mais refusée : hors de la plage d'appel, ou clé d'idempotence réutilisée avec un autre corps. |
| 429 | rate_limited, concurrent_limit, hourly_limit, pending_limit | Trop de requêtes ou trop d'appels. Patientez, puis réessayez. |
| 500, 502 | internal_error, call_failed | Défaillance côté serveur. Réessayez avec un délai croissant. |
La référence liste les codes que chaque route peut renvoyer. De nouveaux codes peuvent apparaître : traitez un code inconnu d'après son statut HTTP.
Que réessayer
- Les erreurs
4xxautres que429: non, la même requête échouera encore. 429: oui, après le délai de l'en-têteRetry-After.- Les
5xxet les erreurs réseau : oui, avec un délai croissant, et avec la mêmeIdempotency-Keysur unPOST.