HiAPI
博客

教程

Recraft 去背景 API:一个可运行的示例

如何在 hiapi 上调用 recraft/remove-background —— 请求结构、轮询、回调,以及你需要分开处理的两种错误形态。

2026年11月3日
Recraft 去背景 API:一个可运行的示例

大多数去背景 API 都需要你选择一个通用图像编辑模型,再通过合适的提示词引导它抠出主体。recraft/remove-background 省去了这一步:它是一个专用模型,接收一个图片 URL,返回一张保留发丝与毛发级边缘细节的透明 PNG。没有提示词、没有反向提示词、没有强度参数——只需输入源图,输出抠图。

本指南走完一次完整、经过测试的调用:请求结构、你实际会收到的响应,以及让批处理任务不会因为某个边界情况而卡住的生产级模式(回调、幂等性、错误处理)。

前置条件:

  • 从你的控制台获取 hiapi API key
  • Python 3.9+ 并安装 requests(pip install requests),或直接使用 curl
  • 你的源图位于一个公网 URL——hiapi 的任务 API 通过 URL 获取图片,而不是文件上传。格式为 PNG、JPG 或 WEBP,最大 5MB,最大 1600 万像素,两个维度均在 256 到 4096 像素之间。

请求

与 hiapi 上的所有生成模型一样,recraft/remove-background 通过共享的异步任务 API 运行:POST /v1/tasks 带上 model 和 input,你会立即收到一个 taskId,抠图在后台运行。完整契约——请求头、幂等键、状态码——已在创建任务中统一记录;模型相关的部分是 input,对此模型来说只有一个字段:

curl -X POST "https://api.hiapi.ai/v1/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "recraft/remove-background",
  "input": {
    "image_url": "https://static.hiapi.ai/model-covers/recraft-remove-background/2026/09/01/golden-input-2048.jpg"
  }
}'
import requests

payload = {
    "model": "recraft/remove-background",
    "input": {
        "image_url": "https://static.hiapi.ai/model-covers/recraft-remove-background/2026/09/01/golden-input-2048.jpg",
    },
}

response = requests.post(
    "https://api.hiapi.ai/v1/tasks",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json=payload,
)
print(response.json())
# {"code": 200, "data": {"taskId": "tk-hiapi-..."}, "message": "success"}

image_url 是该模型唯一接受的字段——没有 format、response_format 或尺寸参数。发送其他任何内容,API 会在触达模型之前就以 schema 错误拒绝整个请求(见下方错误)。输出始终是透明 PNG。

轮询结果

取上述响应中的 taskId,轮询 GET /v1/tasks/{taskId},直到 data.status 达到终态。状态枚举在平台上所有模型中一致:queued → handling → archiving → success(或 fail)。该模型的实际运行通常不到 10 秒即可完成:

import time

task_id = response.json()["data"]["taskId"]

while True:
    r = requests.get(
        f"https://api.hiapi.ai/v1/tasks/{task_id}",
        headers={"Authorization": "Bearer YOUR_API_KEY"},
    )
    data = r.json()["data"]
    if data["status"] in ("success", "fail"):
        break
    time.sleep(2)

print(data)

状态为 success 时,data.output 是一个只含一个元素的数组:

{
  "status": "success",
  "output": [
    {
      "artifactId": "119426",
      "type": "image",
      "url": "https://temp.hiapi.ai/7c6ttvrbpt/01M1RYTHQ5F94S2405YSC65EWM-0.png",
      "expireAt": 1789222580
    }
  ]
}

url 是临时链接——expireAt 是大约一周后的 Unix 时间戳,而不是永久 CDN 地址。任务一成功就下载字节并存入你自己的存储:

image_bytes = requests.get(data["output"][0]["url"]).content
with open("cutout.png", "wb") as f:
    f.write(image_bytes)

生产级模式

使用回调而不是循环轮询。 在创建时传入 callback.url,hiapi 会在任务完成时把最终结果 POST 给你,而不是让你在轮询循环里消耗请求:

payload = {
    "model": "recraft/remove-background",
    "callback": {"url": "https://example.com/hiapi/callback", "when": "final"},
    "input": {"image_url": "https://your-cdn.example.com/product-01.jpg"},
}

when: "final" 意味着你只会收到一次回调,在终态(success 或 fail)时触发,而不是每个中间状态各一次。对于一批产品照片来说,这是合适的默认设置,你不必为每张图维持一个轮询循环。

幂等性。 如果请求在你这边超时,但实际上已经到达 hiapi,使用相同的 Idempotency-Key 请求头重试(记录在创建任务中)会返回原始任务,而不会对第二次抠图计费。对于任何在网络错误时重试的批处理任务都值得设置。

错误——两种形态,而非一种。 格式错误的请求和认证失败会以不同的信封返回,只检查其中一种的代码会静默吞掉另一种:

// 输入错误(schema 校验)—— HTTP 400
{"code": 400, "data": null, "error_code": "INVALID_REQUEST", "message": "invalid input: image_url: missing required field \"image_url\""}
// API key 无效或已过期 —— HTTP 401
{"error": {"code": "permission_denied", "message": "This API key is invalid...", "request_id": "...", "type": "hiapi_error"}}

先检查 error_code,再回退到 error.code——不要假设所有失败都有相同的顶层键。

定价。 每张图片 $0.01(20 credits),无论输入分辨率如何,统一计价。当前价格始终在定价页面上。

当你需要替换背景,而不仅仅是抠图时

recraft/remove-background 只生成透明抠图——不填充、不带场景。如果目标是在同一次调用中换成影棚背景或生活方式场景,那就是另一项任务:使用一个图生图模型,提示它在保留主体的周围重新生成背景。查看用 API 去除图片背景:基于提示词的编辑了解该方法,以及何时值得为此支付比普通抠图更高的成本。

常见问题

recraft/remove-background 接受提示词或强度参数吗? 不接受。schema 是严格的——image_url 是唯一接受的字段。发送 format 或 response_format 之类的额外字段会返回 400,并附带 "additional properties not allowed" 消息。

支持哪些图片格式和尺寸? 输入:PNG、JPG 或 WEBP,最大 5MB,最大 1600 万像素,两个维度均在 256 到 4096 像素之间。输出始终是带 alpha 通道的 PNG。

我可以上传本地文件而不是 URL 吗? 不可以——image_url 必须是一个 hiapi 服务器可以获取的公网 http(s):// URL。请先上传到对象存储或 CDN。

输出 URL 的有效期是多久? 每个输出条目上的 expireAt 字段是 Unix 时间戳,通常大约一周后。将其视为临时链接,任务成功后立即把字节复制到你自己的存储——不要长期保存 temp.hiapi.ai 链接。

这适用于批处理数百张产品照片吗? 是的——为每张图提交一个任务,共享一个 callback.url,让 hiapi 把结果推送回来,而不是逐个轮询。按 $0.01/图计算,一次 1,000 张图的目录处理在生成上花费 $10。

立即开始构建持久 AI 产物

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

阅读 API 文档