#产品概览
HCAI 当前是一套统一的大模型调用与计费网关,项目主干能力覆盖用户认证、API Key 管理、充值支付、余额查询、用量统计、模型调用以及管理员后台控制。对外接口由 /api/v1、/v1 和 /admin 三组路由承载,能力边界与现网状态以项目 README 和实际路由注册为准。
对外接入可以分成两条主路径:一条是用户先通过控制台或 /api/v1 完成注册、登录、充值和 API Key 创建;另一条是客户端、脚本或 AI 工具直接使用 OpenAI 兼容的 /v1/models 与 /v1/chat/completions 发起调用。这样既保留了控制台的用户与计费闭环,也兼容已有 OpenAI 生态的接入方式。
/api/v1/auth、/api/v1/keys、/api/v1/payments、/api/v1/balance、/api/v1/usage、/api/v1/models、/api/v1/mediaOpenAI 兼容接口:
/v1/models、/v1/chat/completions公共模型与价格展示:
/api/v1/public/models
适用人群
已有 OpenAI SDK 或工具链的团队
如果你已经在用 OpenAI SDK、curl 脚本或支持 OpenAI 协议的 IDE/终端工具,HCAI 当前开放的 /v1/models 和 /v1/chat/completions 可以直接承接这类接入,只需要替换 base URL 与 API Key。
需要账号、充值和密钥管理的业务方
如果你的团队需要先完成注册登录、充值下单、余额管理,再发放 API Key 给应用使用,当前的 /api/v1/auth、/api/v1/payments、/api/v1/keys 和 /api/v1/balance 路由已经覆盖这条闭环。
需要核对调用成本的运营或财务场景
如果你更关注每次调用的成本、余额变化和阶段性汇总,当前系统已经提供 /api/v1/usage/logs、/api/v1/usage/statistics、/api/v1/usage/summary 以及余额日志查询接口,适合做成本核对和用户对账。
需要统一维护模型与价格的后台运营
如果你的重点是统一维护模型、运行时价格和订单处理,当前管理员路由已经提供模型列表、价格更新、订单确认与退款等后台能力,适合平台化运营和人工介入处理。
核心能力
用户认证与控制台
注册、登录、找回密码和用户资料接口都挂在 /api/v1/auth 与 /api/v1/user 下,前端控制台围绕这些接口完成用户态操作。
API Key 生命周期管理
当前平台支持创建、查询、轮换和停用 API Key,模型调用前的 OpenAI 兼容鉴权由 /v1 路由组上的 API Key 中间件统一处理。
充值、余额与订单流转
充值订单创建、订单查询、支付方式获取和支付回调都已经接入,用户侧还可以查询余额和余额流水,因此支付到账与消费扣减是同一条平台内链路。
模型调用与用量追踪
用户态模型调用使用 /api/v1/models,开放生态接入使用 /v1;调用完成后会通过计费服务写入 usage 和 balance 相关流水,供后续统计与对账使用。
当前能力边界
#快速开始
HCAI 当前可执行的接入路径是“注册与登录 - 充值 - 创建 API Key - 发起第一次 /v1 调用”。其中用户准备动作使用 /api/v1 路由组完成,真正的模型调用使用 OpenAI 兼容的 /v1 路由组完成,两类凭证分别是登录 token 和 API Key。
/api/v1;模型列表和模型调用使用 Bearer API Key 访问 /v1。这两类凭证在当前路由实现里由不同中间件校验,不能混用。
注册与登录
注册接口是 /api/v1/auth/register,当前服务端实际校验 username、password、email 三个字段,其中密码至少 8 位;登录接口是 /api/v1/auth/login,使用用户名和密码登录,成功后返回 token 以及用户基础信息。
提交注册信息
如果你走 API 方式接入,先向 /api/v1/auth/register 提交用户名、邮箱和密码。当前注册逻辑已经包含邮箱格式校验和密码强度校验,因此文档中的注册字段应以这三个必填项为准。
登录并拿到用户 token
注册完成后调用 /api/v1/auth/login 登录。登录成功返回的 token 用于访问后续的用户态接口,例如充值下单、创建 API Key、查看余额和查看订单。
确认当前用户态入口
登录后,用户资料、API Key、支付、余额和用量都在 /api/v1 这一组路由里完成;如果你使用网页控制台,本质上也是在调用同一组接口。
curl https://你的域名/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "demo-user",
"email": "demo@example.com",
"password": "StrongPass123!"
}'
curl https://你的域名/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "demo-user",
"password": "StrongPass123!"
}'
充值与创建 API Key
创建支付订单前,可以先通过 /api/v1/payments/methods 查看当前支付方式;正式下单使用 /api/v1/payments/orders,服务端实际要求 amount 和 payment_method。充值到账后,再通过 /api/v1/keys 创建 API Key,当前服务端统一生成 normal 类型密钥并返回完整 key 值。
确认支付方式并发起充值
先查看 /api/v1/payments/methods 返回的支付方式,再向 /api/v1/payments/orders 提交充值金额和支付方式。订单创建成功后,平台会返回订单号、支付链接和支付表单信息。
检查余额是否可用
支付成功后,可以通过 /api/v1/balance/users/:user_id/balance 查询余额。后续模型调用如果走预授权结算链路,平台会以这里的余额作为预扣和最终结算基础。
创建并保存 API Key
向 /api/v1/keys 发起创建请求后,响应中会返回新的 api_key。这个 key 用于访问 /v1/models 和 /v1/chat/completions,建议立即保存到环境变量或密钥管理系统中。
curl https://你的域名/api/v1/keys \
-H "Authorization: Bearer <login-token>" \
-H "Content-Type: application/json" \
-d '{}'
/api/v1 与 /v1,不要把登录 token 直接用于模型调用。
第一次调用
第一次正式调用前,建议先请求 /v1/models 确认可用模型,再使用新生成的 API Key 调用 /v1/chat/completions。如果你需要展示模型价格,可以额外读取公开的 /api/v1/public/models,但真正的模型执行入口仍然是 /v1。
curl https://你的域名/v1/models \
-H "Authorization: Bearer sk-xxx"
确认模型存在后,再发送第一条对话请求:
curl https://你的域名/v1/chat/completions \
-H "Authorization: Bearer sk-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-turbo",
"messages": [
{"role": "user", "content": "你好,请介绍一下你自己"}
]
}'
如果调用成功,你将收到类似以下的 JSON 响应:
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"model": "qwen-turbo",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!我是 HCAI 平台的 AI 助手..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 28,
"total_tokens": 40
}
}
在当前实现里,非流式和流式请求都会在成功后按 usage 进入计费链路;如果接口返回了 usage,平台会据此做最终结算并写入用量与余额流水。因此第一次调用除了要看响应内容,也建议同步关注余额与使用统计页面是否正常更新。
#模型与价格
HCAI 当前的模型清单、分类、最大上下文、缓存开关和价格字段都来自服务端运行配置,并通过模型列表接口对外输出。面向公开文档、价格展示和控制台说明时,应优先参考 /api/v1/public/models 或 /api/v1/models 返回的数据,而不能只看 OpenAI 兼容的 /v1/models,因为后者只返回模型 ID 列表。
/api/v1/public/models,无需登录,可直接用于官网价格表用户态完整列表:
/api/v1/models,需要登录 token,返回完整模型与价格字段OpenAI 兼容列表:
/v1/models,使用 API Key,只返回模型 ID 列表
模型列表与价格字段
当前模型列表接口会同时返回 display_name、category、vendor、context_length、supports_cache、price_unit,以及文本模型使用的 input_price_per_million、output_price_per_million 和部分模型的 tiers。文本模型按“元/M tokens”展示;图片模型按张,视频模型按秒。
Chat 与通用对话
chat 类模型是当前配置中的主体,覆盖常规问答、长上下文、国内外主流模型映射以及兼容版本,适合大多数文本生成场景。
Reasoning 与推理
reasoning 类模型用于强化推理场景,但并不是所有推理模型都单独配置了思考模式差异价格,因此文档不能把“thinking 价格”写成所有推理模型的统一能力。
Vision / Coding / Multimodal
当前配置里还包含 vision、coding 和 multimodal 分类,所以“模型与价格”章节既要覆盖纯文本模型,也要覆盖视觉、编码和多模态模型的价格展示口径。
缓存支持按模型开启
supports_cache 是逐模型开关。是否支持缓存、是否有阶梯价格、是否有思考价格,都以单个模型配置和接口返回字段为准,而不是按模型大类统一推断。
统一价格与阶梯价格
没有 tiers 的模型按统一价格结算;配置了 tiers 的模型,会按请求命中的上下文档位选择对应价格。文本模型继续使用输入/输出 token 价格;媒体模型不按 token 计费,图片按张、视频按秒,其中视频模型在价格表里的两列分别对应 720P 和 1080P 档位,详细口径以 /api/v1/media/pricing 为准。
| 模型 | 上下文区间 | 输入价格 | 输出价格 | 最大上下文 |
|---|---|---|---|---|
| 加载定价表... | ||||
思考模式价格
模型列表接口会同时暴露普通价格字段和 thinking_* 价格字段。实际计费时,服务端会在请求显式声明思考模式或上游 usage 显示存在 reasoning 时优先选择 thinking 价格;如果某个模型没有配置 thinking 价格字段,则仍按普通输入/输出价格计费。
当前文档应如何描述 thinking 价格
qwen-turbo 当前已配置思考模式价格
输入 0.3 / 输出 3.0
缓存支持与折扣
缓存折扣只对 supports_cache=true 且上游 usage 返回了可计费缓存明细的模型生效。服务端会根据 usage 中的 cached_tokens 和 cache_creation_input_tokens 对缓存模式进行归一化,客户端声明与上游 usage 不一致时,最终以服务端归一化结果结算。
隐式缓存 8 折
系统自动检测重复的上下文前缀并进行缓存,命中的输入 token 按 80% 计费(即 20% 折扣)。无需额外配置,自动生效。
显式缓存 - 命中 9 折
主动创建缓存后,命中的缓存输入 token 按 90% 计费(即 10% 折扣)。适合固定 system prompt 或知识库前缀等场景。
显式缓存 - 创建 1.25 倍
首次创建显式缓存时,输入 token 按 125% 计费。额外 25% 为缓存创建费用,后续命中缓存即可享受折扣,长周期使用更省钱。
缓存策略选择
如果你的 system prompt 固定且调用频繁,建议使用显式缓存;如果上下文变化较大,隐式缓存已足够。两种缓存不会叠加,同一 token 只享受一种折扣,不支持缓存的模型则不会进入这条计费路径。
计费示例
假设你使用 qwen3-max 模型,发送一次请求:输入 5000 token,输出 1500 token,上下文总长度 6500 token(≤32K 区间)。
标准调用计费
隐式缓存命中 3000 token 的计费
#接入客户端
这一章只讨论“外部客户端如何调用 HCAI”。按照当前路由注册和鉴权实现,面向 SDK、脚本、CLI 和第三方工具的主协议边界是 /v1 路由组,也就是 /v1/models、/v1/chat/completions 和当前作为别名存在的 /v1/completions。用户注册、充值、创建 API Key、查看公开价格等控制台能力不属于本章接入范围。
https://你的域名/v1主调用接口:
POST /v1/chat/completions模型列表:
GET /v1/models兼容别名:
POST /v1/completions,当前只是 chat handler 的别名,文档示例仍建议优先使用 /v1/chat/completions认证方式:
Authorization: Bearer sk-xxx 或 X-API-Key: sk-xxxKey 要求:必须是已启用且已绑定有效用户的 API Key
/api/v1/models 是登录态用户接口,不是外部 SDK 的默认入口;/api/v1/public/models 主要用于官网或公开价格展示;/api/v1/models/chat/stream 是登录态辅助入口。对外部客户端来说,优先始终使用 /v1 这一组接口。
Python OpenAI SDK
Python OpenAI SDK 是当前最贴合现有接口边界的接入方式之一。只要把 base_url 指向你的 HCAI 域名下的 /v1,并使用通过控制台创建的 API Key,即可直接调用模型列表和对话接口。
pip install openai
from openai import OpenAI
client = OpenAI(
api_key="sk-xxx",
base_url="https://你的域名/v1",
)
# 先看模型 ID 列表。这里返回的是 OpenAI 风格的 id/object/owned_by,
# 不是官网价格页使用的完整价格字段。
models = client.models.list()
print(models)
response = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role": "system", "content": "你是一个有帮助的AI助手。"},
{"role": "user", "content": "请解释什么是大语言模型"},
],
temperature=0.7,
max_tokens=1024,
)
print(response.choices[0].message.content)
print(f"Token 用量: {response.usage}")
如果你需要流式输出,继续使用同一个 /v1/chat/completions 接口,并在请求体里设置 stream=True 即可,不需要切到 /api/v1/models/chat/stream。
Node.js OpenAI SDK
Node.js 侧的接入边界与 Python 完全一致:模型列表和对话都走 /v1,认证使用 API Key,而不是登录 token。
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-xxx",
baseURL: "https://你的域名/v1",
});
const models = await client.models.list();
console.log(models.data.map((item) => item.id));
const response = await client.chat.completions.create({
model: "qwen3-max",
messages: [
{ role: "system", content: "你是一个有帮助的AI助手。" },
{ role: "user", content: "请解释什么是大语言模型" },
],
temperature: 0.7,
max_tokens: 1024,
});
console.log(response.choices[0].message.content);
console.log("Token 用量:", response.usage);
当前 /v1/completions 虽然存在,但服务端实现上只是 Chat handler 的别名,因此文档示例仍建议统一写成 chat.completions 形式,避免让客户端误以为平台完整支持传统 completions 独立语义。
curl
curl 适合直接验证 API Key、模型名和网络连通性。建议的顺序是先请求 /v1/models,再用同一个 API Key 发起 /v1/chat/completions。
curl https://你的域名/v1/models \
-H "Authorization: Bearer sk-xxx"
curl https://你的域名/v1/chat/completions \
-H "Authorization: Bearer sk-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max",
"messages": [
{"role": "system", "content": "你是一个有帮助的AI助手。"},
{"role": "user", "content": "请解释什么是大语言模型"}
],
"temperature": 0.7,
"max_tokens": 1024
}'
curl https://你的域名/v1/chat/completions \
-H "X-API-Key: sk-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-turbo",
"messages": [
{"role": "user", "content": "你好"}
]
}'
DashScope SDK (Python)
这一项需要谨慎写。当前平台对外明确注册的客户端协议边界是 OpenAI 兼容的 /v1 路由,而不是单独对外暴露 DashScope 原生协议路由。因此 DashScope SDK 不应作为与 OpenAI SDK 同等级的一等接入方式来描述。
pip install dashscope
/v1/chat/completions 的请求。若版本不支持或行为不稳定,直接回到 OpenAI SDK 是当前最稳妥的接入方式。
#AI工具接入
HCAI 兼容 OpenAI API 协议,可以轻松接入各类 IDE 和编码工具,提升开发效率。以下是主流编码工具的接入方式。
OpenCode 接入
OpenCode 是一款开源的终端 AI 编码助手,通过配置环境变量即可接入 HCAI。
安装方式
先按 OpenCode 官方发布页或官方仓库完成 CLI 安装,并确认终端中可以直接执行 opencode。Windows、macOS 和 Linux 的安装命令可能不同,建议优先使用官方稳定版安装方式。
环境变量配置
# 配置环境变量
export OPENAI_API_KEY=your-hcai-api-key
export OPENAI_BASE_URL=https://hc-ai.cn/v1
# 启动 OpenCode
opencode
启动示例
在 OpenCode 配置中,将模型设置为 HCAI 支持的任意模型,如 qwen3-max 或 deepseek-r1。
/v1/models 核对模型名称,再在 OpenCode 中填写目标模型,避免因为模型名不一致导致启动后首个请求失败。
OpenClaw 接入
OpenClaw 是一款 AI 驱动的编码工具,通过 OpenAI 兼容接口接入 HCAI。
安装方式
先按 OpenClaw 官方文档完成 CLI 安装,并确保本地终端可以直接执行 openclaw。由于不同版本的安装入口和参数可能变化,安装命令应以 OpenClaw 官方说明为准。
环境变量配置
# 配置 API endpoint
export OPENAI_API_KEY=your-hcai-api-key
export OPENAI_BASE_URL=https://hc-ai.cn/v1
# 启动 OpenClaw
openclaw --model qwen3-max
启动示例
OpenClaw 当前文档示例通过 --model 显式指定模型。实际接入时,建议把模型名和 HCAI 的模型列表接口保持一致,避免工具默认值和平台可用模型不一致。
Claude Code 接入
Claude Code 是 Anthropic 推出的终端 AI 编码助手,可通过环境变量配置接入 HCAI。
安装方式
先按 Anthropic 官方文档完成 Claude Code CLI 安装,并确认终端中可以直接执行 claude。Claude Code 的安装方式和登录流程由 Anthropic 官方维护,本文不重复复制其安装命令。
环境变量配置
# 通过 ANTHROPIC_API_KEY 和自定义 base URL 接入
# 设置环境变量
export ANTHROPIC_API_KEY=your-hcai-api-key
export ANTHROPIC_BASE_URL=https://hc-ai.cn/v1
# 启动 Claude Code
claude
启动示例
Hermes 接入
Hermes 是一款轻量级 AI 编码助手,支持通过 OpenAI 兼容接口接入 HCAI。
安装方式
先按 Hermes 官方发布页完成 CLI 安装,并确认本地终端可以直接执行 hermes。如果官方同时提供多种安装渠道,优先选择与你当前系统和团队环境一致的官方稳定版。
环境变量配置
# 配置 Hermes 使用 HCAI endpoint
export OPENAI_API_KEY=your-hcai-api-key
export OPENAI_BASE_URL=https://hc-ai.cn/v1
# 启动 Hermes
hermes chat --model qwen3-max
启动示例
Hermes 当前示例使用 hermes chat --model qwen3-max 启动。接入前建议先确认本地已经成功安装 CLI,再检查环境变量和模型名是否与 HCAI 返回结果一致。
#进阶用法
当前公开接口里,能够明确按源码验证的进阶能力主要包括:基于 stream=true 的流式输出、部分模型返回的 reasoning 内容、以及缓存计费明细的识别与统计。本章只保留这些已经有现成 handler、请求结构或计费逻辑支撑的能力,不把尚未作为公开协议稳定承诺的字段或路由写进正式文档。
model、messages、stream、temperature、max_tokens 作为明确接收并长期承诺的字段。tools、tool_choice、stream_options、top_k、seed 以及独立的 /v1/caches 路由,当前都不应写成现网默认开放能力。
Python 流式调用
Python OpenAI SDK 可以直接对接 /v1/chat/completions 的流式输出能力。当前建议只传最小必要字段,避免把未明确支持的扩展参数写入正式接入文档。
from openai import OpenAI
client = OpenAI(
api_key="sk-xxx",
base_url="https://你的域名/v1",
)
stream = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role": "system", "content": "你是一个有帮助的AI助手。"},
{"role": "user", "content": "请写一首关于春天的短诗"},
],
stream=True,
temperature=0.7,
max_tokens=1024,
)
for chunk in stream:
delta = chunk.choices[0].delta if chunk.choices else None
if delta and delta.content:
print(delta.content, end="", flush=True)
print()
当前流式响应里是否携带完整 usage,需要以上游实际回包为准。平台内部在计费时已经对“流式成功但 usage 缺失”的情况做了本地估算兜底,所以文档不再把 stream_options.include_usage 写成默认开放参数。
Node.js 流式调用
Node.js 侧同样只建议围绕 /v1/chat/completions 的流式能力组织示例。下面保留错误处理和重试思路,但去掉未明确承诺的扩展参数。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-xxx",
baseURL: "https://你的域名/v1",
});
async function streamChat() {
try {
const stream = await client.chat.completions.create({
model: "qwen3-max",
messages: [
{ role: "system", content: "你是一个有帮助的AI助手。" },
{ role: "user", content: "请详细解释 JavaScript 的 Promise 机制" },
],
stream: true,
temperature: 0.7,
max_tokens: 2048,
});
let fullContent = "";
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta;
if (delta?.content) {
process.stdout.write(delta.content);
fullContent += delta.content;
}
}
return fullContent;
} catch (error) {
if (error.status === 401) {
console.error("认证失败:请检查 API Key 是否正确");
} else if (error.status === 429) {
console.error("请求频率过高:请稍后重试");
} else if (error.status >= 500) {
console.error("服务端错误:请稍后重试");
} else {
console.error("请求失败:", error.message);
}
throw error;
}
}
// 带重试的流式调用
async function streamChatWithRetry(maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
return await streamChat();
} catch (error) {
if (attempt === maxRetries) throw error;
const delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);
console.log(`第 ${attempt} 次重试,等待 ${delay}ms...`);
await new Promise((resolve) => setTimeout(resolve, delay));
}
}
}
streamChatWithRetry();
curl 参数边界示例
当前公开文档建议把 curl 示例限制在当前 handler 明确接收的字段上,也就是 model、messages、stream、temperature 和 max_tokens。像 tools、tool_choice、top_k、seed 这类字段,不再写成现网默认支持参数。
curl https://你的域名/v1/chat/completions \
-H "Authorization: Bearer sk-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max",
"messages": [
{
"role": "system",
"content": "你是一个专业的技术顾问,擅长用简洁的语言解释复杂概念。"
},
{
"role": "user",
"content": "什么是微服务架构?它有哪些优缺点?"
}
],
"temperature": 0.7,
"max_tokens": 2048,
"stream": false
}'
流式输出 curl 示例
curl https://你的域名/v1/chat/completions \
-H "Authorization: Bearer sk-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max",
"messages": [
{"role": "user", "content": "请写一段关于人工智能的短文"}
],
"stream": true,
"temperature": 0.8,
"max_tokens": 1024
}'
缓存计费观察
当前源码可以明确确认的平台能力是“缓存计费识别与统计”,而不是公开暴露独立缓存管理路由。也就是说,平台会识别上游 usage 里的缓存 token 明细,并结合请求头中的 X-Cache-Mode 进行计费归一化,但文档不再把 /v1/caches 写成当前公开可用的标准接口。
curl https://你的域名/v1/chat/completions \
-H "Authorization: Bearer sk-xxx" \
-H "X-Cache-Mode: implicit" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max",
"messages": [
{"role": "system", "content": "这里放重复使用的长 system prompt 或知识库前缀"},
{"role": "user", "content": "请总结以上内容的重点"}
],
"temperature": 0.7,
"max_tokens": 1024
}'
supports_cache=true;二是上游回包 usage 里返回了可计费的缓存明细,例如 cached_tokens 或 cache_creation_input_tokens。只有同时满足这些条件,请求才会按 8 折、9 折或 1.25 倍规则进入对应结算逻辑。
/v1/caches 创建接口,因此本文档不再提供“显式缓存创建 API”示例。如果后续平台正式开放缓存管理路由,应单独补文档并以真实路由为准。
#媒体接口
HCAI 的视频生成能力走用户态 /api/v1/media 路由组,不走 /v1/chat/completions。这条链路使用登录后的 Bearer token 认证,提交视频任务后先拿到 task_id,再轮询任务状态直到任务成功或失败。
POST /api/v1/media/videos/generate 提交视频任务2.
GET /api/v1/media/tasks/:taskId 轮询状态与结果3. 任务完成后读取
output.video_url 或 output.results[0].url
认证与流程
媒体接口和 OpenAI 兼容文本接口使用不同凭证。文本调用依赖 sk-xxx API Key,而视频生成、素材上传、模型列表、定价与费用预估都在 /api/v1/media 下,统一要求登录 token。不要把 API Key 直接拿去调用视频接口。
先登录拿到 token
使用 /api/v1/auth/login 获取登录 token。后续对 /api/v1/media 的所有请求都在请求头里带上 Authorization: Bearer <login-token>。
提交视频生成任务
最常见的是文生视频:传入 model、input.prompt 和 parameters.duration/resolution 即可。图生视频可以额外传 input.image_url,参考生视频可在 input.media 里传 reference_image 或 reference_video。
轮询 task 状态
视频接口是异步任务。提交成功后响应中会返回 task_id,然后轮询 /api/v1/media/tasks/:taskId,直到 task_status 进入 SUCCEEDED、FAILED 或 CANCELED。
提交视频生成任务
以下示例演示最常见的文生视频调用。若你需要图生视频,可在 input 中加上 image_url;如果是参考生视频或视频编辑场景,则补充 input.media 或其他模型要求的附加字段。
curl https://你的域名/api/v1/media/videos/generate \
-H "Authorization: Bearer <login-token>" \
-H "Content-Type: application/json" \
-d '{
"model": "wan2.7-t2v",
"input": {
"prompt": "一只橘猫在清晨的海边奔跑,电影感镜头,风吹起毛发"
},
"parameters": {
"duration": 5,
"resolution": "720P"
}
}'
const token = '你的登录 token';
const payload = {
model: 'wan2.7-t2v',
input: {
prompt: '城市夜景中穿梭的无人机镜头,霓虹灯,节奏感强'
},
parameters: {
duration: 5,
resolution: '720P'
}
};
const response = await fetch(window.location.origin + '/api/v1/media/videos/generate', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
const result = await response.json();
console.log(result.output.task_id);
任务轮询与结果读取
提交任务成功后,接口会立即返回预估费用与任务编号。轮询时建议把 model、resolution 与 duration 一并带上,和平台当前的计费链路保持一致。任务成功后可以直接读取视频链接并展示或下载。
curl "https://你的域名/api/v1/media/tasks/task-xxx?model=wan2.7-t2v&resolution=720P&duration=5" \
-H "Authorization: Bearer <login-token>"
/api/v1/media/upload 把素材上传成平台可访问的 URL,再把该 URL 填进 input.image_url、input.video_url 或 input.media。
#API 在线调试
在此可以直接测试两类接口:OpenAI 兼容文本调用,以及用户态视频任务调用。文本测试走 /v1/chat/completions,视频测试走 /api/v1/media/videos/generate 与 /api/v1/media/tasks/:taskId。
Chat Completions 测试
就绪视频生成任务测试
就绪
仅填提示词即可验证文生视频;填入 image_url 可验证图生视频;若要验证参考生视频,可在高级 JSON 中传入 reference_image / reference_video 列表。