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 (שקוף, ברזולוציה מלאה)התחלה מהירה
מעתיקים, מדביקים, מחליפים את 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 כדי לבחור את סיומת הקובץ. |
202 | JSON: { id, status, status_url, result_url } | לא תמונה. המתינו שתיים-שלוש שניות, ואז בצעו GET ל-result_url. אל תשלחו את התמונה שוב. |
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; אפשר גם לשלוח ב-POST את הבייטים הגולמיים של התמונה עם Content-Type: image/jpeg, image/png, image/webp או application/octet-stream. לכל היותר 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) ציבורית של התמונה. אנחנו מורידים אותה (עד 3 הפניות, 15 s). אם נשלחים כמה, image_file קודם, אחריו image_file_b64, אחריו image_url, ולבסוף הגוף הגולמי. |
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 או צבע רקע, ולבסוף הפורמט. כל אפשרות עולה אותו קרדיט אחד. מתעלמים מפרמטרים לא מוכרים.
דוגמה: 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.png200 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-Confidence | 0–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. אותו מפתח; אתם רואים רק את המשימות שלכם.
| שדה | משמעות |
|---|---|
status | queued, processing, succeeded, partial, failed או canceled |
done | true ברגע שלא נשאר מה להריץ |
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). |
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. GET https://removebackground.dev/v1.0/account עם ה-X-Api-Key שלכם.
שגיאות (נקודות קצה של /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. שתי כתובות הדוגמה שלמעלה היו עולות עד 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 / גוף JSON | 25 MB אחרי פענוח (גוף הבקשה עשוי להיות גדול בכשליש) | 413 too_large |
| רזולוציית קלט | תמונות מעל 25 MP מוקטנות ל-25 MP לפני העיבוד | — |
| גודל פלט | רוחב וגובה, כל אחד בין 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, ואז 202 עם ה-job id | 202 |
| גודל אצווה | 100 כתובות URL של תמונות לכל POST /v1/batch | 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. כדי לאפשר למשתמשים שלכם להסיר רקעים, העבירו את התמונות שלהם דרך ה-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 | התוצאה השמורה נמחקה. עיבוד מחדש עולה קרדיט אחד. |