API REFERENCE · DUBBING

Transcript & review

With review=manual the dub pauses at in_review after translation. Pull the transcript, edit any line, then render -- credits only spend at render.

01.The review flow

  • Create the dub with review=manual -- Create a dub.
  • Wait for status: "in_review" -- the dub.ready_for_review webhook fires the moment it lands (Webhooks).
  • GET the transcript per language; PATCH the lines you want changed.
  • POST /render to approve -- the whole dub, or one language at a time.

02.Get the transcript

GET/v1/dubs/{dub_id}/transcript?lang=es
200 · OK
{
  "dub_id": "dub_31xk9m",
  "lang": "es",
  "segments": [
    {
      "id": "seg_004",
      "start": 12.48,
      "end": 15.91,
      "speaker": "spk_1",
      "source": "That's the whole trick.",
      "target": "Ese es todo el truco."
    }
  ]
}
TABLE 01 · SEGMENT FIELDS
FIELDTYPEDESCRIPTION
idstringStable per segment; PATCH keys on it.
startnumberSeconds into the source, word-timestamp precise.
endnumberSeconds into the source.
speakerstringWhich detected speaker says the line.
sourcestringThe transcribed source line.
targetstringThe translated line -- the editable field.

Omit lang to get the source-language transcript only (available from translating onward, on auto dubs too -- useful for your own moderation pass).

03.Edit lines

PATCH/v1/dubs/{dub_id}/transcript
REQUEST
curl -X PATCH https://api.thefamiliarlab.com/v1/dubs/dub_31xk9m/transcript \
  -H "Authorization: Bearer $FAMILIAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "lang": "es",
    "segments": [
      { "id": "seg_004", "target": "Ahí está todo el truco." }
    ]
  }'

Send only the segments you changed; target is the one writable field. The response echoes the full updated transcript. PATCH is only valid at in_review -- anything else returns 409.

04.Render

POST/v1/dubs/{dub_id}/render
REQUEST
curl -X POST https://api.thefamiliarlab.com/v1/dubs/dub_31xk9m/render \
  -H "Authorization: Bearer $FAMILIAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "langs": ["es"] }'
200 · OK
{
  "dub_id": "dub_31xk9m",
  "status": "rendering",
  "outputs": [
    { "lang": "es", "status": "rendering" },
    { "lang": "pt", "status": "in_review" },
    { "lang": "ja", "status": "in_review" }
  ]
}

Omit langs to approve the whole dub; pass it to release languages one at a time (Spanish today, the rest after your Spanish reviewer signs off). Render is the moment credits spend. Rendering a manual dub that isn't in_review returns 409.

05.When review is forced or skipped

06.Access

The API is enterprise-only: private access under a Studio contract, with volume pricing, raised limits, and a named point of contact for the integration. Book a call and your key is issued with the contract.