Dawncoreai API 文档
快速接入视频生成服务,支持图生视频、首尾帧生视频、多参考生视频等多种模式
接口域名
以下接口基于统一的域名(Domain)提供服务
接口域名
-
认证方式
所有开放接口均通过请求头 (Headers)
x-api-key 进行调用方鉴权。调用时请替换为实际分配的密钥。x-api-key: 94bfafb6-xxx-xxxxx-xxxxx-xxxxxx
通用响应格式
所有接口统一返回如下结构:
code 为业务状态码,message 为提示信息,data 为具体业务数据。{
"code": 200,
"message": "success",
"data": { ... }
}
接口列表
查询人物开白任务状态
GET/api/open/getWhiteAssetStatus
根据开白任务 ID 查询当前处理状态。
请求头 (Headers)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| x-api-key | string | 必填 | 调用方密钥 |
查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| asset_id | string | 必填 | 开白任务 ID |
响应示例
{
"code": 200,
"message": "success",
"data": {
"asset_id": "asset-20260627180944-gzncg",
"status": "Active"
}
}
发起人物开白任务
POST/api/open/createWhiteAsset
提交一张图片 URL,发起人物开白(数字人授权)任务。
请求头 (Headers)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| x-api-key | string | 必填 | 调用方密钥 |
请求体
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 必填 | 图片 URL |
{
"url": "https://dawncoreai-dev.tos-cn-beijing.volces.com/uploads/1/2026/05/06/b56ba980-2f5a-4c1e-8dc6-98f8fa9efd16.jpeg"
}
响应示例
{
"code": 200,
"message": "success",
"data": {
"asset_id": "asset-20260627180944-gzncg"
}
}
发起生视频任务
POST/api/open/generate2Video
根据模型与素材内容生成视频,支持图生视频、首尾帧生视频、多参考生视频等多种模式。
请求头 (Headers)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| x-api-key | string | 必填 | 调用方密钥 |
请求体参数
| 参数 | 类型 | 必填 | |
|---|---|---|---|
| model | string | 必填 | |
| content | array | 必填 | 内容素材数组,元素见下表 |
| content_sign | string | 已废弃 | 无需传入:服务端按 content 元素 role 组合自动推导(first_frame + last_frame → firstAndLastFrame2Video,含 reference_* → reference2Video,其余 → image2Video),传入也会被忽略 |
| generate_audio | boolean | 必填 | 是否生成声音:true / false |
| ratio | string | 必填 | |
| resolution | string | 必填 | |
| duration | integer | 必填 | |
| watermark | boolean | 必填 | 是否添加水印:true / false |
content 元素结构
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 必填 | text / image_url / video_url / audio_url |
| url | string | 必填 | |
| role | string | 必填 | |
| text | string | 可选 | 提示词(type=text 时使用) |
请求示例(首尾帧生视频)
请求示例(首帧生视频)
请求示例(多模态参考-参考图片,使用 asset:// 素材 ID)
请求示例(多模态参考-参考视频)
请求示例(多模态参考-参考音频,需配合参考图片或参考视频)
请求示例(Seedance2.5 仅音频生视频)
请求示例(Seedance2.5 视频编辑)
响应示例
{
"code": 200,
"message": "success",
"data": {
"task_id": "dg-20260627184538-7zsnz"
}
}
发起生图任务
POST/api/open/generate2Image
根据模型与提示词生成图片,支持参考图输入。
请求头 (Headers)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| x-api-key | string | 必填 | 调用方密钥 |
请求体参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 必填 | 模型名称:Nano Banana / Nano Banana Pro / Nano Banana 2 / Nano Banana 2 lite |
| prompt | string | 条件必填 | 生成图片的提示词,未传参考图时必填 |
| negative_prompt | string | 可选 | 反向提示词,阻止模型生成相关内容 |
| image_urls | array | 可选 | 参考图 URL 列表 |
| ratio | string | 可选 | 图片宽高比,如 16:9、1:1 等 |
| resolution | string | 可选 | 图片分辨率:512P、1K、2K、4K,默认 1K |
| enhance_prompt | boolean | 可选 | 是否自动优化提示词 |
请求示例
{
"model": "Nano Banana",
"prompt": "一只在花园中的猫",
"negative_prompt": "模糊",
"image_urls": ["https://example.com/reference.jpg"],
"ratio": "1:1",
"resolution": "1K",
"enhance_prompt": true
}
响应示例
{
"code": 200,
"message": "success",
"data": {
"task_id": "dg-20260908094925-adbf5"
}
}
查询生视频/生图任务状态
GET/api/open/getTask
根据生视频/生图任务 ID 查询生成进度与结果。
请求头 (Headers)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| x-api-key | string | 必填 | 调用方密钥 |
查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| task_id | string | 必填 | 视频/图片任务 ID |
响应示例 (视频)
{
"code": 200,
"message": "success",
"data": {
"usage": {
"completion_tokens": 216900,
"total_tokens": 216900,
"total_cost": 0.7020
},
"task_id": "dg-20260627184538-7zsnz",
"error": null,
"content": {
"video_url": "https://xxx.com/..."
},
"status": "succeeded"
}
}
响应示例 (图片)
{
"code": 200,
"message": "success",
"data": {
"usage": {
"image_count": 1,
"completion_tokens": 0,
"total_tokens": 1,
"total_cost": 1.1200
},
"task_id": "dg-20260908094925-adbf5",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://xxx.com/local-upload/19/2026/09/08/xxx.jpg"
}
}
],
"status": "succeeded"
}
}
注意:视频/图片 URL 有效期为 24 小时,请及时下载或转存。
查询团队可用模型 新
GET/api/open/getTeamModels
根据当前密钥查询所属团队已启用的模型列表及各模型的并发上限。
请求头 (Headers)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| x-api-key | string | 必填 | 调用方密钥 |
响应参数
| 参数 | 类型 | 说明 |
|---|---|---|
| data[].model | string | 模型名称,用于生图/生视频接口的 model 参数 |
| data[].model_concurrency_limit | integer | 模型并发上限,0 表示不限制 |
响应示例
{
"code": 200,
"message": "success",
"data": [
{ "model": "Nano Banana", "model_concurrency_limit": 0 },
{ "model": "Nano Banana Pro", "model_concurrency_limit": 2 },
{ "model": "Seedance2.0", "model_concurrency_limit": 5 }
]
}
OpenAI 兼容接口
SDK 初始化
BASEhttps://mp.dawncoreai.com/v1
使用 OpenAI 官方 Node.js SDK 接入:把 baseURL 指向本站 /v1,apiKey 填写团队 x-api-key,即可直接调用下列接口。本章示例均为 Node.js 写法(基于 openai v7.x,要求 Node.js 22 及以上),其他语言 SDK 请求字段一致,仅语法不同。
支持端点
| 端点 | 说明 |
|---|---|
| GET /v1/models | 列出团队可用模型 |
| POST /v1/chat/completions | 创建对话补全,支持流式与非流式 |
| POST /v1/images/generations | 生成图片,同步返回图片 URL |
| POST /v1/videos | 创建视频生成任务 |
| GET /v1/videos/{video_id} | 查询视频任务,完成时返回下载地址 |
初始化示例(Node.js)
// Node.js 示例,ESM 写法;CommonJS 项目请改用:const OpenAI = require('openai');
import OpenAI from 'openai';
const openai = new OpenAI({
// 填团队 x-api-key(前台「我的密钥」获取),不是 OpenAI 平台的 sk-xxx
apiKey: '94bfafb6-xxx-xxxxx-xxxxx-xxxxxx',
baseURL: 'https://mp.dawncoreai.com/v1',
timeout: 5 * 60 * 1000, // 生图为同步等待,放宽客户端超时
maxRetries: 0 // 关闭自动重试,避免超时后重复提交、重复扣费
});
鉴权说明
SDK 会自动通过 Authorization 头以 Bearer 方式携带 apiKey,服务端剥掉 Bearer 前缀后作为 x-api-key 校验;同时也兼容直接传 x-api-key 请求头。密钥无效或已禁用返回 401。
对话补全按 token 用量计费(输入/输出/缓存命中分价),流式与非流式计费口径一致,详见对话补全章节。
列出团队可用模型
GET/v1/models
返回当前密钥所属团队已启用的模型名称列表,可用于确认 model 参数可以填哪些值。
SDK 调用
const models = await openai.models.list(); console.log(models.data.map(m => m.id));
响应参数
| 参数 | 类型 | 说明 |
|---|---|---|
| object | string | 固定为 list |
| data[].id | string | 模型名称,可作为生图/生视频的 model 参数 |
| data[].object | string | 固定为 model |
| data[].created | integer | Unix 时间戳(秒);本站模型未维护创建时间,此处取当前时间 |
| data[].owned_by | string | 固定为 proxysys |
响应示例
{
"object": "list",
"data": [
{ "id": "Nano Banana", "object": "model", "created": 1757472000, "owned_by": "proxysys" },
{ "id": "Seedance2.0", "object": "model", "created": 1757472000, "owned_by": "proxysys" }
]
}
创建对话补全 新
POST/v1/chat/completions
OpenAI Chat Completions 兼容接口:传入对话消息,同步返回模型回复;支持流式(SSE)逐段输出。按 token 用量计费(输入 / 输出 / 缓存命中分价)。
请求体参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 必填 | 模型名称,取值见 /v1/models(需为对话类型模型,如 DeepSeek-V4.1-Flash) |
| messages | array | 必填 | 对话消息数组,元素含 role(system / user / assistant)与 content(string 或多模态数组) |
| stream | boolean | 可选 | 是否流式返回,默认 false;流式以 SSE(text/event-stream)逐段推送增量内容,末尾发送 data: [DONE] |
| stream_options | object | 可选 | 流式参数,如 {"include_usage": true} 使末尾 chunk 携带 token 用量;服务端流式请求时默认注入,无需手动传 |
| temperature / top_p / max_tokens 等 | number | 可选 | 采样与生成控制参数,原样透传上游,具体支持项以所选模型为准 |
SDK 调用
// 非流式:一次返回完整回复
const res = await openai.chat.completions.create({
model: 'DeepSeek-V4.1-Flash',
messages: [
{ role: 'system', content: '你是一个乐于助人的AI助手。' },
{ role: 'user', content: '用一句话介绍你自己' }
],
temperature: 0.7,
max_tokens: 1024
});
console.log(res.choices[0].message.content);
console.log(res.usage.total_tokens);
// 流式:逐段输出(DeepSeek 思维链在 delta.reasoning_content)
const stream = await openai.chat.completions.create({
model: 'DeepSeek-V4.1-Flash',
messages: [{ role: 'user', content: '写一首关于秋天的短诗' }],
stream: true
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta ?? {};
if (delta.reasoning_content) process.stdout.write(delta.reasoning_content);
if (delta.content) process.stdout.write(delta.content);
}
响应示例(非流式)
{
"id": "dg-20260924231030-a1b2c3",
"object": "chat.completion",
"created": 1758748230,
"model": "DeepSeek-V4.1-Flash",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "你好!我是……" },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 36,
"completion_tokens": 188,
"total_tokens": 224,
"prompt_tokens_details": { "cached_tokens": 0 },
"completion_tokens_details": { "reasoning_tokens": 111 }
}
}
计费说明
费用 = (输入token - 缓存命中token) × 输入单价 + 缓存命中token × 缓存单价 + 输出token × 输出单价(输出含思维链 reasoning_tokens)。DeepSeek-V4.1-Flash 分高峰/空闲时段计价,单价以「模型价格」页为准,流式与非流式计费口径一致。
生成图片
POST/v1/images/generations
创建生图任务并同步等待,出图后直接返回图片 URL,无需自行轮询。
请求体参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 必填 | 模型名称,取值见 /v1/models |
| prompt | string | 条件必填 | 提示词,未传参考图时必填 |
| size | string | 可选 | 图片尺寸,如 1024x1024,服务端自动换算为宽高比 1:1 |
| image | string / array | 可选 | 参考图地址,支持单个字符串或字符串数组 |
| input_reference | string / array | 可选 | 参考图地址,作用同 image |
| image_urls | array | 可选 | 扩展字段:参考图 URL 列表,优先级高于 image 与 input_reference |
| ratio | string | 可选 | 扩展字段:宽高比,如 16:9、1:1,优先于 size 推导 |
| resolution | string | 可选 | 扩展字段:图片分辨率 512P / 1K / 2K / 4K,默认 1K |
| negative_prompt | string | 可选 | 扩展字段:反向提示词 |
| enhance_prompt | boolean | 可选 | 扩展字段:是否自动优化提示词 |
参数 n 与 response_format 暂不生效:当前仅返回图片 URL,不支持 b64_json。
SDK 调用
const res = await openai.images.generate({
model: 'Nano Banana',
prompt: '一只戴着宇航员头盔的柴犬,赛博朋克风格,高清细节',
size: '1024x1024',
resolution: '2K',
negative_prompt: '模糊, 低质量',
enhance_prompt: true
});
console.log(res.created);
console.log(res.data[0].url);
响应示例
{
"created": 1757472000,
"data": [
{ "url": "https://xxx.com/local-upload/19/2026-09-08/xxx.jpg" }
]
}
超时说明
服务端内部轮询直到出图或失败,默认最长等待 180 秒(配置项 openai.image.poll-timeout-ms,轮询间隔 openai.image.poll-interval-ms 默认 2 秒)。若超时将返回 504,错误信息附带 task_id,可改用 /api/open/getTask 继续查询结果。
创建视频任务
POST/v1/videos
创建视频生成任务并立即返回任务对象(status 为 queued),需轮询查询接口获取结果。
请求体参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 必填 | 模型名称,取值见 /v1/models |
| prompt | string | 条件必填 | 提示词;未传 content 时由服务端自动组装为文本素材,与 content 至少需要提供一个 |
| input_reference | string / array | 可选 | 参考图地址,未传 content 时参与自动组装素材 |
| seconds | string / integer | 可选 | 视频时长(秒),映射为扩展字段 duration |
| size | string | 可选 | 视频尺寸,如 1280x720,服务端自动换算为宽高比 16:9 |
| content | array | 可选 | 扩展字段:原生内容素材数组,传则优先级最高,元素结构见上文发起生视频 |
| content_sign | string | 已废弃 | 无需传入:服务端按 content 元素 role 组合自动推导,传入也会被忽略 |
| ratio / resolution / duration | string / integer | 可选 | 扩展字段:宽高比、分辨率、时长(秒),与原生接口含义一致;ratio 优先于 size,duration 优先于 seconds |
| generate_audio / watermark | boolean | 可选 | 扩展字段:是否生成声音、是否添加水印 |
SDK 调用
const created = await openai.videos.create({
model: 'Seedance2.0',
prompt: '镜头缓慢推进,人物微笑挥手,光影自然流动',
input_reference: ['https://xxx.com/first-frame.jpeg'],
seconds: '4',
size: '1280x720',
resolution: '720p',
generate_audio: true,
watermark: false
});
console.log(created.id, created.status);
响应示例
{
"id": "dg-20260908094925-adbf5",
"object": "video",
"model": "Seedance2.0",
"status": "queued",
"created_at": 1757472000,
"progress": 0,
"seconds": "4",
"size": "1280x720"
}
查询视频任务
GET/v1/videos/{video_id}
按任务 ID 查询生成进度,完成时返回视频下载地址。建议每 5 秒轮询一次。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| video_id | string | 必填 | 创建时返回的 id(即本站 task_id) |
状态映射
| 任务状态 | 说明 |
|---|---|
| queued | 排队中,progress 为 0 |
| in_progress | 生成中(对应 submitted / running / processing),progress 为 50 |
| completed | 已完成(对应 succeeded),返回 download_url,progress 为 100 |
| failed | 已失败,error.message 为失败原因,progress 为 100 |
SDK 调用
async function waitForVideo(id) {
let video = await openai.videos.retrieve(id);
while (video.status === 'queued' || video.status === 'in_progress') {
await new Promise(r => setTimeout(r, 5000));
video = await openai.videos.retrieve(id);
}
return video;
}
const video = await waitForVideo(created.id);
if (video.status === 'completed') {
console.log('视频下载地址:', video.download_url);
console.log('用量/费用:', JSON.stringify(video.usage));
}
响应示例
{
"id": "dg-20260908094925-adbf5",
"object": "video",
"status": "completed",
"progress": 100,
"download_url": "https://xxx.com/xxx.mp4",
"error": null,
"usage": {
"completion_tokens": 216900,
"total_tokens": 216900,
"total_cost": 0.7020
}
}
补充说明
download_url 与 usage 是本站在 OpenAI Video 对象上附加的字段:SDK 的 TypeScript 类型未声明,但运行时可正常读取(video.download_url)。usage 用于对账,非 OpenAI 标准字段。视频 URL 有效期为 24 小时,请及时下载或转存。
错误格式
所有失败响应均遵循 OpenAI 错误结构,并通过 HTTP 状态码表达语义。
错误响应示例
{
"error": {
"message": "model 不能为空",
"type": "invalid_request_error",
"param": null,
"code": "400"
}
}
状态码对照
| HTTP 状态码 | error.type | 常见场景 |
|---|---|---|
| 401 | authentication_error | 缺少 API Key、x-api-key 无效、密钥已禁用 |
| 403 | authentication_error | 团队已禁用 |
| 400 | invalid_request_error | 参数校验失败、上游任务返回失败 |
| 504 | server_error | 生图同步等待超时,message 附带 task_id |
| 500 | server_error | 服务内部异常 |
异常捕获示例
try {
const res = await openai.images.generate({ model: 'Nano Banana', prompt: '一只猫' });
console.log(res.data[0].url);
} catch (err) {
// OpenAI SDK 会将非 2xx 响应抛为 APIError,err.status 为 HTTP 状态码,err.error 为上述错误体
console.error('HTTP', err.status, JSON.stringify(err.error));
}