Skip to main content
Lors de la soumission de tâches de génération asynchrones telles que vidéo / image / audio, vous pouvez indiquer une URL de rappel. Une fois la tâche terminée (réussie ou échouée), nous enverrons activement le résultat par POST à votre URL, pour vous éviter d’interroger en continu. Pour les tâches de génération vidéo et image, language permet également de choisir la langue du message d’échec.

Démarrage rapide

Lors de la soumission d’une tâche, ajoutez webhook au niveau supérieur du corps de la requête. Pour traduire les messages d’échec, ajoutez également language :
Une fois la tâche terminée, nous enverrons une requête POST à votre URL + /callback.
Les autres points de terminaison de tâches asynchrones (vidéo, audio, etc.) utilisent webhook de la même manière. language s’applique actuellement à POST /v1/videos/generations et POST /v1/images/generations ; les deux champs doivent se trouver au niveau supérieur du corps de la requête.

Choisir la langue du message d’erreur

language est un paramètre de chaîne facultatif qui affecte uniquement error.message dans les rappels d’échec. L’ID de la tâche, le statut, la progression, le coût et les URL de résultat ne changent pas selon la langue. Si ce paramètre est omis, le message d’erreur d’origine du fournisseur en amont ou de la plateforme est renvoyé.
  • Les valeurs ne sont pas sensibles à la casse et les espaces en début et fin sont automatiquement supprimés. Par exemple, "FR" et " fr " sont tous deux traités comme fr.
  • Utilisez les codes à deux lettres du tableau. Les balises régionales telles que zh-CN, en-US et pt-BR ne sont pas reconnues.
  • Une valeur non prise en charge ne fait pas échouer la soumission de la tâche ; le rappel conserve le message d’erreur d’origine.
  • Si le message d’origine est déjà dans la langue cible, il est renvoyé tel quel sans nouvelle traduction.
  • Si la traduction échoue, le message d’origine est renvoyé sans retarder ni abandonner le rappel.
Lors de l’interrogation, utilisez le paramètre de requête language du point de terminaison de statut pour choisir la même langue du message d’erreur. Un Webhook n’a pas de chaîne de requête : language doit donc être spécifié lors de la soumission de la tâche.
POST /mj/submit/* et POST /v1/images/edits ne prennent pas en charge webhook / language. Les modèles d’image xAI officiels ne prennent pas en charge language et renvoient 400 parameter "language" is not supported si ce paramètre est inclus. Ne transmettez pas ce paramètre à ces modèles.

Règles d’URL

Le webhook que vous fournissez est l’URL de base, à laquelle nous ajoutons automatiquement /callback : Votre serveur doit donc disposer d’un point de terminaison acceptant POST .../callback.

Ce que vous allez recevoir

Le contenu envoyé est exactement identique à ce que renvoie le point de terminaison « Obtenir le statut d’une tâche » : vous pouvez le traiter avec la même logique d’analyse.
Pour les tâches vidéo, le résultat se trouve dans result.videos, et pour l’audio dans result.audios.
L’exemple d’échec ci-dessus utilise "language": "fr". Le paramètre de langue modifie uniquement error.message ; tous les autres champs restent identiques.
Nous n’envoyons que lorsqu’une tâche atteint un état terminal (completed / failed) ; nous n’envoyons pas pendant le traitement.

Nouvelles tentatives et déduplication (important)

  • Nouvelles tentatives : Si votre serveur ne renvoie pas 2xx en environ 10 secondes, ou renvoie 5xx, nous réessaierons automatiquement, jusqu’à 3 fois, à des intervalles d’environ 10 s, 30 s et 60 s. Si les 3 échouent, nous abandonnons (en environ 2 minutes).
  • Pas de nouvelle tentative : Si votre point de terminaison renvoie 4xx (considéré comme une URL / requête incorrecte), nous abandonnons immédiatement sans réessayer.
  • Déduplication : Normalement, une tâche n’est envoyée qu’une seule fois. Mais dans des cas extrêmes (p. ex. un redémarrage de notre côté après l’envoi mais avant la confirmation), vous pourriez recevoir des envois en double. Veillez à dédupliquer de manière idempotente par id (task_id) pour éviter un double traitement.
Recommandations pour votre point de terminaison de réception :
1

Renvoyez 2xx le plus tôt possible

Acceptez et mettez en file d’attente d’abord, puis traitez de manière asynchrone : ne nous faites pas attendre la fin de votre traitement.
2

Dédupliquez par id

Utilisez id (task_id) comme clé d’idempotence pour éviter un double traitement.
3

Configurez et vérifiez la signature

En production, vérifiez l’origine des requêtes de rappel et rejetez les requêtes falsifiées.

Exigences pour l’URL de rappel

Pour des raisons de sécurité, l’URL de rappel doit respecter les conditions suivantes : Les URL qui ne respectent pas ces exigences sont rejetées (aucun envoi, aucune nouvelle tentative).

FAQ

Vérifiez point par point :
  1. La tâche est-elle réellement terminée ? Consultez les détails de la tâche : status est-il completed / failed (aucun envoi pendant le traitement) ?
  2. Votre URL est-elle accessible publiquement ? Pouvons-nous atteindre votre /callback ?
  3. Le port est-il un port standard (80 / 443) ? Les ports non standard peuvent être bloqués par les politiques de sécurité.
  4. Votre /callback a-t-il renvoyé 2xx à temps ? En cas de 4xx, nous abandonnons immédiatement.
  5. Utilisez-vous https ? Le certificat est-il valide ?
Certains modèles produisent plusieurs images à la fois, donc images[].url peut être un tableau : traitez-le simplement comme un tableau.
Si result contient expires_at (horodatage Unix), cela indique l’heure d’expiration du lien : transférez-le/sauvegardez-le rapidement.
Non. Nous n’envoyons qu’une seule fois, lorsque la tâche réussit ou échoue définitivement.

Exemple minimal de récepteur

Python
Renvoyez 200 le plus tôt possible et exécutez votre logique de traitement de manière asynchrone en arrière-plan.