协议文档

Studio 统一协议

一套异步图片接口,统一调用 🎨 GPT Image 和 🍌 Nano Banana。

让 AI 来读文档 🥺👉
协议导航

从这里切换协议

示例

每个任务生成一张图片,结果同时包含 URL 和 Base64。

更多参数

Key 只会保存在当前浏览器,并随你发送的真实请求使用。

没有 Key?去创建创建时选择 🎨 GPT Image 分组。
ASYNC
$pip install httpx
import jsonimport httpximport timeapi_key = "YOUR_API_KEY"api_base = "https://api.1route.dev"payload = {    "model": "openai/gpt-image-2.5-flare",    "prompt": "Editorial portrait of a woman in profile beside a wind-bent tree, late afternoon light, deep cobalt coat, pale concrete wall, subtle film grain, restrained color palette, clean composition, vertical 4:5.",    "size": "auto"}headers = {"Authorization": f"Bearer {api_key}"}response = httpx.post(    api_base + "/api/v1/images/generations/jobs",    headers=headers,    json=payload,    timeout=1500,)response.raise_for_status()result = response.json()job_url = f"{api_base}/api/v1/images/jobs/{result['jobId']}"while result["phase"] in ("queued", "running"):    time.sleep(1.5)    snapshot = httpx.get(job_url, headers=headers, timeout=30)    snapshot.raise_for_status()    result = snapshot.json()if result["phase"] != "completed":    raise RuntimeError(result)response = httpx.get(f"{job_url}/result", headers=headers, timeout=120)response.raise_for_status()result = response.json()print(json.dumps(result, ensure_ascii=False, indent=2))
响应
尚未发送请求

OpenAPI 接入

直接调用 Studio HTTP 接口时,可让 AI 读取这份 OpenAPI 文档,或导入支持 OpenAPI 的工具,核对接口、请求字段和响应结构。结合 Studio 协议说明中的模型扩展和异步任务流程生成接入代码。

这份 OpenAPI 3.1 文档描述 Studio 的生成、编辑、任务查询、结果、取消、SSE 和媒体接口。导入后使用本页的 Base URL 与 API Key,并按“提交任务、查询状态、获取结果”的顺序调用。

调用流程

提交生成 / 编辑请求
    ↓ 202,返回 jobId
queued → running → completed → 获取结果 → 保存图片
             ├→ failed
             └→ cancelled

每个任务生成一张图片。批量生图时分别提交任务,保存每个 jobId,按 Key 的并发额度控制同时运行的任务数。202 表示任务已创建,不表示图片已生成。

生成图片

POSThttps://api.1route.dev/api/v1/images/generations/jobs
默认 https://api.1route.dev频繁超时可改用 https://image-api.1route.dev

认证使用 Authorization: Bearer YOUR_API_KEY,请求体为 JSON。

没有 Key?去创建根据使用的模型,选择 🎨 GPT Image 或 🍌 Nano Banana 分组。

🎨 GPT Image

{
  "model": "openai/gpt-image-2.5-flare",
  "prompt": "一张白色陶瓷咖啡杯的产品照片,浅灰背景,柔和侧光",
  "size": "1024x1024",
  "quality": "high"
}

model 必填,使用 openai/ 前缀;可选 gpt-image-2gpt-image-2.5-flaregpt-image-2.5-sunburstgpt-image-2.5 是 Flare 的别名。

prompt 是非空的图片描述。size 默认 auto,也支持 1K2K4K宽x高。具体尺寸按像素范围映射到上游档位。

quality 是模型扩展字段。Image 2 支持 autolowmediumhigh;2.5 系列另支持 xhighmax。更高质量可能增加生成耗时。🎨 GPT Image 不使用 resolutionaspect_ratio

🍌 Nano Banana

{
  "model": "google/gemini-3.1-flash-image",
  "prompt": "为咖啡店设计一张春季菜单海报,标题为 SPRING MENU",
  "resolution": "2K",
  "aspect_ratio": "3:4"
}

Google 模型使用 google/gemini-3.1-flash-image(🍌 Nano Banana 2)或 google/gemini-3-pro-image(🍌 Nano Banana Pro)。

resolution 默认 1K,常用值为 1K2K4Kaspect_ratio 默认 1:1,常用 3:22:34:33:416:99:16。Google 模型不发送 size

参考图与编辑

POSThttps://api.1route.dev/api/v1/images/edits/jobs
默认 https://api.1route.dev频繁超时可改用 https://image-api.1route.dev
{
  "model": "openai/gpt-image-2.5-sunburst",
  "prompt": "保持杯子的形状与标识,把背景换成木质桌面",
  "size": "1024x1024",
  "images": [
    { "url": "https://your-image-host.example/product.png" },
    { "dataUrl": "data:image/png;base64,<图片数据>" }
  ]
}

images 至少一项,每项只选择 urldataUrl。列表中可以混合 URL 和 Data URL,顺序会保留。公网 URL 由服务端下载;本地文件在客户端转换为完整 Data URL。Studio 统一协议不使用 multipart。

🎨 GPT Image 局部编辑可附加 mask: { "image_url": "data:image/png;base64,..." }。遮罩对应第一张参考图,透明区域表示需要修改的部分。仍需在提示词里描述具体修改。

模型扩展字段

公共字段以外的顶层字段按所选模型的原生协议处理。例如 🎨 GPT Image 的 qualityoutput_formatoutput_compressionbackgroundmoderation,以及 Google 的 generationConfigsystemInstructionsafetySettings

公共 promptimages 和尺寸字段决定对应内容。Google 扩展示例:

{
  "model": "google/gemini-3-pro-image",
  "prompt": "生成一张横版展览海报,文字为 DESIGN WEEK",
  "resolution": "2K",
  "aspect_ratio": "16:9",
  "generationConfig": {
    "temperature": 0.7
  }
}

创建任务的响应

{
  "jobId": "job_example",
  "phase": "queued",
  "durationGuidance": {
    "tier": "2K",
    "timeoutSeconds": 150,
    "milestones": []
  }
}

jobId 用于后续查询。phase 是当前状态。durationGuidance 提供本任务的尺寸档位、超时时间及耗时提示;示例省略了提示项。milestones[] 包含 percentilesecondslevelcardMessagedetailTitledetailBody,用于展示等待时间提示,不是进度百分比。超时时间以实际响应为准。

查询任务

GEThttps://api.1route.dev/api/v1/images/jobs/{jobId}
默认 https://api.1route.dev频繁超时可改用 https://image-api.1route.dev

使用提交时的同一个 Key。查询响应的主要字段如下:

{
  "jobId": "job_example",
  "model": "openai/gpt-image-2.5-flare",
  "hasInputImage": false,
  "phase": "running",
  "createdAt": 1788940800000,
  "updatedAt": 1788940802000,
  "startedAt": 1788940801000,
  "durationGuidance": { "tier": "2K", "timeoutSeconds": 150, "milestones": [] }
}
状态含义下一步
queued排队等待执行继续查询或订阅进度
running正在生成继续等待,必要时取消
completed已生成调用结果接口
failed生成失败读取 error,按错误原因处理
cancelled任务已取消停止轮询

createdAtupdatedAtstartedAtfinishedAt 都是 Unix 毫秒时间戳。尚未产生的可选字段可能省略。

queuePosition 为当前排队位置,message 为进度说明。任务状态以 phase 为准。usage 为已知的用量,error 包含失败详情。

获取并保存图片

GEThttps://api.1route.dev/api/v1/images/jobs/{jobId}/result
默认 https://api.1route.dev频繁超时可改用 https://image-api.1route.dev
{
  "images": [{
    "url": "https://api.1route.dev/api/v1/images/files/media_example",
    "base64": "<完整图片数据>",
    "mimeType": "image/png"
  }],
  "usage": {}
}

结果同时提供 urlbase64,用 mimeType 确定文件类型。Studio 统一协议没有公共返回格式开关,选择读取需要的字段即可。

import base64
from pathlib import Path

image = result["images"][0]
Path("output.png").write_bytes(base64.b64decode(image["base64"]))

服务端图片与任务结果保留 72 小时,之后清理。URL 适合临时预览;长期使用请下载。媒体接口支持 GET / HEAD,过期返回 410 result_expired

SSE 进度与取消

GET /api/v1/images/jobs/{jobId}/events 返回 text/event-stream。事件名为状态名(如 runningcompleted),data 是 snapshot;heartbeat 事件的 data{}。进入终态后连接结束。

event: running
data: {"jobId":"job_example","phase":"running",...}

event: heartbeat
data: {}

DELETE /api/v1/images/jobs/{jobId} 请求取消,返回最终 snapshot。若任务已完成,可能仍返回 completed;应读取实际状态。关闭浏览器等待或断开 SSE 不等于取消任务。

幂等与错误

提交时可携带 Idempotency-Key。同一个 Key、同一个幂等值和相同请求返回原任务;相同幂等值用于不同请求会返回 409

HTTP 错误结构为 error.statusmessagetypecodeparam。任务已受理后的生成错误放在 snapshot 的 error 中。

HTTP 状态常见原因
400模型前缀、尺寸、参考图或 JSON 字段错误
401缺少或无效 Key
404任务不存在或不属于当前 Key
409幂等冲突;任务尚未完成或已取消时获取结果
410图片或结果已过期
413请求体超出限制
415提交时未使用 application/json
429额度或并发限制,读取错误详情
500 / 502 / 504任务、媒体、上游或超时错误

请求体上限为 512 MiB,单张输入媒体上限为 80 MiB;模型自身的输入限制仍适用。频繁超时可切换本页列出的备用地址。