跳到主要内容

异步图片生成与编辑接入指南

异步图片接口适用于生成或编辑耗时较长、客户端不希望保持长连接的场景。接口使用平台现有 API Key,成功结果保持 OpenAI Images 响应结构。

1. 接口​

用途方法路径
创建图片生成任务POST/v1/images/generations/tasks
创建图片编辑任务POST/v1/images/edits/tasks
查询轻量状态GET/v1/images/tasks/{task_id}/status
查询任务结果GET/v1/images/tasks/{task_id}

Idempotency-Key 为可选请求头,建议在需要安全重试时携带。同一身份范围、同一操作、相同幂等键和相同请求会返回同一个任务;同一幂等键对应不同请求时返回 409。未携带时每次提交都创建新任务;若提交响应超时后直接重试,可能生成多个任务。

2. 创建图片编辑任务​

编辑接口使用 multipart/form-data,参数与 OpenAI 兼容图片编辑接口一致。image 必填,mask 可选且必须为 PNG,并与第一张图片尺寸一致。

curl "$BASE_URL/v1/images/edits/tasks" \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: edit-order-20260907-001" \
-F "model=gpt-image-2" \
-F "prompt=将背景改为纯白色,保留主体" \
-F "image=@source.png;type=image/png" \
-F "mask=@mask.png;type=image/png" \
-F "n=1" \
-F "size=1024x1024" \
-F "quality=low" \
-F "output_format=png"

多图编辑可重复提交 image,也可使用 image[] 或连续的 image[0]、image[1]。一次请求只能选择其中一种形式,图片顺序会被保留。

受理成功返回 HTTP 202。响应头包含 Location(结果查询地址)和 Retry-After: 3,响应正文示例:

{
"id": "img_task_...",
"object": "image.edit.task",
"operation": "edit",
"model": "gpt-image-2",
"status": "queued",
"result_status": "not_ready",
"status_url": "/v1/images/tasks/img_task_.../status",
"response_url": "/v1/images/tasks/img_task_...",
"created_at": 1788768000,
"expires_at": 1791360000
}

3. 创建图片生成任务​

curl "$BASE_URL/v1/images/generations/tasks" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: generation-order-20260907-001" \
-d '{"model":"gpt-image-2","prompt":"一只白色杯子,纯色背景","n":1,"size":"1024x1024","quality":"low"}'

生成任务的 object 为 image.generation.task,operation 为 generation。

受理成功返回 HTTP 202,响应正文示例:

{
"id": "img_task_1788768000_example",
"object": "image.generation.task",
"operation": "generation",
"model": "gpt-image-2",
"status": "queued",
"result_status": "not_ready",
"status_url": "/v1/images/tasks/img_task_1788768000_example/status",
"response_url": "/v1/images/tasks/img_task_1788768000_example",
"created_at": 1788768000,
"expires_at": 1791360000
}

4. 查询状态和结果​

推荐先轮询轻量状态接口。处理中状态包括 accepting、queued、in_progress 和 output_pending。

curl "$BASE_URL/v1/images/tasks/$TASK_ID/status" \
-H "Authorization: Bearer $API_KEY"

任务处理中时,状态接口返回 HTTP 200。响应头包含 Retry-After: 3,响应正文示例:

{
"id": "img_task_1788768000_example",
"object": "image.generation.task.status",
"operation": "generation",
"model": "gpt-image-2",
"status": "in_progress",
"result_status": "not_ready",
"status_url": "/v1/images/tasks/img_task_1788768000_example/status",
"response_url": "/v1/images/tasks/img_task_1788768000_example",
"created_at": 1788768000,
"started_at": 1788768002,
"expires_at": 1791360000
}

任务成功后,状态接口仍返回 HTTP 200,示例:

{
"id": "img_task_1788768000_example",
"object": "image.generation.task.status",
"operation": "generation",
"model": "gpt-image-2",
"status": "succeeded",
"result_status": "ready",
"status_url": "/v1/images/tasks/img_task_1788768000_example/status",
"response_url": "/v1/images/tasks/img_task_1788768000_example",
"created_at": 1788768000,
"started_at": 1788768002,
"finished_at": 1788768020,
"expires_at": 1791360000,
"result_expires_at": 1789372820
}

图片编辑任务使用相同字段,但 object 为 image.edit.task.status,operation 为 edit。

状态为 succeeded 且 result_status 为 ready 后,读取结果:

curl "$BASE_URL/v1/images/tasks/$TASK_ID" \
-H "Authorization: Bearer $API_KEY"

任务仍在处理时,结果接口返回 HTTP 202,响应头包含 Retry-After: 3,正文为当前任务对象,例如:

{
"id": "img_task_1788768000_example",
"object": "image.generation.task",
"operation": "generation",
"model": "gpt-image-2",
"status": "in_progress",
"result_status": "not_ready",
"status_url": "/v1/images/tasks/img_task_1788768000_example/status",
"response_url": "/v1/images/tasks/img_task_1788768000_example",
"created_at": 1788768000,
"started_at": 1788768002,
"expires_at": 1791360000
}

结果成功时返回 HTTP 200,正文与对应的 OpenAI 图片生成或编辑成功响应一致,例如:

{
"created": 1788768020,
"data": [
{"url": "https://..."}
],
"usage": {
"input_tokens": 12,
"output_tokens": 100,
"total_tokens": 112
}
}

以上时间字段均为 Unix 秒级时间戳。started_at、finished_at 和 result_expires_at 仅在已有对应时间时返回;result_expires_at 只表示结果查询接口中响应数据的可读取期限,不代表 data[].url 指向图片的存储期限。客户端应遵循 Retry-After 响应头,避免高频轮询。

5. 权限范围​

同一用户可以使用自己的其他有效 API Key 查询个人任务。企业任务只能由同一企业授权范围内的有效凭证查询;项目任务还受项目访问权限约束。跨用户、个人与企业之间、不同企业之间的查询均返回与任务不存在相同的响应。

6. 常见错误​

HTTP 状态错误码含义
400invalid_idempotency_key携带的幂等键格式不合法
400invalid_image_edit_request编辑表单、图片、蒙版或文件限制不合法
400unsupported_parameter使用了异步接口不支持的流式参数
409idempotency_conflict同一幂等键被用于不同请求
413request_too_large请求正文超过当前异步图片接口上限
429image_async_accept_busy当前请求解析容量繁忙,请按 Retry-After 稍后重试
429image_async_queue_full当前未完成任务过多,请稍后重试

错误响应正文统一使用以下结构,例如:

{
"error": {
"message": "The image edit request is invalid",
"type": "image_async_error",
"param": "",
"code": "invalid_image_edit_request"
}
}

API Key、幂等键和上传图片不应写入公开日志。任务 ID 可用于业务侧关联,但不能替代 API Key 鉴权。