---
title: "Read editable dubbing passages"
method: GET
path: "/v1/dub/jobs/{job_id}/editor"
tags: ["Dub"]
---

# Read editable dubbing passages

`GET /v1/dub/jobs/{job_id}/editor`

## Request

- Base URL: `https://api.pyai.com`
- URL: `https://api.pyai.com/v1/dub/jobs/{job_id}/editor`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Requires dub:render. Read source transcript, displayed translation, optional spoken pronunciation text, and source/output times. rendered holds the text matching the current audio; changed marks saved edits awaiting regeneration. Available when job.editable is true. No delivery units are charged.

## Path parameters

- `job_id` string, required

## Response `200`

Saved editor snapshot.

- DubEditor
  - `job_id` string, required
  - `revision` integer, required
  - `parent_job_id` string, nullable, required
  - `segments` DubPassage[], required
    - `source_text` string, required
    - `translated_text` string, required
    - `pronunciation_text` string, required: Optional full spoken passage. Empty uses the translation. Subtitles retain the displayed translation.
    - `id` string, required
    - `speaker` string, required
    - `start` number, required
    - `end` number, required
    - `output_start` number, required
    - `output_end` number, required
    - `rendered` DubPassageText, required
      - `source_text` string, required
      - `translated_text` string, required
      - `pronunciation_text` string, required: Optional full spoken passage. Empty uses the translation. Subtitles retain the displayed translation.
    - `changed` boolean, required

## Other responses

- `401`: Missing or invalid API key (`code: unauthorized`)
- `402`: Billing gate: org out of prepaid credit, per-key budget hit, or plan quota exhausted (`code: credit_exhausted | key_budget_exceeded | insufficient_quota`). Do not retry; add credit or raise the limit. A brand-new key may see this on its first call until the account is funded.
- `403`: The product key lacks dub:render.
- `404`: unknown_job: no matching job in the calling organization.
- `409`: job_not_done: poll the status endpoint before downloading.
- `429`: Rate/concurrency limit or dub_busy. Retry with backoff.
- `503`: Dubbing is unavailable. Retry with backoff.

---

[API](https://skmtc.dev/pyai/apis/pyai-api.md) · [All operations](https://skmtc.dev/pyai/apis/pyai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/pyai/apis/pyai-api/revisions/271a1539185b?raw)
