文档目录
本页目录

核心 API

图像生成 API

图片请求使用独立的 Images 端点。本页以 gpt-image-2 为基准介绍图像生成、图片编辑、同步任务和异步任务;当前可用模型与分组以模型广场为准。

端点与模型

用途方法和地址说明
查询模型 GET https://api.khaix.net/v1/models 返回当前可用模型
同步任务 POST https://api.khaix.net/v1/images/generations 等待生成完成后返回
图片编辑 POST https://api.khaix.net/v1/images/edits 使用参考图或 mask
异步任务 POST https://api.khaix.net/v1/images/generations/async 立即返回任务 ID
异步编辑 POST https://api.khaix.net/v1/images/edits/async 后台处理参考图和 mask
查询任务 GET https://api.khaix.net/v1/images/tasks/{task_id} 返回状态和最终结果

所有请求都使用 Authorization: Bearer $KHAIX_API_KEY。SDK 的 Base URL 填写 https://api.khaix.net/v1;直接发送 HTTP 请求时使用上表完整地址。省略 model 时,网关当前默认使用 gpt-image-2;生产请求仍应显式填写模型,避免默认值或分组映射变化。不要把图片模型放入文本模型 endpoint。

参数与尺寸规则

下表列出可使用的参数和接口返回行为。请求时请显式填写模型、尺寸和输出格式,并根据响应检查实际文件。

参数可填写的值或范围接口行为
prompt必填,最长 32,000 字符通过
modelgpt-image-2省略时当前默认为 gpt-image-2;建议显式填写
sizeauto 或合法的 WIDTHxHEIGHT这是请求目标,不保证实际文件精确匹配;部分路由会归一化或降级
qualitylowmediumhighauto请求目标可能被兼容路由归一化;读取实际返回的质量元数据并检查图片
output_formatpngjpegwebp原生图片路由可按请求格式返回;OAuth / Codex 兼容路由可能归一化为 PNG
output_compression0-100,仅 JPEG/WebP 有效仅在路由保留 JPEG/WebP 时有意义;归一化为 PNG 时不生效
backgroundopaqueautogpt-image-2 当前不支持 transparent;不要依赖透明输出
moderationautolow支持 autolow
n1-10,默认值为 1指定请求图片数量;实际返回数可能不同,计费方式取决于密钥所在分组
streamfalsetruetrue 仅用于同步 SSE;异步任务必须使用 false
partial_images0-3,仅 stream:true 有效异步任务不能使用该参数
user调用方定义的最终用户标识用于标识最终用户
response_formatb64_jsonurl兼容返回字段;省略时默认为 b64_jsonurl 也可能是 Data URI

尺寸规则与返回尺寸

尺寸使用像素值,不要传字符串形式的“1K”“2K”“4K”。宽高都必须是 16 的倍数,任一边不超过 3840,长宽比不超过 3:1,总像素应在 655,360 到 8,294,400 之间。

档位请求尺寸返回结果
1K1024x1024通常接近请求尺寸;必须检查实际文件
2K 方图2048x2048通常接近请求尺寸;必须检查实际文件
2K 横图2048x1152可能返回 2560x1440,不能依赖精确尺寸
4K 横图3840x2160可能被降级或归一化;属于大尺寸请求

按张计费分组的尺寸档位

仅当密钥所在分组采用按张计费时,系统才按图片最长边划分档位:最长边不超过 1024 为 1K,大于 1024 且不超过 2048 为 2K,大于 2048 为 4K。系统优先按实际输出尺寸判断;无法识别输出尺寸时使用请求尺寸,两者都无法识别时按 2K 处理。一次请求返回多张不同尺寸图片时,以其中最高档位作为本次请求的按张计费档位。按 Token 计费的分组不使用这套档位计算费用。

档位最长边判定常见方图(比例)常见横图(比例)常见竖图(比例)
1K不超过 10241024x1024(1:1)1024x768(4:3)
1024x640(16:10)
768x1024(3:4)
640x1024(10:16)
2K大于 1024,不超过 20481536x1536(1:1)
2048x2048(1:1)
2048x1536(4:3)
2048x1152(16:9)
1536x1024(3:2)
1536x2048(3:4)
1152x2048(9:16)
1024x1536(2:3)
4K大于 20482560x2560(1:1)
2880x2880(1:1)
3840x2160(16:9)
3072x2048(3:2)
2560x1440(16:9)
2160x3840(9:16)
2048x3072(2:3)
1440x2560(9:16)

上表尺寸均符合本页列出的 gpt-image-2 自定义尺寸范围,但最终应以接口实际返回尺寸为准。例如按张计费分组请求 2048x1152 后若实际输出为 2560x1440,最长边已超过 2048,因此按 4K 档位处理。

建议组合:1K 使用 1024x1024;2K 方图使用 2048x2048quality=medium;4K 横图使用 3840x2160quality=high。4K 属于大尺寸请求,请设置更长的同步超时或改用异步任务。

同步任务

同步端点会保持 HTTP 连接,直到图像生成完成。通常需要约 1~2 分钟,复杂请求可能更久。使用 JSON 发送提示词,并始终显式指定 modelsizeoutput_format

cURL
curl https://api.khaix.net/v1/images/generations \
  -H "Authorization: Bearer $KHAIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "为一款精密工业传感器生成电商主图:银色金属外壳,浅灰无缝背景,正面三分之四视角,柔和棚拍光,产品完整居中,不要品牌标志、可读文字和水印",
    "size": "1024x1024",
    "quality": "high",
    "background": "opaque",
    "output_format": "png",
    "n": 1
  }'

常用字段是 promptsizequalitybackgroundoutput_formatmoderationnoutput_format 控制图片编码,response_format 控制结果放在 b64_json 还是 url 字段中,两者含义不同。

PowerShell 调用

PowerShell
$baseUrl = "https://api.khaix.net"
$headers = @{
    Authorization = "Bearer $env:KHAIX_API_KEY"
    "Content-Type" = "application/json"
}
$body = @{
    model = "gpt-image-2"
    prompt = "为一款精密工业传感器生成浅灰背景的专业产品图,不要 Logo、可读文字或水印"
    size = "1024x1024"
    quality = "medium"
    background = "opaque"
    output_format = "png"
    n = 1
} | ConvertTo-Json

$result = Invoke-RestMethod `
    -Uri "$baseUrl/v1/images/generations" `
    -Method Post -Headers $headers -Body $body -TimeoutSec 300

处理同步结果

省略 response_format 时,同步响应默认使用 data[].b64_json。显式请求 url 时,data[].url 可能是 HTTP(S) 地址,也可能是 data:image/...;base64,... Data URI,不能一律交给下载器。

PowerShell · url / b64_json
$item = $result.data[0]
$outputPath = "generated-image.png"

if ($item.b64_json) {
    [IO.File]::WriteAllBytes(
        $outputPath,
        [Convert]::FromBase64String($item.b64_json)
    )
} elseif ([string]$item.url -match '^data:[^;]+;base64,(.+)$') {
    [IO.File]::WriteAllBytes(
        $outputPath,
        [Convert]::FromBase64String($Matches[1])
    )
} elseif ($item.url) {
    $uri = [Uri][string]$item.url
    if ($uri.Scheme -notin @("http", "https")) {
        throw "Unsupported image URL scheme: $($uri.Scheme)"
    }
    Invoke-WebRequest -Uri $uri -OutFile $outputPath
} else {
    throw "Response contains neither url nor b64_json"
}

上例请求固定为 PNG,因此使用 .png 文件名。若请求其他格式,应先读取响应的 output_format、Data URI MIME 或 HTTP Content-Type,再选择扩展名并校验文件签名。

同步 SSE 与部分图片

在同步生成或编辑请求中设置 "stream": true,并用 partial_images 请求 0-3 张中间预览。中间图是可选预览:即使请求数量大于 0,也可能少收或不收到,不能把它当作最终结果。

阶段生成事件编辑事件处理方式
部分图片image_generation.partial_imageimage_edit.partial_imagepartial_image_index 保存预览;图片在 b64_json 中,url 模式下还可能附带 Data URI
成功完成image_generation.completedimage_edit.completed保存最终图片并读取末尾的 usage;只有此事件表示成功
失败error读取 error.typeerror.message,丢弃未完成结果

HTTP 200 只表示 SSE 已建立。若在 completed 事件前收到 error、连接中断或超时,应将任务标记为未完成;重试前先检查调用记录,避免上游已执行时重复提交。使用部分图片也可能增加按 Token 分组的输出用量。

图片编辑

编辑请求可使用 JSON 图片 URL(包括 data:image/...;base64,...)或 multipart 文件上传。JSON 编辑使用 images[].image_url,可选 mask.image_url;此接口不支持 OpenAI Files 的 file_idgpt-image-2 会以高保真方式处理输入图,请省略 input_fidelity 参数。

cURL · JSON edit
curl https://api.khaix.net/v1/images/edits \
  -H "Authorization: Bearer $KHAIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "将产品图背景替换为浅灰无缝摄影棚背景,保留传感器的金属材质、边缘和自然阴影,不添加品牌标志、可读文字或水印",
    "images": [
      {"image_url": "data:image/png;base64,BASE64_DATA"}
    ],
    "mask": {
      "image_url": "data:image/png;base64,MASK_BASE64_DATA"
    },
    "size": "1024x1024",
    "n": 1
  }'
cURL · multipart
curl https://api.khaix.net/v1/images/edits \
  -H "Authorization: Bearer $KHAIX_API_KEY" \
  -F "model=gpt-image-2" \
  -F "prompt=将产品图背景替换为浅灰无缝摄影棚背景,保留传感器的金属材质、边缘和自然阴影,不添加品牌标志、可读文字或水印" \
  -F "image=@sensor.png" \
  -F "mask=@sensor-mask.png" \
  -F "size=1024x1024"

异步任务

异步端点成功提交后立即返回 HTTP 202 和任务 ID,后台完成图片生成或编辑并上传对象存储,随后可通过任务接口查询结果。服务端必须启用并完整配置异步图片对象存储。创建和轮询必须使用同一 API Key。

操作地址说明
创建生成任务POST /v1/images/generations/async返回任务 ID
创建编辑任务POST /v1/images/edits/async支持图片和 mask
查询任务GET /v1/images/tasks/{task_id}返回状态与结果

创建生成任务

cURL · asynchronous generation
curl "https://api.khaix.net/v1/images/generations/async" \
  -H "Authorization: Bearer $KHAIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "为一款精密工业传感器生成专业产品图,不要 Logo、可读文字或水印",
    "size": "2048x2048",
    "quality": "low",
    "background": "opaque",
    "output_format": "png",
    "moderation": "auto",
    "n": 1
  }'

创建编辑任务

异步编辑使用与同步编辑相同的 JSON 或 multipart 请求体,只需将端点改为 /v1/images/edits/async。下面是 JSON 参考图示例;multipart 上传时沿用前文的 imagemask 文件字段。

cURL · asynchronous edit
curl "https://api.khaix.net/v1/images/edits/async" \
  -H "Authorization: Bearer $KHAIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "将产品图背景替换为浅灰无缝摄影棚背景,保留产品细节",
    "images": [
      {"image_url": "data:image/png;base64,BASE64_DATA"}
    ],
    "size": "1024x1024",
    "n": 1
  }'

提交响应

请求校验通过并成功写入任务存储后,服务固定返回 HTTP 202。初始状态是 processing

JSON · HTTP 202
{
  "id": "imgtask_0123456789abcdef",
  "task_id": "imgtask_0123456789abcdef",
  "object": "image.generation.task",
  "status": "processing",
  "created_at": 1784092800,
  "expires_at": 1784179200,
  "poll_url": "/v1/images/tasks/imgtask_0123456789abcdef"
}

成功提交固定包含 Cache-Control: no-store、相对轮询路径 LocationRetry-After: 3 响应头。异步请求不能带 "stream": true,否则会立即返回 HTTP 400。

轮询与下载

cURL · task polling
curl "https://api.khaix.net/v1/images/tasks/imgtask_0123456789abcdef" \
  -H "Authorization: Bearer $KHAIX_API_KEY"

已存在任务的轮询响应为 HTTP 200,应根据 JSON 的 status 判断。状态为 processing 时响应包含 Retry-After: 3;按照该值轮询,不要在客户端超时后直接重提任务,否则可能重复计费。

状态含义关键字段
processing任务正在生成、编辑或上传对象存储created_atexpires_at
completed图片处理和对象存储上传均成功http_statusresultimage_urlcompleted_at
failed上游请求、执行超时或对象存储转存失败http_statuserrorcompleted_at

当前接口没有取消端点,也不会返回 cancelledexpired 状态。任务最长执行 30 分钟;任务及其结果从最近一次状态更新起保留 24 小时。记录到期、任务 ID 不存在或使用了另一把 API Key 时,轮询返回 HTTP 404 image task not found

完成与失败响应

JSON · completed
{
  "id": "imgtask_0123456789abcdef",
  "task_id": "imgtask_0123456789abcdef",
  "object": "image.generation.task",
  "status": "completed",
  "http_status": 200,
  "image_url": "https://storage.example/image.png",
  "result": {
    "created": 1784092923,
    "data": [{"url": "https://storage.example/image.png"}]
  },
  "created_at": 1784092800,
  "completed_at": 1784092923,
  "expires_at": 1784179323
}
JSON · failed(轮询 HTTP 200)
{
  "id": "imgtask_0123456789abcdef",
  "task_id": "imgtask_0123456789abcdef",
  "object": "image.generation.task",
  "status": "failed",
  "http_status": 502,
  "error": {
    "type": "api_error",
    "message": "Upstream request failed"
  },
  "created_at": 1784092800,
  "completed_at": 1784092923,
  "expires_at": 1784179323
}
检查项要求
任务状态status == completed
结果状态http_status 为 2xx,result.data 非空
文件下载每个 data[].url 都能 GET,且响应是有效的 image/*
资源时效未配置 public_base_url 时返回预签名临时 URL,有效期由存储配置决定,默认约 24 小时;配置后返回公开直链

无论返回临时地址还是公开直链,客户端都应及时下载并保存所需文件,不要把任务响应中的 URL 当作唯一永久副本。

图片计费

图片请求可能采用按张计费,也可能采用按 Token 计费,具体方式由当前 API Key 所属分组及其渠道定价决定。发送请求前在模型广场确认模型、分组、计费单位与实时价格;请求完成后以控制台调用记录中的 usage 和实际扣费为准。

计费方式计算依据会影响费用的因素
按张 根据实际输出确定 1K / 2K / 4K 档位,以档位单价乘以实际生成张数 n、实际返回张数和实际输出尺寸;同一请求有多个尺寸时使用最高档位
按 Token 根据响应 usage 中的文本输入、图片输入和图片输出 Token 计算 提示词、参考图、输出尺寸与质量、生成数量以及流式部分图片都可能改变用量

不能只根据 n 或请求尺寸预估最终费用。失败、超时或自动重试时,上游可能已经开始处理;再次提交前先检查调用记录。文档中的示例价格不代表实时价格,实际扣费以控制台记录为准。充值和付款使用人民币,1 CNY = 1 USD 消费额度;账户余额、模型价格与倍率、用量扣费和调用记录均以美元计价,人民币只用于充值金额、支付订单和付款记录。

常见错误

  • 400:模型不适用:gpt-image-2 不能放在 /v1/chat/completions 或文本 Responses 示例中,请改用 Images 端点。
  • 403:无图像生成权限:控制台检查当前密钥的图像生成权限,并在模型广场确认可用模型和分组。
  • 413:请求体过大:压缩或缩小 Base64 图片,或改用 multipart 文件上传。
  • 空结果或 502:保留请求 ID、模型和 UTC 时间,检查图片服务是否返回图像数据。
  • 404:异步任务未启用:出现 async image tasks are not enabled 时,服务端需要启用并完整配置异步图片对象存储。
  • 404:任务不存在:确认轮询使用创建任务时的同一 API Key;未知、已过期或属于另一把 Key 的任务都返回 image task not found
  • 404:路径拼接错误:确保最终请求路径只包含一个 /v1,避免出现 /v1/v1/images
  • 格式或尺寸与请求不一致:以响应的 output_format、Data URI MIME、HTTP Content-Type、文件签名和实际宽高为准;OAuth / Codex 兼容路由可能返回 PNG 或归一化尺寸。