API генерации видео: видео из текста и изображения (Seedance, MiniMax)
Авторизация: Authorization: Bearer $TEAMO_API_KEY. Все эндпоинты начинаются с /v1.
| Метод | Путь | Назначение |
|---|---|---|
| GET | /v1/models?type=video |
Модели и поддерживаемые параметры |
| POST | /v1/videos |
Создать задачу |
| GET | /v1/videos |
Список ваших задач |
| GET | /v1/videos/{video_id} |
Получить метаданные |
| GET | /v1/videos/{video_id}/content |
Скачать готовое видео |
| DELETE | /v1/videos/{video_id} |
Удалить завершённую или неудачную задачу и её файлы |
Спецификация OpenAPI. Жизненный цикл задачи такой же, как в OpenAI Videos. Используйте ID модели TeamoRouter и её параметры. Files API, remix, редактирование, продление, превью и спрайты не поддерживаются.
Модели
Models come from the current service. Values are case sensitive; GET /v1/models?type=video has the latest constraints. Check the API response for account availability.
Scroll the table horizontally for all parameters. — means the catalog does not list that option.
| Model / API ID | Type | Duration | Resolution | Aspect ratio | Catalog status |
|---|
Актуальные ограничения отдаёт GET /v1/models?type=video. Модели с model_spec.offline недоступны. Страницы моделей с ID, параметрами и примерами: все видеомодели, API Seedance 2.5, API Seedance 2.0, API MiniMax H3.
Создание и получение
Отправляйте JSON или multipart/form-data. Обязательны model и prompt; seconds — строка с целым числом (по умолчанию "4"). size в формате WIDTHxHEIGHT должен соответствовать разрешению и формату, которые поддерживает модель. Если его не передать, используются первое разрешение и первый формат из каталога модели.
import os, time
from openai import OpenAI
client = OpenAI(api_key=os.environ["TEAMO_API_KEY"], base_url="https://api.teamorouter.com/v1")
video = client.videos.create(
model="seedance-2-0-mini-text-to-video-basic",
prompt="A small dog running on grass", seconds="4", size="854x480",
extra_headers={"Idempotency-Key": "my-video-request-001"},
)
while video.status in ("queued", "in_progress"):
time.sleep(5)
video = client.videos.retrieve(video.id)
if video.status == "failed":
raise RuntimeError(video.error)
client.videos.download_content(video.id).write_to_file("video.mp4")
Если неясно, дошёл ли запрос, повторяйте его только с тем же Idempotency-Key и теми же параметрами. Метаданные всегда приходят в JSON с полями id, object: "video", status, progress, created_at, completed_at, expires_at, seconds, size и error. Время — в секундах Unix. Статусы: queued, in_progress, completed или failed.
Для входного изображения используйте input_reference: {"image_url":"https://..."} (или data URL); в multipart можно передать в input_reference файл PNG, JPEG или WebP. Модели с референсами получают его как референс. Параметры конкретных моделей — duration, resolution, aspect_ratio, audio, последний кадр и несколько референсов — остаются расширениями. Противоречащие друг другу стандартные и нативные параметры отклоняются.
Скачивание, пагинация и удаление
Скачивайте через GET /v1/videos/{video_id}/content; поддерживается только variant=video. Для незавершённых задач возвращается 409; для просроченных, удалённых или недоступных файлов — 404. Файлы хранятся семь дней, срок указан в expires_at.
Список поддерживает limit (1–100, по умолчанию 20), order (asc или desc, по умолчанию desc) и after (last_id предыдущей страницы). В ответе — object: "list", data, first_id, last_id и has_more.
DELETE возвращает {"id":"video_id","object":"video.deleted","deleted":true}. Удаляются только завершённые или неудачные задачи, генерация не отменяется. Удалённые задачи нельзя получить или скачать.
Расширения для Video Studio
/v1/videos/catalog, /v1/videos/models, /v1/videos/quote, /v1/videos/{video_id}/request и /v1/videos/conversations используются сайтом и являются расширениями TeamoRouter.