创建视频
异步生成视频:创建任务、轮询状态,完成后下载内容。
/model/v1/videos● 支持请求体
modelstring可选◐ 部分支持Video model id, for example `wan2.7-t2v`; list candidates with listModels?type=video. Router support (partial): Select a registered video model explicitly, for example wan2.7-t2v (size=1280x720, seconds=4). Capability preflight errors are reported before creation.
请显式选择已注册的视频模型,例如 wan2.7-t2v(size=1280x720,seconds=4)。能力预检失败会在创建前报错。
promptstring必填Text description of the video, at least 1 character. Router support (supported): Controls video content; missing or empty values return 400.
控制视频内容;缺失或空值返回 400。
secondsstring | integer可选同时提供时优先于 duration。
已验证 wan2.7-t2v 的时长生效;不合法或超出模型能力的值在预检阶段返回 400。
durationinteger可选Length of the video in whole seconds. `seconds` takes precedence when both are given.
sizestring可选◐ 部分支持Output resolution as `WIDTHxHEIGHT`, for example `1280x720`. Router support (partial): Subject to model capability preflight. Earlier wan2.7-t2v samples always produced 1280x720; accepted sizes are not guaranteed pixel-for-pixel.
受模型能力预检限制;早期 wan2.7-t2v 样本始终输出 1280x720,不保证所有接受的尺寸都会按像素兑现。
input_referencestring | object可选Reference image for image-to-video: a URL or base64 data URL, an object with `image_url`, or an uploaded image file (multipart, at most 20 MiB).
▸ 展开子字段(1)
image_urlstring | object必填URL or base64 data URL of the reference image, as a string or an object with `url`.
input_referencesarray可选Several reference images; each entry is a URL or base64 data URL, or an object with `image_url`.
▸ 展开子字段(1)
image_urlstring | object可选URL or base64 data URL of the reference image, as a string or an object with `url`.
frame_imagesarray可选Images that pin the first and last frame; at most 2 entries.
▸ 展开子字段(3)
typeany可选Always `image_url`. Discriminator of the `type`-tagged union this object belongs to.
frame_typeany必填Frame to constrain with the supplied image: first_frame or last_frame. Each frame type may occur at most once.
image_urlobject必填The image to pin.
resolutionstring可选Output resolution label such as `720p`, for models that take a label instead of `size`.
aspect_ratiostring可选Aspect ratio of the video such as `16:9`.
▸ 更多参数(4)
generate_audioboolean可选Whether the video carries a generated audio track. Router support (supported): false produces no audio track on wan2.7-t2v; the default output includes audio.
wan2.7-t2v 的 false 输出无音轨,默认输出含音轨。
seedinteger可选Seed for reproducible generation, on models that support it.
callback_urlstring可选HTTP or HTTPS callback URL, forwarded to models that support completion callbacks.
qualitystring可选Provider-specific quality setting.
返回
200
按输出秒数计费;每秒价格见 GET /model/v1/models 的 pricing.video_second(USD/秒)。
鉴权、限流、参数校验等平台错误按 problem+json 返回;OCR 的错误也为 problem+json,其它模型调用的错误按该端点所属格式(OpenAI 或 Anthropic)返回,参见 错误码
响应
HTTP 200
Success
application/json
| 名称 | 类型 | 说明 |
|---|---|---|
| id | string | Id of the video job; pass it as `video_id` to retrieve, download or delete it. |
| object | string | Object type; always `video`. |
| model | string | Model that generates the video. |
| status | string | Lifecycle of the job. Poll until it is `completed` or `failed`. |
| progress | integer | Progress from 0 to 100. It is 0 until the job completes and 100 once it has. |
| created_at | integer | Unix time in seconds at which the job was created. |
| completed_at | integer | null | Unix time in seconds at which the job completed; null until then. |
| expires_at | integer | null | Unix time in seconds after which the output expires; null because outputs currently have no expiry. |
| seconds | string | Length of the video in seconds, as a string; for a completed job it is the delivered length. |
| size | string | Resolution of the video as `WIDTHxHEIGHT`; null when the provider did not report one. |
| prompt | string | null | Prompt the job was created with. |
| remixed_from_video_id | null | Always null; remix is not supported. |
| error | object | null | Why the job failed; null unless status is `failed`. |
| error.code | string | Machine-readable failure code. |
| error.message | string | Human-readable failure message. |
| polling_url | string | Relative URL to poll for the job state; same as retrieveVideo for this job. |
| unsigned_urls | array<string> | Relative URLs of the finished output; empty until the video is ready. Download them with the same API key. |
| usage | object | Cost of the job; present once a price applies. |
| usage.cost | number | Cost of the job in USD: delivered seconds times the per-second price once completed, 0 while running. |
创建、轮询与下载
先创建视频,保存返回的 id;再读取视频轮询 status,queued / in_progress 时继续等待,failed 时停止并查看 error;只有 completed 后才下载视频内容。
典型耗时为 10–15 分钟;以下示例最多轮询 30 分钟,超时后可用同一个任务 ID 继续查询。
# Requires curl and jq. Set PRAXIS_API_KEY and API_BASE (your API origin).
job=$(curl --fail-with-body -sS "$API_BASE/model/v1/videos" \
-H "Authorization: Bearer $PRAXIS_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"wan2.7-t2v","prompt":"A cat stretching in the morning sun","seconds":"4","size":"1280x720"}') || exit 1
VIDEO_ID=$(printf '%s' "$job" | jq -er '.id') || exit 1
for attempt in $(seq 1 360); do
job=$(curl --fail-with-body -sS "$API_BASE/model/v1/videos/$VIDEO_ID" \
-H "Authorization: Bearer $PRAXIS_API_KEY") || exit 1
status=$(printf '%s' "$job" | jq -er '.status') || exit 1
case "$status" in
completed) break ;;
failed) printf '%s\n' "$job"; exit 1 ;;
queued|in_progress) sleep 5 ;;
*) printf 'Unexpected status: %s\n' "$status"; exit 1 ;;
esac
done
[ "$status" = completed ] || { printf 'Still processing; resume polling %s\n' "$VIDEO_ID"; exit 1; }
curl --fail-with-body -sS "$API_BASE/model/v1/videos/$VIDEO_ID/content" \
-H "Authorization: Bearer $PRAXIS_API_KEY" -o video.mp4