Files
NianAIGC/docs/API.md

5.6 KiB
Raw Blame History

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

本文面向服务端对接方。所有开放接口位于 /api/v1,使用 API Key 鉴权。

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

冒号前是 clientId冒号后是 API Key。任务和资产会按 clientId 做基本隔离。

任务生命周期

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

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

必须运行 Worker

npm run worker

或 Docker Compose 中的 zhinian-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
}

支持的 capability

capability 说明
image.generate 图片生成
image.inpaint 局部重绘
image.upscale 智能超清
video.generate Seedance 视频生成

查询任务

查询单个任务:

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"

可用筛选:

  • statusqueuedrunningsucceededfailedexpiredcancelled
  • capability:见上表
  • limit1200
  • beforeISO 时间,用于翻页

获取输出资产

任务成功后,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 可放入 inputUrlsimageUrls

图片任务示例

图片生成:

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

智能超清:

{
  "capability": "image.upscale",
  "imageUrls": ["https://example.com/input.png"],
  "resolution": "4k"
}

局部重绘:

{
  "capability": "image.inpaint",
  "prompt": "把选中区域文字替换成新品上市",
  "imageUrls": [
    "https://example.com/original.png",
    "https://example.com/mask.png"
  ]
}

视频任务示例

{
  "capability": "video.generate",
  "prompt": "生成一条 9:16 品牌短视频,节奏明快,适合信息流投放",
  "settings": {
    "ratio": "9:16",
    "duration": 5,
    "resolution": "720p"
  },
  "materials": [
    {
      "type": "image",
      "url": "https://example.com/product.png",
      "label": "@图片1"
    }
  ]
}

视频参数限制:

  • duration415
  • ratio16:94:31:13:49:1621:9adaptive
  • resolution480p720p1080p

幂等

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

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

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

Webhook

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

{
  "event": "generation.succeeded",
  "job": {
    "id": "job_xxx",
    "status": "succeeded",
    "outputAssetIds": ["asset_xxx"]
  }
}

如果服务端配置了:

ZHINIAN_WEBHOOK_SECRET=your-secret

Webhook 请求会带:

X-Zhinian-Signature: sha256=<hex>

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

错误格式

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

常见状态码:

  • 400:请求参数错误
  • 401API 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 查询并下载资产。