HiAPI
博客

教程

如何通过 hiapi API 使用 gpt-image-2.5-flare

2026年11月3日
如何通过 hiapi API 使用 gpt-image-2.5-flare

gpt-image-2.5-flare 是 hiapi 上的单一模型,通过同一个统一端点同时处理文生图生成和图像编辑——你无需分别使用“生成”和“编辑”两个模型 ID。本指南将带你使用 hiapi 的异步任务 API 在几分钟内从零开始生成可用图像,包含完整的 Node.js 示例,以及上线前你会需要的生产级模式(回调、幂等性、重试)。

你需要准备

  • 一个 hiapi API 密钥。注册并从控制台获取——密钥形如 sk-...,放在 Authorization: Bearer 请求头中。
  • 任意 HTTP 客户端。以下示例使用 Node.js 18+(内置 fetch),但同样的三次调用也可以用 curl、Python 或任何能发送 JSON POST 请求的工具完成。

hiapi 通过同一个异步端点族暴露 gpt-image-2.5-flare:你提交任务,然后轮询结果,或在任务完成时接收 webhook 回调。没有同步的“在响应体中等待图像”的调用——生成需要数秒,因此 API 从一开始就是基于任务的。

最小可运行示例(Node.js)

以下代码创建任务、轮询直到完成,并打印生成的图像 URL。

const API_KEY = process.env.HIAPI_API_KEY; // sk-...
const BASE = "https://api.hiapi.ai/v1/tasks";

async function createTask(prompt) {
  const res = await fetch(BASE, {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      model: "gpt-image-2.5-flare",
      input: {
        prompt,
        aspect_ratio: "16:9",
        quality: "high",
      },
    }),
  });
  if (!res.ok) {
    const err = await res.json();
    throw new Error(`create task failed (${res.status}): ${JSON.stringify(err)}`);
  }
  const { data } = await res.json();
  return data.taskId; // e.g. "tk-hiapi-..."
}

async function waitForTask(taskId, { timeoutMs = 120_000, intervalMs = 3_000 } = {}) {
  const deadline = Date.now() + timeoutMs;
  while (Date.now() < deadline) {
    const res = await fetch(`${BASE}/${taskId}`, {
      headers: { "Authorization": `Bearer ${API_KEY}` },
    });
    const { data: task } = await res.json();
    if (task.status === "success") return task;
    if (task.status === "fail") {
      throw new Error(`task failed: ${task.error?.code} ${task.error?.message}`);
    }
    await new Promise((r) => setTimeout(r, intervalMs));
  }
  throw new Error(`task ${taskId} timed out`);
}

const taskId = await createTask("a minimalist poster of a lighthouse at dawn, flat color");
const task = await waitForTask(taskId);
console.log(task.output[0].url); // download this — it expires, so save it promptly

使用 HIAPI_API_KEY=sk-... node generate.js 运行。响应中的 data.output 数组仅在 status 为 "success" 时出现;每个条目都有一个临时 url(带有 expireAt),因此请立即下载或重新上传,而不是保存链接。

如果要编辑已有图像而不是从头生成,请添加 input.image_urls(可公开访问的 URL 数组,1–16 张图像),并在 prompt 中描述对每张图像的处理——同一个模型、同一个端点,无需单独的“编辑”模型 ID:

body: JSON.stringify({
  model: "gpt-image-2.5-flare",
  input: {
    prompt: "replace the background with a studio gradient, keep the subject unchanged",
    image_urls: ["https://example.com/product-photo.jpg"],
  },
}),

其他有用的 input 字段:background(auto / transparent / opaque,默认 auto)和 output_format(png / jpeg / webp,默认 webp)。此模型没有 resolution 字段——尺寸完全通过 aspect_ratio 控制(如果你需要精确的像素尺寸而非比例,它也接受像 1536x1024 这样的显式像素尺寸)。

生产级模式

在生产环境中使用回调代替轮询。轮询适合脚本,但对于真正的后端,请注册 webhook,让 hiapi 在任务完成的那一刻通知你,而不是你定时反复请求 GET /v1/tasks/<id>:

body: JSON.stringify({
  model: "gpt-image-2.5-flare",
  input: { prompt: "..." },
  callback: {
    url: "https://yourapp.com/webhooks/hiapi",
    when: "final", // the only supported value — fires once, on success or fail
  },
}),

你的 webhook 处理器会收到与轮询 GET /v1/tasks/<id> 相同的任务对象——检查 status 并根据 success 与 fail 分支处理。

使重试具备幂等性。如果你的任务执行器重试失败的 HTTP 调用(超时、5xx、网络抖动)而不小心,可能会意外提交两次相同的生成任务并为两者付费。传入一个稳定的 Idempotency-Key 请求头——最多 255 字节,通常是你自己的任务/请求 ID——使用相同 key 的重试请求会返回原始任务,而不是创建新任务:

headers: {
  "Authorization": `Bearer ${API_KEY}`,
  "Content-Type": "application/json",
  "Idempotency-Key": jobId, // reuse the same value across retries of the same logical request
},

处理特定的失败模式。以下状态码应显式分支处理,而不是把所有情况都当作“重试”:

状态码 含义 处理方式
401 且 error.code: "permission_denied" API 密钥错误或缺失 不要重试——检查 Authorization 请求头
402 余额不足 不要重试——先充值
400 请求体无效(字段错误、类型错误) 不要盲目重试——修正请求体
503 暂时不可用 可以安全地退避重试
任务 status: "fail" 任务在被接受后失败(例如 image_urls 无法访问) 检查 error.code / error.message,不要无限循环

401 错误响应体如下——所有 hiapi 模型形状相同,因此值得在共享错误处理器中检查一次:

{
  "error": {
    "code": "permission_denied",
    "message": "...",
    "request_id": "...",
    "type": "hiapi_error"
  }
}

参考

常见问题

gpt-image-2.5-flare 是一个模型还是两个(生成 + 编辑)?一个。它生成还是编辑完全取决于你是否包含 input.image_urls——无需切换到单独的模型 ID。

为什么响应里没有立即出现图像?hiapi 的图像模型全部是异步的——POST /v1/tasks 只返回 taskId。你需要轮询 GET /v1/tasks/<id> 直到 status 为 success,或注册 callback 才能获取实际的 output 数组。

任务需要多长时间?通常为个位数秒,负载高时偶尔会更长。使用宽松的轮询超时(60–120秒),而不是假设它总能立即完成。

编辑时可以传入多张参考图像吗?可以,image_urls 最多接受 16 张图像——在 prompt 中说明每张图像的作用(例如“使用第一张图像的姿势,搭配第二张图像的服装”),因为数组顺序很重要。

如果任务完成时我的回调 URL 无法访问会怎样?hiapi 在任务达到最终状态时调用一次(when: "final")。如果你的端点无法访问,你不会收到通知——对于任何不能遗漏的情况,请将轮询作为后备方案,或使用你记录的任务 ID 定期与 GET /v1/tasks/<id> 对账。

我需要自己存储输出 URL 吗?是的——output[0] 中的 url 是临时的并且会过期。任务成功后请立即下载或重新上传到你自己的存储。

立即开始构建持久 AI 产物

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

阅读 API 文档