Files
NianAIGC/docs/API.md
T
2026-10-02 19:56:32 +08:00

15 KiB
Raw Blame History

智念AIGC平台开放 API 对接说明

本文面向服务端对接方。所有开放接口位于 /api/v1,使用 API Key 鉴权;浏览器后台的 SSO 登录不会影响这些服务端接口。

OpenAPI JSON:

GET /api/v1/openapi.json

鉴权

支持两种方式,任选一种:

Authorization: Bearer <API_KEY>

或:

X-Zhinian-Api-Key: <API_KEY>

服务端配置示例:

ZHINIAN_API_KEYS=partner-a:key-a,partner-b:key-b

冒号前是账号 ID(兼容字段名 clientId),冒号后是 API Key。任务和资产会按账号 ID 写入独立数据分区,后端 owner 形如 api:partner-a。

任务生命周期

创建任务后不会同步生成结果,而是进入任务队列:

queued -> running -> succeeded
                  -> failed
                  -> expired
                  -> cancelled

Go API 内嵌 WorkerLoop,生产和 Docker Compose 都由 zhinian-go-api 进程负责领取、提交、轮询和结算任务;不再运行独立 Node Worker 服务。

创建任务

curl -X POST https://你的域名/api/v1/jobs \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: demo-job-001" \
  -d '{
    "capability": "image.generate",
    "prompt": "生成一张专业产品主图",
    "width": 1440,
    "height": 2560,
    "webhookUrl": "https://example.com/zhinian/webhook"
  }'

响应:

{
  "job": {
    "id": "job_xxx",
    "capability": "image.generate",
    "status": "queued",
    "outputAssetIds": []
  },
  "reused": false
}

新建任务返回 202;如果命中相同 Idempotency-Key 的已创建任务,返回 200 且 reused: true。

支持的 capability

capability 说明
image.generate 图片生成
video.generate Seedance、百炼、MiniMax 视频生成

计费说明

开放 API 仍按 API Key 和账号分区运行。当前未绑定组织的开放 API 任务保持兼容,不从组织钱包扣费;平台浏览器用户的真实图片/视频任务会按超级管理员配置的服务商标准单价、计费单位和上浮倍率,从所属组织余额冻结。普通用户余额不足时不会提交服务商并返回余额不足错误;超级管理员仍保存计算费用,但不检查、冻结或扣减组织额度,也不产生钱包扣费、退款流水。计费规则与最终金额会随任务保存,任务失败、取消或过期后由 Worker 在最终终态退款;Seedance 成功后按 usage.completion_tokens 多退少补,缺少该字段时保留冻结金额。MiniMax H3 按实际输出秒数及输入图片数结算;Wan 3.0 按 usage.output_video_duration 的实际时长结算(无视频输入时可回退 usage.duration),缺少有效用量时保留预扣并标记为估算。

组织余额当前只能由超级管理员通过 /billing 的“余额与上账”直接入账。所有充值和人工余额调整都只记入组织账本,不存在个人上账归属;组织管理员和员工共同使用组织额度。未来接入支付时,支付成功回调应使用同一幂等上账逻辑自动入账,不产生待审核申请。余额不足时,平台会拒绝创建真实计费任务并返回错误;未配置真实服务商凭据时也不会生成占位结果。

创作页通过 GET /api/billing/balance 展示当前组织的可用余额。接口仅接受平台会话认证,从服务端刷新后的会话确定组织,忽略客户端组织参数,返回 organization 和 wallet,不加载账本或价格目录,并设置 Cache-Control: no-store。未绑定组织返回 422。页面支持手动刷新,并在提交任务、任务计费状态变化、重新切回页面及可见状态下每 30 秒刷新;超级管理员显示“超管不计额度”。余额提示供用户参考,实际扣费及余额校验仍由服务端执行。

生成失败原因统一由 Go 后端处理,覆盖 Seedance、Seedream、百炼、MiniMax、EvoLink 和即梦视觉服务。job.error.message 返回中文原因和处理建议;已知错误码优先于 HTTP 状态,未识别的明确拒绝显示通用说明,不能臆测为真人审核或余额不足。提交失败不自动重新提交;网络中断、无效响应等无法确认服务商是否收到请求时保留防重复提交提示。已知服务商任务的临时查询错误可以继续查询,始终保留 providerTaskId。

平台超级管理员和组织管理员可在任务详情展开“错误详情”,查看 responsePayload.providerError 中实际存在的 phase、status、code、requestId 和经过脱敏、限长的 detail。普通用户及公开 API 不返回该诊断对象;失败任务的原始响应也不会向他们返回,成功任务的结果、用量和图层数据不受影响。新失败任务只持久化安全诊断,不保存原始失败响应。旧任务若已经丢失具体错误码,不能据此恢复原因,需要查询当时的服务日志。

首次加载超管计费中心或提交真实任务时会自动补齐内置标准成本目录,默认倍率为 1.2×,已有同服务商/能力/模型/变体规则会同步平台维护的标准成本与参数档案,但保留已配置倍率。视频规则按分辨率匹配 resolution=480p|720p|1080p|4k;参数化规则按服务下的参数维度选择档位,标准成本为基础成本乘以各档位系数,组合倍率取所选档位中的最高倍率;最终金额使用整数分并向上取整。EvoLink 默认按固定 1 USD = 7.20 CNY 换算,并列出质量、分辨率、画面比例和参考图数量档位;即梦 4.6 使用公开资源包折算值作为平台维护的参考标准,实时价格以火山控制台为准。超级管理员只调整倍率,标准成本和参数档案不通过后台修改。

后台统一调整倍率

超级管理员可在「计费中心 → 价格与计费」的价格目录顶部点击「统一调整倍率」,一次将当前目录所有模型、所有参数档位设为同一倍率。此次保存会覆盖已有的单独倍率;保存后仍可在各档位点击「调整倍率」继续修改,刷新目录后会保留这些设置。统一设置是一次批量修改,不会作为额外的倍率叠加到后续报价中;组合报价仍取命中档位的最高倍率。

后台会话接口(要求已登录的超级管理员,不能使用开放 API Key):

PATCH /api/admin/billing/prices
Content-Type: application/json

{"ruleIds":["base-evolink-gpt-image-2.5-flare","base-evolink-gpt-image-2.5-sunburst"],"markupMultiplier":1.5}

ruleIds 必须显式提供 1–1000 个不重复的规则 ID,倍率范围为 1–1000,保存到小数点后四位。接口一次更新所选规则的基础倍率及所有参数档位倍率(包含停用档位),标准成本和启用状态保持原值;任一 ID 不存在时整体失败,不会部分更新。成功返回 {"priceRules":[...]}。页面的全目录操作会传入当前目录的全部规则 ID;后续单独调整继续使用 PATCH /api/admin/billing/prices/{id}。

查询任务

查询单个任务:

curl -H "Authorization: Bearer <API_KEY>" \
  https://你的域名/api/v1/jobs/job_xxx

查询任务列表:

curl -H "Authorization: Bearer <API_KEY>" \
  "https://你的域名/api/v1/jobs?status=succeeded&limit=20"

可用筛选:

  • status:queued、running、succeeded、failed、expired、cancelled
  • capability:见上表
  • limit:1 到 200
  • before:ISO 时间,用于翻页

取消任务:

curl -X POST \
  -H "Authorization: Bearer <API_KEY>" \
  https://你的域名/api/v1/jobs/job_xxx/cancel

仅排队中或运行中的任务会被置为 cancelled;已进入终态的任务会原样返回。

获取输出资产

任务成功后,job.outputAssetIds 会包含输出资产 ID。

查询资产:

curl -H "Authorization: Bearer <API_KEY>" \
  https://你的域名/api/v1/assets/asset_xxx

下载资产:

curl -L \
  -H "Authorization: Bearer <API_KEY>" \
  -o result.png \
  https://你的域名/api/v1/assets/asset_xxx/download

也可以查询当前 API client 可访问的资产列表:

curl -H "Authorization: Bearer <API_KEY>" \
  https://你的域名/api/v1/assets

上传或注册素材

上传文件:

curl -X POST https://你的域名/api/v1/assets \
  -H "Authorization: Bearer <API_KEY>" \
  -F "files=@./reference.png"

注册外部 URL:

curl -X POST https://你的域名/api/v1/assets \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/reference.png",
    "name": "reference.png",
    "kind": "image"
  }'

返回的资产 ID 可放入后续任务的 inputAssetIds,资产 URL 可放入 inputUrls 或 imageUrls。

图片任务示例

图片生成:

{
  "capability": "image.generate",
  "prompt": "参考 @图片1 的风格,生成 9:16 旅游海报",
  "imageUrls": ["https://example.com/reference.png"],
  "width": 1440,
  "height": 2560,
  "scale": 50,
  "quality": "medium",
  "force_single": true
}

图片生成参数会按当前引擎生效:即梦使用 scale 控制文本影响,EvoLink 使用 quality 控制生成质量。

EvoLink 支持按任务选择 Image 2 / Image 2.5,共用已有 EVOLINK_API_KEY:

{
  "capability": "image.generate",
  "engine": "evolink",
  "model": "gpt-image-2.5-flare",
  "prompt": "生成一张极简风格的咖啡海报",
  "width": 1024,
  "height": 1024,
  "quality": "medium",
  "force_single": true
}

model 可选 gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst,也可使用管理员配置的 EVOLINK_IMAGE_MODEL;省略时仍使用该配置默认值。model 仅在 engine=evolink 的图片任务中生效,未知模型或跨引擎模型会被拒绝。报价与提交使用同一模型,任务 reqKey 保存实际模型;模板通过 settings.model 保存选择。

Image 2.5 当前开放 low / medium / high 三档质量、1K、单张输出和最多 16 张参考图。支持常规画幅与 A4(848×1200 或 1200×848);不开放 auto 尺寸、2K/4K、xhigh/max、批量出图或蒙版编辑。宽高预设用于选择比例,实际输出采用 1K 预算。

Flare 与 Sunburst 各有独立价格规则。按固定汇率 7.2,1K 基础输出标准成本为 low ¥0.04、medium ¥0.09、high ¥0.35/张;默认 1.2× 后分别为 ¥0.05、¥0.11、¥0.42/张。规则在首次报价或加载计费目录时自动补齐,无需数据库结构迁移。此价格沿用平台输出费用估算方式,参考图和提示词输入费用未单独加收;上游按实际 token 用量结算,平台估算价不等于上游账单。价格来源:Flare、Sunburst,核对日期 2026-09-23。

视频任务示例

{
  "capability": "video.generate",
  "engine": "bailian",
  "model": "wan3.0-video",
  "prompt": "以图1的商品为主体,采用图2的场景,生成一条品牌短视频",
  "settings": {
    "inputMode": "reference",
    "ratio": "9:16",
    "duration": 5,
    "resolution": "720p"
  },
  "materials": [
    {
      "type": "image",
      "url": "https://example.com/product.png",
      "label": "@图片1"
    },
    {
      "type": "image",
      "url": "https://example.com/scene.png",
      "label": "@图片2"
    }
  ]
}

视频模型和素材限制:

engine / model 素材模式 输入限制 时长 / 分辨率
seedance / doubao-seedance-2-0-260128 reference 最多 9 图、3 视频、3 音频;音频须搭配图片或视频 4–15 秒或 -1 自动;480p/720p/1080p
seedance / doubao-seedance-2-5-260628 reference 最多 30 图、10 视频、10 音频,合计 50 个 4–30 秒或 -1 自动;480p/720p/1080p
bailian / wan2.7-i2v-2026-04-25 frames 1–2 张图片,依次为首帧、尾帧 2–15 秒;720p/1080p
bailian / wan3.0-video reference 或 frames 参考模式最多 10 张图片,可不传图;首尾帧模式 1–2 张图片 2–30 秒;480p/720p/1080p
minimax / MiniMax-H3 reference 或 frames 参考模式最多 9 张图片;首帧模式最多 1 张图片;不传图为文生视频 4–15 秒;768P/2K

settings.inputMode 省略时,旧百炼及 MiniMax 请求继续使用 frames,Wan 3.0 和 Seedance 使用 reference。model 按引擎校验,不能跨服务商混用。模型、模式和素材顺序保存在任务请求中,报价与提交使用同一份参数。

ratio 支持 16:9、4:3、1:1、3:4、9:16、21:9、adaptive;Wan 2.7 由输入图片确定画幅。MiniMax 首帧模式有图时使用 adaptive,多图参考可选择画幅,但文生视频不接受 adaptive。参考模式不会将第一张图固定为视频开头;首尾帧和多图参考不能在同一次请求中混用。

Wan 3.0 本次仅开放文字和图片输入,不接受视频、音频或文档。图片须为 JPG/PNG/BMP/WEBP、单张不超过 20 MB、宽高均为 240–8000 像素,PNG 不可透明;MiniMax 图片须为 JPG/JPEG/PNG/WEBP/HEIC/HEIF、单张不超过 30 MB、宽高均为 256–5760 像素、长宽比 0.4–2.5。远程 URL 的真实文件由服务商校验,数量和类型在平台提交前校验。

MiniMax 的实际结算已支持输入图数;预估与预扣也计入第 6 张起的图片费用。Wan 3.0 使用独立的分辨率价格规则,480P/720P/1080P 标准价分别为 ¥0.30/¥0.60/¥1.20 每秒,按官网原价维护,不计限时折扣(来源:百炼模型价格,核对日期 2026-10-01)。参考图片不单独收费;可继续通过价格目录统一调整倍率,再单独覆盖某个模型。相关接口依据:MiniMax H3、Wan 3.0、Seedance。

幂等

建议所有创建任务请求都带:

Idempotency-Key: <业务唯一请求ID>

同一个 API client 使用相同 key 和相同请求体会返回已有任务;相同 key 但请求体不同会返回 409。

Webhook

创建任务时传 webhookUrl。任务进入终态后会回调:

{
  "jobId": "job_xxx",
  "status": "succeeded",
  "capability": "image.generate",
  "outputAssetIds": ["asset_xxx"],
  "updatedAt": "2026-06-08T12:00:00.000Z"
}

如果任务失败,payload 会包含 error。

如果服务端配置了:

ZHINIAN_WEBHOOK_SECRET=your-secret

Webhook 请求会带:

X-Zhinian-Signature: sha256=<hex>

签名内容是原始请求体 HMAC-SHA256。

错误格式

{
  "error": "Invalid API key."
}

常见状态码:

  • 400:请求参数错误
  • 401:API Key 缺失或错误
  • 404:任务或资产不存在,或不属于当前 API client
  • 409:幂等 key 冲突
  • 500:服务端错误或 Worker token 配置错误

最小对接流程

  1. 运维提供域名和 API Key。
  2. 对接方调用 GET /api/v1/capabilities 确认能力。
  3. 对接方上传素材或注册外部 URL。
  4. 对接方调用 POST /api/v1/jobs 创建任务。
  5. 对接方轮询 GET /api/v1/jobs/:id,或等待 Webhook。
  6. 任务成功后用 outputAssetIds 查询并下载资产。