快速开始
首次接入按以下顺序完成。生产调用前,请先确认积分余额、Key 权限和模型状态。
- 01
创建密钥
登录 Console 创建 API Key。明文只展示一次,请立即存入服务端密钥管理系统。
- 02
发现模型
调用 GET /v1/models,以响应中的 id 作为后续请求的 model。
- 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 可调用的模型,不要只依赖下方静态清单。
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 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
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
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-5 | Fable 5 稳定版本 |
anthropic/claude-fable-5-1 | Fable 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 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
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 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
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 图片输入
图片输入参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 从 GET /v1/models 返回结果中选择 capabilities.vision=true 的模型 ID。 |
messages | array | 是 | 对话消息数组;图片必须放在某条消息的 content 内容数组中。 |
messages[].role | string | 是 | 图片输入消息使用 user;role 与 content 同级。 |
messages[].content | array | 是 | 图片请求必须使用内容数组,不能使用纯字符串 content。 |
messages[].content[].type | string | 是 | 内容项类型,只允许 text 或 image_url。 |
messages[].content[].text | string | 条件必填 | 当 type=text 时传入文字提示词。 |
messages[].content[].image_url.url | string | 条件必填 | 当 type=image_url 时传入无前后空格、带 Host、上游可访问的 HTTP(S) 图片 URL。 |
messages[].content[].image_url.detail | string | 否 | 可选图片清晰度:auto、low 或 high;默认由模型处理。 |
当前公开 Chat Completions 接口要求 image_url.url 是带 Host 且可被上游访问的 http:// 或 https:// 图片 URL。data:image/...;base64,... 和 asset://... 暂不支持;asset:// 仅用于视频生成素材引用。
发送前先确认 capabilities.vision 为 true。若模型不支持图片输入,接口会返回参数或模型能力错误,请改用支持视觉能力的模型。
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
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-image | 1K / 2K |
google/gemini-3.1-flash-image-preview | 1K / 2K |
google/gemini-3-pro-image | 1K / 2K / 4K |
google/gemini-nano-banana-2.1 | 1K / 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
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"]))当前仅支持同步调用。不要发送 Prefer: respond-async 或 stream=true;异步偏好会返回 async_not_supported,成功响应只交付并计费请求 n 范围内的图像。
流式响应
设置 stream=true 后返回 SSE。客户端应持续读取 data 行,直到收到 data: [DONE]。
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_code | retryable | 处理建议 |
|---|---|---|
| InternalError / ProcessingFailed / unknown async result | true | 供应商包装错误或异步处理结果中的未知错误,平台按退避策略最多重新注册 3 次,也允许手动重试。 |
| ModerationServiceErrorUploadFailed | true | 火山审核服务暂时不可用,官方建议重新上传;平台复用原件重试。 |
| HTTP 4xx request rejection | false | 供应商已明确拒绝创建请求;修正请求或供应商配置后重新上传。 |
| FaceMismatch | false | 真人脸一致性校验失败,原样重试无效,需更换符合授权的人像素材。 |
| ContentRestricted / Input*SensitiveContentDetected | false | 火山内容安全或政策审核明确拒绝,需更换素材。 |
| TypeMismatch / FormatUnsupported / FormatUndetectable | false | 素材声明类型或文件格式不符合要求,需修正文件后重新上传。 |
| 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。
| type | role | URL 字段与说明 |
|---|---|---|
| text | — | text:分镜文案。按素材类型从 1 编号,通过「@图像N / @视频N / @音频N」引用素材 |
| image_url | reference_image / first_frame / last_frame | image_url.url:图片 URL、data: Base64 或 asset://<id> |
| video_url | reference_video | video_url.url:公网 MP4 或 asset://<id> |
| audio_url | reference_audio | audio_url.url:公网 MP3、data: Base64 或 asset://<id>;2.5 可纯音频输入,2.0 需搭配图片或视频 |
第三步:在视频生成中引用素材
把 content 元素里的 url 换成 asset://<素材ID>(素材 ID 形如 vas_ 前缀)。网关在转发上游前会校验每个引用是否归属当前 API Key,可与公网 URL、Base64 混用。
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 | 错误码 | 处理建议 |
|---|---|---|
| 400 | invalid_request | 检查请求 JSON、必填字段和参数范围 |
| 400 | invalid_request + error.reason | 根据 error.reason 修正上传:大小、Content-Type、文件格式或 ZIP 格式 |
| 401 | invalid_api_key | 检查 Key 是否完整、有效且未被禁用 |
| 403 | insufficient_scope | 使用包含对应 scope 的新 Key |
| 403 | email_verification_required | 完成邮箱验证后重试 |
| 403 | account_unavailable | 用户或 API Key 已停用,请检查账户状态 |
| 404 | not_found | 素材不存在或不属于当前 API Key |
| 409 | asset_not_retryable | 该素材为火山方舟明确的业务拒绝,或当前状态不是 failed;不要原样重试 |
| 409 | idempotency_conflict | 同一 Idempotency-Key 对应的素材元数据不一致 |
| 503 | auth_unavailable | 鉴权缓存暂时不可用,稍后使用相同请求重试 |
| 503 | service_unavailable | 素材服务或鉴权依赖暂时不可用,稍后使用相同请求重试 |
| 400 | invalid_asset | 检查 asset:// 格式与素材类型是否与 type 匹配 |
| 404 | asset_not_found | 素材不存在或不属于当前 Key(越权与不存在统一返回) |
| 409 | asset_not_ready | 素材尚未就绪,等待变为 Active 后重试 |
| 409 | asset_provider_conflict | 同一请求引用了不同供应商账户的素材,请统一来源 |
| 503 | asset_provider_unavailable | 素材归属校验服务不可用,稍后重试 |
错误处理
错误响应采用统一 JSON 结构。程序应优先判断 HTTP 状态码和 error.code,不要依赖可变的 message 文案。
| HTTP | 错误码 | 处理建议 |
|---|---|---|
| 400 | invalid_request | 检查请求 JSON、必填字段和参数范围 |
| 400 | unsupported_parameter | 检查 content 项类型、image_url.url 格式和 detail 取值 |
| 400 | model_capability_not_supported | 重新读取模型列表,改用 capabilities.vision=true 的模型 |
| 401 | invalid_api_key | 检查 Key 是否完整、有效且未被禁用 |
| 402 | insufficient_balance | 充值后再重试 |
| 403 | insufficient_scope | 使用包含对应 scope 的新 Key |
| 404 | model_not_found | 重新读取模型列表并替换 model |
| 429 | rate_limit_exceeded | 指数退避,并遵守 Retry-After |
| 5xx | internal_error | 保留请求 ID,稍后重试或联系支持 |
请记录响应头 x-request-id。排查失败、延迟或账单问题时,可用该 ID 在 Console 调用日志中定位请求。