视频生成 API
视频生成是异步任务:提交后立即返回任务 ID,之后轮询任务状态,完成后下载视频。只有视频生成模型(模型目录里按「秒」计价的模型)可以调用这些接口,对话模型调用会返回 400。
每个视频模型支持一种或两种协议,模型详情页的「如何调用」会列出该模型可用的接口。模型不支持的入口会直接返回 400 并提示应改用哪个入口,平台不会替你换协议。
模型名可以写模型目录里的完整 ID,也可以写去掉命名空间的官方 ID(如 <model-id>)。
生命周期与计费
- 提交:按「请求秒数 × 每秒价格」冻结余额(预授权)。余额不足返回
402 insufficient_balance,不会创建任务。 - 生成中:状态为
queued→in_progress。冻结的金额会显示在控制台【用量分析 → 请求日志 → 视频生成任务】里。 - 完成:按实际生成秒数(不超过请求秒数)结算一次,多冻结的部分自动释放;之后可在请求日志中按
request_id查到这笔扣费。 - 失败 / 取消 / 超时:不计费,冻结的金额全部释放。
平台会在后台持续推进未完成的任务,结算不依赖你是否轮询。
协议一:OpenAI Videos(/v1/videos)
提交任务
POST https://api.admesh.ai/v1/videos
curl https://api.admesh.ai/v1/videos \
-H "Authorization: Bearer $ADMESH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<model-id>",
"prompt": "A corgi running on the beach at sunset, cinematic",
"seconds": "8"
}'
返回视频对象,id 即任务 ID(形如 video_…):
{ "id": "video_8f2a…", "object": "video", "model": "<model-id>", "status": "queued", "progress": 0, "seconds": "8", "created_at": 1762650000 }
查询状态
curl https://api.admesh.ai/v1/videos/$VIDEO_ID \
-H "Authorization: Bearer $ADMESH_API_KEY"
status 为 queued / in_progress / completed / failed;completed 时 seconds 是实际计费秒数,失败时 error.code 给出原因。
下载视频
curl -L https://api.admesh.ai/v1/videos/$VIDEO_ID/content \
-H "Authorization: Bearer $ADMESH_API_KEY" \
-o video.mp4
只有 completed 的任务可以下载。可选查询参数 variant=video|thumbnail|spritesheet(需模型支持)。
列出与删除
GET /v1/videos:列出你最近的视频任务。DELETE /v1/videos/{id}:删除视频任务。
协议二:任务接口(/v1/video/generations)
提交任务
curl https://api.admesh.ai/v1/video/generations \
-H "Authorization: Bearer $ADMESH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<model-id>",
"prompt": "A corgi running on the beach at sunset, cinematic",
"duration": 5
}'
返回 { "task_id": "video_…", "id": "video_…", "status": "queued", … }。
查询状态
curl https://api.admesh.ai/v1/video/generations/$TASK_ID \
-H "Authorization: Bearer $ADMESH_API_KEY"
返回 { "code": "success", "data": { "task_id": "…", "status": "IN_PROGRESS", "progress": "40%", … } }。data.status 为 QUEUED / IN_PROGRESS / SUCCESS / FAILURE;SUCCESS 时 data.result_url 是视频下载地址(即上面的 /v1/videos/{id}/content,下载同样需要带 API Key)。
请求字段
请求体只接受以下字段,请勿传入其它参数:
| 字段 | 协议 | 说明 |
|---|---|---|
model |
两者 | 必填,视频模型 ID |
prompt |
两者 | 文本描述;OpenAI Videos 必填,任务接口与 image 至少给一个 |
seconds |
OpenAI Videos | 视频秒数,字符串或整数(如 "8");不传按模型默认秒数 |
duration |
任务接口 | 视频秒数,整数;不传按模型默认秒数 |
size |
两者 | 分辨率,如 1280x720(取值以模型支持为准) |
input_reference |
OpenAI Videos | 参考图(图生视频,需模型支持) |
image |
任务接口 | 参考图(图生视频,需模型支持) |
- 秒数必须是正整数,且不超过模型的最长秒数;部分模型只支持固定几档秒数(如 5 / 10 秒),以模型详情页为准。
- 不支持
stream;n只能为 1(一次一个视频)。
常见错误
| HTTP | code | 说明 |
|---|---|---|
| 400 | invalid_request |
模型不是视频模型 / 模型不支持该入口 / 秒数非法或超过上限 / 视频尚未完成就下载 |
| 401 | invalid_api_key |
API Key 无效或已撤销 |
| 402 | insufficient_balance |
余额不足以冻结「秒数 × 每秒价格」 |
| 403 | model_not_allowed |
该 API Key 没有开通这个模型 |
| 404 | not_found |
任务不存在,或不属于当前账户 |
| 429 | rate_limit_exceeded |
触达限流,稍后重试 |
| 502 / 503 / 504 | upstream_error / model_provider_unavailable / upstream_timeout |
服务暂时不可用,提交未成功时不计费 |
任务失败时,OpenAI Videos 在 error.code 中给出原因(如 upstream_timeout 表示生成超时),任务接口在 data.fail_reason 中给出说明。失败的任务不计费。