---
title: "Create Proofread Session"
method: POST
path: "/v3/video-translations/proofreads"
tags: ["Video Translate"]
---

# Create Proofread Session

`POST /v3/video-translations/proofreads`

## Request

- Base URL: `https://api.heygen.com`
- URL: `https://api.heygen.com/v3/video-translations/proofreads`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Creates a proofread session that extracts editable subtitles from a video before final rendering.

## Headers

- `Idempotency-Key` string

## Request body

- CreateProofreadRequest: Request body for POST /v3/video-translations/proofreads.
  - `video` union, required: Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}
    - AssetUrl: Asset input via publicly accessible HTTPS URL.
      - `type` 'url', required: Input type discriminator
      - `url` string, required: Publicly accessible HTTPS URL for the asset
    - AssetId: Asset input via HeyGen asset ID from the asset upload endpoint.
      - `type` 'asset_id', required: Input type discriminator
      - `asset_id` string, required: HeyGen asset ID from the asset upload endpoint
  - `output_languages` string[], required: Target language codes. Use one for single proofread, multiple for batch.
  - `title` string, required: Title for the proofread job
  - `brand_voice_id` string, nullable: Brand glossary ID for custom term translations. Legacy field name for `brand_glossary_id` — both are accepted and resolve to the same workspace record. Discover IDs via GET /v3/brand-glossaries.
  - `brand_glossary_id` string, nullable: Brand glossary ID for custom term translations (e.g. translate 'Reformer' as 'Pilates equipment', not 'political activist'). Alias for the legacy `brand_voice_id` field. Discover IDs via GET /v3/brand-glossaries.
  - `speaker_num` integer, nullable: Number of speakers (improves speaker separation)
  - `folder_id` string, nullable: Destination folder ID in the caller's workspace, for example one returned by POST /v3/folders. Omit, pass null, or pass an empty string to place the result at the workspace root. The id must name a folder that is not in the trash and that the caller can write to. Assets library folders are accepted, but the HeyGen app files only assets in them, so a result placed there may not appear in the Assets library view. An unknown id, a folder in another workspace, a project of another kind such as a brand kit, or a trashed folder is rejected with 404 before anything is created.
  - `enable_video_stretching` boolean: Allow dynamic duration adjustment
  - `disable_music_track` boolean: Remove background music
  - `enable_speech_enhancement` boolean: Enhance speech quality
  - `srt` union: Initial SRT file — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}
    - AssetUrl: Asset input via publicly accessible HTTPS URL.
      - `type` 'url', required: Input type discriminator
      - `url` string, required: Publicly accessible HTTPS URL for the asset
    - AssetId: Asset input via HeyGen asset ID from the asset upload endpoint.
      - `type` 'asset_id', required: Input type discriminator
      - `asset_id` string, required: HeyGen asset ID from the asset upload endpoint
  - `mode` 'speed' | 'precision'
  - `keep_the_same_format` boolean: Preserve the source video's encoding specs (resolution, bitrate)

## Response `200`

Successful response

- object
  - `data` CreateProofreadResponse: Response for POST /v3/video-translations/proofreads.
    - `proofread_ids` string[], required: Proofread IDs, one per target language
    - `status` 'processing' | 'completed' | 'failed', required

## Other responses

- `400`: Invalid request parameters
- `401`: Authentication failed
- `409`: A prior request with this Idempotency-Key is still in progress. Wait for the original request to complete, then retry.
- `429`: Rate limit exceeded

## Changes

- **2026-11-03** `7dfa5e59b4f5`: 11 info
  - request property `brand_voice_id` deprecated
  - added `asset_id, url` discriminator mapping keys to the `srt/anyOf[subschema #1]/` request property
  - added `asset_id, url` discriminator mapping keys to the `video` request property
  - added the optional property `error/errors` to the response with the `400` status
  - …7 more

[Operation history](https://skmtc.dev/heygen/apis/heygen-external-api/changes/v3/video-translations/proofreads/post.md)

---

[API](https://skmtc.dev/heygen/apis/heygen-external-api.md) - [All operations](https://skmtc.dev/heygen/apis/heygen-external-api/llms.txt) - [OpenAPI document](https://skmtc.dev/heygen/apis/heygen-external-api/revisions/7dfa5e59b4f5?raw)
