ব্যাকগ্রাউন্ড সরানোর 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-কম্প্যাটিবল এন্ডপয়েন্ট ভিন্নভাবে কাজ করে: এটি কখনও 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 কী বা 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 | ভগ্নাংশ | % | 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-কম্প্যাটিবল এন্ডপয়েন্ট
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 বা %, CSS-এর মতো 1–4টি মান ("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 | সমর্থিত | # সহ বা ছাড়া হেক্স (81d4fa), অথবা রঙের নাম। 8-সংখ্যার হেক্সে রং থাকে, আলফা বাদ যায়। |
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 সেকেন্ড পর্যন্ত অপেক্ষা করি; তার মধ্যে ছবি তৈরি না হলে আপনি একটি retry-যোগ্য 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" } } } }। সব ক্রেডিট প্রয়োজনমতো কেনা এবং মেয়াদ কখনও শেষ হয় না, তাই 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. কাজটি পোল করুন
done true না হওয়া পর্যন্ত কয়েক সেকেন্ড পরপর GET /v1/jobs/:id করুন। 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 এন্ডপয়েন্ট, webhook বা 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-কম্প্যাটিবল 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-কম্প্যাটিবল এন্ডপয়েন্ট আলাদা: এর 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 ক্রেডিট লাগে। |