Video Generation API

Authenticate using Authorization: Bearer $TEAMO_API_KEY. All endpoints include /v1.

Method Full path Purpose
GET /v1/models?type=video Models and supported parameters
POST /v1/videos Create a job
GET /v1/videos List your jobs
GET /v1/videos/{video_id} Retrieve metadata
GET /v1/videos/{video_id}/content Download completed video
DELETE /v1/videos/{video_id} Delete a completed or failed job and its media

OpenAPI specification. The job lifecycle follows OpenAI Videos. Use a TeamoRouter model ID and its supported parameters. Files API IDs, remix, editing, extensions, thumbnails and spritesheets are not supported.

Models

Video model catalogLoading models…

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.

Video model IDs, types, durations, resolutions, aspect ratios and catalog status
Model / API IDTypeDurationResolutionAspect ratioCatalog status

Read current constraints from GET /v1/models?type=video. Models marked model_spec.offline are unavailable.

Create and retrieve

Send JSON or multipart/form-data. model and prompt are required; seconds is an integer string (default "4"). size is WIDTHxHEIGHT and must match a resolution and aspect ratio supported by the model. If omitted, the first resolution and aspect ratio in that model's catalog are used.

python
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")

After uncertain submissions, retry only with the same Idempotency-Key and identical parameters. Metadata always returns JSON with id, object: "video", status, progress, created_at, completed_at, expires_at, seconds, size, and error. Timestamps use Unix seconds. Status is queued, in_progress, completed or failed.

Use input_reference: {"image_url":"https://..."} (or a data URL) for an input image; multipart also accepts a PNG, JPEG or WebP file in input_reference. Reference-image models receive it as a reference. Model-specific controls such as duration, resolution, aspect_ratio, audio, end frames and multiple reference assets remain extensions. Conflicting standard and native parameters are rejected.

Download, paginate and delete

Download using GET /v1/videos/{video_id}/content; only variant=video is supported. Incomplete jobs return 409; expired, deleted or inaccessible media returns 404. Media is retained for seven days, indicated by expires_at.

List with limit (1–100, default 20), order (asc or desc, default desc) and after (the previous page's last_id). Responses contain object: "list", data, first_id, last_id and has_more.

DELETE returns {"id":"video_id","object":"video.deleted","deleted":true}. It only deletes completed or failed jobs, never cancels generation. Deleted jobs cannot be retrieved or downloaded.

Workbench extensions

/v1/videos/catalog, /v1/videos/models, /v1/videos/quote, /v1/videos/{video_id}/request and /v1/videos/conversations support the website and are TeamoRouter extensions.

Ready? Three steps to startLog in to the console · top up · create an API key
DiscordGet community help instantly