ریئل ٹائم API

بیک گراؤنڈ ریموول API: ایک ریکویسٹ بھیجیں، تیار PNG پائیں۔

فائل اپ لوڈ کریں، کوئی پبلک تصویری URL بھیجیں، یا base64 دیں۔ زیادہ تر انفرادی تصاویر اسی HTTP ریسپانس میں تیار ہو کر واپس آتی ہیں، عموماً چند سیکنڈ میں۔ اگر کسی میں زیادہ وقت لگے تو آپ کو ایک job id ملتی ہے جس سے آپ تصویر دوبارہ بھیجے بغیر نتیجہ حاصل کر سکتے ہیں۔ بلک کے لیے ایک batch اینڈ پوائنٹ موجود ہے۔

ہر کامیاب تصویر پر 1 کریڈٹ · ناکام تصاویر مفت · کیز آپ کے اکاؤنٹ میں

$ 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 محفوظ ہو گئی (شفاف، فُل ریزولوشن)
1 آپ کی تصویر2 ایک HTTP ریکویسٹ3 ریسپانس میں 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 تصویر کو چار میں سے کسی بھی طریقے سے لیتا ہے۔ ان میں سے ایک بھیجیں؛ اگر کسی ریکویسٹ میں کئی ہوں تو پہلے image_file، پھر image_file_b64، پھر image_url، پھر raw باڈی کو ترجیح ملتی ہے۔ یہ مثالیں آپ کی کی 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

Multipart فارم ڈیٹا، فیلڈ image_file۔ JPG، PNG یا WebP، 25 MB تک۔

ہر مثال باڈی کو فائل میں محفوظ کرتی ہے۔ وہ فائل صرف تب تصویر ہوتی ہے جب اسٹیٹس 200 ہو؛ دیکھیں ریسپانس سنبھالیں۔

ریسپانس سنبھالیں

زیادہ تر انفرادی تصاویر اسی ریسپانس میں تیار ہو کر آتی ہیں۔ جب قطار غیر معمولی طور پر مصروف ہو اور کسی تصویر میں تقریباً 55 سیکنڈ سے زیادہ لگیں، تو آپ کو اس کے بجائے job id کے ساتھ 202 Accepted ملتا ہے۔ جاب چلتی رہتی ہے: id سے اس کا نتیجہ حاصل کریں۔ تصویر دوبارہ بھیجنے سے دوسری جاب شروع ہوگی اور دوسرا کریڈٹ لگ سکتا ہے۔

اسٹیٹسباڈیکیا کریں
200تصویر (image/png، image/jpeg یا image/webp)اسے محفوظ کریں۔ فائل ایکسٹینشن منتخب کرنے کے لیے Content-Type استعمال کریں۔
202JSON: { id, status, status_url, result_url }یہ تصویر نہیں ہے۔ چند سیکنڈ انتظار کریں، پھر result_url کو GET کریں۔ تصویر دوبارہ نہ بھیجیں۔
4xx / 5xxJSON: { "error": { "code", "message" } }یہ تصویر نہیں ہے۔ کوڈ پڑھیں (ایررز دیکھیں) اور باڈی کو تصویر کے طور پر محفوظ نہ کریں۔

ایک مکمل مثال

تیار تصویر، 202، ناکام ہونے والی جاب اور ایک مقامی وقت کی حد، سب کو سنبھالتی ہے۔ یہ تصویر ایک بار بھیجتی ہے اور صرف محفوظ اسٹیٹس چیکس دوبارہ کرتی ہے۔

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-compatible اینڈ پوائنٹ مختلف طریقے سے کام کرتا ہے: وہ کبھی 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

ریئل ٹائم۔ ایک تصویر کا بیک گراؤنڈ ہٹائیں۔ عموماً تیار تصویر ہی ریسپانس باڈی ہوتی ہے (image/png، image/jpeg یا image/webp)، عموماً چند سیکنڈ بعد۔ پیرامیٹرز فارم فیلڈز، JSON keys یا query-string ویلیوز ہو سکتے ہیں؛ آپ Content-Type: image/jpeg، image/png، image/webp یا application/octet-stream کے ساتھ raw تصویری بائٹس بھی POST کر سکتے ہیں۔ زیادہ سے زیادہ 25 MB۔ ہر اِن پٹ طریقے کے لیے اپنی تصویر بھیجیں دیکھیں۔

پیرامیٹرقسمتفصیل
image_filefileتصویر (JPG، PNG یا WebP)، multipart فارم ڈیٹا کے طور پر۔
image_file_b64stringbase64 کے طور پر تصویر، data:image/…;base64, پری فکس کے ساتھ یا اس کے بغیر (ڈی کوڈ کے بعد 25 MB)۔ JSON سے بھیجنے میں آسان۔
image_urlstringتصویر کا پبلک http(s) URL۔ ہم اسے ڈاؤن لوڈ کرتے ہیں (زیادہ سے زیادہ 3 ری ڈائریکٹس، 15 s)۔ اگر کئی بھیجے جائیں تو پہلے image_file، پھر image_file_b64، پھر image_url، پھر raw باڈی کو ترجیح ملتی ہے۔
formatpng | jpg | webpآؤٹ پٹ فارمیٹ۔ ڈیفالٹ png۔ JPG میں شفافیت نہیں ہوتی: اسے bg_color پر، یا سفید پر فلیٹ کیا جاتا ہے۔
bg_colorرنگبیک گراؤنڈ بھریں: hex (ffffff، #fff)، rgb(255, 255, 255)، یا white، black، red، green، blue، yellow، gray / grey۔ transparent (ڈیفالٹ) اسے شفاف رکھتا ہے۔
sizepreview | medium | hd | fullمیگا پکسل کی حد، ایسپیکٹ ریشو برقرار، کبھی بڑا نہیں کیا جاتا: preview ≤ 0.25 MP، medium ≤ 1.5 MP، hd ≤ 4 MP، full (ڈیفالٹ) اصل ریزولوشن (25 MP تک)۔ width یا height سیٹ ہونے پر نظرانداز کیا جاتا ہے۔
croptrue | false | W:Hموضوع کے باؤنڈنگ باکس تک تراشیں۔ ایسپیکٹ ریشو (1:1، 4:5، 4:3، 16:9…) کے ساتھ، باکس کو پھر موضوع کے گرد اس ریشو تک بڑھایا جاتا ہے (کبھی چھوٹا نہیں کیا جاتا)؛ تصویر سے باہر کا حصہ شفاف (یا bg_color) ہوتا ہے۔ ڈیفالٹ false۔
paddingpx | fraction | %crop کے ساتھ: ہر جانب شامل کیا گیا مارجن۔ 0.1 یا 10% = موضوع کی چوڑائی (بائیں/دائیں) اور اونچائی (اوپر/نیچے) کا دسواں حصہ؛ "10%,7.5%" افقی اور عمودی الگ الگ سیٹ کرتا ہے؛ 24px (یا 1 سے بڑا کوئی مکمل عدد) پکسلز ہیں، 500 تک۔ ڈیفالٹ 0۔
channelsrgba | rgb | alphargba (ڈیفالٹ): شفاف کٹ آؤٹ۔ rgb: غیر شفاف، bg_color یا سفید پر فلیٹ۔ alpha: گرے اسکیل PNG ماسک (سفید = موضوع)، کٹ آؤٹ جیسے ہی سائز اور کراپ کے ساتھ۔ type=mask اب بھی alpha کے متبادل نام کے طور پر کام کرتا ہے۔
width / height1–6000پکسلز میں بالکل درست آؤٹ پٹ سائز، crop کے بعد لاگو (size کو اووررائیڈ کرتا ہے)۔ صرف ایک دینے پر دوسرا ایسپیکٹ ریشو کے مطابق طے ہوتا ہے۔ کبھی کھینچا نہیں جاتا۔
roix1 y1 x2 y2ریجن آف انٹرسٹ، px یا % میں (مثلاً 0% 0% 50% 100%)۔ صرف اس کے اندر کا موضوع رکھا جاتا ہے؛ باہر کی ہر چیز بیک گراؤنڈ بن جاتی ہے۔ کوآرڈینیٹس اصل تصویر کے حساب سے ہوتے ہیں۔ ڈیفالٹ: پوری تصویر۔
fitcontain | cover | scale-downwidth اور 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.png

200 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-Confidence0–1: ماسک کتنا فیصلہ کن ہے (پکسلز پر |2a − 1| کا اوسط، a = alpha)۔ 1 کے قریب مطلب صاف کٹ آؤٹ؛ کم ویلیوز کا مطلب بہت سے نرم یا غیر یقینی کنارے۔
X-Matte-Ambiguous-Ratioان پکسلز کا تناسب جن کا alpha 0.1 اور 0.9 کے درمیان ہے (بال، شیشہ، موشن بلر)۔ جائزے کے لیے تصاویر کو نشان زد کرنے میں مفید۔
X-Credits-Remainingاس تصویر کے بعد آپ کا بیلنس۔
X-Removal-Idمحفوظ کیے گئے نتیجے کی id۔
X-Job-Idریکویسٹ کے پیچھے جاب کی id (/v1/jobs/:id کے ساتھ قابلِ استعمال)۔

202 Accepted (طویل قطار کے لیے متبادل)

اگر تصویر تقریباً 55 سیکنڈ میں مکمل نہ ہو، مثلاً جب قطار غیر معمولی طور پر مصروف ہو، تو آپ کو JSON { id, status, status_url, result_url } کے ساتھ 202 ملتا ہے (ساتھ میں Location اور Retry-After: 2)۔ done true ہونے تک status_url کو پول کریں، پھر result_url ڈاؤن لوڈ کریں۔ چارج ایک بار لگتا ہے، صرف تصویر کامیاب ہونے پر۔ Idempotency-Key کے بغیر تصویر دوبارہ نہ بھیجیں: اس سے دوسری جاب شروع ہوتی ہے۔ مکمل مثال کے لیے ریسپانس سنبھالیں دیکھیں۔

GET /v1/jobs/:id

/v1/remove یا /v1/batch سے بنی جاب کا اسٹیٹس۔ وہی کی؛ آپ صرف اپنی جابز دیکھتے ہیں۔

فیلڈمطلب
statusqueued، processing، succeeded، partial، failed یا canceled
doneکچھ باقی نہ رہنے پر true
total, succeeded, failed, skippedتصاویر کی گنتی
credits_chargedاس جاب میں لگنے والے کریڈٹس (ہر کامیاب تصویر پر 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 تک تصویری URLs کو ایک جاب کے طور پر قطار میں ڈالیں: JSON { "image_urls": ["https://…", …], "format": "jpg", "bg_color": "ffffff", "size": "hd", "crop": "1:1", "padding": "10%" }، /v1/remove جیسے ہی آپشنز کے ساتھ (channels، width، height اور fit بھی)۔ فوراً { id, status, total, invalid, duplicates, status_url } کے ساتھ 202 واپس کرتا ہے۔ جاب کو پول کریں، پھر ہر آئٹم کا result_url حاصل کریں۔ ہر کامیاب تصویر پر 1 کریڈٹ؛ ہر اکاؤنٹ پر زیادہ سے زیادہ 3 بیچ جابز کھلی۔ مثالی ریسپانسز کے ساتھ مکمل وضاحت بیچز، شروع سے آخر تک میں۔

remove.bg-compatible اینڈ پوائنٹ

remove.bg کا سیلف سروس API 1 December 2026, 09:00 CET کو بند ہو رہا ہے (اعلان)۔ موجودہ remove.bg انٹیگریشنز یہاں صرف ایک لائن بدل کر کام کرتی ہیں: https://api.remove.bg/v1.0/removebg → https://removebackground.dev/v1.0/removebg، اسی X-Api-Key ہیڈر میں removebackground.dev کی کے ساتھ۔ وہی قطار، ہر کامیاب تصویر پر وہی 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 واپس کرتا ہے۔ جاب چلتی رہتی ہے اور کامیابی پر چارج لگتا ہے، اس لیے وہ ریکویسٹ دوبارہ بھیجنے سے دوسری جاب شروع ہوتی ہے۔

پیرامیٹراسٹیٹسنوٹس
image_file / image_file_b64 / image_urlمعاونMultipart، urlencoded یا JSON باڈیز۔ 25 MB تک کی JPG، PNG یا WebP۔
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 یا %، 1–4 CSS طرز کی ویلیوز ("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معاون# کے ساتھ یا اس کے بغیر Hex (81d4fa)، یا رنگ کا نام۔ 8 ہندسوں والا hex رنگ رکھتا ہے اور اس کا alpha ہٹا دیتا ہے۔
bg_image_url / bg_image_fileمعاونکٹ آؤٹ کو آپ کی بیک گراؤنڈ تصویر پر رکھا جاتا ہے، جو آؤٹ پٹ سائز میں cover-fit ہوتی ہے۔
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 جیسے کوڈز)۔
402insufficient_credits: قیمتوں کے صفحے پر ٹاپ اَپ کریں۔
403auth_failed: X-Api-Key موجود نہیں یا غلط ہے۔
429rate_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" } } } }۔ تمام کریڈٹس pay-as-you-go ہیں اور کبھی ختم نہیں ہوتے، اس لیے total برابر ہے payg کے۔ اپنی X-Api-Key کے ساتھ GET https://removebackground.dev/v1.0/account۔

ایررز (/v1 اینڈ پوائنٹس)

ناکام تصاویر کا کبھی چارج نہیں لگتا۔

اسٹیٹسکوڈزمطلب
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ریکویسٹ یا تصویری URL استعمال نہیں ہو سکتا۔
401unauthorizedx-api-key موجود نہیں، غلط ہے یا منسوخ ہو چکی ہے۔
402insufficient_credits, out_of_creditsآپ کا بیلنس خالی ہے۔ قیمتوں کے صفحے پر ٹاپ اَپ کریں۔
404not_foundایسی کوئی جاب نہیں (یا وہ آپ کی نہیں ہے)۔
409not_ready, canceled, idempotency_key_reusedجاب چلتے رہنے کے دوران GET …/result (2 s بعد دوبارہ کوشش کریں)، جاب منسوخ ہو گئی، یا کسی Idempotency-Key کو مختلف ریکویسٹ کے لیے دوبارہ استعمال کیا گیا۔
410result_unavailableنتیجہ ڈیلیٹ ہو گیا یا اس کی مدت ختم ہو گئی۔
413too_largeتصویر 25 MB سے بڑی ہے۔
422processing_failed, invalid_image, missing_uploadفائل قابلِ پڑھائی تصویر نہیں ہے۔ کوئی چارج نہیں۔
429rate_limited, too_many_batchesفی اکاؤنٹ ریکویسٹ کی حد سے تجاوز (Retry-After تک انتظار کریں)، یا آپ کی 3 بیچ جابز پہلے سے چل رہی ہیں۔
502model_unavailable, upstream_error, …کئی کوششوں کے بعد بھی ہم تصویر پراسیس نہیں کر سکے۔ کوئی چارج نہیں۔
503server_paused, unavailableAPI رکا ہوا ہے (لانچ سے پہلے) یا عارضی طور پر دستیاب نہیں۔ بعد میں دوبارہ کوشش کریں۔

بیچز، شروع سے آخر تک

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 تک پبلک تصویری URLs، ساتھ میں /v1/remove کے کوئی بھی آپشنز۔ اوپر دیے گئے دو پلیس ہولڈر URLs اگر حقیقی تصاویر ہوتے تو 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) URLs نہیں ہیں اور duplicates تکرار کو گنتا ہے؛ دونوں ہٹا دیے جاتے ہیں اور ان کا کبھی چارج نہیں لگتا۔ id محفوظ کریں: ری اسٹارٹ کے بعد جاب دوبارہ اٹھانے کا یہی طریقہ ہے۔

2. جاب کو پول کریں

ہر چند سیکنڈ بعد GET /v1/jobs/:id کریں، جب تک done true نہ ہو جائے۔ 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 صفر سے شروع ہونے والی position ہے۔ غلط اور دہرائے گئے URLs ہٹانے کے بعد پوزیشنز آپ کی فہرست کی ترتیب میں ہوتی ہیں، اس لیے جب ان میں سے کوئی بھی گنتی 0 سے زیادہ ہو تو نتائج کو انڈیکس کے بجائے input سے ملائیں۔

  • done true ہوتے ہی بیچ 3 کھلے بیچز کی حد میں شمار ہونا بند ہو جاتا ہے۔
  • API میں کوئی cancel اینڈ پوائنٹ، webhooks یا ZIP ڈاؤن لوڈ نہیں ہے۔ بلک صفحے سے شروع کیے گئے بیچز وہیں منسوخ کیے جا سکتے ہیں یا ZIP میں ڈاؤن لوڈ کیے جا سکتے ہیں۔

دوبارہ کوشش، ڈپلیکیٹس اور بلنگ

Idempotency-Key بھیجیں، تاکہ دوبارہ کوشش پر دو بار چارج نہ لگے۔ POST /v1/remove یا POST /v1/batch میں ایک Idempotency-Key ہیڈر شامل کریں (255 حروف تک کی کوئی بھی منفرد اسٹرنگ، جیسے UUID)، ہر تصویر یا بیچ کے لیے ایک کی۔ اگر آپ وہی ریکویسٹ اسی کی کے ساتھ دوبارہ بھیجتے ہیں تو آپ کو پہلی ریکویسٹ سے بنی جاب ہی ملتی ہے، Idempotent-Replayed: true کے ساتھ: نہ نئی جاب، نہ نیا چارج، چاہے پہلی ریکویسٹ ابھی چل رہی ہو۔ اسی کی کے ساتھ مختلف تصویر یا آپشنز بھیجنے پر جواب 409 idempotency_key_reused ہوتا ہے۔ کیز آپ کے اکاؤنٹ کی ہوتی ہیں اور ختم نہیں ہوتیں۔

کی کے بغیر ہر POST ایک نئی جاب بناتا ہے، اور ہر کامیاب جاب پر 1 کریڈٹ لگتا ہے (remove.bg-compatible 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 کریڈٹ، کامیابی پر ایک بار۔ ہماری اپنی اندرونی کوششوں سے چارج نہیں بڑھتا۔
آپ کو 202 ملتا ہےابھی کچھ نہیں۔ جاب چلتی رہتی ہے اور صرف کامیابی پر 1 کریڈٹ لگتا ہے۔
انتظار کے دوران آپ کے کلائنٹ کا ٹائم آؤٹ ہو جاتا ہے یا کنکشن ٹوٹ جاتا ہےجاب چلتی رہتی ہے اور کامیابی پر چارج لگتا ہے۔ نتیجہ آپ کے اسٹوڈیو میں نظر آتا ہے۔
آپ وہی ریکویسٹ اسی Idempotency-Key کے ساتھ دو بار بھیجتے ہیںایک جاب، زیادہ سے زیادہ 1 کریڈٹ۔ دہرائی گئی ریکویسٹ کو وہی جاب ملتی ہے (ہیڈر Idempotent-Replayed: true)۔
آپ وہی تصویر کی کے بغیر دو بار بھیجتے ہیںدو الگ جابز؛ ہر کامیاب جاب پر 1 کریڈٹ۔
آپ تیار نتیجہ دوبارہ ڈاؤن لوڈ کرتے ہیںمفت، جتنی بار چاہیں، جب تک وہ محفوظ ہے۔
بیچ جزوی طور پر کامیاب ہوتا ہےہر کامیاب تصویر پر 1 کریڈٹ؛ جاب کا credits_charged کل دکھاتا ہے۔
بیچ میں ایک ہی URL دو بار ہےایک بیچ کے اندر تکرار قطار میں ڈالنے سے پہلے ہٹا دی جاتی ہے اور اس کا کبھی چارج نہیں لگتا۔ مختلف بیچز میں ایک جیسے URLs الگ جابز ہوتے ہیں۔
بیچ کے دوران کریڈٹس ختم ہو جاتے ہیںجو تصاویر مکمل ہو چکی ہیں ان کی ادائیگی برقرار رہتی ہے؛ باقی skipped (out_of_credits) نشان زد ہوتی ہیں اور مفت ہیں۔ کریڈٹس خریدیں، پھر باقی URLs نئے بیچ کے طور پر بھیجیں۔

کب دوبارہ کوشش کریں

کیا ہواکیا کریں
GET /v1/jobs/:id یا …/result ناکام ہوتا ہے (نیٹ ورک ایرر، 5xx)دوبارہ کوشش محفوظ ہے: جاب پڑھنے سے نہ کوئی کام بنتا ہے نہ چارج لگتا ہے۔ کوششوں کے درمیان تھوڑا وقفہ دیں۔
GET …/result کا جواب 409 not_ready ہےRetry-After (2 s) تک انتظار کریں اور دوبارہ پوچھیں۔ تصویر دوبارہ جمع نہ کرائیں۔
GET …/result کا جواب 410 result_unavailable ہےمحفوظ کیا گیا نتیجہ ڈیلیٹ ہو چکا ہے۔ تصویر کو دوبارہ پراسیس کرنا نئی جاب ہے اور اس پر 1 کریڈٹ لگتا ہے۔
POST کا جواب 400، 413 یا 422 ہےپہلے ریکویسٹ یا تصویر درست کریں؛ بغیر تبدیلی بھیجنے پر وہی جواب ملے گا۔
POST کا جواب 401 یا 402 ہےکی درست کریں یا ٹاپ اَپ کریں۔ لوپ میں نہ بھیجیں۔
POST کا جواب 429 rate_limited ہےRetry-After میں دیے گئے سیکنڈ انتظار کریں، پھر دوبارہ بھیجیں (اسی Idempotency-Key کے ساتھ)۔ ایک منٹ میں 60 سے زیادہ تصاویر؟ POST /v1/batch استعمال کریں: 100 تک کے لیے ایک ریکویسٹ۔
POST /v1/batch کا جواب 429 too_many_batches ہےاپنے 3 کھلے بیچز میں سے کسی ایک کے مکمل ہونے تک انتظار کریں (اسے پول کریں)، پھر جمع کرائیں۔
POST /v1/… کا جواب 503 (unavailable، server_paused) ہےکوئی جاب نہیں بنی۔ تھوڑے انتظار کے بعد دوبارہ کوشش کریں۔ (remove.bg-compatible اینڈ پوائنٹ مختلف ہے: اس کے 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 (ریکویسٹ باڈی تقریباً ایک تہائی بڑی ہو سکتی ہے)413 too_large
اِن پٹ ریزولوشن25 MP سے بڑی تصاویر پراسیسنگ سے پہلے 25 MP تک چھوٹی کر دی جاتی ہیں—
آؤٹ پٹ سائزwidth اور height دونوں 1–6000 px400 invalid_width / invalid_height
image_url ڈاؤن لوڈصرف http(s)، 15 s ٹائم آؤٹ، زیادہ سے زیادہ 3 ری ڈائریکٹس؛ نجی، loopback اور link-local ایڈریسز ہر ری ڈائریکٹ پر مسترد کیے جاتے ہیں400 invalid_url · fetch_failed · fetch_timeout
POST /v1/remove میں انتظارتقریباً 55 s، پھر job id کے ساتھ 202202
بیچ سائزہر POST /v1/batch میں 100 تصویری URLs400 too_many_images
کھلے بیچزہر اکاؤنٹ پر 3 نامکمل ملٹی امیج جابز (انفرادی تصاویر شمار نہیں ہوتیں)429 too_many_batches
ریکویسٹ ریٹہر اکاؤنٹ پر ایک منٹ میں 60 ریکویسٹس، POST /v1/remove، /v1/batch اور /v1.0/removebg کو ملا کر۔ بیچ ایک بار شمار ہوتا ہے، اس کا سائز جو بھی ہو۔ جابز پڑھنے پر کوئی حد نہیں429 rate_limited (Retry-After کے ساتھ)

نتائج کتنی دیر تک رکھے جاتے ہیں

ہر نتیجہ بننے کے بعد 48 گھنٹے تک آپ کے اکاؤنٹ میں نجی طور پر محفوظ رہتا ہے، پھر ڈیلیٹ کر دیا جاتا ہے۔ تب تک آپ اسے GET /v1/jobs/:id/result سے یا اپنے اسٹوڈیو سے مفت دوبارہ ڈاؤن لوڈ کر سکتے ہیں۔ اس کے بعد نتیجے کے لنکس کا جواب 410 result_unavailable ہوتا ہے؛ تصویر کو دوبارہ پراسیس کرنا نئی جاب ہے۔ تصویر ہٹنے کے بعد بھی جاب اسٹیٹس کے ریکارڈ پڑھے جا سکتے ہیں۔ اپ لوڈز کیسے سنبھالے جاتے ہیں، اس کے لیے پرائیویسی پالیسی دیکھیں؛ ہم آپ کی تصاویر کو ماڈلز کی تربیت کے لیے استعمال نہیں کرتے۔

سیکیورٹی

اپنی API کی اپنے کنٹرول والے سرور پر رکھیں۔ اسے براؤزر کوڈ، موبائل ایپس، پبلک ریپوزٹریز یا URLs میں نہ ڈالیں۔ اپنے صارفین کو بیک گراؤنڈ ہٹانے دینے کے لیے ان کی تصاویر اپنے بیک اینڈ کے ذریعے بھیجیں، اور وہیں اپنا سائن اِن اور خرچ کی حدود شامل کریں۔

  • API، CORS کی اجازت دیتا ہے تاکہ یہ ٹولز اور سرور سائیڈ کوڈ سے کام کرے۔ اس کا مطلب یہ نہیں کہ کی کو ویب صفحے میں ڈالنا محفوظ ہے: وہاں کوئی بھی اسے پڑھ سکتا ہے۔
  • ایک اکاؤنٹ کی تمام کیز ایک ہی کریڈٹ بیلنس خرچ کرتی ہیں۔ اپنے اکاؤنٹ کے صفحے پر ہر ایپ یا انوائرنمنٹ کے لیے الگ کی بنائیں، تاکہ آپ دوسروں کو متاثر کیے بغیر ایک کو منسوخ کر سکیں۔
  • اگر کوئی کی افشا ہو جائے تو اسے فوراً اکاؤنٹ کے صفحے پر منسوخ کریں (وہ اسی وقت کام کرنا بند کر دیتی ہے) اور نئی بنائیں۔ ہم ہر کی کا صرف ہیش محفوظ کرتے ہیں، اس لیے اسے آپ کو دوبارہ نہیں دکھا سکتے۔

مسائل کا حل

علامتکیا ہو رہا ہے
میری PNG نہیں کھل رہیباڈی JSON تھی (202 جاب یا ایرر)، تصویر نہیں۔ محفوظ کرنے سے پہلے HTTP اسٹیٹس اور Content-Type چیک کریں۔
میری اسکرپٹ کا ٹائم آؤٹ ہو گیا لیکن تصویر اسٹوڈیو میں نظر آ رہی ہےآپ کے انتظار بند کرنے کے بعد بھی جاب چلتی رہی۔ دوبارہ بھیجنے کے بجائے اسے job id سے حاصل کریں۔
ایک تصویر کے لیے مجھ سے دو بار چارج لیا گیااسے Idempotency-Key کے بغیر دو بار بھیجا گیا (اکثر ٹائم آؤٹ کے بعد خودکار دوبارہ کوشش)۔ ہر تصویر کے لیے ایک کی بھیجیں اور دوبارہ کوشش میں وہی استعمال کریں۔
URL میرے براؤزر میں کھلتا ہے لیکن API اسے حاصل نہیں کر پاتاممکن ہے ہوسٹ کو کوکیز یا لاگ اِن درکار ہو، وہ سرورز کو بلاک کرتا ہو، 3 سے زیادہ بار ری ڈائریکٹ کرتا ہو، 15 s سے زیادہ لیتا ہو، یا سائن شدہ URL کی مدت ختم ہو گئی ہو۔ اس کے بجائے فائل اپ لوڈ کریں۔
میرا بیچ آدھے میں رک گیاجاب میں items[] دیکھیں: ناکام آئٹمز میں ایرر کوڈ ہوتا ہے؛ out_of_credits والے skipped آئٹمز کا مطلب ہے کہ بیلنس ختم ہو گیا۔
کوئی آپشن کچھ کرتا نظر نہیں آتانامعلوم پیرامیٹر نام خاموشی سے نظرانداز کر دیے جاتے ہیں۔ پیرامیٹر ٹیبل سے ہجے ملائیں۔ /v1.0/removebg پر remove.bg کے کچھ آپشنز قبول ہوتے ہیں مگر نظرانداز کر دیے جاتے ہیں (وہ ٹیبل دیکھیں)۔
بیک گراؤنڈ شفاف نہیں ہےJPG شفاف نہیں ہو سکتا۔ format=png یا webp استعمال کریں اور bg_color سیٹ نہ کریں۔
نتیجے کا لنک 410 دیتا ہےمحفوظ کیا گیا نتیجہ ڈیلیٹ ہو چکا ہے۔ دوبارہ پراسیس کرنے پر 1 کریڈٹ لگتا ہے۔