TokenStack AI 接入文档
快速接入 GPT、Claude、Gemini 等主流 AI 模型,无需信用卡,国内直连。本文档将带你从注册到配置完成,全程图文引导。
注册账号、创建令牌,两步开始使用
⚡ CC Switch 一键导入 30 秒完成配置;Claude Code、Codex、Cursor、ChatBox 等主流客户端接入方法
GPT Image 2 图片、NanoBanana 图片、视频生成(统一格式,11 个档位一套接口)
注意事项、获取一对一技术支持
💰 推荐返利计划
把 TokenStack 推荐给朋友,朋友注册后每消费一笔,你都能拿持续返利。返利按好友的实际消费额计算,每月人工对账后微信打款。
怎么赚?三步开始
打开推广看板,拿你的链接和海报
登录你的 TokenStack 账号后,点本页下方的「查看我的推广数据」打开你的专属看板(自动认出是你)。里面直接给你两样东西:
- 专属邀请链接——一键复制,发给任何人
- 推广海报(带二维码 + 宣传语,3 种样式可选)——一键下载,直接发朋友圈 / 社群
不用再去后台翻邀请码。别人通过你的链接、或扫你海报上的二维码注册,系统会永久记住是你邀请的。
把链接 / 海报发出去
链接或海报,发给朋友、发到技术社群、写进你的 AI 教程 / 公众号 / 视频简介。谁最适合推?有开发者人脉、做 AI 内容、运营技术社群的人——你的受众越是真在用 AI,转化越高、返利越多。
朋友消费,你拿返利
朋友通过你的链接 / 海报注册、充值、调用模型,按他们的实际消费额给你返利。下线消费在看板里随时能查(脱敏),想结算时在看板点「申请提现」填支付宝,每月人工对账后打款。具体返利比例加微信详谈(关系型长期合作,量大比例可谈)。
登录你的 TokenStack 账号后打开即可,自动认出是你——无需令牌、无需找客服。能看到:邀请了多少人、下线近 3 个月的消费。
数据仅你本人登录可见,别人看不到。
对账与规则
- 怎么领返利:每月人工对账,加微信(下方「获取帮助」二维码)确认你的下线消费额后打款到你指定方式。
- 返利按「消费额」算:不是按充值额,是按好友实际用掉的金额。朋友充了不用,不产生返利;用得越多,你返得越多。
- 数据看板定期更新:看板里的下线消费是定期刷新的快照(不是实时),脱敏显示,只保留近 3 个月。
- 自己邀请自己、注册小号刷返利 —— 无效,发现直接取消资格并封号
- 虚假宣传、冒充官方 —— 取消合作
- 最终解释权归 TokenStack
注册与登录
使用 TokenStack 的第一步是创建账号。
访问官网
打开浏览器,访问 www.tokenstack.cc,点击页面右上角的「注册」按钮。
填写注册信息
输入用户名、密码完成注册。注册成功后会自动登录到管理后台。
创建令牌(Token)
令牌就是你的 API 密钥,用来验证你的身份。每次调用 AI 模型时都需要带上它。
进入令牌管理
登录后台后,在左侧菜单找到「令牌」,点击进入令牌管理页面。
新建令牌
点击「添加令牌」按钮,填写令牌名称(方便你自己区分用途,比如"Cursor 用"、"Claude Code 用")。
复制并保存
创建成功后,系统会显示一个以 sk- 开头的密钥。请立即复制保存,关闭后将无法再次查看完整密钥。
智能体配置
选择你使用的 AI 工具,按照教程配置即可开始使用 TokenStack 的模型服务。
CC Switch 一键配置(推荐)
CC Switch 是一个跨平台桌面工具,可以一键切换多个 AI 编程助手的 API 配置,不用手动编辑配置文件。
支持的工具
Claude Code、OpenClaw、Codex、OpenCode、Claude CLI 等主流 AI 编程 CLI 工具。
配置步骤
下载安装
访问 ccswitch.io 下载对应系统的安装包(支持 Windows / macOS / Linux)。
一键导入 TokenStack 配置
📱 CC Switch 是电脑端工具,请在电脑上打开本页完成配置(手机上无法操作)。
还没有密钥?去控制台「令牌管理」创建一个 →(创建后复制回来粘贴即可)
第二步:选择你用的工具
粘贴密钥后,自动匹配你可用的最新模型
- 在 CC Switch 弹出的窗口里点「导入」
- 在供应商列表里把 TokenStack 设为当前使用
- 打开终端输入
claude发一条消息,正常回复就成功了
Claude Desktop 不支持链接导入,请在 CC Switch 界面里选 Claude Desktop 应用手动添加(支持从 Claude Code 预设转换)。手动添加 Provider 参数:名称 TokenStack,Base URL https://www.tokenstack.cc(Codex / OpenClaw / Hermes / OpenCode 用 https://www.tokenstack.cc/v1),API Key 填你的 sk-xxx 令牌。
一键切换
在系统托盘中点击 CC Switch 图标,选择 TokenStack 作为当前 Provider,所有支持的工具会自动应用新配置。
使用 Skill 快速配置所有模型
1. 下载 SKILL.md 文件
2. 在支持的客户端中对话:「我要配置模型」,根据引导操作即可
支持客户端:OpenClaw(龙虾)、Claude Code、Cursor、Windsurf 等
手动配置
如果不使用 Skill 或 CC Switch,也可以按照以下指南手动配置各客户端。
API 端点信息
TokenStack 支持三个系列的 API,根据您使用的模型选择对应的 Base URL:
| 模型系列 | Base URL | API 类型 |
|---|---|---|
| Claude | https://www.tokenstack.cc |
anthropic-messages |
| OpenAI | https://www.tokenstack.cc/v1 |
openai-completions |
https://www.tokenstack.cc/v1 |
google-generative-ai |
OpenClaw(龙虾)
OpenClaw 是一款开源的 AI 编程 CLI 工具,通过 JSON5 配置文件管理模型和 Provider。
配置文件位置
配置文件路径:~/.openclaw/openclaw.json(JSON5 格式,支持注释)
第一步:添加 Provider
打开配置文件,在 models.providers 中添加 TokenStack。以下以 Claude 系列为例:
{
models: {
mode: "merge",
providers: {
tokenstack: {
baseUrl: "https://www.tokenstack.cc",
apiKey: "sk-你的密钥",
api: "anthropic-messages",
models: [
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-opus-4-6", name: "Claude Opus 4.6" }
]
}
}
}
}
第二步:设置默认模型(可选)
如果你希望 OpenClaw 默认使用 TokenStack 的模型,可以添加以下配置:
{
agents: {
defaults: {
model: {
primary: "tokenstack/claude-sonnet-4-6"
}
}
}
}
第三步:验证配置
保存配置文件后,在终端运行 OpenClaw,发送一条消息测试是否正常响应。如果看到模型回复,说明配置成功。
https://www.tokenstack.cc,不带 /v1。如果你要使用 OpenAI 系列模型,需要将 api 改为 "openai-completions",baseUrl 改为 https://www.tokenstack.cc/v1。
Hermes Agent(爱马仕)
Hermes Agent 是 Nous Research 开源的 AI 编程 Agent,俗称「爱马仕」,被业内称为 OpenClaw 的热门平替(GitHub 4.8 万+ 星)。通过修改 ~/.hermes/config.yaml 接入 TokenStack。
第一步:编辑配置文件
打开(或新建)~/.hermes/config.yaml(Windows 路径是 C:\Users\你的用户名\.hermes\config.yaml),写入以下内容:
model: provider: custom base_url: "https://www.tokenstack.cc" api_key: "sk-你的TokenStack密钥" api_mode: "anthropic_messages" default: "claude-sonnet-4-6" context_length: 200000
第二步:(可选)把 API Key 放到 .env 更安全
不想把密钥明文写进 yaml 的话,把 api_key 这一行删掉,改成在 ~/.hermes/.env 里写:
ANTHROPIC_API_KEY=sk-你的TokenStack密钥
第三步:验证并启动
在终端运行:
hermes config check # 检查配置完整性 hermes # 启动 Agent
base_url 填 https://www.tokenstack.cc,不带 /v1;api_mode 必须是 anthropic_messages,填错会被识别为 OpenAI 协议导致 404。如果想用 GPT/Gemini 等模型,改成 base_url: "https://www.tokenstack.cc/v1" + api_mode: "chat_completions" + default: "gpt-4o"。
Claude Code
Claude Code 是 Anthropic 官方的 AI 编程 CLI 工具,通过环境变量配置 API 端点。
配置环境变量
先选你的操作系统(页面已根据你的设备自动选好):
第一步:编辑 shell 配置文件(macOS 是 ~/.zshrc,Linux 和 WSL 是 ~/.bashrc),在文件末尾追加以下两行:
export ANTHROPIC_API_KEY="sk-你的密钥" export ANTHROPIC_BASE_URL="https://www.tokenstack.cc"
第二步:保存文件后,在终端运行以下命令让配置立即生效(Linux / WSL 改为 source ~/.bashrc):
source ~/.zshrc
第一步:打开 PowerShell(开始菜单搜「PowerShell」),运行以下两行命令(CMD 也可以):
setx ANTHROPIC_API_KEY "sk-你的密钥" setx ANTHROPIC_BASE_URL "https://www.tokenstack.cc"
第二步:关闭当前终端窗口,重新打开一个新的。setx 写入的环境变量只对新开的终端生效——这是 Windows 上最容易踩的坑,命令明明执行成功了却不生效,多半是没重开终端。
验证配置
在终端输入 claude 启动 Claude Code,发送一条消息。如果正常回复,说明配置成功。
https://www.tokenstack.cc,不带 /v1。这是和其他工具最大的区别,填错会导致请求失败。
Codex CLI
Codex 是 OpenAI 官方的 AI 编程 CLI 工具,可以通过环境变量或 ~/.codex/config.toml 接入 TokenStack。下面两种方式任选其一。
方式一:环境变量(最简单)
编辑 shell 配置文件(macOS 是 ~/.zshrc,Linux 和 WSL 是 ~/.bashrc),追加以下两行:
export OPENAI_API_KEY="sk-你的TokenStack密钥" export OPENAI_BASE_URL="https://www.tokenstack.cc/v1"
保存后执行 source ~/.zshrc(Linux / WSL 是 source ~/.bashrc)让配置生效,然后输入 codex 启动。
打开 PowerShell(或 CMD),运行以下两行命令:
setx OPENAI_API_KEY "sk-你的TokenStack密钥" setx OPENAI_BASE_URL "https://www.tokenstack.cc/v1"
然后关闭当前终端,重新打开一个新的(setx 只对新终端生效),输入 codex 启动。
方式二:config.toml 自定义 Provider(进阶)
如果你已经用环境变量配了官方 OpenAI、不想被覆盖,可以新建一个独立 Provider。打开(或新建)~/.codex/config.toml(Windows 路径是 C:\Users\你的用户名\.codex\config.toml):
model_provider = "tokenstack" model = "gpt-4o" [model_providers.tokenstack] name = "TokenStack" base_url = "https://www.tokenstack.cc/v1" env_key = "TOKENSTACK_API_KEY" wire_api = "chat"
再设置密钥环境变量(变量名必须和上面的 env_key 一致):
export TOKENSTACK_API_KEY="sk-你的TokenStack密钥"
setx TOKENSTACK_API_KEY "sk-你的TokenStack密钥"
运行后记得重开终端才生效。
验证
终端执行 codex,发送一条消息,能正常响应说明配置成功。
- Codex 是 OpenAI 系工具,
base_url必须带/v1(和 Claude Code 相反)。 - 新版 Codex CLI 默认走 Responses API;TokenStack 是 Chat Completions 网关,所以
wire_api显式设为"chat",不要写"responses"。 model字段写你想用的模型名,比如gpt-4o、gpt-5,到 www.tokenstack.cc 后台可查看完整可用列表。
Cursor
Cursor 是一款 AI 驱动的代码编辑器,通过内置设置界面配置自定义 API 端点。
配置步骤
打开 Cursor Settings
点击 Cursor 右上角的齿轮图标,进入 Cursor Settings。
注意:是 Cursor Settings,不是 VS Code Settings(快捷键打开的那个)。
进入 Models 标签页
在设置页面顶部选择 Models 标签。
填写 API 配置
- Override OpenAI Base URL:
https://www.tokenstack.cc/v1 - API Key:填入你的 TokenStack 密钥(
sk-xxx)
验证并保存
点击 Verify 按钮验证连通性,显示成功后点击 Save 保存。
Windsurf
Windsurf 是另一款 AI 代码编辑器,配置方式与 Cursor 类似,通过设置界面操作。
配置步骤
打开设置
打开 Windsurf,进入 Settings(设置)页面。
搜索 API 配置
在设置搜索框中输入 "API" 或 "Provider",找到 API 配置区域。
填写配置信息
- API Base URL:
https://www.tokenstack.cc/v1 - API Key:填入你的 TokenStack 密钥
保存设置
保存后即可在 Windsurf 中使用 TokenStack 的模型。
Cline
Cline 是一款 VS Code 扩展,提供 AI 编程辅助功能。通过扩展面板的设置界面配置。
配置步骤
打开 Cline 设置
在 VS Code 侧边栏打开 Cline 面板,点击右上角的齿轮图标进入 Settings。
选择 API Provider
在 API Provider 下拉菜单中选择 "OpenAI Compatible"。
填写配置信息
- Base URL:
https://www.tokenstack.cc/v1 - API Key:填入你的 TokenStack 密钥
- Model ID:手动输入模型名称,如
claude-sonnet-4-6
验证配置
保存后在 Cline 面板中发送一条消息,确认模型正常响应。
ChatBox
ChatBox 是一款跨平台的 AI 聊天桌面应用,支持添加自定义 API Provider。
配置步骤
打开设置
打开 ChatBox,点击侧边栏的设置图标,进入 Model 标签页。
添加自定义 Provider
点击 Model Provider 下拉菜单,选择 "Add Custom Provider"(添加自定义提供商)。
填写配置信息
- API Mode:选择 "OpenAI API Compatible"
- Name:TokenStack(自定义名称)
- API Host:
https://www.tokenstack.cc/v1/ - API Key:填入你的 TokenStack 密钥
- Model:输入模型名称,如
claude-sonnet-4-6
开始对话
保存后回到聊天界面,选择刚添加的 Provider 和模型,发送消息验证。
LobeChat
LobeChat 是一款开源的 AI 聊天 UI,支持自部署或直接使用在线版本。通过设置界面配置自定义 API 端点。
配置步骤
进入语言模型设置
点击左下角 Actions → Settings → 选择 "Language Model" 标签页。
选择 OpenAI 配置
在语言模型列表中选择 OpenAI。
填写配置信息
- API Key:填入你的 TokenStack 密钥
- API Proxy Address(代理地址):
https://www.tokenstack.cc/v1 - 勾选 "使用客户端请求模式"(Use Client-Side Fetching Mode)
获取模型列表
点击 "Get Model List" 按钮,系统会自动拉取 TokenStack 支持的模型列表。选择你需要的模型即可开始对话。
/v1。不同版本的 LobeChat 对这个后缀的处理可能不同。
Obsidian Copilot
Obsidian 是一款流行的笔记应用,通过安装 Copilot 插件可以在笔记中使用 AI 功能。
第一步:安装 Copilot 插件
打开 Obsidian → Settings → Community Plugins → Browse → 搜索 "Copilot" → 安装并启用。
第二步:配置 API 端点
进入 Settings → Community Plugins → Copilot → Settings,找到自定义模型配置区域。
添加自定义模型
- Provider:选择 "OpenAI" 或 "OpenAI Compatible"
- Base URL:
https://www.tokenstack.cc/v1 - API Key:在 Basic Settings → API Keys 区域填入你的 TokenStack 密钥
- Model Name:手动输入模型名称
第三步:验证
回到笔记中,使用 Copilot 的对话功能(通常是侧边栏或命令面板),发送一条消息确认连通。
API 参考
以下为 TokenStack 提供的特色 API 接口文档,适合开发者直接调用。
GPT Image 2 图片 API
接口列表
同步图片生成
API 端点
https://www.tokenstack.cc/v1/images/generations
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 是 | 模型名称,填 gpt-image-2 |
prompt |
string | 是 | 图片描述文本 |
n |
integer | 否 | 生成数量,默认 1,每张独立计费 |
size |
string | 否 | auto(默认)/ 1024x1024 / 1536x1024 / 1024x1536 / 2048x2048 / 3840x2160约束:最大边 ≤ 3840px、两边均为 16 倍数、长短比 ≤ 3:1、像素数 655,360 ~ 8,294,400 |
quality |
string | 否 | low / medium / high / auto(默认) |
response_format |
string | 否 | b64_json(默认,base64 编码)/ url(图片直链,1 小时有效) |
请求示例
from openai import OpenAI
client = OpenAI(
api_key="sk-你的TokenStack密钥",
base_url="https://www.tokenstack.cc/v1"
)
response = client.images.generate(
model="gpt-image-2",
prompt="一只可爱的机器人在画风景画",
size="1024x1024",
quality="high",
n=1,
response_format="url"
)
image_url = response.data[0].url
print(image_url)
curl https://www.tokenstack.cc/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-d '{
"model": "gpt-image-2",
"prompt": "一只可爱的机器人在画风景画",
"size": "1024x1024",
"quality": "high",
"n": 1,
"response_format": "url"
}'
响应格式
response_format=url
{
"created": 1234567890,
"data": [
{
"url": "https://www.tokenstack.cc/images/xxx.png",
"revised_prompt": "优化后的提示词"
}
]
}
response_format=b64_json(默认)
{
"created": 1234567890,
"data": [
{
"b64_json": "/9j/4AAQSkZJRg...",
"revised_prompt": "优化后的提示词"
}
]
}
同步图片编辑
API 端点
https://www.tokenstack.cc/v1/images/edits
请求参数
请求体格式:multipart/form-data
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 是 | 模型名称,填 gpt-image-2 |
image |
file | 是 | 待编辑的原始图片,PNG 格式。支持多张:重复传 image 字段即可 |
prompt |
string | 是 | 编辑描述,说明需要如何修改图片 |
mask |
file | 否 | 遮罩图片(PNG),必须包含 alpha 通道,尺寸需与 image 一致,最大 50MB。多图时遮罩应用于第一张 |
size |
string | 否 | auto(默认)/ 1024x1024 / 1536x1024 / 1024x1536 / 2048x2048 / 3840x2160约束:最大边 ≤ 3840px、两边均为 16 倍数、长短比 ≤ 3:1 |
quality |
string | 否 | low / medium / high / auto(默认) |
n |
integer | 否 | 生成数量,默认 1 |
response_format |
string | 否 | b64_json(默认,base64 编码)/ url(图片直链,1 小时有效) |
请求示例
from openai import OpenAI
client = OpenAI(
api_key="sk-你的TokenStack密钥",
base_url="https://www.tokenstack.cc/v1"
)
response = client.images.edit(
model="gpt-image-2",
image=open("original.png", "rb"),
mask=open("mask.png", "rb"),
prompt="把背景换成星空",
size="1024x1024",
n=1,
response_format="url"
)
image_url = response.data[0].url
print(image_url)
curl https://www.tokenstack.cc/v1/images/edits \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -F "model=gpt-image-2" \ -F "image=@original.png" \ -F "mask=@mask.png" \ -F "prompt=把背景换成星空" \ -F "size=1024x1024" \ -F "n=1" \ -F "response_format=url"
curl https://www.tokenstack.cc/v1/images/edits \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -F "model=gpt-image-2" \ -F "image=@source1.png" \ -F "image=@source2.png" \ -F "prompt=保留主体构图,把背景改成雨夜霓虹街道" \ -F "size=1024x1024" \ -F "quality=high"
异步接口
提交异步生成任务
POST https://www.tokenstack.cc/v1/images/async/generations
请求体格式:application/json,参数与同步生成接口一致(model、prompt、n、size、quality、response_format)。
请求示例
curl -X POST https://www.tokenstack.cc/v1/images/async/generations \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "未来主义城市黄昏景观,电影级光影",
"size": "1536x1024",
"quality": "high"
}'
import requests
API_BASE = "https://www.tokenstack.cc"
API_KEY = "sk-你的TokenStack密钥"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
resp = requests.post(
f"{API_BASE}/v1/images/async/generations",
headers=HEADERS,
json={
"model": "gpt-image-2",
"prompt": "未来主义城市黄昏景观,电影级光影",
"size": "1536x1024",
"quality": "high"
}
)
task = resp.json()
task_id = task["id"]
print(f"任务已提交: {task_id}")
提交成功响应
{
"id": "task_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345",
"status": "pending",
"model": "gpt-image-2",
"created_at": 1711008000
}
提交异步编辑任务
POST https://www.tokenstack.cc/v1/images/async/edits
请求体格式:multipart/form-data,参数与同步编辑接口一致(model、prompt、image、mask、n、size、quality、response_format),同样支持多张参考图(重复 image 字段)。
请求示例
curl -X POST https://www.tokenstack.cc/v1/images/async/edits \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -F "model=gpt-image-2" \ -F "prompt=保留主体构图,把背景改成雨夜霓虹街道" \ -F "image=@/path/to/source1.png" \ -F "image=@/path/to/source2.png" \ -F "size=1024x1024" \ -F "quality=high"
import requests
API_BASE = "https://www.tokenstack.cc"
API_KEY = "sk-你的TokenStack密钥"
with open("source.png", "rb") as image_file:
task = requests.post(
f"{API_BASE}/v1/images/async/edits",
headers={"Authorization": f"Bearer {API_KEY}"},
data={
"model": "gpt-image-2",
"prompt": "把背景改成星空",
"size": "1024x1024",
"quality": "high",
},
files={"image": ("source.png", image_file, "image/png")},
).json()
task_id = task["id"]
print(f"任务已提交: {task_id}")
查询任务状态
提交后通过 GET 请求轮询,端点取决于任务类型:
- 生成任务:
GET /v1/images/async/generations/{task_id} - 编辑任务:
GET /v1/images/async/edits/{task_id}
请求头需带 Authorization: Bearer sk-你的密钥。
状态值
| status | 含义 | 响应额外字段 |
|---|---|---|
| pending | 排队中或正在生成 | — |
| complete | 全部图片生成成功 | + data |
| partial_complete | 部分成功(n > 1 时),失败部分自动退还额度 | + data(成功部分)+ error |
| failed | 全部失败,预扣额度全额退还 | + error(error.message 含原因) |
响应示例
{
"id": "task_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345",
"status": "complete",
"model": "gpt-image-2",
"created_at": 1711008000,
"data": [
{
"url": "https://www.tokenstack.cc/images/req_abc123_0.png"
}
]
}
完整端到端示例(Python 轮询)
import requests
import time
API_BASE = "https://www.tokenstack.cc"
API_KEY = "sk-你的TokenStack密钥"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 1. 提交任务
resp = requests.post(
f"{API_BASE}/v1/images/async/generations",
headers=HEADERS,
json={
"model": "gpt-image-2",
"prompt": "未来主义城市黄昏景观,电影级光影",
"size": "1536x1024",
"quality": "high"
}
)
task_id = resp.json()["id"]
print(f"任务已提交: {task_id}")
# 2. 轮询查询(推荐 3 秒间隔)
while True:
result = requests.get(
f"{API_BASE}/v1/images/async/generations/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"}
).json()
status = result["status"]
if status == "complete":
for img in result["data"]:
print(f"图片 URL: {img['url']}")
break
elif status == "partial_complete":
print(f"部分成功: {result['error']['message']}")
for img in result["data"]:
print(f"图片 URL: {img['url']}")
break
elif status == "failed":
print(f"生成失败: {result['error']['message']}")
break
else:
print("生成中...")
time.sleep(3)
计费规则(异步)
- 提交时按 模型单价 × N 预扣费
- 全部成功:扣费生效
- 部分成功:仅扣已成功部分,失败部分自动退还额度
- 全部失败:预扣额度全额退还
使用提示
response_format=url时,图片 URL 有效期为 1 小时,请及时下载保存- 默认
response_format=b64_json,返回 base64 编码图片,无外链依赖 - 模型支持在图片中渲染文字,直接在 prompt 中描述即可
- 需要透明背景时,在 prompt 中显式描述(如"透明背景的 PNG 图标")
- 编辑接口:mask 的透明区域即为重绘区域,其余部分保持不变;mask 必须包含 alpha 通道,且尺寸与 image 一致
- 多张参考图:
image字段重复传递即可,传多张时 mask 应用于第一张 - 异步任务推荐轮询间隔 3 秒;批量生成(n > 1)建议使用异步接口
- 详细的描述能获得更好的生成效果
HTTP 错误码
| 状态码 | 含义 |
|---|---|
| 400 | 请求参数错误 |
| 401 | 认证失败(API Key 无效) |
| 402 | 额度不足 |
| 403 | 内容策略违规 |
| 404 | 任务不存在(仅异步查询) |
| 429 | 速率限制 |
| 502 / 503 | 上游服务错误或无可用渠道 |
Gemini Veo 视频生成 API
接口列表
| 接口 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 提交视频任务 | POST | /v1/videos |
提交任务,立即返回 task_id |
| 查询任务状态 | GET | /v1/videos/{task_id} |
轮询查询任务进度,完成后返回视频地址 |
Base URL:https://www.tokenstack.cc
请求格式:所有参数均使用 multipart/form-data,不要使用 JSON body。
模型与模式
支持的模型
| 模型 | 用途 | 参考图数量 | 说明 |
|---|---|---|---|
veo_3_1-fast |
文生视频 / 参考图 | 0 或 1-3 | 不传图为文生视频;传 1-3 张作为风格参考图 |
veo_3_1-fast-fl |
首尾帧 | 1-2 | 1 张 = 仅首帧;2 张 = 首帧 + 尾帧 |
模式与传参对应关系
| 场景 | model | input_reference[] 数量 |
|---|---|---|
| 文生视频 | veo_3_1-fast |
0 |
| 参考图引导 | veo_3_1-fast |
1-3 张 |
| 首帧延展 | veo_3_1-fast-fl |
1 张 |
| 首尾帧过渡 | veo_3_1-fast-fl |
2 张 |
提交视频任务
API 端点
https://www.tokenstack.cc/v1/videos
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: multipart/form-data(必填)
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 是 | 模型名称,veo_3_1-fast 或 veo_3_1-fast-fl |
prompt |
string | 是 | 视频描述文本 |
size |
string | 否 | 视频尺寸,格式为 宽x高,例如 1280x720、1920x1080 |
input_reference[] |
file / string | 视情况 | 参考图,可重复传递。字段名必须含方括号 [] |
推荐尺寸
- 横屏 720p:
1280x720 - 竖屏 720p:
720x1280 - 横屏 1080p:
1920x1080 - 竖屏 1080p:
1080x1920
input_reference[] 的三种传法
同一字段支持三种数据来源,可以混用:
- 本地文件:
-F "input_reference[]=@/path/to/image.jpg" - 图片 URL:
-F "input_reference[]=https://example.com/a.png"(必须是图片直链,不能是网页地址) - Base64:
-F "input_reference[]=data:image/jpeg;base64,/9j/4AAQ..."
请求示例
文生视频
curl -X POST https://www.tokenstack.cc/v1/videos \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -F "model=veo_3_1-fast" \ -F "prompt=一只可爱的小猫在花园里玩耍" \ -F "size=1920x1080"
首尾帧(本地文件)
curl -X POST https://www.tokenstack.cc/v1/videos \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -F "model=veo_3_1-fast-fl" \ -F "prompt=让这两张图之间自然过渡" \ -F "size=1280x720" \ -F "input_reference[]=@/path/to/first_frame.jpg" \ -F "input_reference[]=@/path/to/last_frame.jpg"
参考图(URL,最多 3 张)
curl -X POST https://www.tokenstack.cc/v1/videos \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -F "model=veo_3_1-fast" \ -F "prompt=参考这些风格生成一段广告视频" \ -F "size=1920x1080" \ -F "input_reference[]=https://example.com/style1.png" \ -F "input_reference[]=https://example.com/style2.png" \ -F "input_reference[]=https://example.com/style3.png"
Python
import requests
API_BASE = "https://www.tokenstack.cc"
API_KEY = "sk-你的TokenStack密钥"
resp = requests.post(
f"{API_BASE}/v1/videos",
headers={"Authorization": f"Bearer {API_KEY}"},
data={
"model": "veo_3_1-fast-fl",
"prompt": "让这两张图之间自然过渡",
"size": "1280x720",
},
files=[
("input_reference[]", ("first.jpg", open("first.jpg", "rb"), "image/jpeg")),
("input_reference[]", ("last.jpg", open("last.jpg", "rb"), "image/jpeg")),
],
)
task = resp.json()
task_id = task["id"]
print(f"任务已提交: {task_id}")
提交成功响应
{
"id": "task_xxxxxxxxxxxxx",
"object": "video",
"model": "veo_3_1-fast",
"status": "queued",
"progress": 0,
"created_at": 1709876543,
"size": "1920x1080"
}
查询任务状态
API 端点
https://www.tokenstack.cc/v1/videos/{task_id}
请求示例
curl -X GET https://www.tokenstack.cc/v1/videos/task_xxxxxxxxxxxxx \ -H "Authorization: Bearer sk-你的TokenStack密钥"
状态值
| status | 含义 |
|---|---|
| queued | 排队中 |
| processing | 正在生成 |
| completed | 生成完成 |
| failed | 生成失败 |
任务完成响应
{
"id": "task_xxxxxxxxxxxxx",
"object": "video",
"model": "veo_3_1-fast",
"status": "completed",
"progress": 100,
"created_at": 1709876543,
"completed_at": 1709876600,
"size": "1920x1080"
}
完整端到端示例(Python 轮询)
import requests
import time
API_BASE = "https://www.tokenstack.cc"
API_KEY = "sk-你的TokenStack密钥"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# 1. 提交任务(以文生视频为例)
resp = requests.post(
f"{API_BASE}/v1/videos",
headers=HEADERS,
data={
"model": "veo_3_1-fast",
"prompt": "未来主义城市黄昏景观,电影级光影",
"size": "1920x1080",
},
)
task_id = resp.json()["id"]
print(f"任务已提交: {task_id}")
# 2. 轮询查询(推荐 5 秒间隔)
while True:
result = requests.get(
f"{API_BASE}/v1/videos/{task_id}",
headers=HEADERS,
).json()
status = result["status"]
progress = result.get("progress", 0)
if status == "completed":
print(f"生成完成:{result}")
break
elif status == "failed":
print(f"生成失败:{result}")
break
else:
print(f"生成中... 进度 {progress}%")
time.sleep(5)
使用提示
- 仅支持 multipart:所有参数都用 form-data 传递,不要使用 JSON body
input_reference[]字段名必须含方括号,缺少方括号会被服务端忽略- URL 方式传图必须是图片直链(响应为图片二进制),网页 HTML 地址无法识别
- 文生视频与参考图模式都用
veo_3_1-fast,区别只在是否传input_reference[] - 首尾帧模式只能用
veo_3_1-fast-fl,传 1 张为首帧延展,传 2 张为首尾帧过渡 - 视频生成耗时较长,提交后通过轮询获取结果,建议间隔 5 秒
HTTP 错误码
| 状态码 | 含义 |
|---|---|
| 400 | 请求参数错误 |
| 401 | 认证失败(API Key 无效) |
| 402 | 额度不足 |
| 403 | 内容策略违规 |
| 404 | 任务不存在 |
| 429 | 速率限制 |
| 502 / 503 | 上游服务错误或无可用渠道 |
NanoBanana 图片 API
模型概览
| 模型 | 俗称 | 主要特点 | 适用场景 |
|---|---|---|---|
gemini-3.1-flash-image-preview |
NanoBanana 2 | 性价比与速度最均衡;支持 512px ~ 4K、图片搜索接地、思考等级控制 | 推荐首选,日常图片生成 |
gemini-3-pro-image-preview |
NanoBanana Pro | 支持 4K、高级推理、Google 搜索接地,最多 14 张参考图 | 专业素材制作、复杂指令 |
接口列表
| 接口 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 文本生成图片 | POST | /v1beta/models/{model}:generateContent |
通过 prompt 直接生成图片 |
| 参考图编辑 | POST | /v1beta/models/{model}:generateContent |
同一端点,传入一张参考图做编辑 / 重绘 / 风格迁移 |
| 多图合成 | POST | /v1beta/models/{model}:generateContent |
同一端点,传入多张参考图融合成一张 |
| 多轮对话式生成 | POST | /v1beta/models/{model}:generateContent |
同一端点,维持上下文做迭代修改 |
Base URL:https://www.tokenstack.cc
鉴权方式:NanoBanana 走 Gemini 原生协议,鉴权使用 URL 查询参数 ?key=sk-你的TokenStack密钥,不是 Authorization 请求头。这是和 OpenAI 系列接口最大的区别,填错会导致 401。
请求格式:application/json。
文本生成图片
API 端点
https://www.tokenstack.cc/v1beta/models/gemini-3-pro-image-preview:generateContent?key=sk-你的TokenStack密钥
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
contents |
array | 是 | 提示内容数组,至少包含一段 {"text": "..."} |
generationConfig |
object | 否 | 生成配置容器 |
generationConfig.responseModalities |
array | 否 | ["IMAGE"] 仅返回图片;["TEXT", "IMAGE"] 同时返回文本说明(默认) |
generationConfig.imageConfig.aspectRatio |
string | 否 | 宽高比:1:1 / 2:3 / 3:2 / 3:4 / 4:3 / 4:5 / 5:4 / 9:16 / 16:9 / 21:9;3.1 Flash 还支持 1:4 / 4:1 / 8:1 |
generationConfig.imageConfig.imageSize |
string | 否 | 图片尺寸(仅 Gemini 3 系列支持):512px / 1K / 2K / 4K。必须大写 K,小写会被拒绝 |
请求示例
from google import genai
from google.genai import types
client = genai.Client(
api_key="sk-你的TokenStack密钥",
http_options={"base_url": "https://www.tokenstack.cc"}
)
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=["一只小猫在阳光下玩耍"],
config=types.GenerateContentConfig(
response_modalities=["IMAGE"],
image_config=types.ImageConfig(
aspect_ratio="16:9",
image_size="2K",
),
),
)
for part in response.candidates[0].content.parts:
if part.inline_data is not None:
image = part.as_image()
image.save("output.png")
print("图片已保存为 output.png")
break
elif part.text:
print("文本响应:", part.text)
curl -s -X POST \
"https://www.tokenstack.cc/v1beta/models/gemini-3-pro-image-preview:generateContent?key=sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"contents": [{
"parts": [
{"text": "一只小猫在阳光下玩耍"}
]
}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {
"aspectRatio": "16:9"
}
}
}' \
| grep -o '"data": "[^"]*"' \
| cut -d'"' -f4 \
| base64 --decode > output.png
响应格式
{
"candidates": [{
"content": {
"parts": [{
"inlineData": {
"mimeType": "image/png",
"data": "<BASE64_IMAGE_DATA>"
}
}],
"role": "model"
},
"finishReason": "STOP"
}],
"usageMetadata": {
"promptTokenCount": 10,
"candidatesTokenCount": 1290,
"totalTokenCount": 1300
}
}
candidates[0].content.parts[] 里带 inlineData 的那一项,inlineData.data 就是 base64 编码的 PNG,解码保存即可(上面 curl 示例最后一段管道就是在干这个)。usageMetadata 是本次消耗的令牌数,用于核对计费。
参考图编辑
1. 单图编辑(给猫加巫师帽)
from google import genai
from PIL import Image
client = genai.Client(
api_key="sk-你的TokenStack密钥",
http_options={"base_url": "https://www.tokenstack.cc"}
)
image = Image.open("input.jpg")
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=[
"给图中这只猫戴上一顶巫师帽",
image,
],
)
for part in response.candidates[0].content.parts:
if part.inline_data is not None:
part.as_image().save("edited.png")
print("已保存 edited.png")
break
IMG_BASE64=$(base64 -w0 input.jpg)
curl -X POST \
"https://www.tokenstack.cc/v1beta/models/gemini-3-pro-image-preview:generateContent?key=sk-你的TokenStack密钥" \
-H 'Content-Type: application/json' \
-d "{
\"contents\": [{
\"parts\": [
{\"text\": \"给图中这只猫戴上一顶巫师帽\"},
{
\"inline_data\": {
\"mime_type\": \"image/jpeg\",
\"data\": \"$IMG_BASE64\"
}
}
]
}]
}" \
| grep -o '"data": "[^"]*"' \
| cut -d'"' -f4 \
| base64 --decode > edited.png
2. 局部重绘(只换沙发)
from google import genai
from PIL import Image
client = genai.Client(
api_key="sk-你的TokenStack密钥",
http_options={"base_url": "https://www.tokenstack.cc"}
)
living_room = Image.open("living_room.png")
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=[
living_room,
"把图中那张蓝色沙发换成复古棕色皮质 Chesterfield 沙发,"
"其它部分保持不变。",
],
)
for part in response.candidates[0].content.parts:
if part.inline_data is not None:
part.as_image().save("living_room_edited.png")
break
3. 风格迁移(梵高星空风格)
from google import genai
from PIL import Image
client = genai.Client(
api_key="sk-你的TokenStack密钥",
http_options={"base_url": "https://www.tokenstack.cc"}
)
city_image = Image.open("city.png")
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=[
city_image,
"把这张照片改成梵高《星空》风格:保留原构图,"
"全部元素用旋转的厚涂笔触和深蓝、亮黄色调渲染。",
],
)
for part in response.candidates[0].content.parts:
if part.inline_data is not None:
part.as_image().save("city_style_transfer.png")
break
局部重绘、风格迁移的 JSON 结构与单图编辑完全相同,只需要换 text 里的指令。macOS 用户请把 base64 -w0 改为 base64 -i。
多图合成
示例:把衣服穿到模特身上(电商换装)
from google import genai
from PIL import Image
client = genai.Client(
api_key="sk-你的TokenStack密钥",
http_options={"base_url": "https://www.tokenstack.cc"}
)
dress_image = Image.open("dress.png")
model_image = Image.open("model.png")
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=[
dress_image,
model_image,
"生成一张专业电商时尚照:让第二张图的女士穿上第一张图的蓝色碎花连衣裙,"
"全身实拍效果,自然光线与阴影。",
],
)
for part in response.candidates[0].content.parts:
if part.inline_data is not None:
part.as_image().save("fashion_photo.png")
break
DRESS_B64=$(base64 -w0 dress.png)
MODEL_B64=$(base64 -w0 model.png)
curl -X POST \
"https://www.tokenstack.cc/v1beta/models/gemini-3-pro-image-preview:generateContent?key=sk-你的TokenStack密钥" \
-H 'Content-Type: application/json' \
-d "{
\"contents\": [{
\"parts\": [
{\"inline_data\": {\"mime_type\": \"image/png\", \"data\": \"$DRESS_B64\"}},
{\"inline_data\": {\"mime_type\": \"image/png\", \"data\": \"$MODEL_B64\"}},
{\"text\": \"生成一张专业电商时尚照:让第二张图的女士穿上第一张图的蓝色碎花连衣裙,全身实拍效果,自然光线与阴影。\"}
]
}]
}" \
| grep -o '\"data\": \"[^\"]*\"' \
| cut -d'\"' -f4 \
| base64 --decode > fashion_photo.png
macOS 用户请把 base64 -w0 改为 base64 -i。需要更多张图就继续往 parts 里加 inline_data 项,顺序就是提示词里「第一张、第二张」的顺序。
多轮对话式生成
Python 示例
from google import genai
from google.genai import types
client = genai.Client(
api_key="sk-你的TokenStack密钥",
http_options={"base_url": "https://www.tokenstack.cc"}
)
chat = client.chats.create(
model="gemini-3-pro-image-preview",
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"],
),
)
# 第一轮:生成原图
response = chat.send_message(
"做一张面向小学四年级学生的光合作用信息图,"
"把整个过程画成一份'植物最爱的食谱'。"
)
for part in response.parts:
if part.text:
print(part.text)
elif image := part.as_image():
image.save("photosynthesis.png")
# 第二轮:基于上图改文字为西班牙语
response = chat.send_message(
"把这张信息图里的所有文字改成西班牙语,其它元素都不要动。",
config=types.GenerateContentConfig(
image_config=types.ImageConfig(
aspect_ratio="16:9",
image_size="2K",
),
),
)
for part in response.parts:
if image := part.as_image():
image.save("photosynthesis_spanish.png")
高分辨率输出(4K)
把 imageSize 设为 4K 即可。仅 gemini-3-pro-image-preview 与 gemini-3.1-flash-image-preview 支持。
curl -s -X POST \
"https://www.tokenstack.cc/v1beta/models/gemini-3-pro-image-preview:generateContent?key=sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "达芬奇风格的蝴蝶解剖学手绘"}]}],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {
"aspectRatio": "1:1",
"imageSize": "4K"
}
}
}'
控制思考等级(仅 3.1 Flash)
通过 thinking_config.thinking_level 调整模型思考深度,可选 low / medium / high。注意:无论 include_thoughts 设为何值,思考令牌都会计费。
from google import genai
from google.genai import types
client = genai.Client(
api_key="sk-你的TokenStack密钥",
http_options={"base_url": "https://www.tokenstack.cc"}
)
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents="一座建在漂浮于太空的巨大玻璃瓶中的未来城市",
config=types.GenerateContentConfig(
response_modalities=["IMAGE"],
thinking_config=types.ThinkingConfig(
thinking_level="high",
include_thoughts=False,
),
),
)
for part in response.parts:
if part.thought:
continue
if image := part.as_image():
image.save("city.png")
Google 搜索接地(生成基于实时信息的图片)
给请求挂上 google_search 工具后,模型会先搜索真实信息再作画——适合天气图、赛事海报、新闻配图等需要事实正确的场景。
from google import genai
from google.genai import types
client = genai.Client(
api_key="sk-你的TokenStack密钥",
http_options={"base_url": "https://www.tokenstack.cc"}
)
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents="生成一张深圳明天天气预报的插画海报,温度和天气要真实",
config=types.GenerateContentConfig(
response_modalities=["IMAGE"],
tools=[types.Tool(google_search=types.GoogleSearch())],
),
)
for part in response.candidates[0].content.parts:
if part.inline_data is not None:
part.as_image().save("weather.png")
curl -s -X POST \
"https://www.tokenstack.cc/v1beta/models/gemini-3-pro-image-preview:generateContent?key=sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"contents": [{
"parts": [{"text": "生成一张深圳明天天气预报的插画海报,温度和天气要真实"}]
}],
"tools": [{"google_search": {}}],
"generationConfig": {
"responseModalities": ["IMAGE"]
}
}'
搜索接地依赖上游线路支持,如果带 tools 的请求报错,说明当前线路暂未开放此能力,去掉 tools 字段即可正常生成。
提示词技巧、分辨率与排错
提示词怎么写出好图
| 场景 | 写法要点 | 示例 |
|---|---|---|
| 写实图片 | 描述清楚主体、环境、镜头、光线、材质五要素 | 「一只橘猫趴在木窗台上(主体),背景是雨后的庭院(环境),85mm 浅景深(镜头),暖色夕阳侧光(光线),毛发蓬松细腻(材质)」 |
| 产品图 | 明确背景、角度、阴影,以及品牌文字要不要出现 | 「白色无缝背景,45 度俯拍,柔和的自然投影,瓶身上保留 LOGO 文字清晰可读」 |
| 图片编辑 | 说明「保留什么」和「只修改什么」 | 「保留人物姿势、表情和光线不变,只把背景换成夜晚的城市天台」 |
| 多图合成 | 指明每张参考图的用途 | 「第一张图是产品,第二张图是场景,把产品自然地放进场景的桌面上」 |
| 图中带文字 | 先说清楚要写什么字,再描述画面 | 「海报主标题写:双十一 5 折起(这几个字必须准确出现),背景为红金色促销氛围」 |
常见问题速查
| 现象 | 处理方式 |
|---|---|
| 返回了文本没有图片 | 检查 generationConfig.responseModalities 是否包含 "IMAGE" |
| 401 鉴权失败 | NanoBanana 用 URL 参数 ?key=sk-xxx 鉴权,不是 Authorization 头;确认密钥完整 |
| 参数被拒绝 / 400 | Gemini 原生格式区分大小写:检查 inlineData / mimeType / imageSize 的驼峰写法,imageSize 的值必须大写 K(1K 不是 1k) |
| 想直接拿图片 URL | 本接口只返回 base64。需要 URL 的场景改用 GPT Image 2(response_format=url) |
| 要求 3 张只回了 2 张 | 模型不保证严格按数量返回,批量出图建议循环多次请求,每次一张 |
gemini-3.1-flash-image-preview 分辨率(NanoBanana 2)
支持 512px / 1K / 2K / 4K 四档,括号内为令牌数:
| 宽高比 | 512px | 1K | 2K | 4K |
|---|---|---|---|---|
| 1:1 | 512x512 (747) | 1024x1024 (1120) | 2048x2048 (1120) | 4096x4096 (2000) |
| 2:3 | 424x632 (747) | 848x1264 (1120) | 1696x2528 (1120) | 3392x5056 (2000) |
| 3:2 | 632x424 (747) | 1264x848 (1120) | 2528x1696 (1120) | 5056x3392 (2000) |
| 3:4 | 448x600 (747) | 896x1200 (1120) | 1792x2400 (1120) | 3584x4800 (2000) |
| 4:3 | 600x448 (747) | 1200x896 (1120) | 2400x1792 (1120) | 4800x3584 (2000) |
| 4:5 | 464x576 (747) | 928x1152 (1120) | 1856x2304 (1120) | 3712x4608 (2000) |
| 5:4 | 576x464 (747) | 1152x928 (1120) | 2304x1856 (1120) | 4608x3712 (2000) |
| 9:16 | 384x688 (747) | 768x1376 (1120) | 1536x2752 (1120) | 3072x5504 (2000) |
| 16:9 | 688x384 (747) | 1376x768 (1120) | 2752x1536 (1120) | 5504x3072 (2000) |
| 21:9 | 792x168 (747) | 1584x672 (1120) | 3168x1344 (1120) | 6336x2688 (2000) |
参考图数量限制
| 模型 | 对象图 | 人物图 | 合计上限 |
|---|---|---|---|
gemini-3.1-flash-image-preview | 10 张 | 4 张 | 14 张 |
gemini-3-pro-image-preview | 6 张 | 5 张 | 14 张 |
注意事项
- 鉴权方式:用 URL 查询参数
?key=sk-你的TokenStack密钥,不是Authorization: Bearer头,这是 NanoBanana 接口和其他接口最大的区别。 - 仅支持 base64 图片:所有参考图必须通过
inline_data字段以 base64 编码上传,不支持图片 URL。 - 不支持音视频输入:仅接受文本和图片,音频/视频输入不可用。
- imageSize 必须大写:填
1K/2K/4K,小写会被拒绝。 - SynthID 水印:所有生成的图片都包含 SynthID 不可见水印。
- 输出数量:模型不一定严格按要求的图片数量返回,可能多也可能少。
- 文字渲染:需要在图中生成文字时,建议先用文本说清楚要写什么,再要求生成图片。
- 思考令牌计费:使用 thinking_level 时,思考令牌无论是否返回都会计费。
视频生成 API(统一格式)
- 提交:
POST https://www.tokenstack.cc/v1/videos - 查询:
GET https://www.tokenstack.cc/v1/videos/{id} - 鉴权:
Authorization: Bearer sk-你的TokenStack密钥 - 模型名:见下方档位一览,只有
model值不同,请求体结构完全一样 - 请求体(JSON):
{
"model": "seedance-720p-931-pro",
"prompt": "海边日落,金毛犬追逐浪花,慢镜头",
"duration": 15,
"seconds": "15",
"aspect_ratio": "16:9",
"resolution": "720p",
"images": ["https://你的图床.com/role.jpg"]
}❗素材必须是公网 https 直链——base64、本地路径、需登录才能打开的地址都会失败,详见素材准备。
- 过去 Seedance 有 4 套请求格式(Sora 平铺、
input/parameters、另一套 JSON、reference_*平铺),现在只剩本页这一套。 - 档位名是长期稳定的契约:背后换供应商、上游改名,你这边不用改代码。
- 老的 Seedance / Grok Imagine / Omni Flash 系列模型名已下线,请按下方档位表换成新模型名。
档位一览
| 状态 | 档位名(填进 model) | 画质 · 分辨率 | 时长 · 计费 | 参考素材上限 | ||
|---|---|---|---|---|---|---|
| 图片 | 音频 | 视频 | ||||
| ✅ 已开放 | seedance-720p-931-pro | 满血 · 720p | 15 秒 · 按次 | 0~9 张 · 可不传 | ≤ 3 段 | ≤ 1 段 |
| 🕐 即将开放 | seedance-720p-930-pro | 满血 · 720p | 15 秒 · 按次 | 0~9 张 · 可不传 | ≤ 3 段 | ❌ |
| ✅ 已开放 | seedance-720p-931-fast | 快速 · 720p | 15 秒 · 按次 | 0~9 张 · 可不传 | ≤ 3 段 | ≤ 1 段 |
| 🕐 即将开放 | seedance-720p-930-fast | 快速 · 720p | 15 秒 · 按次 | 0~9 张 · 可不传 | ≤ 3 段 | ❌ |
| ✅ 已开放 | seedance-720p-410-fast | 快速 · 720p | 15 秒 · 按次 | 1~4 张 · 必传 | ≤ 1 段 | ❌ |
| ✅ 已开放 | seedance-720p-410-mini | mini · 720p | 15 秒 · 按次 | 1~4 张 · 必传 | ≤ 1 段 | ❌ |
| ✅ 已开放 | seedance-480p-410-mini | mini · 480p | 15 秒 · 按次 | 1~4 张 · 必传 | ≤ 1 段 | ❌ |
| 🕐 即将开放 | seedance-720p-410-mini-sec | mini · 720p | 5/10/15 秒 · 按秒 | 0~4 张 · 可不传 | ≤ 1 段 | ❌ |
| 🕐 即将开放 | seedance-480p-410-mini-sec | mini · 480p | 10/15 秒 · 按秒 | 1~4 张 · 必传 | ≤ 1 段 | ❌ |
| ✅ 已开放 | omni-720p-10s-300 | 720p | 10 秒 · 按次 | 0/1/3 张 · 不能 2 张 | ❌ | ❌ |
| 🕐 即将开放 | omni-1080p-10s-300 | 1080p | 10 秒 · 按次 | 0/1/3 张 · 不能 2 张 | ❌ | ❌ |
🕐 「即将开放」= 目前控制台还没上,调用会报错,请先用「已开放」的档位。以控制台模型列表为准——列表里有的才能调。各档位单价见 控制台价格页(会调整,别写死在代码里)。
画幅与出片时间
| 档位 | 支持画幅(aspect_ratio) | 出片时间(实测) |
|---|---|---|
全部 seedance-* 档位 | 16:9 横屏 / 9:16 竖屏 | 约 3~6 分钟 |
omni-720p-10s-300 | 16:9 横屏 / 9:16 竖屏 | 约 2 分钟 |
omni-1080p-10s-300 | ⚠️ 仅 16:9 横屏 | 约 2 分钟 |
档位名怎么读
分辨率 - 能力三位数 - 画质 [-sec]
- 能力三位数按「图 - 音 - 视」顺序,就是三类参考素材各能传几个:
931= 9 张图、3 段音频、1 段视频;930= 9 图 3 音 0 视;410= 4 图 1 音 0 视;omni 的300= 3 图 0 音 0 视。 - 画质:
pro满血 >fast快速 >mini。同一档位内画质只升不降,后台故障切换不会偷偷给你降档。 -sec结尾 = 按秒计费(时长可选);不带-sec= 按次计费(时长固定)。930和931只差第三位:931能传 1 段参考视频,930不能。其余画质、时长、图片和音频上限完全一样。
怎么选档位
| 你的需求 | 可用档位 |
|---|---|
| 不传任何参考图(纯文字生视频) | seedance-720p-931-pro / -931-fast / omni-720p-10s-300 |
| 要参考音频(氛围音乐 / 音效) | 全部 seedance-* 档位(omni 不支持音频) |
| 要 15 秒成片 | 全部 seedance-* 档位 |
| 要出片快(约 2 分钟) | omni-720p-10s-300 |
| 要 1080p | omni-1080p-10s-300(🕐 即将开放,仅横屏) |
| 要最多 9 张参考图 | seedance-720p-931-pro / -931-fast |
| 要传参考视频(参考运镜 / 动作) | seedance-720p-931-pro / -931-fast(各 1 段) |
| 要自选时长(不是固定 15 秒) | seedance-720p-410-mini-sec / seedance-480p-410-mini-sec(🕐 即将开放) |
这几档都支持生成真人画面(过脸),但具体某一条会不会被内容审核拦下没法提前预判。选好后把示例里的 model 换成对应档位名即可,其余代码一行都不用改。
接口列表
Base URL:https://www.tokenstack.cc
鉴权方式:Authorization: Bearer sk-你的TokenStack密钥,标准 OpenAI 兼容格式。
请求格式:application/json。
提交视频任务
API 端点
https://www.tokenstack.cc/v1/videos
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: application/json(必填)
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 档位名,见档位一览。从表里或控制台复制,别手打 |
prompt | string | 是 | 提示词,描述想要的画面、镜头、风格 |
duration | number | 是 | 时长(秒)。必须是该档位支持的值:seedance-* 不带 -sec 的一律填 15;omni-* 一律填 10;-sec 按秒档按档位表里的可选值填。按秒档不传会被按 4 秒计费 |
seconds | string | 否 | duration 的字符串写法,值填一样(如 "15")。两个都带上兼容性最好 |
aspect_ratio | string | 否 | 画幅:16:9 横屏 / 9:16 竖屏。omni-1080p-10s-300 只支持 16:9,填 9:16 会被 400 拦截 |
resolution | string | 否 | 与档位名里的分辨率一致即可:480p / 720p / 1080p |
size | string | 否 | 像素尺寸,720p 档可填 1280x720(横)/ 720x1280(竖)。不传就由 aspect_ratio + 档位分辨率决定,一般不用传 |
images | array | 看档位 | 参考图,公网 https URL 数组。张数上限、是否必传见档位表;omni-* 档只接受 0 / 1 / 3 张,不支持 2 张。base64 会被拒,本地图先传到公网可访问的地址,见素材准备 |
audio_urls | array | 否 | 参考音频,公网 https URL 数组。段数上限见档位表;总时长必须 ≤ 14.5 秒(详见素材准备)。omni-* 档不支持,传了会被忽略 |
video_urls | array | 否 | 参考视频,公网 https URL 数组,用于参考运镜 / 动作。只有 seedance-720p-931-pro 和 seedance-720p-931-fast 支持,各最多 1 段(见档位表视频列);其余档位不支持,传了会被忽略或直接失败。时长同样要 ≤ 14.5 秒 |
- 在
prompt里说清楚每张图的用途——例:「第一张是主角,脸型、发型、服装以它为准;第二张是场景」。说得越具体,出片越贴合参考。 - 参考图用来锁定人物 / 商品的一致性;参考音频定氛围音乐 / 音效;参考视频定运镜 / 动作(只有
931两档支持,各 1 段)。 - 所有素材必须是公网 https 直链,本地文件先传到公网可访问的地址,见素材准备。
请求示例
示例 1:参考图生视频(Seedance 15 秒)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-720p-931-pro",
"prompt": "第一张图是主角,脸型、发型、服装以它为准;第二张图是场景。15 秒横屏,镜头缓慢推进,电影感光影。",
"duration": 15,
"seconds": "15",
"aspect_ratio": "16:9",
"resolution": "720p",
"images": [
"https://你的图床.com/role.jpg",
"https://你的图床.com/scene.jpg"
]
}'示例 2:参考音频 + 参考视频(Seedance 931 档)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-720p-931-fast",
"prompt": "海边日落,金毛犬追逐浪花,慢镜头,写实风格,无字幕。运镜参考给的视频,氛围音乐参考给的音频。",
"duration": 15,
"seconds": "15",
"aspect_ratio": "16:9",
"resolution": "720p",
"audio_urls": ["https://你的图床.com/bgm.mp3"],
"video_urls": ["https://你的图床.com/camera-ref.mp4"]
}'⚠️ 参考音频、参考视频时长都必须 ≤ 14.5 秒,超了整单会失败——提交前务必量一下,见素材准备。video_urls 只有 931 两档能用,其他档位传了会失败。
示例 3:纯文字生视频 · 竖屏 10 秒(Omni 快速档)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "omni-720p-10s-300",
"prompt": "竖屏画面:金毛犬在夕阳海滩奔跑,慢镜头,写实风格,无字幕",
"duration": 10,
"seconds": "10",
"aspect_ratio": "9:16",
"resolution": "720p"
}'要带参考图就加 images,只能是 1 张或 3 张(2 张会被 400 拦截)。
成功响应
{
"id": "task_dm0E88sRQWac4L01CYFASCKBWmBOlDPa"
}顶层 id 就是任务 ID,务必保存,下一步查询任务状态要用它。响应里可能还带别的字段,取 id 即可,其余忽略。
查询任务状态
API 端点
https://www.tokenstack.cc/v1/videos/{id}请求示例
curl https://www.tokenstack.cc/v1/videos/task_dm0E88sRQWac4L01CYFASCKBWmBOlDPa \ -H "Authorization: Bearer sk-你的TokenStack密钥"
生成中响应
{
"id": "task_dm0E88sRQWac4L01CYFASCKBWmBOlDPa",
"status": "running",
"progress": 30
}完成响应
{
"id": "task_dm0E88sRQWac4L01CYFASCKBWmBOlDPa",
"status": "completed",
"progress": 100,
"video_url": "https://.../vid_9902aee1.mp4"
}响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 任务 ID,与提交时返回的一致,全程不变 |
status | string | 只有 4 个取值:pending 排队中 / running 生成中 / completed 成功 / failed 失败 |
progress | number | 进度 0~100,可以拿去展示进度条。但完成与否只看 status——部分渠道的 progress 不准 |
video_url | string | completed 时的成片地址,可直接播放 / 下载。约 24 小时后失效,拿到请立刻转存 |
error.message | string | failed 时的失败原因,可直接展示给用户 |
- 间隔 10~15 秒查一次,直到
status变成completed或failed。 - 拿到
completed取video_url;拿到failed把error.message展示给用户即可。
素材准备(参考图 / 参考音频 / 参考视频)
素材放哪儿
接口只收公网 https URL,不收 base64、不收本地路径。参考图、参考音频、参考视频都要先放到公网能直接打开的地方(对象存储、图床、你自己的静态服务器都行),再把链接填进 images / audio_urls / video_urls。
提交前必查的 4 条(不查就会失败)
| # | 检查项 | 要求 | 不查会怎样 |
|---|---|---|---|
| 1 | 参考音频 / 参考视频时长 | ≤ 14.5 秒 | 整单失败。上游硬上限是 15.00 秒,而剪出来标称「15 秒」的素材实际常是 15.0x~15.3 秒(关键帧对齐、采样率取整会多出零点几秒)——超 0.2 秒和超 5 秒后果一样,所以卡 14.5 秒留余量 |
| 2 | 素材数量 | 在档位表的上限内;标「必传」的档位至少 1 张图 | 被渠道直接拒,整单失败 |
| 3 | 素材链接可达性 | https 公网直链、匿名可打开 | 拉不到素材,整单失败 |
| 4 | 素材链接有效期 | ≥ 30 分钟 | 生成过程中会再次拉取素材,链接提前过期会导致整单失败 |
http://开头的地址境外线路拉不到——必须https。- 对象存储桶如果设了防盗链、或只允许内网访问,上游同样拉不到;要么放开公网匿名读,要么用长效签名链接。
- 短期签名链接(几分钟就过期的)不行,见上表第 4 条。
- 需要登录 Cookie 才能打开的地址不行。
Seedance 视频 · 先选哪个
| 你的需求 | model | 进对应文档 |
|---|---|---|
| 快出 15 秒、接入最简单(推荐新手) | seedance-2-0-15s-slow / -high / -fast | 📄 Seedance 2.0 视频 → |
| 灵活时长(5/10/15s)/ 角色一致 / 参考生 | seedance-2-0-sale | 📄 Seedance 2.0 多模式 → |
| 按秒计费 / 首尾帧 / 全能参考 | doubao-seedance-2-0-260128 等 | 📄 Doubao Seedance → |
| 要 480p~4K 多档分辨率 / mini·fast·pro 档位(固定 15 秒) | seedance-2.0-720p-fast-15s 等 8 个 | 📄 Seedance 多分辨率 → |
⚠️ 选好 model 一定要点上方橙色按钮进对应那篇再写代码——4 套请求格式完全不一样(① Sora 平铺 images ② input/parameters ③ 另一套 JSON ④ 平铺 reference_ 字段),照错模板必报错。拿不准就用第一个「Seedance 2.0 视频」。
Seedance 2.0 视频生成 API(Sora 格式)
- 模型名:
seedance-2-0-15s-slow/seedance-2-0-15s-high/seedance-2-0-15s-fast(按速度 / 画质选,见模型概览) - 端点:
POST https://www.tokenstack.cc/v1/videos(渠道类型 = OpenAI,Sora 格式) - 计费:一次性 15 秒按次计费,不支持按秒
- 参考素材:图 / 视频 / 音频均传公网 URL,上限按档不同(slow=4图/1音/3视频,fast·high=9图/3音,见模型概览的参考上限表),
prompt里用@Image1/@Video1/@Audio1引用 - 请求体(JSON):
{
"model": "seedance-2-0-15s-slow",
"prompt": "...",
"images": ["<公网URL1>", "<公网URL2>"],
"seconds": "15",
"size": "1280x720"
}❗图片必须是公网 http/https URL——base64 会被拒(报 image_url.url must be public http/https URL)。
模型概览
| 模型 | 定位 | 时长 | 分辨率 | 计费 |
|---|---|---|---|---|
seedance-2-0-15s-fast |
出片快,速度优先 | 15 秒 | 1280x720(720p) |
一次性 15s 按次 |
seedance-2-0-15s-slow |
慢速(约 13 分钟),性价比 | 15 秒 | 1280x720(720p) |
一次性 15s 按次 |
seedance-2-0-15s-high |
高画质,质量优先 | 15 秒 | 1280x720(720p) |
一次性 15s 按次 |
三个 model 接口格式完全一样,速度 / 画质不同,参考素材上限也不同(见下表)——把示例里的 model 换成你要的那个即可。
各档参考素材上限(实测)
| 模型 | 图片参考 | 音频参考 | 视频参考 |
|---|---|---|---|
seedance-2-0-15s-slow | 最多 4 张 | 最多 1 个 | 最多 3 个 |
seedance-2-0-15s-fast | 最多 9 张 | 最多 3 个 | — |
seedance-2-0-15s-high | 最多 9 张 | 最多 3 个 | — |
⚠️ 三档上限不一样:slow 图少(4 张)、音频 1 个,但支持视频参考(3 个);fast / high 图多(9 张)、音频 3 个,视频参考暂未实测(表里标 —,以实际为准)。素材超过上限会被截断或报错。下文参数里写的通用上限,一律以本表为准。
- 肖像保护:大部分情况可以过。
- 图片要公网 URL:必须是外网可直接访问的 http/https 直链,不能是本地路径、内网地址、或需要登录 Cookie 的地址,base64 也会被拒——这是你接入要解决的第一件事(本地图先传到图床 / 对象存储拿到公网 URL 再传)。
- 出片时间因 model 而异:
-slow约 13 分钟、-fast更快、-high画质更好(耗时可能更长)。都务必异步轮询,别同步死等。
接口列表
/v1/videos 是 Sora 兼容格式的共用端点(Omni 10s、Grok Imagine 也走这里),靠 model 字段路由。model 填 seedance-2-0-15s-slow / -high / -fast 之一,填错会路由到别的模型。
Base URL:https://www.tokenstack.cc
鉴权方式:Authorization: Bearer sk-你的TokenStack密钥,标准 OpenAI 兼容格式。
请求格式:application/json。
提交视频任务
API 端点
https://www.tokenstack.cc/v1/videos
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: application/json(必填)X-Idempotency-Key: 任意唯一串(选填,建议带)——同一分镜重试时保持一致,避免网络重试导致重复提交、重复扣费
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 固定填 seedance-2-0-15s-slow |
prompt | string | 是 | 视频提示词,描述想要的画面、镜头、风格 |
images | array | 否 | 参考图,公网 http/https URL 数组(上限按档:slow≤4、fast/high≤9,见参考上限表),用于保持人物 / 商品一致性。数组里的图按顺序映射成 @Image1、@Image2…,在 prompt 里用它们指明每张图的用途。base64 会被拒,本地图先转图床 URL |
videos | array | 否 | 参考视频,公网 URL 数组(slow≤3;fast/high 暂未实测),用于参考运镜 / 动作。按顺序映射成 @Video1、@Video2、@Video3,在 prompt 里引用 |
audios | array | 否 | 参考音频,公网 URL 数组(上限按档:slow≤1、fast/high≤3),用于参考氛围音乐 / 音效。按顺序映射成 @Audio1、@Audio2、@Audio3,在 prompt 里引用 |
seconds | string | 否 | 时长固定 15 秒,传 "15" 即可。一次性 15s 按次计费,不支持按秒 |
size | string | 否 | 分辨率,填 1280x720(720p 横屏) |
- 三类素材各自独立编号,按数组顺序:
images→@Image1、@Image2…、videos→@Video1…、audios→@Audio1…(各类上限按档不同,见上方参考上限表)。 - 在
prompt里用这些编号点名每个素材的用途——例:「@Image1是主角,脸型发型以它为准;@Image2是场景;参考@Video1的运镜;氛围音乐参考@Audio1」。点得越清楚,出片越贴合参考。 - 三类素材全部用公网 http/https URL,本地文件先转图床 / 对象存储再传;base64 会被拒。
请求示例
示例 1:参考图生视频(最常用)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-H "X-Idempotency-Key: scene-001" \
-d '{
"model": "seedance-2-0-15s-slow",
"prompt": "@Image1 是主角,脸型、发型、服装以 @Image1 为准;@Image2 是场景。15 秒横屏漫剧,镜头缓慢推进,电影感光影。",
"images": ["https://你的图床.com/role.jpg", "https://你的图床.com/scene.jpg"],
"seconds": "15",
"size": "1280x720"
}'示例 2:图 + 视频 + 音频 综合参考
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-H "X-Idempotency-Key: scene-002" \
-d '{
"model": "seedance-2-0-15s-slow",
"prompt": "@Image1 是主角,脸型发型以它为准;@Image2 是场景。参考 @Video1 的运镜;氛围音乐参考 @Audio1。15 秒横屏漫剧,电影感光影。",
"images": ["https://你的图床.com/role.jpg", "https://你的图床.com/scene.jpg"],
"videos": ["https://你的图床.com/camera-ref.mp4"],
"audios": ["https://你的图床.com/bgm.mp3"],
"seconds": "15",
"size": "1280x720"
}'成功响应
{
"id": "video_xxxxxxxxxxxxx",
"object": "video",
"model": "seedance-2-0-15s-slow",
"status": "queued"
}拿到 id 后去查询任务状态轮询,约 13 分钟后取视频。
查询任务状态
API 端点
https://www.tokenstack.cc/v1/videos/{video_id}请求示例
curl https://www.tokenstack.cc/v1/videos/video_xxxxxxxxxxxxx \ -H "Authorization: Bearer sk-你的TokenStack密钥"
完成响应
{
"id": "video_xxxxxxxxxxxxx",
"object": "video",
"model": "seedance-2-0-15s-slow",
"status": "completed",
"video_url": "https://img.tokenstack.cc/videos/video_xxxxxxxxxxxxx.mp4",
"completed_at": 1780000300
}响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 任务 ID(与提交时返回的一致),提交后务必保存用于轮询 |
status | string | 生成中:queued / in_progress(或 pending / running);成功:completed(或 succeeded);失败:failed |
video_url | string | 成功后的视频地址,可直接在线播放 / 下载。若返回为透传格式,则取 resource_list[0].resource_url(含 sig/exp,有有效期,及时转存) |
fail_reason | string | failed 时的失败原因,可直接展示给用户 |
- 异步必轮询:约 13 分钟出一条,提交后用
GET /v1/videos/{video_id}轮询到completed或failed,建议间隔 5–10 秒。 - 图片必须公网 URL:base64 会被拒(
image_url.url must be public http/https URL),本地图先转图床 URL。 - 模型名必须
seedance-2-0-15s-slow:/v1/videos是共用端点,填错会路由到别的模型。 - 计费固定 15 秒按次,不按秒;任务失败一般不计费。
- 结果 URL 有有效期:看到
completed后及时下载保存。
Seedance 2.0 视频生成 API(多模式)
- 模型名:
seedance-2-0-sale - 提交:
POST https://www.tokenstack.cc/v1/videos查询:GET /v1/videos/{id}(用id、不是task_id) - 异步流程:提交拿
id(task_开头,不是task_id)→ 轮询status→ 取object(结果链接)。轮询间隔 ≥ 20 秒 - 请求体结构:
{ model, prompt, input:{ prompt, media? }, parameters:{…} }(注意是input/parameters包裹,和别的视频模型不一样) - ⚠️ 顶层和
input里都要放prompt:除了input.prompt,顶层必须再放一个prompt(两边填一样的内容),否则提交直接报400 {"message":"prompt is required"}。原因:校验只认顶层prompt,input.prompt是传给上游生成用的。 - 图片 / 素材必须是公网 http/https URL,不收 base64 / 本地文件
三种生成模式
| 模式 | 用途 | media 传什么 |
|---|---|---|
| t2v(文生) | 纯文字生视频 | 不传 media |
| i2v(首帧生) | 给一张首帧图,从它开始动 | [{"type":"first_frame","url":…}](尺寸随图,不用 ratio) |
| r2v(参考生) | 核心:拿角色图 / 九宫格图生成该角色视频 | [{"type":"reference_image","url":…}, …](可多张) |
parameters 参数
| 参数 | 取值 | 说明 |
|---|---|---|
resolution | "720P" / "1080P" | 大写 P |
duration | 5 / 10 / 15 | 整数,秒。具体支持哪几档以实测为准(见已知局限) |
ratio | 16:9 / 9:16 / 1:1 / 4:3 / 3:4 | t2v、r2v 用;i2v 不用(尺寸随首帧图) |
prompt_extend | true / false | 是否让上游自动扩写提示词 |
watermark | true / false | 水印 |
/v1/videos 是共用端点(多个视频模型走这里),靠 model 字段路由。本模型请求体是 {model, input, parameters} 结构,和 Seedance 2.0(15s) 的 Sora 扁平格式不一样,别套错模板。
Base URL:https://www.tokenstack.cc 鉴权:Authorization: Bearer sk-你的TokenStack密钥(每个请求都带)
提交视频任务
API 端点
https://www.tokenstack.cc/v1/videos
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 固定填 seedance-2-0-sale |
prompt(顶层) | string | 是 | ⚠️ 必填,缺了直接报错。和下面 input.prompt 填一样的内容 |
input.prompt | string | 是 | 提示词(和顶层 prompt 一致) |
input.media | array | 否 | 图生 / 参考类才传。元素 {type, url}:type = first_frame(首帧)/ reference_image(参考图 / 角色图,可多张)。url 必须公网 |
parameters | object | 否 | 见上方 parameters 表(resolution / duration / ratio / prompt_extend / watermark) |
请求示例
① 文生视频 t2v(不传 media)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0-sale",
"prompt": "一只小猫在荔枝园里奔跑,电影感",
"input": { "prompt": "一只小猫在荔枝园里奔跑,电影感" },
"parameters": { "resolution":"1080P", "ratio":"16:9", "duration":15, "prompt_extend":false, "watermark":false }
}'② 首帧生视频 i2v(1 张首帧,不用 ratio)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0-sale",
"prompt": "图片中的人物开始跳舞",
"input": {
"prompt": "图片中的人物开始跳舞",
"media": [ { "type":"first_frame", "url":"https://你的图床/first.jpg" } ]
},
"parameters": { "resolution":"1080P", "duration":10, "prompt_extend":true, "watermark":false }
}'③ 参考生视频 r2v(核心:角色图 / 九宫格图,可多张)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0-sale",
"prompt": "图1中的人物穿上图2的装饰,在城市街头行走",
"input": {
"prompt": "图1中的人物穿上图2的装饰,在城市街头行走",
"media": [
{ "type":"reference_image", "url":"https://你的图床/role.png" },
{ "type":"reference_image", "url":"https://你的图床/outfit.png" }
]
},
"parameters": { "resolution":"1080P", "ratio":"16:9", "duration":10, "prompt_extend":false, "watermark":false }
}'成功响应
{ "id":"task_xxx", "task_id":"task_xxx", "object":"", "status":"queued", "progress":0, "created_at":0 }id(task_ 开头那个),别用 task_id!
- 保存响应里的
id(形如task_xxx),下一步查询就用它。 - 别拿
task_id去查——轮询时它可能变成上游内部的 UUID(形如e86b9cc9-5587-…带横杠),用它查会 404 / 查不到。 - 一句话口诀:查询永远用
id(task_开头),看到带横杠的 UUID 就忽略。
查询任务状态
API 端点
https://www.tokenstack.cc/v1/videos/{id}↑ {id} 填提交返回的 id(task_ 开头),不是 task_id
请求示例
curl https://www.tokenstack.cc/v1/videos/task_xxx \ -H "Authorization: Bearer sk-你的TokenStack密钥"
响应(三种状态)
// 生成中
{ "id":"...", "object":"", "seconds":0, "status":"RUNNING", "created_at":1780213835 }
// 完成 —— 视频在 object,seconds 是成片时长
{ "id":"...", "object":"https://视频地址", "seconds":15, "status":"SUCCEEDED", "created_at":1780213835 }
// 失败 —— 原因直接拼在 status 里
{ "id":"...", "object":"", "seconds":0,
"status":"FAILED: 内容审核未通过(输入可能含不适当内容)" }判断逻辑(重要)
| 状态 | 怎么判断 | 取什么 |
|---|---|---|
| 成功 | status === "SUCCEEDED" | 取 object(视频链接)、seconds(时长) |
| 失败 | status 以 "FAILED" 开头 | 原因就在 status 字符串里 |
| 进行中 | PENDING / RUNNING | 等 ≥20 秒再查 |
- 轮询 ≥ 20 秒一次,加最大轮询时长兜底(慢速出片可能十几分钟)。
- 失败判断认
status前缀FAILED,原因(含内容审核拦截)就在字符串里,可直接展示给用户。 - 结果链接
object有时效,看到SUCCEEDED后尽快下载 / 转存。
Seedance 视频生成 API
| 本页 · Seedance 2 | Doubao Seedance 2.0 → | |
|---|---|---|
| 模型名 | seedance-2-480p / seedance-2-720p | doubao-seedance-2-0-260128 等 |
| 请求格式 | multipart/form-data(表单 + 文件上传) | JSON |
| 参考素材 | 本地文件直传(-F 'image_1=@...') | 公网 URL |
| 计费 | 按秒 | 按秒 |
模型概览
| 模型 | 分辨率 | 时长范围 | 宽高比 | 计费 |
|---|---|---|---|---|
seedance-2-480p |
480p | 4–15 秒 | 6 种(见下) | 按秒(单价最低) |
seedance-2-720p |
720p | 4–15 秒 | 6 种(见下) | 按秒 |
分辨率由模型名后缀决定(不是参数)——要 720p 就用 seedance-2-720p,没有单独的 resolution 字段。
接口列表
| 接口 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 提交视频任务 | POST | /v1/video/generations |
表单提交,立即返回任务 id |
| 查询任务状态 | GET | /v1/video/generations/{task_id} |
轮询查询任务进度,完成后返回视频地址 |
Base URL:https://www.tokenstack.cc
鉴权方式:Authorization: Bearer sk-你的TokenStack密钥。
请求格式:multipart/form-data(不是 JSON)——所有参数以表单字段 -F 提交,参考素材以 -F '字段=@文件路径' 直传本地文件。
提交视频任务
API 端点
https://www.tokenstack.cc/v1/video/generations
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: multipart/form-data(用 curl-F时自动带上)
请求参数
请求格式:multipart/form-data,所有字段用 -F 提交。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
model |
string | 是 | — | seedance-2-480p 或 seedance-2-720p |
prompt |
string | 是 | — | 视频提示词,描述画面、运镜、风格 |
duration |
integer | 否 | 5 |
视频时长(秒),范围 4–15 |
ratio |
string | 否 | adaptive |
宽高比。adaptive(自适应,按参考图比例自动定)/ 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 |
image_1 ~ image_3 |
file | 否 | — | 参考图,最多 3 张,本地文件直传(-F 'image_1=@/path/a.png')。字段名固定 image_1 / image_2 / image_3 |
video |
file | 否 | — | 参考视频(1 个),本地文件直传 |
audio |
file | 否 | — | 参考音频(1 个),本地文件直传 |
所有素材字段都可不传 → 即纯文生视频。本系列只接受本地文件上传,不支持图片/视频 URL。
请求示例
示例 1:文生视频(不传素材)
curl https://www.tokenstack.cc/v1/video/generations \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -F 'model="seedance-2-720p"' \ -F 'prompt="日出时分,阳光照耀山顶,电影级运镜"' \ -F 'duration="5"' \ -F 'ratio="16:9"'
示例 2:参考图(最多 3 张,本地文件)
curl https://www.tokenstack.cc/v1/video/generations \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -F 'model="seedance-2-720p"' \ -F 'prompt="把 image_1 的角色融入 image_2 的场景,用 image_3 的光效风格"' \ -F 'duration="8"' \ -F 'ratio="16:9"' \ -F 'image_1=@"/path/to/character.png"' \ -F 'image_2=@"/path/to/scene.jpg"' \ -F 'image_3=@"/path/to/lighting.jpg"'
示例 3:参考视频 + 参考音频
curl https://www.tokenstack.cc/v1/video/generations \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -F 'model="seedance-2-720p"' \ -F 'prompt="按参考视频的运镜方式,用参考音频的音色生成新视频"' \ -F 'duration="10"' \ -F 'ratio="16:9"' \ -F 'video=@"/path/to/reference.mp4"' \ -F 'audio=@"/path/to/music.mp3"'
提交响应
{
"id": "task_1a2b3c4d5e6f",
"status": "IN_PROGRESS"
}
查询任务状态
API 端点
https://www.tokenstack.cc/v1/video/generations/{task_id}
请求示例
curl https://www.tokenstack.cc/v1/video/generations/task_1a2b3c4d5e6f \ -H "Authorization: Bearer sk-你的TokenStack密钥"
完成响应
{
"code": "success",
"data": {
"task_id": "task_1a2b3c4d5e6f",
"status": "SUCCESS",
"progress": "100%",
"result_url": "https://img.tokenstack.cc/videos/result.mp4",
"data": {
"video_url": "https://img.tokenstack.cc/videos/result.mp4"
}
}
}
视频地址在 data.result_url(也等于 data.data.video_url),两处一致,取任一即可。
任务状态
| 状态 | 含义 |
|---|---|
QUEUED | 等待队列中 |
IN_PROGRESS | 生成中 |
SUCCESS | 生成完成,可从 result_url 下载视频 |
FAILURE | 生成失败,已扣费用全额退回 |
注意状态值是大写(SUCCESS 不是 completed),和其他视频接口不一样。
- 异步任务必须轮询:提交后立即返回
id,用GET /v1/video/generations/{task_id}轮询直到SUCCESS或FAILURE。建议间隔 10–30 秒,通常 2–5 分钟完成。 - multipart 不是 JSON:所有参数用
-F表单字段提交,文件用-F '字段=@/path/file'直传,不支持 URL。 - 分辨率看模型名:没有
resolution参数,seedance-2-480p/seedance-2-720p决定清晰度。 - 失败全额退款:状态
FAILURE自动退回已扣费用。 - 参考媒体时长会计入计费:详见下方计费规则。
计费规则
计费时长公式
- 有参考视频 / 音频时:计费时长 = 参考视频时长 + 参考音频时长 +
duration - 无参考媒体时:计费时长 =
duration(默认 5 秒)
计费示例:
| 场景 | 参考视频 | 参考音频 | duration | 计费秒数 |
|---|---|---|---|---|
| 纯文生视频 | — | — | 5s | 5 秒 |
| 含参考图 | — | — | 8s | 8 秒 |
| 含参考视频 | 10s | — | 5s | 15 秒 |
| 含参考视频+音频 | 10s | 30s | 5s | 45 秒 |
- 试稿、跑量 → 用
seedance-2-480p(单价最低) - 日常交付 → 用
seedance-2-720p,画质与价格均衡 - 参考视频/音频会计入计费时长,素材尽量裁剪到需要的长度再传
系统通过 ffprobe 读取参考视频/音频时长用于计费,文件损坏或格式不支持会拒绝请求(不扣费)。
Doubao Seedance 2.0 视频生成 API
model:
| 本页 · Doubao Seedance 2.0 | Seedance 2.0 15s → | |
|---|---|---|
| 模型名 | doubao-seedance-2-0-260128 等 | seedance-2-0-15s-slow |
| 请求格式 | JSON(首尾帧、全能参考等丰富参数) | Sora 兼容(model/prompt/images…,更简单) |
| 时长 / 计费 | 时长可选,按秒 | 固定 15 秒、按次(一口价) |
| 特点 | 首尾帧、多素材、全能参考(图+视频+音频) | 出片慢(~13 分钟)、可过肖像保护 |
模型概览
| 模型 | 定位 | 时长范围 | 宽高比 | 计费 |
|---|---|---|---|---|
doubao-seedance-2-0-260128 |
标准版,质量优先 | 4–15 秒 | 6 种(见参数表) | 按秒 |
doubao-seedance-2-0-fast-260128 |
快速版,速度优先、单价更低 | 4–15 秒 | 6 种(见参数表) | 按秒 |
支持的生成模式
| 模式 | 用途 | 怎么触发 |
|---|---|---|
| 文生视频 | 纯文字生成 | mode=t2v |
| 图生视频 | 单图首帧 | mode=i2v + image_url |
| 首尾帧 | 指定首帧和尾帧 | mode=i2v_first_last + image_url + end_image_url |
| 多参考图 | 多张图参考 | mode=reference_images + reference_images |
| 多素材参考 | 图/视频/音频混合参考 | mode=reference_material + content 数组 |
| 全能参考 ⭐ | 一次性综合参考图+视频+音频 | function_mode=omni_reference + content 数组 |
接口列表
/v1/videos 是 Sora 兼容格式的共用端点(Omni 10s、Grok、Seedance 2.0 15s 也走这里),靠 model 字段路由。本系列 model 填 Doubao Seedance 2.0 系列名(如 doubao-seedance-2-0-260128,见下方),别和另一套 seedance-2-0-15s-slow 搞混。
Base URL:https://www.tokenstack.cc
鉴权方式:Authorization: Bearer sk-你的TokenStack密钥,标准 OpenAI 兼容格式。
请求格式:application/json。
提交视频任务
API 端点
https://www.tokenstack.cc/v1/videos
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: application/json(必填)
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
model |
string | 是 | — | doubao-seedance-2-0-260128(标准)/ doubao-seedance-2-0-fast-260128(快速) |
prompt |
string | 是 | — | 视频提示词 |
mode |
string | 否 | t2v |
t2v / i2v / i2v_first_last / reference_images / reference_material |
function_mode |
string | 否 | — | 全能参考:填 omni_reference 时,模型会综合 content 里的图 / 视频 / 音频素材一起参考生成 |
duration |
integer | 否 | 5 |
视频时长(秒),范围 4–15。也可用 seconds 别名 |
aspect_ratio |
string | 否 | adaptive |
宽高比:adaptive / 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16。也可用 ratio 别名 |
image_url |
string | 否 | — | 单图首帧 URL(i2v) |
end_image_url |
string | 否 | — | 尾帧 URL(i2v_first_last)。也可用 last_image_url |
reference_images |
string[] | 否 | — | 多参考图 URL 数组(reference_images 模式)。也可用 image_urls |
content |
array | 否 | — | 多素材数组(reference_material / 全能参考用),元素见下方说明 |
generate_audio |
boolean | 否 | — | 是否生成音频 |
watermark |
boolean | 否 | — | 是否加水印 |
所有参考素材都用公网可访问的 URL,本地文件先用图片上传 API 转 URL。
content 数组元素结构
| 字段 | 说明 |
|---|---|
type | text / image_url / video_url / audio_url |
text / image_url / video_url / audio_url | 对应内容;媒体用对象形式 { "url": "https://..." } |
role | 素材用途标记:reference_image / reference_video / reference_audio |
name | 素材编号,可在 prompt 里点名引用(如「参考素材 1 的人物」) |
请求示例
示例 1:文生视频(t2v)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-0-260128",
"mode": "t2v",
"prompt": "城市夜景延时摄影,车流光轨,霓虹闪烁",
"duration": 5,
"aspect_ratio": "16:9"
}'
示例 2:首尾帧(i2v_first_last)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-0-fast-260128",
"mode": "i2v_first_last",
"prompt": "从白天自然过渡到夜晚,镜头位置不变",
"image_url": "https://example.com/day.jpg",
"end_image_url": "https://example.com/night.jpg",
"duration": 5,
"aspect_ratio": "16:9"
}'
示例 3:全能参考(function_mode=omni_reference,图+视频+音频混合)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-0-260128",
"function_mode": "omni_reference",
"prompt": "参考素材1的人物形象、素材2的运镜、素材3的背景音乐,生成产品广告",
"content": [
{ "type": "text", "text": "保持人物形象一致,运镜参考视频,配上参考音频的节奏" },
{ "type": "image_url", "image_url": { "url": "https://example.com/person.png" }, "role": "reference_image", "name": "1" },
{ "type": "video_url", "video_url": { "url": "https://example.com/camera.mp4" }, "role": "reference_video", "name": "2" },
{ "type": "audio_url", "audio_url": { "url": "https://example.com/music.mp3" }, "role": "reference_audio", "name": "3" }
],
"duration": 8,
"aspect_ratio": "16:9"
}'
提交响应
{
"id": "video_dbsd123",
"object": "video",
"model": "doubao-seedance-2-0-260128",
"status": "queued",
"created_at": 1781234567
}
查询任务状态
API 端点
https://www.tokenstack.cc/v1/videos/{video_id}
请求示例
curl https://www.tokenstack.cc/v1/videos/video_dbsd123 \ -H "Authorization: Bearer sk-你的TokenStack密钥"
完成响应
{
"id": "video_dbsd123",
"object": "video",
"model": "doubao-seedance-2-0-260128",
"status": "completed",
"video_url": "https://img.tokenstack.cc/videos/video_dbsd123.mp4",
"completed_at": 1781234890
}
视频地址在 video_url(个别情况字段名是 url),两者取其一即可。
任务状态
| 状态 | 含义 |
|---|---|
queued | 等待队列中 |
in_progress | 生成中 |
completed | 生成完成,可从 video_url 下载视频 |
failed | 生成失败,error 字段含失败原因 |
- 异步任务必须轮询:提交后立即返回
id,用GET /v1/videos/{video_id}轮询直到completed或failed,建议间隔 5–15 秒。 - 全能参考用
content:填function_mode=omni_reference时,把图 / 视频 / 音频素材放进content数组,每项用role标用途、name起编号,prompt里可点名引用。 - JSON 请求体:本系列用 JSON + 公网 URL;
seedance-2-*系列才是 multipart + 本地文件,别拿错示例。 - 素材用 URL:需公网可访问,本地文件先用图片上传 API 转 URL。
- 结果 URL 有有效期:看到
completed后及时下载。
Seedance 2.0 视频生成 API(多分辨率 · 480p~4K · 固定 15 秒)
- 参考素材字段名不同:用
reference_image_urls/reference_videos/reference_audios(不是上面那套的images/videos/audios)。 - 比例是顶层必填:
aspect_ratio(16:9/9:16)必须传。 seconds一律填"1":本系列全部固定出 15 秒,seconds填"1"(代表 1 个固定时长单位),不是填真实秒数(填"15"可能报错或被忽略)。
- 提交:
POST https://www.tokenstack.cc/v1/videos查询:GET /v1/videos/{taskId} - 模型名:见下方「可用模型表」(8 个,480p~4K × mini/fast/pro),以控制台实际开通为准。
- 请求体骨架:
{ model, prompt, aspect_ratio, seconds, size?, reference_image_urls?, reference_videos?, reference_audios? }(平铺 JSON) - 参考素材:图 ≤ 9 张、视频 ≤ 3 个(每个 3–10 秒)、音频 ≤ 3 个(合计 ≤ 15 秒),全部传公网 http/https URL。
可用模型(分辨率 × 档位,全部固定 15 秒)
本系列 8 个 model 请求格式完全一样,区别只在分辨率和档位(速度 / 画质 / 价格梯度)。把示例里的 model 换成你要的那个即可,全部固定出 15 秒、seconds 一律填 "1"。
| model(调用名) | 分辨率 | 档位 | 时长 |
|---|---|---|---|
seedance-2.0-480p-mini-15s | 480p | mini(最省) | 15 秒 |
seedance-2.0-480p-fast-15s | 480p | fast(快) | 15 秒 |
seedance-2.0-480p-15s | 480p | 标准 | 15 秒 |
seedance-2.0-720p-mini-15s | 720p | mini(最省) | 15 秒 |
seedance-2.0-720p-fast-15s | 720p | fast(快,推荐) | 15 秒 |
seedance-2.0-720p-pro-15s | 720p | pro(高画质) | 15 秒 |
seedance-2.0-1080p-15s | 1080p | 标准 | 15 秒 |
seedance-2.0-4k-15s | 4K | 标准 | 15 秒 |
💡 档位(mini / fast / pro)= 速度、画质、价格的梯度;分辨率越高、档位越贵越慢。差价以控制台价格为准(别写死,会变)。拿不准先用 seedance-2.0-720p-fast-15s(均衡)。以上为当前开通的 8 个,控制台可能增减,以控制台实际列表为准。
接口列表
/v1/videos 是共用端点(多个视频模型走这里),靠 model 字段路由。本模型请求体是平铺 JSON + reference_* 字段名,和 Seedance 15s(Sora 格式)、Seedance 多模式(input/parameters)都不一样,别套错模板。
Base URL:https://www.tokenstack.cc 鉴权:Authorization: Bearer sk-你的TokenStack密钥(每个请求都带) 请求格式:application/json
提交视频任务
API 端点
https://www.tokenstack.cc/v1/videos
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: application/json(必填)
必填参数
| 参数 | 类型 | 说明 |
|---|---|---|
model | string | 模型名,见可用模型表(如 seedance-2.0-720p-fast-15s);以控制台开通的为准 |
prompt | string | 视频描述:画面、镜头、风格 |
aspect_ratio | string | 画面比例,16:9(横)/ 9:16(竖) |
seconds | string | 一律填 "1"(本系列全部固定出 15 秒,不是填真实秒数) |
可选参数
| 参数 | 类型 | 说明 |
|---|---|---|
size | string | 可不传(分辨率主要由 model 名决定:480p/720p/1080p/4K);需微调时传 1280x720 这类值 |
reference_image_urls | string[] | 参考图,最多 9 张,公网 http/https URL,用于锁定人物 / 商品一致性 |
reference_videos | string[] | 参考视频,最多 3 个,每个 3–10 秒,公网 URL,用于参考运镜 / 动作 |
reference_audios | string[] | 参考音频,最多 3 个,合计 ≤ 15 秒,公网 URL,用于参考氛围音乐 |
💡 该模型另有几个关人脸审核 / 换脸强度的高级字段,默认不公开写进文档;确有需要的客户在后台单独拿参数。
请求示例
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-720p-fast-15s",
"prompt": "一只橘猫在窗台伸懒腰,窗外下小雨,电影感镜头",
"aspect_ratio": "16:9",
"seconds": "1",
"reference_image_urls": ["https://你的图床.com/ref1.jpg"]
}'成功响应(立即返回)
{
"id": "task_sHhjEI5N9bqfO9brAPRk1WovzEbis6LM",
"task_id": "task_sHhjEI5N9bqfO9brAPRk1WovzEbis6LM",
"status": "queued",
"progress": 0,
"created_at": 1780308826,
"seconds": "1",
"size": "1280x720"
}拿到 id(task_ 开头)后去查询任务状态轮询。id 和 task_id 值一样,用哪个都行。
查询任务状态
API 端点
https://www.tokenstack.cc/v1/videos/{taskId}请求示例
curl https://www.tokenstack.cc/v1/videos/task_sHhjEI5N9bqf \ -H "Authorization: Bearer sk-你的TokenStack密钥"
状态枚举
| 类型 | 可能的状态值 |
|---|---|
| 进行中 | queued / pending / processing / running / in_progress |
| 成功 | completed / succeeded / success |
| 失败 | failed / error / cancelled / canceled |
⚠️ 成功 / 失败各有好几个同义状态值,判断时把同组的都算上(别只判 completed),否则会漏判。
成功响应
{
"id": "task_d123456",
"status": "completed",
"progress": 100,
"video_url": "https://img.tokenstack.cc/videos/xxx.mp4",
"url": "https://img.tokenstack.cc/videos/xxx.mp4",
"result_url": "https://img.tokenstack.cc/videos/xxx.mp4",
"urls": ["https://img.tokenstack.cc/videos/xxx.mp4"],
"created_at": 1780304070,
"completed_at": 1780304261,
"seconds": "1",
"size": "1280x720"
}urls[0] / video_url / url / result_url / metadata.url 任一处,优先取 urls[0],取不到再依次兜底。结果 URL 有有效期,及时下载转存。
完整轮询示例(Python)
import time, requests
BASE = "https://www.tokenstack.cc/v1"
KEY = "sk-你的TokenStack密钥"
TASK_ID = "task_xxx"
headers = {"Authorization": f"Bearer {KEY}"}
time.sleep(1) # 首次等 1 秒
deadline = time.time() + 15 * 60 # 最长等 15 分钟
while time.time() < deadline:
data = requests.get(f"{BASE}/videos/{TASK_ID}", headers=headers, timeout=30).json()
print(f"状态: {data['status']} 进度: {data.get('progress')}%")
if data["status"] in ("completed", "succeeded", "success"):
url = (data.get("urls") or [None])[0] or data.get("video_url") or data.get("url") or data.get("result_url")
print("视频地址:", url); break
if data["status"] in ("failed", "error", "cancelled", "canceled"):
raise RuntimeError(data.get("error") or "生成失败")
time.sleep(3) # 之后每 3 秒一次
else:
raise TimeoutError("轮询超时(15 分钟)")常见错误
| HTTP | 含义 | 处理 |
|---|---|---|
401 | 密钥无效 | 检查 Authorization 头 |
400 | 参数错误 | 检查必填字段(model / prompt / aspect_ratio);seconds 记得填 "1" |
402 / 403 | 余额不足 / 权限受限 | 充值或确认该模型已开通 |
429 | 频率过高 | 降并发、加大间隔 |
500 / 502 / 503 | 服务端异常 | 指数退避重试 |
- 参考字段名别拿错:这套是
reference_image_urls/reference_videos/reference_audios,和 15s 那套的images/videos/audios不通用。 seconds一律填"1":本系列全部固定 15 秒,填真实秒数(如"15")可能报错或被忽略。- 素材必须公网 URL:本地文件先转图床 / 对象存储;参考视频每个 3–10 秒、音频合计 ≤ 15 秒。
- 模型可用列表以控制台为准:别在文档里写死,控制台会随开通情况变化。
Gemini Omni Flash 视频生成 API
| 本页 · Omni Flash | Omni 10s → | |
|---|---|---|
| 模型名 | omni_flash-10s | gemini-omni-10s |
| 提交端点 | /v1/video/generations | /v1/videos(Sora 格式) |
| 特色能力 | 多图融合(3 张)、1080p | 视频编辑(edit)、8 秒档 |
| 计费 | 按任务 | 按次统一价(时长不影响价格) |
模型概览
| 模型 | 时长 | 分辨率 | 宽高比 | 请求体格式 |
|---|---|---|---|---|
omni_flash-10s |
4 / 6 / 10 秒(默认 6) | 720P / 1080p(1080p 仅 16:9) | 16:9(横屏)/ 1:1(方形)/ 9:16(竖屏) | JSON(跟 Seedance 的 multipart 不一样) |
三种用法
| 用法 | image_urls 字段 |
素材类型 |
|---|---|---|
| 文生视频 | 不传或空数组 | — |
| 单图生视频 | 传 1 张 | 图片 URL |
| 多图融合 | 传 3 张 | 图片 URL |
image_urls:
- 必须传已经可公网访问的图片 URL,不能直接传 base64。本地图片请先用图片上传 API 转成 URL 后再放进来。
- 张数严格按 0 / 1 / 3 来:传 2 张或 4 张以上都会被拒绝。
- 本接口不支持视频 URL 作为参考素材,仅支持图片。
参考图怎么准备:图片上传 API
本地图片不能直接传 base64,要先调上传接口换成公网 URL,再放进 image_urls。这个上传接口所有需要图片 URL 的视频/图片模型都通用。
| 项 | 值 |
|---|---|
| 端点 | POST /v1/uploads/images |
| 请求格式 | multipart/form-data,字段 file(图片文件) |
| 支持格式 | JPEG / PNG / WebP / GIF,单文件 ≤ 10MB |
| 返回 | data.url 就是可直接用的公网图片 URL |
curl https://www.tokenstack.cc/v1/uploads/images \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-F 'file=@/path/to/image.jpg'
# 返回 → 取 data.url 放进 image_urls
# { "success": true, "data": { "url": "https://.../xxx.jpg", "mime_type": "image/jpeg", "size": 89234 } }
接口列表
| 接口 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 提交视频任务 | POST | /v1/video/generations |
立即返回任务 id,不阻塞等待 |
| 查询任务状态 | GET | /v1/video/generations/{task_id} |
轮询查询任务进度,完成后返回视频地址 |
Base URL:https://www.tokenstack.cc
鉴权方式:Authorization: Bearer sk-你的TokenStack密钥,标准 OpenAI 兼容格式。
请求格式:application/json。不是 multipart/form-data。
提交视频任务
API 端点
https://www.tokenstack.cc/v1/video/generations
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: application/json(必填)
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
model |
string | 是 | omni_flash-10s |
填 omni_flash-10s(上游模型 gemini_omni_flash,网关已自动映射,你只填 omni_flash-10s 即可) |
prompt |
string | 是 | — | 视频提示词,描述想要的画面、镜头、风格 |
duration |
integer | 否 | 6 |
视频时长(秒)。枚举:4 / 6 / 10 |
aspect_ratio |
string | 否 | 16:9 |
宽高比。枚举:16:9(横屏)/ 1:1(方形)/ 9:16(竖屏) |
resolution |
string | 否 | 720P |
分辨率。枚举:720P / 1080p。1080p 仅在 aspect_ratio=16:9 时生效,9:16 强制 720P。 |
image_urls |
string[] | 否 | — | 参考图 URL 数组。张数严格 0 / 1 / 3(文生 / 单图生 / 图融合)。不接受 base64,必须传图片 URL。 |
client_business_id |
string | 否 | — | 你自己系统的订单号 / 业务 ID。传了之后,可直接用它当查询路径(GET /v1/video/generations/{client_business_id})按业务号查任务,方便对账。 |
请求示例
示例 1:文生视频(不传 image_urls)
curl https://www.tokenstack.cc/v1/video/generations \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "omni_flash-10s",
"prompt": "电影感产品展示,缓慢推镜,光线柔和",
"duration": 4,
"aspect_ratio": "16:9",
"resolution": "1080p"
}'
示例 2:单图生视频(1 张参考图)
curl https://www.tokenstack.cc/v1/video/generations \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "omni_flash-10s",
"prompt": "一支蓝色按压瓶在纯白摄影棚中轻微转动,商业产品视频",
"duration": 6,
"aspect_ratio": "9:16",
"resolution": "720P",
"image_urls": ["https://example.com/reference.jpg"]
}'
示例 3:多图融合(3 张参考图)
curl https://www.tokenstack.cc/v1/video/generations \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "omni_flash-10s",
"prompt": "把三张参考图融合到同一个场景里,自然过渡",
"duration": 10,
"aspect_ratio": "16:9",
"resolution": "1080p",
"image_urls": [
"https://example.com/img1.jpg",
"https://example.com/img2.jpg",
"https://example.com/img3.jpg"
]
}'
提交响应
{
"id": "video_01JZEXAMPLE",
"object": "generation.task",
"model": "omni_flash-10s",
"status": "queued",
"created_at": 1779247407
}
查询任务状态
API 端点
https://www.tokenstack.cc/v1/video/generations/{task_id}
请求示例
curl https://www.tokenstack.cc/v1/video/generations/video_01JZEXAMPLE \ -H "Authorization: Bearer sk-你的TokenStack密钥"
完成响应
{
"id": "video_01JZEXAMPLE",
"object": "generation.task",
"model": "omni_flash-10s",
"status": "completed",
"progress": 100,
"created_at": 1779247407,
"completed_at": 1779247707,
"expires_at": 1779334107,
"result": {
"type": "video",
"data": [
{ "url": "https://img.tokenstack.cc/videos/xxx.mp4", "format": "mp4" }
]
}
}
⚠️ 视频地址在 result.data[0].url(不是顶层 video_url),格式在 result.data[0].format。这是 toapis 系接口的统一结构。
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 任务 ID(与提交时返回的一致) |
object | string | 固定为 generation.task |
model | string | 使用的模型 |
status | string | queued / in_progress / completed / failed |
progress | number | 进度 0–100 |
result.data[0].url | string | 完成后的视频下载地址(取这里) |
result.data[0].format | string | 视频格式,如 mp4 |
created_at / completed_at | number | 提交 / 完成时间戳(秒) |
expires_at | number | 视频 URL 过期时间戳(24 小时后失效) |
client_business_id | string | 提交时传了才返回,回显你的业务号 |
error | object | 失败时返回 { code, message } |
任务状态
| 状态 | 含义 |
|---|---|
queued | 等待队列中 |
in_progress | 生成中 |
completed | 生成完成,可从 video_url 下载视频 |
failed | 生成失败 |
- 异步任务必须轮询:提交后立即返回任务
id,用GET /v1/video/generations/{task_id}轮询。推荐:初始等 5 秒,之后每 10 秒查一次,上限 600 秒;通常 1–5 分钟完成。 - 视频地址在
result.data[0].url:完成响应里取这里,不是顶层video_url。 - 视频 URL 24 小时过期:看到
completed后尽快下载保存,过期需重新生成。expires_at是确切过期时间戳。 image_urls不接受 base64:本地图片先用图片上传 API 转 URL;张数严格 0 / 1 / 3。- 1080p 仅限 16:9:9:16 / 1:1 强制 720P,
resolution字段会被忽略。 - 可按业务号查任务:提交时带
client_business_id,之后用它当查询路径即可对账。 - 常见错误码:
402余额不足 ·422内容违规 ·429请求过频 ·404任务不存在 ·401密钥无效。
Gemini Omni 10s 视频生成 API(Sora 格式)
| 本页 · Omni 10s | Omni Flash → | |
|---|---|---|
| 模型名 | gemini-omni-10s | omni_flash-10s |
| 提交端点 | /v1/videos(Sora 格式) | /v1/video/generations |
| 特色能力 | 视频编辑(edit)、8 秒档 | 多图融合(3 张)、1080p |
| 计费 | 按次统一价(时长不影响价格) | 按任务 |
模型概览
| 模型 | 时长 | 分辨率 | 计费 | 请求体格式 |
|---|---|---|---|---|
gemini-omni-10s |
4 / 6 / 8 / 10 秒可选 | 720p · 宽高比 16:9 / 1:1 / 9:16 | 按次统一价 | JSON(Sora 兼容) |
三种模式
模式(mode) |
用途 | 最小输入 |
|---|---|---|
t2v |
文生视频 | model + prompt |
r2v |
参考图生视频(保持人物 / 商品一致性) | model + prompt + 参考图 |
edit |
视频编辑(改服装颜色、改场景,保留原视频运动) | model + prompt + 原视频(可再加风格参考图) |
接口列表
| 接口 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 提交视频任务 | POST | /v1/videos |
立即返回任务 id,不阻塞等待 |
| 查询任务状态 | GET | /v1/videos/{video_id} |
轮询查询任务进度,完成后返回视频地址 |
| 下载视频文件 | GET | /v1/videos/{video_id}/content |
任务完成后直接拉取视频二进制内容 |
/v1/videos 是 Sora 兼容格式的共用端点(Seedance、Grok Imagine 也走这里),靠 model 字段路由。model 必须填 gemini-omni-10s。注意与 Omni Flash 的 /v1/video/generations 不是同一个端点。
Base URL:https://www.tokenstack.cc
鉴权方式:Authorization: Bearer sk-你的TokenStack密钥,标准 OpenAI 兼容格式。
请求格式:application/json。
提交视频任务
API 端点
https://www.tokenstack.cc/v1/videos
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: application/json(必填)
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 是 | 固定填 gemini-omni-10s |
prompt |
string | 是 | 视频提示词,描述想要的画面、镜头、风格。r2v / edit 模式下也可以放进 content 数组的 text 项 |
mode |
string | 否 | t2v(文生,默认)/ r2v(参考图生)/ edit(视频编辑) |
duration |
integer / string | 否 | 时长(秒):4 / 6 / 8 / 10。也可用 seconds 字段,效果相同。按次计费与时长无关,建议直接填 10 |
size |
string | 否 | 宽高比 / 尺寸。可直接用 aspect_ratio 传 16:9 / 1:1 / 9:16;也兼容像素串 size:1280x720(横屏 16:9)/ 720x1280(竖屏 9:16) |
content |
array | 否 | 多模态内容数组(r2v / edit 模式用),元素类型:text / image_url / video_url,见下方示例 |
image_url 等 |
string / array | 否 | 参考图也兼容平铺字段:image / image_url / images / image_urls / reference_images 都能识别。视频同理:video / video_url / videos |
请求示例
示例 1:文生视频(t2v)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-10s",
"mode": "t2v",
"prompt": "电影感产品展示视频,镜头平稳推进,光线柔和",
"duration": 10,
"size": "1280x720"
}'
示例 2:参考图生视频(r2v)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-10s",
"mode": "r2v",
"content": [
{ "type": "text", "text": "保持商品外观一致,生成一段广告短片" },
{ "type": "image_url", "image_url": { "url": "https://example.com/product.jpg" } }
],
"duration": 10,
"size": "1280x720"
}'
示例 3:视频编辑(edit,改场景但保留运动)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-10s",
"mode": "edit",
"content": [
{ "type": "text", "text": "把服装换成红色,保持原视频的动作和节奏" },
{ "type": "video_url", "video_url": { "url": "https://example.com/input.mp4" } },
{ "type": "image_url", "image_url": { "url": "https://example.com/style.jpg" } }
],
"duration": 10,
"size": "1280x720"
}'
提交响应
{
"id": "video_abc123",
"object": "video",
"model": "gemini-omni-10s",
"status": "queued",
"created_at": 1780000000
}
查询任务状态
API 端点
https://www.tokenstack.cc/v1/videos/{video_id}
请求示例
curl https://www.tokenstack.cc/v1/videos/video_abc123 \ -H "Authorization: Bearer sk-你的TokenStack密钥"
完成响应
{
"id": "video_abc123",
"object": "video",
"model": "gemini-omni-10s",
"status": "completed",
"video_url": "https://img.tokenstack.cc/videos/video_abc123.mp4",
"completed_at": 1780000300
}
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 任务 ID(与提交时返回的一致) |
model | string | 使用的模型 |
status | string | queued / in_progress / completed / failed |
video_url | string | 完成后的视频下载地址 |
completed_at | number | 完成时间戳(秒) |
下载视频文件
除了 video_url,也可以统一通过 content 端点直接拉取视频二进制:
curl https://www.tokenstack.cc/v1/videos/video_abc123/content \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -o output.mp4
- 异步任务必须轮询:提交后立即返回任务
id,务必用GET /v1/videos/{video_id}轮询直到completed或failed。 - 按次计费与时长无关:4 / 6 / 8 / 10 秒一个价,建议
duration直接填 10。 - 模型名必须
gemini-omni-10s:/v1/videos是共用端点,填错会路由到别的模型(Seedance / Grok)。 - 参考素材用 URL:需公网可访问。本地文件先用图片上传 API 转 URL。
- 结果 URL 有有效期:看到
completed后及时下载,或直接走/content端点保存文件。 - 建议轮询间隔 5–15 秒。
Sora 视频生成 API
模型概览
| 模型 | 定位 | 时长 | 分辨率 | 计费 |
|---|---|---|---|---|
sora-2 |
通用版,性价比高 | 4 / 8 / 12 秒 | 1280x720 / 720x1280 |
按秒 |
sora-2-pro |
专业版,画质更高 | 4 / 8 / 12 秒 | 支持更高清档位(如 1792x1024 / 1024x1792) |
按秒(单价高于 sora-2) |
接口列表
| 接口 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 提交视频任务 | POST | /v1/videos |
立即返回任务 id,不阻塞等待 |
| 查询任务状态 | GET | /v1/videos/{video_id} |
轮询查询任务进度,完成后返回视频地址 |
| 下载视频文件 | GET | /v1/videos/{video_id}/content |
任务完成后直接拉取视频二进制内容 |
/v1/videos 是视频模型共用端点(Sora / Grok / Omni 10s / Doubao Seedance 都走这里),靠 model 字段路由。model 填 sora-2 或 sora-2-pro。
Base URL:https://www.tokenstack.cc
鉴权方式:Authorization: Bearer sk-你的TokenStack密钥,标准 OpenAI 兼容格式。
请求格式:application/json。
提交视频任务
API 端点
https://www.tokenstack.cc/v1/videos
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: application/json(必填)
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 是 | sora-2 / sora-2-pro |
prompt |
string | 是 | 视频提示词,描述画面、镜头、运动、风格 |
seconds |
string / integer | 否 | 视频时长(秒):4 / 8 / 12。也可用 duration 别名 |
size |
string | 否 | 1280x720(横屏)/ 720x1280(竖屏);sora-2-pro 还支持 1792x1024 / 1024x1792 高清档 |
input_reference |
object / string | 否 | 参考图,图生视频用:{"image_url": "https://..."}。也兼容平铺 image_url 字段直接传 URL |
response_format |
string | 否 | 建议填 url,完成后返回视频 URL |
请求示例
示例 1:文生视频
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "sora-2",
"prompt": "日出时分的雪山航拍,电影感推镜,光线金黄",
"seconds": "8",
"size": "1280x720",
"response_format": "url"
}'
示例 2:图生视频(input_reference 参考图)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "sora-2",
"prompt": "以参考图为首帧,镜头缓慢推进,自然运动",
"input_reference": { "image_url": "https://example.com/input.jpg" },
"seconds": "8",
"size": "1280x720",
"response_format": "url"
}'
示例 3:sora-2-pro 高清竖屏
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "sora-2-pro",
"prompt": "竖屏时尚大片,模特转身,布料随风飘动",
"seconds": "12",
"size": "1024x1792",
"response_format": "url"
}'
提交响应
{
"id": "video_sora123",
"object": "video",
"model": "sora-2",
"status": "queued",
"created_at": 1780000000
}
查询任务状态
API 端点
https://www.tokenstack.cc/v1/videos/{video_id}
请求示例
curl https://www.tokenstack.cc/v1/videos/video_sora123 \ -H "Authorization: Bearer sk-你的TokenStack密钥"
完成响应
{
"id": "video_sora123",
"object": "video",
"model": "sora-2",
"status": "completed",
"video_url": "https://img.tokenstack.cc/videos/video_sora123.mp4",
"completed_at": 1780000200
}
任务状态
| 状态 | 含义 |
|---|---|
queued | 等待队列中 |
in_progress | 生成中 |
completed | 生成完成,可从 video_url 下载视频 |
failed | 生成失败,error 字段含失败原因 |
下载视频文件
curl https://www.tokenstack.cc/v1/videos/video_sora123/content \ -H "Authorization: Bearer sk-你的TokenStack密钥" \ -o output.mp4
- 异步任务必须轮询:提交后立即返回任务
id,务必轮询直到completed或failed。 - 按秒计费:时长越长越贵,按实际需要选
seconds,不确定先用 4 秒试效果。 - 提示词审核较严:Sora 对真人肖像、名人、版权内容审核严格,涉及会直接
failed,提示词尽量避开。 - 参考图用 URL:需公网可访问。本地文件先用图片上传 API 转 URL。
- 结果 URL 有有效期:看到
completed后及时下载,或直接走/content端点保存文件。 - 建议轮询间隔 5–15 秒。
Grok Imagine 视频生成 API
| 本页 · Grok Imagine | Grok Imagine 15s → | |
|---|---|---|
| 模型名 | grok-imagine-video-1.5-preview | grok-imagine-video-1.5-preview-15s |
| 提交端点 | /v1/videos | /v1/video/generations |
| 用法 | 文生 / 单图生 / 多图生 | 仅图生(必须且只能 1 张图) |
| 特色能力 | — | 重混(Remix)+ 延伸(Extend)、15 秒档 |
/v1/videos 端点(与 Seedance 相同),靠 model 字段路由到不同后端。注意与 Gemini Omni Flash 的 /v1/video/generations 端点不一样。
模型概览
| 模型 | 说明 | 计费 | 请求体格式 |
|---|---|---|---|
grok-imagine-video-1.5-preview |
Grok Imagine 视频生成(当前唯一可用模型,preview 版) | 按秒 | JSON |
三种用法
| 用法 | 参考图字段 | 参考素材数量 |
|---|---|---|
| 文生视频 | 不传 | — |
| 单图生视频 | image(也兼容 image_url / input_reference) |
1 张图片 URL |
| 多图生视频 | reference_images |
图片 URL 数组 |
接口列表
| 接口 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 提交视频任务 | POST | /v1/videos |
立即返回 task_id,不阻塞等待 |
| 查询任务状态 | GET | /v1/videos/{task_id} |
轮询查询任务进度,完成后返回视频地址 |
Base URL:https://www.tokenstack.cc
鉴权方式:Authorization: Bearer sk-你的TokenStack密钥,标准 OpenAI 兼容格式。
请求格式:application/json(跟 Omni 一致,不是 multipart/form-data)。
提交视频任务
API 端点
https://www.tokenstack.cc/v1/videos
请求头
Authorization: Bearer sk-你的TokenStack密钥(必填)Content-Type: application/json(必填)
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
model |
string | 是 | — | 固定填 grok-imagine-video-1.5-preview(当前唯一可用模型) |
prompt |
string | 是 | — | 视频描述提示词 |
aspect_ratio |
string | 否 | — | 画面比例:16:9 / 9:16 / 3:2 / 2:3 / 1:1。也可用 ratio 别名 |
seconds |
integer / string | 否 | — | 视频时长(秒),如 6 / 10。也可用 duration 别名,支持 "6s" 字符串写法 |
resolution |
string | 否 | — | 分辨率,如 720P。也可用 size 别名 |
quality |
string | 否 | — | 画质:standard / high |
image |
string | 否 | — | 单参考图 URL。也兼容 image_url / input_reference 字段名 |
reference_images |
string[] | 否 | — | 多参考图 URL 数组 |
请求示例
示例 1:文生视频
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5-preview",
"prompt": "一只可爱的橘猫在阳光下的草地上追逐蝴蝶",
"aspect_ratio": "16:9",
"seconds": 6
}'
示例 2:单图生视频(传 image)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5-preview",
"prompt": "让这张图片动起来,添加微风吹拂的效果",
"image": "https://example.com/photo.jpg",
"aspect_ratio": "16:9",
"seconds": 10,
"quality": "high"
}'
示例 3:多图生视频(传 reference_images 数组)
curl https://www.tokenstack.cc/v1/videos \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5-preview",
"prompt": "将这些图片合成为一段流畅的视频",
"reference_images": [
"https://example.com/photo1.jpg",
"https://example.com/photo2.jpg",
"https://example.com/photo3.jpg"
],
"aspect_ratio": "16:9",
"seconds": 10,
"resolution": "720P"
}'
提交响应
{
"id": "video_abc123def456...",
"object": "video",
"status": "queued",
"created_at": 1702345678,
"model": "grok-imagine-video-1.5-preview",
"prompt": "一只可爱的橘猫在阳光下的草地上追逐蝴蝶",
"size": "1280x720",
"seconds": "6",
"quality": "standard"
}
查询任务状态
API 端点
https://www.tokenstack.cc/v1/videos/{task_id}
请求示例
curl https://www.tokenstack.cc/v1/videos/video_abc123def456 \ -H "Authorization: Bearer sk-你的TokenStack密钥"
完成响应
{
"id": "video_abc123def456...",
"object": "video",
"status": "completed",
"progress": 100,
"created_at": 1702345678,
"completed_at": 1702345920,
"model": "grok-imagine-video-1.5-preview",
"prompt": "一只可爱的橘猫在阳光下的草地上追逐蝴蝶",
"video_url": "https://img.tokenstack.cc/videos/video_abc123def456.mp4"
}
失败响应
{
"id": "video_abc123def456...",
"object": "video",
"status": "failed",
"error": {
"message": "...",
"type": "..."
}
}
任务状态
| 状态 | 含义 |
|---|---|
queued | 等待队列中 |
in_progress | 生成中 |
completed | 生成完成,可从 video_url 下载视频 |
failed | 生成失败,error 字段含失败原因 |
错误响应(task_id 不存在)
{
"error": {
"message": "Task not found",
"type": "not_found"
}
}
- 端点专用:Grok Imagine 走
/v1/videos,model必须固定填grok-imagine-video-1.5-preview。注意与 Gemini Omni Flash 的/v1/video/generations端点不一样,不要混用。 - 异步任务必须轮询:提交后立即返回
id(task_id),务必用GET /v1/videos/{task_id}轮询。 - 时长写法:
seconds支持6数字或"6s"字符串两种格式,也可用duration别名。 - 多参考图字段是
reference_images:单图用image(或image_url/input_reference)。 - 图片用 URL:需公网可访问。本地文件先用图片上传 API 转 URL。
- 建议轮询间隔 5-15 秒:避免高频请求触发限流。
Grok Imagine 15s 视频生成 API
| 本页 · Grok Imagine 15s | Grok Imagine → | |
|---|---|---|
| 模型名 | grok-imagine-video-1.5-preview-15s | grok-imagine-video-1.5-preview |
| 提交端点 | /v1/video/generations | /v1/videos |
| 用法 | 仅图生(必须且只能 1 张图) | 文生 / 单图生 / 多图生 |
| 时长 | 10 / 15 秒 | 如 6 / 10 秒 |
| 特色能力 | 重混(Remix)+ 延伸(Extend) | — |
模型概览
| 模型 | 用法 | 时长 | 宽高比 | 计费 |
|---|---|---|---|---|
grok-imagine-video-1.5-preview-15s |
图生视频(1 张参考图) | 10 / 15 秒 |
16:9 / 9:16 / 3:2 / 2:3 / 1:1 |
按次(15 秒档单价略高) |
接口列表
| 接口 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 提交视频任务 | POST | /v1/video/generations |
传 1 张参考图生成视频 |
| 视频重混(Remix) | POST | /v1/videos/{video_id}/remix |
基于已生成的视频二次创作(改内容) |
| 视频延伸(Extend) | POST | /v1/videos/{video_id}/extend |
把已生成的视频继续往后延长 |
| 查询任务状态 | GET | /v1/video/generations/{task_id} |
轮询查询任务进度,完成后返回视频地址 |
/v1/video/generations(与 Omni Flash 相同),靠 model 字段路由。注意与另一个 Grok Imagine 的 /v1/videos 端点不一样,不要混用。
Base URL:https://www.tokenstack.cc
鉴权方式:Authorization: Bearer sk-你的TokenStack密钥,标准 OpenAI 兼容格式。
请求格式:application/json。
提交视频任务
API 端点
https://www.tokenstack.cc/v1/video/generations
请求参数
请求体格式:application/json
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
model |
string | 是 | — | 固定填 grok-imagine-video-1.5-preview-15s |
prompt |
string | 是 | — | 视频描述提示词(镜头、运动、氛围) |
images |
string[] | 是 | — | 参考图 URL 数组,必须且只能 1 个。仅支持公网 http(s) URL,不接受 base64(本地图先用图片上传 API 转 URL) |
seconds |
string | 否 | "10" |
视频时长:"10" / "15"(字符串) |
aspect_ratio |
string | 否 | 16:9 |
16:9 / 9:16 / 3:2 / 2:3 / 1:1 |
client_business_id |
string | 否 | — | 你自己系统的订单号 / 业务 ID。传了之后可用它当查询路径按业务号查任务,方便对账。 |
请求示例
curl https://www.tokenstack.cc/v1/video/generations \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5-preview-15s",
"prompt": "将这张产品图生成电影感商业视频,轻微镜头推进",
"images": ["https://example.com/product.jpg"],
"seconds": "15",
"aspect_ratio": "16:9"
}'
提交响应
{
"id": "video_abc123def456",
"object": "generation.task",
"model": "grok-imagine-video-1.5-preview-15s",
"status": "queued",
"progress": 0,
"created_at": 1781234567
}
视频重混(Remix)与延伸(Extend)
视频重混(Remix)
把原视频任务 ID 放进 URL 路径,用新提示词描述要怎么改:
curl https://www.tokenstack.cc/v1/videos/video_abc123def456/remix \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5-preview-15s",
"prompt": "在场景中添加一只小狗",
"aspect_ratio": "16:9"
}'
视频延伸(Extend)
同样用原视频任务 ID,提示词描述视频接下来怎么发展(不需要指定延长秒数):
curl https://www.tokenstack.cc/v1/videos/video_abc123def456/extend \
-H "Authorization: Bearer sk-你的TokenStack密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5-preview-15s",
"prompt": "继续延伸这个场景,镜头缓缓拉远"
}'
响应
Remix 和 Extend 都返回一个新的任务 id(原视频不受影响),用它走查询接口轮询新视频:
{
"id": "video_remix_xyz789",
"object": "generation.task",
"model": "grok-imagine-video-1.5-preview-15s",
"status": "queued",
"progress": 0,
"created_at": 1781234890
}
video_id用任务 ID,不是视频 URL:就是提交生成时返回的那个id(如video_abc123def456)。- Remix / Extend 会产生新任务、单独计费,原视频保留不变。
- 只能基于本模型生成的视频做重混和延伸,别的模型生成的任务 ID 不通用。
查询任务状态
API 端点
https://www.tokenstack.cc/v1/video/generations/{task_id}
请求示例
curl https://www.tokenstack.cc/v1/video/generations/video_abc123def456 \ -H "Authorization: Bearer sk-你的TokenStack密钥"
完成响应
{
"id": "video_abc123def456",
"object": "generation.task",
"model": "grok-imagine-video-1.5-preview-15s",
"status": "completed",
"progress": 100,
"created_at": 1781234567,
"completed_at": 1781234867,
"expires_at": 1781321267,
"result": {
"type": "video",
"data": [
{ "url": "https://img.tokenstack.cc/videos/xxx.mp4", "format": "mp4" }
]
}
}
⚠️ 视频地址在 result.data[0].url(不是顶层 video_url),格式在 result.data[0].format。这是 toapis 系接口的统一结构。
任务状态
| 状态 | 含义 |
|---|---|
queued | 等待队列中 |
in_progress | 生成中(progress 0-100) |
completed | 生成完成,从 result.data[0].url 下载视频 |
failed | 生成失败,error 字段含原因 |
- 异步任务必须轮询:提交后立即返回任务
id,轮询直到completed或failed。推荐初始等 5 秒、之后每 10 秒查一次、上限 600 秒,通常 1–5 分钟完成。 - 视频地址在
result.data[0].url:不是顶层video_url。 - 视频 URL 24 小时过期:看到
completed后尽快下载保存,expires_at是确切过期时间戳。 - 仅图生视频:不传
images或传多张都会被拒绝,必须正好 1 张;本地图先用图片上传 API 转 URL。 - 按次计费:10 秒和 15 秒两档单价,15 秒略贵。Remix / Extend 单独计次。
- 可按业务号查任务:提交时带
client_business_id,之后用它当查询路径即可对账。 - 常见错误码:
402余额不足 ·422内容违规 ·429请求过频 ·404任务不存在 ·401密钥无效。
注意事项
-
模型名称
请到 www.tokenstack.cc 后台复制完整的模型名称,拼写错误会导致请求失败。 -
Base URL 区别(最常见的坑)
工具 Base URL Claude Code、OpenClaw(Anthropic API) https://www.tokenstack.cc(不带 /v1)Cursor、Windsurf、Cline、ChatBox、LobeChat、Obsidian 等 https://www.tokenstack.cc/v1(带 /v1) -
安全建议
建议使用环境变量存储 API Key,避免将密钥明文提交到代码仓库。 -
备份配置
修改任何配置文件前,建议先备份原文件,以便出问题时恢复。