রিয়েল-টাইম 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-কম্প্যাটিবল এন্ডপয়েন্ট ভিন্নভাবে কাজ করে: এটি কখনও 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_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 | ভগ্নাংশ | %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টি পর্যন্ত ছবির 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 কোড)।
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" } } } }। সব ক্রেডিট প্রয়োজনমতো কেনা এবং মেয়াদ কখনও শেষ হয় না, তাই 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টি পর্যন্ত পাবলিক ছবির 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 দিয়ে মেলান।

  • done true হলে একটি ব্যাচ আর 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_readyRetry-After (2 s) অপেক্ষা করে আবার জিজ্ঞেস করুন। ছবি আবার জমা দেবেন না।
GET …/result উত্তর দেয় 410 result_unavailableসংরক্ষিত ফলাফল মুছে ফেলা হয়েছে। ছবিটি আবার প্রসেস করা একটি নতুন কাজ এবং এতে 1 ক্রেডিট লাগে।
POST উত্তর দেয় 400, 413 বা 422আগে রিকোয়েস্ট বা ছবিটি ঠিক করুন; অপরিবর্তিত পাঠালে একই উত্তর আসবে।
POST উত্তর দেয় 401 বা 402কী ঠিক করুন বা টপ-আপ করুন। লুপে আটকে থাকবেন না।
POST উত্তর দেয় 429 rate_limitedRetry-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 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টি ছবির URL400 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 ক্রেডিট লাগে।