> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Exécuter le template de votre équipe

> **Note**
>
> **Guide pratique** · Suppose que vous avez terminé le [guide de démarrage rapide des templates](/docs/fr/eleven-api/guides/cookbooks/templates).

Ce guide explique comment exécuter un template conçu par votre équipe : copier son code, transmettre chaque type d'entrée, choisir les webhooks qui recevront le résultat, figer une version et lire les sorties.

## Avant de commencer

* Le template est partagé avec votre Workspace. Son auteur définit ce paramètre sous **Workspace** dans les options de partage du template ; un template partagé en mode **Just me** ne peut être exécuté que par son auteur.
* Votre Workspace dispose d'un webhook abonné aux exécutions de templates. La section [Avant de commencer](/docs/fr/eleven-api/guides/how-to/image-and-video/webhooks#before-you-begin) du guide sur les webhooks Image & Vidéo explique comment en configurer un.
* Votre Workspace dispose d'un forfait Pro ou supérieur, et votre clé API possède l'autorisation **Image & Vidéo**.

## Copier le code du template

Ouvrez le template dans l'application ElevenLabs et sélectionnez son onglet **API**. Dans Flows, l'auteur du template peut ouvrir le même code à partir du bouton **API** dans la barre latérale du template.

L'onglet génère ses extraits à partir des entrées et sorties publiées du template. Sous **Choisir comment obtenir le résultat**, sélectionnez **Webhook**, puis sélectionnez **Python** ou **TypeScript** au-dessus du code. L'onglet affiche un extrait **Démarrer une exécution** et un extrait **Gérer le résultat**. Copiez **Démarrer une exécution** à l'endroit où votre application démarre les exécutions, et **Gérer le résultat** dans votre gestionnaire de webhook. Chaque espace réservé dans **Démarrer une exécution** correspond à une entrée, et **Gérer le résultat** lit chaque sortie à l'aide de son id.

> **Note**
>
> L'onglet avertit lorsque le template utilise un modèle que l'API ne propose pas. Si aucune version publiée ne peut
> être exécutée via l'API, aucun extrait n'est affiché ; si seule la dernière version ne le peut pas, les extraits exécutent la
> version la plus récente compatible. Dans Flows, l'auteur sélectionne **Afficher sur le canevas** dans l'avertissement pour
> mettre ces nœuds en évidence, remplace chacun par un [modèle disponible](/docs/fr/eleven-api/guides/cookbooks/image-and-video#available-models), puis publie à nouveau.

## Transmettre chaque entrée

Chaque entrée de la version exécutée doit recevoir une valeur, identifiée par l'id de l'entrée. Le format de la valeur dépend du type d'entrée :

| Type d'entrée                  | Valeur                                                                                    |
| ------------------------------ | ----------------------------------------------------------------------------------------- |
| `string`                       | Le texte lui-même.                                                                        |
| `number`, `integer`, `boolean` | Une valeur JSON de ce type.                                                               |
| `image`, `video`, `audio`      | Une référence à une ressource importée, une génération précédente ou des données base64.  |
| `voice`                        | Une référence à une voix dans votre Workspace.                                            |
| `array`                        | Une liste avec une valeur par élément, chacune au format attendu pour son type d'élément. |

Les entrées de type `object` ne peuvent pas encore être transmises via l'API ; l'onglet API en avertit.

```python
run = client.flows.templates.runs.create(
    template_id="Yz4DETxRv4uXyIo5PnEy",
    version_id="Kqs4nRrpndEjQ54BhbwE",
    inputs={
        "headline": "Autumn collection, 20% off",
        "duration_secs": 8,
        "product_photo": TemplateInputReference_Asset(asset_id="Rk3pQm8vTzL1yWcN0bJd"),
        "previous_shot": TemplateInputReference_Generation(generation_id="JWr5N6X9ZTqf8jD2LmQb"),
        "phone_photo": TemplateInputReference_InlineBase64(
            content_base_64=photo,
            mime_type="image/jpeg",
        ),
        "narrator": TemplateInputReference_Voice(voice_id="JBFqnCBsd6RMkjVDRZzb"),
    },
    webhook=WebhookTarget_All(),
)
```

```typescript
const run = await client.flows.templates.runs.create("Yz4DETxRv4uXyIo5PnEy", {
  versionId: "Kqs4nRrpndEjQ54BhbwE",
  inputs: {
    headline: "Autumn collection, 20% off",
    duration_secs: 8,
    product_photo: { type: "asset", assetId: "Rk3pQm8vTzL1yWcN0bJd" },
    previous_shot: { type: "generation", generationId: "JWr5N6X9ZTqf8jD2LmQb" },
    phone_photo: {
      type: "inline_base64",
      contentBase64: photo.toString("base64"),
      mimeType: "image/jpeg",
    },
    narrator: { type: "voice", voiceId: "JBFqnCBsd6RMkjVDRZzb" },
  },
  webhook: { type: "all" },
});
```

Les id d'entrée conservent l'orthographe donnée par le template dans les deux SDK ; seuls les champs d'une référence, tels que `assetId`, utilisent la notation camelCase en TypeScript.

Les données base64 sont limitées à 25 Mo une fois décodées et ne sont pas conservées après l'exécution. Pour transmettre le même fichier à de nombreuses exécutions, importez-le une fois et transmettez son id de ressource, comme expliqué dans [Références et ressources](/docs/fr/eleven-api/guides/how-to/image-and-video/references).

## Obtenir le résultat

Un [webhook](/docs/fr/eleven-api/resources/webhooks) reçoit l'exécution terminée en tant qu'événement `flows_template_run`. Les extraits **Webhook** de l'onglet API transmettent `{"type": "all"}`, ce qui envoie l'exécution terminée à chaque webhook du Workspace abonné aux exécutions de templates. Pour l'envoyer à des webhooks spécifiques, indiquez leurs ID :

```python
webhook=WebhookTarget_Ids(ids=["Q8mVr2LpXcT4nB6yJdKw"])
```

```typescript
webhook: { type: "ids", ids: ["Q8mVr2LpXcT4nB6yJdKw"] }
```

Chaque webhook indiqué doit être abonné aux exécutions de templates. Une exécution qui demande un webhook lorsqu'aucun n'est abonné est rejetée : une exécution ne se termine donc jamais sans destination pour transmettre son résultat.

Pour un script ponctuel ou une tâche par lots, `create_and_wait`, utilisé dans le [guide de démarrage rapide des templates](/docs/fr/eleven-api/guides/cookbooks/templates), attend plutôt la fin de l'exécution.

## Figer une version

Les extraits transmettent le `version_id` de la version publiée la plus récente que l'API peut exécuter. Conservez-le figé : lorsque l'auteur publie à nouveau, une exécution figée continue d'utiliser la version que vous avez testée, tandis que `latest` bascule vers la nouvelle, qui peut renommer ou ajouter des entrées.

Pour passer à une nouvelle version, ouvrez à nouveau l'onglet API, comparez ses entrées avec celles transmises par votre code et mettez à jour `version_id`. Pour le vérifier depuis le code, `flows.templates.get` renvoie les versions publiées du template que l'API peut exécuter, de la plus récente à la plus ancienne, avec leurs entrées et sorties.

## Lire les sorties

Le champ `outputs` de l'exécution terminée contient une entrée par sortie du template, identifiée par l'id de la sortie. Chaque sortie possède son propre `status`, de sorte qu'une sortie peut échouer alors que les autres aboutissent. Une sortie ayant échoué contient `failure_reason` et `error_message`. Une sortie média terminée contient `content_url` et `content_mime_type`, tandis qu'une sortie `string` terminée contient `content`.

```python
run = TemplateRunResponse.model_validate(event["data"])

for output_id, output in run.outputs.items():
    if output.status == "failed":
        print(output_id, "failed:", output.failure_reason, output.error_message)
    elif output.type == "image" or output.type == "video" or output.type == "audio":
        print(output_id, output.content_url, output.content_mime_type)
    elif output.type == "string":
        print(output_id, output.content)
```

```typescript
const run = event.data;

for (const [outputId, output] of Object.entries(run.outputs)) {
  if (output.status === "failed") {
    console.error(outputId, "failed:", output.failure_reason, output.error_message);
  } else if (output.type === "image" || output.type === "video" || output.type === "audio") {
    console.log(outputId, output.content_url, output.content_mime_type);
  } else if (output.type === "string") {
    console.log(outputId, output.content);
  }
}
```

`constructEvent` dans le SDK TypeScript renvoie le JSON de l'événement tel qu'il a été envoyé, ses champs sont donc en snake_case.

Consultez [Comportement de livraison](/docs/fr/eleven-api/guides/how-to/image-and-video/webhooks#delivery-behavior) pour en savoir plus sur les nouvelles tentatives et les événements dupliqués.