开发者文档

API 接入文档

使用一套 API Key 接入 TokenBox 模型网关。接口兼容 OpenAI Chat Completions 与 Images,并提供异步视频生成能力。

创建 API Key查看可用模型https://tokenbox.me/v1

快速开始

首次接入按以下顺序完成。生产调用前,请先确认积分余额、Key 权限和模型状态。

  1. 01

    创建密钥

    登录 Console 创建 API Key。明文只展示一次,请立即存入服务端密钥管理系统。

  2. 02

    发现模型

    调用 GET /v1/models,以响应中的 id 作为后续请求的 model。

  3. 03

    发起调用

    根据模型能力调用文本或视频端点,并在 Console 日志中核对结果和积分消耗。

鉴权与权限

所有网关请求都通过 Authorization Bearer 头携带 API Key。一个 API Key 可同时持有多个 scope,因此同一个 Key 既能调用对话(LLM)也能调用视频生成模型。默认新建的 Key 已包含全部 scope;你可以在 Console 的 API Keys 页面按需勾选或随时编辑某个 Key 的调用权限。

models.read

读取当前 Key 可见的模型目录

chat.completions

调用文本对话补全接口

images.generations

调用图像生成与编辑接口

video.generations

创建和查询视频生成任务

不要把 API Key 放入浏览器代码、移动端安装包、URL 或代码仓库。Key 泄露后应立即在 Console 禁用并重新创建。

模型与端点

不要在代码中猜测模型名称。先读取模型列表,只调用返回结果中满足业务能力的模型。

图片输入能力以当前 API Key 调用 GET /v1/models 的实时结果为准。仅当模型条目的 capabilities.vision 为 true 时,才可以发送图片;/v1/models 只返回当前 Key 可调用的模型,不要只依赖下方静态清单。

cURL
export TOKENBOX_API_KEY="tfk-your-key"

curl https://tokenbox.me/v1/models \
  -H "Authorization: Bearer $TOKENBOX_API_KEY"
方法路径用途
GET/v1/models列出当前 Key 可见的模型
GET/v1/models/{model}读取单个模型元数据
POST/v1/chat/completions创建文本对话补全
POST/v1/images/generations同步生成图像
POST/v1/images/edits使用参考图同步编辑图像
POST/v1/contents/generations/tasks创建异步视频任务
GET/v1/contents/generations/tasks/{task_id}查询视频任务状态
POST/api/v3/contents/generations/tasks创建异步视频任务 (Ark)
GET/api/v3/contents/generations/tasks/{task_id}查询视频任务状态 (Ark)

文本对话

文本接口兼容 OpenAI Chat Completions。请将 <TEXT_MODEL_ID> 替换为模型列表中支持文本对话的 id。

cURL
curl https://tokenbox.me/v1/chat/completions \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<TEXT_MODEL_ID>",
    "messages": [
      {"role": "user", "content": "用一句话介绍杭州"}
    ],
    "max_tokens": 256
  }'

Python

pip install openai

main.py
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["TOKENBOX_API_KEY"],
    base_url="https://tokenbox.me/v1",
)

response = client.chat.completions.create(
    model="<TEXT_MODEL_ID>",
    messages=[{"role": "user", "content": "用一句话介绍杭州"}],
)

print(response.choices[0].message.content)

Node.js

npm install openai

index.mjs
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.TOKENBOX_API_KEY,
  baseURL: "https://tokenbox.me/v1",
});

const response = await client.chat.completions.create({
  model: "<TEXT_MODEL_ID>",
  messages: [{ role: "user", content: "用一句话介绍杭州" }],
});

console.log(response.choices[0].message.content);

Claude / Fable 接入

Claude 系列(含 Fable、Haiku、Opus、Sonnet)均可使用 TokenBox API Key 和 OpenAI 兼容客户端调用。生产接入建议显式传入 max_tokens,并以 GET /v1/models 返回的模型状态为准。

模型 ID适用场景
anthropic/claude-fable-5Fable 5 稳定版本
anthropic/claude-fable-5-1Fable 5.1,推荐新接入使用
anthropic/claude-haiku-4-5-20251001低延迟、轻量任务
anthropic/claude-opus-4-6复杂推理与高质量生成
anthropic/claude-opus-4-7复杂推理与高质量生成
anthropic/claude-opus-4-8复杂推理与高质量生成
anthropic/claude-opus-5复杂推理与高质量生成
anthropic/claude-opus-5-5复杂推理与高质量生成
anthropic/claude-sonnet-4-6质量、速度与成本均衡
anthropic/claude-sonnet-5质量、速度与成本均衡

客户端只需调用 TokenBox 的 /v1/chat/completions,无需接入 /v1/messages,也不需要任何上游供应商密钥;协议转换由 TokenBox 完成。

cURL · Fable 5.1
curl https://tokenbox.me/v1/chat/completions \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-fable-5-1",
    "messages": [
      {"role": "user", "content": "用一句话介绍杭州"}
    ],
    "max_tokens": 1024
  }'

Python

pip install openai

fable.py
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["TOKENBOX_API_KEY"],
    base_url="https://tokenbox.me/v1",
)

response = client.chat.completions.create(
    model="anthropic/claude-fable-5-1",
    messages=[{"role": "user", "content": "用一句话介绍杭州"}],
    max_tokens=1024,
)

print(response.choices[0].message.content)

GPT 接入

GPT 系列同样使用 OpenAI Chat Completions。选择模型 ID 后,可直接复用 OpenAI SDK、现有消息结构和流式处理代码。

对支持视觉能力的 GPT 模型,将 messages[].content 设置为内容数组即可同时发送文字和图片。role: user 放在消息对象层级;content 数组内的 type: image_url 与 image_url 字段同级,图片地址放在 image_url.url。

模型 ID适用场景
openai/gpt-5.5通用对话与内容生成
openai/gpt-5.6-sol通用对话与内容生成
openai/gpt-5.6-terra低成本、高频调用
openai/gpt-6-astra复杂推理与高质量生成
openai/gpt-6-luna低成本、高频调用
openai/gpt-6-sol通用对话与内容生成
openai/codex-auto-review代码审查与工程任务

可用模型会随目录配置更新。上线前请通过 GET /v1/models 校验目标模型仍对当前 API Key 可见,不要仅依赖静态清单。

cURL · GPT 5.5
curl https://tokenbox.me/v1/chat/completions \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.5",
    "messages": [
      {"role": "user", "content": "用一句话介绍杭州"}
    ],
    "max_tokens": 1024
  }'

Python

pip install openai

gpt.py
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["TOKENBOX_API_KEY"],
    base_url="https://tokenbox.me/v1",
)

response = client.chat.completions.create(
    model="openai/gpt-5.5",
    messages=[{"role": "user", "content": "用一句话介绍杭州"}],
    max_tokens=1024,
)

print(response.choices[0].message.content)

GPT 图片输入

图片输入参数

参数类型必填说明
modelstring是从 GET /v1/models 返回结果中选择 capabilities.vision=true 的模型 ID。
messagesarray是对话消息数组;图片必须放在某条消息的 content 内容数组中。
messages[].rolestring是图片输入消息使用 user;role 与 content 同级。
messages[].contentarray是图片请求必须使用内容数组,不能使用纯字符串 content。
messages[].content[].typestring是内容项类型,只允许 text 或 image_url。
messages[].content[].textstring条件必填当 type=text 时传入文字提示词。
messages[].content[].image_url.urlstring条件必填当 type=image_url 时传入无前后空格、带 Host、上游可访问的 HTTP(S) 图片 URL。
messages[].content[].image_url.detailstring否可选图片清晰度:auto、low 或 high;默认由模型处理。

当前公开 Chat Completions 接口要求 image_url.url 是带 Host 且可被上游访问的 http:// 或 https:// 图片 URL。data:image/...;base64,... 和 asset://... 暂不支持;asset:// 仅用于视频生成素材引用。

发送前先确认 capabilities.vision 为 true。若模型不支持图片输入,接口会返回参数或模型能力错误,请改用支持视觉能力的模型。

cURL · GPT vision
curl https://tokenbox.me/v1/chat/completions \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.5",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "text", "text": "这张图片里有什么?"},
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg",
            "detail": "auto"
          }
        }
      ]
    }],
    "max_tokens": 256
  }'

Python

pip install openai

gpt-vision.py
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["TOKENBOX_API_KEY"],
    base_url="https://tokenbox.me/v1",
)

response = client.chat.completions.create(
    model="openai/gpt-5.5",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "这张图片里有什么?"},
            {
                "type": "image_url",
                "image_url": {
                    "url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg",
                    "detail": "auto",
                },
            },
        ],
    }],
    max_tokens=256,
)

print(response.choices[0].message.content)

Gemini 图像生成

使用 OpenAI Images 兼容端点同步生成或编辑图像。响应固定返回 data[].b64_json;客户端解码 Base64 后保存为图片文件。

先调用 GET /v1/models。仅使用 capabilities.image_generation=true 的模型,并从 image_prices 读取该模型当前可用的分辨率与单张人民币售价。

模型 ID支持分辨率
google/gemini-3.1-flash-image1K / 2K
google/gemini-3.1-flash-image-preview1K / 2K
google/gemini-3-pro-image1K / 2K / 4K
google/gemini-nano-banana-2.11K / 2K / 4K
生成图像
curl https://tokenbox.me/v1/images/generations \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-3-pro-image",
    "prompt": "现代茶饮产品摄影,白色影棚背景,柔和自然光,画面干净精确",
    "image_size": "2K",
    "aspect_ratio": "16:9",
    "n": 1,
    "response_format": "b64_json"
  }'
使用公网参考图编辑
curl https://tokenbox.me/v1/images/edits \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-nano-banana-2.1",
    "prompt": "保留主体结构,将背景改为浅蓝色影棚并增强产品质感",
    "image": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg",
    "image_size": "1K",
    "response_format": "b64_json"
  }'

Python

pip install requests

gemini-image.py
import base64
import os
import requests

response = requests.post(
    "https://tokenbox.me/v1/images/generations",
    headers={
        "Authorization": f"Bearer {os.environ['TOKENBOX_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "google/gemini-3-pro-image",
        "prompt": "现代茶饮产品摄影,白色影棚背景,柔和自然光,画面干净精确",
        "image_size": "2K",
        "aspect_ratio": "16:9",
        "n": 1,
        "response_format": "b64_json",
    },
)
response.raise_for_status()
with open("generated.png", "wb") as output:
    output.write(base64.b64decode(response.json()["data"][0]["b64_json"]))
1K:单次 n 最多 10 张。
2K:单次 n 最多 5 张。
4K:单次 n 最多 2 张,仅支持目录中包含 4K 档位的模型。
参考图最多 14 张,可使用公网 HTTP(S) URL、data:image/...;base64 数据 URL,或在 /v1/images/edits 使用 multipart 文件。

当前仅支持同步调用。不要发送 Prefer: respond-async 或 stream=true;异步偏好会返回 async_not_supported,成功响应只交付并计费请求 n 范围内的图像。

流式响应

设置 stream=true 后返回 SSE。客户端应持续读取 data 行,直到收到 data: [DONE]。

cURL · SSE
curl -N https://tokenbox.me/v1/chat/completions \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<TEXT_MODEL_ID>",
    "messages": [
      {"role": "user", "content": "用一句话介绍杭州"}
    ],
    "stream": true,
    "stream_options": {"include_usage": true}
  }'

视频生成

视频生成是异步接口。创建任务后保存响应中的 id,并轮询查询端点直到任务完成。

创建视频任务
export IDEMPOTENCY_KEY="$(uuidgen)"

curl https://tokenbox.me/v1/contents/generations/tasks \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bytedance/seedance-2.0",
    "content": [
      {"type": "text", "text": "雨后的杭州西湖,电影感航拍镜头"}
    ],
    "resolution": "720p",
    "ratio": "16:9",
    "duration": 5
  }'
查询任务状态
curl https://tokenbox.me/v1/contents/generations/tasks/<TASK_ID> \
  -H "Authorization: Bearer $TOKENBOX_API_KEY"

创建视频任务会消耗积分。每次创建必须传入唯一 Idempotency-Key;网络超时重试同一业务请求时必须复用原值,避免重复任务。

素材引用

素材库让你把常用的参考图片、视频、音频保存为可复用素材,并在视频生成时通过 asset:// 引用,无需每次都传公网 URL。素材可通过下面的 API(API Key 鉴权)或 Console「素材库」页面创建;创建后由平台异步中转到上游供应商,就绪(active)后才能被引用。

素材接口与视频生成共用 video.generations 权限,无需单独的 scope。上传采用对象存储预签名直传,API 不代理素材文件本身。所有素材按 API Key 所属用户隔离。

方法路径用途
POST/v1/asset-groups创建素材组(同用户下组名唯一)
GET/v1/asset-groups列出素材组
PATCH/v1/asset-groups/{vag_id}重命名素材组
DELETE/v1/asset-groups/{vag_id}删除素材组(组需为空)
POST/v1/assets登记素材并获取预签名上传凭证
POST/v1/assets/{vas_id}/complete确认上传完成,触发校验与入库
GET/v1/assets列出素材(可按组、类型、状态筛选)
GET/v1/assets/{vas_id}查询单个素材及其状态
GET/v1/assets/{vas_id}/preview获取素材的短期签名预览地址
POST/v1/assets/{vas_id}/retry重新入队单个可重试的失败素材
POST/v1/assets/retry批量重新入队失败素材(单次最多 100 条)
DELETE/v1/assets/{vas_id}删除素材
POST/v1/asset-imports创建 ZIP 批量导入任务
GET/v1/asset-imports/{vai_id}/upload查询服务端已确认分片,用于断点续传
POST/v1/asset-imports/{vai_id}/parts/{part_number}获取指定分片的新上传凭证
POST/v1/asset-imports/{vai_id}/complete确认 ZIP 上传并进入后台队列
GET/v1/asset-imports查询最近批量导入任务
GET/v1/asset-imports/{vai_id}查询批量导入进度与结果
GET/v1/asset-imports/{vai_id}/assets查询导入任务内的素材明细(支持状态筛选)

调用素材接口的 API Key 必须包含 video.generations 权限;缺少时返回 403 insufficient_scope。

兼容性:现有素材接口路径、请求字段、状态枚举和错误码保持不变;retryable 是新增响应字段,retry 路由为增量能力。严格 JSON 解码客户端应允许未知响应字段。

第一步:创建素材组

素材必须归属某个组。创建成功返回组 ID(形如 vag_ 前缀),用于后续登记素材。

创建素材组
curl https://tokenbox.me/v1/asset-groups \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "brand-kit"}'

第二步:登记、上传并确认素材

上传分三步:携带 Idempotency-Key 登记素材并获取预签名 URL → 用该 URL 直传字节到对象存储 → 调用 complete 确认。网络、限流重试或重新提交同一逻辑素材时必须复用原 Idempotency-Key;成功素材会直接复用,瞬时失败素材会自动重新入队。平台校验后异步中转到上游;随后轮询列表/详情直到 status 变为 active。

登记 + 直传 + 确认
# 1. Register the asset and receive a presigned upload grant
curl https://tokenbox.me/v1/assets \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Idempotency-Key: asset-import-20260913-001" \
  -H "Content-Type: application/json" \
  -d '{
    "group_id": "vag_xxxxxxxxxxxx",
    "name": "hero.jpg",
    "type": "image",
    "content_type": "image/jpeg",
    "size_bytes": 184320
  }'
# response: { "asset": { "id": "vas_...", "status": "uploading" },
#             "upload": { "method": "PUT", "url": "https://...", "headers": {...} } }

# 2. Upload the bytes straight to object storage using the grant
curl -X PUT "<upload.url>" \
  -H "Content-Type: image/jpeg" \
  --data-binary @hero.jpg

# 3. Finalize; the platform verifies size + content and relays to the provider
curl https://tokenbox.me/v1/assets/vas_xxxxxxxxxxxxxxxx/complete \
  -X POST -H "Authorization: Bearer $TOKENBOX_API_KEY"
轮询素材直到就绪
# Poll until status becomes "active", then reference it in video generation
curl "https://tokenbox.me/v1/assets?group_id=vag_xxxxxxxxxxxx&status=active" \
  -H "Authorization: Bearer $TOKENBOX_API_KEY"

查询失败素材并重试

GET /v1/assets 使用 status=failed 获取失败素材。响应中的 error_code 和 error_message 用于定位原因,retryable 决定是否允许重试。单条与批量重试均复用对象存储原件,不需要再次上传文件;批量接口通过 requeued 和 skipped 返回逐项结果,基础设施错误使用 skipped.code=retry_failed,可稍后仅重试该项。

查询失败素材、单条重试与批量重试
# 1. List failed assets. Each item includes error_code, error_message, and retryable.
curl "https://tokenbox.me/v1/assets?status=failed&limit=100&offset=0" \
  -H "Authorization: Bearer $TOKENBOX_API_KEY"

# 2. Retry one retryable asset
curl -X POST https://tokenbox.me/v1/assets/vas_xxxxxxxxxxxxxxxx/retry \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

# 3. Retry up to 100 failed assets in one request
curl -X POST https://tokenbox.me/v1/assets/retry \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"asset_ids":["vas_xxxxxxxxxxxxxxxx","vas_yyyyyyyyyyyyyyyy"]}'

# response: {
#   "requested": 2,
#   "requeued": [{"id":"vas_xxxxxxxxxxxxxxxx","status":"registering"}],
#   "skipped": [{"asset_id":"vas_yyyyyyyyyyyyyyyy","code":"not_retryable"}]
# }
error_coderetryable处理建议
InternalError / ProcessingFailed / unknown async resulttrue供应商包装错误或异步处理结果中的未知错误,平台按退避策略最多重新注册 3 次,也允许手动重试。
ModerationServiceErrorUploadFailedtrue火山审核服务暂时不可用,官方建议重新上传;平台复用原件重试。
HTTP 4xx request rejectionfalse供应商已明确拒绝创建请求;修正请求或供应商配置后重新上传。
FaceMismatchfalse真人脸一致性校验失败,原样重试无效,需更换符合授权的人像素材。
ContentRestricted / Input*SensitiveContentDetectedfalse火山内容安全或政策审核明确拒绝,需更换素材。
TypeMismatch / FormatUnsupported / FormatUndetectablefalse素材声明类型或文件格式不符合要求,需修正文件后重新上传。
AudioTrack* / Duration* / Width* / Height* / AspectRatio* / FileSize* / PixelCount* / Fps*false音轨、时长、尺寸、像素、文件大小或 FPS 不符合要求,需修正素材。

ZIP 批量导入任务

ZIP 使用 16 MiB 分片直传。单片失败只重传该片并自动续签;刷新后重新选择同一文件会查询服务端已确认分片并续传。调用 complete 后由后台 Worker 持久化执行。

创建并查询后台导入任务
# 1. Create one durable ZIP import task
curl https://tokenbox.me/v1/asset-imports \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Idempotency-Key: zip-import-20260913-001" \
  -H "Content-Type: application/json" \
  -d '{"group_id":"vag_xxxxxxxxxxxx","name":"brand-assets.zip","size_bytes":52428800}'

# 2. Request a fresh grant for each missing part, then PUT that part
curl -X POST https://tokenbox.me/v1/asset-imports/vai_xxxxxxxxxxxxxxxx/parts/1 \
  -H "Authorization: Bearer $TOKENBOX_API_KEY"
curl -X PUT "<part.url>" --data-binary @part-0001

# 3. Resume by listing server-confirmed parts; upload only missing numbers
curl https://tokenbox.me/v1/asset-imports/vai_xxxxxxxxxxxxxxxx/upload \
  -H "Authorization: Bearer $TOKENBOX_API_KEY"

# 4. Merge all parts and queue background validation and provider registration
curl https://tokenbox.me/v1/asset-imports/vai_xxxxxxxxxxxxxxxx/complete \
  -X POST -H "Authorization: Bearer $TOKENBOX_API_KEY"

# 5. Poll the durable task; the browser may be closed after step 4
curl https://tokenbox.me/v1/asset-imports/vai_xxxxxxxxxxxxxxxx \
  -H "Authorization: Bearer $TOKENBOX_API_KEY"

content 元素规格

视频生成的 content 是提示词与素材的混合数组,至少 1 个元素。每个元素只能填与 type 匹配的字段;参考素材必须带 role,单张首帧图片可省略 role。

typeroleURL 字段与说明
text—text:分镜文案。按素材类型从 1 编号,通过「@图像N / @视频N / @音频N」引用素材
image_urlreference_image / first_frame / last_frameimage_url.url:图片 URL、data: Base64 或 asset://<id>
video_urlreference_videovideo_url.url:公网 MP4 或 asset://<id>
audio_urlreference_audioaudio_url.url:公网 MP3、data: Base64 或 asset://<id>;2.5 可纯音频输入,2.0 需搭配图片或视频

第三步:在视频生成中引用素材

把 content 元素里的 url 换成 asset://<素材ID>(素材 ID 形如 vas_ 前缀)。网关在转发上游前会校验每个引用是否归属当前 API Key,可与公网 URL、Base64 混用。

用 asset:// 引用素材创建视频任务
export IDEMPOTENCY_KEY="$(uuidgen)"

curl https://tokenbox.me/api/v3/contents/generations/tasks \
  -H "Authorization: Bearer $TOKENBOX_API_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bytedance/seedance-2.5",
    "content": [
      {"type": "text", "text": "参考 @图像1、@视频1 和 @音频1 的主体、运动与节奏,生成一段连贯视频"},
      {"type": "image_url", "role": "reference_image",
       "image_url": {"url": "asset://vas_xxxxxxxxxxxxxxxx"}},
      {"type": "video_url", "role": "reference_video",
       "video_url": {"url": "asset://vas_yyyyyyyyyyyyyyyy"}},
      {"type": "audio_url", "role": "reference_audio",
       "audio_url": {"url": "asset://vas_zzzzzzzzzzzzzzzz"}}
    ],
    "resolution": "720p",
    "ratio": "adaptive",
    "duration": -1,
    "omni_reference_task_type": "auto"
  }'
  • 数量上限:Seedance 2.0 最多 9 张图 + 3 段视频 + 3 段音频,共 15 个;Seedance 2.5 最多 30 张图 + 10 段视频 + 10 段音频,共 50 个。
  • 首帧/首尾帧模式与全模态参考模式互斥,且必须使用 adaptive 比例;首帧、尾帧各不能超过 1 张。
  • 仅 Active 状态的素材可被引用;刚创建的素材通常需等待数秒到数十秒完成中转。
  • 单次请求引用的素材必须归属同一供应商账户,且都属于当前 API Key,否则整单拒绝。
  • Seedance 2.5 支持纯音频输入及 omni_reference_task_type=auto/edit/extend;duration=-1 表示由模型自动选择有效时长。
HTTP错误码处理建议
400invalid_request检查请求 JSON、必填字段和参数范围
400invalid_request + error.reason根据 error.reason 修正上传:大小、Content-Type、文件格式或 ZIP 格式
401invalid_api_key检查 Key 是否完整、有效且未被禁用
403insufficient_scope使用包含对应 scope 的新 Key
403email_verification_required完成邮箱验证后重试
403account_unavailable用户或 API Key 已停用,请检查账户状态
404not_found素材不存在或不属于当前 API Key
409asset_not_retryable该素材为火山方舟明确的业务拒绝,或当前状态不是 failed;不要原样重试
409idempotency_conflict同一 Idempotency-Key 对应的素材元数据不一致
503auth_unavailable鉴权缓存暂时不可用,稍后使用相同请求重试
503service_unavailable素材服务或鉴权依赖暂时不可用,稍后使用相同请求重试
400invalid_asset检查 asset:// 格式与素材类型是否与 type 匹配
404asset_not_found素材不存在或不属于当前 Key(越权与不存在统一返回)
409asset_not_ready素材尚未就绪,等待变为 Active 后重试
409asset_provider_conflict同一请求引用了不同供应商账户的素材,请统一来源
503asset_provider_unavailable素材归属校验服务不可用,稍后重试

错误处理

错误响应采用统一 JSON 结构。程序应优先判断 HTTP 状态码和 error.code,不要依赖可变的 message 文案。

HTTP错误码处理建议
400invalid_request检查请求 JSON、必填字段和参数范围
400unsupported_parameter检查 content 项类型、image_url.url 格式和 detail 取值
400model_capability_not_supported重新读取模型列表,改用 capabilities.vision=true 的模型
401invalid_api_key检查 Key 是否完整、有效且未被禁用
402insufficient_balance充值后再重试
403insufficient_scope使用包含对应 scope 的新 Key
404model_not_found重新读取模型列表并替换 model
429rate_limit_exceeded指数退避,并遵守 Retry-After
5xxinternal_error保留请求 ID,稍后重试或联系支持

请记录响应头 x-request-id。排查失败、延迟或账单问题时,可用该 ID 在 Console 调用日志中定位请求。