Aller au contenu principal
LocoPal AiLocoPal Ai
Intégration APIModèles et interfaces de générationInterface de génération vidéo

Guide

Interroger une tâche vidéo

Consultation de la progression et du résultat d'une tâche, gestion des statuts, échec de lecture des ressources de référence et facturation

Voir le Markdown

Interroger une tâche vidéo

Après avoir créé une tâche, utilisez l'id de la réponse de création pour consulter sa progression et son résultat ; pour la création, voir Créer une tâche vidéo.

Consultation du statut : GET /v1/video/generations/{task_id}

Téléchargement de la vidéo finale : GET /v1/videos/{task_id}/content

Une fois la tâche terminée, l'interface de consultation renvoie l'adresse de la vidéo dans metadata.url. La plateforme privilégie l'adresse vidéo d'origine en amont et ne se rabat sur une adresse d'artefact de la plateforme avec capacité access que si l'amont ne fournit aucune adresse utilisable. L'adresse d'origine en amont peut comporter une signature et une date d'expiration ; elle peut être ouverte directement dans un navigateur ou un lecteur ; les adresses d'artefacts de la plateforme fonctionnent également. Vous pouvez aussi appeler /v1/videos/{task_id}/content avec la clé API pour télécharger le fichier vidéo.

Méthode d'authentification

Authorization: Bearer <API_KEY>.

Paramètres de requête · path

ParamètreTypeObligatoireDescription
task_idstringOuiL'id de la réponse de création

Exemple de requête

curl "$LOCOPAL_API_ORIGIN/v1/video/generations/$LOCOPAL_TASK_ID" \
  -H "Authorization: Bearer $LOCOPAL_API_KEY"

Télécharger la vidéo

Une fois le statut de la tâche passé à completed, utilisez directement le metadata.url de la réponse de consultation :

curl -L "$LOCOPAL_API_ORIGIN/v1/videos/$LOCOPAL_TASK_ID/content" \
  -H "Authorization: Bearer $LOCOPAL_API_KEY" \
  -o "$LOCOPAL_TASK_ID.mp4"

Paramètres de réponse

ParamètreTypeDescription
idstringID de tâche public
task_idstringChamp de compatibilité identique à id
objectstringFixe, vaut video
modelstringID du modèle vidéo
statusstringqueued, in_progress, completed, failed ou unknown
progressintegerProgression actuelle, de 0 à 100
created_atintegerHeure de création (secondes Unix)
completed_atintegerHeure d'achèvement ; non renvoyée tant que la tâche n'est pas terminée
metadata.urlstringAdresse de la vidéo, renvoyée en cas de succès ; prioritairement l'adresse d'origine en amont, ou à défaut une adresse d'artefact de la plateforme
metadata.upstream_createdbooleanIndique si la tâche a été créée en amont
duration_secsintegerDurée de la vidéo (secondes), fournie si l'amont la renvoie
expires_atintegerDate d'expiration de l'URL amont (secondes Unix), fournie uniquement si l'amont la renvoie explicitement
framespersecondintegerFréquence d'images de la vidéo, fournie si l'amont la renvoie
generate_audiobooleanIndique si un son synchronisé a été généré ; fourni si l'amont le renvoie
ratiostringRatio de sortie, fourni si l'amont le renvoie
resolutionstringRésolution de sortie, fournie si l'amont la renvoie
seedintegerGraine aléatoire, fournie si l'amont la renvoie
output_formatstringFormat de sortie, par exemple mp4, fourni si l'amont le renvoie
execution_expires_afterintegerDurée de conservation du résultat de la tâche, fournie si l'amont la renvoie
usageobjectUsage et coût réels après règlement de la tâche ; non renvoyé tant que la tâche n'est pas réglée (en file d'attente, en génération ou tout juste acceptée à la création)
usage.prompt_tokensintegerNombre de tokens vidéo facturés pour cette tâche (identique au nombre de gauche dans la colonne « Tokens » de la facture)
usage.completion_tokensintegerLes tâches vidéo/image ne déclarent pas de tokens de sortie séparément ; fixe, vaut 0
usage.total_tokensintegerUsage total, égal à usage.prompt_tokens
usage.quotaintegerCrédits réellement consommés par cette tâche
usage.amountnumberMontant de cette tâche (CNY), converti depuis usage.quota selon la méthode de règlement de la plateforme, avec 6 décimales ; la facture de la console affiche le même frais avec 4 décimales
usage.currencystringDevise du montant, fixe, vaut CNY
error.codestringCode d'erreur d'échec, renvoyé uniquement en cas d'échec. Un échec final d'une tâche vidéo de la plateforme vaut généralement video_generation_failed ; une erreur amont non normalisable peut conserver le code d'erreur amont
error.messagestringRaison de l'échec, renvoyée uniquement en cas d'échec. La plateforme retire d'abord les multiples couches d'encapsulation JSON et HTML de passerelle, puis renvoie un texte lisible directement affichable ; le client ne doit pas tenter d'analyser ce texte comme du JSON

Corps de réponse

En cours d'exécution :

{
  "id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "task_id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "object": "video",
  "model": "doubao-seedance-2.0-A",
  "status": "in_progress",
  "progress": 50,
  "created_at": 1787299277
}

Génération réussie :

{
  "id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "task_id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "object": "video",
  "model": "doubao-seedance-2.0-A",
  "status": "completed",
  "progress": 100,
  "created_at": 1787299277,
  "completed_at": 1787299581,
  "duration_secs": 5,
  "expires_at": 1790578352,
  "framespersecond": 24,
  "generate_audio": true,
  "ratio": "9:16",
  "resolution": "480p",
  "seed": 20260409,
  "output_format": "mp4",
  "execution_expires_after": 172800,
  "metadata": {
    "url": "https://upstream.example.com/task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO.mp4?signature=...",
    "upstream_created": true
  },
  "usage": {
    "prompt_tokens": 141034,
    "completion_tokens": 0,
    "total_tokens": 141034,
    "quota": 2789652,
    "amount": 5.579304,
    "currency": "CNY"
  }
}

usage n'est renvoyé qu'après le règlement de la tâche, et ses valeurs correspondent exactement au débit de cette tâche sur la facture : usage.quota est le nombre de crédits consommés, usage.amount est le montant en CNY converti depuis ces crédits selon le taux du site actuel, et usage.total_tokens est le nombre de tokens vidéo facturés. Tant que la tâche est en file d'attente ou en génération, usage n'est pas renvoyé ; ne déduisez pas les frais de la réponse de consultation. Pour vérifier le débit, comparez usage.quota et usage.amount dans la facture de la console avec le même id.

metadata.url peut être une adresse amont signée ou une adresse fournie en repli par l'interface d'artefacts de la plateforme. Traitez-la comme un identifiant sensible et ne la partagez pas publiquement. Une fois la vidéo générée, il est recommandé de la télécharger ou de la copier dans votre propre stockage objet avant expires_at.

Artefacts vidéo et aperçu

Outre la lecture directe de metadata.url, vous pouvez aussi consulter la liste des artefacts de la plateforme :

curl "$LOCOPAL_API_ORIGIN/v1/tasks/$LOCOPAL_TASK_ID/artifacts" \
  -H "Authorization: Bearer $LOCOPAL_API_KEY"

Une fois la tâche terminée, renvoie :

{
  "task_id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "artifacts": [
    {
      "key": "video",
      "type": "video",
      "content_url": "https://locopalai.com/v1/tasks/task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO/artifacts/video/content?access=..."
    }
  ]
}

L'adresse de contenu d'un artefact prend en charge les requêtes Range ; les lecteurs, l'aperçu dans le navigateur et les téléchargements reprenables peuvent l'utiliser directement. Si le client ne lit que metadata.url, continuez à utiliser la logique existante ; nul besoin de passer à l'interface d'artefacts.

Échec de la génération :

{
  "id": "task_NlersigX6rIqiOjCwTFlgNmGMTwqt39K",
  "object": "video",
  "model": "doubao-seedance-2.0-D",
  "status": "failed",
  "progress": 100,
  "created_at": 1789971935,
  "error": {
    "code": "video_generation_failed",
    "message": "音频素材缓冲失败: 音频地址必须是 http(s)"
  },
  "metadata": {
    "submission_stage": "submitting",
    "upstream_created": false
  }
}

error.message est le texte d'échec final mis en forme par la plateforme. Même si une tâche historique a initialement stocké un JSON imbriqué, la consultation renvoie du texte normalisé ; l'appelant peut afficher directement ce champ à l'utilisateur, sans recombiner ni analyser le JSON amont d'origine côté client.

Réponse d'erreur

Consulter un ID de tâche inexistant (ou une tâche n'appartenant pas au compte actuel) renvoie HTTP 400 :

{ "code": "task_not_exist", "message": "task_not_exist", "data": null }
HTTPRéponseTraitement
400{"code":"task_not_exist","message":"task_not_exist","data":null}Vérifiez l'ID de tâche et le compte utilisé lors de la création
401Invalid tokenClé API absente, incorrecte ou expirée
500Échec de la consultation de la tâcheEnregistrez l'ID de requête et continuez plus tard à consulter la tâche d'origine

Gestion des statuts

StatutTraitement côté client
queuedLa tâche est en file d'attente ; continuez à consulter le même ID de tâche
in_progressEn cours de génération ; mettez à jour la progression et le temps d'attente, sans créer de nouvelle tâche
completedLisez metadata.url, ou appelez /v1/videos/{task_id}/content pour télécharger la vidéo finale ; copiez-la rapidement
failedAffichez une fois error.code et error.message, et laissez l'utilisateur décider de soumettre à nouveau
unknownStatut temporairement indéterminable ; conservez l'ID de tâche et consultez plus tard

Le client ne doit pas se fier à un nombre fixe de secondes d'attente pour déterminer l'achèvement, ni recréer la tâche à cause d'un seul délai réseau dépassé ; il est recommandé d'interroger toutes les 5 à 15 secondes.

Échec de lecture des ressources de référence

Lorsque l'erreur pointe vers content[n].image_url, video_url ou contient resource download failed, localisez d'abord l'élément précis par son indice de tableau, puis vérifiez :

  1. l'URL peut-elle être GET directement depuis l'internet public et renvoyer 200 ;
  2. redirige-t-elle vers une page de connexion, ou dépend-elle de Cookie, de Referer ou d'une liste blanche d'IP ;
  3. le Content-Type correspond-il au format réel du fichier ;
  4. l'URL signée temporaire reste-t-elle valide pendant le téléchargement et le traitement ;
  5. la ressource asset:// appartient-elle au compte actuel et est-elle à l'état Active ;
  6. le modèle actuel prend-il en charge ce type et ce nombre de ressources.

Après correction des ressources, recréez la tâche. Pour le message d'erreur, affichez une seule fois une raison lisible à l'utilisateur, sans recombiner ni exposer à plusieurs reprises du JSON échappé sur plusieurs niveaux.

Concurrence, nouvelles tentatives et facturation

  • différentes tâches vidéo peuvent être créées en concurrence ;
  • une même réponse de création doit être consultée avec le même ID de tâche ;
  • ne lancez une nouvelle requête de création que lorsque la tâche a échoué explicitement et que l'utilisateur réessaie volontairement ;
  • la facturation est détaillée selon le modèle, la résolution, la durée et les entrées de vidéo de référence ; fiez-vous à la place de marché des modèles et à la facture finale. Un échec de validation des paramètres (400) signifie que la requête n'a pas été acceptée et n'entraîne généralement pas de frais de tâche de génération.

Documentation associée

Que consulterPage à consulter
Limites de capacité et questions fréquentes sur les images multiples, les vidéos de référence et les vidéos profondesDescription des images multiples et des vidéos de référence
Flux complet, de l'import de la ressource à la soumission de la vidéoFlux d'intégration des ressources de portrait et des vidéos de référence
Groupes de ressources, statut des ressources, autorisation de portraitInterfaces de la bibliothèque de ressources
Mémento des codes d'erreurCodes d'erreur et diagnostic
Cette page vous a-t-elle aidé ?

Sur cette page