> 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.

# Créer une exécution de modèle

POST https://api.elevenlabs.io/v1/flows/templates/{template_id}/runs
Content-Type: application/json

Lancez une exécution d’un modèle de flux. Transmettez `version_id` pour figer un instantané, ou omettez-le / transmettez `latest` pour exécuter la dernière version publiée. Définissez les valeurs d’entrée sous `inputs`, indexées par l’ID du port d’entrée. La réponse correspond à l’exécution dans son état initial, chaque sortie étant déjà répertoriée sous son ID de port dans `outputs`. Incluez `webhook` pour recevoir un événement `flows_template_run` contenant l’exécution terminée lorsque son `status` est `completed` ou `failed` ; c’est la méthode d’attente recommandée. Sans webhook, récupérez `GET /v1/flows/templates/{template_id}/runs/{run_id}` à intervalles raisonnables jusqu’à ce que le `status` soit terminal.

Reference: https://elevenlabs.io/docs/api-reference/flows/templates/runs/create

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Path parameters

- `template_id` (string, required) — L’ID du modèle, tel qu’il apparaît dans l’application ElevenLabs ou via `GET /v1/flows/templates`.

### Body (application/json)

This endpoint expects a TemplateRunCreateRequest.

- `inputs` (map from string to TemplateRunInput, required) — Valeurs d’entrée indexées par ID de port d’entrée. Chaque port d’entrée de la version exécutée doit être fourni ; un ID manquant ou inconnu est rejeté. Transmettez `{}` pour un modèle sans entrées.
- `version_id` (string, optional, nullable) — L’instantané du modèle à exécuter. Fournissez un identifiant de version spécifique pour figer cet instantané, ou `latest`, la valeur par défaut s’il est omis, pour exécuter la version publiée la plus récente du modèle. Seules les versions publiées peuvent être figées, sauf par le propriétaire du modèle, qui peut également figer un instantané enregistré non publié pour le tester avant publication. Le brouillon actif n’est jamais exécuté via cette API.
- `webhook` (WebhookTarget, optional, nullable) — Incluez ce paramètre pour envoyer le résultat de l’exécution aux webhooks de flux configurés du Workspace lorsque le `status` de l’exécution atteint `completed` ou `failed`. Un événement est envoyé pour l’ensemble de l’exécution : les `data` de l’événement `flows_template_run` correspondent à la réponse finale de `GET /v1/flows/templates/{template_id}/runs/{run_id}`.

## Response

### 200

Réponse réussie

- `id` (string, required) — L’identifiant unique de l’exécution.
- `template_id` (string, required) — Le modèle exécuté par cette exécution, afin qu’un consommateur de webhook exécutant plusieurs modèles puisse distinguer leurs exécutions sans conserver de correspondance entre les exécutions et les modèles.
- `version_id` (string, required) — La version du modèle exécutée par cette exécution. Elle est déterminée lors de la création de l’exécution. Ainsi, une exécution lancée avec `latest` enregistre la version précise qu’elle a exécutée.
- `status` (enum, required) — L'état de l'exécution, agrégé à partir de ses sorties : `pending` jusqu'au démarrage d'une sortie, `generating` tant qu'une sortie n'est pas terminée, `completed` lorsque toutes les sorties sont terminées, et `failed` lorsque toutes les sorties sont terminées et qu'au moins une a échoué. `completed` et `failed` sont des états terminaux : le webhook `flows_template_run` est déclenché lorsque l'exécution atteint l'un de ces états.
  - Allowed values: `pending`, `generating`, `completed`, `failed`
- `outputs` (map from string to TemplateOutput, required) — Les sorties de l'exécution, indexées par l'ID du port de sortie. Chacune est un `TemplateOutput` discriminé selon `type`, le `type` du `content_schema` de son port.

## Errors

### 422 Unprocessable Entity Error

Erreur de validation

- `detail` (list of ValidationError, optional)

## Types

### TemplateRunInput

Une valeur liée à un port d’entrée de modèle, sous la forme requise par son `content_schema`. Un port `string` reçoit le texte lui-même ; les ports `number`, `integer` et `boolean` reçoivent une valeur JSON de ce type. Tout élément stocké ailleurs est une référence distinguée par `type` : une `generation` antérieure, un `asset` téléversé, une `voice` ou un média transmis avec `inline_base64`. Un port `array` reçoit un tableau JSON avec une valeur par élément, admissible pour les `items` du schéma. Les ports `object` ne peuvent pas encore être liés par cette API. Aucune contrainte autre que la structure de transmission ne s’applique ici : ce qu’un port accepte, par exemple un `enum` ou une longueur, est indiqué par son `content_schema`, et le chemin d’exécution valide par rapport à ce même schéma.

- string
- boolean
- integer
- double
- TemplateInputReference: TemplateInputReference
- list of TemplateRunInput

### WebhookTarget

- `type`: `all` (WebhookTargetAll)
- `type`: `ids` (WebhookTargetIds)
  - `ids` (list of string, required) — Les ID des webhooks de flux du Workspace auxquels envoyer le résultat. Chacun doit être l’un des webhooks de flux configurés du Workspace.

### TemplateOutput

Une sortie d’une exécution de modèle, distinguée selon `type`, le `type` du `content_schema` du port. Consultez `status` pour connaître son état dans son cycle de vie.

- `type`: `array` (TemplateArrayOutput)
  - `has_more` (boolean, required) — Indique si la liste contient des éléments au-delà de `content`.
  - `id` (string, required) — L’ID de la génération associée à cette sortie. Transmettez-le comme référence `generation` pour utiliser la sortie comme entrée ailleurs.
  - `status` (enum, required) — L’état du cycle de vie de la sortie. Il se termine par `completed`, lorsque les champs de contenu de la sortie sont définis, ou par `failed`, lorsque `failure_reason` et `error_message` sont définis.
    - Allowed values: `pending`, `generating`, `completed`, `failed`
  - `content` (list of TemplateOutput, optional, nullable) — Les premiers éléments de la liste, dans l’ordre, chacun respectant la structure des `items` du schéma. Présents uniquement lorsque `status` est `completed`. Lorsque `has_more` est true, il ne s’agit pas de la liste complète. Réservé : aucun modèle ne produit encore ce type de sortie ; il est publié afin que les modèles qui le font puissent être exécutés avec le même client.
  - `error_message` (string, optional, nullable) — Description de l’échec lisible par un humain. Présente uniquement lorsque `status` est `failed`. Les générations ayant échoué ne sont pas facturées.
  - `failure_reason` (enum, optional, nullable) — Catégorie de l’échec. Présente uniquement lorsque `status` est `failed`.
    - Allowed values: `timeout`, `model_error`, `moderated`, `invalid_parameters`, `dependency_failed`, `charging_failed`, `internal_error`
  - `next_cursor` (string, optional, nullable) — Transmettez comme `cursor` à un endpoint ultérieur pour récupérer les éléments suivant `content`. `null` lorsque `content` contient la liste entière ou avant la fin de la sortie. Réservé : aucun modèle ne produit encore ce type de sortie ; il est publié afin que les modèles qui le feront puissent être exécutés avec le même client.
- `type`: `audio` (TemplateAudioOutput)
  - `id` (string, required) — L’ID de la génération associée à cette sortie. Transmettez-le comme référence `generation` pour utiliser la sortie comme entrée ailleurs.
  - `status` (enum, required) — L’état du cycle de vie de la sortie. Il se termine par `completed`, lorsque les champs de contenu de la sortie sont définis, ou par `failed`, lorsque `failure_reason` et `error_message` sont définis.
    - Allowed values: `pending`, `generating`, `completed`, `failed`
  - `content_mime_type` (string, optional, nullable) — Le type MIME du média généré. Présent uniquement lorsque `status` est défini sur `completed`.
  - `content_url` (string, optional, nullable) — Une URL signée permettant de télécharger le média généré. Présente uniquement lorsque `status` est `completed`. Elle expire environ une heure après le renvoi de cette réponse ; récupérez à nouveau l'exécution pour obtenir une nouvelle URL.
  - `error_message` (string, optional, nullable) — Description de l’échec lisible par un humain. Présente uniquement lorsque `status` est `failed`. Les générations ayant échoué ne sont pas facturées.
  - `failure_reason` (enum, optional, nullable) — Catégorie de l’échec. Présente uniquement lorsque `status` est `failed`.
    - Allowed values: `timeout`, `model_error`, `moderated`, `invalid_parameters`, `dependency_failed`, `charging_failed`, `internal_error`
- `type`: `boolean` (TemplateBooleanOutput)
  - `id` (string, required) — L’ID de la génération associée à cette sortie. Transmettez-le comme référence `generation` pour utiliser la sortie comme entrée ailleurs.
  - `status` (enum, required) — L’état du cycle de vie de la sortie. Il se termine par `completed`, lorsque les champs de contenu de la sortie sont définis, ou par `failed`, lorsque `failure_reason` et `error_message` sont définis.
    - Allowed values: `pending`, `generating`, `completed`, `failed`
  - `content` (boolean, optional, nullable) — La valeur booléenne générée. Présente uniquement lorsque `status` est `completed`. Réservé : aucun modèle ne produit encore ce type de sortie ; il est publié afin que les modèles qui le font puissent être exécutés avec le même client.
  - `error_message` (string, optional, nullable) — Description de l’échec lisible par un humain. Présente uniquement lorsque `status` est `failed`. Les générations ayant échoué ne sont pas facturées.
  - `failure_reason` (enum, optional, nullable) — Catégorie de l’échec. Présente uniquement lorsque `status` est `failed`.
    - Allowed values: `timeout`, `model_error`, `moderated`, `invalid_parameters`, `dependency_failed`, `charging_failed`, `internal_error`
- `type`: `image` (TemplateImageOutput)
  - `id` (string, required) — L’ID de la génération associée à cette sortie. Transmettez-le comme référence `generation` pour utiliser la sortie comme entrée ailleurs.
  - `status` (enum, required) — L’état du cycle de vie de la sortie. Il se termine par `completed`, lorsque les champs de contenu de la sortie sont définis, ou par `failed`, lorsque `failure_reason` et `error_message` sont définis.
    - Allowed values: `pending`, `generating`, `completed`, `failed`
  - `content_mime_type` (string, optional, nullable) — Le type MIME du média généré. Présent uniquement lorsque `status` est défini sur `completed`.
  - `content_url` (string, optional, nullable) — Une URL signée permettant de télécharger le média généré. Présente uniquement lorsque `status` est `completed`. Elle expire environ une heure après le renvoi de cette réponse ; récupérez à nouveau l'exécution pour obtenir une nouvelle URL.
  - `error_message` (string, optional, nullable) — Description de l’échec lisible par un humain. Présente uniquement lorsque `status` est `failed`. Les générations ayant échoué ne sont pas facturées.
  - `failure_reason` (enum, optional, nullable) — Catégorie de l’échec. Présente uniquement lorsque `status` est `failed`.
    - Allowed values: `timeout`, `model_error`, `moderated`, `invalid_parameters`, `dependency_failed`, `charging_failed`, `internal_error`
- `type`: `integer` (TemplateIntegerOutput)
  - `id` (string, required) — L’ID de la génération associée à cette sortie. Transmettez-le comme référence `generation` pour utiliser la sortie comme entrée ailleurs.
  - `status` (enum, required) — L’état du cycle de vie de la sortie. Il se termine par `completed`, lorsque les champs de contenu de la sortie sont définis, ou par `failed`, lorsque `failure_reason` et `error_message` sont définis.
    - Allowed values: `pending`, `generating`, `completed`, `failed`
  - `content` (integer, optional, nullable) — L’entier généré. Présent uniquement lorsque `status` est `completed`. Réservé : aucun modèle ne produit encore ce type de sortie ; il est publié afin que les modèles qui le font puissent être exécutés avec le même client.
  - `error_message` (string, optional, nullable) — Description de l’échec lisible par un humain. Présente uniquement lorsque `status` est `failed`. Les générations ayant échoué ne sont pas facturées.
  - `failure_reason` (enum, optional, nullable) — Catégorie de l’échec. Présente uniquement lorsque `status` est `failed`.
    - Allowed values: `timeout`, `model_error`, `moderated`, `invalid_parameters`, `dependency_failed`, `charging_failed`, `internal_error`
- `type`: `number` (TemplateNumberOutput)
  - `id` (string, required) — L’ID de la génération associée à cette sortie. Transmettez-le comme référence `generation` pour utiliser la sortie comme entrée ailleurs.
  - `status` (enum, required) — L’état du cycle de vie de la sortie. Il se termine par `completed`, lorsque les champs de contenu de la sortie sont définis, ou par `failed`, lorsque `failure_reason` et `error_message` sont définis.
    - Allowed values: `pending`, `generating`, `completed`, `failed`
  - `content` (double, optional, nullable) — Le nombre généré. Présent uniquement lorsque `status` est `completed`. Réservé : aucun modèle ne produit encore ce type de sortie ; il est publié afin que les modèles qui le font puissent être exécutés avec le même client.
  - `error_message` (string, optional, nullable) — Description de l’échec lisible par un humain. Présente uniquement lorsque `status` est `failed`. Les générations ayant échoué ne sont pas facturées.
  - `failure_reason` (enum, optional, nullable) — Catégorie de l’échec. Présente uniquement lorsque `status` est `failed`.
    - Allowed values: `timeout`, `model_error`, `moderated`, `invalid_parameters`, `dependency_failed`, `charging_failed`, `internal_error`
- `type`: `object` (TemplateObjectOutput)
  - `id` (string, required) — L’ID de la génération associée à cette sortie. Transmettez-le comme référence `generation` pour utiliser la sortie comme entrée ailleurs.
  - `status` (enum, required) — L’état du cycle de vie de la sortie. Il se termine par `completed`, lorsque les champs de contenu de la sortie sont définis, ou par `failed`, lorsque `failure_reason` et `error_message` sont définis.
    - Allowed values: `pending`, `generating`, `completed`, `failed`
  - `content` (map from string to TemplateOutput, optional, nullable) — Une sortie par champ, indexée par nom de champ, chacune respectant la structure du schéma de ce champ. Présente uniquement lorsque `status` est `completed`. Réservé : aucun modèle ne produit encore ce type de sortie ; il est publié afin que les modèles qui le feront puissent être exécutés avec le même client.
  - `error_message` (string, optional, nullable) — Description de l’échec lisible par un humain. Présente uniquement lorsque `status` est `failed`. Les générations ayant échoué ne sont pas facturées.
  - `failure_reason` (enum, optional, nullable) — Catégorie de l’échec. Présente uniquement lorsque `status` est `failed`.
    - Allowed values: `timeout`, `model_error`, `moderated`, `invalid_parameters`, `dependency_failed`, `charging_failed`, `internal_error`
- `type`: `string` (TemplateStringOutput)
  - `id` (string, required) — L’ID de la génération associée à cette sortie. Transmettez-le comme référence `generation` pour utiliser la sortie comme entrée ailleurs.
  - `status` (enum, required) — L’état du cycle de vie de la sortie. Il se termine par `completed`, lorsque les champs de contenu de la sortie sont définis, ou par `failed`, lorsque `failure_reason` et `error_message` sont définis.
    - Allowed values: `pending`, `generating`, `completed`, `failed`
  - `content` (string, optional, nullable) — Le texte généré. Présent uniquement lorsque `status` est `completed`.
  - `error_message` (string, optional, nullable) — Description de l’échec lisible par un humain. Présente uniquement lorsque `status` est `failed`. Les générations ayant échoué ne sont pas facturées.
  - `failure_reason` (enum, optional, nullable) — Catégorie de l’échec. Présente uniquement lorsque `status` est `failed`.
    - Allowed values: `timeout`, `model_error`, `moderated`, `invalid_parameters`, `dependency_failed`, `charging_failed`, `internal_error`
- `type`: `video` (TemplateVideoOutput)
  - `id` (string, required) — L’ID de la génération associée à cette sortie. Transmettez-le comme référence `generation` pour utiliser la sortie comme entrée ailleurs.
  - `status` (enum, required) — L’état du cycle de vie de la sortie. Il se termine par `completed`, lorsque les champs de contenu de la sortie sont définis, ou par `failed`, lorsque `failure_reason` et `error_message` sont définis.
    - Allowed values: `pending`, `generating`, `completed`, `failed`
  - `content_mime_type` (string, optional, nullable) — Le type MIME du média généré. Présent uniquement lorsque `status` est défini sur `completed`.
  - `content_url` (string, optional, nullable) — Une URL signée permettant de télécharger le média généré. Présente uniquement lorsque `status` est `completed`. Elle expire environ une heure après le renvoi de cette réponse ; récupérez à nouveau l'exécution pour obtenir une nouvelle URL.
  - `error_message` (string, optional, nullable) — Description de l’échec lisible par un humain. Présente uniquement lorsque `status` est `failed`. Les générations ayant échoué ne sont pas facturées.
  - `failure_reason` (enum, optional, nullable) — Catégorie de l’échec. Présente uniquement lorsque `status` est `failed`.
    - Allowed values: `timeout`, `model_error`, `moderated`, `invalid_parameters`, `dependency_failed`, `charging_failed`, `internal_error`

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### TemplateInputReference

- `type`: `asset` (StaticAssetReference)
  - `asset_id` (string, required) — L’ID d’une ressource importée via l’API assets (`POST /v1/assets`), tel qu’il est renvoyé dans le `asset_id` de cette réponse.
- `type`: `generation` (GenerationReference)
  - `generation_id` (string, required) — L’ID de la génération dont utiliser la sortie, tel qu’il est renvoyé lors de la création de la génération.
- `type`: `inline_base64` (InlineBase64Reference)
  - `content_base64` (string, required) — Les octets du fichier multimédia, encodés en base64 (alphabet standard). Jusqu’à 25 Mo une fois décodés.
  - `mime_type` (enum, required) — Le type MIME du média encodé.
    - Allowed values: `image/jpeg`, `image/png`, `image/webp`, `image/heic`, `image/heif`, `audio/mpeg`, `audio/wav`, `video/mp4`, `video/quicktime`, `video/webm`
- `type`: `voice` (VoiceReference)
  - `voice_id` (string, required) — L’ID d’une voix dans ce Workspace.

### ValidationErrorLocItems

- string
- integer

## Examples

**Request**

```json
{
  "inputs": {
    "prompt": "a corgi on a surfboard",
    "reference": {
      "asset_id": "5xM2KqOnZyce22SPZ9d4",
      "type": "asset"
    }
  },
  "version_id": "latest",
  "webhook": {
    "type": "all"
  }
}
```

**Response**

```json
{
  "id": "sess_JWr5N6X9ZTqf8jD2LmQb",
  "template_id": "tmpl_abc123",
  "version_id": "ver_01hxyz",
  "status": "generating",
  "outputs": {
    "marketing_title": {
      "type": "string",
      "id": "Kx2mP7Y4WVrg9kE3NnRc",
      "status": "completed",
      "content": "Ride the wave."
    },
    "product_demo": {
      "type": "video",
      "id": "QWr5N6X9ZTqf8jD2La3B",
      "status": "generating"
    },
    "product_still": {
      "type": "image",
      "id": "JWr5N6X9ZTqf8jD2LmQb",
      "status": "completed",
      "content_mime_type": "image/png",
      "content_url": "https://storage.googleapis.com/generations/JWr5N6X9ZTqf8jD2LmQb"
    }
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/flows/templates/template_id/runs"

payload = {
    "inputs": {
        "prompt": "a corgi on a surfboard",
        "reference": {
            "asset_id": "5xM2KqOnZyce22SPZ9d4",
            "type": "asset"
        }
    },
    "version_id": "latest",
    "webhook": { "type": "all" }
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/flows/templates/template_id/runs';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"inputs":{"prompt":"a corgi on a surfboard","reference":{"asset_id":"5xM2KqOnZyce22SPZ9d4","type":"asset"}},"version_id":"latest","webhook":{"type":"all"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/flows/templates/template_id/runs"

	payload := strings.NewReader("{\n  \"inputs\": {\n    \"prompt\": \"a corgi on a surfboard\",\n    \"reference\": {\n      \"asset_id\": \"5xM2KqOnZyce22SPZ9d4\",\n      \"type\": \"asset\"\n    }\n  },\n  \"version_id\": \"latest\",\n  \"webhook\": {\n    \"type\": \"all\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/flows/templates/template_id/runs")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"inputs\": {\n    \"prompt\": \"a corgi on a surfboard\",\n    \"reference\": {\n      \"asset_id\": \"5xM2KqOnZyce22SPZ9d4\",\n      \"type\": \"asset\"\n    }\n  },\n  \"version_id\": \"latest\",\n  \"webhook\": {\n    \"type\": \"all\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/flows/templates/template_id/runs")
  .header("Content-Type", "application/json")
  .body("{\n  \"inputs\": {\n    \"prompt\": \"a corgi on a surfboard\",\n    \"reference\": {\n      \"asset_id\": \"5xM2KqOnZyce22SPZ9d4\",\n      \"type\": \"asset\"\n    }\n  },\n  \"version_id\": \"latest\",\n  \"webhook\": {\n    \"type\": \"all\"\n  }\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/flows/templates/template_id/runs', [
  'body' => '{
  "inputs": {
    "prompt": "a corgi on a surfboard",
    "reference": {
      "asset_id": "5xM2KqOnZyce22SPZ9d4",
      "type": "asset"
    }
  },
  "version_id": "latest",
  "webhook": {
    "type": "all"
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/flows/templates/template_id/runs");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"inputs\": {\n    \"prompt\": \"a corgi on a surfboard\",\n    \"reference\": {\n      \"asset_id\": \"5xM2KqOnZyce22SPZ9d4\",\n      \"type\": \"asset\"\n    }\n  },\n  \"version_id\": \"latest\",\n  \"webhook\": {\n    \"type\": \"all\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "inputs": [
    "prompt": "a corgi on a surfboard",
    "reference": [
      "asset_id": "5xM2KqOnZyce22SPZ9d4",
      "type": "asset"
    ]
  ],
  "version_id": "latest",
  "webhook": ["type": "all"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/flows/templates/template_id/runs")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```