Arka plan kaldırma API: tek istek gönderin, hazır PNG alın.
Bir dosya yükleyin, herkese açık bir görsel URL'si gönderin veya base64 verin. Tek görsellerin çoğu aynı HTTP yanıtında, genellikle birkaç saniye içinde hazır olarak döner. Daha uzun sürerse, görseli yeniden göndermeden sonucu almanız için bir iş kimliği (job id) alırsınız. Toplu işler için bir batch uç noktası vardır.
Başarılı görsel başına 1 kredi · başarısız görseller ücretsiz · anahtarlar hesabınızda
$ 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 · genellikle birkaç saniye
dog.png kaydedildi (şeffaf, tam çözünürlük)Hızlı başlangıç
Kopyalayın, yapıştırın, YOUR_API_KEY yerine kendi anahtarınızı yazın. Her örnek sonucu doğrudan bir dosyaya kaydeder; JavaScript ve Python örnekleri ayrıca 202 yanıtını da bekler.
curl -X POST https://removebackground.dev/v1/remove \
-H 'x-api-key: YOUR_API_KEY' \
-F 'image_file=@photo.jpg' \
-o photo-no-bg.pngGörselinizi gönderin
POST /v1/remove görseli dört yoldan biriyle alır. Bunlardan birini gönderin; bir istekte birden fazlası varsa önce image_file, sonra image_file_b64, sonra image_url, en son ham gövde kullanılır. Bu örnekler anahtarınızı REMOVEBG_API_KEY ortam değişkeninden okur (export REMOVEBG_API_KEY=… ile ayarlayın); kabuğun değeri doldurabilmesi için çift tırnaklara dikkat edin.
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 form verisi, image_file alanı. 25 MB'a kadar JPG, PNG veya WebP.
Her örnek gövdeyi bir dosyaya kaydeder. Bu dosya yalnızca durum 200 olduğunda bir görseldir; Yanıtı işleyin bölümüne bakın.
Yanıtı işleyin
Tek görsellerin çoğu aynı yanıtta hazır olarak döner. Kuyruk alışılmadık derecede yoğun olduğunda ve bir görsel yaklaşık 55 saniyeden uzun sürdüğünde, bunun yerine bir iş kimliğiyle 202 Accepted alırsınız. İş çalışmaya devam eder: sonucunu kimlikle alın. Görseli yeniden göndermek ikinci bir iş başlatır ve ikinci bir krediye mal olabilir.
| Durum | Gövde | Ne yapmalı |
|---|---|---|
200 | Görsel (image/png, image/jpeg veya image/webp) | Kaydedin. Dosya uzantısını seçmek için Content-Type değerini kullanın. |
202 | JSON: { id, status, status_url, result_url } | Görsel değil. Birkaç saniye bekleyin, ardından result_url adresine GET isteği gönderin. Görseli yeniden göndermeyin. |
4xx / 5xx | JSON: { "error": { "code", "message" } } | Görsel değil. Kodu okuyun (Hatalar bölümüne bakın) ve gövdeyi resim olarak kaydetmeyin. |
Eksiksiz bir örnek
Hazır görseli, 202 yanıtını, başarısız olan bir işi ve yerel bir zaman sınırını ele alır. Görseli bir kez gönderir ve yalnızca güvenli durum kontrollerini yeniden dener.
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 ve requests gerekir (pip install requests).
- Betiğinizi durdurmak işi durdurmaz; iş yine de tamamlanıp ücretlendirilebilir. Sonucu Stüdyo'nuzda görünür.
- Zaman sınırlarını siz belirlersiniz, bunlar bizim verdiğimiz bir söz değildir; çoğu görsel birkaç saniyede tamamlanır.
- remove.bg uyumlu uç nokta farklı davranır: hiçbir zaman 202 yanıtı vermez (aşağıya bakın).
Kimlik doğrulama
API anahtarınızı x-api-key başlığında gönderin. Anahtarları hesap sayfanızda oluşturun ve iptal edin; her çağrı o hesabın kredilerini harcar. Tüm uç noktalar https://removebackground.dev altındadır ve CORS isteklerini kabul eder, ancak CORS bir anahtarı web sayfasına koymayı güvenli kılmaz: anahtarı sunucunuzda tutun (Güvenlik bölümüne bakın). Hatalar JSON biçimindedir: { "error": { "code": "…", "message": "…" } }.
Tam sözleşme, istemci oluşturucular, Postman veya testler için OpenAPI 3.1 (openapi.json) olarak yayımlanır; yapay zeka kodlama asistanları llms.txt ile başlayabilir.
POST /v1/remove
Gerçek zamanlı. Tek bir görselin arka planını kaldırın. Genellikle hazır görsel, yanıt gövdesinin kendisidir (image/png, image/jpeg veya image/webp) ve çoğunlukla birkaç saniye içinde gelir. Parametreler form alanları, JSON anahtarları veya sorgu dizesi değerleri olabilir; ham görsel baytlarını da Content-Type: image/jpeg, image/png, image/webp veya application/octet-stream ile POST edebilirsiniz. En fazla 25 MB. Her giriş yöntemi için Görselinizi gönderin bölümüne bakın.
| Parametre | Tür | Açıklama |
|---|---|---|
image_file | file | Görsel (JPG, PNG veya WebP), multipart form verisi olarak. |
image_file_b64 | string | Base64 olarak görsel, data:image/…;base64, ön ekiyle veya ön eksiz (çözüldükten sonra 25 MB). JSON'dan göndermek için pratik. |
image_url | string | Görselin herkese açık bir http(s) URL'si. Biz indiririz (en fazla 3 yönlendirme, 15 sn). Birden fazlası gönderilirse önce image_file, sonra image_file_b64, sonra image_url, en son ham gövde kullanılır. |
format | png | jpg | webp | Çıktı biçimi. Varsayılan png. JPG şeffaflık içermez: bg_color üzerine ya da beyaz zemine düzleştirilir. |
bg_color | renk | Arka planı doldurun: hex (ffffff, #fff), rgb(255, 255, 255) veya white, black, red, green, blue, yellow, gray / grey. transparent (varsayılan) şeffaf bırakır. |
size | preview | medium | hd | full | Megapiksel sınırı, en boy oranı korunur, asla büyütülmez: preview ≤ 0,25 MP, medium ≤ 1,5 MP, hd ≤ 4 MP, full (varsayılan) orijinal çözünürlük (25 MP'ye kadar). width veya height ayarlandığında yok sayılır. |
crop | true | false | W:H | Nesnenin sınırlayıcı kutusuna kırpın. Bir en boy oranıyla (1:1, 4:5, 4:3, 16:9…) kutu, nesnenin etrafında bu orana genişletilir (asla küçültülmez); fotoğrafın dışında kalan alan şeffaftır (veya bg_color). Varsayılan false. |
padding | px | kesir | % | crop ile: her kenara eklenen kenar boşluğu. 0.1 veya 10% = nesnenin genişliğinin (sol/sağ) ve yüksekliğinin (üst/alt) onda biri; "10%,7.5%" yatay ve dikeyi ayrı ayarlar; 24px (veya 1'den büyük düz bir tam sayı) pikseldir, en fazla 500. Varsayılan 0. |
channels | rgba | rgb | alpha | rgba (varsayılan): şeffaf dekupe. rgb: opak, bg_color ya da beyaz üzerine düzleştirilmiş. alpha: gri tonlamalı PNG maske (beyaz = nesne), dekupe ile aynı boyut ve kırpma. type=mask, alpha'nın takma adı olarak hâlâ çalışır. |
width / height | 1–6000 | Piksel cinsinden tam çıktı boyutu, kırpmadan sonra uygulanır (size değerini geçersiz kılar). Yalnızca biri verilirse diğeri en boy oranını izler. Asla esnetilmez. |
roi | x1 y1 x2 y2 | İlgi alanı, px veya % cinsinden (ör. 0% 0% 50% 100%). Yalnızca içindeki nesne korunur; dışındaki her şey arka plan olur. Koordinatlar orijinal görsele göredir. Varsayılan: görselin tamamı. |
fit | contain | cover | scale-down | width ve height ile. contain (varsayılan): kutunun içine sığdırılır, ortalanır, geri kalanı şeffaftır (veya bg_color). cover: kutuyu doldurur, taşan kısım nesnenin etrafından kırpılır. scale-down: contain gibi, ama asla büyütülmez. |
Seçenekler şu sırayla uygulanır: roi, size (veya daha sonra width/height), crop + padding + en boy oranı, width/height + fit, ardından channels veya arka plan rengi, en son format. Her seçenek aynı 1 krediye mal olur. Bilinmeyen parametreler yok sayılır.
Örnek: beyaz üzerinde HD JPG, 40 px kenar boşluğuyla nesneye kırpılmış
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Örnek: kare pazar yeri görseli, nesne %10 kenar boşluğuyla ortalanmış
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Örnek: base64 giriş, alfa maskesi çıkış
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
Görsel baytları, şu başlıklarla:
| Başlık | Anlamı |
|---|---|
X-Image-Width / X-Image-Height | Sonucun piksel cinsinden boyutu (X-Width / X-Height olarak da gönderilir). |
X-Request-ID | Gönderdiyseniz X-Request-ID değeriniz, aksi halde oluşturulan bir kimlik. Destekle iletişime geçerken belirtin. |
X-Processing-Time-Ms | İsteğe harcanan süre (X-Processing-Ms olarak da). |
X-Matte-Confidence | 0–1: maskenin ne kadar net olduğu (pikseller üzerinde |2a − 1| ortalaması, a = alfa). 1'e yakın değer temiz bir dekupe demektir; düşük değerler çok sayıda yumuşak veya belirsiz kenar anlamına gelir. |
X-Matte-Ambiguous-Ratio | Alfa değeri kesin olarak 0.1 ile 0.9 arasında olan piksellerin oranı (saç, cam, hareket bulanıklığı). Görselleri incelemeye işaretlemek için kullanışlıdır. |
X-Credits-Remaining | Bu görselden sonraki bakiyeniz. |
X-Removal-Id | Saklanan sonucun kimliği. |
X-Job-Id | İsteğin arkasındaki işin kimliği (/v1/jobs/:id ile kullanılabilir). |
202 Accepted (uzun kuyruklar için yedek)
Görsel yaklaşık 55 saniye içinde tamamlanmazsa, örneğin kuyruk alışılmadık derecede yoğunken, { id, status, status_url, result_url } JSON'u ile 202 alırsınız (ayrıca Location ve Retry-After: 2). done true olana kadar status_url adresini yoklayın, ardından result_url adresinden indirin. Yalnızca görsel başarılı olduğunda bir kez ücretlendirilirsiniz. Görseli Idempotency-Key olmadan yeniden göndermeyin: bu ikinci bir iş başlatır. Eksiksiz bir örnek için Yanıtı işleyin bölümüne bakın.
GET /v1/jobs/:id
/v1/remove veya /v1/batch ile oluşturulan bir işin durumu. Aynı anahtar; yalnızca kendi işlerinizi görürsünüz.
| Alan | Anlamı |
|---|---|
status | queued, processing, succeeded, partial, failed veya canceled |
done | çalıştırılacak bir şey kalmadığında true |
total, succeeded, failed, skipped | görsel sayıları |
credits_charged | bu işin kullandığı kredi (başarılı görsel başına 1) |
status_url, result_url | nereden yoklanacağı ve nereden indirileceği |
items[] | görsel başına: position, input, status, error { code, message } ve başarılıysa removal_id, width, height, format, result_url |
GET /v1/jobs/:id/result
Tamamlanmış bir işin görsel baytları, /v1/remove ile aynı başlıklarla. ?item=N bir batch işinden bir görsel seçer (varsayılan 0). İş hâlâ çalışırken Retry-After: 2 ile 409 not_ready, başarısız olduysa görselin kendi hatasını döndürür.
POST /v1/batch
100 görsel URL'sine kadar tek bir iş olarak kuyruğa alın: /v1/remove ile aynı seçeneklere (channels, width, height ve fit dahil) sahip { "image_urls": ["https://…", …], "format": "jpg", "bg_color": "ffffff", "size": "hd", "crop": "1:1", "padding": "10%" } JSON'u. Hemen { id, status, total, invalid, duplicates, status_url } ile 202 yanıtı verir. İşi yoklayın, ardından her öğenin result_url adresini alın. Başarılı görsel başına 1 kredi; hesap başına en fazla 3 açık batch işi. Örnek yanıtlarla adım adım anlatım: Baştan sona batch işleri.
remove.bg uyumlu uç nokta
remove.bg'nin self-servis API'si 1 December 2026, 09:00 CET tarihinde sona eriyor (duyuru). Mevcut remove.bg entegrasyonları tek satır değiştirilerek burada çalışır: aynı X-Api-Key başlığında bir removebackground.dev anahtarıyla https://api.remove.bg/v1.0/removebg → https://removebackground.dev/v1.0/removebg. Aynı kuyruk, başarılı görsel başına aynı 1 kredi, /v1/remove ile aynı çıktı kalitesi. Geçiş rehberi.
POST /v1.0/removebg
remove.bg'nin parametre adlarıyla multipart, urlencoded veya JSON gövdesi. Görsel baytları ve remove.bg'nin başlıklarıyla ya da Accept: application/json gönderdiğinizde { "data": { "result_b64", "foreground_top", "foreground_left", "foreground_width", "foreground_height" } } ile yanıt verir. Hatalar remove.bg'nin yapısını kullanır: { "errors": [{ "title", "code", "detail" }] }. /v1/remove uç noktasından farklı olarak hiçbir zaman 202 yanıtı vermez: 110 saniyeye kadar bekler, ardından 503 zaman aşımı döndürür. İş çalışmaya devam eder ve başarılı olursa ücretlendirilir; bu yüzden o isteği yeniden denemek ikinci bir iş başlatır.
| Parametre | Durum | Notlar |
|---|---|---|
image_file / image_file_b64 / image_url | Destekleniyor | Multipart, urlencoded veya JSON gövdeleri. 25 MB'a kadar JPG, PNG veya WebP. |
size | Destekleniyor | auto, full, 4k ve 50MP orijinal çözünürlüğü verir (25 MP'ye kadar); preview, small ve regular ≈ 0,25 MP; medium 1,5 MP; hd 4 MP. Her zaman 1 kredi. |
format | Destekleniyor | auto (şeffafsa PNG, değilse JPG), png, jpg, webp ve zip (color.jpg + alpha.png). |
crop / crop_margin | Destekleniyor | Nesnenin px veya % cinsinden payı, CSS tarzı 1–4 değer ("10% 20%" = dikey, yatay); her kenar için en fazla 500px veya %50. |
roi | Destekleniyor | px veya % cinsinden "x1 y1 x2 y2": yalnızca bölgenin içindeki nesne korunur. |
scale / position | Destekleniyor | scale %10–%100 veya original; position center, original veya "x% y%". |
channels | Destekleniyor | rgba (dekupe) veya alpha (gri tonlamalı maske). |
bg_color | Destekleniyor | # ile veya # olmadan hex (81d4fa) ya da bir renk adı. 8 haneli hex rengi korur, alfa değerini atar. |
bg_image_url / bg_image_file | Destekleniyor | Dekupe görsel, çıktı boyutuna cover ile sığdırılmış arka plan görselinizin üzerine yerleştirilir. |
Accept: application/json | Destekleniyor | { data: { result_b64, foreground_top, foreground_left, foreground_width, foreground_height } } döndürür. |
type / type_level | Kabul edilir, yok sayılır | Nesne otomatik olarak algılanır; X-Type her zaman "other" olur. |
semitransparency | Kabul edilir, yok sayılır | Yumuşak kenarlar ve yarı saydam alanlar, modelin maskesinden olduğu gibi gelir. |
shadow_type / shadow_opacity / add_shadow | Kabul edilir, yok sayılır | Gölge eklenmez. |
Uzun süren istekler | Fark | 110 saniyeye kadar bekleriz; görsel o zamana kadar hazır olmazsa yeniden denenebilir bir 503 alırsınız (tamamlanmadıysa ücret alınmaz). |
Örnek
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/removebgYanıt başlıkları
| Başlık | Anlamı |
|---|---|
X-Width / X-Height | Sonucun piksel cinsinden boyutu. |
X-Credits-Charged | Bu görselin kullandığı kredi: her zaman 1 (başarısız görseller 0). |
X-Type | Her zaman "other" (nesne algılama otomatiktir). |
X-Foreground-Top / -Left / -Width / -Height | Sonuçtaki nesnenin piksel cinsinden sınırlayıcı kutusu. |
X-Request-ID | X-Request-ID değerinizi veya oluşturulan bir kimliği geri döndürür. Ek. |
X-Matte-Confidence / X-Matte-Ambiguous-Ratio | Maskenin ne kadar temiz olduğu (0–1) ve yumuşak piksellerin oranı. Ek: görselleri incelemeye işaretlemek için kullanışlıdır. |
Hatalar
| Durum | Anlamı |
|---|---|
400 | Geçersiz parametre veya görsel (invalid_size, invalid_crop_margin, missing_source, file_too_large, unknown_foreground gibi kodlar). |
402 | insufficient_credits: fiyatlar sayfasından kredi yükleyin. |
403 | auth_failed: X-Api-Key eksik veya geçersiz. |
429 | rate_limit_exceeded. |
500 / 503 | İşlem başarısız oldu, zaman aşımına uğradı veya hizmet kısa süreliğine kullanılamıyor. Tekrar deneyin; başarısız görseller ücretsizdir. |
GET /v1.0/account
remove.bg'nin hesap yapısında bakiyeniz: { "data": { "attributes": { "credits": { "total", "subscription": 0, "payg", "enterprise": 0 }, "api": { "free_calls": 0, "sizes": "all" } } } }. Tüm krediler kullandıkça öde türündedir ve süreleri hiç dolmaz, bu yüzden total değeri payg değerine eşittir. X-Api-Key başlığınızla GET https://removebackground.dev/v1.0/account gönderin.
Hatalar (/v1 uç noktaları)
Başarısız görseller hiçbir zaman ücretlendirilmez.
| Durum | Kodlar | Anlamı |
|---|---|---|
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 | İstek veya görsel URL'si kullanılamıyor. |
401 | unauthorized | x-api-key eksik, hatalı veya iptal edilmiş. |
402 | insufficient_credits, out_of_credits | Bakiyeniz boş. Fiyatlar sayfasından kredi yükleyin. |
404 | not_found | Böyle bir iş yok (veya size ait değil). |
409 | not_ready, canceled, idempotency_key_reused | İş hâlâ çalışırken GET …/result (2 sn sonra yeniden deneyin), iş iptal edildi veya bir Idempotency-Key farklı bir istek için yeniden kullanıldı. |
410 | result_unavailable | Sonuç silindi veya süresi doldu. |
413 | too_large | Görsel 25 MB'tan büyük. |
422 | processing_failed, invalid_image, missing_upload | Dosya okunabilir bir görsel değil. Ücretlendirilmez. |
429 | rate_limited, too_many_batches | Hesap başına istek sınırı aşıldı (Retry-After süresini bekleyin) veya zaten çalışan 3 batch işiniz var. |
502 | model_unavailable, upstream_error, … | Yeniden denemelerden sonra görseli işleyemedik. Ücretlendirilmez. |
503 | server_paused, unavailable | API duraklatıldı (açılıştan önce) veya kısa süreliğine kullanılamıyor. Daha sonra yeniden deneyin. |
Baştan sona batch işleri
1. Gönderin
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 adede kadar herkese açık görsel URL'si ve istediğiniz /v1/remove seçenekleri. Yukarıdaki iki yer tutucu URL gerçek görseller olsaydı en fazla 2 krediye mal olurdu. Yanıt hemen gelir:
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'si olmayan girişleri, duplicates ise tekrarları sayar; ikisi de çıkarılır ve hiç ücretlendirilmez. id değerini kaydedin: yeniden başlatmadan sonra işe bununla geri dönersiniz.
2. İşi yoklayın
done değeri true olana kadar birkaç saniyede bir GET /v1/jobs/:id gönderin. status önce queued, sonra processing olur ve succeeded, partial (bazı görseller başarısız) veya failed ile biter. Yeniden denenen bir öğe retrying gösterir.
{
"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. Her sonucu indirin
Başarılı her öğe için GET /v1/jobs/:id/result?item=N gönderin (veya öğenin result_url adresini kullanın). item, sıfırdan başlayan position değeridir. Konumlar, geçersiz ve tekrarlanan URL'ler çıkarıldıktan sonraki listenizi izler; bu sayılardan biri 0'dan büyükse sonuçları dizinle değil input ile eşleştirin.
- Bir batch,
donetrue olduğunda 3 açık batch sınırına sayılmaz. - API'de iptal uç noktası, webhook veya ZIP indirme yoktur. Toplu sayfasında başlatılan batch işleri orada iptal edilebilir veya ZIP olarak indirilebilir.
Yeniden denemeler, tekrarlar ve faturalandırma
Bir Idempotency-Key gönderin, yeniden denemeler iki kez ücretlendirilemez. POST /v1/remove veya POST /v1/batch isteğine bir Idempotency-Key başlığı ekleyin (UUID gibi, 255 karaktere kadar benzersiz herhangi bir dize), her görsel veya batch için bir anahtar. Aynı isteği aynı anahtarla yeniden gönderirseniz ilk isteğin oluşturduğu işi Idempotent-Replayed: true ile alırsınız: ilk istek hâlâ çalışıyor olsa bile yeni iş ve yeni ücret yoktur. Aynı anahtar farklı bir görsel veya seçeneklerle gönderilirse 409 idempotency_key_reused yanıtı verir. Anahtarlar hesabınıza aittir ve süreleri dolmaz.
Anahtar olmadan her POST yeni bir iş oluşturur ve başarılı olan her iş 1 kredi tutar (remove.bg uyumlu POST /v1.0/removebg anahtar desteklemez). Bir işi okumak (GET /v1/jobs/…) her zaman ücretsizdir ve güvenle tekrarlanabilir.
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.pngNe kredi harcar
| Durum | Ücret |
|---|---|
| İstek işlenmeden önce reddedildi (hatalı anahtar, hatalı seçenek, çok büyük, kredi bitti) | Ücretsiz. |
| Görsel işlenemiyor (422 geçersiz görsel, yeniden denemelerimizden sonra 502) | Ücretsiz. |
| Görsel başarılı oldu | 1 kredi, başarılı olduğunda bir kez alınır. Kendi dahili yeniden denemelerimiz ek ücret getirmez. |
| 202 aldınız | Henüz bir şey yok. İş çalışmaya devam eder ve yalnızca başarılı olursa 1 kredi alınır. |
| İstemciniz beklerken zaman aşımına uğradı veya bağlantıyı kesti | İş çalışmaya devam eder ve başarılı olursa ücretlendirilir. Sonuç Stüdyo'nuzda görünür. |
| Aynı isteği aynı Idempotency-Key ile iki kez gönderdiniz | Tek iş, en fazla 1 kredi. Tekrar eden istek aynı işi alır (Idempotent-Replayed: true başlığı). |
| Aynı görseli anahtarsız iki kez gönderdiniz | İki ayrı iş; başarılı olan her biri 1 kredi tutar. |
| Hazır bir sonucu yeniden indirdiniz | Saklandığı sürece istediğiniz kadar ücretsiz. |
| Bir batch kısmen başarılı oldu | Başarılı görsel başına 1 kredi; işteki credits_charged toplamı gösterir. |
| Bir batch aynı URL'yi iki kez içeriyor | Tek bir batch içindeki tekrarlar kuyruğa alınmadan önce çıkarılır ve hiç ücretlendirilmez. Farklı batch'lerdeki aynı URL'ler ayrı işlerdir. |
| Bir batch sırasında krediler bitti | Tamamlanmış görsellerin ücreti alınmış olarak kalır; geri kalanlar atlandı (out_of_credits) olarak işaretlenir ve ücretsizdir. Kredi satın alın, ardından kalan URL'leri yeni bir batch olarak gönderin. |
Ne zaman yeniden denemeli
| Ne oldu | Ne yapmalı |
|---|---|
| GET /v1/jobs/:id veya …/result başarısız (ağ hatası, 5xx) | Yeniden denemek güvenlidir: bir işi okumak hiçbir zaman iş oluşturmaz veya ücretlendirmez. Denemeler arasında biraz bekleyin. |
| GET …/result 409 not_ready yanıtı veriyor | Retry-After süresini (2 sn) bekleyip yeniden sorun. Görseli yeniden göndermeyin. |
| GET …/result 410 result_unavailable yanıtı veriyor | Saklanan sonuç silindi. Görseli yeniden işlemek yeni bir iştir ve 1 kredi tutar. |
| POST 400, 413 veya 422 yanıtı veriyor | Önce isteği veya görseli düzeltin; değiştirmeden göndermek aynı yanıtı verir. |
| POST 401 veya 402 yanıtı veriyor | Anahtarı düzeltin veya kredi yükleyin. Döngüye girmeyin. |
| POST 429 rate_limited yanıtı veriyor | Retry-After'daki saniye kadar bekleyin, ardından (aynı Idempotency-Key ile) yeniden gönderin. Dakikada 60 görselden fazla mı? POST /v1/batch kullanın: 100 görsele kadar tek istek. |
| POST /v1/batch 429 too_many_batches yanıtı veriyor | 3 açık batch'inizden biri bitene kadar bekleyin (yoklayarak), ardından gönderin. |
| POST /v1/… 503 yanıtı veriyor (unavailable, server_paused) | İş oluşturulmadı. Kısa bir süre bekleyip yeniden deneyin. (remove.bg uyumlu uç nokta farklıdır: onun 503 zaman aşımı, işin hâlâ çalıştığı anlamına gelir.) |
| POST /v1/remove 502 yanıtı veriyor | Bu iş başarısız oldu ve ücretlendirilmedi. Yeniden deneme yeni bir iştir. |
| POST zaman aşımına uğradı, bağlantı koptu veya 500 aldınız | Idempotency-Key varsa: aynı isteği aynı anahtarla yeniden gönderin; orijinal işi alırsınız. Yoksa iş zaten oluşmuş ve ücretlendirilmiş olabilir: önce Stüdyo'nuzu kontrol edin. |
| POST 409 idempotency_key_reused yanıtı veriyor | Bu anahtar zaten farklı bir görsel veya seçenekler için kullanıldı. Her yeni görsel için yeni bir anahtar oluşturun. |
Sınırlar ve depolama
| Sınır | Değer | Aşıldığında hata |
|---|---|---|
| Görsel dosyası | 25 MB (25 × 1024 × 1024 bayt); JPG, PNG veya WebP, dosyanın baytlarından algılanır | 413 too_large · 422 processing_failed |
| Base64 / JSON gövdesi | Çözüldükten sonra 25 MB (istek gövdesi yaklaşık üçte bir daha büyük olabilir) | 413 too_large |
| Giriş çözünürlüğü | 25 MP'nin üzerindeki görseller işlemden önce 25 MP'ye küçültülür | — |
| Çıktı boyutu | genişlik ve yüksekliğin her biri 1–6000 px | 400 invalid_width / invalid_height |
| image_url indirme | yalnızca http(s), 15 sn zaman aşımı, en fazla 3 yönlendirme; özel, loopback ve link-local adresler her yönlendirmede reddedilir | 400 invalid_url · fetch_failed · fetch_timeout |
| POST /v1/remove içinde bekleme | Yaklaşık 55 sn, ardından iş kimliğiyle 202 | 202 |
| Batch boyutu | POST /v1/batch başına 100 görsel URL'si | 400 too_many_images |
| Açık batch'ler | Hesap başına 3 tamamlanmamış çoklu görsel işi (tek görseller sayılmaz) | 429 too_many_batches |
| İstek hızı | POST /v1/remove, /v1/batch ve /v1.0/removebg genelinde hesap başına dakikada 60 istek. Bir batch, boyutu ne olursa olsun bir kez sayılır. İş okuma sınırlı değildir | 429 rate_limited (Retry-After ile) |
Sonuçlar ne kadar saklanır
Her sonuç, oluşturulduktan sonra 48 saat boyunca hesabınızda gizli olarak saklanır, ardından silinir. O zamana kadar GET /v1/jobs/:id/result ile veya Stüdyo'nuzdan ücretsiz olarak yeniden indirebilirsiniz. Bundan sonra sonuç bağlantıları 410 result_unavailable yanıtı verir; görseli yeniden işlemek yeni bir iştir. Görsel silindikten sonra da iş durumu kayıtları okunabilir kalır. Yüklemelerin nasıl işlendiği için gizlilik politikasına bakın; görsellerinizi model eğitmek için kullanmayız.
Güvenlik
API anahtarınızı kontrol ettiğiniz bir sunucuda tutun. Tarayıcı koduna, mobil uygulamalara, herkese açık depolara veya URL'lere koymayın. Kendi kullanıcılarınızın arka plan kaldırmasını istiyorsanız görsellerini kendi arka uç sunucunuz üzerinden gönderin ve kendi giriş ve harcama sınırlarınızı orada ekleyin.
- API, araçlardan ve sunucu tarafı koddan çalışabilmesi için CORS'a izin verir. Bu, bir anahtarı web sayfasına koymayı güvenli hale getirmez: orada herkes okuyabilir.
- Bir hesaptaki tüm anahtarlar aynı kredi bakiyesini harcar. Hesap sayfanızda her uygulama veya ortam için ayrı bir anahtar oluşturun; böylece diğerlerini bozmadan birini iptal edebilirsiniz.
- Bir anahtar sızarsa hesap sayfasında hemen iptal edin (anında çalışmayı durdurur) ve yeni bir tane oluşturun. Her anahtarın yalnızca karmasını (hash) sakladığımız için size onu yeniden gösteremeyiz.
Sorun giderme
| Belirti | Neler oluyor |
|---|---|
| PNG dosyam açılmıyor | Gövde bir görsel değil, JSON idi (202 işi veya hata). Kaydetmeden önce HTTP durumunu ve Content-Type değerini kontrol edin. |
| Betiğim zaman aşımına uğradı ama görsel Stüdyo'da görünüyor | Siz beklemeyi bıraktıktan sonra iş çalışmaya devam etti. Yeniden göndermek yerine iş kimliğiyle alın. |
| Tek bir görsel için iki kez ücretlendirildim | Görsel Idempotency-Key olmadan iki kez gönderildi (genellikle zaman aşımından sonra otomatik bir yeniden deneme). Her görsel için bir anahtar gönderin ve yeniden denemelerde aynı anahtarı kullanın. |
| URL tarayıcımda açılıyor ama API onu alamıyor | Sunucu çerez veya giriş gerektiriyor, sunucuları engelliyor, 3'ten fazla yönlendirme yapıyor, 15 sn'den uzun sürüyor ya da imzalı URL'nin süresi dolmuş olabilir. Bunun yerine dosyayı yükleyin. |
| Batch işim yarıda durdu | İşteki items[] alanına bakın: başarısız öğelerin bir hata kodu vardır; out_of_credits ile atlanan öğeler bakiyenin bittiği anlamına gelir. |
| Bir seçenek hiçbir şey yapmıyor gibi | Bilinmeyen parametre adları sessizce yok sayılır. Yazımı parametre tablosuyla karşılaştırın. /v1.0/removebg üzerinde bazı remove.bg seçenekleri kabul edilir ama yok sayılır (o tabloya bakın). |
| Arka plan şeffaf değil | JPG şeffaf olamaz. format=png veya webp kullanın ve bg_color değerini ayarlamayın. |
| Sonuç bağlantısı 410 veriyor | Saklanan sonuç silindi. Yeniden işlemek 1 kredi tutar. |