背景削除 API:リクエスト 1 回で、完成した PNG を返却。
ファイルのアップロード、公開画像 URL の送信、base64 の指定に対応しています。ほとんどの単一画像は、同じ HTTP レスポンスで完成した状態で返ってきます。通常は数秒です。時間がかかる場合はジョブ ID が返されるので、画像を再送信せずに結果を取得できます。大量処理にはバッチエンドポイントを使用できます。
成功した画像 1 枚につき 1 クレジット · 失敗した画像は無料 · APIキーはアカウントで発行
$ 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 は 4 つの方法で画像を受け付けます。いずれか 1 つを送信してください。1 つのリクエストに複数含まれている場合は、image_file、image_file_b64、image_url、生のボディの順に優先されます。これらの例では、キーを環境変数 REMOVEBG_API_KEY から読み込みます(export REMOVEBG_API_KEY=… で設定)。シェルが値を展開できるよう、ダブルクォートを使っている点に注意してください。
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@photo.jpg' \
-o photo-no-bg.pngマルチパートフォームデータ、フィールド名 image_file。JPG、PNG、WebP で最大 25 MB。
どの例もボディをファイルに保存します。そのファイルが画像になるのはステータスが 200 の場合だけです。レスポンスを処理するをご覧ください。
レスポンスを処理する
ほとんどの単一画像は、同じレスポンスで完成した状態で返ってきます。キューが特に混雑していて、画像の処理に約 55 秒以上かかる場合は、代わりにジョブ ID 付きの 202 Accepted が返されます。ジョブは引き続き実行されるので、ID を使って結果を取得してください。画像を再送信すると 2 つ目のジョブが開始され、2 クレジット目が消費される可能性があります。
| ステータス | ボディ | 対応方法 |
|---|---|---|
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" } } | 画像ではありません。code を確認し(「エラー」を参照)、ボディを画像として保存しないでください。 |
完全な例
完成した画像、202、失敗したジョブ、ローカルの時間制限をすべて処理します。画像の送信は 1 回だけで、再試行するのは安全なステータス確認のみです。
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 を返すことはありません(下記参照)。
認証
APIキーを x-api-key ヘッダーで送信してください。キーの作成と無効化はアカウントページで行えます。すべての呼び出しで、そのアカウントのクレジットが消費されます。すべてのエンドポイントは https://removebackground.dev 配下にあり、CORS リクエストを受け付けますが、CORS があるからといってウェブページにキーを埋め込んでも安全なわけではありません。キーはサーバーに保管してください(セキュリティを参照)。エラーは JSON です:{ "error": { "code": "…", "message": "…" } }。
完全な仕様は OpenAPI 3.1(openapi.json)として公開しており、クライアント生成ツール、Postman、テストに利用できます。AI コーディングアシスタントは llms.txt から始められます。
POST /v1/remove
リアルタイム。1 枚の画像の背景を削除します。通常、完成した画像がレスポンスボディ(image/png、image/jpeg または image/webp)として返され、所要時間は通常数秒です。パラメーターはフォームフィールド、JSON キー、クエリ文字列の値のいずれでも指定できます。また、Content-Type: image/jpeg、image/png、image/webp または application/octet-stream で生の画像バイトを POST することもできます。最大 25 MB。各入力方法については画像を送信するをご覧ください。
| パラメーター | 型 | 説明 |
|---|---|---|
image_file | file | 画像(JPG、PNG または WebP)。マルチパートフォームデータで送信します。 |
image_file_b64 | string | base64 形式の画像。data:image/…;base64, プレフィックスの有無は問いません(デコード後 25 MB)。JSON から送信する場合に便利です。 |
image_url | string | 画像の公開 http(s) URL。当社がダウンロードします(リダイレクトは最大 3 回、15 秒)。複数送信された場合は、image_file、image_file_b64、image_url、生のボディの順に優先されます。 |
format | png | jpg | webp | 出力形式。デフォルトは png。JPG は透過に対応していないため、bg_color または白で塗りつぶされます。 |
bg_color | 色 | 背景を塗りつぶします:16 進数(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 分の 1。"10%,7.5%" で水平方向と垂直方向を個別に指定できます。24px(または 1 より大きい整数のみ)はピクセル単位で、最大 500。デフォルトは 0。 |
channels | rgba | rgb | alpha | rgba(デフォルト):透過の切り抜き。rgb:不透明、bg_color または白で塗りつぶし。alpha:グレースケールの PNG マスク(白 = 被写体)、切り抜きと同じサイズ・トリミング。type=mask も alpha の別名として引き続き使用できます。 |
width / height | 1–6000 | ピクセル単位の正確な出力サイズ。crop の後に適用されます(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 クレジットです。不明なパラメーターは無視されます。
例:白背景の HD 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 を入力し、アルファマスクを出力
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 = アルファ)。1 に近いほどきれいな切り抜きで、値が低いほど柔らかい、または不確かな輪郭が多いことを示します。 |
X-Matte-Ambiguous-Ratio | アルファ値が 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)が返されます。done が true になるまで status_url をポーリングし、その後 result_url をダウンロードしてください。課金は画像の処理に成功した場合に 1 回だけです。Idempotency-Key なしで画像を再送信しないでください。2 つ目のジョブが開始されます。完全な例はレスポンスを処理するをご覧ください。
GET /v1/jobs/:id
/v1/remove または /v1/batch で作成されたジョブのステータス。同じキーを使用し、表示されるのは自分のジョブのみです。
| フィールド | 意味 |
|---|---|
status | queued、processing、succeeded、partial、failed または canceled |
done | 実行する処理が残っていなければ true |
total, succeeded, failed, skipped | 画像の件数 |
credits_charged | このジョブで使用したクレジット(成功した画像 1 枚につき 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)。処理中は Retry-After: 2 付きの 409 not_ready を、失敗した場合はその画像のエラーを返します。
POST /v1/batch
最大 100 件の画像 URL を 1 つのジョブとしてキューに追加します: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 枚につき 1 クレジット。アカウントあたり未完了のバッチジョブは最大 3 件です。レスポンス例付きの手順はバッチの最初から最後までをご覧ください。
remove.bg 互換エンドポイント
remove.bg のセルフサービス API は 1 December 2026, 09:00 CET に終了します(発表)。既存の remove.bg の連携は、1 行変更するだけでここで動作します:https://api.remove.bg/v1.0/removebg → https://removebackground.dev/v1.0/removebg。同じ X-Api-Key ヘッダーで removebackground.dev のキーを送信してください。キュー、成功した画像 1 枚につき 1 クレジットの料金、出力品質は /v1/remove と同じです。移行ガイド。
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 timeout を返します。ジョブは引き続き実行され、成功した場合は課金されるため、そのリクエストを再試行すると 2 つ目のジョブが開始されます。
| パラメーター | ステータス | 備考 |
|---|---|---|
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 または %、CSS 形式で 1~4 個の値("10% 20%" = 上下、左右)。各辺最大 500px または 50%。 |
roi | 対応 | px または % で "x1 y1 x2 y2":領域内の被写体のみが残ります。 |
scale / position | 対応 | scale は 10%~100% または original。position は center、original または "x% y%"。 |
channels | 対応 | rgba(切り抜き)または alpha(グレースケールのマスク)。 |
bg_color | 対応 | # の有無を問わない 16 進数(81d4fa)、または色名。8 桁の 16 進数の場合、色は維持され、アルファ値は無視されます。 |
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 秒後に再試行)、ジョブがキャンセルされた、または 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 の任意のオプションを送信します。上記の 2 つのプレースホルダー 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. ジョブをポーリング
done が true になるまで、数秒ごとに GET /v1/jobs/:id を呼び出します。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 は 0 から始まる position です。位置は無効な URL と重複した URL を除いた後のリストの順序に従うため、どちらかの数が 0 より大きい場合は、インデックスではなく input で結果を照合してください。
doneが true になると、そのバッチは未完了バッチの上限 3 件にカウントされなくなります。- API にはキャンセル用のエンドポイント、Webhook、ZIP ダウンロードはありません。一括処理ページで開始したバッチは、そのページでキャンセルや ZIP でのダウンロードができます。
再試行、重複、課金
Idempotency-Key を送信すれば、再試行で二重に課金されることはありません。POST /v1/remove または POST /v1/batch に Idempotency-Key ヘッダー(UUID など、255 文字以内の一意の文字列)を追加してください。キーは画像またはバッチごとに 1 つです。同じキーで同じリクエストを再送信すると、最初のリクエストで作成されたジョブが 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 クレジットを 1 回だけ課金。当社内部の再試行で課金が増えることはありません。 |
| 202 が返された | まだ課金されません。ジョブは引き続き実行され、成功した場合のみ 1 クレジットが課金されます。 |
| 待機中にクライアントがタイムアウトまたは切断した | ジョブは引き続き実行され、成功した場合は課金されます。結果はスタジオに表示されます。 |
| 同じ Idempotency-Key で同じリクエストを 2 回送信した | ジョブは 1 つで、最大 1 クレジット。2 回目は同じジョブを受け取ります(ヘッダー Idempotent-Replayed: true)。 |
| キーなしで同じ画像を 2 回送信した | 別々の 2 つのジョブになり、成功したジョブごとに 1 クレジットが消費されます。 |
| 完成した結果を再度ダウンロードする | 保存されている間は、何度でも無料です。 |
| バッチの一部が成功した | 成功した画像 1 枚につき 1 クレジット。合計はジョブの credits_charged で確認できます。 |
| バッチに同じ URL が 2 回含まれている | 1 つのバッチ内の重複はキューに入る前に除外され、課金されません。別々のバッチに含まれる同じ URL は、別のジョブとして扱われます。 |
| バッチの途中でクレジットがなくなった | すでに完了した画像は課金済みのままです。残りはスキップ(out_of_credits)となり無料です。クレジットを購入してから、残りの URL を新しいバッチとして送信してください。 |
再試行するタイミング
| 発生した状況 | 対応方法 |
|---|---|
| GET /v1/jobs/:id または …/result が失敗した(ネットワークエラー、5xx) | 安全に再試行できます。ジョブの読み取りで処理が作成されたり課金されたりすることはありません。再試行の間隔を少し空けてください。 |
| GET …/result が 409 not_ready を返した | Retry-After(2 秒)待ってから、もう一度リクエストしてください。画像は再送信しないでください。 |
| GET …/result が 410 result_unavailable を返した | 保存されていた結果は削除されています。画像を再度処理すると新しいジョブとなり、1 クレジットが消費されます。 |
| POST が 400、413 または 422 を返した | 先にリクエストまたは画像を修正してください。変更せずに送信しても同じ応答が返ります。 |
| POST が 401 または 402 を返した | キーを修正するか、チャージしてください。ループで再試行しないでください。 |
| POST が 429 rate_limited を返した | Retry-After の秒数だけ待ってから、(同じ Idempotency-Key で)再送信してください。1 分あたり 60 枚を超える場合は、POST /v1/batch を使用してください。1 回のリクエストで最大 100 枚まで処理できます。 |
| POST /v1/batch が 429 too_many_batches を返した | 3 件の未完了バッチのいずれかが完了するまで(ポーリングして)待ってから送信してください。 |
| POST /v1/… が 503(unavailable、server_paused)を返した | ジョブは作成されていません。少し待ってから再試行してください。(remove.bg 互換エンドポイントは異なり、その 503 timeout はジョブがまだ実行中であることを意味します。) |
| 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(リクエストボディは約 3 分の 1 大きくなる場合があります) | 413 too_large |
| 入力解像度 | 25 MP を超える画像は、処理前に 25 MP に縮小されます | — |
| 出力サイズ | width と height はそれぞれ 1~6000 px | 400 invalid_width / invalid_height |
| image_url のダウンロード | http(s) のみ、タイムアウト 15 秒、リダイレクトは最大 3 回。プライベート、ループバック、リンクローカルのアドレスは、どのリダイレクトでも拒否されます | 400 invalid_url · fetch_failed · fetch_timeout |
| POST /v1/remove での待機 | 約 55 秒、その後ジョブ ID 付きの 202 | 202 |
| バッチサイズ | POST /v1/batch 1 回につき画像 URL 100 件 | 400 too_many_images |
| 未完了のバッチ | アカウントあたり未完了の複数画像ジョブ 3 件(単一画像はカウントされません) | 429 too_many_batches |
| リクエストレート | POST /v1/remove、/v1/batch、/v1.0/removebg の合計で、アカウントあたり 1 分間に 60 リクエスト。バッチはサイズに関係なく 1 回としてカウントされます。ジョブの読み取りには制限はありません | 429 rate_limited(Retry-After 付き) |
結果の保存期間
すべての結果は作成後 48 時間、アカウントに非公開で保存され、その後削除されます。それまでは GET /v1/jobs/:id/result またはスタジオから無料で再ダウンロードできます。 それ以降、結果のリンクは 410 result_unavailable を返します。画像を再度処理すると新しいジョブになります。ジョブのステータス記録は、画像が削除された後も読み取れます。アップロードの取り扱いについてはプライバシーポリシーをご覧ください。当社はお客様の画像をモデルの学習に使用しません。
セキュリティ
APIキーは自分で管理するサーバーに保管してください。ブラウザのコード、モバイルアプリ、公開リポジトリ、URL には含めないでください。自社のユーザーに背景削除を提供する場合は、画像をバックエンド経由で送信し、そこで独自のログインと利用上限を設定してください。
- API はツールやサーバー側のコードから利用できるよう CORS を許可しています。ただし、ウェブページにキーを埋め込んでも安全になるわけではありません。誰でもそこからキーを読み取れます。
- アカウント内のすべてのキーは同じクレジット残高を消費します。アカウントページでアプリや環境ごとに別々のキーを作成すれば、他のキーに影響を与えずに 1 つだけ無効化できます。
- キーが漏えいした場合は、すぐにアカウントページで無効化し(即座に使用できなくなります)、新しいキーを作成してください。当社は各キーのハッシュ値のみを保存しているため、キーを再表示することはできません。
トラブルシューティング
| 症状 | 原因 |
|---|---|
| PNG が開けない | ボディが画像ではなく JSON(202 のジョブまたはエラー)でした。保存する前に HTTP ステータスと Content-Type を確認してください。 |
| スクリプトはタイムアウトしたが、画像がスタジオに表示される | 待機をやめた後もジョブは実行され続けていました。再送信せずに、ジョブ ID で結果を取得してください。 |
| 1 枚の画像で 2 回課金された | Idempotency-Key なしで 2 回送信されました(タイムアウト後の自動再試行が多い原因です)。画像ごとに 1 つのキーを送信し、再試行時にも同じキーを使用してください。 |
| ブラウザでは URL が開けるのに、API では取得できない | ホストが Cookie やログインを必要としている、サーバーからのアクセスをブロックしている、3 回を超えてリダイレクトしている、15 秒以上かかっている、または署名付き URL の有効期限が切れている可能性があります。代わりにファイルをアップロードしてください。 |
| バッチが途中で止まった | ジョブの items[] を確認してください。失敗した項目にはエラーコードがあり、out_of_credits でスキップされた項目は残高がなくなったことを意味します。 |
| オプションが効いていないようだ | 不明なパラメーター名は通知なく無視されます。パラメーター表と照らしてスペルを確認してください。/v1.0/removebg では、一部の remove.bg オプションは受け付けられますが無視されます(その表を参照)。 |
| 背景が透過にならない | JPG は透過に対応していません。format=png または webp を使用し、bg_color は指定しないでください。 |
| 結果のリンクが 410 を返す | 保存されていた結果は削除されています。再度処理すると 1 クレジットが消費されます。 |