API בזמן אמת

API להסרת רקע: בקשה אחת נכנסת, PNG מוגמר יוצא.

העלו קובץ, שלחו כתובת URL ציבורית של תמונה, או ספקו Base64. רוב התמונות הבודדות חוזרות מוכנות באותה תגובת HTTP, בדרך כלל תוך שניות ספורות. אם אחת לוקחת יותר זמן, מקבלים job id שאיתו שולפים את התוצאה, בלי לשלוח את התמונה שוב. נקודת קצה לאצוות מטפלת בעיבוד בכמות.

קרדיט אחד לכל תמונה שהצליחה · תמונות שנכשלו בחינם · המפתחות בחשבון שלכם

$ 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, ולבסוף הגוף הגולמי. הדוגמאות האלה קוראות את המפתח ממשתנה הסביבה REMOVEBG_API_KEY (הגדירו אותו עם export REMOVEBG_API_KEY=…); שימו לב למירכאות הכפולות, שמאפשרות ל-shell להציב את הערך.

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 שניות, מקבלים במקום זאת 202 Accepted עם job id. המשימה ממשיכה לרוץ: שלפו את התוצאה שלה עם המזהה. שליחה חוזרת של התמונה תתחיל משימה שנייה ועלולה לעלות קרדיט נוסף.

סטטוסגוףמה לעשות
200התמונה (image/png, image/jpeg או image/webp)שמרו אותה. השתמשו ב-Content-Type כדי לבחור את סיומת הקובץ.
202JSON: { id, status, status_url, result_url }לא תמונה. המתינו שתיים-שלוש שניות, ואז בצעו GET ל-result_url. אל תשלחו את התמונה שוב.
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; אפשר גם לשלוח ב-POST את הבייטים הגולמיים של התמונה עם Content-Type: image/jpeg, image/png, image/webp או application/octet-stream. לכל היותר 25 MB. ראו שליחת התמונה לכל שיטת קלט.

פרמטרסוגתיאור
image_filefileהתמונה (JPG, PNG או WebP), כנתוני טופס multipart.
image_file_b64stringהתמונה כ-Base64, עם או בלי הקידומת data:image/…;base64, (25 MB אחרי פענוח). נוח מתוך JSON.
image_urlstringכתובת http(s) ציבורית של התמונה. אנחנו מורידים אותה (עד 3 הפניות, 15 s). אם נשלחים כמה, image_file קודם, אחריו image_file_b64, אחריו image_url, ולבסוף הגוף הגולמי.
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-downעם width ו-height. contain (ברירת מחדל): התאמה פנימה, ממורכז, השאר שקוף (או bg_color). cover: מילוי התיבה, תוך חיתוך העודף סביב האובייקט. scale-down: כמו contain, אבל אף פעם לא מוגדל.

האפשרויות מוחלות בסדר הזה: roi, size (או width/height בהמשך), crop + padding + יחס גובה-רוחב, width/height + fit, ואז channels או צבע רקע, ולבסוף הפורמט. כל אפשרות עולה אותו קרדיט אחד. מתעלמים מפרמטרים לא מוכרים.

דוגמה: JPG באיכות HD על רקע לבן, חתוך סביב האובייקט עם ריפוד של 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 שלכם אם שלחתם, אחרת מזהה שנוצר. ציינו אותו כשאתם פונים לתמיכה.
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מזהה התוצאה השמורה.
X-Job-Idמזהה המשימה שמאחורי הבקשה (שמיש עם /v1/jobs/:id).

202 Accepted (חלופה כשהתור ארוך)

אם התמונה לא הסתיימה תוך כ-55 שניות, למשל כשהתור עמוס במיוחד, מקבלים 202 עם JSON { id, status, status_url, result_url } (וגם Location ו-Retry-After: 2). תשאלו את status_url עד ש-done הוא true, ואז הורידו את result_url. החיוב הוא פעם אחת, רק כשהתמונה מצליחה. אל תשלחו את התמונה שוב בלי Idempotency-Key: זה מתחיל משימה שנייה. ראו טיפול בתגובה לדוגמה מלאה.

GET /v1/jobs/:id

סטטוס של משימה שנוצרה על ידי /v1/remove או /v1/batch. אותו מפתח; אתם רואים רק את המשימות שלכם.

שדהמשמעות
statusqueued, processing, succeeded, partial, failed או canceled
donetrue ברגע שלא נשאר מה להריץ
total, succeeded, failed, skippedספירות תמונות
credits_chargedהקרדיטים שהמשימה הזו ניצלה (אחד לכל תמונה שהצליחה)
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). עונה 409 not_ready עם Retry-After: 2 כל עוד היא רצה, או בשגיאה של התמונה עצמה אם היא נכשלה.

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). עונה מיד 202 עם { id, status, total, invalid, duplicates, status_url }. תשאלו את המשימה, ואז שלפו את ה-result_url של כל פריט. קרדיט אחד לכל תמונה שמצליחה; לכל היותר 3 משימות אצווה פתוחות לכל חשבון. הדרכה מלאה עם דוגמאות תגובה באצוות, מההתחלה ועד הסוף.

נקודת קצה תואמת ל-remove.bg

ה-API בשירות עצמי של remove.bg מסתיים ב-1 December 2026, 09:00 CET (הודעה). אינטגרציות קיימות של remove.bg עובדות כאן בשינוי שורה אחת: https://api.remove.bg/v1.0/removebg → https://removebackground.dev/v1.0/removebg, עם מפתח של removebackground.dev באותה כותרת X-Api-Key. אותו תור, אותו קרדיט אחד לכל תמונה שהצליחה, אותה איכות פלט כמו /v1/remove. מדריך המעבר.

POST /v1.0/removebg

גוף multipart, urlencoded או JSON עם שמות הפרמטרים של remove.bg. עונה עם הבייטים של התמונה והכותרות של remove.bg, או { "data": { "result_b64", "foreground_top", "foreground_left", "foreground_width", "foreground_height" } } כשאתם שולחים Accept: application/json. השגיאות במבנה של remove.bg: { "errors": [{ "title", "code", "detail" }] }. בניגוד ל-/v1/remove הוא אף פעם לא עונה 202: הוא ממתין עד 110 שניות, ואז מחזיר 503 timeout. המשימה ממשיכה לרוץ ומחויבת אם היא מצליחה, ולכן ניסיון חוזר של הבקשה הזו מתחיל משימה שנייה.

פרמטרסטטוסהערות
image_file / image_file_b64 / image_urlנתמךגוף בקשה מסוג multipart, urlencoded או JSON. JPG, PNG או WebP עד 25 MB.
sizeנתמךauto, full, 4k ו-50MP נותנים את הרזולוציה המקורית (עד 25 MP); preview, small ו-regular ≈ 0.25 MP; medium 1.5 MP; hd 4 MP. תמיד קרדיט אחד.
formatנתמךauto (PNG אם יש שקיפות, אחרת JPG), png, jpg, webp ו-zip (color.jpg + alpha.png).
crop / crop_marginנתמךpx או % מהאובייקט, 1–4 ערכים בסגנון CSS ("10% 20%" = אנכי, אופקי); לכל היותר 500px או 50% לכל צד.
roiנתמך"x1 y1 x2 y2" ב-px או ב-%: נשמר רק האובייקט שבתוך האזור.
scale / positionנתמךscale בין 10% ל-100% או original; position בערך center, original או "x% y%".
channelsנתמךrgba (חיתוך) או alpha (מסכה בגווני אפור).
bg_colorנתמךHex עם # או בלי (81d4fa), או שם של צבע. Hex בן 8 ספרות שומר על הצבע ומשמיט את ערוץ האלפא.
bg_image_url / bg_image_fileנתמךהחיתוך ממוזג מעל תמונת הרקע שלכם, בהתאמת cover לגודל הפלט.
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 שלכם, או מזהה שנוצר. תוספת.
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. GET https://removebackground.dev/v1.0/account עם ה-X-Api-Key שלכם.

שגיאות (נקודות קצה של /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_reusedGET …/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, 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. שתי כתובות הדוגמה שלמעלה היו עולות עד 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), ו-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 שמתחיל מאפס. המיקומים תואמים לרשימה שלכם אחרי הסרת כתובות לא תקינות וכפולות, ולכן כשאחד המונים גדול מ-0, התאימו תוצאות לפי input ולא לפי אינדקס.

  • אצווה מפסיקה להיספר במגבלה של 3 אצוות פתוחות ברגע ש-done הוא true.
  • ל-API אין נקודת קצה לביטול, אין webhooks ואין הורדת ZIP. אצוות שהופעלו בדף העיבוד בכמות אפשר לבטל או להוריד שם כ-ZIP.

ניסיונות חוזרים, כפילויות וחיוב

שלחו Idempotency-Key וניסיונות חוזרים לא יחייבו פעמיים. הוסיפו כותרת Idempotency-Key (כל מחרוזת ייחודית עד 255 תווים, למשל UUID) ל-POST /v1/remove או ל-POST /v1/batch, מפתח אחד לכל תמונה או אצווה. אם תשלחו שוב את אותה בקשה עם אותו מפתח, תקבלו את המשימה שהבקשה הראשונה יצרה, עם Idempotent-Replayed: true: בלי משימה חדשה ובלי חיוב חדש, גם אם הבקשה הראשונה עדיין רצה. אותו מפתח עם תמונה או אפשרויות שונות עונה 409 idempotency_key_reused. המפתחות שייכים לחשבון שלכם ואינם פגים.

בלי מפתח, כל POST יוצר משימה חדשה, וכל משימה שמצליחה עולה קרדיט אחד (ל-POST /v1.0/removebg התואם ל-remove.bg אין מפתחות). קריאת משימה (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 אחרי הניסיונות החוזרים שלנו)בחינם.
התמונה מצליחהקרדיט אחד, מחויב פעם אחת, כשהיא מצליחה. הניסיונות החוזרים הפנימיים שלנו לא מוסיפים חיובים.
קיבלתם 202עדיין כלום. המשימה ממשיכה לרוץ ומחויבת בקרדיט אחד רק אם היא מצליחה.
הזמן בצד הלקוח שלכם פג או שהחיבור התנתק בזמן ההמתנההמשימה ממשיכה לרוץ ומחויבת אם היא מצליחה. התוצאה מופיעה בסטודיו.
שלחתם את אותה בקשה פעמיים עם אותו Idempotency-Keyמשימה אחת, לכל היותר קרדיט אחד. הבקשה החוזרת מקבלת את אותה משימה (כותרת Idempotent-Replayed: true).
שלחתם את אותה תמונה פעמיים בלי מפתחשתי משימות נפרדות; כל אחת שמצליחה עולה קרדיט אחד.
הורדתם שוב תוצאה מוגמרתבחינם, כמה פעמים שתרצו כל עוד היא שמורה.
אצווה הצליחה חלקיתקרדיט אחד לכל תמונה שהצליחה; credits_charged במשימה מציג את הסכום הכולל.
אצווה כוללת את אותה כתובת URL פעמייםכפילויות בתוך אצווה אחת מושמטות לפני הכניסה לתור ולעולם לא מחויבות. כתובות זהות באצוות שונות הן משימות נפרדות.
הקרדיטים נגמרים באמצע אצווהתמונות שכבר הסתיימו נשארות בתשלום; השאר מסומנות כמדולגות (out_of_credits) והן בחינם. קנו קרדיטים, ואז שלחו את הכתובות שנותרו כאצווה חדשה.

מתי לנסות שוב

מה קרהמה לעשות
GET /v1/jobs/:id או …/result נכשל (שגיאת רשת, 5xx)בטוח לנסות שוב: קריאת משימה אף פעם לא יוצרת עבודה או חיוב. המתינו מעט בין הניסיונות.
GET …/result עונה 409 not_readyהמתינו לפי Retry-After (2 s) ובקשו שוב. אל תשלחו את התמונה מחדש.
GET …/result עונה 410 result_unavailableהתוצאה השמורה נמחקה. עיבוד התמונה מחדש הוא משימה חדשה ועולה קרדיט אחד.
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 / גוף JSON25 MB אחרי פענוח (גוף הבקשה עשוי להיות גדול בכשליש)413 too_large
רזולוציית קלטתמונות מעל 25 MP מוקטנות ל-25 MP לפני העיבוד—
גודל פלטרוחב וגובה, כל אחד בין 1 ל-6000 px400 invalid_width / invalid_height
הורדת image_urlhttp(s) בלבד, זמן קצוב של 15 s, עד 3 הפניות; כתובות פרטיות, loopback ו-link-local נדחות, בכל הפניה400 invalid_url · fetch_failed · fetch_timeout
המתנה ב-POST /v1/removeכ-55 s, ואז 202 עם ה-job id202
גודל אצווה100 כתובות URL של תמונות לכל POST /v1/batch400 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. כדי לאפשר למשתמשים שלכם להסיר רקעים, העבירו את התמונות שלהם דרך ה-backend שלכם, והוסיפו שם התחברות ומגבלות הוצאה משלכם.

  • ה-API מאפשר CORS כדי שיעבוד מכלים ומקוד בצד השרת. זה לא הופך את הכנסת המפתח לדף אינטרנט לבטוחה: כל אחד יכול לקרוא אותו שם.
  • כל המפתחות בחשבון מנצלים את אותה יתרת קרדיטים. צרו מפתח נפרד לכל אפליקציה או סביבה בדף החשבון, כדי שתוכלו לבטל אחד בלי לשבור את האחרים.
  • אם מפתח דלף, בטלו אותו מיד בדף החשבון (הוא מפסיק לעבוד מייד) וצרו חדש. אנחנו שומרים רק גיבוב (hash) של כל מפתח, ולכן לא נוכל להציג לכם אותו שוב.

פתרון בעיות

תסמיןמה קורה
ה-PNG שלי לא נפתחהגוף היה JSON (משימת 202 או שגיאה), ולא תמונה. בדקו את סטטוס ה-HTTP ואת ה-Content-Type לפני השמירה.
הזמן של הסקריפט פג אבל התמונה מופיעה בסטודיוהמשימה המשיכה לרוץ אחרי שהפסקתם לחכות. שלפו אותה עם ה-job id במקום לשלוח שוב.
חויבתי פעמיים על תמונה אחתהיא נשלחה פעמיים בלי Idempotency-Key (לרוב ניסיון חוזר אוטומטי אחרי timeout). שלחו מפתח אחד לכל תמונה והשתמשו בו שוב בניסיונות חוזרים.
הכתובת נפתחת בדפדפן שלי אבל ה-API לא מצליח להוריד אותהייתכן שהשרת דורש עוגיות או התחברות, חוסם שרתים, מפנה יותר מ-3 פעמים, לוקח יותר מ-15 s, או שתוקף הכתובת החתומה פג. העלו את הקובץ במקום זאת.
האצווה שלי נעצרה באמצעבדקו את items[] במשימה: לפריטים שנכשלו יש קוד שגיאה; פריטים מדולגים עם out_of_credits פירושם שהיתרה נגמרה.
נראה שאפשרות מסוימת לא עושה כלוםשמות פרמטרים לא מוכרים מתעלמים מהם בשקט. בדקו את האיות מול טבלת הפרמטרים. ב-/v1.0/removebg, חלק מהאפשרויות של remove.bg מתקבלות אבל מתעלמים מהן (ראו את הטבלה ההיא).
הרקע לא שקוףJPG לא יכול להיות שקוף. השתמשו ב-format=png או webp והשאירו את bg_color לא מוגדר.
קישור התוצאה מחזיר 410התוצאה השמורה נמחקה. עיבוד מחדש עולה קרדיט אחד.