{"openapi":"3.1.0","info":{"title":"Subtly API","version":"1.0.0","description":"Create asynchronous transcription and subtitle translation jobs for a Subtly workspace using prepaid USD credits. Transcription rates are Whisper Large v3: $0.10 per audio hour; Whisper Large v3 Turbo: $0.04 per audio hour, with a 15-second minimum. Translation rates are Quality: $10.00 per 1M source characters per target language; Fast: $5.00 per 1M source characters per target language, with a 225-character minimum per target language."},"servers":[{"url":"https://subtly.app","description":"Subtly service"}],"tags":[{"name":"Transcriptions","description":"Create and manage audio or video transcription jobs."},{"name":"Translations","description":"Create and manage subtitle and text translation jobs."},{"name":"Languages","description":"Discover supported language codes for transcription and translation."}],"paths":{"/api/v1/languages":{"get":{"tags":["Languages"],"summary":"List supported languages","description":"Returns the language codes and names available for public transcription and translation models. This read-only discovery endpoint is public and does not require an API key. Each listed model shares the language coverage shown in its catalog. Whisper transcription uses `zh` for Chinese; translation uses `zh-CN` and `zh-TW`. Translation has no auto-detection, defaults the source language to `en`, and requires source and target languages to differ.","operationId":"listSupportedLanguages","security":[],"responses":{"200":{"description":"Language names and codes, public model IDs and labels, and language-selection constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportedLanguages"},"example":{"transcription":{"description":"Large v3 and Large v3 Turbo share this language catalog. Whisper uses zh for Chinese.","models":[{"id":"large-v3","label":"Whisper Large v3"},{"id":"large-v3-turbo","label":"Whisper Large v3 Turbo"}],"default_language":"auto","auto_detect":true,"languages":[{"code":"af","name":"Afrikaans"},{"code":"sq","name":"Albanian"},{"code":"am","name":"Amharic"},{"code":"ar","name":"Arabic"},{"code":"hy","name":"Armenian"},{"code":"as","name":"Assamese"},{"code":"az","name":"Azerbaijani"},{"code":"ba","name":"Bashkir"},{"code":"eu","name":"Basque"},{"code":"be","name":"Belarusian"},{"code":"bn","name":"Bengali"},{"code":"bs","name":"Bosnian"},{"code":"br","name":"Breton"},{"code":"bg","name":"Bulgarian"},{"code":"yue","name":"Cantonese"},{"code":"ca","name":"Catalan"},{"code":"zh","name":"Chinese"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fo","name":"Faroese"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"gl","name":"Galician"},{"code":"ka","name":"Georgian"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"ht","name":"Haitian Creole"},{"code":"ha","name":"Hausa"},{"code":"haw","name":"Hawaiian"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"jw","name":"Javanese"},{"code":"kn","name":"Kannada"},{"code":"kk","name":"Kazakh"},{"code":"km","name":"Khmer"},{"code":"ko","name":"Korean"},{"code":"lo","name":"Lao"},{"code":"la","name":"Latin"},{"code":"lv","name":"Latvian"},{"code":"ln","name":"Lingala"},{"code":"lt","name":"Lithuanian"},{"code":"lb","name":"Luxembourgish"},{"code":"mk","name":"Macedonian"},{"code":"mg","name":"Malagasy"},{"code":"ms","name":"Malay"},{"code":"ml","name":"Malayalam"},{"code":"mt","name":"Maltese"},{"code":"mi","name":"Maori"},{"code":"mr","name":"Marathi"},{"code":"mn","name":"Mongolian"},{"code":"my","name":"Myanmar (Burmese)"},{"code":"ne","name":"Nepali"},{"code":"no","name":"Norwegian"},{"code":"nn","name":"Norwegian Nynorsk"},{"code":"oc","name":"Occitan"},{"code":"ps","name":"Pashto"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sa","name":"Sanskrit"},{"code":"sr","name":"Serbian"},{"code":"sn","name":"Shona"},{"code":"sd","name":"Sindhi"},{"code":"si","name":"Sinhala"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"so","name":"Somali"},{"code":"es","name":"Spanish"},{"code":"su","name":"Sundanese"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"tl","name":"Tagalog"},{"code":"tg","name":"Tajik"},{"code":"ta","name":"Tamil"},{"code":"tt","name":"Tatar"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"bo","name":"Tibetan"},{"code":"tr","name":"Turkish"},{"code":"tk","name":"Turkmen"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"uz","name":"Uzbek"},{"code":"vi","name":"Vietnamese"},{"code":"cy","name":"Welsh"},{"code":"yi","name":"Yiddish"},{"code":"yo","name":"Yoruba"}]},"translation":{"description":"Quality and Fast share this language catalog. Auto-detection is not available; the source language defaults to en and must differ from every target language. Translation uses zh-CN for Simplified Chinese and zh-TW for Traditional Chinese.","models":[{"id":"google/translategemma-27b-it","label":"Quality"},{"id":"google/translategemma-12b-it","label":"Fast"}],"default_source_language":"en","auto_detect":false,"source_must_differ_from_targets":true,"languages":[{"code":"ar","name":"Arabic"},{"code":"bn","name":"Bengali"},{"code":"bg","name":"Bulgarian"},{"code":"ca","name":"Catalan"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fil","name":"Filipino"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"kn","name":"Kannada"},{"code":"ko","name":"Korean"},{"code":"lv","name":"Latvian"},{"code":"lt","name":"Lithuanian"},{"code":"ml","name":"Malayalam"},{"code":"mr","name":"Marathi"},{"code":"no","name":"Norwegian"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sr","name":"Serbian"},{"code":"zh-CN","name":"Simplified Chinese"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"es","name":"Spanish"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"ta","name":"Tamil"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"zh-TW","name":"Traditional Chinese"},{"code":"tr","name":"Turkish"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"vi","name":"Vietnamese"},{"code":"zu","name":"Zulu"}]}}}}}}}},"/api/v1/transcriptions":{"get":{"tags":["Transcriptions"],"summary":"List the most recent 50 transcription jobs","description":"Returns up to 50 jobs in this API key's workspace, newest first. This endpoint does not accept pagination parameters. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"listTranscriptions","security":[{"BearerApiKey":[]}],"responses":{"200":{"description":"The most recent jobs for this resource type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"},"example":{"data":[]}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}},"post":{"tags":["Transcriptions"],"summary":"Create a transcription","description":"Queues an audio or video transcription. Raw upload extensions are .aac, .flac, .m4a, .mp3, .mp4, .mpeg, .mpg, .mov, .m4v, .mkv, .ogg, .opus, .wav, .webm, .wma, .avi. Spoken-language codes are documented in GET /api/v1/languages; large-v3 and large-v3-turbo share that catalog, with auto detection available. Public rates are Whisper Large v3: $0.10 per audio hour; Whisper Large v3 Turbo: $0.04 per audio hour. Each new transcription has a 15-second billed minimum; longer files are billed by actual duration, not in fixed 15-second blocks. The JSON body limit is 1 MiB; raw uploads are limited to 4 GiB. JSON requests use an optional Idempotency-Key header; raw uploads require it when filename is present. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"createTranscription","security":[{"BearerApiKey":[]}],"parameters":[{"name":"X-Caption-Webhook-Delivery","in":"header","required":false,"description":"Set to suppress to disable all callbacks for this job. Otherwise, subscriptions belong to the authenticated API key's integration. The choice is captured at acceptance and must stay the same on idempotent retries. Clients cannot choose another integration.","schema":{"type":"string","enum":["suppress"]}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional for JSON requests. Required when `filename` selects raw upload mode, so an interrupted upload can be retried safely.","schema":{"type":"string","minLength":1}},{"name":"filename","in":"query","required":false,"description":"Include this to select raw streaming upload mode, for example filename=meeting.wav. The value becomes the uploaded filename; omit it when sending JSON. Idempotency-Key is required when filename is present.","schema":{"type":"string","minLength":1}},{"name":"model","in":"query","required":false,"description":"Transcription model. Defaults to `large-v3`; `large-v3-turbo` is also available.","schema":{"default":"large-v3","type":"string","enum":["large-v3","large-v3-turbo"]}},{"name":"language","in":"query","required":false,"description":"Spoken language code. For large-v3 and large-v3-turbo, use one of the codes in GET /api/v1/languages or auto for detection.","schema":{"default":"auto","type":"string","minLength":2,"maxLength":12,"description":"Spoken language code. For large-v3 and large-v3-turbo, use one of the codes in GET /api/v1/languages or auto for detection.","x-supported-languages":{"models":[{"id":"large-v3","label":"Whisper Large v3"},{"id":"large-v3-turbo","label":"Whisper Large v3 Turbo"}],"values":[{"code":"af","name":"Afrikaans"},{"code":"sq","name":"Albanian"},{"code":"am","name":"Amharic"},{"code":"ar","name":"Arabic"},{"code":"hy","name":"Armenian"},{"code":"as","name":"Assamese"},{"code":"az","name":"Azerbaijani"},{"code":"ba","name":"Bashkir"},{"code":"eu","name":"Basque"},{"code":"be","name":"Belarusian"},{"code":"bn","name":"Bengali"},{"code":"bs","name":"Bosnian"},{"code":"br","name":"Breton"},{"code":"bg","name":"Bulgarian"},{"code":"yue","name":"Cantonese"},{"code":"ca","name":"Catalan"},{"code":"zh","name":"Chinese"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fo","name":"Faroese"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"gl","name":"Galician"},{"code":"ka","name":"Georgian"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"ht","name":"Haitian Creole"},{"code":"ha","name":"Hausa"},{"code":"haw","name":"Hawaiian"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"jw","name":"Javanese"},{"code":"kn","name":"Kannada"},{"code":"kk","name":"Kazakh"},{"code":"km","name":"Khmer"},{"code":"ko","name":"Korean"},{"code":"lo","name":"Lao"},{"code":"la","name":"Latin"},{"code":"lv","name":"Latvian"},{"code":"ln","name":"Lingala"},{"code":"lt","name":"Lithuanian"},{"code":"lb","name":"Luxembourgish"},{"code":"mk","name":"Macedonian"},{"code":"mg","name":"Malagasy"},{"code":"ms","name":"Malay"},{"code":"ml","name":"Malayalam"},{"code":"mt","name":"Maltese"},{"code":"mi","name":"Maori"},{"code":"mr","name":"Marathi"},{"code":"mn","name":"Mongolian"},{"code":"my","name":"Myanmar (Burmese)"},{"code":"ne","name":"Nepali"},{"code":"no","name":"Norwegian"},{"code":"nn","name":"Norwegian Nynorsk"},{"code":"oc","name":"Occitan"},{"code":"ps","name":"Pashto"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sa","name":"Sanskrit"},{"code":"sr","name":"Serbian"},{"code":"sn","name":"Shona"},{"code":"sd","name":"Sindhi"},{"code":"si","name":"Sinhala"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"so","name":"Somali"},{"code":"es","name":"Spanish"},{"code":"su","name":"Sundanese"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"tl","name":"Tagalog"},{"code":"tg","name":"Tajik"},{"code":"ta","name":"Tamil"},{"code":"tt","name":"Tatar"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"bo","name":"Tibetan"},{"code":"tr","name":"Turkish"},{"code":"tk","name":"Turkmen"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"uz","name":"Uzbek"},{"code":"vi","name":"Vietnamese"},{"code":"cy","name":"Welsh"},{"code":"yi","name":"Yiddish"},{"code":"yo","name":"Yoruba"}],"auto_detect":true}}}],"requestBody":{"required":true,"description":"Send source_url to import an audio or video URL. Outputs are stored privately in deployment storage and expire 24 hours after completion. formats selects txt, srt, vtt, and json (all four by default). Source URLs must remain readable until processing finishes. Raw upload extensions are .aac, .flac, .m4a, .mp3, .mp4, .mpeg, .mpg, .mov, .m4v, .mkv, .ogg, .opus, .wav, .webm, .wma, .avi. When filename is present, send the raw file bytes instead of JSON.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":160},"external_id":{"type":"string","maxLength":160},"model":{"default":"large-v3","type":"string","enum":["large-v3","large-v3-turbo"]},"language":{"default":"auto","type":"string","minLength":2,"maxLength":12,"description":"Spoken language code. For large-v3 and large-v3-turbo, use one of the codes in GET /api/v1/languages or auto for detection.","x-supported-languages":{"models":[{"id":"large-v3","label":"Whisper Large v3"},{"id":"large-v3-turbo","label":"Whisper Large v3 Turbo"}],"values":[{"code":"af","name":"Afrikaans"},{"code":"sq","name":"Albanian"},{"code":"am","name":"Amharic"},{"code":"ar","name":"Arabic"},{"code":"hy","name":"Armenian"},{"code":"as","name":"Assamese"},{"code":"az","name":"Azerbaijani"},{"code":"ba","name":"Bashkir"},{"code":"eu","name":"Basque"},{"code":"be","name":"Belarusian"},{"code":"bn","name":"Bengali"},{"code":"bs","name":"Bosnian"},{"code":"br","name":"Breton"},{"code":"bg","name":"Bulgarian"},{"code":"yue","name":"Cantonese"},{"code":"ca","name":"Catalan"},{"code":"zh","name":"Chinese"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fo","name":"Faroese"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"gl","name":"Galician"},{"code":"ka","name":"Georgian"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"ht","name":"Haitian Creole"},{"code":"ha","name":"Hausa"},{"code":"haw","name":"Hawaiian"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"jw","name":"Javanese"},{"code":"kn","name":"Kannada"},{"code":"kk","name":"Kazakh"},{"code":"km","name":"Khmer"},{"code":"ko","name":"Korean"},{"code":"lo","name":"Lao"},{"code":"la","name":"Latin"},{"code":"lv","name":"Latvian"},{"code":"ln","name":"Lingala"},{"code":"lt","name":"Lithuanian"},{"code":"lb","name":"Luxembourgish"},{"code":"mk","name":"Macedonian"},{"code":"mg","name":"Malagasy"},{"code":"ms","name":"Malay"},{"code":"ml","name":"Malayalam"},{"code":"mt","name":"Maltese"},{"code":"mi","name":"Maori"},{"code":"mr","name":"Marathi"},{"code":"mn","name":"Mongolian"},{"code":"my","name":"Myanmar (Burmese)"},{"code":"ne","name":"Nepali"},{"code":"no","name":"Norwegian"},{"code":"nn","name":"Norwegian Nynorsk"},{"code":"oc","name":"Occitan"},{"code":"ps","name":"Pashto"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sa","name":"Sanskrit"},{"code":"sr","name":"Serbian"},{"code":"sn","name":"Shona"},{"code":"sd","name":"Sindhi"},{"code":"si","name":"Sinhala"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"so","name":"Somali"},{"code":"es","name":"Spanish"},{"code":"su","name":"Sundanese"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"tl","name":"Tagalog"},{"code":"tg","name":"Tajik"},{"code":"ta","name":"Tamil"},{"code":"tt","name":"Tatar"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"bo","name":"Tibetan"},{"code":"tr","name":"Turkish"},{"code":"tk","name":"Turkmen"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"uz","name":"Uzbek"},{"code":"vi","name":"Vietnamese"},{"code":"cy","name":"Welsh"},{"code":"yi","name":"Yiddish"},{"code":"yo","name":"Yoruba"}],"auto_detect":true}},"webhook_url":{"type":"string","format":"uri"},"metadata":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"source_url":{"type":"string","maxLength":4096,"format":"uri"},"formats":{"default":["txt","srt","vtt","json"],"minItems":1,"type":"array","items":{"type":"string","enum":["vtt","srt","json","txt"]}}},"required":["source_url"],"additionalProperties":false},"examples":{"presignedUrls":{"summary":"Import a source URL","description":"Placeholder values for documentation only.","value":{"title":"Team interview","model":"large-v3","source_url":"https://storage.example.test/interview.mp4?signature=example","formats":["srt","vtt"],"language":"en"}}}},"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"audio/*":{"schema":{"type":"string","format":"binary"}},"video/*":{"schema":{"type":"string","format":"binary"}}}},"responses":{"202":{"description":"The job was accepted for asynchronous processing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptedJob"},"example":{"id":"b97e5f48-778a-4891-913f-2c5e3a9c0001","status":"accepted"}}}},"400":{"description":"The JSON body is invalid, a required upload idempotency key is missing, or the request fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"402":{"description":"The workspace does not have enough prepaid USD credits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"413":{"description":"The JSON body exceeds 1 MiB, the media upload exceeds 4 GiB, or the subtitle/text upload exceeds 10 MiB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"415":{"description":"Raw upload mode does not accept multipart form data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting, billing configuration, or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}}},"/api/v1/transcriptions/{id}":{"get":{"tags":["Transcriptions"],"summary":"Get a transcription job","description":"Returns a job and its recent progress events, non-expired artifacts, and webhook delivery attempts. Results are private downloads and expire 24 hours after completion. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"getTranscription","security":[{"BearerApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The job UUID.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The job detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDetail"}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"404":{"description":"No matching job exists in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}},"delete":{"tags":["Transcriptions"],"summary":"Cancel a transcription job","description":"Requests cancellation. A terminal or already-finished job returns 409 ALREADY_FINISHED; a cancellation still pending with the worker returns 202. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"cancelTranscription","security":[{"BearerApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The job UUID.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Cancellation was recorded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"Cancellation is still pending with the worker.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptedJob"},"example":{"id":"b97e5f48-778a-4891-913f-2c5e3a9c0001","status":"processing"}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"404":{"description":"No matching job exists in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"409":{"description":"The job is already finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}}},"/api/v1/transcriptions/{id}/artifacts/{artifactId}":{"get":{"tags":["Transcriptions"],"summary":"Download a transcription artifact","description":"Streams an unexpired managed artifact as a file download. A 404 means the job or artifact is missing, belongs to a different workspace, or has expired. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"downloadTranscriptionArtifact","security":[{"BearerApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The job UUID.","schema":{"type":"string","format":"uuid"}},{"name":"artifactId","in":"path","required":true,"description":"The artifact UUID from the job detail.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The artifact file. The response includes Content-Disposition and the stored content type.","headers":{"Content-Disposition":{"schema":{"type":"string"}}},"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"text/plain":{"schema":{"type":"string","format":"binary"}},"text/vtt":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"404":{"description":"The job or artifact does not exist or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"409":{"description":"Managed artifact download is unavailable for this job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"502":{"description":"The storage service failed to return the artifact.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}}},"/api/v1/translations":{"get":{"tags":["Translations"],"summary":"List the most recent 50 translation jobs","description":"Returns up to 50 jobs in this API key's workspace, newest first. This endpoint does not accept pagination parameters. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"listTranslations","security":[{"BearerApiKey":[]}],"responses":{"200":{"description":"The most recent jobs for this resource type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"},"example":{"data":[]}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}},"post":{"tags":["Translations"],"summary":"Create a subtitle translation","description":"Queues a subtitle or text translation. URL, inline source_text, and raw uploads accept VTT, SRT, TXT, and Subtly JSON; to translate audio or video, first create a transcription, then pass its completed job ID as source_job_id. The source_job_id must have an available VTT artifact in this API key's workspace. Use source and target language codes from GET /api/v1/languages. Quality and Fast share the same catalog; translation does not support auto-detection. URL and inline inputs require source_language; source-job requests default to the transcription's language. The source language cannot also be a target. Rates are Quality: $10.00 per 1M source characters per target language; Fast: $5.00 per 1M source characters per target language. Each target language has a 225-character minimum; only targets with successful output are charged. Count Unicode code points in source caption text, including spaces and punctuation. Timestamps, cue IDs, and formatting do not count. For timed subtitles, HTML entities are decoded before counting, and cue boundaries add no characters. Untimed text counts literal Unicode code points within each paragraph; blank paragraph separators do not count. JSON requests are limited to 1 MiB; raw subtitle/text uploads are limited to 10 MiB. Untimed text supports txt and json outputs only. JSON requests use an optional Idempotency-Key header; source_url, source_text, and raw uploads require it. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"createTranslation","security":[{"BearerApiKey":[]}],"parameters":[{"name":"X-Caption-Webhook-Delivery","in":"header","required":false,"description":"Set to suppress to disable all callbacks for this job. Otherwise, subscriptions belong to the authenticated API key's integration. The choice is captured at acceptance and must stay the same on idempotent retries. Clients cannot choose another integration.","schema":{"type":"string","enum":["suppress"]}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional for JSON requests. Required when `filename` selects raw upload mode, so an interrupted upload can be retried safely.","schema":{"type":"string","minLength":1}},{"name":"filename","in":"query","required":false,"description":"Include this to select raw streaming upload mode, for example filename=captions.vtt. The value becomes the uploaded filename; omit it when sending JSON. Idempotency-Key is required when filename is present.","schema":{"type":"string","minLength":1}},{"name":"language","in":"query","required":false,"description":"Source subtitle language from GET /api/v1/languages. Defaults to en. auto-detection is not available, and the source language cannot be a target.","schema":{"default":"en","type":"string","enum":["ar","bg","bn","ca","cs","da","de","el","en","es","et","fa","fi","fil","fr","gu","he","hi","hr","hu","id","is","it","ja","kn","ko","lt","lv","ml","mr","nl","no","pa","pl","pt","ro","ru","sk","sl","sr","sv","sw","ta","te","th","tr","uk","ur","vi","zh-CN","zh-TW","zu"],"description":"Source subtitle language from GET /api/v1/languages. Defaults to en. auto-detection is not available, and the source language cannot be a target.","x-supported-languages":{"models":[{"id":"google/translategemma-27b-it","label":"Quality"},{"id":"google/translategemma-12b-it","label":"Fast"}],"values":[{"code":"ar","name":"Arabic"},{"code":"bn","name":"Bengali"},{"code":"bg","name":"Bulgarian"},{"code":"ca","name":"Catalan"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fil","name":"Filipino"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"kn","name":"Kannada"},{"code":"ko","name":"Korean"},{"code":"lv","name":"Latvian"},{"code":"lt","name":"Lithuanian"},{"code":"ml","name":"Malayalam"},{"code":"mr","name":"Marathi"},{"code":"no","name":"Norwegian"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sr","name":"Serbian"},{"code":"zh-CN","name":"Simplified Chinese"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"es","name":"Spanish"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"ta","name":"Tamil"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"zh-TW","name":"Traditional Chinese"},{"code":"tr","name":"Turkish"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"vi","name":"Vietnamese"},{"code":"zu","name":"Zulu"}],"auto_detect":false}}},{"name":"target_languages","in":"query","required":false,"description":"One or more target language codes from GET /api/v1/languages. The source language cannot be included. Defaults to `zh-CN,es,hi,de`.","style":"form","explode":false,"schema":{"default":["zh-CN","es","hi","de"],"minItems":1,"type":"array","items":{"type":"string","enum":["ar","bg","bn","ca","cs","da","de","el","en","es","et","fa","fi","fil","fr","gu","he","hi","hr","hu","id","is","it","ja","kn","ko","lt","lv","ml","mr","nl","no","pa","pl","pt","ro","ru","sk","sl","sr","sv","sw","ta","te","th","tr","uk","ur","vi","zh-CN","zh-TW","zu"]},"description":"One or more target language codes from GET /api/v1/languages. The source language cannot be included.","x-supported-languages":{"models":[{"id":"google/translategemma-27b-it","label":"Quality"},{"id":"google/translategemma-12b-it","label":"Fast"}],"values":[{"code":"ar","name":"Arabic"},{"code":"bn","name":"Bengali"},{"code":"bg","name":"Bulgarian"},{"code":"ca","name":"Catalan"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fil","name":"Filipino"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"kn","name":"Kannada"},{"code":"ko","name":"Korean"},{"code":"lv","name":"Latvian"},{"code":"lt","name":"Lithuanian"},{"code":"ml","name":"Malayalam"},{"code":"mr","name":"Marathi"},{"code":"no","name":"Norwegian"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sr","name":"Serbian"},{"code":"zh-CN","name":"Simplified Chinese"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"es","name":"Spanish"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"ta","name":"Tamil"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"zh-TW","name":"Traditional Chinese"},{"code":"tr","name":"Turkish"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"vi","name":"Vietnamese"},{"code":"zu","name":"Zulu"}],"auto_detect":false}}},{"name":"formats","in":"query","required":false,"description":"Comma-separated output formats. Defaults to `vtt`; available formats are `vtt`, `srt`, `json`, and `txt`.","style":"form","explode":false,"schema":{"default":["vtt"],"minItems":1,"type":"array","items":{"type":"string","enum":["vtt","srt","json","txt"]}}},{"name":"model","in":"query","required":false,"description":"Translation model. `google/translategemma-12b-it` is Fast (the default); `google/translategemma-27b-it` is Quality.","schema":{"default":"google/translategemma-12b-it","type":"string","enum":["google/translategemma-27b-it","google/translategemma-12b-it"]}}],"requestBody":{"required":true,"description":"Send a completed transcription's source_job_id, or exactly one source_url/source_text with input_format and source_language. source_job_id must refer to a completed transcription with an available VTT artifact in this workspace. URL and inline inputs accept vtt, srt, json, or txt (default vtt). Inline text is limited to 32 KiB UTF-8. URL and inline requests require Idempotency-Key. Results are private and expire 24 hours after completion. URL output defaults are json for JSON, txt for TXT, and vtt for SRT/VTT. Source-job requests default to vtt. When filename is present, send raw UTF-8 SRT, VTT, TXT, or Subtly JSON bytes, up to 10 MiB. Timed JSON contains segments with numeric start/end seconds and text; untimed JSON contains a text string. Timed sources support all four formats; untimed sources support txt/json only. Targets and formats must be distinct and the source cannot be a target.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"external_id":{"type":"string","maxLength":160},"webhook_url":{"type":"string","format":"uri"},"metadata":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"source_text":{"type":"string","minLength":1,"maxLength":32768},"source_url":{"type":"string","maxLength":4096,"format":"uri"},"input_format":{"default":"vtt","type":"string","enum":["vtt","srt","json","txt"]},"source_language":{"type":"string","enum":["ar","bg","bn","ca","cs","da","de","el","en","es","et","fa","fi","fil","fr","gu","he","hi","hr","hu","id","is","it","ja","kn","ko","lt","lv","ml","mr","nl","no","pa","pl","pt","ro","ru","sk","sl","sr","sv","sw","ta","te","th","tr","uk","ur","vi","zh-CN","zh-TW","zu"],"description":"Optional source subtitle language from GET /api/v1/languages. Defaults to the completed transcription's language.","x-supported-languages":{"models":[{"id":"google/translategemma-27b-it","label":"Quality"},{"id":"google/translategemma-12b-it","label":"Fast"}],"values":[{"code":"ar","name":"Arabic"},{"code":"bn","name":"Bengali"},{"code":"bg","name":"Bulgarian"},{"code":"ca","name":"Catalan"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fil","name":"Filipino"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"kn","name":"Kannada"},{"code":"ko","name":"Korean"},{"code":"lv","name":"Latvian"},{"code":"lt","name":"Lithuanian"},{"code":"ml","name":"Malayalam"},{"code":"mr","name":"Marathi"},{"code":"no","name":"Norwegian"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sr","name":"Serbian"},{"code":"zh-CN","name":"Simplified Chinese"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"es","name":"Spanish"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"ta","name":"Tamil"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"zh-TW","name":"Traditional Chinese"},{"code":"tr","name":"Turkish"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"vi","name":"Vietnamese"},{"code":"zu","name":"Zulu"}],"auto_detect":false}},"target_languages":{"default":["zh-CN","es","hi","de"],"minItems":1,"type":"array","items":{"type":"string","enum":["ar","bg","bn","ca","cs","da","de","el","en","es","et","fa","fi","fil","fr","gu","he","hi","hr","hu","id","is","it","ja","kn","ko","lt","lv","ml","mr","nl","no","pa","pl","pt","ro","ru","sk","sl","sr","sv","sw","ta","te","th","tr","uk","ur","vi","zh-CN","zh-TW","zu"]},"description":"One or more target language codes from GET /api/v1/languages. The source language cannot be included.","x-supported-languages":{"models":[{"id":"google/translategemma-27b-it","label":"Quality"},{"id":"google/translategemma-12b-it","label":"Fast"}],"values":[{"code":"ar","name":"Arabic"},{"code":"bn","name":"Bengali"},{"code":"bg","name":"Bulgarian"},{"code":"ca","name":"Catalan"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fil","name":"Filipino"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"kn","name":"Kannada"},{"code":"ko","name":"Korean"},{"code":"lv","name":"Latvian"},{"code":"lt","name":"Lithuanian"},{"code":"ml","name":"Malayalam"},{"code":"mr","name":"Marathi"},{"code":"no","name":"Norwegian"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sr","name":"Serbian"},{"code":"zh-CN","name":"Simplified Chinese"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"es","name":"Spanish"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"ta","name":"Tamil"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"zh-TW","name":"Traditional Chinese"},{"code":"tr","name":"Turkish"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"vi","name":"Vietnamese"},{"code":"zu","name":"Zulu"}],"auto_detect":false}},"model":{"default":"google/translategemma-12b-it","type":"string","enum":["google/translategemma-27b-it","google/translategemma-12b-it"]},"title":{"type":"string","minLength":1,"maxLength":160},"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["vtt","srt","json","txt"]}}},"required":["source_language"],"additionalProperties":false},{"type":"object","properties":{"source_job_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"model":{"default":"google/translategemma-12b-it","type":"string","enum":["google/translategemma-27b-it","google/translategemma-12b-it"]},"source_language":{"type":"string","enum":["ar","bg","bn","ca","cs","da","de","el","en","es","et","fa","fi","fil","fr","gu","he","hi","hr","hu","id","is","it","ja","kn","ko","lt","lv","ml","mr","nl","no","pa","pl","pt","ro","ru","sk","sl","sr","sv","sw","ta","te","th","tr","uk","ur","vi","zh-CN","zh-TW","zu"],"description":"Optional source subtitle language from GET /api/v1/languages. Defaults to the completed transcription's language.","x-supported-languages":{"models":[{"id":"google/translategemma-27b-it","label":"Quality"},{"id":"google/translategemma-12b-it","label":"Fast"}],"values":[{"code":"ar","name":"Arabic"},{"code":"bn","name":"Bengali"},{"code":"bg","name":"Bulgarian"},{"code":"ca","name":"Catalan"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fil","name":"Filipino"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"kn","name":"Kannada"},{"code":"ko","name":"Korean"},{"code":"lv","name":"Latvian"},{"code":"lt","name":"Lithuanian"},{"code":"ml","name":"Malayalam"},{"code":"mr","name":"Marathi"},{"code":"no","name":"Norwegian"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sr","name":"Serbian"},{"code":"zh-CN","name":"Simplified Chinese"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"es","name":"Spanish"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"ta","name":"Tamil"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"zh-TW","name":"Traditional Chinese"},{"code":"tr","name":"Turkish"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"vi","name":"Vietnamese"},{"code":"zu","name":"Zulu"}],"auto_detect":false}},"target_languages":{"default":["zh-CN","es","hi","de"],"minItems":1,"type":"array","items":{"type":"string","enum":["ar","bg","bn","ca","cs","da","de","el","en","es","et","fa","fi","fil","fr","gu","he","hi","hr","hu","id","is","it","ja","kn","ko","lt","lv","ml","mr","nl","no","pa","pl","pt","ro","ru","sk","sl","sr","sv","sw","ta","te","th","tr","uk","ur","vi","zh-CN","zh-TW","zu"]},"description":"One or more target language codes from GET /api/v1/languages. The source language cannot be included.","x-supported-languages":{"models":[{"id":"google/translategemma-27b-it","label":"Quality"},{"id":"google/translategemma-12b-it","label":"Fast"}],"values":[{"code":"ar","name":"Arabic"},{"code":"bn","name":"Bengali"},{"code":"bg","name":"Bulgarian"},{"code":"ca","name":"Catalan"},{"code":"hr","name":"Croatian"},{"code":"cs","name":"Czech"},{"code":"da","name":"Danish"},{"code":"nl","name":"Dutch"},{"code":"en","name":"English"},{"code":"et","name":"Estonian"},{"code":"fil","name":"Filipino"},{"code":"fi","name":"Finnish"},{"code":"fr","name":"French"},{"code":"de","name":"German"},{"code":"el","name":"Greek"},{"code":"gu","name":"Gujarati"},{"code":"he","name":"Hebrew"},{"code":"hi","name":"Hindi"},{"code":"hu","name":"Hungarian"},{"code":"is","name":"Icelandic"},{"code":"id","name":"Indonesian"},{"code":"it","name":"Italian"},{"code":"ja","name":"Japanese"},{"code":"kn","name":"Kannada"},{"code":"ko","name":"Korean"},{"code":"lv","name":"Latvian"},{"code":"lt","name":"Lithuanian"},{"code":"ml","name":"Malayalam"},{"code":"mr","name":"Marathi"},{"code":"no","name":"Norwegian"},{"code":"fa","name":"Persian"},{"code":"pl","name":"Polish"},{"code":"pt","name":"Portuguese"},{"code":"pa","name":"Punjabi"},{"code":"ro","name":"Romanian"},{"code":"ru","name":"Russian"},{"code":"sr","name":"Serbian"},{"code":"zh-CN","name":"Simplified Chinese"},{"code":"sk","name":"Slovak"},{"code":"sl","name":"Slovenian"},{"code":"es","name":"Spanish"},{"code":"sw","name":"Swahili"},{"code":"sv","name":"Swedish"},{"code":"ta","name":"Tamil"},{"code":"te","name":"Telugu"},{"code":"th","name":"Thai"},{"code":"zh-TW","name":"Traditional Chinese"},{"code":"tr","name":"Turkish"},{"code":"uk","name":"Ukrainian"},{"code":"ur","name":"Urdu"},{"code":"vi","name":"Vietnamese"},{"code":"zu","name":"Zulu"}],"auto_detect":false}},"formats":{"default":["vtt"],"minItems":1,"type":"array","items":{"type":"string","enum":["vtt","srt","json","txt"]}},"title":{"type":"string","minLength":1,"maxLength":160}},"required":["source_job_id"],"additionalProperties":false}]},"examples":{"presignedUrls":{"summary":"Import a source URL","description":"Placeholder values for documentation only.","value":{"title":"Interview subtitles","source_url":"https://storage.example.test/interview.vtt?signature=example","source_language":"en","target_languages":["de","es"],"formats":["vtt","srt"]}},"sourceJob":{"summary":"Translate a completed transcription","description":"Placeholder values for documentation only.","value":{"source_job_id":"00000000-0000-4000-8000-000000000002","source_language":"en","target_languages":["de","es"],"formats":["vtt","srt"]}},"inlineText":{"summary":"Translate inline text","description":"Placeholder values for documentation only.","value":{"source_text":"Hello world.","input_format":"txt","source_language":"en","target_languages":["fr"],"formats":["txt","json"]}},"managedSourceUrl":{"summary":"Translate a URL with managed downloads","description":"Placeholder values for documentation only.","value":{"source_url":"https://media.example.com/captions.srt","input_format":"srt","source_language":"en","target_languages":["fr"],"formats":["srt","vtt","json","txt"]}}}},"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"text/vtt":{"schema":{"type":"string","format":"binary"}}}},"responses":{"202":{"description":"The job was accepted for asynchronous processing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptedJob"},"example":{"id":"b97e5f48-778a-4891-913f-2c5e3a9c0001","status":"accepted"}}}},"400":{"description":"The JSON body is invalid, a required upload idempotency key is missing, or the request fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"402":{"description":"The workspace does not have enough prepaid USD credits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"413":{"description":"The JSON body exceeds 1 MiB, the media upload exceeds 4 GiB, or the subtitle/text upload exceeds 10 MiB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"415":{"description":"Raw upload mode does not accept multipart form data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting, billing configuration, or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}}},"/api/v1/translations/{id}":{"get":{"tags":["Translations"],"summary":"Get a translation job","description":"Returns a job and its recent progress events, non-expired artifacts, and webhook delivery attempts. Results are private downloads and expire 24 hours after completion. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"getTranslation","security":[{"BearerApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The job UUID.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The job detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDetail"}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"404":{"description":"No matching job exists in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}},"delete":{"tags":["Translations"],"summary":"Cancel a translation job","description":"Requests cancellation. A terminal or already-finished job returns 409 ALREADY_FINISHED; a cancellation still pending with the worker returns 202. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"cancelTranslation","security":[{"BearerApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The job UUID.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Cancellation was recorded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"Cancellation is still pending with the worker.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptedJob"},"example":{"id":"b97e5f48-778a-4891-913f-2c5e3a9c0001","status":"processing"}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"404":{"description":"No matching job exists in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"409":{"description":"The job is already finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}}},"/api/v1/translations/{id}/artifacts/{artifactId}":{"get":{"tags":["Translations"],"summary":"Download a translation artifact","description":"Streams an unexpired managed artifact as a file download. A 404 means the job or artifact is missing, belongs to a different workspace, or has expired. Bearer API keys are limited to 120 read requests per minute and 20 create or cancel requests per minute. A `429` response includes `Retry-After`; a `503` can indicate the limiter is unavailable.","operationId":"downloadTranslationArtifact","security":[{"BearerApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The job UUID.","schema":{"type":"string","format":"uuid"}},{"name":"artifactId","in":"path","required":true,"description":"The artifact UUID from the job detail.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The artifact file. The response includes Content-Disposition and the stored content type.","headers":{"Content-Disposition":{"schema":{"type":"string"}}},"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"text/plain":{"schema":{"type":"string","format":"binary"}},"text/vtt":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"The bearer API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"404":{"description":"The job or artifact does not exist or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"409":{"description":"Managed artifact download is unavailable for this job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"429":{"description":"The API key exceeded its per-minute limit.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"502":{"description":"The storage service failed to return the artifact.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}},"503":{"description":"Rate limiting or a required service is temporarily unavailable.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"INVALID_REQUEST"}}}}}}}},"webhooks":{"jobEvent":{"post":{"summary":"Receive a terminal job event","description":"The configured REST `webhook_url` or enabled endpoint belonging to the API key’s integration receives subscribed completed, failed, or cancelled events. Destinations are captured when the job is accepted. Website and hosted MCP jobs never send these callbacks. X-Caption-Webhook-Delivery: suppress disables all callbacks for a REST job. Paused, deleted, or changed destinations stop pending delivery attempts. Return any 2xx status within 10 seconds. Failed deliveries are retried up to three total attempts.","parameters":[{"name":"x-caption-delivery","in":"header","required":true,"description":"Unique delivery UUID.","schema":{"type":"string","format":"uuid"}},{"name":"x-caption-timestamp","in":"header","required":true,"description":"Unix timestamp in seconds used for the signature.","schema":{"type":"string","pattern":"^[0-9]+$"}},{"name":"x-caption-signature","in":"header","required":true,"description":"`v1=` followed by a hexadecimal HMAC-SHA256 signature of `timestamp.rawRequestBody`. A job-specific `webhook_url` uses the workspace webhook secret; an integration webhook endpoint uses that endpoint's signing secret. Verify using the exact raw request bytes.","schema":{"type":"string","pattern":"^v1=[0-9a-f]{64}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"example":{"id":"98e53d9e-4772-4010-93eb-21f62c6f0001","type":"transcription.completed","created_at":"2026-10-12T12:00:00.000Z","data":{"job":{"id":"b97e5f48-778a-4891-913f-2c5e3a9c0001","title":"Team interview","external_id":null,"status":"completed","kind":"transcription","language":"en","target_languages":[],"formats":["srt","vtt"],"metadata":{},"created_at":"2026-10-12T11:55:00.000Z","started_at":"2026-10-12T11:55:03.000Z","completed_at":"2026-10-12T12:00:00.000Z"},"metrics":{"duration_seconds":300,"execution_seconds":42},"artifacts":[]}}}}},"responses":{"200":{"description":"The event was acknowledged."}}}}},"components":{"securitySchemes":{"BearerApiKey":{"type":"http","scheme":"bearer","bearerFormat":"Subtly API key","description":"Create a workspace API key in Subtly, then send it as `Authorization: Bearer <API_KEY>`. Keys are tenant-scoped. The public API does not enforce per-key scopes."}},"schemas":{"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"retry_after":{"type":"integer","minimum":1},"details":{"type":"object","additionalProperties":true}},"additionalProperties":true},"AcceptedJob":{"type":"object","required":["id","status"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["accepted","preparing","queued","processing","uploading","completed","failed","cancelled"]}}},"Job":{"type":"object","required":["id","tenantId","storageConnectionId","idempotencyKey","kind","title","externalId","playlistKey","outputPrefix","formats","model","language","targetLanguages","targetResults","status","billingRequired","phase","progress","runpodJobId","remoteCancellationPending","remoteCancellationAttempts","remoteCancellationNextAttemptAt","callbackUrl","temporary","metadata","durationSeconds","executionSeconds","queueDelayMs","realtimeFactor","gpu","estimatedCostUsd","errorCode","errorMessage","createdAt","startedAt","completedAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid"},"tenantId":{"type":"string","format":"uuid"},"storageConnectionId":{"type":["string","null"],"format":"uuid"},"idempotencyKey":{"type":"string"},"kind":{"type":"string","enum":["transcription","translation"]},"title":{"type":"string"},"externalId":{"type":["string","null"]},"playlistKey":{"type":["string","null"]},"outputPrefix":{"type":["string","null"]},"formats":{"type":"array","items":{"type":"string","enum":["vtt","srt","json","txt"]}},"model":{"type":"string","enum":["large-v3","large-v3-turbo","google/translategemma-12b-it","google/translategemma-27b-it"]},"language":{"type":"string"},"targetLanguages":{"type":"array","items":{"type":"string"}},"targetResults":{"type":"object","additionalProperties":true},"status":{"type":"string","enum":["accepted","preparing","queued","processing","uploading","completed","failed","cancelled"]},"billingRequired":{"type":"boolean"},"phase":{"type":"string"},"progress":{"type":"integer","minimum":0,"maximum":100},"runpodJobId":{"type":["string","null"]},"remoteCancellationPending":{"type":"boolean"},"remoteCancellationAttempts":{"type":"integer"},"remoteCancellationNextAttemptAt":{"type":["string","null"],"format":"date-time"},"callbackUrl":{"type":["string","null"],"format":"uri"},"temporary":{"type":"boolean"},"metadata":{"type":"object","additionalProperties":true},"durationSeconds":{"type":["number","null"]},"executionSeconds":{"type":["number","null"]},"queueDelayMs":{"type":["integer","null"]},"realtimeFactor":{"type":["number","null"]},"gpu":{"type":["string","null"]},"estimatedCostUsd":{"type":["number","null"]},"errorCode":{"type":["string","null"]},"errorMessage":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":["string","null"],"format":"date-time"},"completedAt":{"type":["string","null"],"format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"JobEvent":{"type":"object","required":["id","eventId","jobId","phase","progress","message","metrics","createdAt"],"properties":{"id":{"type":"integer"},"eventId":{"type":["string","null"]},"jobId":{"type":"string","format":"uuid"},"phase":{"type":"string"},"progress":{"type":"integer","minimum":0,"maximum":100},"message":{"type":"string"},"metrics":{"type":"object","additionalProperties":true},"createdAt":{"type":"string","format":"date-time"}}},"Artifact":{"type":"object","required":["id","jobId","format","language","bucket","key","bytes","checksum","expiresAt","protectedUntil","cleanupAttempts","cleanupNextAttemptAt","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"jobId":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["vtt","srt","json","txt"]},"language":{"type":"string","description":"`source` for original transcription output; a target language for translated output."},"bucket":{"type":"string"},"key":{"type":"string"},"bytes":{"type":["integer","null"]},"checksum":{"type":["string","null"]},"expiresAt":{"type":["string","null"],"format":"date-time"},"protectedUntil":{"type":["string","null"],"format":"date-time"},"cleanupAttempts":{"type":"integer"},"cleanupNextAttemptAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"WebhookDelivery":{"type":"object","required":["id","jobId","tenantId","webhookEndpointId","eventType","url","status","attempts","lastStatusCode","lastError","nextAttemptAt","lockedAt","payload","deliveredAt","createdAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid"},"jobId":{"type":"string","format":"uuid"},"tenantId":{"type":"string","format":"uuid"},"webhookEndpointId":{"type":["string","null"],"format":"uuid"},"eventType":{"type":"string","enum":["transcription.completed","transcription.failed","transcription.cancelled","translation.completed","translation.failed","translation.cancelled"]},"url":{"type":"string","format":"uri"},"status":{"type":"string"},"attempts":{"type":"integer"},"lastStatusCode":{"type":["integer","null"]},"lastError":{"type":["string","null"]},"nextAttemptAt":{"type":"string","format":"date-time"},"lockedAt":{"type":["string","null"],"format":"date-time"},"payload":{"type":"object","additionalProperties":true},"deliveredAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"JobDetail":{"type":"object","required":["id","tenantId","storageConnectionId","idempotencyKey","kind","title","externalId","playlistKey","outputPrefix","formats","model","language","targetLanguages","targetResults","status","billingRequired","phase","progress","runpodJobId","remoteCancellationPending","remoteCancellationAttempts","remoteCancellationNextAttemptAt","callbackUrl","temporary","metadata","durationSeconds","executionSeconds","queueDelayMs","realtimeFactor","gpu","estimatedCostUsd","errorCode","errorMessage","createdAt","startedAt","completedAt","updatedAt","sourceCharacters","events","artifacts","webhookDeliveries"],"properties":{"id":{"type":"string","format":"uuid"},"tenantId":{"type":"string","format":"uuid"},"storageConnectionId":{"type":["string","null"],"format":"uuid"},"idempotencyKey":{"type":"string"},"kind":{"type":"string","enum":["transcription","translation"]},"title":{"type":"string"},"externalId":{"type":["string","null"]},"playlistKey":{"type":["string","null"]},"outputPrefix":{"type":["string","null"]},"formats":{"type":"array","items":{"type":"string","enum":["vtt","srt","json","txt"]}},"model":{"type":"string","enum":["large-v3","large-v3-turbo","google/translategemma-12b-it","google/translategemma-27b-it"]},"language":{"type":"string"},"targetLanguages":{"type":"array","items":{"type":"string"}},"targetResults":{"type":"object","additionalProperties":true},"status":{"type":"string","enum":["accepted","preparing","queued","processing","uploading","completed","failed","cancelled"]},"billingRequired":{"type":"boolean"},"phase":{"type":"string"},"progress":{"type":"integer","minimum":0,"maximum":100},"runpodJobId":{"type":["string","null"]},"remoteCancellationPending":{"type":"boolean"},"remoteCancellationAttempts":{"type":"integer"},"remoteCancellationNextAttemptAt":{"type":["string","null"],"format":"date-time"},"callbackUrl":{"type":["string","null"],"format":"uri"},"temporary":{"type":"boolean"},"metadata":{"type":"object","additionalProperties":true},"durationSeconds":{"type":["number","null"]},"executionSeconds":{"type":["number","null"]},"queueDelayMs":{"type":["integer","null"]},"realtimeFactor":{"type":["number","null"]},"gpu":{"type":["string","null"]},"estimatedCostUsd":{"type":["number","null"]},"errorCode":{"type":["string","null"]},"errorMessage":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":["string","null"],"format":"date-time"},"completedAt":{"type":["string","null"],"format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"sourceCharacters":{"type":["integer","null"],"minimum":0,"maximum":10485760},"events":{"type":"array","items":{"$ref":"#/components/schemas/JobEvent"}},"artifacts":{"type":"array","items":{"$ref":"#/components/schemas/Artifact"}},"webhookDeliveries":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}}},"JobList":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}}}},"SupportedLanguages":{"type":"object","required":["transcription","translation"],"properties":{"transcription":{"type":"object","required":["description","models","default_language","auto_detect","languages"],"properties":{"description":{"type":"string"},"models":{"type":"array","items":{"type":"object","required":["id","label"],"properties":{"id":{"type":"string","enum":["large-v3","large-v3-turbo"]},"label":{"type":"string","enum":["Whisper Large v3","Whisper Large v3 Turbo"]}}}},"default_language":{"type":"string","enum":["auto"]},"auto_detect":{"type":"boolean","const":true},"languages":{"type":"array","items":{"type":"object","required":["code","name"],"properties":{"code":{"type":"string","enum":["af","sq","am","ar","hy","as","az","ba","eu","be","bn","bs","br","bg","yue","ca","zh","hr","cs","da","nl","en","et","fo","fi","fr","gl","ka","de","el","gu","ht","ha","haw","he","hi","hu","is","id","it","ja","jw","kn","kk","km","ko","lo","la","lv","ln","lt","lb","mk","mg","ms","ml","mt","mi","mr","mn","my","ne","no","nn","oc","ps","fa","pl","pt","pa","ro","ru","sa","sr","sn","sd","si","sk","sl","so","es","su","sw","sv","tl","tg","ta","tt","te","th","bo","tr","tk","uk","ur","uz","vi","cy","yi","yo"]},"name":{"type":"string","enum":["Afrikaans","Albanian","Amharic","Arabic","Armenian","Assamese","Azerbaijani","Bashkir","Basque","Belarusian","Bengali","Bosnian","Breton","Bulgarian","Cantonese","Catalan","Chinese","Croatian","Czech","Danish","Dutch","English","Estonian","Faroese","Finnish","French","Galician","Georgian","German","Greek","Gujarati","Haitian Creole","Hausa","Hawaiian","Hebrew","Hindi","Hungarian","Icelandic","Indonesian","Italian","Japanese","Javanese","Kannada","Kazakh","Khmer","Korean","Lao","Latin","Latvian","Lingala","Lithuanian","Luxembourgish","Macedonian","Malagasy","Malay","Malayalam","Maltese","Maori","Marathi","Mongolian","Myanmar (Burmese)","Nepali","Norwegian","Norwegian Nynorsk","Occitan","Pashto","Persian","Polish","Portuguese","Punjabi","Romanian","Russian","Sanskrit","Serbian","Shona","Sindhi","Sinhala","Slovak","Slovenian","Somali","Spanish","Sundanese","Swahili","Swedish","Tagalog","Tajik","Tamil","Tatar","Telugu","Thai","Tibetan","Turkish","Turkmen","Ukrainian","Urdu","Uzbek","Vietnamese","Welsh","Yiddish","Yoruba"]}}}}}},"translation":{"type":"object","required":["description","models","default_source_language","auto_detect","source_must_differ_from_targets","languages"],"properties":{"description":{"type":"string"},"models":{"type":"array","items":{"type":"object","required":["id","label"],"properties":{"id":{"type":"string","enum":["google/translategemma-27b-it","google/translategemma-12b-it"]},"label":{"type":"string","enum":["Quality","Fast"]}}}},"default_source_language":{"type":"string","enum":["en"]},"source_must_differ_from_targets":{"type":"boolean","const":true},"auto_detect":{"type":"boolean","const":false},"languages":{"type":"array","items":{"type":"object","required":["code","name"],"properties":{"code":{"type":"string","enum":["ar","bn","bg","ca","hr","cs","da","nl","en","et","fil","fi","fr","de","el","gu","he","hi","hu","is","id","it","ja","kn","ko","lv","lt","ml","mr","no","fa","pl","pt","pa","ro","ru","sr","zh-CN","sk","sl","es","sw","sv","ta","te","th","zh-TW","tr","uk","ur","vi","zu"]},"name":{"type":"string","enum":["Arabic","Bengali","Bulgarian","Catalan","Croatian","Czech","Danish","Dutch","English","Estonian","Filipino","Finnish","French","German","Greek","Gujarati","Hebrew","Hindi","Hungarian","Icelandic","Indonesian","Italian","Japanese","Kannada","Korean","Latvian","Lithuanian","Malayalam","Marathi","Norwegian","Persian","Polish","Portuguese","Punjabi","Romanian","Russian","Serbian","Simplified Chinese","Slovak","Slovenian","Spanish","Swahili","Swedish","Tamil","Telugu","Thai","Traditional Chinese","Turkish","Ukrainian","Urdu","Vietnamese","Zulu"]}}}}}}}},"WebhookEvent":{"oneOf":[{"type":"object","required":["id","type","created_at","data"],"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["transcription.completed","translation.completed"]},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","required":["job","metrics","artifacts"],"properties":{"job":{"type":"object","required":["id","title","external_id","status","kind","language","target_languages","formats","metadata","created_at","started_at","completed_at"],"properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"external_id":{"type":["string","null"]},"status":{"type":"string","enum":["accepted","preparing","queued","processing","uploading","completed","failed","cancelled"]},"kind":{"type":"string","enum":["transcription","translation"]},"language":{"type":"string"},"target_languages":{"type":"array","items":{"type":"string"}},"formats":{"type":"array","items":{"type":"string","enum":["vtt","srt","json","txt"]}},"metadata":{"type":"object","additionalProperties":true},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time"}}},"metrics":{"type":"object","required":["duration_seconds","execution_seconds"],"properties":{"duration_seconds":{"type":["number","null"]},"execution_seconds":{"type":["number","null"]}}},"artifacts":{"type":"array","items":{"type":"object","required":["id","format","language","bucket","key","bytes","checksum"],"properties":{"id":{"type":"string","format":"uuid"},"format":{"type":"string","enum":["vtt","srt","json","txt"]},"language":{"type":"string"},"bucket":{"type":"string"},"key":{"type":"string"},"bytes":{"type":["integer","null"]},"checksum":{"type":["string","null"]}}}},"target_results":{"type":"object","additionalProperties":true}}}}},{"type":"object","required":["id","type","created_at","data"],"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["transcription.failed","translation.failed"]},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","required":["job","error"],"properties":{"job":{"type":"object","required":["id","title","external_id","status","kind","language","target_languages","formats","metadata","created_at","started_at","failed_at"],"properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"external_id":{"type":["string","null"]},"status":{"type":"string","enum":["accepted","preparing","queued","processing","uploading","completed","failed","cancelled"]},"kind":{"type":"string","enum":["transcription","translation"]},"language":{"type":"string"},"target_languages":{"type":"array","items":{"type":"string"}},"formats":{"type":"array","items":{"type":"string","enum":["vtt","srt","json","txt"]}},"metadata":{"type":"object","additionalProperties":true},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"failed_at":{"type":["string","null"],"format":"date-time"}}},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},{"type":"object","required":["id","type","created_at","data"],"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["transcription.cancelled","translation.cancelled"]},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","required":["job"],"properties":{"job":{"type":"object","required":["id","title","external_id","status","kind","language","target_languages","formats","metadata","created_at","started_at","cancelled_at"],"properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"external_id":{"type":["string","null"]},"status":{"type":"string","enum":["accepted","preparing","queued","processing","uploading","completed","failed","cancelled"]},"kind":{"type":"string","enum":["transcription","translation"]},"language":{"type":"string"},"target_languages":{"type":"array","items":{"type":"string"}},"formats":{"type":"array","items":{"type":"string","enum":["vtt","srt","json","txt"]}},"metadata":{"type":"object","additionalProperties":true},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"cancelled_at":{"type":["string","null"],"format":"date-time"}}}}}}}],"discriminator":{"propertyName":"type"}}}}}