Erreurs et limites
MarkdownCodes de réponse, signification et actions à effectuer. Toutes les erreurs sont au format JSON et comportent un Request ID.
Guide complet
Format des erreurs
L’erreur utilise le format de l’API appelée : l’objet error pour OpenAI, {"type": "error", "error": {...}} pour Anthropic et error avec les champs status et details pour Gemini. Les SDK les reconnaissent donc comme des erreurs API ordinaires.
error.codeeterror.reason— classe d’erreur figurant dans le tableau ci-dessous ; les deux champs ont la même valeur.error.type— valeur standard du format (par exemple,invalid_request_errorouserver_error).error.request_id(pour Anthropic,request_idau premier niveau), l’en-têteX-Request-IDet la fin du message contiennent l’identifiant de la requête.- Pour Gemini, la classe se trouve dans
error.details:ErrorInfo.reason— le même code en majuscules (par exemple,MODEL_OVERLOADED),domain—ailoot.ai; l’identifiant de la requête se trouve dansRequestInfo.requestId. - Au format Gemini, une erreur 5xx qui ne doit pas être relancée automatiquement et
result_pending_checksont renvoyés avec le statut 409 etstatusABORTED: les SDK et CLI Gemini ne les relancent donc pas eux-mêmes. La classe d’erreur se trouve dansErrorInfo.reason(par exemple,MODEL_TIMEOUTouRESULT_PENDING_CHECK). - La réponse au format OpenAI contient également les champs de premier niveau
codeetmessage— pour les anciens clients.
{
"code": "API_KEY_REQUIRED",
"error": {
"code": "invalid_api_key",
"message": "No API key was sent with the request. Nothing was charged. Please check that the full key is sent in the Authorization header as \"Bearer <key>\". Request ID: 3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6.",
"param": null,
"reason": "invalid_api_key",
"request_id": "3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6",
"type": "invalid_request_error"
},
"message": "No API key was sent with the request. Nothing was charged. …"
}{
"type": "error",
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"reason": "invalid_api_key",
"message": "… Nothing was charged. … Request ID: 94ed3e31-4373-41ce-bf8a-0d1ed3f7235e."
},
"request_id": "94ed3e31-4373-41ce-bf8a-0d1ed3f7235e"
}{
"error": {
"code": 401,
"status": "UNAUTHENTICATED",
"message": "The API key is not valid. Nothing was charged. … Request ID: e7aa743b-9d0d-4064-b206-2562609f545b.",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "INVALID_API_KEY",
"domain": "ailoot.ai",
"metadata": {
"code": "invalid_api_key",
"reason": "invalid_api_key",
"request_id": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
},
{
"@type": "type.googleapis.com/google.rpc.RequestInfo",
"requestId": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
]
}
}Codes d’erreur
| HTTP | Classe (reason) | Ce qui s’est passé | Que faire |
|---|---|---|---|
| 400 | invalid_request | La requête est incorrecte : corps ou paramètre invalide ; le modèle ne prend pas en charge un champ, une pièce jointe ou un outil demandé ; la clé est fournie dans l’adresse | Corrigez la requête selon le message d’erreur : retirez le champ, la pièce jointe ou l’outil non pris en charge et transmettez la clé dans un en-tête. Un refus pour un champ, une pièce jointe ou un outil non pris en charge intervient avant la réservation : aucun montant n’est débité |
| 400 | context_length_exceeded | La requête dépasse le contexte du modèle | Réduisez l’historique ou choisissez un modèle avec un contexte plus grand |
| 400 | content_policy_violation | La requête a été rejetée en raison des règles du modèle | Reformulez la requête |
| 401 | invalid_api_key | Clé absente ou incorrecte | Vérifiez que la clé est transmise intégralement |
| 401 | api_key_disabled | La clé est désactivée | Activez la clé ou créez-en une nouvelle |
| 402 | insufficient_balance, insufficient_quota | Le solde disponible ne couvre même pas la réservation minimale (insufficient_quota — le même cas, présenté sous une forme familière au SDK OpenAI) | Rechargez le solde ou réduisez max_tokens |
| 402 | api_key_quota_exhausted | Le plafond global de dépenses de la clé est atteint | Augmentez le plafond de la clé dans l’espace client |
| 402 | payment_disputed | Le compte présente une dette liée à un paiement contesté | Les nouvelles requêtes sont suspendues jusqu’au règlement : contactez l’assistance |
| 403 | api_key_expired | La clé a expiré | Créez une nouvelle clé |
| 403 | account_inactive | Votre compte est désactivé | Contactez l’assistance |
| 403 | permission_denied | Cette requête n’est pas autorisée pour la clé (par exemple, en raison de l’adresse IP) | Vérifiez les restrictions de la clé |
| 404 | model_not_found | Ce modèle n’existe pas | Vérifiez l’ID dans /v1/models |
| 404 | unsupported_endpoint | Le modèle ne fonctionne pas dans ce format | Choisissez un autre format ou modèle |
| 404 | not_found | Ce chemin ou cet objet, comme une tâche, n’existe pas | Vérifiez l’adresse et l’identifiant |
| 409 | duplicate_request | L’opération utilisant la même clé d’idempotence a déjà été acceptée et est peut-être déjà terminée | Vérifiez le résultat de la première opération ; n’en envoyez pas une nouvelle |
| 409 | not_ready, video_not_ready | La vidéo ou l’autre tâche n’est pas encore prête | Consultez le statut plus tard |
| 409, 503 | result_pending_check | Le résultat de la requête est en cours de vérification. Pour une tâche vidéo, cela correspond au marqueur result_pending_check: true dans la réponse de statut ; la tâche reste in_progress | Ne renvoyez pas la requête : son statut apparaîtra dans l’historique (GET https://ailoot.ai/api/v1/usage). Ne recréez pas la tâche vidéo : vérifiez-la plus tard via GET /v1/videos/{id} |
| 410 | model_retired | Le modèle a été retiré du service | Choisissez une nouvelle version dans GET /v1/models |
| 413 | request_too_large | Le corps de la requête est trop volumineux | Réduisez les fichiers ou l’historique |
| 429 | rate_limit_exceeded, gateway_concurrency_limit, gateway_queue_full | Trop de requêtes ou de requêtes simultanées depuis votre compte | Patientez (voir l’en-tête Retry-After, généralement 10 s), puis réessayez |
| 429 | usage_limit_reached | Le plafond de dépenses de la clé pour la fenêtre en cours est atteint (5 heures, 1 jour ou 7 jours) | Attendez le renouvellement de la fenêtre ou augmentez le plafond de la clé |
| 500 | internal_error | Erreur Ailoot | Contactez l’assistance en indiquant le Request ID |
| 502 | invalid_model_response, empty_response, incomplete_response | Le modèle a renvoyé une réponse invalide, vide ou incomplète | Recherchez le Request ID dans l’historique de votre espace personnel. S’il contient un résultat ou un débit, un nouvel envoi créera une deuxième requête payante. L’absence d’entrée ne confirme ni que la requête n’a pas été envoyée, ni qu’elle n’a pas été exécutée : ne répétez pas un envoi dont l’issue est inconnue ; contactez le support en indiquant le Request ID. |
| 502 | result_not_delivered | Le résultat n’a pas été livré par la faute d’Ailoot ; le montant réservé a été libéré ou le débit a été remboursé | Vous pouvez renvoyer la requête |
| 503 | model_overloaded | Le modèle est temporairement surchargé | Si X-Should-Retry : true, réessayez après le nombre de secondes indiqué dans Retry-After ; si false, vérifiez d’abord le Request ID dans l’historique |
| 503 | model_unavailable | Le modèle est temporairement indisponible | Choisissez un autre modèle. Si X-Should-Retry : true, réessayez après le nombre de secondes indiqué par Retry-After ; si false, vérifiez d’abord le Request ID dans l’historique |
| 503 | service_unavailable | Défaillance temporaire du côté d’Ailoot | Si X-Should-Retry : true, réessayez après le nombre de secondes indiqué dans Retry-After ; si false, vérifiez d’abord le Request ID dans l’historique |
| 503 | charge_not_confirmed | La réponse n’a pas été fournie : le débit n’a pas pu être confirmé ; la réservation a été libérée et aucun montant n’a été débité | Si X-Should-Retry : true, réessayez après le nombre de secondes indiqué dans Retry-After ; si false, vérifiez d’abord le Request ID dans l’historique |
| 504 | model_timeout | Le modèle n’a pas répondu à temps ; le résultat peut encore arriver | Ne renvoyez pas la requête avant d’avoir vérifié le Request ID dans l’historique |
Les codes relatifs aux réponses du modèle et à la vérification du résultat (502, 503 et 504) désignent désormais le modèle ou la requête : model_unavailable, model_timeout, invalid_model_response, incomplete_response, charge_not_confirmed et result_pending_check. Si votre code compare error.code aux anciennes valeurs, remplacez-les par les codes du tableau ; pour connaître la correspondance entre anciens et nouveaux codes, contactez l’assistance.
Quand relancer une requête
- Vérifiez d’abord X-Should-Retry : en cas de
false,result_pending_checkoumodel_timeoutne relancez pas automatiquement la requête. Recherchez le Request ID dans l’historique de votre espace client : vous y trouverez le résultat et le débit. - Une nouvelle tentative est sûre lorsque vous recevez X-Should-Retry : true : attendez
Retry-Aftersecondes. Un code 5xx ne suffit pas : le résultat peut déjà exister. Vérifiez d’abord l’historique dans l’espace client ou contactez l’assistance en indiquant le Request ID. C’est particulièrement important pour les images, les vidéos, la musique et les longues étapes d’agents. - Une nouvelle tentative n’aidera pas : 400, 401, 402, 403, 404 : corrigez d’abord la requête, la clé ou le solde.
Limites
La fréquence et le nombre de requêtes simultanées sont limités pour votre compte dans son ensemble, et non pour chaque clé. Un dépassement entraîne une réponse 429 rate_limit_exceeded avec l’en-tête Retry-After: 10. Si le modèle lui-même est surchargé, une réponse 503 est renvoyée avec model_overloaded avec Retry-After: 30. Pour un volume plus élevé, contactez l’assistance.
Les plafonds de dépenses se définissent pour chaque clé : plafond global, erreur 402 api_key_quota_exhausted; fenêtres de 5 heures, 1 jour et 7 jours, erreur 429 usage_limit_reached. En savoir plus : Clés et adresse de l’API.
Modèles NVIDIA : file d’attente
Vous pouvez consulter la liste des modèles même avec un solde nul ; pour générer, le solde doit couvrir la réservation. Les modèles NVIDIA, Nemotron et d’autres, passent par une file d’attente commune : en cas de forte charge, la réponse peut arriver plus tard ou une erreur « modèle temporairement surchargé » est renvoyée avec l’en-tête Retry-After. Réessayez après le délai indiqué. Les prix figurent dans le catalogue et la facturation suit les mêmes règles que pour les autres modèles.
Le modèle fixe les limites de taille : le contexte, soit le nombre de tokens que vous pouvez envoyer, et la longueur maximale de réponse. Elles figurent dans le catalogue.
Historique et dépenses
Historique et dépenses · GET https://ailoot.ai/api/v1/usage · JWT · Authorization: Bearer $TOKEN
JWT ≠ sk-… · Connexion et sessions