> ## Documentation Index
> Fetch the complete documentation index at: https://docs.viddyscribe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Generate AD Audio

> Quick guide to generate audio description audio track via URL

## Generate AD Audio

Generate an audio-only track with audio descriptions (no video rendering). This is useful when you only need the audio track without video processing.

<Note>
  Already uploaded media or using the signed upload flow? Generate with `media_id`. See [Large Local File Upload](/large-local-file-upload) or [API Reference](/api-reference/processing/generate-audio-description-audio).
</Note>

### 1. Using a Video from public URL

Upload from a public URL and generate in one step.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.viddyscribe.com/enterprise/api/generate_ad_audio \
    -H "X-API-Key: vsk_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "input": {
        "type": "url",
        "url": "https://example.com/video.mp4"
      },
      "generation_config": {
        "language": "en-US",
        "voice": "Achernar",
        "format": "vtt",
        "custom_instructions": "Keep descriptions concise and focus on on-screen text."
      }
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.viddyscribe.com/enterprise/api/generate_ad_audio",
      headers={"X-API-Key": "vsk_your_api_key_here"},
      json={
          "input": {"type": "url", "url": "https://example.com/video.mp4"},
          "generation_config": {
              "language": "en-US",
              "voice": "Achernar",
              "format": "vtt",
              "custom_instructions": "Keep descriptions concise and focus on on-screen text.",
          },
      },
  )
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://api.viddyscribe.com/enterprise/api/generate_ad_audio",
    {
      method: "POST",
      headers: {
        "X-API-Key": "vsk_your_api_key_here",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        input: { type: "url", url: "https://example.com/video.mp4" },
        generation_config: {
          language: "en-US",
          voice: "Achernar",
          format: "vtt",
          custom_instructions: "Keep descriptions concise and focus on on-screen text.",
        },
      }),
    }
  );
  console.log(await response.json());
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "job_id": "task_abc123xyz",
  "status": "queued",
  "media_id": "550e8400-e29b-41d4-a716-446655440000"
}
```

Use the `job_id` to poll `get_results` for completion.

### 2. Using a Video from local file

Upload a local file and generate in one step.

<Note>
  Direct multipart upload supports local files up to 32 MB. For larger local files, see [Large Local File Upload](/large-local-file-upload).
</Note>

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.viddyscribe.com/enterprise/api/generate_ad_audio \
    -H "X-API-Key: vsk_your_api_key_here" \
    -F 'input={"type": "file"}' \
    -F "file=@video.mp4" \
    -F 'generation_config={"language": "en-US", "voice": "Achernar", "format": "vtt", "custom_instructions": "Keep descriptions concise and focus on on-screen text."}'
  ```

  ```python Python theme={null}
  import json
  import requests

  with open("video.mp4", "rb") as f:
      response = requests.post(
          "https://api.viddyscribe.com/enterprise/api/generate_ad_audio",
          headers={"X-API-Key": "vsk_your_api_key_here"},
          files={"file": f},
          data={
              "input": json.dumps({"type": "file"}),
              "generation_config": json.dumps({
                  "language": "en-US",
                  "voice": "Achernar",
                  "format": "vtt",
                  "custom_instructions": "Keep descriptions concise and focus on on-screen text.",
              }),
          },
      )
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  import fs from "node:fs";

  const form = new FormData();
  form.append("input", JSON.stringify({ type: "file" }));
  form.append("file", new Blob([fs.readFileSync("video.mp4")]), "video.mp4");
  form.append("generation_config", JSON.stringify({
    language: "en-US",
    voice: "Achernar",
    format: "vtt",
    custom_instructions: "Keep descriptions concise and focus on on-screen text.",
  }));

  const response = await fetch(
    "https://api.viddyscribe.com/enterprise/api/generate_ad_audio",
    {
      method: "POST",
      headers: { "X-API-Key": "vsk_your_api_key_here" },
      body: form,
    }
  );
  console.log(await response.json());
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "job_id": "task_abc123xyz",
  "status": "queued",
  "media_id": "660f9511-f30c-52e5-b827-557766551111"
}
```

Use the `job_id` to poll `get_results` for completion. On success, `audio_signed_url` contains a signed URL to download the audio track (WAV format).

## Tips

* **Note:** Audio generation only supports `standard_ad` type (concise descriptions during dialogue pauses).
* The default text output `format` is `json`. Set `format` to `"vtt"` to include a WebVTT string in the response `output`.
* Audio output is priced at 0.75x the base workflow cost.
* Use `custom_instructions` to guide the AI's description style (e.g. tone, focus, or length).
* Set `audio_track_type` to `"ad_only"` to receive just the AD narration WAV; the default `"mixed"` returns the source dialogue plus AD narration.

## Retrieve Results

Use the `job_id` from the previous step to fetch results:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.viddyscribe.com/enterprise/api/get_results?job_id=TASK_ID" \
    -H "X-API-Key: vsk_your_api_key_here"
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api.viddyscribe.com/enterprise/api/get_results",
      headers={"X-API-Key": "vsk_your_api_key_here"},
      params={"job_id": "TASK_ID"},
  )
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://api.viddyscribe.com/enterprise/api/get_results?job_id=TASK_ID",
    { headers: { "X-API-Key": "vsk_your_api_key_here" } }
  );
  console.log(await response.json());
  ```
</CodeGroup>

Example successful response for audio jobs (with `format: "vtt"`):

```json theme={null}
{
  "job_id": "task_abc123xyz",
  "status": "done",
  "media_id": "550e8400-e29b-41d4-a716-446655440000",
  "audio_signed_url": "https://storage.googleapis.com/bucket/path/to/audio.wav?X-Goog-Signature=...",
  "output": {
    "format": "vtt",
    "content": "WEBVTT\n\n1\n00:00:00.500 --> 00:00:03.100\nA woman in a yellow top sits at a desk with a laptop.\n\n2\n00:00:03.200 --> 00:00:05.900\nShe looks at the camera and smiles.\n"
  },
  "created_at": "2025-09-30T08:00:00Z",
  "updated_at": "2025-09-30T08:10:00Z"
}
```
