背景去除 API:一个请求进,处理好的 PNG 出。
上传文件、发送公开的图片 URL,或提供 base64。大多数单张图片会在同一 HTTP 响应中返回处理结果,通常只需几秒。如果某张图片耗时较长,你会收到一个任务 id,用它获取结果即可,无需重新发送图片。批量处理由批次端点完成。
每张成功的图片 1 点数 · 失败的图片免费 · 在账户中获取密钥
$ curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@dog.jpg' -o dog.png
← 200 OK · image/png · 通常只需几秒
已保存 dog.png(透明,全分辨率)快速开始
复制、粘贴,替换 YOUR_API_KEY。每个示例都会把结果直接保存为文件,JavaScript 和 Python 示例还会处理 202 并等待结果。
curl -X POST https://removebackground.dev/v1/remove \
-H 'x-api-key: YOUR_API_KEY' \
-F 'image_file=@photo.jpg' \
-o photo-no-bg.png发送图片
POST /v1/remove 支持四种方式传入图片。任选其一发送;如果一个请求包含多种,优先使用 image_file,其次是 image_file_b64,然后是 image_url,最后是原始请求体。这些示例从 REMOVEBG_API_KEY 环境变量读取密钥(用 export REMOVEBG_API_KEY=… 设置);注意要使用双引号,这样 shell 才会替换变量。
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@photo.jpg' \
-o photo-no-bg.pngMultipart 表单数据,字段为 image_file。JPG、PNG 或 WebP,最大 25 MB。
每个示例都会把响应体保存为文件。只有状态码为 200 时,该文件才是图片;参见处理响应。
处理响应
大多数单张图片会在同一响应中返回处理结果。当队列异常繁忙、某张图片耗时超过约 55 秒时,你会收到 202 Accepted 和一个任务 id。任务会继续运行:用该 id 获取结果。重新发送图片会创建第二个任务,并可能多消耗一个点数。
| 状态码 | 响应体 | 如何处理 |
|---|---|---|
200 | 图片(image/png、image/jpeg 或 image/webp) | 保存它。根据 Content-Type 选择文件扩展名。 |
202 | JSON:{ id, status, status_url, result_url } | 不是图片。等待几秒,然后对 result_url 发起 GET 请求。不要重新发送图片。 |
4xx / 5xx | JSON:{ "error": { "code", "message" } } | 不是图片。读取错误码(参见“错误”),不要把响应体保存为图片。 |
完整示例
处理已完成的图片、202、失败的任务以及本地超时。图片只发送一次,只对安全的状态查询进行重试。
import os
import time
import uuid
import requests
API = "https://removebackground.dev"
KEY = os.environ["REMOVEBG_API_KEY"] # keep the key on your server
EXT = {"image/png": ".png", "image/jpeg": ".jpg", "image/webp": ".webp"}
def save(res, stem):
"""Save an image response with the right extension; raise on anything else."""
mime = res.headers.get("Content-Type", "").split(";")[0]
if res.status_code != 200 or mime not in EXT:
raise RuntimeError(f"HTTP {res.status_code}: {res.text[:500]}")
path = stem + EXT[mime]
with open(path, "wb") as f:
f.write(res.content)
return path
def remove_background(image_url, stem="result", max_wait=300):
s = requests.Session()
s.headers["x-api-key"] = KEY
# One key per image: resending with the same key returns the same job, never a second
# charge, so this POST is safe to retry after a timeout or a dropped connection.
idem = {"Idempotency-Key": str(uuid.uuid4())}
for attempt in range(3):
try:
res = s.post(f"{API}/v1/remove", data={"image_url": image_url}, headers=idem, timeout=(10, 120))
break
except requests.ConnectionError:
if attempt == 2:
raise
time.sleep(2)
if res.status_code != 202:
return save(res, stem) # 200 = the image; anything else raises
# 202: still processing. Wait for the same job; never send the image again.
job_id = res.json()["id"]
deadline = time.monotonic() + max_wait
while time.monotonic() < deadline:
time.sleep(2) # the API sends Retry-After: 2
res = s.get(f"{API}/v1/jobs/{job_id}/result", timeout=30)
if res.status_code == 409 and res.json()["error"]["code"] == "not_ready":
continue
return save(res, stem) # the image, or the job's own error
raise TimeoutError(f"Job {job_id} is still running. Check it later at /v1/jobs/{job_id}.")
print(remove_background("https://example.com/photo.jpg"))需要 Python 3 和 requests(pip install requests)。
- 停止你的脚本并不会停止任务;任务仍可能完成并被扣费。其结果会出现在你的作品库中。
- 超时时间由你自行决定,并非我们的承诺;大多数图片几秒内即可完成。
- 兼容 remove.bg 的端点行为不同:它从不返回 202(见下文)。
身份验证
在 x-api-key 请求头中发送你的 API 密钥。在你的账户页面创建和撤销密钥;每次调用都会消耗该账户的点数。所有端点都位于 https://removebackground.dev 下,并接受 CORS 请求,但 CORS 并不意味着可以把密钥放在网页中:请将其保存在你的服务器上(参见安全)。错误以 JSON 返回:{ "error": { "code": "…", "message": "…" } }。
完整的接口约定以 OpenAPI 3.1 (openapi.json) 发布,可用于客户端生成器、Postman 或测试;AI 编程助手可以从 llms.txt 开始。
POST /v1/remove
实时。去除一张图片的背景。通常处理好的图片就是响应体(image/png、image/jpeg 或 image/webp),一般只需几秒。参数可以是表单字段、JSON 键或查询字符串参数;你也可以直接 POST 原始图片字节,并设置 Content-Type: image/jpeg、image/png、image/webp 或 application/octet-stream。最大 25 MB。各输入方式详见发送图片。
| 参数 | 类型 | 说明 |
|---|---|---|
image_file | file | 图片(JPG、PNG 或 WebP),以 multipart 表单数据发送。 |
image_file_b64 | string | base64 格式的图片,可带或不带 data:image/…;base64, 前缀(解码后最大 25 MB)。适合在 JSON 中使用。 |
image_url | string | 图片的公开 http(s) URL。我们会下载它(最多 3 次重定向,15 s)。如果同时发送多个,优先使用 image_file,其次是 image_file_b64,然后是 image_url,最后是原始请求体。 |
format | png | jpg | webp | 输出格式。默认为 png。JPG 不支持透明:会以 bg_color 或白色作为底色合成。 |
bg_color | 颜色 | 填充背景:十六进制(ffffff、#fff)、rgb(255, 255, 255),或 white、black、red、green、blue、yellow、gray / grey。transparent(默认)保持透明。 |
size | preview | medium | hd | full | 像素上限(百万像素),保持宽高比,绝不放大:preview ≤ 0.25 MP,medium ≤ 1.5 MP,hd ≤ 4 MP,full(默认)为原始分辨率(最高 25 MP)。设置了 width 或 height 时忽略。 |
crop | true | false | W:H | 裁剪到主体的边界框。指定宽高比(1:1、4:5、4:3、16:9…)时,边界框会围绕主体扩展(绝不缩小)到该比例;超出原图的区域为透明(或 bg_color)。默认为 false。 |
padding | px | 小数 | % | 配合 crop 使用:每边增加的边距。0.1 或 10% = 主体宽度(左/右)和高度(上/下)的十分之一;"10%,7.5%" 分别设置水平和垂直边距;24px(或大于 1 的纯整数)表示像素,最大 500。默认为 0。 |
channels | rgba | rgb | alpha | rgba(默认):透明抠图。rgb:不透明,以 bg_color 或白色作为底色合成。alpha:灰度 PNG 蒙版(白色 = 主体),尺寸和裁剪与抠图相同。type=mask 仍可作为 alpha 的别名使用。 |
width / height | 1–6000 | 精确的输出尺寸(像素),在裁剪之后应用(覆盖 size)。只设置其中一个时,另一个按宽高比自动计算。绝不拉伸。 |
roi | x1 y1 x2 y2 | 感兴趣区域,单位为 px 或 %(例如 0% 0% 50% 100%)。仅保留区域内的主体;区域外的一切都会成为背景。坐标基于原始图片。默认:整张图片。 |
fit | contain | cover | scale-down | 配合 width 和 height 使用。contain(默认):完整放入并居中,其余部分透明(或 bg_color)。cover:填满整个框,围绕主体裁掉溢出部分。scale-down:类似 contain,但绝不放大。 |
选项按以下顺序应用:roi,size(或之后的 width/height),crop + padding + 宽高比,width/height + fit,然后是 channels 或背景颜色,最后是 format。所有选项都只消耗同样的 1 点数。未知参数会被忽略。
示例:白底高清 JPG,裁剪到主体并留 40 px 边距
curl -X POST https://removebackground.dev/v1/remove \
-H 'x-api-key: YOUR_API_KEY' \
-F 'image_file=@product.jpg' \
-F 'bg_color=ffffff' \
-F 'format=jpg' \
-F 'size=hd' \
-F 'crop=true' \
-F 'padding=40' \
-o product-no-bg.jpg示例:电商平台方形主图,主体居中并留 10% 边距
curl -X POST https://removebackground.dev/v1/remove \
-H 'x-api-key: YOUR_API_KEY' \
-F 'image_file=@product.jpg' \
-F 'crop=1:1' -F 'padding=10%' \
-F 'width=1000' -F 'height=1000' \
-F 'format=jpg' -F 'bg_color=white' \
-o product-square.jpg示例:输入 base64,输出 Alpha 蒙版
printf '{"image_file_b64":"%s","channels":"alpha"}' "$(base64 < portrait.jpg | tr -d '\n')" > request.json
curl -X POST https://removebackground.dev/v1/remove \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data-binary @request.json \
-o portrait-mask.png200 OK
图片字节,并附带以下响应头:
| 响应头 | 含义 |
|---|---|
X-Image-Width / X-Image-Height | 结果的尺寸(像素)(也会以 X-Width / X-Height 发送)。 |
X-Request-ID | 你发送的 X-Request-ID(如有),否则为生成的 id。联系支持时请提供该值。 |
X-Processing-Time-Ms | 处理请求所花的时间(也会以 X-Processing-Ms 发送)。 |
X-Matte-Confidence | 0–1:蒙版的确定程度(所有像素 |2a − 1| 的平均值,a = alpha)。接近 1 表示抠图干净;数值越低,表示柔和或不确定的边缘越多。 |
X-Matte-Ambiguous-Ratio | alpha 严格介于 0.1 和 0.9 之间的像素占比(头发、玻璃、运动模糊)。可用于标记需要人工检查的图片。 |
X-Credits-Remaining | 处理此图片后的余额。 |
X-Removal-Id | 已存储结果的 id。 |
X-Job-Id | 该请求对应任务的 id(可用于 /v1/jobs/:id)。 |
202 Accepted(队列较长时的后备方案)
如果图片在约 55 秒内未完成(例如队列异常繁忙时),你会收到 202 和 JSON { id, status, status_url, result_url }(以及 Location 和 Retry-After: 2)。轮询 status_url 直到 done 为 true,然后下载 result_url。只有图片处理成功时才扣费一次。没有 Idempotency-Key 时不要重新发送图片:那会创建第二个任务。完整示例参见处理响应。
GET /v1/jobs/:id
由 /v1/remove 或 /v1/batch 创建的任务的状态。使用同一个密钥;你只能看到自己的任务。
| 字段 | 含义 |
|---|---|
status | queued、processing、succeeded、partial、failed 或 canceled |
done | 没有待处理内容时为 true |
total, succeeded, failed, skipped | 图片数量统计 |
credits_charged | 该任务消耗的点数(每张成功的图片 1 点数) |
status_url, result_url | 轮询地址和下载地址 |
items[] | 每张图片:position、input、status、error { code, message },成功时还包括 removal_id、width、height、format、result_url |
GET /v1/jobs/:id/result
已完成任务的图片字节,响应头与 /v1/remove 相同。?item=N 用于选择批次任务中的某张图片(默认为 0)。任务仍在运行时返回 409 not_ready 和 Retry-After: 2;如果图片失败,则返回该图片自身的错误。
POST /v1/batch
将最多 100 个图片 URL 作为一个任务排队:JSON { "image_urls": ["https://…", …], "format": "jpg", "bg_color": "ffffff", "size": "hd", "crop": "1:1", "padding": "10%" },支持与 /v1/remove 相同的选项(包括 channels、width、height 和 fit)。立即返回 202 和 { id, status, total, invalid, duplicates, status_url }。轮询任务,然后获取每个条目的 result_url。每张成功的图片 1 点数;每个账户最多同时有 3 个未完成的批次任务。包含示例响应的完整演练见批次完整流程。
兼容 remove.bg 的端点
remove.bg 的自助 API 将于 1 December 2026, 09:00 CET 停止服务(公告)。现有的 remove.bg 集成只需修改一行即可在这里使用:https://api.remove.bg/v1.0/removebg → https://removebackground.dev/v1.0/removebg,并在同一个 X-Api-Key 请求头中使用 removebackground.dev 密钥。与 /v1/remove 使用相同的队列、相同的每张成功图片 1 点数、相同的输出质量。迁移指南。
POST /v1.0/removebg
使用 remove.bg 参数名的 multipart、urlencoded 或 JSON 请求体。返回图片字节和 remove.bg 的响应头;发送 Accept: application/json 时返回 { "data": { "result_b64", "foreground_top", "foreground_left", "foreground_width", "foreground_height" } }。错误采用 remove.bg 的格式:{ "errors": [{ "title", "code", "detail" }] }。与 /v1/remove 不同,它从不返回 202:它最多等待 110 秒,然后返回 503 超时。任务会继续运行,成功时扣费,因此重试该请求会创建第二个任务。
| 参数 | 状态码 | 说明 |
|---|---|---|
image_file / image_file_b64 / image_url | 支持 | 支持 multipart、urlencoded 或 JSON 请求体。JPG、PNG 或 WebP,最大 25 MB。 |
size | 支持 | auto、full、4k 和 50MP 返回原始分辨率(最高 25 MP);preview、small 和 regular 约 0.25 MP;medium 1.5 MP;hd 4 MP。始终消耗 1 点数。 |
format | 支持 | auto(有透明区域时为 PNG,否则为 JPG)、png、jpg、webp 和 zip(color.jpg + alpha.png)。 |
crop / crop_margin | 支持 | 以 px 或主体的 % 表示,1–4 个 CSS 风格的值("10% 20%" = 垂直、水平);每边最多 500px 或 50%。 |
roi | 支持 | "x1 y1 x2 y2",单位为 px 或 %:仅保留区域内的主体。 |
scale / position | 支持 | scale 为 10%–100% 或 original;position 为 center、original 或 "x% y%"。 |
channels | 支持 | rgba(抠图)或 alpha(灰度蒙版)。 |
bg_color | 支持 | 十六进制颜色,带或不带 #(81d4fa),或颜色名称。8 位十六进制值会保留颜色并丢弃其 alpha。 |
bg_image_url / bg_image_file | 支持 | 抠图会叠加在你的背景图片上,背景图片以 cover 方式适配输出尺寸。 |
Accept: application/json | 支持 | 返回 { data: { result_b64, foreground_top, foreground_left, foreground_width, foreground_height } }。 |
type / type_level | 接受但忽略 | 主体会被自动识别;X-Type 始终为 "other"。 |
semitransparency | 接受但忽略 | 柔和边缘和半透明区域直接来自模型生成的蒙版。 |
shadow_type / shadow_opacity / add_shadow | 接受但忽略 | 不添加阴影。 |
长时间运行的请求 | 有差异 | 我们最多等待 110 秒;如果届时图片仍未就绪,你会收到可重试的 503(除非处理完成,否则不扣费)。 |
示例
curl -H "X-Api-Key: $REMOVEBG_API_KEY" \
-F 'image_file=@photo.jpg' -F 'size=auto' \
-F 'crop=true' -F 'crop_margin=10%' -F 'bg_color=ffffff' \
-o no-bg.jpg https://removebackground.dev/v1.0/removebg响应头
| 响应头 | 含义 |
|---|---|
X-Width / X-Height | 结果的尺寸(像素)。 |
X-Credits-Charged | 该图片消耗的点数:始终为 1(失败的图片为 0)。 |
X-Type | 始终为 "other"(主体自动识别)。 |
X-Foreground-Top / -Left / -Width / -Height | 结果中主体的边界框,单位为像素。 |
X-Request-ID | 回传你的 X-Request-ID,或一个生成的 id。额外提供。 |
X-Matte-Confidence / X-Matte-Ambiguous-Ratio | 蒙版的干净程度(0–1),以及柔和像素的占比。额外提供:可用于标记需要人工检查的图片。 |
错误
| 状态码 | 含义 |
|---|---|
400 | 参数或图片无效(错误码如 invalid_size、invalid_crop_margin、missing_source、file_too_large、unknown_foreground)。 |
402 | insufficient_credits:请在价格页面充值。 |
403 | auth_failed:X-Api-Key 缺失或无效。 |
429 | rate_limit_exceeded。 |
500 / 503 | 处理失败、超时或服务暂时不可用。请重试;失败的图片免费。 |
GET /v1.0/account
以 remove.bg 账户格式返回的余额:{ "data": { "attributes": { "credits": { "total", "subscription": 0, "payg", "enterprise": 0 }, "api": { "free_calls": 0, "sizes": "all" } } } }。所有点数都是按需充值且永不过期,因此 total 等于 payg。使用你的 X-Api-Key 调用 GET https://removebackground.dev/v1.0/account。
错误(/v1 端点)
失败的图片从不扣费。
| 状态码 | 错误码 | 含义 |
|---|---|---|
400 | missing_image, invalid_url, invalid_body, invalid_json, invalid_image_b64, invalid_format, invalid_bg_color, invalid_size, invalid_crop, invalid_padding, invalid_type, invalid_channels, invalid_width, invalid_height, invalid_fit, invalid_roi, fetch_failed, fetch_timeout, rejected, too_many_images, invalid_images | 请求或图片 URL 无法使用。 |
401 | unauthorized | x-api-key 缺失、错误或已撤销。 |
402 | insufficient_credits, out_of_credits | 你的余额为零。请在价格页面充值。 |
404 | not_found | 没有该任务(或该任务不属于你)。 |
409 | not_ready, canceled, idempotency_key_reused | 任务仍在运行时调用了 GET …/result(2 s 后重试)、任务已被取消,或 Idempotency-Key 被用于不同的请求。 |
410 | result_unavailable | 结果已被删除或已过期。 |
413 | too_large | 图片超过 25 MB。 |
422 | processing_failed, invalid_image, missing_upload | 该文件不是可读取的图片。不扣费。 |
429 | rate_limited, too_many_batches | 超出每个账户的请求频率限制(等待 Retry-After),或你已有 3 个批次任务正在运行。 |
502 | model_unavailable, upstream_error, … | 多次重试后仍无法处理该图片。不扣费。 |
503 | server_paused, unavailable | API 已暂停(上线前)或暂时不可用。请稍后重试。 |
批次完整流程
1. 提交
curl -X POST https://removebackground.dev/v1/batch \
-H "x-api-key: $REMOVEBG_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "image_urls": ["https://example.com/front.jpg", "https://example.com/back.jpg"], "format": "png", "size": "hd" }'最多 100 个公开图片 URL,以及任意 /v1/remove 选项。上面的两个占位 URL 如果是真实图片,最多会消耗 2 点数。响应会立即返回:
202 Accepted
{
"id": "3f6c2a9e-8d1b-4c7a-9e2f-5b8d0a1c4e77",
"status": "queued",
"total": 2,
"invalid": 0,
"duplicates": 0,
"status_url": "https://removebackground.dev/v1/jobs/3f6c2a9e-8d1b-4c7a-9e2f-5b8d0a1c4e77"
}invalid 统计不是 http(s) URL 的条目,duplicates 统计重复项;两者都会被丢弃,且不会扣费。请保存 id:重启后要靠它重新获取任务。
2. 轮询任务
每隔几秒调用 GET /v1/jobs/:id,直到 done 为 true。status 从 queued 变为 processing,最终为 succeeded、partial(部分图片失败)或 failed。正在重试的条目显示为 retrying。
{
"id": "3f6c2a9e-…",
"status": "partial",
"done": true,
"total": 2, "succeeded": 1, "failed": 1, "skipped": 0,
"credits_charged": 1,
"items": [
{ "position": 0, "input": "https://example.com/front.jpg", "status": "succeeded",
"removal_id": "…", "width": 1600, "height": 1200, "format": "png",
"result_url": "https://removebackground.dev/v1/jobs/3f6c2a9e-…/result?item=0" },
{ "position": 1, "input": "https://example.com/back.jpg", "status": "failed",
"error": { "code": "fetch_failed", "message": "…" } }
]
}3. 下载每个结果
对每个成功的条目调用 GET /v1/jobs/:id/result?item=N(或使用其 result_url)。item 是从零开始的 position。位置按你的列表在移除无效和重复 URL 之后排列,因此当任一计数大于 0 时,请按 input 而不是按索引匹配结果。
- 一旦
done为 true,该批次就不再计入 3 个未完成批次的限制。 - API 没有取消端点、webhook 或 ZIP 下载。在批量处理页面启动的批次可以在该页面取消或下载为 ZIP。
重试、重复与计费
发送 Idempotency-Key,重试就不会重复扣费。在 POST /v1/remove 或 POST /v1/batch 中添加 Idempotency-Key 请求头(任意唯一字符串,最长 255 个字符,例如 UUID),每张图片或每个批次一个键。如果你用相同的键再次发送相同的请求,会得到第一次请求创建的任务,并带有 Idempotent-Replayed: true:不会创建新任务,也不会再次扣费,即使第一次请求仍在运行。相同的键配合不同的图片或选项会返回 409 idempotency_key_reused。键归属于你的账户,不会过期。
不带键时,每个 POST 都会创建一个新任务,每个成功的任务消耗 1 点数(兼容 remove.bg 的 POST /v1.0/removebg 不支持键)。读取任务(GET /v1/jobs/…)始终免费,可以放心重复调用。
IDEMPOTENCY_KEY=$(uuidgen) # one per image; send the same one on every retry
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-F 'image_file=@photo.jpg' \
-o photo-no-bg.png哪些情况消耗点数
| 情况 | 费用 |
|---|---|
| 请求在处理前被拒绝(密钥错误、选项错误、文件过大、点数不足) | 免费。 |
| 图片无法处理(422 图片无效,或我们重试后仍返回 502) | 免费。 |
| 图片处理成功 | 1 点数,成功时扣一次。我们内部的重试不会额外扣费。 |
| 你收到 202 | 暂不扣费。任务继续运行,只有成功时才扣 1 点数。 |
| 你的客户端在等待时超时或断开连接 | 任务继续运行,成功时扣费。结果会出现在你的作品库中。 |
| 你用相同的 Idempotency-Key 发送了两次相同的请求 | 只有一个任务,最多 1 点数。重复请求会得到同一个任务(响应头 Idempotent-Replayed: true)。 |
| 你在不带键的情况下发送了两次相同的图片 | 两个独立任务;每个成功的任务消耗 1 点数。 |
| 你再次下载已完成的结果 | 免费,在存储期间可随意下载。 |
| 批次部分成功 | 每张成功的图片 1 点数;任务中的 credits_charged 显示总计。 |
| 批次中同一个 URL 出现两次 | 同一批次内的重复项会在排队前被丢弃,不会扣费。不同批次中的相同 URL 是独立的任务。 |
| 批次处理过程中点数用完 | 已完成的图片照常计费;其余图片标记为已跳过(out_of_credits),不扣费。购买点数后,把剩余的 URL 作为新批次发送。 |
何时重试
| 发生了什么 | 如何处理 |
|---|---|
| GET /v1/jobs/:id 或 …/result 失败(网络错误、5xx) | 可以放心重试:读取任务不会创建新工作,也不会扣费。重试之间稍作退避。 |
| GET …/result 返回 409 not_ready | 等待 Retry-After(2 s)后再次请求。不要重新提交图片。 |
| GET …/result 返回 410 result_unavailable | 存储的结果已被删除。重新处理图片会创建新任务,并消耗 1 点数。 |
| POST 返回 400、413 或 422 | 先修正请求或图片;原样重新发送会得到相同的结果。 |
| POST 返回 401 或 402 | 修正密钥或充值。不要循环重试。 |
| POST 返回 429 rate_limited | 等待 Retry-After 中的秒数后再次发送(使用相同的 Idempotency-Key)。每分钟超过 60 张图片?请使用 POST /v1/batch:一个请求最多 100 张。 |
| POST /v1/batch 返回 429 too_many_batches | 等待你的 3 个未完成批次之一完成(轮询它),然后再提交。 |
| POST /v1/… 返回 503(unavailable、server_paused) | 未创建任务。稍等片刻后重试。(兼容 remove.bg 的端点不同:它的 503 超时表示任务仍在运行。) |
| POST /v1/remove 返回 502 | 该任务失败,未扣费。重试会创建一个新任务。 |
| POST 超时、连接断开或收到 500 | 如带有 Idempotency-Key:用相同的键重新发送相同的请求,会得到原任务。如没有键,任务可能已经存在并可能被扣费:请先查看你的作品库。 |
| POST 返回 409 idempotency_key_reused | 该键已用于不同的图片或选项。每张新图片请使用新的键。 |
限制与存储
| 限制项 | 值 | 超出时的错误 |
|---|---|---|
| 图片文件 | 25 MB(25 × 1024 × 1024 字节);JPG、PNG 或 WebP,根据文件字节识别 | 413 too_large · 422 processing_failed |
| Base64 / JSON 请求体 | 解码后 25 MB(请求体可能大约多出三分之一) | 413 too_large |
| 输入分辨率 | 超过 25 MP 的图片在处理前会缩小到 25 MP | — |
| 输出尺寸 | 宽度和高度均为 1–6000 px | 400 invalid_width / invalid_height |
| image_url 下载 | 仅限 http(s),15 s 超时,最多 3 次重定向;私有地址、回环地址和链路本地地址在每次重定向时都会被拒绝 | 400 invalid_url · fetch_failed · fetch_timeout |
| 在 POST /v1/remove 中等待 | 约 55 s,之后返回 202 和任务 id | 202 |
| 批次大小 | 每个 POST /v1/batch 最多 100 个图片 URL | 400 too_many_images |
| 未完成批次 | 每个账户最多 3 个未完成的多图任务(单张图片不计入) | 429 too_many_batches |
| 请求频率 | 每个账户每分钟 60 个请求,POST /v1/remove、/v1/batch 和 /v1.0/removebg 合并计算。一个批次无论大小只计一次。读取任务不受限制 | 429 rate_limited(带 Retry-After) |
结果保留多久
每个结果在生成后都会私密保存在你的账户中 48 小时,之后删除。在此之前,你可以通过 GET /v1/jobs/:id/result 或在作品库中免费再次下载。 此后,结果链接会返回 410 result_unavailable;重新处理图片会创建新任务。图片删除后,任务状态记录仍可读取。上传文件的处理方式请参阅隐私政策;我们不会使用你的图片训练模型。
安全
请将 API 密钥保存在你自己控制的服务器上。不要把它放进浏览器代码、移动应用、公开代码仓库或 URL 中。如需让你的用户去除背景,请通过你的后端转发他们的图片,并在后端添加你自己的登录验证和消费限额。
- API 允许 CORS,以便在各类工具和服务器端代码中使用。但这并不意味着可以把密钥放在网页中:任何人都能在网页里读取它。
- 同一账户下的所有密钥共用同一点数余额。请在账户页面为每个应用或环境分别创建密钥,这样撤销其中一个时不会影响其他密钥。
- 如果密钥泄露,请立即在账户页面撤销它(会立即失效),然后创建一个新密钥。我们只存储每个密钥的哈希值,因此无法再次向你显示密钥。
故障排查
| 现象 | 原因 |
|---|---|
| 我的 PNG 打不开 | 响应体是 JSON(202 任务或错误),而不是图片。保存前请检查 HTTP 状态码和 Content-Type。 |
| 我的脚本超时了,但图片出现在作品库中 | 你停止等待后任务仍在继续运行。请用任务 id 获取结果,而不是重新发送。 |
| 一张图片被扣了两次费 | 它在没有 Idempotency-Key 的情况下被发送了两次(通常是超时后的自动重试)。每张图片使用一个键,并在重试时复用。 |
| URL 在我的浏览器中能打开,但 API 无法获取 | 该主机可能需要 Cookie 或登录、屏蔽服务器访问、重定向超过 3 次、耗时超过 15 s,或签名 URL 已过期。请改为上传文件。 |
| 我的批次中途停止了 | 查看任务中的 items[]:失败的条目带有错误码;带 out_of_credits 的已跳过条目表示余额已用完。 |
| 某个选项似乎不起作用 | 未知的参数名会被静默忽略。请对照参数表检查拼写。在 /v1.0/removebg 上,部分 remove.bg 选项会被接受但忽略(参见该表)。 |
| 背景不是透明的 | JPG 不支持透明。请使用 format=png 或 webp,并且不要设置 bg_color。 |
| 结果链接返回 410 | 存储的结果已被删除。重新处理需消耗 1 点数。 |