> For clean Markdown of any page, append `.md` to the page URL.
> For a complete documentation index, see https://docs.sarvam.ai/llms.txt.
> For full documentation content in one file, see https://docs.sarvam.ai/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.sarvam.ai/_mcp/server.

# How to choose export formats

> Use export_options to auto-produce dubbed video, isolated audio, and SRT subtitles per target language, and read them back from export-status.

`export_options` decides which formats the pipeline auto-produces for **each** target language.

| Parameter        | Type      | Default     | Accepted values                           |
| ---------------- | --------- | ----------- | ----------------------------------------- |
| `export_options` | string\[] | `["video"]` | `video`, `audio`, `srt` - any combination |

Omitting `export_options` preserves the original behaviour: video-only auto-export.

## The three formats

The "Use it for" column is suggested guidance from us, not API-defined behaviour. The "You get" column is what the API actually produces.

| Value   | You get                                               | Use it for                                                             |
| ------- | ----------------------------------------------------- | ---------------------------------------------------------------------- |
| `video` | The dubbed video, re-mixed onto the original timeline | Publishing straight to YouTube, an LMS, or a social platform           |
| `audio` | The isolated dubbed audio track, uncompressed `.wav`  | Podcast feeds, radio, re-editing in your own NLE, IVR prompts          |
| `srt`   | A subtitle file timed to the dub                      | Accessibility, SEO, on-platform captions, QA review of the translation |

Ask for `srt` even when you only plan to ship video. It's the cheapest way to review translation quality, since you can read the whole dub in seconds instead of watching it.

## Reading the exports back

`export-status` returns a flat array with **one entry per (language, format)**. All formats for all languages come back in a single poll, and there are no per-language or per-format calls.

```json
{
  "data": {
    "exports": [
      { "target_language": "hi-IN", "export_type": "video", "status": "completed", "download_url": "https://..." },
      { "target_language": "hi-IN", "export_type": "audio", "status": "completed", "download_url": "https://..." },
      { "target_language": "hi-IN", "export_type": "srt",   "status": "completed", "download_url": "https://..." }
    ]
  }
}
```

Group by `target_language` on your side and read `download_url` from each entry.

Set `limit` deliberately. It defaults to `5`, and a job with 3 languages × 3 formats produces 9 entries, so the tail is not returned. Use a value comfortably above `languages × formats` (max `100`).

## `audio` versus `mp3`

`export_options` accepts `audio`, but export entries can report an `export_type` of `mp3` as well:

* **`audio`** - uncompressed `.wav`.
* **`mp3`** - the same track re-encoded.

Handle both values when you switch on `export_type`, rather than assuming only the three you requested will appear.

## Stale exports

Each entry carries an `is_stale` flag. It becomes `true` when the translation chunks for that language were edited (for example, in the Creator Studio editor) **after** the export completed, meaning the file you'd download no longer reflects the latest text.

```python
for item in exports:
    if item["status"] == "completed" and item["is_stale"]:
        print(f"{item['target_language']}/{item['export_type']} is out of date - re-export before publishing")
```

Download URLs are signed and expire in roughly 24 hours. Persist the `job_id` and re-poll `export-status` for a fresh link, and don't cache the URL itself.

## Related

* [Specify Language Codes](/api/api-guides-tutorials/dubbing/how-to/specify-language-codes)
* [Dubbing Overview](/api/api-guides-tutorials/dubbing/overview)