API REFERENCE · DECISIONS
Translation decisions
Which rendering carries the line: a joke, a story, a conversational turn. Your creative directors see the options with the reasoning and pick.
01.Reviewed today
With review=manual, a line that can land more than one way comes back as three translations, each for a different intent and emotion, with the reasoning. Your creative directors pick one, edit any line, then render.
A podcast, an episode or a movie carries many such segments. The flow lives on Transcript & review.
02.The kinds
RENDERING
Which of several renderings carries the line. The Korean 사과하려고 사과 사 왔어.rests on 사과 meaning both apology and apple; the options are "Apples. I'm sorry, right down to the core." (the pun kept), "I came to say sorry. I brought apples." (the meaning only) and "An apple a day keeps the silent treatment away." (a new joke).
The Chinese 你可真行啊。turns on tone. The options are "Wow. You're incredible." (sincere), "Well, aren't you something." (sarcastic) and "Look at you, hotshot." (teasing).
SLANG
Kept as said, or localized. A gamer's "GG" stays "GG" in every language.
NAME
Kept, or localized. A character's nickname stays as the audience first heard it.
REFERENCE
Swapped for one the audience knows. A local TV show named in a joke becomes one the new audience grew up with.
TERM
The term you already chose, kept consistent. A product name or a show's invented word reads the same in episode one and episode ten.
CULTURE
What that culture avoids, and the way around it. A gesture of praise in one country reads as an insult in another; the line carries the praise without it.
PROFANITY
The level for the audience. A younger cut lowers it; the adult cut keeps the original force.
03.In the record
Every translation decision lands in the decision record with its options and the choice in force (in the works). Filter the record to translation with type.
/v1/dubs/{dub_id}/decisions?type=translation&lang=en{
"dub_id": "dub_31xk9m",
"lang": "en",
"decisions": [
{
"id": "dec_7h2k0a",
"type": "translation",
"kind": "rendering",
"segment": "seg_12",
"start": 12.48,
"end": 15.91,
"speaker": "spk_1",
"source": "사과하려고 사과 사 왔어.",
"options": [
{ "id": "opt_1", "text": "Apples. I'm sorry, right down to the core.", "intent": "the pun kept", "emotion": "playful", "reasoning": "The line rests on 사과 meaning both apology and apple, and bringing apples to say sorry is a real custom; the English keeps the fruit so the bag in the next shot still lands." },
{ "id": "opt_2", "text": "I came to say sorry. I brought apples.", "intent": "the meaning only", "emotion": "sincere", "reasoning": "Drops the pun; the apology reads straight." },
{ "id": "opt_3", "text": "An apple a day keeps the silent treatment away.", "intent": "a new joke", "emotion": "playful", "reasoning": "A different gag that fits the apples on screen." }
],
"chosen": "opt_1",
"chosen_by": "model",
"status": "open",
"memory": null
}
],
"has_more": false
}| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string | Option id; choose keys on it. |
text | string | The translated line. |
intent | string | What the rendering goes for. |
emotion | string | The delivery it carries. |
reasoning | string | Why this rendering works. |
segment is the idof the transcript segment the line belongs to. The option your team picks becomes that segment's target.
04.Override
/v1/dubs/{dub_id}/decisions/{decision_id}Send choose with an option id, or text with your own rendering (in the works). The response returns the decision with chosen_by: "you" and status: "settled".
curl -X PATCH https://api.thefamiliarlab.com/v1/dubs/dub_31xk9m/decisions/dec_7h2k0a \
-H "Authorization: Bearer $FAMILIAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "text": "Apples. I am sorry, right down to the core." }'PATCH is valid at in_review and at complete, then 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 shape the translation decisions (in the works). Nested fields are written dotted in multipart, as metadata.title is.
| FIELD | VALUES | DESCRIPTION |
|---|---|---|
decisions.translation.options | integer, 1 to 3 (default 3) | Renderings returned for a line that can land more than one way. |
decisions.profanity | keep (default) · soften · remove | The level for the audience; soften = the younger cut. |
curl -X POST https://api.thefamiliarlab.com/v1/dubs \ -H "Authorization: Bearer $FAMILIAR_API_KEY" \ -F "file=@episode_04.mp4" \ -F "target_langs=en" \ -F "review=manual" \ -F "decisions.profanity=soften"
06.Remember it
Add remember: "creator" to an override and a choice made once follows the next episode (in the works). The carried choice comes back with chosen_by: "memory"; see Decision memory.
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.