CogVideoX-2
CogVideoX-2 视频生成模型,强化大幅运动与画面稳定性。
cogvideox-2快速开始#
- 创建 API Key
在控制台 我的 Key 创建通用 API Key(明文只显示一次),并确认账户余额充足。
- 设置环境变量
export TOKENTOSEA_API_KEY="sk-relay_…",示例从环境变量读取密钥。 - 发送请求
以下为 视频生成 · JSON 示例;其他接口见全部调用示例。
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl https://api.tokentosea.com/v1/videos \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "cogvideox-2",
"prompt": "A red cube slowly rotates on a white table. Steady camera.",
"duration": 5,
"quality": "speed",
"size": "1280x720",
"fps": 30,
"with_audio": false
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "cogvideox-2",
"prompt": "A red cube slowly rotates on a white table. Steady camera.",
"duration": 5,
"quality": "speed",
"size": "1280x720",
"fps": 30,
"with_audio": False,
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
try:
response = requests.post(
f"{API_BASE}/v1/videos",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
timeout=1300,
)
print(response.status_code, response.headers.get("X-Request-Id"))
show(response.json())
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
show(result)
# output.data[].url 是短期有效(≤300 秒)的 COS 下载链接;过期后用 asset_id 重新获取:
# requests.get(f"{API_BASE}/v1/assets/{asset_id}/download-url", headers=AUTH, timeout=30).json()// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'cogvideox-2',
prompt: 'A red cube slowly rotates on a white table. Steady camera.',
duration: 5,
quality: 'speed',
size: '1280x720',
fps: 30,
with_audio: false,
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
try {
const response = await fetch(`${API_BASE}/v1/videos`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
show(await response.json());
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
show(result);
// output.data[].url 是短期有效(≤300 秒)的 COS 下载链接;过期后用 asset_id 重新获取:
// await fetch(`${API_BASE}/v1/assets/${assetId}/download-url`, { headers: auth }).then(r => r.json());能力与接口#
视频生成
下表只列出已在该型号上完成验收的接口、响应方式与输入类型;其他组合会返回 422(如 endpoint_not_verified、response_mode_not_verified、input_modality_not_verified)。
| 接口 | JSON | SSE 流式 | WebSocket | 已验证输入 |
|---|---|---|---|---|
视频生成/v1/videos | 支持 | 不支持 | 不支持 | — |
/v1/videos 为异步任务:提交后返回 HTTP 202 与结果信封,使用同一个 Idempotency-Key 通过 GET /v1/results/{key} 查询,完成后从结果中的下载链接取回文件。详见异步任务与结果。
价格#
官方价格以人民币(CNY)公布,核对日期 2026-10-19。TokenToSea 按官方价格计费、不加价;调用从账户余额(美元)扣除,人民币价格按请求受理时冻结的汇率换算为美元,金额保留 6 位小数并向上取整。
| 计费项 | 单价 | 计量单位 |
|---|---|---|
| 请求 | ¥0.5 | 每次 |
每次请求先按可能的最高用量预留金额,完成后按供应商返回的实际用量结算并退回差额。计费方式详见计费与结算。
官方价格来源
限制#
本页暂未收录此型号的上下文窗口与最大输出长度,请以厂商文档为准;以下为平台规则。
响应方式:JSON。
- 同一账户最多同时进行 8 个已预留或执行中的调用(平台规则)。
- JSON 请求体不超过 48 MB;multipart 上传仅 1 个
file,不超过 25 MB。 - 结果保留 31 天;生成的文件保留 30 天,结果中的下载链接有效期不超过 300 秒,过期后重新查询或通过
/v1/assets/{asset_id}/download-url获取。
全部调用示例#
每个示例都包含 cURL、Python 与 Node.js 三种写法,发送完全相同的请求体,并用同一个 Idempotency-Key 查询结果。
视频生成 · JSON#
POST /v1/videos 接口参考
export TOKENTOSEA_API_KEY="你的主站通用 API Key"
REQUEST_KEY="$(uuidgen)"
curl https://api.tokentosea.com/v1/videos \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "cogvideox-2",
"prompt": "A red cube slowly rotates on a white table. Steady camera.",
"duration": 5,
"quality": "speed",
"size": "1280x720",
"fps": 30,
"with_audio": false
}'
# 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
curl "https://api.tokentosea.com/v1/results/$REQUEST_KEY" \
-H "Authorization: Bearer $TOKENTOSEA_API_KEY"
# 返回 asset_id 后,获取短期有效的 COS 下载链接。
# curl "https://api.tokentosea.com/v1/assets/ASSET_ID/download-url" \
# -H "Authorization: Bearer $TOKENTOSEA_API_KEY"# pip install requests
# export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import json
import os
import time
import uuid
import requests
API_BASE = "https://api.tokentosea.com"
API_KEY = os.environ["TOKENTOSEA_API_KEY"] # 控制台「我的 Key」创建的通用 API Key
REQUEST_KEY = str(uuid.uuid4()) # Idempotency-Key:重试或查询结果时复用同一个值
AUTH = {"Authorization": f"Bearer {API_KEY}"}
PENDING = {"planned", "sending", "streaming", "upstream_pending", "billing", "archiving"}
payload = {
"model": "cogvideox-2",
"prompt": "A red cube slowly rotates on a white table. Steady camera.",
"duration": 5,
"quality": "speed",
"size": "1280x720",
"fps": 30,
"with_audio": False,
}
def show(data):
print(json.dumps(data, ensure_ascii=False, indent=2))
def wait_for_result():
"""查询原请求;异步任务未结束时稍后继续查询,不要重复提交。"""
while True:
result = requests.get(f"{API_BASE}/v1/results/{REQUEST_KEY}", headers=AUTH, timeout=30).json()
if result.get("status") not in PENDING:
return result
time.sleep(5)
try:
response = requests.post(
f"{API_BASE}/v1/videos",
headers={**AUTH, "Idempotency-Key": REQUEST_KEY},
json=payload,
timeout=1300,
)
print(response.status_code, response.headers.get("X-Request-Id"))
show(response.json())
except requests.RequestException as error:
# 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
print("\n请求中断:", error)
result = wait_for_result()
show(result)
# output.data[].url 是短期有效(≤300 秒)的 COS 下载链接;过期后用 asset_id 重新获取:
# requests.get(f"{API_BASE}/v1/assets/{asset_id}/download-url", headers=AUTH, timeout=30).json()// Node.js 18+,无需额外依赖。保存为 example.mjs 后运行:node example.mjs
// export TOKENTOSEA_API_KEY="你的主站通用 API Key"
import { randomUUID } from 'node:crypto';
const API_BASE = 'https://api.tokentosea.com';
const API_KEY = process.env.TOKENTOSEA_API_KEY; // 控制台「我的 Key」创建的通用 API Key
const REQUEST_KEY = randomUUID(); // Idempotency-Key:重试或查询结果时复用同一个值
const auth = { Authorization: `Bearer ${API_KEY}` };
const PENDING = new Set(['planned', 'sending', 'streaming', 'upstream_pending', 'billing', 'archiving']);
const payload = {
model: 'cogvideox-2',
prompt: 'A red cube slowly rotates on a white table. Steady camera.',
duration: 5,
quality: 'speed',
size: '1280x720',
fps: 30,
with_audio: false,
};
const show = data => console.log(JSON.stringify(data, null, 2));
// 查询原请求;异步任务未结束时稍后继续查询,不要重复提交。
async function waitForResult() {
for (;;) {
const result = await fetch(`${API_BASE}/v1/results/${REQUEST_KEY}`, { headers: auth }).then(r => r.json());
if (!PENDING.has(result.status)) return result;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
try {
const response = await fetch(`${API_BASE}/v1/videos`, {
method: 'POST',
headers: { ...auth, 'Idempotency-Key': REQUEST_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
console.log(response.status, response.headers.get('x-request-id'));
show(await response.json());
} catch (error) {
// 连接中断时请求可能已被受理:用同一个 REQUEST_KEY 查询结果,不要重新提交。
console.error('\n请求中断:', error.message);
}
const result = await waitForResult();
show(result);
// output.data[].url 是短期有效(≤300 秒)的 COS 下载链接;过期后用 asset_id 重新获取:
// await fetch(`${API_BASE}/v1/assets/${assetId}/download-url`, { headers: auth }).then(r => r.json());相关文档#
在控制台测试#
登录后可在 模型测试 页面直接调用 cogvideox-2,查看返回结果、token 用量与实际扣费。网页调用同样从账户余额扣费。