# Video models — video_attributes fields and live queries Source: https://ofox.io/docs/api/videos/models All video models on [`POST /v1/videos`](https://ofox.io/docs/api/videos/create) share the same request structure; they differ in the resolutions, durations, aspect ratios, and generation modes they accept. Each model's capabilities are described by the `video_attributes` object returned by the [Models API](https://ofox.io/docs/api/openai/models). This page explains that object's fields and how to query it. For each model's parameter values, see the family pages: [Seedance](https://ofox.io/docs/develop/models/seedance), [Wan & HappyHorse](https://ofox.io/docs/develop/models/wan), [Hailuo](https://ofox.io/docs/develop/models/hailuo). ## The `video_attributes` object Every video model in the [Models API](https://ofox.io/docs/api/openai/models) response carries a `video_attributes` object, which is the authoritative description of the parameters that model accepts. ```json { "modes": ["t2v", "i2v", "v2v"], "resolutions": ["480p", "720p", "1080p"], "default_resolution": "720p", "min_duration_seconds": 4, "max_duration_seconds": 30, "supports_audio": true, "aspect_ratios": ["21:9", "16:9", "4:3", "1:1", "3:4", "9:16", "adaptive"] } ``` | Field | Type | Description | |------|------|------| | `modes` | string[] | Generation modes the model supports: `t2v` text-to-video, `i2v` image-to-video, `v2v` video as reference. You do not pass a mode in the request; it is inferred from the input fields. See [Mode detection](https://ofox.io/docs/api/videos/create#modes) | | `resolutions` | string[] | Accepted `resolution` values; values outside the list are rejected | | `default_resolution` | string | Applied when the request omits both `resolution` and `size` | | `min_duration_seconds` | number | Lower bound of `duration`, in seconds | | `max_duration_seconds` | number | Upper bound of `duration`, in seconds | | `supports_audio` | boolean | Whether `generate_audio: true` produces an audio track | | `aspect_ratios` | string[] | Accepted `aspect_ratio` values; `adaptive` keeps the input image's ratio | `video_attributes` is the source of truth for a single model's `resolution`, `duration`, and `aspect_ratio`. The parameter ranges listed in [Create video task](https://ofox.io/docs/api/videos/create) are the union across all models, so a value valid there may still be rejected by a specific model. ## Query the live list The Models API is a public endpoint and requires no API key. Filter on `supported_endpoints` to keep only video models: **cURL** ```bash filename="Terminal" curl -s https://api.ofox.io/v1/models \ | jq -r '.data[] | select(.supported_endpoints[]? == "/v1/videos") | .id' ``` **Python** ```python filename="video_models.py" showLineNumbers import requests models = requests.get("https://api.ofox.io/v1/models").json()["data"] for m in models: if "/v1/videos" in m.get("supported_endpoints", []): va = m["video_attributes"] print(m["id"], va["modes"], va["resolutions"], va["max_duration_seconds"]) ``` **TypeScript** ```typescript filename="video-models.ts" showLineNumbers const resp = await fetch('https://api.ofox.io/v1/models') const { data } = await resp.json() for (const m of data) { if (!m.supported_endpoints?.includes('/v1/videos')) continue const va = m.video_attributes console.log(m.id, va.modes, va.resolutions, va.max_duration_seconds) } ``` New models go live independently of docs releases. When you need the latest list, query this endpoint directly. ## Next - **Seedance family** - **Wan & HappyHorse family** - **Hailuo family** - **Create video task** - **Provider routing** - **Video API overview**