Gerçek zamanlı API

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)
1 Görseliniz2 Tek HTTP isteği3 Yanıtta PNG

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.png

Gö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.png

Multipart 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.

DurumGövdeNe yapmalı
200Görsel (image/png, image/jpeg veya image/webp)Kaydedin. Dosya uzantısını seçmek için Content-Type değerini kullanın.
202JSON: { 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 / 5xxJSON: { "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.

ParametreTürAçıklama
image_filefileGörsel (JPG, PNG veya WebP), multipart form verisi olarak.
image_file_b64stringBase64 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_urlstringGö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.
formatpng | jpg | webpÇıktı biçimi. Varsayılan png. JPG şeffaflık içermez: bg_color üzerine ya da beyaz zemine düzleştirilir.
bg_colorrenkArka 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.
sizepreview | medium | hd | fullMegapiksel 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.
croptrue | false | W:HNesnenin 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.
paddingpx | 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.
channelsrgba | rgb | alphargba (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 / height1–6000Piksel 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.
roix1 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ı.
fitcontain | cover | scale-downwidth 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.png

200 OK

Görsel baytları, şu başlıklarla:

BaşlıkAnlamı
X-Image-Width / X-Image-HeightSonucun piksel cinsinden boyutu (X-Width / X-Height olarak da gönderilir).
X-Request-IDGö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-Confidence0–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-RatioAlfa 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-RemainingBu görselden sonraki bakiyeniz.
X-Removal-IdSaklanan 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.

AlanAnlamı
statusqueued, processing, succeeded, partial, failed veya canceled
doneçalıştırılacak bir şey kalmadığında true
total, succeeded, failed, skippedgörsel sayıları
credits_chargedbu işin kullandığı kredi (başarılı görsel başına 1)
status_url, result_urlnereden 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.

ParametreDurumNotlar
image_file / image_file_b64 / image_urlDestekleniyorMultipart, urlencoded veya JSON gövdeleri. 25 MB'a kadar JPG, PNG veya WebP.
sizeDestekleniyorauto, 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.
formatDestekleniyorauto (şeffafsa PNG, değilse JPG), png, jpg, webp ve zip (color.jpg + alpha.png).
crop / crop_marginDestekleniyorNesnenin px veya % cinsinden payı, CSS tarzı 1–4 değer ("10% 20%" = dikey, yatay); her kenar için en fazla 500px veya %50.
roiDestekleniyorpx veya % cinsinden "x1 y1 x2 y2": yalnızca bölgenin içindeki nesne korunur.
scale / positionDestekleniyorscale %10–%100 veya original; position center, original veya "x% y%".
channelsDestekleniyorrgba (dekupe) veya alpha (gri tonlamalı maske).
bg_colorDestekleniyor# ile veya # olmadan hex (81d4fa) ya da bir renk adı. 8 haneli hex rengi korur, alfa değerini atar.
bg_image_url / bg_image_fileDestekleniyorDekupe görsel, çıktı boyutuna cover ile sığdırılmış arka plan görselinizin üzerine yerleştirilir.
Accept: application/jsonDestekleniyor{ data: { result_b64, foreground_top, foreground_left, foreground_width, foreground_height } } döndürür.
type / type_levelKabul edilir, yok sayılırNesne otomatik olarak algılanır; X-Type her zaman "other" olur.
semitransparencyKabul edilir, yok sayılırYumuşak kenarlar ve yarı saydam alanlar, modelin maskesinden olduğu gibi gelir.
shadow_type / shadow_opacity / add_shadowKabul edilir, yok sayılırGölge eklenmez.
Uzun süren isteklerFark110 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/removebg

Yanıt başlıkları

BaşlıkAnlamı
X-Width / X-HeightSonucun piksel cinsinden boyutu.
X-Credits-ChargedBu görselin kullandığı kredi: her zaman 1 (başarısız görseller 0).
X-TypeHer zaman "other" (nesne algılama otomatiktir).
X-Foreground-Top / -Left / -Width / -HeightSonuçtaki nesnenin piksel cinsinden sınırlayıcı kutusu.
X-Request-IDX-Request-ID değerinizi veya oluşturulan bir kimliği geri döndürür. Ek.
X-Matte-Confidence / X-Matte-Ambiguous-RatioMaskenin 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

DurumAnlamı
400Geçersiz parametre veya görsel (invalid_size, invalid_crop_margin, missing_source, file_too_large, unknown_foreground gibi kodlar).
402insufficient_credits: fiyatlar sayfasından kredi yükleyin.
403auth_failed: X-Api-Key eksik veya geçersiz.
429rate_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.

DurumKodlarAnlamı
400missing_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.
401unauthorizedx-api-key eksik, hatalı veya iptal edilmiş.
402insufficient_credits, out_of_creditsBakiyeniz boş. Fiyatlar sayfasından kredi yükleyin.
404not_foundBöyle bir iş yok (veya size ait değil).
409not_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ı.
410result_unavailableSonuç silindi veya süresi doldu.
413too_largeGörsel 25 MB'tan büyük.
422processing_failed, invalid_image, missing_uploadDosya okunabilir bir görsel değil. Ücretlendirilmez.
429rate_limited, too_many_batchesHesap başına istek sınırı aşıldı (Retry-After süresini bekleyin) veya zaten çalışan 3 batch işiniz var.
502model_unavailable, upstream_error, …Yeniden denemelerden sonra görseli işleyemedik. Ücretlendirilmez.
503server_paused, unavailableAPI 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, done true 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.png

Ne 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ı oldu1 kredi, başarılı olduğunda bir kez alınır. Kendi dahili yeniden denemelerimiz ek ücret getirmez.
202 aldınızHenü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önderdinizTek 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 indirdinizSaklandığı sürece istediğiniz kadar ücretsiz.
Bir batch kısmen başarılı olduBaşarılı görsel başına 1 kredi; işteki credits_charged toplamı gösterir.
Bir batch aynı URL'yi iki kez içeriyorTek 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 bittiTamamlanmış 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 olduNe 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ı veriyorRetry-After süresini (2 sn) bekleyip yeniden sorun. Görseli yeniden göndermeyin.
GET …/result 410 result_unavailable yanıtı veriyorSaklanan 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ı veriyorAnahtarı düzeltin veya kredi yükleyin. Döngüye girmeyin.
POST 429 rate_limited yanıtı veriyorRetry-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ı veriyor3 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ı veriyorBu 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ızIdempotency-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ı veriyorBu 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ırDeğerAşıldığında hata
Görsel dosyası25 MB (25 × 1024 × 1024 bayt); JPG, PNG veya WebP, dosyanın baytlarından algılanır413 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ı boyutugenişlik ve yüksekliğin her biri 1–6000 px400 invalid_width / invalid_height
image_url indirmeyalnızca http(s), 15 sn zaman aşımı, en fazla 3 yönlendirme; özel, loopback ve link-local adresler her yönlendirmede reddedilir400 invalid_url · fetch_failed · fetch_timeout
POST /v1/remove içinde beklemeYaklaşık 55 sn, ardından iş kimliğiyle 202202
Batch boyutuPOST /v1/batch başına 100 görsel URL'si400 too_many_images
Açık batch'lerHesap 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ğildir429 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

BelirtiNeler oluyor
PNG dosyam açılmıyorGö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üyorSiz 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 ücretlendirildimGö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ıyorSunucu ç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 gibiBilinmeyen 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ğilJPG şeffaf olamaz. format=png veya webp kullanın ve bg_color değerini ayarlamayın.
Sonuç bağlantısı 410 veriyorSaklanan sonuç silindi. Yeniden işlemek 1 kredi tutar.