{"openapi":"3.0.3","info":{"title":"Textomapp Corporate API","version":"1.0.0","description":"API для корпоративных клиентов Textomapp."},"servers":[{"url":"https://corp.textom.app"}],"tags":[{"name":"Файлы"},{"name":"Задачи"},{"name":"Батчи"},{"name":"Webhooks"}],"paths":{"/api/v1/files/upload-url":{"post":{"operationId":"upload-url","summary":"Получить ссылку для загрузки","description":"Возвращает presigned PUT URL для прямой загрузки файла в наше S3-хранилище. Загрузите файл по этому URL, затем передайте полученный file_id при создании задачи.","tags":["Файлы"],"responses":{"201":{"description":"Ссылка создана.","content":{"application/json":{"schema":{"type":"object","properties":{"file_id":{"description":"ID файла для передачи в задачи.","type":"string","format":"uuid"},"upload_url":{"description":"Presigned PUT URL для загрузки.","type":"string"},"expires_in_seconds":{"default":"900","type":"integer"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["filename"],"properties":{"filename":{"description":"Имя файла с расширением.","type":"string"},"content_type":{"description":"MIME-тип файла (например, video/mp4).","type":"string"},"file_size":{"description":"Размер файла в байтах.","type":"integer"}}}}}}}},"/api/v1/tasks":{"post":{"operationId":"create-task","summary":"Создать задачу","description":"Создаёт задачу распознавания. Файл берётся из source (ваша ссылка или наше хранилище). Задача ставится в низкоприоритетную очередь и выполняется на свободных GPU.","tags":["Задачи"],"responses":{"201":{"description":"Задача создана и поставлена в очередь.","content":{"application/json":{"schema":{"type":"object","properties":{"task_id":{"type":"string","format":"uuid"},"status":{"default":"pending","type":"string"},"message":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source"],"properties":{"source":{"description":"Источник файла. Либо ссылка на ваш файл (BYOS), либо ID файла, загруженного в наше хранилище через /files/upload-url.","type":"object","properties":{"type":{"description":"url — скачать по ссылке; file_id — файл уже в нашем S3.","type":"string","enum":["url","file_id"]},"url":{"description":"Обязательно при type=url. HTTPS-ссылка на аудио/видео файл.","type":"string"},"file_id":{"description":"Обязательно при type=file_id. ID из ответа /files/upload-url.","type":"string","format":"uuid"}}},"task_type":{"description":"Тип исходного контента.","default":"audio","type":"string","enum":["audio","video","youtube","record","podcast","link"]},"language":{"description":"Язык распознавания (auto — определить).","default":"auto","type":"string"},"model_size":{"description":"Модель Whisper.","default":"turbo","type":"string","enum":["turbo","medium","large-v2"]},"speaker":{"description":"Диаризация спикеров.","default":"none","type":"string","enum":["none","diarize"]},"noise":{"description":"Шумоподавление.","default":"none","type":"string","enum":["none","denoise"]},"webhook_url":{"description":"URL для уведомления о завершении (опционально).","type":"string"}}}}}}}},"/api/v1/tasks/{taskId}":{"get":{"operationId":"get-task","summary":"Статус задачи","description":"Возвращает статус и прогресс задачи.","tags":["Задачи"],"responses":{"200":{"description":"Статус задачи.","content":{"application/json":{"schema":{"type":"object","properties":{"task_id":{"type":"string","format":"uuid"},"status":{"description":"pending | queued | processing | completed | failed","type":"string"},"stage":{"type":"string"},"progress":{"type":"integer"},"error_message":{"type":"string"}}}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"ID задачи.","schema":{"description":"ID задачи.","type":"string","format":"uuid"}}]}},"/api/v1/tasks/{taskId}/transcript":{"get":{"operationId":"get-transcript","summary":"Результат (транскрипт)","description":"Возвращает результат транскрипции. По умолчанию JSON с сегментами; можно запросить текстовый формат (txt/srt/vtt/csv) — вернётся файлом.","tags":["Задачи"],"responses":{"200":{"description":"Транскрипт (JSON).","content":{"application/json":{"schema":{"type":"object","properties":{"task_id":{"type":"string","format":"uuid"},"text":{"description":"Полный текст.","type":"string"},"segments":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string"},"speaker":{"type":"string"}}}}}}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"ID задачи.","schema":{"description":"ID задачи.","type":"string","format":"uuid"}},{"name":"format","in":"query","required":false,"description":"Формат результата.","schema":{"description":"Формат результата.","default":"json","type":"string","enum":["json","txt","srt","vtt","csv"]}}]}},"/api/v1/batch":{"post":{"operationId":"create-batch","summary":"Создать батч","description":"Пакетно создаёт задачи по списку файлов. Каждый файл может использовать свой источник (ваша ссылка или наше хранилище).","tags":["Батчи"],"responses":{"201":{"description":"Батч создан.","content":{"application/json":{"schema":{"type":"object","properties":{"batch_id":{"type":"string","format":"uuid"},"status":{"type":"string"},"total_tasks":{"type":"integer"},"created":{"type":"integer"},"failed":{"type":"integer"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["files","settings"],"properties":{"name":{"description":"Название батча (для удобства).","type":"string"},"files":{"description":"Список файлов.","type":"array","items":{"type":"object","properties":{"filename":{"type":"string"},"source":{"description":"Источник файла. Либо ссылка на ваш файл (BYOS), либо ID файла, загруженного в наше хранилище через /files/upload-url.","type":"object","properties":{"type":{"description":"url — скачать по ссылке; file_id — файл уже в нашем S3.","type":"string","enum":["url","file_id"]},"url":{"description":"Обязательно при type=url. HTTPS-ссылка на аудио/видео файл.","type":"string"},"file_id":{"description":"Обязательно при type=file_id. ID из ответа /files/upload-url.","type":"string","format":"uuid"}}}}}},"settings":{"description":"Общие настройки распознавания для всех файлов.","type":"object","properties":{"model_size":{"default":"turbo","type":"string","enum":["turbo","medium","large-v2"]},"language":{"default":"auto","type":"string"},"speaker":{"default":"none","type":"string","enum":["none","diarize"]},"noise":{"default":"none","type":"string","enum":["none","denoise"]}}}}}}}}}},"/api/v1/batch/{batchId}":{"get":{"operationId":"get-batch","summary":"Статус батча","description":"Возвращает статус батча и список задач.","tags":["Батчи"],"responses":{"200":{"description":"Статус батча.","content":{"application/json":{"schema":{"type":"object","properties":{"batch_id":{"type":"string","format":"uuid"},"status":{"type":"string"},"total_tasks":{"type":"integer"},"completed_tasks":{"type":"integer"},"failed_tasks":{"type":"integer"},"result_url":{"type":"string"}}}}}}},"parameters":[{"name":"batchId","in":"path","required":true,"description":"ID батча.","schema":{"description":"ID батча.","type":"string","format":"uuid"}}]}},"/api/v1/webhooks":{"post":{"operationId":"create-webhook","summary":"Зарегистрировать webhook","description":"Регистрирует webhook для уведомлений о событиях. События подписываются HMAC-SHA256 (заголовок X-Textom-Signature).","tags":["Webhooks"],"responses":{"201":{"description":"Webhook создан.","content":{"application/json":{"schema":{"type":"object","properties":{"webhook_id":{"type":"string","format":"uuid"},"url":{"type":"string"},"secret":{"description":"Секрет для проверки подписи (показывается один раз).","type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"description":"URL, на который слать события.","type":"string"},"events":{"description":"События, на которые подписываемся.","default":"task.completed, task.failed","type":"array","items":{"type":"string"}}}}}}}},"get":{"operationId":"list-webhooks","summary":"Список webhook-ов","description":"Возвращает список зарегистрированных webhook-ов клиента.","tags":["Webhooks"],"responses":{"200":{"description":"Список webhook-ов.","content":{"application/json":{"schema":{"type":"object","properties":{"webhook_id":{"type":"string","format":"uuid"},"url":{"type":"string"},"events":{"type":"array","items":{"type":"string"}},"is_active":{"type":"boolean"}}}}}}}}},"/api/v1/webhooks/{webhookId}":{"delete":{"operationId":"delete-webhook","summary":"Удалить webhook","description":"Удаляет webhook по ID.","tags":["Webhooks"],"responses":{"200":{"description":"Webhook удалён.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}}}},"parameters":[{"name":"webhookId","in":"path","required":true,"description":"ID webhook-а.","schema":{"description":"ID webhook-а.","type":"string","format":"uuid"}}]}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}}},"security":[{"ApiKeyAuth":[]}]}