API 参考
CyberBara 对外 API v1 使用说明
概览
CyberBara 对外 API 统一在 /api/v1 下,支持:
- 提交生图任务
- 提交生视频任务
- 上传参考图并获取可复用 URL
- 查询任务状态与输出
- 查询积分余额
- 查询积分消耗明细
- 发起任务前积分预估
- 获取公开模型列表
对外接口不会暴露底层 provider 信息。
基础地址
请使用你自己的部署域名:
https://<your-domain>示例:
https://cyberbara-preview.iamzerolu.workers.dev鉴权方式
二选一传 API Key:
Authorization: Bearer <API_KEY>或
x-api-key: <API_KEY>缺失或无效会返回 401。
返回格式
成功:
{
"data": {}
}失败:
{
"error": {
"code": "error_code",
"message": "错误说明",
"details": {}
}
}模型接口
GET /api/v1/models
可选参数:
media_type=image|video
示例:
curl -X GET 'https://<your-domain>/api/v1/models?media_type=video' \
-H 'Authorization: Bearer <API_KEY>'返回示例:
{
"data": {
"models": [
{
"model": "sora-2",
"media_type": "video",
"supported_scenes": ["text-to-video", "image-to-video"]
},
{
"model": "kling-2.6",
"media_type": "video",
"supported_scenes": ["text-to-video", "image-to-video"]
}
],
"total": 2
}
}错误示例(invalid_media_type):
{
"error": {
"code": "invalid_media_type",
"message": "media_type must be \"image\" or \"video\"."
}
}上传接口
POST /api/v1/uploads/images
上传一张或多张参考图,返回可直接用于 options.image_input 的 URL。
请求要求:
Content-Type: multipart/form-data- 字段名:
files(单文件也可用file) - 单次最多
10张 - 单张最大
10MB - 支持 mime:
image/jpeg、image/jpg、image/png、image/webp、image/gif、image/svg+xml、image/avif、image/heic、image/heif
示例:
curl -X POST 'https://<your-domain>/api/v1/uploads/images' \
-H 'Authorization: Bearer <API_KEY>' \
-F 'files=@./reference.png'返回示例:
{
"data": {
"files": [
{
"url": "https://cdn.example.com/uploads/api/v1/uploads/3e7e48e6/7f2f25f8d6c26f11b2a5bb6b3f7f4a28.png",
"key": "api/v1/uploads/3e7e48e6/7f2f25f8d6c26f11b2a5bb6b3f7f4a28.png",
"filename": "reference.png",
"content_type": "image/png",
"size": 245123,
"deduped": false
}
],
"urls": [
"https://cdn.example.com/uploads/api/v1/uploads/3e7e48e6/7f2f25f8d6c26f11b2a5bb6b3f7f4a28.png"
],
"count": 1
}
}POST /api/v1/uploads/videos
上传参考视频,然后在 options.video_input(或 seedance-2-watermark-remover 使用 options.video_url)中使用返回的 URL。
请求说明:
Content-Type: multipart/form-data- 字段名:
files(单文件也可用file) - 单次最多:
1个文件 - 单文件大小上限:
50MB - 支持的 mime 类型:
video/mp4、video/quicktime
示例:
curl -X POST 'https://<your-domain>/api/v1/uploads/videos' \
-H 'Authorization: Bearer <API_KEY>' \
-F 'files=@./reference.mp4'返回示例:
{
"data": {
"files": [
{
"url": "https://cdn.example.com/uploads/api/v1/uploads/3e7e48e6/2d9b18f0b5a0a9b4c65b7f6c3b2f7c32.mp4",
"key": "api/v1/uploads/3e7e48e6/2d9b18f0b5a0a9b4c65b7f6c3b2f7c32.mp4",
"filename": "reference.mp4",
"content_type": "video/mp4",
"size": 1245123,
"deduped": false
}
],
"urls": [
"https://cdn.example.com/uploads/api/v1/uploads/3e7e48e6/2d9b18f0b5a0a9b4c65b7f6c3b2f7c32.mp4"
],
"count": 1
}
}错误示例(invalid_file_type):
{
"error": {
"code": "invalid_file_type",
"message": "Unsupported image type for file \"sample.pdf\".",
"details": {
"index": 0,
"filename": "sample.pdf"
}
}
}图生图调用示例:
{
"model": "nano-banana-pro",
"scene": "image-to-image",
"prompt": "Keep composition, make it cinematic at night",
"options": {
"image_input": ["https://cdn.example.com/uploads/api/v1/uploads/...png"]
}
}积分接口
GET /api/v1/credits/balance
获取当前可用积分。
curl -X GET 'https://<your-domain>/api/v1/credits/balance' \
-H 'Authorization: Bearer <API_KEY>'返回示例:
{
"data": {
"user_id": "3e7e48e6-f2fa-4f66-abf8-db7a40eaf517",
"remaining_credits": 44,
"updated_at": "2026-03-03T04:08:19.320Z"
}
}错误示例(invalid_api_key):
{
"error": {
"code": "invalid_api_key",
"message": "Invalid API key."
}
}POST /api/v1/credits/quote
发起任务前做积分预估。
请求参数:
model必填media_type可选(若模型无法自动推断则必填)scene可选但建议传options可选
curl -X POST 'https://<your-domain>/api/v1/credits/quote' \
-H 'Authorization: Bearer <API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"model": "nano-banana-pro",
"media_type": "image",
"scene": "text-to-image",
"options": { "resolution": "1k" }
}'返回示例:
{
"data": {
"model": "nano-banana-pro",
"media_type": "image",
"scene": "text-to-image",
"estimated_credits": 8,
"remaining_credits": 44,
"can_afford": true,
"pricing_rule": "nano-banana-pro",
"fallback_pricing": false
}
}错误示例(unsupported_model):
{
"error": {
"code": "unsupported_model",
"message": "Model is not supported."
}
}GET /api/v1/credits/usage
查询参数:
page默认1limit默认20,最大100from可选,支持 ISO 时间或YYYY-MM-DDto可选,支持 ISO 时间或YYYY-MM-DD- 仅日期值按 UTC 解析(
from->00:00:00.000Z,to->23:59:59.999Z)
curl -X GET 'https://<your-domain>/api/v1/credits/usage?page=1&limit=20&from=2026-03-01&to=2026-03-03' \
-H 'Authorization: Bearer <API_KEY>'返回示例:
{
"data": {
"summary": {
"page": 1,
"limit": 20,
"total": 2,
"total_pages": 1,
"total_credits_consumed": 28,
"from": "2026-03-03T00:00:00.000Z",
"to": "2026-03-03T23:59:59.999Z"
},
"items": [
{
"id": "0a961844-e042-4a17-bf23-2a5f2680d375",
"transaction_no": "79739092304928500",
"credits_consumed": 20,
"scene": "text-to-video",
"description": "generate video",
"media_type": "video",
"task_id": "2fa99a50-fb96-407b-a562-82de8265f48e",
"created_at": "2026-03-03T04:31:55.116Z"
}
]
}
}错误示例(invalid_date):
{
"error": {
"code": "invalid_date",
"message": "Invalid date format. Use ISO datetime or YYYY-MM-DD."
}
}错误示例(invalid_date_range):
{
"error": {
"code": "invalid_date_range",
"message": "The \"from\" date must be earlier than the \"to\" date."
}
}生成接口
POST /api/v1/images/generations
请求参数:
model必填prompt多数模型必填scene可选(text-to-image/image-to-image)options可选
curl -X POST 'https://<your-domain>/api/v1/images/generations' \
-H 'Authorization: Bearer <API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"model": "nano-banana-pro",
"prompt": "A cinematic portrait under neon rain",
"scene": "text-to-image",
"options": { "resolution": "1k" }
}'返回示例:
{
"data": {
"task_id": "uuid",
"status": "pending",
"media_type": "image",
"model": "nano-banana-pro",
"scene": "text-to-image",
"credits": {
"cost": 8,
"remaining": 36
},
"created_at": "2026-03-03T04:29:12.612Z"
}
}错误示例(insufficient_credits):
{
"error": {
"code": "insufficient_credits",
"message": "Insufficient credits."
}
}POST /api/v1/videos/generations
请求参数:
model必填prompt对大多数视频模型必填(包含seedance-*、kling-2.6、veo-*)sora-2-pro在 API 校验层可不传prompt,但仍建议传入scene可选(text-to-video/image-to-video/video-to-video)options可选
curl -X POST 'https://<your-domain>/api/v1/videos/generations' \
-H 'Authorization: Bearer <API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"model": "sora-2",
"prompt": "A calm drone shot over snowy mountains at sunrise",
"scene": "text-to-video",
"options": { "duration": "10", "resolution": "standard" }
}'返回示例:
{
"data": {
"task_id": "2fa99a50-fb96-407b-a562-82de8265f48e",
"status": "pending",
"media_type": "video",
"model": "sora-2",
"scene": "text-to-video",
"credits": {
"cost": 20,
"remaining": 16
},
"created_at": "2026-03-03T04:31:55.116Z"
}
}错误示例(insufficient_credits):
{
"error": {
"code": "insufficient_credits",
"message": "Insufficient credits."
}
}模型专属 Options(完整矩阵)
本节列出当前公开 API 下,各模型可用的全部请求参数规则。
通用请求字段:
model必填prompt是否必填取决于模型(见下文每个模型)scene选填,但强烈建议显式传入options选填对象
当未传 scene 时的自动推断:
- 图片接口:
options.image_input至少有一个 URL ->image-to-image- 否则 ->
text-to-image
- 视频接口:
options.video_input至少有一个 URL ->video-to-video- 否则若
options.image_input至少有一个 URL ->image-to-video - 否则 ->
text-to-video
公共 options 字段:
| 字段 | 类型 | 含义 |
|---|---|---|
options.image_input | string[] | 输入/参考图片 URL 列表 |
options.video_input | string[] | 输入/参考视频 URL 列表 |
说明:
- 对外 API 只接受
options.*字段。不要传 provider 内部字段,例如image_url、image_urls、input_images、imageUrls(仅seedance-2-watermark-remover支持options.video_url)。 - 若
prompt与options都为空,会返回invalid_request。 - 部分模型做严格参数校验;部分模型是透传模式(几乎不校验)。
- 严格校验模型里,未知字段会被忽略;透传模型里,未知字段会原样转发。
生图模型
nano-banana-2
支持场景:text-to-image、image-to-image。
校验级别:固定字段校验 + 轻量归一化。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 两个场景都必填 |
options.image_input | string[] | image-to-image 必填 | URL 数组 | 非空时可用于自动推断 image-to-image |
options.aspect_ratio | string | 否 | 任意非空字符串 | 原样透传 |
options.resolution | string | 否 | 归一化后为 1K / 2K / 4K | 输入如 1k/2k/4k 会归一化;其他字符串原样透传 |
options.output_format | string | 否 | 归一化后为 jpg / png | jpeg 会变为 jpg;其他字符串原样透传 |
options.google_search | boolean | 否 | 默认不传 | 仅此模型支持 |
nano-banana-pro
支持场景:text-to-image、image-to-image。
校验级别:固定字段校验 + 轻量归一化。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 两个场景都必填 |
options.image_input | string[] | image-to-image 必填 | URL 数组 | 非空时可用于自动推断 image-to-image |
options.aspect_ratio | string | 否 | 任意非空字符串 | 原样透传 |
options.resolution | string | 否 | 归一化后为 1K / 2K / 4K | 输入如 1k/2k/4k 会归一化;其他字符串原样透传 |
options.output_format | string | 否 | 归一化后为 jpg / png | jpeg 会变为 jpg;其他字符串原样透传 |
生视频模型
除 kling-video-o1、seedance-2、seedance-2-fast、seedance-2-preview、seedance-2-fast-preview、seedance-2-watermark-remover 外,以下模型都不支持 video-to-video,因此不应传 options.video_input。
sora-2
支持场景:text-to-video、image-to-video。
校验级别:严格校验。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 两个场景都必填 |
options.image_input | string[] | image-to-video 必填 | URL 数组 | 用于图生视频输入 |
options.aspect_ratio | string | 否 | landscape / portrait(默认 landscape) | 严格校验 |
options.duration / options.n_frames | string 或 number | 否 | 10 / 15(默认 10) | 严格校验 |
options.remove_watermark | boolean | 否 | 默认 true | 严格校验 |
options.upload_method | string | 否 | s3 / oss(默认 s3) | 严格校验 |
sora-2-pro
支持场景:text-to-video、image-to-video。
校验级别:严格校验。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | API 层非必填 | 选填 | 建议传入 |
options.image_input | string[] | image-to-video 必填 | URL 数组 | 用于图生视频输入 |
options.aspect_ratio | string | 否 | landscape / portrait(默认 landscape) | 严格校验 |
options.duration / options.n_frames | string 或 number | 否 | 10 / 15(默认 10) | 严格校验 |
options.resolution / options.size | string | 否 | standard / high(默认 standard) | 严格校验 |
seedance-2
支持场景:text-to-video、image-to-video、video-to-video。
校验级别:严格校验。
说明:
- 这是官方正式版 Seedance 2 接口,和 preview 模型分开。
video-to-video的计费会同时计算输入视频时长与输出时长。- 你可以直接传
options.mode,但在 CyberBara 内通常会根据场景和引用自动推断。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 所有场景都必填 |
options.image_input | string[] | image-to-video 必填 | URL 数组,所有引用总数最多 12 | 可作为首尾帧输入,或作为 omni reference 的图片引用 |
options.video_input | string[] | video-to-video 必填 | 单个 URL,输入视频总时长上限 15.4s | 走官方 omni-reference 模式 |
options.audio_input | string[] | 否 | URL 数组,所有引用总数最多 12 | 仅 omni reference 有效;纯音频请求会被拒绝 |
options.duration | string 或 number | 否 | 4 到 15 的整数(默认 5) | 在 video-to-video 中表示输出时长 |
options.aspect_ratio | string | 否 | 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16(默认 16:9) | 在首尾帧模式下,如果源图像决定构图,该值可能被忽略 |
options.mode | string | 否 | text_to_video / first_last_frames / omni_reference | 可选显式覆盖 |
seedance-2-fast
支持场景:text-to-video、image-to-video、video-to-video。
校验级别:严格校验。
字段与 seedance-2 一致。
seedance-2-preview
支持场景:text-to-video、image-to-video、video-to-video。
校验级别:严格校验。
说明:
- 这是旧版 preview 接口。
- preview 的定价和参数行为与正式版
seedance-2/seedance-2-fast不同。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 所有场景都必填 |
options.image_input | string[] | image-to-video 必填 | URL 数组(最多 9 张) | 可在 prompt 中使用 @image1、@image2 引用 |
options.video_input | string[] | video-to-video 必填 | 单个 URL | Seedance 2.0 视频编辑模式,必须只传 1 个视频 URL |
options.duration | string 或 number | 否(video-to-video 时忽略) | 5 / 10 / 15(默认 5) | 视频编辑模式下时长由输入视频决定 |
options.aspect_ratio | string | 否 | 16:9 / 9:16 / 4:3 / 3:4(默认 16:9) | 仅尽力生效;参考图像长宽比可能覆盖该值 |
options.parent_task_id | string | 否 | 任务 ID | 基于历史 Seedance 2.0 任务扩展;缺省字段可从 parent 继承 |
seedance-2-fast-preview
支持场景:text-to-video、image-to-video、video-to-video。
校验级别:严格校验。
字段与 seedance-2-preview 一致。
seedance-2-watermark-remover
支持场景:video-to-video。
校验级别:严格校验。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 否 | 选填 | 去水印不需要 prompt |
options.video_input | string[] | 是 | 单个 URL | 需要处理的视频 URL |
options.video_url | string | 是 | 单个 URL | 也可用 options.video_url(二选一) |
options.duration | string 或 number | 否 | 自动识别 | 可选;不传时服务会自动识别视频时长 |
seedance-1-pro
支持场景:text-to-video、image-to-video。
校验级别:严格 + 部分字符串透传。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 两个场景都必填 |
options.image_input | string[] | image-to-video 必填 | 取第一张 URL | image-to-video 至少要一张图 |
options.resolution | string | 否 | 默认 720p | 推荐:480p、720p、1080p |
options.duration | string 或 number | 否 | 默认 5 | 推荐:5、10 |
options.aspect_ratio | string | 否 | 默认 16:9 | 仅 text-to-video 使用;image-to-video 会忽略该字段 |
options.camera_fixed | boolean | 否 | 默认不传 | 支持 |
options.seed / options.seeds | integer | 否 | -1 到 2147483647 | 严格范围校验 |
options.enable_safety_checker | boolean | 否 | 默认不传 | 支持 |
seedance-1-lite
支持场景:text-to-video、image-to-video。
校验级别:严格 + 部分字符串透传。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 两个场景都必填 |
options.image_input | string[] | image-to-video 必填 | 取第一张 URL | 若有第二张,会自动作为 end_image_url |
options.resolution | string | 否 | 默认 720p | 推荐:480p、720p、1080p |
options.duration | string 或 number | 否 | 默认 5 | 推荐:5、10 |
options.aspect_ratio | string | 否 | 默认 16:9 | 仅 text-to-video 使用;image-to-video 会忽略该字段 |
options.camera_fixed | boolean | 否 | 默认不传 | 支持 |
options.seed / options.seeds | integer | 否 | -1 到 2147483647 | 严格范围校验 |
options.enable_safety_checker | boolean | 否 | 默认不传 | 仅 text-to-video 支持 |
options.end_image_url | string | 否 | URL | 仅 image-to-video 支持 |
seedance-1-pro-fast
支持场景:image-to-video。
校验级别:严格 + 部分字符串透传。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 必填 |
options.image_input | string[] | 是 | 取第一张 URL | 必填 |
options.resolution | string | 否 | 默认 720p | 推荐:720p、1080p |
options.duration | string 或 number | 否 | 默认 5 | 推荐:5、10 |
kling-2.6
支持场景:text-to-video、image-to-video。
校验级别:严格校验。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 两个场景都必填 |
options.image_input | string[] | image-to-video 必填 | URL 数组 | image-to-video 至少一张图 |
options.duration | string 或 number | 否 | 5 / 10(默认 5) | 严格校验 |
options.sound | boolean | 否 | 默认 false | 严格校验 |
options.aspect_ratio | string | 否 | 1:1 / 16:9 / 9:16(默认 16:9) | 仅 text-to-video 使用;归一化后严格校验 |
veo-3.1-fast
支持场景:text-to-video、image-to-video。
校验级别:严格校验。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 必填 |
options.image_input | string[] | 条件必填 | URL 数组 | 是否必填由 generationType 决定 |
options.generationType | string | 否 | TEXT_2_VIDEO / FIRST_AND_LAST_FRAMES_2_VIDEO / REFERENCE_2_VIDEO | 不传时按 image_input 数量自动推断 |
options.aspect_ratio | string | 否 | 16:9 / 9:16 / Auto(默认 16:9) | landscape -> 16:9,portrait -> 9:16;REFERENCE_2_VIDEO 只允许 16:9 |
options.seed / options.seeds | integer | 否 | 10000 到 99999 | 严格范围校验 |
options.enableTranslation | boolean | 否 | 默认不传 | 可选 |
options.watermark | string | 否 | 任意非空字符串 | 可选 |
规则:
TEXT_2_VIDEO:image_input必须为空FIRST_AND_LAST_FRAMES_2_VIDEO:image_input必须是 1-2 张REFERENCE_2_VIDEO:image_input必须是 1-3 张
veo-3.1-quality
支持场景:text-to-video、image-to-video。
校验级别:严格校验。
字段与 veo-3.1-fast 相同,但有一点区别:
options.generationType=REFERENCE_2_VIDEO不支持
kling-video-o1
支持场景:video-to-video。
校验级别:透传。
| 字段 | 类型 | 必填 | 取值 / 默认 | 说明 |
|---|---|---|---|---|
prompt | string | 是 | 非空字符串 | 必填 |
options.video_input | string[] | 实际调用建议必填 | 仅取第一条视频 URL | 不传 scene 时,video_input 非空有助于自动推断到 video-to-video |
options.image_input | string[] | 否 | URL 数组 | 可选参考图 |
options.* | any | 否 | 由模型侧定义 | 额外字段全部透传 |
kling-video-o1 为透传模型。除 options.video_input 外,可能还需要按 provider 要求传入 options.* 字段。
场景与参数快速对照
生图:
text-to-image:通常只需要promptimage-to-image:需传options.image_input
生视频:
text-to-video:应传promptimage-to-video:需传options.image_input;多数模型还需传promptvideo-to-video:需传options.video_input;若模型要求也需传prompt
如需稳定可控的路由结果,请始终显式传 scene。
任务查询
GET /api/v1/tasks/{taskId}
轮询该接口直到任务进入终态。
curl -X GET 'https://<your-domain>/api/v1/tasks/<TASK_ID>' \
-H 'Authorization: Bearer <API_KEY>'返回示例(pending):
{
"data": {
"task": {
"id": "2fa99a50-fb96-407b-a562-82de8265f48e",
"status": "pending",
"media_type": "video",
"model": "sora-2",
"scene": "text-to-video",
"prompt": "A cinematic wide shot of waves hitting black volcanic beach at sunrise",
"credits": { "cost": 20 },
"output": { "images": [], "videos": [] },
"created_at": "2026-03-03T04:31:55.116Z",
"updated_at": "2026-03-03T04:32:08.511Z"
}
}
}错误示例(task_not_found):
{
"error": {
"code": "task_not_found",
"message": "Task not found."
}
}状态值:
pendingprocessingsuccessfailedcanceled
成功后可从以下字段拿输出:
data.task.output.imagesdata.task.output.videos
任务输出示例
生图任务成功:
{
"data": {
"task": {
"id": "20b061f3-d051-4795-b355-856325d08f7c",
"status": "success",
"media_type": "image",
"model": "nano-banana-pro",
"scene": "text-to-image",
"prompt": "A cinematic portrait under neon rain",
"credits": { "cost": 8 },
"output": {
"images": [
"https://static.nanobananaproprompts.com/cyberbara_uploads/kie/image/21075dc0-7968-46fd-93fe-e366f558325b.png"
],
"videos": []
},
"created_at": "2026-03-03T04:29:12.612Z",
"updated_at": "2026-03-03T04:29:31.475Z"
}
}
}生视频任务成功:
{
"data": {
"task": {
"id": "2fa99a50-fb96-407b-a562-82de8265f48e",
"status": "success",
"media_type": "video",
"model": "sora-2",
"scene": "text-to-video",
"prompt": "A cinematic wide shot of waves hitting black volcanic beach at sunrise",
"credits": { "cost": 20 },
"output": {
"images": [],
"videos": [
"https://static.nanobananaproprompts.com/cyberbara_uploads/kie/video/b55bf86d-e3a3-4b81-ae28-a1cff40a71db.mp4"
]
},
"created_at": "2026-03-03T04:31:55.116Z",
"updated_at": "2026-03-03T04:34:22.836Z"
}
}
}任务失败:
{
"data": {
"task": {
"id": "341ab8cd-1296-4a5d-968a-cccf60c9caab",
"status": "failed",
"media_type": "video",
"model": "sora-2",
"scene": "text-to-video",
"prompt": "A calm drone shot over snowy mountains at sunrise",
"credits": { "cost": 20 },
"output": {
"images": [],
"videos": []
},
"created_at": "2026-03-03T04:30:18.041Z",
"updated_at": "2026-03-03T04:31:01.420Z"
}
}
}推荐接入流程
- 调用
GET /api/v1/models - 如需参考图,先调用
POST /api/v1/uploads/images获取 URL - 调用
POST /api/v1/credits/quote - 调用生图或生视频接口创建任务
- 轮询
GET /api/v1/tasks/{taskId}直到终态 - 用
GET /api/v1/credits/usage核对扣费
常见错误码(非完整列表)
api_key_requiredinvalid_api_keytoo_many_requestsinvalid_jsoninvalid_multipartinvalid_dateinvalid_date_rangefiles_requiredtoo_many_filesinvalid_file_typeinvalid_file_sizefile_too_largeinvalid_modelunsupported_modelinvalid_model_for_media_typeinvalid_scenescene_not_supportedinvalid_media_typeinvalid_requestservice_unavailableinsufficient_creditsupload_failedgeneration_failedinvalid_task_idtask_not_foundtask_not_readyquery_failedinternal_error