写真の背景を手作業で削除すると、1枚あたり数分かかります。アプリにアップロードされるすべての商品画像、プロフィール写真、サムネイルで同じことをするには、背景削除APIが必要です。HTTPリクエストを1回送れば、切り抜き済みの画像が返ってきます。
このガイドでは、背景削除APIを正しく組み込む方法を紹介します。動くcURL、Python、JavaScriptのコード、知っておくべき出力オプション、時間のかかる画像や一括処理の扱い方、二重課金にならないリトライの方法を解説します。コード例では姉妹製品のremovebackground.devを使っていますが、考え方はどのプロバイダーにも当てはまります。
背景削除APIの仕組み
画像を送ると、プロバイダーが被写体と背景を分離するセグメンテーションモデルを実行し、新しい画像が返ってきます。結果の中心になるのはアルファチャンネルです。これはピクセルごとの値で、各ピクセルがどの程度被写体に属するかを示します。完全に不透明なピクセルが被写体、完全に透明なピクセルが背景で、その中間の値が髪の毛、毛皮、ガラスのような柔らかい輪郭を表現します。
このマットから、APIはいくつかの形式で結果を返せます:
- 背景透過の切り抜き画像:通常は背景を削除したPNGまたはWebP
- 単色背景の被写体:白背景が必須のマーケットプレイス向けにJPGに合成したもの
- マスクそのもの:独自の合成パイプラインで使えるグレースケール画像
- 切り抜きまたはリサイズ版:被写体に合わせてトリミングし、指定サイズに収めたもの
リクエスト自体は簡単な部分です。本番環境の組み込みでは、通常より時間がかかる画像、大量のバッチ、レート制限、リトライ、そしてAPIキーをユーザーから隠すことにも対応する必要があります。
背景削除APIを選ぶときのポイント
コードを書く前に、自分の画像とトラフィックに照らして次の点を確認しましょう。
| 基準 | 確認すること | 重要な理由 |
|---|---|---|
| 輪郭の品質 | 自分の画像20〜50枚で、髪の毛、毛皮、透明な物体、ごちゃごちゃした背景を試す | プロバイダーの差は難しいケースで現れる |
| 入力方法 | ファイルアップロード、公開URL、base64、生のバイト | 画像を先にダウンロードせずにキューワーカーから呼び出せるかが決まる |
| 出力オプション | フォーマット、背景色、切り抜き、余白、指定サイズ、マスク出力 | 自分側での2回目の画像処理を省ける |
| 時間のかかる画像 | 画像の処理がHTTPタイムアウトより長くかかった場合の挙動 | ジョブIDがないと、リトライ時に二重に支払う可能性がある |
| 一括処理 | バッチ用エンドポイント、バッチサイズ、一部失敗の報告方法 | カタログ取り込みの処理方法が決まる |
| 課金 | 成功ごとかリクエストごとか、サブスクリプションかクレジットか、クレジットの有効期限 | 大量処理では失敗した画像やリトライの費用がかさむ |
| 制限 | ファイルサイズ、解像度、レート制限、結果の保存期間 | キューとストレージの設計が決まる |
| プライバシー | アップロードと結果の保存期間、画像がモデルの学習に使われるか | 顧客から必須要件として求められることが多い |
ステップ1:APIキーを作成する
removebackground.devでサインアップし、アカウントページでキーを作成します。新規アカウントには50クレジットが無料で付与され、以下のコード例を実行したり、自分の画像で試したりするには十分です。
キーはサーバーの環境変数に保存します:
export REMOVEBG_API_KEY="your_api_key"
すべての呼び出しはx-api-keyヘッダーでキーを送り、そのアカウントのクレジットを消費します。アプリや環境ごとに別のキーを作成しておけば、1つを無効にしても他に影響しません。
ステップ2:cURLで背景を削除する
リアルタイム用のエンドポイントはPOST https://removebackground.dev/v1/removeです。一番手早いテストはファイルアップロードです:
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
ほとんどの単体画像は同じレスポンスで処理済みの状態で返ってきます。通常は数秒で、フル解像度の背景透過PNGです。
エンドポイントは4つの方法で画像を受け付けます。いずれか1つを送ってください:
| 入力 | 送り方 |
|---|---|
| image_file | マルチパートのフォームデータ。JPG、PNG、WebPで最大25 MB |
| image_url | 公開されたhttp(s)のURL。APIがダウンロードし、リダイレクトは最大3回まで追跡、タイムアウトは15秒 |
| image_file_b64 | JSON本文内のbase64。data:imageプレフィックスの有無は問わず、デコード後で最大25 MB |
| 生の本文 | Content-Typeをimage/jpeg、image/png、image/webp、application/octet-streamにした画像のバイト |
1つのリクエストに複数含まれている場合は、image_file、image_file_b64、image_url、生の本文の順に優先されます。オプションはフォームフィールド、JSONのキー、クエリ文字列のいずれでも送れます。
注意点が1つあります。-oはステータスに関係なく本文を保存します。キーが間違っていたり画像が無効だったりすると、その「PNG」の中身は実はJSONのエラーです。ファイルを信用する前にステータスコードを確認してください。
ステップ3:Pythonで200、202、エラーを処理する
背景削除APIは、すべての画像が1回のHTTPリクエスト内で処理し終わるとは保証できません。キューが異常に混雑していて画像の処理に約55秒以上かかる場合、removebackground.devは画像の代わりにジョブIDを付けて202 Acceptedを返します。ジョブは処理を続けているので、IDを使って結果を取得します。
| ステータス | 本文 | すべきこと |
|---|---|---|
| 200 | 画像(image/png、image/jpeg、image/webp) | 保存する。Content-Typeでファイル拡張子を決める |
| 202 | id、status、status_url、result_urlを含むJSON | 数秒待ってから結果をGETする。画像は再送しない |
| 4xxまたは5xx | JSON:{"error": {"code", "message"}} | codeを確認する。本文を画像として保存しない |
一番大事なルールは202の後に画像を再送しないことです。再送すると2つ目のジョブが始まり、2クレジット目がかかる可能性があります。画像を1回だけ送り、安全な呼び出しだけをリトライするPythonの完全版は次のとおりです:
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: a retry with the same key returns the same job, never a second charge.
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 is the image; anything else raises
# 202: still processing. Wait for the same job.
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 /v1/jobs/{job_id} later.")
print(remove_background("https://example.com/photo.jpg"))
Python 3とrequests(pip install requests)が必要です。見落としやすい点が2つあります。1つ目に、スクリプトを止めてもジョブは止まりません。ジョブはそのまま完了して課金される可能性があり、結果はアカウントのStudioに表示されます。2つ目に、GET /v1/jobs/:id/resultはジョブの実行中に409 not_readyを返すので、失敗ではなく「待機」として扱ってください。
JavaScript(Node.js)での同じ処理
Node.js 18以降で、組み込みのfetch、FormData、Blobを使い、ローカルファイルをアップロードする同じ処理です:
import { readFile, writeFile } from "node:fs/promises"
import { randomUUID } from "node:crypto"
const API = "https://removebackground.dev"
const KEY = process.env.REMOVEBG_API_KEY // server side only
const EXT = { "image/png": ".png", "image/jpeg": ".jpg", "image/webp": ".webp" }
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
async function save(res, stem) {
const mime = (res.headers.get("content-type") || "").split(";")[0]
if (res.status !== 200 || !EXT[mime]) {
throw new Error("HTTP " + res.status + ": " + (await res.text()).slice(0, 500))
}
const path = stem + EXT[mime]
await writeFile(path, Buffer.from(await res.arrayBuffer()))
return path
}
export async function removeBackground(filePath, stem = "result", maxWaitMs = 300000) {
const form = new FormData()
form.append("image_file", new Blob([await readFile(filePath)]), "upload")
form.append("format", "png")
const res = await fetch(API + "/v1/remove", {
method: "POST",
// Reuse the same Idempotency-Key if you retry this POST.
headers: { "x-api-key": KEY, "Idempotency-Key": randomUUID() },
body: form,
})
if (res.status !== 202) return save(res, stem)
const { id } = await res.json()
const deadline = Date.now() + maxWaitMs
while (Date.now() < deadline) {
await sleep(2000)
const result = await fetch(API + "/v1/jobs/" + id + "/result", {
headers: { "x-api-key": KEY },
})
if (result.status === 409) {
const body = await result.json()
if (body.error && body.error.code === "not_ready") continue
throw new Error("Job " + id + ": " + body.error.code)
}
return save(result, stem)
}
throw new Error("Job " + id + " is still running. Check /v1/jobs/" + id + " later.")
}
console.log(await removeBackground("photo.jpg"))
APIはCORSリクエストを受け付けるので、ツールやテストには便利です。ただし、キーを含めたWebページから呼び出しても安全というわけではありません。詳しくは後述のセキュリティのセクションで説明します。
ステップ4:出力をコントロールする
ほとんどのアプリが欲しいのは、フル解像度の切り抜きそのものではありません。白背景の正方形の商品画像、小さなプレビュー、あるいはマスクです。最終的なファイルをAPIに直接要求すれば、2回目の処理を省けます。/v1/removeで使えるオプションは次のとおりです:
| パラメータ | 値 | 機能 |
|---|---|---|
| format | png, jpg, webp | 出力フォーマット。デフォルトはpng。JPGは透明度がなく、bg_colorまたは白に合成される |
| bg_color | 16進数(ffffff、#fff)、rgb(255, 255, 255)、または色名 | 背景を塗りつぶす。デフォルトは透明 |
| size | preview, medium, hd, full | アスペクト比を保ったメガピクセルの上限で、拡大はしない:previewは最大0.25 MP、mediumは1.5 MP、hdは4 MP、fullは元のサイズ(最大25 MP) |
| crop | true、false、または1:1、4:5、16:9のような比率 | 被写体に合わせてトリミングする。比率を指定すると、被写体を中心にその比率まで枠を広げる |
| padding | ピクセル、小数、またはパーセント | 切り抜き時に被写体の周りに追加する余白。最大500 px |
| channels | rgba, rgb, alpha | 背景透過の切り抜き(デフォルト)、不透明な画像、または白が被写体のグレースケールマスク |
| width, height | 1〜6000 | ピクセル単位の正確な出力サイズで、切り抜きの後に適用される。引き伸ばしはしない |
| fit | contain, cover, scale-down | widthとheightの両方を指定したときの画像の収め方 |
| roi | x1 y1 x2 y2(pxまたは%) | この領域内の被写体だけを残す |
どのオプションも同じ1クレジットで、不明なパラメータは何も言わずに無視されるため、タイプミスしてもエラーにはなりません。商品を中央に配置し、10%の余白を付けた正方形のマーケットプレイス用画像は次のようになります:
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_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
成功したレスポンスには便利なヘッダーも付いています。X-Credits-Remainingは処理後のクレジット残高を示します。X-Matte-Confidence(0〜1)はマスクの確信度を示し、X-Matte-Ambiguous-Ratioは髪の毛、ガラス、モーションブラーなどの柔らかいピクセルの割合を示します。この2つを記録しておけば、すべての画像をチェックする代わりに、確信度の低い切り抜きだけを人の確認に回せます。
ステップ5:画像を一括処理する
カタログの取り込みや過去データの処理では、単体のリクエストを何百回も送らないでください。POST /v1/batchは最大100件の公開画像URLを1つのジョブとしてキューに入れ、/v1/removeと同じオプションが使え、すぐに202を返します:
import os
import time
import uuid
import requests
API = "https://removebackground.dev"
s = requests.Session()
s.headers["x-api-key"] = os.environ["REMOVEBG_API_KEY"]
urls = ["https://example.com/front.jpg", "https://example.com/back.jpg"]
job = s.post(f"{API}/v1/batch",
json={"image_urls": urls, "format": "png", "size": "hd"},
headers={"Idempotency-Key": str(uuid.uuid4())}, timeout=30)
job.raise_for_status()
job_id = job.json()["id"] # save it: it's how you resume after a restart
while True:
time.sleep(3)
status = s.get(f"{API}/v1/jobs/{job_id}", timeout=30).json()
if status["done"]:
break
print(status["status"], "credits charged:", status["credits_charged"])
for item in status["items"]:
if item["status"] != "succeeded":
print("failed:", item["input"], item.get("error"))
continue
img = s.get(item["result_url"], timeout=60)
with open(f"out-{item['position']}.{item['format']}", "wb") as f:
f.write(img.content)
ドキュメントに書かれている、設計の前提にすべきルールは次のとおりです:
- ジョブのステータスは最終的にsucceeded、partial(一部の画像が失敗)、failedのいずれかになります。
itemsの各アイテムには個別のステータスがあり、失敗した場合はエラーコードが付きます。 - http(s)のURLでない項目と重複したURLは除外され、課金されません。どちらかの件数が0より大きい場合は、位置ではなく
inputで結果を照合してください。 - 1つのアカウントで同時に開けるバッチジョブは最大3件です。
doneがtrueになると、そのバッチはカウントされなくなります。 - バッチの途中でクレジットがなくなった場合、完了した画像は課金されたままで、残りはout_of_creditsとしてskippedになり、料金はかかりません。
- APIにはキャンセル用のエンドポイント、Webhook、ZIPダウンロードがないため、ポーリングが基本のパターンです。ジョブの読み取りは無料で、レート制限もありません。
そのまま実行できるスクリプトが欲しい場合は、Pythonでの一括処理ガイドでフォルダからフォルダへの完全なワークフローを紹介しています。
ステップ6:安全にリトライし、課金を予測可能にする
二重課金はネットワークのタイムアウトから生まれます。クライアントが諦めてリトライすると、1枚の画像に対してジョブが2つできてしまいます。解決策はIdempotency-Keyヘッダーです。UUIDなど255文字以内の一意の文字列を、画像またはバッチごとに1つ使います。同じキーで同じリクエストを再送すると、最初のリクエストが作成したジョブがIdempotent-Replayed: trueヘッダー付きで返され、新たな課金は発生しません。別の画像に同じキーを再利用すると、409 idempotency_key_reusedが返されます。
| レスポンス | すべきこと |
|---|---|
| POSTでのネットワークエラー、タイムアウト、500 | 同じIdempotency-Keyで同じリクエストを再送する |
| 429 rate_limited | Retry-Afterの秒数だけ待ち、同じキーで再送する |
| 429 too_many_batches | 開いている3件のバッチのいずれかが完了するまで待つ |
| 400、413、422 | リクエストまたは画像を修正する。そのまま再送しても同じ結果になる |
| 401または402 | キーを修正するか、クレジットをチャージする。ループしない |
| 結果取得での409 not_ready | 2秒待って再度問い合わせる。画像を再送信しない |
| 410 result_unavailable | 保存された結果は削除済み。再処理は新しいジョブとなり1クレジットかかる |
| POSTでの502 | そのジョブは失敗しており課金されていない。1回のリトライは新しいジョブになる |
課金のルールはシンプルです。画像が成功したら1クレジット、失敗したら無料です。処理前に拒否されたリクエスト、読み取れない画像、プロバイダー側のリトライ後の失敗は無料で、完了した結果の再ダウンロードも保存されている間は無料です。
設計時に考慮すべき制限
| 制限 | 値 |
|---|---|
| 画像ファイル | 25 MB、JPG、PNG、WebP。ファイルのバイトから判定 |
| 入力解像度 | 25 MPを超える画像は処理前に25 MPに縮小される |
| 出力サイズ | 幅と高さはそれぞれ1〜6000 px |
| image_urlのダウンロード | http(s)のみ、タイムアウト15秒、リダイレクトは最大3回。プライベートアドレスとループバックアドレスは拒否される |
| POST /v1/removeでの待機 | 約55秒、その後ジョブID付きで202 |
| バッチサイズ | 1リクエストあたり画像URL 100件 |
| 開いているバッチ | アカウントあたり3件 |
| リクエストレート | POSTエンドポイント全体でアカウントあたり毎分60リクエスト。バッチはサイズにかかわらず1回とカウント |
| 結果の保存 | 48時間、その後削除 |
毎分60枚を超える画像を処理したい場合は、batchエンドポイントを使いましょう。1リクエストで最大100枚を処理できます。結果はダウンロードしたらすぐに自社のバケットに保存してください。48時間を過ぎると結果のリンクは410を返します。プロバイダーのドキュメントによると、アップロードされた画像はモデルの学習には使われません。
remove.bg APIからの移行
remove.bgの単体WebサイトとセルフサービスAPIは2026年12月1日 09:00 CETに終了します。APIはLeonardo.Aiに移行し、組み込みの変更が必要になります。何も書き直したくない場合は、removebackground.devにremove.bg互換のエンドポイントがあり、移行は1行で済みます:
| 変更前 | 変更後 |
|---|---|
| https://api.remove.bg/v1.0/removebg | https://removebackground.dev/v1.0/removebg |
同じX-Api-Keyヘッダー(removebackground.devのキーを使用)、同じパラメータ名、同じレスポンスヘッダー、同じエラー形式をそのまま使えます:
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
切り替える前に違いを把握しておきましょう:
- 202はありません。 互換エンドポイントは最大110秒待ち、その後503タイムアウトを返します。ジョブは処理を続け、成功すれば課金されるため、そのリクエストをむやみにリトライすると2つ目のジョブが始まります。
- このエンドポイントには冪等性キーがありません。安全なリトライが必要なら、徐々に
/v1/removeへ移行してください。 - 一部のオプションは受け付けられますが無視されます: typeとtype_level(被写体は自動で検出されます)、semitransparency、影のオプション(影は追加されません)。
- サイズにかかわらず常に1クレジットで、フル解像度も含みます。
移行ガイドには、cURL、Python、Node、PHPの変更前と変更後のコードに加え、Zapier、Make、n8nの手順も載っています。
APIキーをクライアントに置かない
これは実際にお金を失うミスです。キーがWebページ、モバイルアプリ、公開リポジトリ、URLに含まれていると、誰でもそれを読み取ってあなたのクレジットを使えてしまいます。
- 自社のユーザーに背景削除を提供するなら、画像をバックエンド経由で送り、そこからAPIを呼び出してください。
- そのバックエンドに独自のログインとユーザーごとの利用上限を追加してください。
- アプリや環境ごとに1つのキーを使ってください。
- キーが漏れたら、アカウントページで無効にしてください。すぐに使えなくなります。プロバイダーは各キーのハッシュだけを保存しているため、古いキーを復元しようとせず、新しいキーを作成してください。
例:YouTubeサムネイル用の切り抜き
クリエイター向けのツールを作っているなら、サムネイルはわかりやすい用途です。サムネイルはほとんどが小さいサイズで見られるので、切り抜きが主役になります。顔や商品を1つだけ大きく、シンプルな背景に対してくっきりした輪郭で配置します。YouTubeは16:9で3840 x 2160 px、最小幅640 pxを推奨しており、パソコンからはJPGまたはPNGで最大50 MBまで受け付けますが、モバイルアプリからは2 MBまでです。
API側は1回の呼び出しで、被写体に合わせてトリミングされた背景透過PNGが返り、そのまま16:9のキャンバスに配置できます:
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@me.jpg' \
-F 'crop=true' -F 'padding=5%' \
-o me-cutout.png
切り抜き用には動画のフレームを使うのではなく静止画を撮影しましょう。フレームはモーションブラーがかかっていることが多いためです。また、YouTubeは右下に動画の長さを表示するので、右下の角は空けておきましょう。デザイン面はYouTubeサムネイルのページで、サムネイルがなぜそれほど重要かは最初の1,000人の登録者を獲得するガイドで解説しています。
ChatGPT、Claude、Cursorから背景を削除する
すべての作業にコードが必要なわけではありません。removebackground.devはhttps://removebackground.dev/mcpでMCPサーバーも提供しているので、ChatGPT、Claude、Cursor、VS Code、n8nで写真をアップロードして背景の削除を頼めます。Claude Codeならコマンド1つです:
claude mcp add --transport http removebackground https://removebackground.dev/mcp
その後、Claude Codeで/mcpと入力してサインインします。サーバーは3つのツールを提供します:remove_background、数秒以上かかる削除処理のためのget_job、そしてcheck_creditsです。料金はAPIと同じく画像1枚につき1クレジットです。
料金
removebackground.devはサブスクリプションなしの従量課金制です。クレジットに有効期限はなく、失敗した画像は無料で、新規アカウントには50クレジットが無料で付与されます。APIでは、1クレジットでフル解像度の背景削除が1回成功します。
| パック | クレジット | 価格 | 1枚あたり |
|---|---|---|---|
| Starter | 4,000 | $17 | $0.0043 |
| Pro | 15,000 | $49 | $0.0033 |
| Scale | 40,000 | $99 | $0.0025 |
価格は米ドルで、未使用のクレジットは30日以内なら返金できます。Scaleを超える大口向けの料金はリクエストに応じて用意されています。最新の詳細は料金ページをご覧ください。
まとめ
しっかりした背景削除の組み込みは、いくつかの習慣に集約されます。キーはサーバーに置く、本文を保存する前にステータスを確認する、202の後は再送せずにジョブを待つ、すべてのPOSTにIdempotency-Keyを付ける、そして大量処理にはbatchエンドポイントを使うことです。
OpenAPI 3.1仕様を含む完全なリファレンスはAPIドキュメントにあります。画像だけでなく動画も扱うなら、YouTube文字起こしAPIの比較と音声認識APIの組み込みガイドで、テキスト向けに同じ本番環境のパターンを紹介しています。
よくある質問
背景削除APIとは何ですか?+
画像を受け取り、背景を削除した同じ画像を返すHTTPエンドポイントです。通常は背景が透明なPNGで返されます。ファイル、URL、base64のいずれかを送ると、プロバイダーがセグメンテーションモデルを実行してくれます。
Pythonで画像の背景を削除するには?+
requestsライブラリを使い、キーをヘッダーに入れて画像をAPIにPOSTし、ステータスが200ならレスポンス本文をファイルに保存します。処理に時間がかかる画像でAPIが202を返す場合は、画像を再送せずにジョブの結果URLをポーリングします。このガイドのPythonコード例は両方のケースに対応しています。
背景削除APIの料金はいくらですか?+
プロバイダーによって異なります。removebackground.devは成功した画像1枚につき1クレジットで、クレジットパックは4,000クレジットで$17(1枚あたり$0.0043)から40,000クレジットで$99(1枚あたり$0.0025)まであります。サブスクリプションはなく、クレジットに有効期限はなく、失敗した画像は無料で、新規アカウントには50クレジットが無料で付与されます。
remove.bgのAPIが終了した後も、remove.bg用のコードを使い続けられますか?+
remove.bgのセルフサービスAPIは2026年12月1日 09:00 CETに終了します。removebackground.devにはremove.bg互換のエンドポイントがあるため、URLをhttps://api.remove.bg/v1.0/removebgからhttps://removebackground.dev/v1.0/removebgに変更し、同じX-Api-Keyヘッダーでremovebackground.devのキーを使うだけです。
背景削除APIをブラウザから直接呼び出してもいいですか?+
おすすめしません。Webページやアプリに含まれるAPIキーは誰でも読み取れます。画像は自社のバックエンド経由で送り、キーはそこに保管し、ユーザー向けに独自のログインと利用上限を設けてください。
白背景ではなく背景透過PNGを取得するには?+
PNGまたはWebPでの出力を指定し、背景色は指定しないでください。JPGは透明度を保存できないため、JPGの結果は常に単色の背景に合成されます。