Guide
Codes d'erreur et diagnostic
Statuts HTTP, signification des codes d'erreur, erreurs courantes de modèles et de ressources, limitation de débit et étapes de diagnostic
Codes d'erreur et diagnostic
Lors du diagnostic, commencez par noter : le code de statut HTTP, l'identifiant de requête renvoyé par la plateforme, l'ID du modèle, l'ID de la tâche, l'ID de la ressource et le code d'erreur d'origine.
N'enregistrez pas la clé API, le token de session de portrait ni l'adresse complète de téléchargement de la ressource ; masquez ces informations avant de les transmettre au support de la plateforme.
Signification des statuts HTTP
| Statut | Signification | Traitement |
|---|---|---|
200 | Requête réussie (les états intermédiaires d'une tâche asynchrone sont également 200) | Lisez le champ de statut dans le corps de la réponse |
400 | Paramètre invalide, format du corps de requête invalide, model manquant | Corrigez la requête selon error.message ou msg |
401 | Clé API absente, incorrecte ou expirée | Vérifiez Authorization et l'état de la clé |
403 | Accès non autorisé (par exemple, accès à une ressource d'un autre compte) | Vérifiez que la ressource appartient au compte actuel |
404 | Ressource inexistante, n'appartenant pas au compte actuel, ou méthode non correspondante | Vérifiez l'ID ; si le chemin est correct, vérifiez ensuite la méthode HTTP |
429 | Requêtes trop fréquentes | Réessayez après un backoff, sans nouvelles tentatives concurrentes |
500 | Erreur interne de la plateforme | Enregistrez l'identifiant de requête puis réessayez ; si l'échec persiste, contactez le support |
502 | Échec du traitement de la ressource ou anomalie d'un service dépendant | Réessayez plus tard ; si l'échec persiste, contactez le support |
404 a trois causes possibles ; ne l'assimilez pas systématiquement à une « erreur d'ID »
C'est le point le plus fréquemment mal interprété lors du diagnostic :
| Situation | Comportement observé |
|---|---|
| La ressource n'existe pas / n'appartient pas au compte actuel | GET /api/v1/materials/assets/<不存在> → 404 |
Envoi d'un GET vers un chemin qui ne prend en charge que POST | GET /v1/chat/completions → 404 ; GET /v1/images/generations → 404 |
| Chemin mal orthographié | 404 |
Lorsque vous recevez un 404, vérifiez d'abord si le chemin et la méthode correspondent, avant de suspecter l'ID.
Une tâche vidéo introuvable renvoie 400, et non 404
Ce point est incohérent avec les autres interfaces et mérite une attention particulière :
| Requête | Statut observé | Corps de réponse |
|---|---|---|
GET /v1/video/generations/<不存在> | 400 | {"code":"task_not_exist","message":"task_not_exist","data":null} |
GET /v1/videos/<不存在> | 400 | Idem |
GET /api/v1/materials/assets/<不存在> | 404 | {"code":404,"data":null,"msg":"素材不存在或无权访问"} |
La consultation d'une tâche vidéo renvoie 400 + une structure racine {code, message, data} ; ce n'est ni 404, ni la structure d'objet error décrite ci-dessous.
Il existe trois structures de réponse d'erreur
1. Interfaces de génération de modèle / image / vidéo —— objet error
En cas d'échec, l'interface renvoie un code HTTP non 2xx avec un objet error :
{
"error": {
"code": "invalid_parameter",
"message": "请求参数不符合所选模型要求",
"type": "invalid_request_error",
"param": "size"
}
}| Champ | Description |
|---|---|
code | Code d'erreur, peut être une chaîne vide (voir ci-dessous) |
message | Raison lisible, contient généralement un request id |
type | Identifiant du type d'erreur. Lors des tests, l'échec d'authentification, le modèle inexistant et le corps de requête invalide renvoient tous new_api_error |
param | Présent uniquement pour les erreurs de paramètre, indique le champ concerné |
codepeut être une chaîne vide. Testé : en cas d'échec d'authentification et lorsque le JSON du corps de requête ne peut pas être analysé,codevaut"". Ne déterminez pas « s'il y a une erreur » en fonction du fait quecodeest vide ; basez-vous sur le code de statut HTTP et lisezmessageen priorité.
typen'est pas un champ de classification stable. Pour classifier, lisezcodeet ne vous fiez pas à la valeur detype.
2. Interfaces de la bibliothèque de ressources —— code racine
Renvoie un code HTTP non 2xx, où code correspond au statut HTTP :
{ "code": 404, "data": null, "msg": "素材不存在或无权访问" }3. Consultation de tâche vidéo —— chaîne code racine
{ "code": "task_not_exist", "message": "task_not_exist", "data": null }Notez qu'ici code est la chaîne task_not_exist, et non un nombre.
request id : l'identifiant clé pour le diagnostic
La plateforme écrit le request id directement dans error.message ; il n'est pas nécessaire de le chercher dans les en-têtes :
"message": "Invalid token (request id: 202609221135501066578648268d9d6uXuM5QgH)"Extraction en une commande :
curl -s "$LOCOPAL_BASE_URL/v1/models" \
-H "Authorization: Bearer sk-invalid" \
| grep -oE 'request id: [A-Za-z0-9]+'Joindre ce request id à votre ticket permet de réduire considérablement le temps de localisation.
Échec d'authentification
Lorsque la clé API est absente, incorrecte ou expirée, toutes les interfaces renvoient HTTP 401 et :
{
"error": {
"code": "",
"message": "Invalid token (request id: ...)",
"type": "new_api_error"
}
}Notez que code est une chaîne vide : c'est précisément pourquoi il est rappelé ci-dessus de « ne pas se fier à code ».
Erreurs de modèles et de génération
| Code d'erreur / Message | Cause | Traitement |
|---|---|---|
Model name not specified | Le corps de requête ne contient pas le champ model | Ajoutez l'ID de modèle renvoyé par /v1/models |
model_not_found | L'ID de modèle n'existe pas, ou la clé / le groupe actuel n'a pas accès à ce modèle | Interrogez à nouveau /v1/models et utilisez l'id renvoyé |
No available channel | Le groupe actuel n'a aucun canal disponible | Changez pour un modèle similaire ou contactez le support de la plateforme |
invalid_parameter | La combinaison de paramètres n'est pas prise en charge par le modèle actuel | Ajustez la taille, le ratio, la durée, etc., selon le champ param |
unknown_parameter | Le modèle / canal actuel ne reconnaît pas le champ de requête (par exemple response_format de l'interface image) | Supprimez le champ non pris en charge indiqué par param et utilisez le comportement par défaut du modèle |
InvalidParameter / upstream_error | Le modèle amont refuse le paramètre (par exemple, le nombre minimum de pixels de l'image n'est pas atteint) | Lisez message et ajustez la taille ou les paramètres |
credit_balance_exhausted / insufficient_quota | Le canal amont actuel n'a pas de solde disponible | Passez à un modèle / canal similaire, ou contactez le support de la plateforme pour recharger le solde du canal |
ResourceDownloadFailed | L'adresse de l'image / vidéo de référence ne peut pas être téléchargée directement | Utilisez une adresse HTTPS accessible publiquement, ou une référence asset:// de la bibliothèque de ressources |
task_not_exist | L'ID de tâche interrogé n'existe pas ou n'appartient pas au compte actuel | Vérifiez l'ID de tâche et le compte utilisé lors de sa création |
video_generation_failed | La tâche vidéo a été acceptée, mais la soumission à l'amont, le traitement de la ressource, la revue ou la génération a finalement échoué | Lisez error.message dans la même réponse ; conservez l'ID de tâche et, après avoir corrigé la ressource ou les paramètres, laissez l'utilisateur soumettre à nouveau volontairement |
| Le modèle actuel ne prend pas en charge la bibliothèque de ressources de portrait | Une ressource de portrait a été soumise à un modèle qui n'a pas cette capacité | Utilisez un modèle prenant en charge la bibliothèque de ressources de portrait ; ne contournez pas le problème en utilisant une URL d'image ordinaire |
insufficient_user_quota | Le solde du compte ou le quota de la clé API actuelle ne suffit pas à couvrir la consommation estimée | Rechargez ou ajustez les paramètres selon « nécessaires pour cette fois / disponibles actuellement » indiqué dans l'erreur, puis réessayez ; aucune tâche n'est créée dans ce cas |
缺少提示词:请在 prompt 或 content 的 text 元素中提供文本描述 | La tâche vidéo n'a pas de description textuelle | Ajoutez prompt ou un élément text dans content |
content[0].role 不支持 ... | Le rôle de la ressource de référence ne figure pas dans la liste autorisée | Utilisez reference_image, first_frame, last_frame, reference_video ou reference_audio |
素材库中找不到素材 ... | La ressource asset:// n'existe pas ou n'appartient pas au compte actuel | Soumettez d'abord la ressource et attendez qu'elle soit disponible, ou vérifiez le compte |
task_concurrency_exceeded | Le nombre de tâches de génération traitées simultanément par le compte ou la plateforme a atteint la limite de concurrence (HTTP 429) | Selon « actuellement N / limite M » indiqué dans le message, attendez la fin des tâches existantes avant de soumettre ; ne réessayez pas en continu |
Erreurs de la bibliothèque de ressources
| HTTP | Message | Cause | Traitement |
|---|---|---|---|
400 | 请求体必须是 JSON 对象 | Le corps de requête n'est pas un JSON valide | Corrigez le corps de la requête |
400 | type 只能是 virtual 或 real | Valeur de type invalide | Corrigez type |
400 | 素材分组名称不能为空 / 不能超过 64 个字符 | Nom manquant ou trop long | Corrigez le nom |
400 | 素材分组说明不能超过 300 个字符 | Description trop longue | Raccourcissez la description |
400 | 缺少 group_id | Aucun groupe fourni lors de la soumission de la ressource | Ajoutez group_id |
400 | image_url 必须是可公开下载的 http(s) 地址… | L'adresse n'est pas en http(s) ou est incomplète | Utilisez une adresse http(s) publique, ou data_url |
400 | image_url 与 data_url 只能提交一个 | Les deux sont soumis, ou aucun ne l'est | Ne conservez qu'un seul champ |
400 | data_url 必须是 data:image/...;base64,... 格式 / 图片数据无效或超过 20MB | Format des données téléversées invalide ou taille excessive | Corrigez les données ou utilisez image_url |
404 | 素材不存在或无权访问 | ID de ressource incorrect, supprimé ou n'appartenant pas au compte actuel | Utilisez l'asset_id renvoyé lors de la soumission de la ressource |
404 | 素材分组不存在或无权访问 / 素材分组不存在或不属于当前账号 | ID de groupe incorrect ou n'appartenant pas au compte actuel | Utilisez un ID de groupe appartenant à votre propre compte |
404 | 素材分组不存在或不是虚拟素材分组 | Soumission d'une image à un groupe real | Les images ne peuvent être soumises qu'à un groupe virtual |
429 | Requêtes trop fréquentes | Interrogation trop rapide ou concurrence trop élevée | Réessayez après un backoff, comme indiqué |
500 / 502 / 503 | 素材服务暂不可用 | Le service de ressources est en anomalie ou la fonctionnalité n'est pas activée | Conservez les informations de la requête puis réessayez ; si l'échec persiste, contactez le support |
Une revue de ressource non terminée n'est pas une erreur : la requête renvoie 200 avec status à Processing ; continuez simplement à interroger le même ID de ressource.
Une sortie vide d'un modèle de raisonnement n'est pas non plus une erreur HTTP : si la réponse est 200, que finish_reason vaut length et que usage.completion_tokens_details.reasoning_tokens a atteint la limite de sortie, augmentez le quota de sortie ou utilisez un modèle non raisonneur.
Erreurs d'autorisation de portrait
| Message | Cause | Traitement |
|---|---|---|
| La session d'autorisation n'existe pas ou l'accès est refusé | Session expirée, déjà utilisée ou appartenant à un autre utilisateur | L'utilisateur actuel doit recréer un code QR |
| L'autorisation n'est pas encore terminée | L'utilisateur n'a pas encore terminé la capture sur mobile | Conservez le code QR et résolvez-le une fois l'opération terminée |
| Cette ressource de portrait est déjà liée à un autre utilisateur | Un même groupe de portrait ne peut pas être réutilisé entre comptes | Utilisez le compte lié d'origine, ou demandez à la personne de réautoriser |
| Le service de ressources est temporairement indisponible | Le canal d'autorisation est actuellement indisponible | Notez l'heure de la requête puis contactez le support de la plateforme ; ne remplacez pas la capture de portrait par un téléversement d'image ordinaire |
Limitation de débit et nouvelles tentatives
429indique des requêtes trop fréquentes ; réessayez après un backoff comme indiqué, sans nouvelles tentatives concurrentes ;- pour le statut des ressources, interrogez toutes les 5 à 10 secondes ; pour les tâches vidéo, toutes les 5 à 15 secondes ;
- ne réessayez que pour
429et les5xxpassagers ; pour400/401/403/404, corrigez directement la requête ; - avant de réessayer, interrogez d'abord par ID de tâche / ID de ressource pour éviter les créations et facturations en double.
Vérification rapide
Authorizationest-il bienBearer <API Key>, et la clé est-elle toujours activée ;- le domaine de la requête est-il bien l'adresse actuellement indiquée par la console (par défaut
https://locopalai.com; pour les modèles internationaux, il peut s'agir dehttps://us-api.locopalai.com) ; modelprovient-il bien dedata[].idretourné par/v1/models;- le
statusde la ressource est-il déjàActive; - l'adresse de l'image / vidéo de référence est-elle une adresse
http(s)directement accessible depuis l'internet public, sans dépendre de Cookie ni de Referer ; - la même tâche / ressource a-t-elle déjà été soumise en double.
Éléments à joindre lors du contact avec le support
- l'heure de la requête et le chemin de l'interface ;
- le code de statut HTTP et le corps de réponse complet (clé API masquée) ;
- l'identifiant de requête, l'ID de tâche ou l'ID de ressource renvoyé par la plateforme ;
- l'ID de modèle et les paramètres concernés ;
- un exemple de requête minimal reproductible.
