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
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 |
|---|
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.
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.