बैकग्राउंड रिमूवल 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 सेव हुई (ट्रांसपेरेंट, फ़ुल रिज़ॉल्यूशन)क्विक स्टार्ट
कॉपी करें, पेस्ट करें, 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.pngMultipart फ़ॉर्म डेटा, फ़ील्ड image_file। JPG, PNG या WebP, 25 MB तक।
हर उदाहरण बॉडी को फ़ाइल में सेव करता है। वह फ़ाइल सिर्फ़ तभी इमेज होती है जब स्टेटस 200 हो; देखें रिस्पॉन्स संभालें।
रिस्पॉन्स संभालें
ज़्यादातर सिंगल इमेज उसी रिस्पॉन्स में तैयार होकर आती हैं। जब कतार असामान्य रूप से व्यस्त हो और किसी इमेज में लगभग 55 सेकंड से ज़्यादा लगे, तो आपको उसकी जगह job id के साथ 202 Accepted मिलता है। जॉब चलता रहता है: id से उसका रिज़ल्ट लें। इमेज दोबारा भेजने से दूसरा जॉब शुरू होगा और दूसरा क्रेडिट लग सकता है।
| स्टेटस | बॉडी | क्या करें |
|---|---|---|
200 | इमेज (image/png, image/jpeg या image/webp) | इसे सेव करें। फ़ाइल एक्सटेंशन चुनने के लिए Content-Type इस्तेमाल करें। |
202 | JSON: { id, status, status_url, result_url } | यह इमेज नहीं है। कुछ सेकंड रुकें, फिर result_url को GET करें। इमेज दोबारा न भेजें। |
4xx / 5xx | JSON: { "error": { "code", "message" } } | यह इमेज नहीं है। कोड पढ़ें (एरर देखें) और बॉडी को तस्वीर के रूप में सेव न करें। |
एक पूरा उदाहरण
तैयार इमेज, 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_file | file | इमेज (JPG, PNG या WebP), multipart फ़ॉर्म डेटा के रूप में। |
image_file_b64 | string | base64 के रूप में इमेज, data:image/…;base64, प्रीफ़िक्स के साथ या बिना (डिकोड के बाद 25 MB)। JSON से भेजने में आसान। |
image_url | string | इमेज का पब्लिक http(s) URL। हम उसे डाउनलोड करते हैं (अधिकतम 3 रीडायरेक्ट, 15 s)। अगर कई भेजे जाएँ, तो पहले image_file, फिर image_file_b64, फिर image_url, फिर raw बॉडी को प्राथमिकता मिलती है। |
format | png | jpg | webp | आउटपुट फ़ॉर्मेट। डिफ़ॉल्ट png। JPG में ट्रांसपेरेंसी नहीं होती: उसे bg_color पर, या सफ़ेद पर फ़्लैट किया जाता है। |
bg_color | रंग | बैकग्राउंड भरें: hex (ffffff, #fff), rgb(255, 255, 255), या white, black, red, green, blue, yellow, gray / grey। transparent (डिफ़ॉल्ट) इसे ट्रांसपेरेंट रखता है। |
size | preview | medium | hd | full | मेगापिक्सेल की सीमा, आस्पेक्ट रेशियो बना रहता है, कभी बड़ा नहीं किया जाता: preview ≤ 0.25 MP, medium ≤ 1.5 MP, hd ≤ 4 MP, full (डिफ़ॉल्ट) ओरिजिनल रिज़ॉल्यूशन (25 MP तक)। width या height सेट होने पर अनदेखा किया जाता है। |
crop | true | false | W:H | सब्जेक्ट के बाउंडिंग बॉक्स तक ट्रिम करें। आस्पेक्ट रेशियो (1:1, 4:5, 4:3, 16:9…) के साथ, बॉक्स को फिर सब्जेक्ट के चारों ओर उस रेशियो तक बढ़ाया जाता है (कभी घटाया नहीं जाता); फ़ोटो के बाहर का हिस्सा ट्रांसपेरेंट (या bg_color) होता है। डिफ़ॉल्ट false। |
padding | px | fraction | % | crop के साथ: हर साइड पर जोड़ा गया मार्जिन। 0.1 या 10% = सब्जेक्ट की चौड़ाई (बाएँ/दाएँ) और ऊँचाई (ऊपर/नीचे) का दसवाँ हिस्सा; "10%,7.5%" हॉरिज़ॉन्टल और वर्टिकल अलग-अलग सेट करता है; 24px (या 1 से बड़ी कोई पूर्ण संख्या) पिक्सेल है, 500 तक। डिफ़ॉल्ट 0। |
channels | rgba | rgb | alpha | rgba (डिफ़ॉल्ट): ट्रांसपेरेंट कट-आउट। rgb: अपारदर्शी, bg_color या सफ़ेद पर फ़्लैट। alpha: ग्रेस्केल PNG मास्क (सफ़ेद = सब्जेक्ट), कट-आउट जैसे ही साइज़ और क्रॉप के साथ। type=mask अब भी alpha के उपनाम के रूप में काम करता है। |
width / height | 1–6000 | पिक्सेल में सटीक आउटपुट साइज़, crop के बाद लागू (size को ओवरराइड करता है)। सिर्फ़ एक देने पर, दूसरा आस्पेक्ट रेशियो के हिसाब से तय होता है। कभी खींचा नहीं जाता। |
roi | x1 y1 x2 y2 | रीजन ऑफ़ इंटरेस्ट, px या % में (जैसे 0% 0% 50% 100%)। सिर्फ़ उसके अंदर का सब्जेक्ट रखा जाता है; बाहर का सब कुछ बैकग्राउंड बन जाता है। निर्देशांक ओरिजिनल इमेज के हिसाब से होते हैं। डिफ़ॉल्ट: पूरी इमेज। |
fit | contain | cover | scale-down | width और height के साथ। contain (डिफ़ॉल्ट): अंदर फ़िट, बीच में, बाकी ट्रांसपेरेंट (या bg_color)। cover: बॉक्स भरें, सब्जेक्ट के आसपास ज़्यादा हिस्सा क्रॉप करके। scale-down: contain जैसा, लेकिन कभी बड़ा नहीं किया जाता। |
विकल्प इस क्रम में लागू होते हैं: roi, size (या बाद में width/height), crop + padding + आस्पेक्ट रेशियो, width/height + fit, फिर channels या बैकग्राउंड का रंग, फिर format। हर विकल्प पर वही 1 क्रेडिट लगता है। अनजान पैरामीटर अनदेखा कर दिए जाते हैं।
उदाहरण: सफ़ेद पर HD JPG, 40 px पैडिंग के साथ सब्जेक्ट तक क्रॉप
curl -X POST https://removebackground.dev/v1/remove \
-H 'x-api-key: YOUR_API_KEY' \
-F 'image_file=@product.jpg' \
-F 'bg_color=ffffff' \
-F 'format=jpg' \
-F 'size=hd' \
-F 'crop=true' \
-F 'padding=40' \
-o product-no-bg.jpgउदाहरण: मार्केटप्लेस के लिए चौकोर इमेज, सब्जेक्ट बीच में 10% पैडिंग के साथ
curl -X POST https://removebackground.dev/v1/remove \
-H 'x-api-key: YOUR_API_KEY' \
-F 'image_file=@product.jpg' \
-F 'crop=1:1' -F 'padding=10%' \
-F 'width=1000' -F 'height=1000' \
-F 'format=jpg' -F 'bg_color=white' \
-o product-square.jpgउदाहरण: base64 इनपुट, अल्फ़ा मास्क आउटपुट
printf '{"image_file_b64":"%s","channels":"alpha"}' "$(base64 < portrait.jpg | tr -d '\n')" > request.json
curl -X POST https://removebackground.dev/v1/remove \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data-binary @request.json \
-o portrait-mask.png200 OK
इमेज बाइट्स, इन हेडर के साथ:
| हेडर | मतलब |
|---|---|
X-Image-Width / X-Image-Height | रिज़ल्ट का साइज़ पिक्सेल में (X-Width / X-Height के रूप में भी भेजा जाता है)। |
X-Request-ID | अगर आपने X-Request-ID भेजा है तो वही, नहीं तो एक जेनरेट की गई id। सपोर्ट से संपर्क करते समय इसका उल्लेख करें। |
X-Processing-Time-Ms | रिक्वेस्ट पर लगा समय (X-Processing-Ms भी)। |
X-Matte-Confidence | 0–1: मास्क कितना निर्णायक है (पिक्सेल पर |2a − 1| का औसत, a = 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 से बने जॉब का स्टेटस। वही कुंजी; आप सिर्फ़ अपने जॉब देखते हैं।
| फ़ील्ड | मतलब |
|---|---|
status | queued, 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 तक इमेज URL को एक जॉब के रूप में कतार में डालें: 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 जैसे कोड)। |
402 | insufficient_credits: कीमतों वाले पेज पर टॉप-अप करें। |
403 | auth_failed: X-Api-Key नहीं है या अमान्य है। |
429 | rate_limit_exceeded। |
500 / 503 | प्रोसेसिंग फ़ेल हुई, समय ख़त्म हुआ या सेवा थोड़ी देर के लिए उपलब्ध नहीं है। फिर से कोशिश करें; फ़ेल हुई इमेज मुफ़्त हैं। |
GET /v1.0/account
remove.bg के अकाउंट फ़ॉर्मेट में आपका बैलेंस: { "data": { "attributes": { "credits": { "total", "subscription": 0, "payg", "enterprise": 0 }, "api": { "free_calls": 0, "sizes": "all" } } } }। सभी क्रेडिट pay-as-you-go हैं और कभी एक्सपायर नहीं होते, इसलिए total बराबर है payg के। अपनी X-Api-Key के साथ GET https://removebackground.dev/v1.0/account।
एरर (/v1 एंडपॉइंट)
फ़ेल हुई इमेज का कभी चार्ज नहीं लगता।
| स्टेटस | कोड | मतलब |
|---|---|---|
400 | missing_image, invalid_url, invalid_body, invalid_json, invalid_image_b64, invalid_format, invalid_bg_color, invalid_size, invalid_crop, invalid_padding, invalid_type, invalid_channels, invalid_width, invalid_height, invalid_fit, invalid_roi, fetch_failed, fetch_timeout, rejected, too_many_images, invalid_images | रिक्वेस्ट या इमेज URL इस्तेमाल नहीं हो सकता। |
401 | unauthorized | x-api-key नहीं है, ग़लत है या रद्द हो चुकी है। |
402 | insufficient_credits, out_of_credits | आपका बैलेंस ख़ाली है। कीमतों वाले पेज पर टॉप-अप करें। |
404 | not_found | ऐसा कोई जॉब नहीं (या वह आपका नहीं है)। |
409 | not_ready, canceled, idempotency_key_reused | जॉब चलते रहने के दौरान GET …/result (2 s बाद फिर कोशिश करें), जॉब रद्द हो गया, या किसी Idempotency-Key को अलग रिक्वेस्ट के लिए दोबारा इस्तेमाल किया गया। |
410 | result_unavailable | रिज़ल्ट डिलीट हो गया या एक्सपायर हो गया। |
413 | too_large | इमेज 25 MB से बड़ी है। |
422 | processing_failed, invalid_image, missing_upload | फ़ाइल पढ़ने योग्य इमेज नहीं है। कोई चार्ज नहीं। |
429 | rate_limited, too_many_batches | प्रति-अकाउंट रिक्वेस्ट सीमा पार हो गई (Retry-After तक रुकें), या आपके 3 बैच जॉब पहले से चल रहे हैं। |
502 | model_unavailable, upstream_error, … | कई कोशिशों के बाद भी हम इमेज प्रोसेस नहीं कर सके। कोई चार्ज नहीं। |
503 | server_paused, unavailable | API रुका हुआ है (लॉन्च से पहले) या थोड़ी देर के लिए उपलब्ध नहीं है। बाद में फिर कोशिश करें। |
बैच, शुरू से अंत तक
1. सबमिट करें
curl -X POST https://removebackground.dev/v1/batch \
-H "x-api-key: $REMOVEBG_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "image_urls": ["https://example.com/front.jpg", "https://example.com/back.jpg"], "format": "png", "size": "hd" }'100 तक पब्लिक इमेज URL, साथ में /v1/remove के कोई भी विकल्प। ऊपर दिए दो प्लेसहोल्डर URL अगर असली इमेज होते, तो 2 क्रेडिट तक लगते। जवाब तुरंत आता है:
202 Accepted
{
"id": "3f6c2a9e-8d1b-4c7a-9e2f-5b8d0a1c4e77",
"status": "queued",
"total": 2,
"invalid": 0,
"duplicates": 0,
"status_url": "https://removebackground.dev/v1/jobs/3f6c2a9e-8d1b-4c7a-9e2f-5b8d0a1c4e77"
}invalid उन एंट्री को गिनता है जो http(s) URL नहीं हैं और duplicates दोहराव को गिनता है; दोनों हटा दिए जाते हैं और उनका कभी चार्ज नहीं लगता। id सेव करें: रीस्टार्ट के बाद जॉब फिर से उठाने का यही तरीका है।
2. जॉब पोल करें
हर कुछ सेकंड में 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 है। अमान्य और दोहराए गए URL हटाने के बाद पोज़िशन आपकी सूची के क्रम में होती हैं, इसलिए जब इनमें से कोई भी गिनती 0 से ज़्यादा हो, तो रिज़ल्ट को इंडेक्स के बजाय input से मिलाएँ।
donetrue होते ही बैच 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 दो बार है | एक बैच के अंदर दोहराव कतार में डालने से पहले हटा दिए जाते हैं और उनका कभी चार्ज नहीं लगता। अलग-अलग बैच में एक जैसे URL अलग जॉब होते हैं। |
| बैच के दौरान क्रेडिट ख़त्म हो जाते हैं | जो इमेज पूरी हो चुकी हैं, उनका भुगतान रहता है; बाकी skipped (out_of_credits) मार्क होती हैं और मुफ़्त हैं। क्रेडिट खरीदें, फिर बचे हुए URL नए बैच के रूप में भेजें। |
कब दोबारा कोशिश करें
| क्या हुआ | क्या करें |
|---|---|
| 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 px | 400 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 के साथ 202 | 202 |
| बैच साइज़ | हर POST /v1/batch में 100 इमेज URL | 400 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 कुंजी अपने नियंत्रण वाले सर्वर पर रखें। इसे ब्राउज़र कोड, मोबाइल ऐप, पब्लिक रिपॉज़िटरी या URL में न डालें। अपने यूज़र्स को बैकग्राउंड हटाने देने के लिए, उनकी इमेज अपने बैकएंड से भेजें, और वहीं अपना साइन-इन और ख़र्च की सीमाएँ जोड़ें।
- 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 क्रेडिट लगता है। |