{"openapi":"3.1.0","info":{"title":"Voicer API v2","description":"Пользовательский HTTP API v2. Авторизация: `Authorization: Bearer <token>`. Создать задачу: `POST /v2/tasks`, активные: `GET /v2/tasks`, статус: `GET /v2/tasks/{task_id}`, скачать: `GET /v2/tasks/{task_id}/file`. Справочник: `/docs`. Для нейросети одним файлом: `/docs.json`.","version":"2.0.0-dev"},"servers":[{"url":"https://voicer.mat3u.com","description":"Production"}],"paths":{"/":{"get":{"tags":["docs"],"summary":"Root","description":"Базовая информация о сервисе и главные пути v2. Без обращения к БД.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceInfo"}}}}}}},"/v2/auth/me":{"get":{"tags":["auth"],"summary":"Me","description":"Кому принадлежит токен из заголовка Authorization.","operationId":"me_v2_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}}},"security":[{"HTTPBearer":[]}]}},"/v2/billing/tariffs":{"get":{"tags":["billing"],"summary":"List Tariffs","description":"Действующие тарифы и их лимиты. Без авторизации.","operationId":"list_tariffs_v2_billing_tariffs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Tariff"},"type":"array","title":"Response List Tariffs V2 Billing Tariffs Get"}}}}}}},"/v2/billing/me":{"get":{"tags":["billing"],"summary":"My Billing","description":"Подписка, тариф и баланс символов лицензии (API-токена) из заголовка Authorization.","operationId":"my_billing_v2_billing_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSummary"}}}}},"security":[{"HTTPBearer":[]}]}},"/v2/billing/stats":{"get":{"tags":["billing"],"summary":"My Stats","description":"Баланс лицензии, счётчики задач и квота клонов. Эталон — `GET /api/v1/user/stats`.","operationId":"my_stats_v2_billing_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageStats"}}}},"404":{"description":"Пользователь не найден"}},"security":[{"HTTPBearer":[]}]}},"/v2/voices/elevenlabs":{"get":{"tags":["voices"],"summary":"Elevenlabs Voices","description":"Стандартные голоса ElevenLabs для задачи с `engine=original`.","operationId":"elevenlabs_voices_v2_voices_elevenlabs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ElevenLabsVoice"},"type":"array","title":"Response Elevenlabs Voices V2 Voices Elevenlabs Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v2/voices/elevenlabs/search":{"get":{"tags":["voices"],"summary":"Elevenlabs Search","description":"Бесплатные голоса библиотеки ElevenLabs — источник для клонирования в Cartesia.\n\nЕсли запрос похож на ID голоса, голос с этим ID идёт первым.","operationId":"elevenlabs_search_v2_voices_elevenlabs_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S","description":"Имя, описание или ID","title":"Q"},"description":"Имя, описание или ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibrarySearch"}}}},"503":{"description":"ElevenLabs не ответил. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/voices/elevenlabs/featured":{"get":{"tags":["voices"],"summary":"Elevenlabs Featured","description":"Подборка бесплатных русских голосов ElevenLabs высокого качества.","operationId":"elevenlabs_featured_v2_voices_elevenlabs_featured_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"description":"Номер страницы с 0","default":0,"title":"Page"},"description":"Номер страницы с 0"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryPage"}}}},"503":{"description":"ElevenLabs не ответил. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/voices/models":{"get":{"tags":["voices"],"summary":"Models","description":"Модели для `model_id` задачи: по движкам, модель по умолчанию — первая.","operationId":"models_v2_voices_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Models"}}}}},"security":[{"HTTPBearer":[]}]}},"/v2/voices/cartesia/standard":{"get":{"tags":["voices"],"summary":"Cartesia Standard","description":"Библиотека стандартных голосов Cartesia.","operationId":"cartesia_standard_v2_voices_cartesia_standard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"description":"Код языка, например ru или en-US","title":"Language"},"description":"Код языка, например ru или en-US"},{"name":"gender","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}],"title":"Gender"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Поиск по имени и описанию","title":"Q"},"description":"Поиск по имени и описанию"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"description":"Номер страницы с 0","default":0,"title":"Page"},"description":"Номер страницы с 0"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoicePage"}}}},"402":{"description":"Нет подписки или символов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Пользователь заблокирован или движок cartesia закрыт тарифом. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/voices/cartesia/catalog":{"get":{"tags":["voices"],"summary":"Cartesia Catalog","description":"Общий каталог клонов голосов ElevenLabs. Фильтр языка — код клона Cartesia.","operationId":"cartesia_catalog_v2_voices_cartesia_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"description":"Код языка, например ru или en-US","title":"Language"},"description":"Код языка, например ru или en-US"},{"name":"paid","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true — клоны платных голосов ElevenLabs, false — бесплатных","title":"Paid"},"description":"true — клоны платных голосов ElevenLabs, false — бесплатных"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"description":"Номер страницы с 0","default":0,"title":"Page"},"description":"Номер страницы с 0"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoicePage"}}}},"402":{"description":"Нет подписки или символов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Пользователь заблокирован или движок cartesia закрыт тарифом. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/voices/cartesia":{"get":{"tags":["voices"],"summary":"Cartesia Mixed","description":"Свои клоны и общий каталог одним списком. Эталон — `GET /api/v1/cartesia/voices`.","operationId":"cartesia_mixed_v2_voices_cartesia_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"description":"Код языка, например ru или en-US","title":"Language"},"description":"Код языка, например ru или en-US"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"enum":["user","elevenlabs"],"type":"string"},{"type":"null"}],"description":"user — свои клоны, elevenlabs — общий каталог","title":"Source"},"description":"user — свои клоны, elevenlabs — общий каталог"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Поиск по имени и ID","title":"Q"},"description":"Поиск по имени и ID"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"description":"Номер страницы с 0","default":0,"title":"Page"},"description":"Номер страницы с 0"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoicePage"}}}},"402":{"description":"Нет подписки или символов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Пользователь заблокирован или движок cartesia закрыт тарифом. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/voices/cartesia/mine":{"get":{"tags":["voices"],"summary":"Cartesia Mine","description":"Свои клоны и квота клонов тарифа.","operationId":"cartesia_mine_v2_voices_cartesia_mine_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"description":"Код языка, например ru или en-US","title":"Language"},"description":"Код языка, например ru или en-US"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Поиск по имени и ID","title":"Q"},"description":"Поиск по имени и ID"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"description":"Номер страницы с 0","default":0,"title":"Page"},"description":"Номер страницы с 0"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyVoicesPage"}}}},"402":{"description":"Нет подписки или символов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Пользователь заблокирован или движок cartesia закрыт тарифом. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/voices/cartesia/{voice_id}":{"get":{"tags":["voices"],"summary":"Cartesia Voice","description":"Карточка голоса Cartesia: свой или общий клон, либо стандартный голос.","operationId":"cartesia_voice_v2_voices_cartesia__voice_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartesiaVoice"}}}},"402":{"description":"Нет подписки или символов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Пользователь заблокирован или движок cartesia закрыт тарифом. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"404":{"description":"Голоса нет или он чужой. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["cartesia"],"summary":"Delete Clone","description":"Удалить свой клон: сначала в Cartesia, затем из базы.","operationId":"delete_clone_v2_voices_cartesia__voice_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedClone"}}}},"502":{"description":"Cartesia не ответила или отказала. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"503":{"description":"Нет аккаунта Cartesia или прокси. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Клон общего каталога ElevenLabs. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"404":{"description":"Клона нет или он чужой. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/voices/cartesia/clone":{"post":{"tags":["cartesia"],"summary":"Clone Voice","description":"Клонировать голос в Cartesia.\n\n- Со своим клипом — приватный клон, расходует лимит клонов тарифа.\n- С `elevenlabs_voice_id` — общий клон голоса ElevenLabs, лимит не расходует. Клип берётся\n  из семпла голоса, если свой не загружен. Готовый клон того же голоса и языка\n  возвращается без повтора (`reused=true`).\n\nКлонирование занимает до нескольких минут.","operationId":"clone_voice_v2_voices_cartesia_clone_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_clone_voice_v2_voices_cartesia_clone_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloneResult"}}}},"402":{"description":"Нет подписки или символов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Пользователь заблокирован или движок cartesia закрыт тарифом. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"502":{"description":"Cartesia не ответила или отказала. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"503":{"description":"Нет аккаунта Cartesia или прокси. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"413":{"description":"Клип больше 16 МБ. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"415":{"description":"Формат клипа не поддерживается. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Нет клипа, длина не 10–60 с, голоса ElevenLabs нет или его семпл не подходит, Cartesia отклонила клип. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"}},"security":[{"HTTPBearer":[]}]}},"/v2/voices/cartesia/from-labs/{voice_id}":{"get":{"tags":["cartesia"],"summary":"Check Labs Voice","description":"Проверить голос ElevenLabs перед клонированием: есть ли он и готовый клон в каталоге.","operationId":"check_labs_voice_v2_voices_cartesia_from_labs__voice_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9]{10,64}$","title":"Voice Id"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"description":"Язык клона: код Cartesia; пусто — любой","title":"Language"},"description":"Язык клона: код Cartesia; пусто — любой"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabsCheck"}}}},"402":{"description":"Нет подписки или символов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Пользователь заблокирован или движок cartesia закрыт тарифом. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"404":{"description":"Голоса нет в ElevenLabs. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"503":{"description":"ElevenLabs не ответил. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/voices/cartesia/standard/{voice_id}/preview":{"get":{"tags":["cartesia"],"summary":"Standard Preview","description":"Семпл стандартного голоса Cartesia. Без токена: ссылку `preview_url` из каталога\nставят в плеер как есть.","operationId":"standard_preview_v2_voices_cartesia_standard__voice_id__preview_get","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Voice Id"}}],"responses":{"200":{"description":"Семпл голоса","content":{"audio/mpeg":{}}},"502":{"description":"Cartesia не ответила или отказала. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"503":{"description":"Нет аккаунта Cartesia или прокси. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"404":{"description":"У голоса нет семпла. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/tasks":{"get":{"tags":["tasks"],"summary":"List Active Tasks","description":"Активные задачи этого API-ключа: очередь, озвучка и ожидание подтверждения failover.\n\nЗавершённые, отменённые и заблокированные цензурой сюда не входят. Чужой ключ\nсвоих задач не видит.","operationId":"list_active_tasks_v2_tasks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveTaskList"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["tasks"],"summary":"Create Task","description":"Поставить текст в очередь на озвучку. Символы списываются сразу.\n\nРезультат — по `GET /v2/tasks/{task_id}`.","operationId":"create_task_v2_tasks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTaskRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskCreated"}}}},"400":{"description":"Голос, модель, текст или лимит тарифа. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"402":{"description":"Нет подписки или не хватает символов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Пользователь заблокирован или движок закрыт тарифом. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"429":{"description":"Превышен лимит одновременных задач. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"503":{"description":"Очередь или ElevenLabs недоступны; задача не создана. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v2/tasks/{task_id}":{"get":{"tags":["tasks"],"summary":"Get Task","description":"Статус и прогресс своей задачи; для `censored` — заблокированные фрагменты.","operationId":"get_task_v2_tasks__task_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":36,"title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskView"}}}},"404":{"description":"Задача не найдена. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/tasks/{task_id}/download":{"get":{"tags":["tasks"],"summary":"Download Task","description":"Результат завершённой задачи. Первое скачивание MP3 может занять время — файл\nсобирается из чанков; дальше он отдаётся из кэша.","operationId":"download_task_v2_tasks__task_id__download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":36,"title":"Task Id"}}],"responses":{"200":{"description":"MP3 или ZIP с MP3 по чанкам (`split_output`)","content":{"audio/mpeg":{},"application/zip":{}}},"404":{"description":"Задача не найдена. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"409":{"description":"Задача ещё не готова или готова не полностью. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"410":{"description":"Аудио уже удалено по сроку хранения. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/tasks/{task_id}/download-link":{"post":{"tags":["tasks"],"summary":"Issue Download Link","description":"Короткая ссылка на файл без API-токена в URL. Для бота и клиентов, которые\nне могут передать Authorization при скачивании.","operationId":"issue_download_link_v2_tasks__task_id__download_link_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":36,"title":"Task Id"}},{"name":"ttl_seconds","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":86400,"minimum":60},{"type":"null"}],"title":"Ttl Seconds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadLink"}}}},"404":{"description":"Задача не найдена. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"409":{"description":"Задача ещё не готова или готова не полностью. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"410":{"description":"Аудио уже удалено по сроку хранения. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"503":{"description":"Подпись ссылок не настроена. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/tasks/{task_id}/file":{"get":{"tags":["tasks"],"summary":"Download Signed File","description":"Скачать результат по HMAC из `POST /download-link`. Authorization не нужен.","operationId":"download_signed_file_v2_tasks__task_id__file_get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":36,"title":"Task Id"}},{"name":"exp","in":"query","required":true,"schema":{"type":"integer","exclusiveMinimum":0,"title":"Exp"}},{"name":"sig","in":"query","required":true,"schema":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[0-9a-fA-F]+$","title":"Sig"}}],"responses":{"200":{"description":"MP3 или ZIP по подписанной ссылке","content":{"audio/mpeg":{},"application/zip":{}}},"401":{"description":"Подпись неверна или срок истёк. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"409":{"description":"Задача ещё не готова или готова не полностью. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"410":{"description":"Аудио уже удалено по сроку хранения. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/tasks/{task_id}/subtitles":{"get":{"tags":["tasks"],"summary":"Get Subtitles","description":"Субтитры из alignment ElevenLabs. ZIP без склейки — файл на отрезок.","operationId":"get_subtitles_v2_tasks__task_id__subtitles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":36,"title":"Task Id"}},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SubtitleFormat","default":"srt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Задача не найдена. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"409":{"description":"Задача ещё не готова или у чанков нет меток Labs. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/tasks/{task_id}/cancel":{"post":{"tags":["tasks"],"summary":"Cancel Task","description":"Отменить задачу в очереди (символы возвращаются). Уже озвучиваемую задачу\nможно отменить только на безлимитной подписке.","operationId":"cancel_task_v2_tasks__task_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":36,"title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelledTask"}}}},"404":{"description":"Задача не найдена. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"409":{"description":"Задачу в этом статусе отменить нельзя. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/tasks/{task_id}/retry":{"post":{"tags":["tasks"],"summary":"Retry Task","description":"Переозвучить фрагменты, заблокированные цензурой, с исправленным текстом.\n\nИсправления нужны ровно для фрагментов из `blocked_chunks` статуса. Доплачиваются\nтолько символы сверх длины заблокированных фрагментов.","operationId":"retry_task_v2_tasks__task_id__retry_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":36,"title":"Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetriedTask"}}}},"400":{"description":"Исправления не совпадают с заблокированными фрагментами. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"402":{"description":"Исправленный текст длиннее, а символов или подписки нет. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Пользователь заблокирован. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"404":{"description":"Задача не найдена. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"409":{"description":"Задача не в статусе censored или повторить её нельзя. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"503":{"description":"Очередь недоступна; задача осталась censored, доплата возвращена. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/dialogues":{"post":{"tags":["dialogues"],"summary":"Create Dialogue","description":"Поставить диалог в очередь: реплики разных голосов в одном файле.\n\nДвижок — поле `engine`: `labs` (весь диалог одним запросом к Labs) или `cartesia`\n(каждая реплика отдельным TTS-запросом, голоса и модель как у задач Cartesia).\nДлинный диалог режется на части по лимиту движка без лишних разрывов реплик;\nсимволы списываются сразу за весь текст.\nСтатус, скачивание и отмена — как у задач: `GET /v2/tasks/{task_id}`,\n`GET /v2/tasks/{task_id}/download`, `POST /v2/tasks/{task_id}/cancel`.","operationId":"create_dialogue_v2_dialogues_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDialogueRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DialogueCreated"}}}},"400":{"description":"Голос, модель, пустые реплики или больше 10 голосов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"402":{"description":"Нет подписки или не хватает символов. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"403":{"description":"Диалоги закрыты пользователю, он заблокирован или движок закрыт тарифом. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"429":{"description":"Превышен лимит одновременных задач. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"503":{"description":"Очередь или ElevenLabs недоступны; задача не создана. Тело: {\"detail\": {\"code\": ..., \"message\": ...}}"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v2/captions":{"post":{"tags":["captions"],"summary":"Create Captions","description":"Субтитры готовой озвучки. ZIP без склейки — файл на отрезок.","operationId":"create_captions_v2_captions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCaptionsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v2/captions/upload":{"post":{"tags":["captions"],"summary":"Upload Captions","description":"Субтитры из произвольного аудио, без задачи озвучки.","operationId":"upload_captions_v2_captions_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_captions_v2_captions_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v2/music":{"post":{"tags":["studio"],"summary":"Create Music","description":"Музыка по промпту. Активная подписка, без списания символов.\nНа ключ одновременно не больше threads_per_task тарифа.","operationId":"create_music_v2_music_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMusicRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MusicTrack"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v2/sound-effects":{"post":{"tags":["studio"],"summary":"Create Sound Effects","description":"Звуковые эффекты по тексту. Активная подписка, без списания символов.\nДелят с музыкой лимит потоков этого API-ключа.","operationId":"create_sound_effects_v2_sound_effects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSoundRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoundEffects"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}}},"components":{"schemas":{"CreateDialogueRequest":{"properties":{"engine":{"$ref":"#/components/schemas/DialogueEngine","description":"labs — ElevenLabs text-to-dialogue; cartesia — каждая реплика отдельным запросом Cartesia TTS","default":"labs"},"text":{"anyOf":[{"type":"string","maxLength":1000000},{"type":"null"}],"title":"Text","description":"Диалог одним текстом: каждая реплика с новой строки, голос в начале строки в квадратных скобках и с двоеточием: `[voice_id]: текст`. Реплика на несколько строк продолжается без пометки голоса. Можно вместо `inputs`"},"inputs":{"anyOf":[{"items":{"$ref":"#/components/schemas/DialogueLineIn"},"type":"array","maxItems":2000},{"type":"null"}],"title":"Inputs","description":"Реплики по порядку, если не передан `text`. Длинный диалог API сам режет на запросы (labs — 1000 символов, cartesia — 500), не разрывая реплики без нужды"},"model_id":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Model Id","description":"labs — eleven_v4 (по умолчанию), eleven_v4_turbo или eleven_v3; cartesia — как у задач Cartesia"},"language_code":{"anyOf":[{"type":"string","maxLength":8,"minLength":2},{"type":"null"}],"title":"Language Code","description":"Язык текста (ru, en, de…). cartesia: задаёт язык озвучки и клон голоса ElevenLabs этого языка, чтобы не было акцента; не задан — определяется по тексту реплик"},"settings":{"anyOf":[{"$ref":"#/components/schemas/DialogueSettings"},{"type":"null"}],"description":"Только labs"},"seed":{"anyOf":[{"type":"integer","maximum":4294967295.0,"minimum":0.0},{"type":"null"}],"title":"Seed","description":"Только labs"},"split_output":{"type":"boolean","title":"Split Output","description":"ZIP с MP3 по частям вместо одного MP3","default":false}},"additionalProperties":false,"type":"object","title":"CreateDialogueRequest"},"CreateMusicRequest":{"properties":{"prompt":{"type":"string","maxLength":2000,"minLength":1,"title":"Prompt"}},"additionalProperties":false,"type":"object","required":["prompt"],"title":"CreateMusicRequest","description":"Промпт уходит в ElevenLabs как есть. Тариф и баланс не участвуют."},"CloneMode":{"type":"string","enum":["similarity","stability"],"title":"CloneMode"},"Body_upload_captions_v2_captions_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"format":{"type":"string","enum":["srt","vtt"],"title":"Format","default":"srt"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},"type":"object","required":["file"],"title":"Body_upload_captions_v2_captions_upload_post"},"DeletedClone":{"properties":{"voice_id":{"type":"string","title":"Voice Id"}},"type":"object","required":["voice_id"],"title":"DeletedClone"},"TaskCreated":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"$ref":"#/components/schemas/TaskStatus"},"engine":{"$ref":"#/components/schemas/Engine"},"voice_id":{"type":"string","title":"Voice Id","description":"Голос, который получит воркер (для Cartesia — ID клона)"},"model_id":{"type":"string","title":"Model Id"},"chunks_count":{"type":"integer","title":"Chunks Count"},"characters":{"type":"integer","title":"Characters"},"charged_characters":{"type":"integer","title":"Charged Characters","description":"0 — безлимитная подписка"},"dubs":{"anyOf":[{"items":{"$ref":"#/components/schemas/DubTrackView"},"type":"array"},{"type":"null"}],"title":"Dubs","description":"Дорожки дубляжа"}},"type":"object","required":["task_id","status","engine","voice_id","model_id","chunks_count","characters","charged_characters"],"title":"TaskCreated"},"TaskView":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"$ref":"#/components/schemas/TaskStatus"},"engine":{"anyOf":[{"$ref":"#/components/schemas/Engine"},{"type":"null"}],"description":"None — задача создана без сохранённого payload"},"progress_percent":{"type":"number","title":"Progress Percent"},"chunks_completed":{"type":"integer","title":"Chunks Completed"},"chunks_total":{"type":"integer","title":"Chunks Total"},"split_output":{"type":"boolean","title":"Split Output"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error":{"anyOf":[{"$ref":"#/components/schemas/TaskError"},{"type":"null"}]},"blocked_chunks":{"anyOf":[{"items":{"$ref":"#/components/schemas/BlockedChunk"},"type":"array"},{"type":"null"}],"title":"Blocked Chunks","description":"Чанки, заблокированные цензурой (status = censored)"},"dubs":{"anyOf":[{"items":{"$ref":"#/components/schemas/DubTrackView"},"type":"array"},{"type":"null"}],"title":"Dubs","description":"Дорожки дубляжа этой задачи"},"dub_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dub Of","description":"Дорожка дубляжа: основная задача"},"dub_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dub Language","description":"Дорожка дубляжа: язык"}},"type":"object","required":["task_id","status","engine","progress_percent","chunks_completed","chunks_total","split_output","created_at","started_at","completed_at","error","blocked_chunks"],"title":"TaskView"},"DialogueCreated":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"$ref":"#/components/schemas/TaskStatus"},"engine":{"$ref":"#/components/schemas/DialogueEngine"},"model_id":{"type":"string","title":"Model Id"},"voices":{"items":{"type":"string"},"type":"array","title":"Voices","description":"Голоса после проверки, в порядке появления"},"language_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language Code","description":"cartesia — язык озвучки: из запроса или определённый по тексту; labs — из запроса"},"lines_count":{"type":"integer","title":"Lines Count"},"parts_count":{"type":"integer","title":"Parts Count","description":"Запросов к провайдеру (чанков задачи)"},"characters":{"type":"integer","title":"Characters"},"charged_characters":{"type":"integer","title":"Charged Characters","description":"0 — безлимитная подписка"}},"type":"object","required":["task_id","status","engine","model_id","voices","lines_count","parts_count","characters","charged_characters"],"title":"DialogueCreated"},"LibrarySearch":{"properties":{"query":{"type":"string","title":"Query"},"items":{"items":{"$ref":"#/components/schemas/LibraryVoice"},"type":"array","title":"Items","description":"Сначала найденный по voice_id, затем по имени"}},"type":"object","required":["query","items"],"title":"LibrarySearch"},"RetryRequest":{"properties":{"corrected_chunks":{"items":{"$ref":"#/components/schemas/CorrectedChunk"},"type":"array","minItems":1,"title":"Corrected Chunks","description":"Исправленный текст для каждого заблокированного фрагмента"}},"additionalProperties":false,"type":"object","required":["corrected_chunks"],"title":"RetryRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"AutoPause":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"duration":{"type":"number","maximum":30.0,"minimum":0.1,"title":"Duration","description":"Секунды","default":0.5},"frequency":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Frequency","default":1}},"type":"object","title":"AutoPause","description":"Тишина после каждого `frequency`-го чанка. Её вклеивает в аудио воркер."},"Package":{"properties":{"id":{"type":"integer","title":"Id"},"chars_granted":{"type":"integer","title":"Chars Granted"},"chars_used":{"type":"integer","title":"Chars Used"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"tariff_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tariff Code"},"source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"remaining":{"type":"integer","title":"Remaining","readOnly":true}},"type":"object","required":["id","chars_granted","chars_used","expires_at","tariff_code","source_type","created_at","remaining"],"title":"Package","description":"Пакет символов со своим сроком. Списание идёт из пакета, который сгорает раньше."},"DialogueLineIn":{"properties":{"text":{"type":"string","maxLength":50000,"minLength":1,"title":"Text"},"voice_id":{"type":"string","maxLength":50,"minLength":1,"title":"Voice Id","description":"labs — ID голоса ElevenLabs; cartesia — клон, стандартный голос или ID голоса ElevenLabs с готовым клоном"}},"additionalProperties":false,"type":"object","required":["text","voice_id"],"title":"DialogueLineIn"},"CreateCaptionsRequest":{"properties":{"task_id":{"type":"string","maxLength":36,"minLength":1,"title":"Task Id"},"format":{"type":"string","enum":["srt","vtt"],"title":"Format","default":"srt"},"language":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Language","description":"ISO 639-1 (ru, en, uk, …). Пусто или auto — определить по аудио."}},"type":"object","required":["task_id"],"title":"CreateCaptionsRequest"},"DownloadLink":{"properties":{"url":{"type":"string","title":"Url"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["url","expires_at"],"title":"DownloadLink"},"MyVoicesPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CartesiaVoice"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Всего голосов под фильтром"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"has_more":{"type":"boolean","title":"Has More"},"clones_used":{"type":"integer","title":"Clones Used","description":"Своих клонов в любом статусе (идут в квоту)"},"clones_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Clones Limit","description":"Квота тарифа; None — без лимита, 0 — запрещены"}},"type":"object","required":["items","total","page","page_size","has_more","clones_used","clones_limit"],"title":"MyVoicesPage"},"LibraryVoice":{"properties":{"voice_id":{"type":"string","title":"Voice Id"},"name":{"type":"string","title":"Name"},"source":{"$ref":"#/components/schemas/LibrarySource","description":"account — найден по voice_id (обычно стандартный голос ElevenLabs), library — публичная библиотека ElevenLabs"},"public_owner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Owner Id","description":"Владелец голоса в библиотеке"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"accent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"age":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Age"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url","description":"Публичный семпл ElevenLabs; None — нет"}},"type":"object","required":["voice_id","name","source","public_owner_id","category","description","language","accent","gender","age","use_case","preview_url"],"title":"LibraryVoice","description":"Бесплатный голос ElevenLabs: найден по ID в аккаунте пула или в публичной библиотеке."},"Body_clone_voice_v2_voices_cartesia_clone_post":{"properties":{"language":{"type":"string","maxLength":16,"title":"Language","description":"Язык клона: код Cartesia (ru, en, de, uk и другие). Неподдерживаемый славянский — ru, прочий неизвестный — en"},"clip":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Clip","description":"Клип 10–60 с, до 16 МБ: flac, mp3, ogg, wav, webm"},"elevenlabs_voice_id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9]{10,64}$"},{"type":"null"}],"title":"Elevenlabs Voice Id","description":"Голос ElevenLabs: клон попадёт в общий каталог; клип не обязателен"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"mode":{"$ref":"#/components/schemas/CloneMode","default":"similarity"},"tagline":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Tagline"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"accent":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Accent"}},"type":"object","required":["language"],"title":"Body_clone_voice_v2_voices_cartesia_clone_post"},"CloneSource":{"type":"string","enum":["elevenlabs","user"],"title":"CloneSource"},"Me":{"properties":{"user_id":{"type":"string","title":"User Id"},"token_id":{"type":"integer","title":"Token Id"}},"type":"object","required":["user_id","token_id"],"title":"Me"},"CartesiaVoice":{"properties":{"voice_id":{"type":"string","title":"Voice Id","description":"ID для `voice_id` задачи с `engine=cartesia`"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tagline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tagline"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"accent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender","description":"Только у стандартных голосов"},"source":{"$ref":"#/components/schemas/VoiceSource","description":"standard — библиотека Cartesia, elevenlabs — общий каталог клонов голосов ElevenLabs, user — свой клон"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url","description":"Семпл для плеера, без токена; None — нет"},"elevenlabs_voice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elevenlabs Voice Id","description":"Исходный голос ElevenLabs клона"},"labs_is_paid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labs Is Paid","description":"Исходный голос ElevenLabs платный; None — неизвестно или не клон"},"is_owner":{"type":"boolean","title":"Is Owner"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["voice_id","name","tagline","description","language","accent","gender","source","preview_url","elevenlabs_voice_id","labs_is_paid","is_owner","created_at"],"title":"CartesiaVoice"},"TaskError":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"content_blocked, failover_confirmation_required, ..."},"message":{"type":"string","title":"Message"}},"type":"object","required":["type","message"],"title":"TaskError"},"ActiveTaskList":{"properties":{"tasks":{"items":{"$ref":"#/components/schemas/TaskView"},"type":"array","title":"Tasks"}},"type":"object","required":["tasks"],"title":"ActiveTaskList","description":"Активные задачи API-ключа из заголовка Authorization."},"Models":{"properties":{"elevenlabs":{"items":{"$ref":"#/components/schemas/ModelInfo"},"type":"array","title":"Elevenlabs","description":"Для `engine=original`"},"cartesia":{"items":{"$ref":"#/components/schemas/ModelInfo"},"type":"array","title":"Cartesia","description":"Для `engine=cartesia`"}},"type":"object","required":["elevenlabs","cartesia"],"title":"Models"},"VoiceSource":{"type":"string","enum":["standard","elevenlabs","user"],"title":"VoiceSource"},"ClonedVoice":{"properties":{"voice_id":{"type":"string","title":"Voice Id","description":"ID для `voice_id` задачи с `engine=cartesia`"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tagline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tagline"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"accent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent"},"source":{"$ref":"#/components/schemas/CloneSource","description":"elevenlabs — общий каталог клонов голосов ElevenLabs, user — свой клон"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url","description":"Семпл исходного голоса ElevenLabs; None — нет"},"elevenlabs_voice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elevenlabs Voice Id"},"labs_is_paid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labs Is Paid","description":"Исходный голос ElevenLabs платный; None — неизвестно или свой клип"},"is_owner":{"type":"boolean","title":"Is Owner"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["voice_id","name","tagline","description","language","accent","source","preview_url","elevenlabs_voice_id","labs_is_paid","is_owner","created_at"],"title":"ClonedVoice"},"DialogueSettings":{"properties":{"stability":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Stability","description":"v3: 0 — творчески, 0.5 — естественно, 1 — ровно"}},"additionalProperties":false,"type":"object","title":"DialogueSettings"},"DialogueEngine":{"type":"string","enum":["labs","cartesia"],"title":"DialogueEngine"},"ServiceInfo":{"properties":{"service":{"type":"string","title":"Service"},"version":{"type":"string","title":"Version"},"status":{"type":"string","title":"Status"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"documentation":{"type":"string","title":"Documentation"},"endpoints":{"$ref":"#/components/schemas/EndpointMap"}},"type":"object","required":["service","version","status","timestamp","documentation","endpoints"],"title":"ServiceInfo"},"BillingSummary":{"properties":{"user_id":{"type":"string","title":"User Id"},"user_active":{"type":"boolean","title":"User Active","description":"False — пользователь заблокирован админом"},"token_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Token Id","description":"Лицензия, для которой посчитаны подписка и тариф; None — уровень пользователя"},"subscription_type":{"type":"string","title":"Subscription Type"},"subscription_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Expires At"},"subscription_active":{"type":"boolean","title":"Subscription Active","description":"Можно ли сейчас ставить задачи с точки зрения подписки и баланса"},"total_characters":{"type":"integer","title":"Total Characters","description":"Начислено в действующих пакетах"},"used_characters":{"type":"integer","title":"Used Characters","description":"Списано из действующих пакетов"},"remaining_characters":{"type":"integer","title":"Remaining Characters"},"tariff_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tariff Code","description":"Эффективный код тарифа, даже если он не найден"},"tariff":{"anyOf":[{"$ref":"#/components/schemas/Tariff"},{"type":"null"}],"description":"None — тариф не найден или выключен"},"packages":{"items":{"$ref":"#/components/schemas/Package"},"type":"array","title":"Packages","description":"Действующие пакеты с остатком, в порядке списания"}},"type":"object","required":["user_id","user_active","token_id","subscription_type","subscription_expires_at","subscription_active","total_characters","used_characters","remaining_characters","tariff_code","tariff","packages"],"title":"BillingSummary"},"UsageStats":{"properties":{"user_id":{"type":"string","title":"User Id"},"subscription_type":{"type":"string","title":"Subscription Type"},"subscription_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Expires At"},"subscription_active":{"type":"boolean","title":"Subscription Active"},"total_characters":{"type":"integer","title":"Total Characters"},"used_characters":{"type":"integer","title":"Used Characters"},"remaining_characters":{"type":"integer","title":"Remaining Characters"},"tariff_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tariff Code"},"tariff":{"anyOf":[{"$ref":"#/components/schemas/Tariff"},{"type":"null"}]},"total_tasks":{"type":"integer","title":"Total Tasks"},"completed_tasks":{"type":"integer","title":"Completed Tasks"},"active_tasks":{"type":"integer","title":"Active Tasks"},"clones_used":{"type":"integer","title":"Clones Used"},"clones_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Clones Limit","description":"None — без лимита"},"packages":{"items":{"$ref":"#/components/schemas/Package"},"type":"array","title":"Packages","description":"Действующие пакеты символов, каждый со своим сроком сгорания"}},"type":"object","required":["user_id","subscription_type","subscription_expires_at","subscription_active","total_characters","used_characters","remaining_characters","tariff_code","tariff","total_tasks","completed_tasks","active_tasks","clones_used","clones_limit"],"title":"UsageStats","description":"Сводка для бота: баланс лицензии, задачи и квота клонов Cartesia."},"CloneResult":{"properties":{"voice":{"$ref":"#/components/schemas/ClonedVoice"},"reused":{"type":"boolean","title":"Reused","description":"Готовый клон этого голоса ElevenLabs уже был в каталоге"},"clones_used":{"type":"integer","title":"Clones Used","description":"Своих клонов у пользователя"},"clones_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Clones Limit","description":"Лимит своих клонов тарифа; None — без лимита"}},"type":"object","required":["voice","reused","clones_used","clones_limit"],"title":"CloneResult"},"LabsCheck":{"properties":{"elevenlabs_voice_id":{"type":"string","title":"Elevenlabs Voice Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url"},"labs_is_paid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labs Is Paid"},"clone_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clone Language","description":"Код языка клона; None — язык не задан"},"can_clone":{"type":"boolean","title":"Can Clone","description":"Клона в общем каталоге ещё нет"},"catalog":{"anyOf":[{"$ref":"#/components/schemas/ClonedVoice"},{"type":"null"}],"description":"Готовый клон в общем каталоге"},"mine":{"anyOf":[{"$ref":"#/components/schemas/ClonedVoice"},{"type":"null"}],"description":"Свой клон этого голоса"}},"type":"object","required":["elevenlabs_voice_id","name","preview_url","labs_is_paid","clone_language","can_clone","catalog","mine"],"title":"LabsCheck"},"SoundEffects":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SoundEffect"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"SoundEffects"},"ElevenLabsVoice":{"properties":{"voice_id":{"type":"string","title":"Voice Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["voice_id","name"],"title":"ElevenLabsVoice"},"BlockedChunk":{"properties":{"index":{"type":"integer","title":"Index"},"text":{"type":"string","title":"Text"}},"type":"object","required":["index","text"],"title":"BlockedChunk"},"LibrarySource":{"type":"string","enum":["account","library"],"title":"LibrarySource"},"Gender":{"type":"string","enum":["masculine","feminine","gender_neutral"],"title":"Gender"},"DubTrackView":{"properties":{"language":{"type":"string","title":"Language"},"task_id":{"type":"string","title":"Task Id","description":"Задача дорожки: статус и скачивание как у обычной задачи"},"status":{"type":"string","title":"Status","description":"Статус дорожки","default":"pending"},"progress_percent":{"type":"number","title":"Progress Percent","description":"Озвучено чанков дорожки, 0-100","default":0.0},"voice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Id","description":"Голос, которым озвучивается дорожка"}},"type":"object","required":["language","task_id"],"title":"DubTrackView"},"VoicePage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CartesiaVoice"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Всего голосов под фильтром"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","total","page","page_size","has_more"],"title":"VoicePage"},"RetriedTask":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"$ref":"#/components/schemas/TaskStatus"},"retry_chunks_count":{"type":"integer","title":"Retry Chunks Count"},"charged_characters":{"type":"integer","title":"Charged Characters","description":"Списано за текст длиннее исходных фрагментов; 0 — не длиннее или безлимит"}},"type":"object","required":["task_id","status","retry_chunks_count","charged_characters"],"title":"RetriedTask"},"SplitMode":{"type":"string","enum":["smart","paragraphs","max_length"],"title":"SplitMode"},"LibraryPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/LibraryVoice"},"type":"array","title":"Items"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","page","page_size","has_more"],"title":"LibraryPage"},"CancelledTask":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"$ref":"#/components/schemas/TaskStatus"},"previous_status":{"$ref":"#/components/schemas/TaskStatus"},"refunded_characters":{"type":"integer","title":"Refunded Characters"}},"type":"object","required":["task_id","status","previous_status","refunded_characters"],"title":"CancelledTask"},"MusicTrack":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"progress":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Progress"},"prompt":{"type":"string","title":"Prompt"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"genres":{"items":{"type":"string"},"type":"array","title":"Genres"},"bpm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bpm"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"waveform":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Waveform"}},"type":"object","required":["id","status","prompt"],"title":"MusicTrack"},"Engine":{"type":"string","enum":["original","cartesia"],"title":"Engine"},"EndpointMap":{"properties":{"create_task":{"type":"string","title":"Create Task"},"task_status":{"type":"string","title":"Task Status"},"cancel_task":{"type":"string","title":"Cancel Task"},"download":{"type":"string","title":"Download"},"user_stats":{"type":"string","title":"User Stats"},"cartesia_guide":{"type":"string","title":"Cartesia Guide"}},"type":"object","required":["create_task","task_status","cancel_task","download","user_stats","cartesia_guide"],"title":"EndpointMap"},"SubtitleFormat":{"type":"string","enum":["srt","vtt","json"],"title":"SubtitleFormat"},"ModelInfo":{"properties":{"model_id":{"type":"string","title":"Model Id"},"default":{"type":"boolean","title":"Default"}},"type":"object","required":["model_id","default"],"title":"ModelInfo"},"SoundEffect":{"properties":{"id":{"type":"string","title":"Id"},"text":{"type":"string","title":"Text"},"content_type":{"type":"string","title":"Content Type"},"duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Seconds"},"audio_base64":{"type":"string","title":"Audio Base64"},"subgroup_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subgroup Id"},"subgroup_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subgroup Position"}},"type":"object","required":["id","text","content_type","audio_base64"],"title":"SoundEffect"},"CreateTaskRequest":{"properties":{"text":{"type":"string","maxLength":1000000,"minLength":1,"title":"Text"},"voice_id":{"type":"string","maxLength":50,"minLength":1,"title":"Voice Id","description":"ElevenLabs: ID стандартного голоса. Cartesia: ID клона, стандартного голоса или голоса ElevenLabs, для которого есть клон."},"engine":{"anyOf":[{"$ref":"#/components/schemas/Engine"},{"type":"null"}],"description":"Не указан — original, если тариф его разрешает, иначе cartesia"},"model_id":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Model Id","description":"По умолчанию — основная модель движка"},"language":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Language","description":"Язык текста для Cartesia: выбирает клон этого языка и язык синтеза"},"voice_settings":{"anyOf":[{"$ref":"#/components/schemas/VoiceSettings"},{"type":"null"}]},"split_type":{"$ref":"#/components/schemas/SplitMode","default":"smart"},"max_chunk_length":{"type":"integer","maximum":2500.0,"minimum":500.0,"title":"Max Chunk Length","default":1000},"split_output":{"type":"boolean","title":"Split Output","description":"ZIP с MP3 по чанкам вместо одного MP3","default":false},"auto_pause":{"anyOf":[{"$ref":"#/components/schemas/AutoPause"},{"type":"null"}]},"dub_languages":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":49},{"type":"null"}],"title":"Dub Languages","description":"Дубляж: языки перевода (en, de, es…). Каждый — отдельная задача-дорожка той же длины, что оригинал. Голос по умолчанию как у оригинала (Cartesia — клон на языке дорожки). Свой голос — в `dub_voices`. Стоимость: символы текста × (1 + 1.5 × число языков)"},"dub_voices":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Dub Voices","description":"Голос дорожки: `{код языка: voice_id}`. Ключ должен быть из `dub_languages`. Нет ключа — голос оригинала или клон Cartesia на этом языке."}},"additionalProperties":false,"type":"object","required":["text","voice_id"],"title":"CreateTaskRequest"},"VoiceSettings":{"properties":{"stability":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Stability"},"similarity_boost":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Boost"},"style":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Style"},"use_speaker_boost":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Speaker Boost"},"speed":{"anyOf":[{"type":"number","maximum":1.2,"minimum":0.7},{"type":"null"}],"title":"Speed"}},"additionalProperties":false,"type":"object","title":"VoiceSettings","description":"Настройки голоса ElevenLabs. Для Cartesia игнорируются."},"CorrectedChunk":{"properties":{"index":{"type":"integer","minimum":0.0,"title":"Index","description":"Индекс из `blocked_chunks`"},"text":{"type":"string","maxLength":2500,"minLength":1,"title":"Text"}},"additionalProperties":false,"type":"object","required":["index","text"],"title":"CorrectedChunk"},"TaskStatus":{"type":"string","enum":["pending","processing","completed","failed","censored","cancelled","pending_confirmation"],"title":"TaskStatus","description":"Значения `tasks.status`. Устаревший `content_blocked` наружу отдаётся как `failed`."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"CreateSoundRequest":{"properties":{"text":{"type":"string","maxLength":500,"minLength":1,"title":"Text"},"loop":{"type":"boolean","title":"Loop","default":false},"output_format":{"type":"string","maxLength":64,"minLength":1,"title":"Output Format","default":"opus_48000_128"}},"additionalProperties":false,"type":"object","required":["text"],"title":"CreateSoundRequest"},"Tariff":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind","description":"package — пакет символов, subscription — подписка"},"max_parallel_tasks":{"type":"integer","title":"Max Parallel Tasks","description":"Одновременных задач на лицензию"},"threads_per_task":{"type":"integer","title":"Threads Per Task","description":"Параллельных потоков обработки одной задачи"},"max_chunks_per_task":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Chunks Per Task"},"max_chars_per_task":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Chars Per Task"},"allow_original":{"type":"boolean","title":"Allow Original"},"allow_original_accs":{"type":"boolean","title":"Allow Original Accs"},"allow_cartesia":{"type":"boolean","title":"Allow Cartesia"},"max_cartesia_clones":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Cartesia Clones","description":"0 — клоны запрещены, None — без лимита"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["code","name","kind","max_parallel_tasks","threads_per_task","max_chunks_per_task","max_chars_per_task","allow_original","allow_original_accs","allow_cartesia","max_cartesia_clones","sort_order"],"title":"Tariff","description":"Строка `tariff_plans`. `None` в лимитах — без ограничения."}},"securitySchemes":{"HTTPBearer":{"type":"http","description":"API-токен пользователя или админ-токен","scheme":"bearer"}}},"tags":[{"name":"captions"},{"name":"dialogues"},{"name":"tasks"},{"name":"voices"},{"name":"studio"},{"name":"cartesia"},{"name":"billing"},{"name":"auth"},{"name":"docs"}]}