HiAPI
博客

教程

GPT Image 2.5 Sunburst 文生图 API:可用的 curl 与 Python 指南

2026年11月3日
GPT Image 2.5 Sunburst 文生图 API:可用的 curl 与 Python 指南

如果你想通过 hiapi API 使用 gpt-image-2.5-sunburst/text-to-image 生成图像,本指南将带你完成一次完整且可用的请求,分别使用 curl 和 Python——从创建任务到下载最终的图像 URL。此处展示的每个请求/响应都是在发布前针对线上 API 实际运行过的。

前提条件

  • 拥有 hiapi 账户和 API key(sk-...)。可在 hiapi 控制台获取。
  • curl,或者如果你要跟着 Python 示例操作,需要 Python 3.8+。
  • 至少一张输出图像的预算。gpt-image-2.5-sunburst/text-to-image 按输出分辨率计费——在生产环境运行前请查看当前定价,因为费率可能会变动。

所有请求都使用标准请求头:

Authorization: Bearer sk-your-api-key-here
Content-Type: application/json

最小可用示例

hiapi 的图像模型都运行在同一个异步任务 API 上:你通过 POST 创建一个任务,然后轮询(或获取 webhook 回调)直到它达到终态,再从 output[0].url 中读取图像 URL。

1. 创建任务(curl)

curl -s -X POST "https://api.hiapi.ai/v1/tasks" \
  -H "Authorization: Bearer sk-your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2.5-sunburst/text-to-image",
    "input": {
      "prompt": "A minimalist product shot of a ceramic coffee dripper on a marble counter, soft morning light, 35mm lens look",
      "resolution": "2K",
      "aspect_ratio": "4:3",
      "background": "auto"
    }
  }'

调用成功只会返回一个任务 ID——生成是异步进行的:

{"code":200,"data":{"taskId":"tk-hiapi-01ABCDEF..."},"message":"success"}

2. 轮询结果

curl -s "https://api.hiapi.ai/v1/tasks/tk-hiapi-01ABCDEF..." \
  -H "Authorization: Bearer sk-your-api-key-here"

每隔几秒持续轮询,直到 data.status 成为终态值。成功时,响应如下所示(taskId/URL 为便于阅读已缩短):

{
  "code": 200,
  "data": {
    "taskId": "tk-hiapi-01ABCDEF...",
    "model": "gpt-image-2.5-sunburst/text-to-image",
    "status": "success",
    "storage": "temp",
    "created": 1789144334,
    "completed": 1789144407,
    "output": [
      {
        "type": "image",
        "url": "https://temp.hiapi.ai/.../output-0.png",
        "artifactId": "146251",
        "expireAt": 1789749206
      }
    ]
  },
  "message": "success"
}

从 data.output[0].url 获取图像。该 URL 会过期(参见 expireAt,一个 Unix 时间戳)——任务成功后请立即下载字节并自行存储,不要把它当作永久链接。

3. Python 端到端示例

import time
import requests

API_KEY = "sk-your-api-key-here"
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}


def create_task(prompt: str, resolution: str = "1K", aspect_ratio: str = "1:1") -> str:
    payload = {
        "model": "gpt-image-2.5-sunburst/text-to-image",
        "input": {
            "prompt": prompt,
            "resolution": resolution,
            "aspect_ratio": aspect_ratio,
        },
    }
    resp = requests.post(BASE, headers=HEADERS, json=payload, timeout=60)
    resp.raise_for_status()
    return resp.json()["data"]["taskId"]


def wait_for_task(task_id: str, timeout_s: int = 300, poll_interval: int = 5) -> dict:
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        resp = requests.get(f"{BASE}/{task_id}", headers=HEADERS, timeout=30)
        resp.raise_for_status()
        task = resp.json()["data"]
        if task["status"] == "success":
            return task
        if task["status"] == "fail":
            raise RuntimeError(f"task {task_id} failed: {task.get('error')}")
        time.sleep(poll_interval)
    raise TimeoutError(f"task {task_id} did not finish within {timeout_s}s")


if __name__ == "__main__":
    task_id = create_task("A minimalist product shot of a ceramic coffee dripper on a marble counter")
    task = wait_for_task(task_id)
    image_url = task["output"][0]["url"]
    print(f"Done: {image_url}")

    img_bytes = requests.get(image_url, timeout=60).content
    with open("output.png", "wb") as f:
        f.write(img_bytes)

input 实际接受哪些字段

gpt-image-2.5-sunburst/text-to-image 的 schema 小而严格。只接受以下字段——其他任何字段(quality、size、n、output_format、style、seed)都会以 400 被拒绝:

字段 必填 取值
prompt 是 任意字符串
resolution 否(默认为 1K) 1K、2K、4K
aspect_ratio 否 auto、1:1、3:2、2:3、4:3、3:4、16:9、9:16、21:9、27:16、16:27、9:8、8:9
background 否 transparent、opaque、auto

请注意,这与裸 gpt-image-2.5-sunburst 模型的 schema 不同:后者接受 quality 档位(low/medium/high/xhigh/max/auto),并支持通过 image_urls 进行图生图编辑。两者的定价也不同——在依赖具体数字之前,请对照 /en/pricing 核实,因为费率可能会变动。

生产环境模式

使用 Webhook 回调代替轮询

对于快速脚本之外的任何场景,跳过轮询,让 hiapi 在任务完成时回调你。在同一个 POST /v1/tasks 请求中添加顶层 callback 对象:

{
  "model": "gpt-image-2.5-sunburst/text-to-image",
  "input": { "prompt": "..." },
  "callback": {
    "url": "https://your-app.example.com/webhooks/hiapi",
    "when": "final"
  }
}

when: "final" 是目前唯一支持的值——当任务达到终态(success 或 fail)时,你的端点会被调用一次,负载结构与轮询得到的结果相同。

轮询 vs. 回调:轮询在脚本或 notebook 中更易正确实现,且不需要公网端点,但会浪费请求并增加延迟(平均为你的轮询间隔),你才能得知完成。对于服务端集成或任何高并发场景,回调更合适——你完全避开轮询循环,任务一落地就会收到通知。

重试时的幂等性

任务 API 接受顶层 idempotency_key 字符串,与 model/input/callback 并列。如果你的客户端可能在超时后重试 POST(你发送了请求,但从未收到响应),请附加一个稳定的 key,这样你就有了一个清晰的信号来核对,而不是猜测原始请求是否真的落地。

处理错误

无效或过期的 API key 会返回 HTTP 401 和结构化错误体:

{
  "error": {
    "code": "permission_denied",
    "message": "This API key is invalid. Check that it is correct or use another API key and try again.",
    "request_id": "2026...",
    "type": "hiapi_error"
  }
}

错误的 input 值(错误的枚举成员、缺少 prompt、不支持的字段)会在创建任务之前返回 HTTP 400——因此不会向你收费:

{"code":400,"data":null,"error_code":"INVALID_REQUEST","message":"invalid input: prompt: missing required field \"prompt\""}

请显式检查这两种情况:对瞬时网络/5xx 错误进行重试,但将 400 视为修复请求体的信号,而不是盲目重试的对象。

相关资源

常见问题

我需要指定 resolution 吗? 不需要——如果省略,默认为 1K。如果你需要 2K 或 4K 输出,请显式设置,因为价格随分辨率提升。

我能像其他 GPT Image 模型的文档那样传入 quality 吗? 在此路由上不能。gpt-image-2.5-sunburst/text-to-image 完全拒绝 quality——该参数只存在于裸 gpt-image-2.5-sunburst 模型 ID 上,后者有不同 schema 和定价。

为什么我的请求返回任务 ID 而不是直接返回图像? hiapi 上的每个图像模型都通过同一个异步任务 API 运行(POST /v1/tasks → 轮询或回调 → output[0].url),无论底层模型实际有多快。围绕该模式构建一次集成,之后你换入的每个模型都会以相同方式工作。

如果我没有及时下载输出 URL 会怎样? 它会过期——任务响应中的 expireAt 字段是临时 URL 停止工作的 Unix 时间戳。一旦 status 为 success,请立即自行下载并存储字节。

我能用此模型进行图生图编辑吗? 在 /text-to-image 路由上不能。对于图像编辑,请使用裸 gpt-image-2.5-sunburst 模型 ID,并传入 image_urls 输入字段——查看其模型页面了解确切 schema。

准备好自己尝试了吗?从 hiapi 控制台获取 API key,并替换上面 Python 示例中的 prompt 即可。

立即开始构建持久 AI 产物

获取 API 密钥,通过一个基于任务(task)的 API 调用图像、视频和音频模型。

阅读 API 文档