PREVIEW · CLOSED ACCESSAPI keys are issued under Studio contracts. Email the team

API REFERENCE · DECISIONS

Audio decisions

What to translate at all. The model finds the main voice and keeps the rest as it was; which sounds stay in the original is yours to settle.

01.What the model decides in audio

The model hears everything in the source: the laughter, the crowd, a shout, a speaker no one can make out. It finds the main voice and keeps the rest as it was.

The decision is which voices are translated and what stays in the source language. Each one lands in the decision record with type: "audio".

02.The kinds

TRANSLATE

Whether a voice is translated at all: the main voice, a line off mic, a background speaker no one can make out. The main voice is translated; the background speaker is left as it was.

KEEP_ORIGINAL

A chant, a yell or a phrase that stays in the source language. The stadium chant at 41.2 to 44.0 s stays in Korean, so does the yell across the kitchen and the catchphrase the fans know.

PRESERVE

A sound kept exactly as it was. The laughter and the crowd come through untouched in every language.

03.In the record

GET/v1/dubs/{dub_id}/decisions?type=audio&lang=en

The decisions resource (in the works) filters to audio with type=audio. The chant, as the record holds it:

200 · OK
{
  "dub_id": "dub_31xk9m",
  "lang": "en",
  "decisions": [
    {
      "id": "dec_7h2k0b",
      "type": "audio",
      "kind": "keep_original",
      "segment": null,
      "start": 41.20,
      "end": 44.05,
      "speaker": null,
      "source": "crowd chant",
      "options": [
        { "id": "opt_1", "text": "keep in Korean", "reasoning": "A stadium chant; the crowd is the scene, not a speaker." },
        { "id": "opt_2", "text": "translate", "reasoning": "The words carry the next line's joke." }
      ],
      "chosen": "opt_1",
      "chosen_by": "model",
      "status": "open",
      "memory": null
    }
  ],
  "has_more": false
}
TABLE 01 · WHERE AUDIO DIFFERS FROM TRANSLATION
FIELDAUDIO DECISIONS
segmentAlways null; a sound has no transcript segment.
speakernull for a crowd or a sound; a spk_ id for one voice.
options[]id, text, reasoning; no intent or emotion.
sourceThe sound, named: a crowd chant, a yell, laughter.

04.Override

PATCH/v1/dubs/{dub_id}/decisions/{decision_id}

The override (in the works) takes exactly one of keep_original: true or choose. Add remember: "creator" to carry the choice to the next episode.

REQUEST · KEEP IN THE ORIGINAL
curl -X PATCH https://api.thefamiliarlab.com/v1/dubs/dub_31xk9m/decisions/dec_7h2k0b \
  -H "Authorization: Bearer $FAMILIAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "keep_original": true, "remember": "creator" }'
REQUEST · PICK AN OPTION
curl -X PATCH https://api.thefamiliarlab.com/v1/dubs/dub_31xk9m/decisions/dec_7h2k0b \
  -H "Authorization: Bearer $FAMILIAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "choose": "opt_2" }'
200 · OK
{
  "id": "dec_7h2k0b",
  "type": "audio",
  "kind": "keep_original",
  "chosen": "opt_2",
  "chosen_by": "you",
  "status": "settled",
  "memory": null
}

PATCH works at in_review and at complete, then POST /render again. During rendering it returns 409 decision_locked; an unknown option returns 422 option_not_found.

05.Settings

Two request fields on POST /v1/dubs (in the works) set the defaults. Nested fields are written dotted in multipart.

TABLE 02 · AUDIO SETTINGS
FIELDVALUESDESCRIPTION
decisions.audio.translatemain_voice (default) · all_speech · askThe main voice only; every intelligible speaker; or every close call comes back open.
decisions.audio.keep_originalauto (default) · askThe model decides what stays in the source language, or asks.

ask requires review=manual; on an auto dub it returns 422 decision_setting_requires_review. The dub waits at in_review until every open decision is settled or you render.

06.On the review screen

The review screen (in the works) shows each audio decision as the sound's span on the episode timeline, with the options and the reasoning. One tap keeps it in the original; another remembers the choice for this creator.

07.Access

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