Remove Background
去掉图片或视频的背景,每次固定价。
Remove Background(产品 remove_background)去掉图片或视频的背景:图片出透明背景的 PNG,视频出黑色背景的 mp4。一个任务出 1 个结果,每次固定价。
创建任务
https://api.nanoapi.ai/v1/tasks用所有模型共用的创建任务接口,model 传 "remove-background"。接口通常不到 1 秒返回,几秒内冻结费用;任务结束后获取结果。
请求头
| 请求头 | 必填 | 说明 |
|---|---|---|
Authorization | 是 | Bearer <API Key>,见鉴权 |
Content-Type | 是 | application/json |
Idempotency-Key | 否 | 每个新任务一个唯一字符串,建议用 UUID(1–255 个字符),见防止重复创建 |
请求体
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | remove-background |
image_url | string | 二选一 | 要去背景的图片,见素材 |
video_url | string | 二选一 | 要去背景的视频,最长 180 秒,见素材 |
webhook_url | string | 否 | 任务成功或失败时通知该地址:https,最长 2048 字符,不能指向内网、回环或保留地址。见回调 |
image_url、video_url 只能传一个:两个都传或者都没传,返回 400 invalid_request,见错误。
去掉一张图片的背景:
curl https://api.nanoapi.ai/v1/tasks \
-H "Authorization: Bearer $NANOAPI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 3c9e7a1f-5b2d-4e8a-a6c1-9f0d2b7e4a63" \
-d '{
"model": "remove-background",
"image_url": "https://example.com/product.jpg"
}'视频把 image_url 换成 video_url 即可。
响应:200 OK。data 是刚创建的任务,只有下面这几个字段,各字段的含义见创建任务的返回。保存 data.id,用它获取结果。任务创建后仍可能失败(例如余额不够这次的费用),以查询或回调的结果为准。
{
"code": 200,
"message": "success",
"data": {
"object": "task",
"id": "tk_01jbm3r8d5f2h9k6n4p1s7v0x3",
"model": "remove-background",
"status": "queued",
"error": null,
"created_at": "2026-11-03T08:30:00Z"
}
}获取结果
实测从创建到结束的耗时(生成服务忙时会更慢):图片约 30 秒;视频随时长变化,10 秒的约 40 秒,30 秒的约 2 分钟。任务结束(成功或失败)后用下面任一方式拿结果:
- 回调(生产环境推荐):创建时传了
webhook_url,任务结束时会把完整的任务推送一次,见回调。 - 轮询:用
data.id调用GET /v1/tasks/{task_id},间隔 15 秒以上,直到status为succeeded或failed;多个任务用列出任务的ids一次查询。
上面的图片请求成功后(省略了其他字段):
{
"status": "succeeded",
"input": {
"image_url": "https://example.com/product.jpg"
},
"num_outputs": 1,
"outputs": [
{
"index": 0,
"type": "image",
"url": "https://cdn.nanoapi.ai/h/tk_01jbm3r8d5f2h9k6n4p1s7v0x3_1_1793694600.png",
"preview_url": "https://cdn.nanoapi.ai/h/tk_01jbm3r8d5f2h9k6n4p1s7v0x3_1_1793694600_compressed.jpg"
}
],
"billing": {
"currency": "USD",
"frozen": "…", // 每次的价格
"charged": "…", // 一样
"refunded": "0.00",
"billed_seconds": null
}
}| 字段 | Remove Background |
|---|---|
outputs | 1 项 |
outputs[0].type | 传 image_url 时是 image,传 video_url 时是 video |
outputs[0].url | 结果原文件,用于下载。图片:透明背景的 PNG,尺寸和原图一样。视频:黑色背景的 mp4,没有透明通道,也没有音轨 |
outputs[0].preview_url | 用于展示。图片:JPEG 预览图,长边不超过 1024,透明背景铺成白底。视频:压缩版 mp4(h264),宽最多 600。生成不了预览时为 null |
billing.billed_seconds | 一直是 null:按次计费 |
input | 你传的参数 |
失败时冻结的钱全额退回,原因在 data.error.type,见错误。完整的字段见任务对象。
素材
图片或视频以公开的 http(s) 链接提交。不提供上传接口,请自行托管文件。链接最长 4096 字符,必须能直接下载,不能指向 localhost 或内网、回环、保留地址。
图片(image_url) | 视频(video_url) | |
|---|---|---|
| 时长 | – | 最长 180 秒(GET /v1/products 的 limits.max_source_video_seconds) |
| 有问题时 | 生成时才读取,这时已经冻结过费用:下载不了、不是图片或者打不开时任务失败(invalid_media),冻结的钱全额退回 | 同样是 invalid_media。超过 180 秒的视频在提交给生成服务时失败(video_too_long),冻结的钱全额退回 |
任务结束前链接要保持可访问,有有效期的链接也不能提前过期。
价格
费用 = 每次的价格正在读取当前价格…
- 图片和视频同价,视频不论时长。
- 创建后几秒内冻结,成功后扣这个价,失败全额退回。冻结和扣费的通用规则见计费。
当前价格用 GET /v1/products 读取(remove_background 产品的 prices 只有一行,billing_unit 为 task)。价格会调整,不要写死;实际费用以查询任务返回的 billing.frozen 为准。
错误
这个模型特有的错误和失败原因。创建任务的全部错误见创建任务 → 错误,全部失败原因见失败原因。
创建请求出错:请求返回 HTTP 错误,任务不会创建。param 是对应的参数名。
| 状态码 | error.type | 何时出现 | 怎么处理 |
|---|---|---|---|
400 | invalid_request | image_url、video_url 都传了(Provide either image_url or video_url, not both,param 为 "video_url"),或者都没传(image_url or video_url is required,param 为 "image_url") | 只传其中一个 |
400 | invalid_request | 链接不是公开的 http(s) 链接或者超过 4096 字符,或者 num_outputs 不是 1 | 按 param 改正 |
400 | invalid_request | 传了这个模型没有的参数,例如 prompt(Extra inputs are not permitted) | 去掉这个参数 |
创建接口的其他错误(401、402、429 等)见创建任务 → 错误。
任务失败:创建请求成功(200),任务之后变成 failed。这种情况没有 HTTP 状态码,原因在任务的 error.type,通过查询任务或回调拿到。
error.type | 何时出现 | 怎么处理 |
|---|---|---|
insufficient_balance | 可用余额不够这次的价格。创建后几秒内出现,不冻结费用 | 充值后重新创建 |
spend_limit_exceeded | 加上这个任务的费用会超出 Key 的消费限额。创建后几秒内出现,不冻结费用 | 在控制台 → API Keys 调高限额,或者等限额重置后重新创建 |
video_too_long | 视频超过 180 秒(The video duration must be at most 180 seconds.)。提交给生成服务时发现,这时已经冻结过费用,全额退回 | 把视频裁到 3 分钟以内,重新创建 |
invalid_media | 图片或视频下载不了、不是图片或视频,或者打不开(图片的是 The image could not be downloaded. Make sure image_url is publicly downloadable. 或 The image could not be read. It may be corrupted or in an unsupported format.)。生成时才发现,这时已经冻结过费用,全额退回 | 按 error.message 换掉那个文件,重新创建 |
content_policy | 图片或视频不符合内容政策 | 原样重新提交还会失败,请换一个文件 |
generation_failed | 生成失败 | 稍后重新创建 |
queue_timeout / internal_error | 排队超过 30 分钟未开始 / 内部错误 | 稍后重新创建 |
所有失败的任务都已全额退回冻结金额,billing.charged 为 "0.00"。程序判断请用 error.type:括号里的 message 用于展示,措辞可能调整,见每种原因的 message。