AIGC 平台 API 接入文档(面向 Agent / 开发者)

本接口让你(任何 agent / 程序 / 业务系统)用你自己的一个 API Key,调用 AIGC 平台(「青龙画图 / 青龙视频」)的生成能力:文生图、图生图、文生视频、图生视频、语音合成、语音转文字。

接口采用 OpenAI 兼容风格(字段名、Bearer 鉴权、data[] 返回),便于迁移。图片为同步返回,视频为异步任务(提交后轮询)。


一、基础信息

所有 /v1/* 接口都必须带 Bearer Key。未带或无效一律返回 401。


二、鉴权:用你的一把 Key

直接用你在 atp.jczxai.com 那把 API Key(access_token,sk-...) 即可,无需任何额外配置。

调用时把 Key 放进请求头:

curl -X POST https://aigc.jczxai.com/v1/images/generations \
  -H "Authorization: Bearer <你的ATP Key>" -H "Content-Type: application/json" \
  -d '{"model":"a1","prompt":"一只橘猫","size":"1024x1024"}'

三、模型发现:GET /v1/models

返回各能力下的模型列表(key / 名称 / 规格),供你选择模型。

curl https://aigc.jczxai.com/v1/models -H "Authorization: Bearer <你的Key>"

响应示例:

{
  "capabilities": {
    "text-to-image": [
      {"key": "a1", "name": "青龙画图 旗舰版", "output_formats": ["jpeg"], "optimization_modes": ["standard","fast"]},
      {"key": "a2", "name": "青龙画图 增强版"},
      {"key": "a3", "name": "青龙画图 轻量版"}
    ],
    "image-to-image": [
      {"key": "b1", "name": "青龙图生图"},
      {"key": "b2", "name": "青龙图生图 增强版"},
      {"key": "b3", "name": "青龙图生图 轻量版"}
    ],
    "text-to-video": [
      {"key": "c1", "name": "青龙视频", "resolutions": ["480p","720p","1080p","4K"]},
      {"key": "c2", "name": "青龙视频 极速版"},
      {"key": "c3", "name": "青龙视频 轻量版"},
      {"key": "c4", "name": "青龙视频 旗舰版", "resolutions": ["480p","720p","1080p"]}
    ],
    "image-to-video": [
      {"key": "d1", "name": "青龙视频"},
      {"key": "d2", "name": "青龙视频 极速版"},
      {"key": "d3", "name": "青龙视频 轻量版"},
      {"key": "d4", "name": "青龙视频 旗舰版", "resolutions": ["480p","720p","1080p"]}
    ]
  }
}

模型 key 速查:

能力 model 填的 key
文生图 a1(旗舰) / a2(增强) / a3(轻量)
图生图 b1 / b2 / b3
文生视频 c1 / c2 / c3 / c4
图生视频 d1 / d2 / d3 / d4

model 字段也接受模型名称(如 青龙画图 旗舰版)。不填 model 则用该能力默认模型。


四、余额:GET /v1/balance

curl https://aigc.jczxai.com/v1/balance -H "Authorization: Bearer <你的Key>"
{"username": "你的账号", "balance": 12.3456, "currency": "USD"}

余额不足时创建任务会返回 402(见错误码)。


五、文生图(同步):POST /v1/images/generations

同步返回结果。参考图较小约 8 秒;尺寸较大(2K/4K)约 60~150 秒,请把客户端超时设 ≥ 240 秒(见「注意事项」)。

请求:

{
  "model": "a1",
  "prompt": "一只趴在窗台晒太阳的橘猫,写实摄影,柔光",
  "n": 1,
  "size": "1024x1024",
  "style": "realistic",
  "negative_prompt": "模糊,畸变",
  "output_format": "jpeg",
  "prompt_optimization": "speed",
  "response_format": "url"
}

curl:

curl -X POST https://aigc.jczxai.com/v1/images/generations \
  -H "Authorization: Bearer <你的Key>" -H "Content-Type: application/json" \
  -d '{"model":"a1","prompt":"一只橘猫","n":1,"size":"1024x1024","style":"realistic"}'

响应:

{
  "created": 1720000000,
  "data": [
    {"url": "https://aigc.jczxai.com/uploads/1720000000_123.png", "mime_type": "image/png"}
  ],
  "usage": {"prompt_tokens": 0, "completion_tokens": 0, "total_tokens": 0}
}

字段说明:

字段 必填 说明
prompt ✅ 提示词
model - 文生图 key a1/a2/a3;默认 a1
n - 生成张数(默认 1)
size - 1024x1024、1:1、2K、1K、4K、9:16、16:9 等;默认 2K
style - realistic/anime/oil-painting/cyberpunk/chinese-style/3d-render/watercolor/sketch/pixel-art
negative_prompt - 负面提示
output_format - png/jpeg(按模型能力)
prompt_optimization - standard/speed(按模型能力)
response_format - url(默认)/b64_json

六、图生图(同步):POST /v1/images/edits

支持两种请求体:JSON(参考图用 data URL 或公网 URL)或 multipart/form-data(OpenAI 官方风格)。

方式一:JSON:

# 单图:image_url 或 image(data URL / 公网 URL)
curl -X POST https://aigc.jczxai.com/v1/images/edits \
  -H "Authorization: Bearer <你的Key>" -H "Content-Type: application/json" \
  -d '{"model":"b2","prompt":"把这个房间改成夏日午后阳光感","image":"data:image/png;base64,iVBORw0KGgo...","size":"1024x1024"}'

# 多图(最多 10 张):images 数组
curl -X POST https://aigc.jczxai.com/v1/images/edits \
  -H "Authorization: Bearer <你的Key>" -H "Content-Type: application/json" \
  -d '{"model":"b2","prompt":"融合这两张图的风格","images":["data:image/png;base64,...","https://example.com/ref.png"]}'

方式二:multipart(OpenAI 官方格式):

curl -X POST https://aigc.jczxai.com/v1/images/edits \
  -H "Authorization: Bearer <你的Key>" \
  -F "model=b2" -F "prompt=改成夏日午后阳光" -F "size=1024x1024" \
  -F "image=@/path/to/ref.png"

响应与文生图相同:{created, data:[{url,...}], usage}。

大小限制:请求体 ≤ 15MB;单张 base64 图建议 <10MB。


七、视频生成(异步):POST /v1/videos/generations

视频生成耗时较长(1~15 分钟),采用提交任务 → 轮询。提交后立即返回任务 id,用 GET /v1/tasks/{id} 或 GET /v1/videos/{id} 轮询。

文生视频:

curl -X POST https://aigc.jczxai.com/v1/videos/generations \
  -H "Authorization: Bearer <你的Key>" -H "Content-Type: application/json" \
  -d '{"model":"c1","prompt":"无人机从山谷树林上空掠过,电影质感","resolution":"720p","duration":10,"ratio":"16:9","generate_audio":true}'

图生视频:

curl -X POST https://aigc.jczxai.com/v1/videos/generations \
  -H "Authorization: Bearer <你的Key>" -H "Content-Type: application/json" \
  -d '{"model":"d1","prompt":"让这座建筑慢慢长出藤蔓和鲜花","image":"https://example.com/building.png","first_frame_image":"https://example.com/start.png","last_frame_image":"https://example.com/end.png","resolution":"720p","duration":10,"ratio":"16:9","return_last_frame":true}'

响应(立即返回任务 id):

{"id": 42, "status": "in_progress", "model": "c1", "created_at": 1720000000}

参数说明:

轮询任务状态

# 通用任务接口(图片/视频都可用)
curl https://aigc.jczxai.com/v1/tasks/42 -H "Authorization: Bearer <你的Key>"

# OpenAI sora 风格视频接口
curl https://aigc.jczxai.com/v1/videos/42 -H "Authorization: Bearer <你的Key>"

GET /v1/tasks/{id} 响应:

{
  "id": 42,
  "type": "text-to-video",
  "model_key": "c1",
  "status": "done",
  "error_msg": "",
  "results": [
    {"url": "https://aigc.jczxai.com/uploads/xxx.mp4", "path": "/uploads/xxx.mp4", "mime_type": "video/mp4", "thumb_url": "https://aigc.jczxai.com/uploads/xxx_thumb.jpg"}
  ]
}

GET /v1/videos/{id} 响应:

{"id": 42, "status": "completed", "model": "c1", "url": "https://.../xxx.mp4", "thumb_url": "https://.../xxx_thumb.jpg", "error": "", "created_at": 1720000000}

轮询建议:status 从 in_progress → completed / failed。每 5~10 秒轮询一次。


八、语音:合成 / 转写

查看可选音色:GET /v1/speech/voices

curl https://aigc.jczxai.com/v1/speech/voices -H "Authorization: Bearer <你的Key>"
# → {"default":"zh_female_shuangkuaisisi_moon_bigtts","voices":[{"id":"...","name":"爽快思思","gender":"female","is_default":true}, ...]}

文本转语音(同步):POST /v1/audio/speech

curl -X POST https://aigc.jczxai.com/v1/audio/speech \
  -H "Authorization: Bearer <你的Key>" -H "Content-Type: application/json" \
  -d '{"input":"你好,欢迎使用 AIGC 语音","voice":"zh_female_shuangkuaisisi_moon_bigtts"}'
{"base64": "<base64音频>", "content_type": "audio/mpeg", "chars": 12}
字段 必填 说明
input / text ✅ 要合成的文本
voice / speaker - 音色 ID(GET /v1/speech/voices 列出;不传用默认)
emotion - 自然语言情感提示,如「用亲切温和的语气」
response_format - 留空=原始音频字节;b64=base64 JSON

音频转文本:POST /v1/audio/transcriptions

支持 multipart(file 字段)或 JSON(audio 为 base64/data URL):

# 方式一:multipart
curl -X POST https://aigc.jczxai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer <你的Key>" \
  -F "file=@/path/to/audio.mp3"

# 方式二:JSON(base64)
curl -X POST https://aigc.jczxai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer <你的Key>" -H "Content-Type: application/json" \
  -d '{"audio":"data:audio/mpeg;base64,SUQzAwAAAA...","format":"mp3"}'

响应:

{
  "text": "你好,今天天气怎么样",
  "duration_ms": 4300,
  "utterances": [{"text": "你好,今天天气怎么样", "start_time": 0, "end_time": 4300}]
}

文本转语音(流式):POST /v1/audio/speech/stream

与同步 /v1/audio/speech 同入参,但以 Server-Sent Events(SSE) 方式把音频逐块返回,调用方收到一块即可开始解码播放,不必等整句读完(适合实时播报/流式播放):

curl -N -X POST https://aigc.jczxai.com/v1/audio/speech/stream \
  -H "Authorization: Bearer ***" -H "Content-Type: application/json" \
  -d '{"input":"你好,这是一段流式语音合成测试。","voice":"zh_female_shuangkuaisisi_moon_bigtts"}'

响应是 text/event-stream,每行 data: {...},按序有:

data: {"type":"chunk","audio":"<base64 音频分片>","chars":22}
data: {"type":"chunk","audio":"<base64 音频分片>","chars":22}
data: {"type":"done","fee":0.0001,"chars":22,"mime":"audio/mpeg"}

使用 voice/speaker、emotion 字段与同步接口一致。

音频转文本(流式/实时):WebSocket /v1/audio/transcriptions/stream

用于边说话边出字的实时转写。建立 WebSocket 连接后持续发送音频帧,服务端把识别到的文字实时推回:

wss://aigc.jczxai.com/v1/audio/transcriptions/stream?token=<你的Key>
{"type":"partial","text":"当前累","duration_ms":800}
{"type":"partial","text":"当前累计识别到","duration_ms":1600}
{"type":"final","text":"当前累计识别到的完整文本。","duration_ms":3200,"fee":0.0001}

Python 示例(websockets):

import asyncio, json, websockets
async def rec():
    async with websockets.connect(
        "wss://aigc.jczxai.com/v1/audio/transcriptions/stream?token=***"
    ) as ws:
        # 发送音频帧(此处演示发一个 200ms 的 pcm 帧)
        await ws.send(b"\x00\x00" * 1600)   # 音频二进制帧
        await ws.send(json.dumps({"done": True}))
        async for msg in ws:
            print(msg)
asyncio.run(rec())

九、错误码

统一返回:{"error":{"message":"...","type":"..."}}

HTTP type 场景
401 authentication_error 未带 Bearer Key / Key 无效
400 invalid_request_error 缺 prompt、JSON 非法、任务 id 非法
402 - 余额不足(附 need 金额与当前 balance)
404 not_found_error 任务不存在(或不属于你)
502 generation_error 生成失败(message 为可读原因,如敏感内容被拒 / 参数不符)

生成失败常见原因:SensitiveContentDetected(含真人肖像等敏感内容)、版权、参数非法等,均在 502 的 message 里给出可读文案。


十、Python 调用示例

import time, requests, base64

BASE = "https://aigc.jczxai.com"
KEY = "sk-..."  # 你的 API Key
H = {"Authorization": f"Bearer {KEY}"}

# 1) 看模型
models = requests.get(f"{BASE}/v1/models", headers=H).json()
print("能力:", list(models["capabilities"].keys()))

# 2) 文生图(同步)
r = requests.post(f"{BASE}/v1/images/generations", headers=H,
                  json={"model": "a1", "prompt": "一只橘猫", "n": 1, "size": "1024x1024"})
img = r.json()["data"][0]["url"]
print("图片:", img)

# 3) 图生图(参考图用 base64)
with open("ref.png", "rb") as f:
    b64 = "data:image/png;base64," + base64.b64encode(f.read()).decode()
r = requests.post(f"{BASE}/v1/images/edits", headers=H,
                  json={"model": "b2", "prompt": "改成夏日午后", "image": b64})
print("变体:", r.json()["data"][0]["url"])

# 4) 文生视频(异步:提交→轮询)
task_id = requests.post(f"{BASE}/v1/videos/generations", headers=H,
                        json={"model": "c1", "prompt": "无人机掠过山谷", "resolution": "720p", "duration": 10}).json()["id"]
while True:
    s = requests.get(f"{BASE}/v1/tasks/{task_id}", headers=H).json()
    if s["status"] == "done":
        print("视频:", s["results"][0]["url"]); break
    if s["status"] == "failed":
        print("失败:", s["error_msg"]); break
    time.sleep(5)

十一、注意事项


十二、最小流程(三步跑通)

# 0)准备 Key(直接用你在 ATP 平台的 access_token)
KEY=<你的Key>

# 1)文生图
curl -X POST https://aigc.jczxai.com/v1/images/generations \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"model":"a1","prompt":"一只橘猫","size":"1024x1024"}'
# → {"created":...,"data":[{"url":"https://.../uploads/xxx.png"}],...}

# 2)视频提交
TASK=$(curl -X POST https://aigc.jczxai.com/v1/videos/generations \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"model":"c1","prompt":"无人机掠过山谷","resolution":"720p","duration":10}' | python3 -c "import sys,json;print(json.load(sys.stdin)['id'])")

# 3)轮询到完成
curl https://aigc.jczxai.com/v1/tasks/$TASK -H "Authorization: Bearer $KEY"