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 body ตัวอย่างเหล่านี้อ่านคีย์จากตัวแปรสภาพแวดล้อม 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 form data ฟิลด์ image_file ไฟล์ JPG, PNG หรือ WebP ไม่เกิน 25 MB

ทุกตัวอย่างบันทึก body ลงไฟล์ ไฟล์นั้นจะเป็นรูปภาพก็ต่อเมื่อสถานะเป็น 200 เท่านั้น ดูจัดการการตอบกลับ

จัดการการตอบกลับ

รูปเดี่ยวส่วนใหญ่จะเสร็จและส่งกลับมาในการตอบกลับเดียวกัน เมื่อคิวยุ่งผิดปกติและรูปใช้เวลานานกว่าประมาณ 55 วินาที คุณจะได้ 202 Accepted พร้อม job id แทน งานยังคงทำงานต่อ: ดึงผลลัพธ์ด้วย id นั้น การส่งรูปซ้ำจะเริ่มงานที่สองและอาจเสียเครดิตเป็นครั้งที่สอง

สถานะBodyสิ่งที่ต้องทำ
200รูปภาพ (image/png, image/jpeg หรือ image/webp)บันทึกไว้ ใช้ Content-Type เพื่อเลือกนามสกุลไฟล์
202JSON: { id, status, status_url, result_url }ไม่ใช่รูปภาพ รอสองสามวินาที แล้ว GET result_url อย่าส่งรูปซ้ำ
4xx / 5xxJSON: { "error": { "code", "message" } }ไม่ใช่รูปภาพ อ่านรหัส (ดูข้อผิดพลาด) และอย่าบันทึก body เป็นรูป

ตัวอย่างฉบับสมบูรณ์

จัดการรูปที่เสร็จแล้ว กรณี 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": "…" } }

สัญญา API ฉบับเต็มเผยแพร่เป็น OpenAPI 3.1 (openapi.json) สำหรับตัวสร้างไคลเอนต์ Postman หรือการทดสอบ ผู้ช่วยเขียนโค้ด AI เริ่มต้นได้จาก llms.txt

POST /v1/remove

แบบเรียลไทม์ ลบพื้นหลังจากรูปหนึ่งรูป โดยปกติรูปที่เสร็จแล้วจะเป็น response body (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 form data
image_file_b64stringรูปภาพแบบ base64 จะมีหรือไม่มีคำนำหน้า data:image/…;base64, ก็ได้ (25 MB หลังถอดรหัส) สะดวกเมื่อส่งจาก JSON
image_urlstringURL แบบ http(s) สาธารณะของรูป เราจะดาวน์โหลดให้ (redirect สูงสุด 3 ครั้ง, 15 วินาที) หากส่งมาหลายแบบ image_file จะได้ก่อน ตามด้วย image_file_b64, image_url และ raw body
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 หรือสีพื้นหลัง แล้วจึงเป็น format ทุกตัวเลือกใช้ 1 เครดิตเท่ากัน พารามิเตอร์ที่ไม่รู้จักจะถูกละเว้น

ตัวอย่าง: 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-IDX-Request-ID ของคุณหากส่งมา มิฉะนั้นเป็น 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-IdId ของผลลัพธ์ที่จัดเก็บไว้
X-Job-IdId ของงานเบื้องหลังคำขอ (ใช้กับ /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เครดิตที่งานนี้ใช้ (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 ใช้เลือกรูปในงาน batch (ค่าเริ่มต้น 0) ตอบกลับ 409 not_ready พร้อม Retry-After: 2 ขณะยังทำงานอยู่ หรือข้อผิดพลาดของรูปนั้นหากล้มเหลว

POST /v1/batch

ส่ง URL ของรูปสูงสุด 100 รายการเข้าคิวเป็นงานเดียว: 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 ของแต่ละรายการ 1 เครดิตต่อรูปที่สำเร็จ เปิดงาน batch ได้สูงสุด 3 งานต่อบัญชี ดูคำแนะนำพร้อมตัวอย่างการตอบกลับในBatch ตั้งแต่ต้นจนจบ

เอนด์พอยต์ที่เข้ากันได้กับ 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 เดิม คิวเดียวกัน 1 เครดิตต่อรูปที่สำเร็จเหมือนกัน และคุณภาพผลลัพธ์เท่ากับ /v1/remove คู่มือการย้าย

POST /v1.0/removebg

Body แบบ 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 ใช้ 1 เครดิตเสมอ
formatรองรับauto (PNG หากโปร่งใส มิฉะนั้นเป็น JPG), png, jpg, webp และ zip (color.jpg + alpha.png)
crop / crop_marginรองรับpx หรือ % ของวัตถุ ค่า 1–4 ค่าแบบ CSS (“10% 20%” = แนวตั้ง, แนวนอน); สูงสุด 500px หรือ 50% ต่อด้าน
roiรองรับ“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 หลักจะคงสีไว้และตัดค่า alpha ออก
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รับได้ แต่ไม่มีผลขอบนุ่มและส่วนกึ่งโปร่งใสมาจาก matte ของโมเดลตามที่เป็นอยู่
shadow_type / shadow_opacity / add_shadowรับได้ แต่ไม่มีผลไม่มีการเพิ่มเงา
คำขอที่ใช้เวลานานข้อแตกต่างเรารอได้สูงสุด 110 วินาที หากรูปยังไม่เสร็จภายในเวลานั้น คุณจะได้รับ 503 ที่ลองใหม่ได้ (ไม่เสียเครดิต เว้นแต่จะเสร็จแล้ว)

ตัวอย่าง

curl -H "X-Api-Key: $REMOVEBG_API_KEY" \
  -F 'image_file=@photo.jpg' -F 'size=auto' \
  -F 'crop=true' -F 'crop_margin=10%' -F 'bg_color=ffffff' \
  -o no-bg.jpg https://removebackground.dev/v1.0/removebg

เฮดเดอร์การตอบกลับ

เฮดเดอร์ความหมาย
X-Width / X-Heightขนาดของผลลัพธ์เป็นพิกเซล
X-Credits-Chargedเครดิตที่รูปนี้ใช้: 1 เสมอ (รูปที่ล้มเหลวใช้ 0)
X-Typeเป็น “other” เสมอ (ตรวจจับวัตถุอัตโนมัติ)
X-Foreground-Top / -Left / -Width / -Heightกรอบล้อมรอบวัตถุในผลลัพธ์ เป็นพิกเซล
X-Request-IDส่ง X-Request-ID ของคุณกลับมา หรือ id ที่สร้างขึ้น เพิ่มเติม
X-Matte-Confidence / X-Matte-Ambiguous-Ratioมาสก์สะอาดแค่ไหน (0–1) และสัดส่วนพิกเซลขอบนุ่ม เพิ่มเติม: มีประโยชน์ในการทำเครื่องหมายรูปที่ควรตรวจสอบ

ข้อผิดพลาด

สถานะความหมาย
400พารามิเตอร์หรือรูปไม่ถูกต้อง (รหัสเช่น invalid_size, invalid_crop_margin, missing_source, file_too_large, unknown_foreground)
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 ของรูปไม่ได้
401unauthorizedไม่มี x-api-key ผิด หรือถูกเพิกถอนแล้ว
402insufficient_credits, out_of_creditsยอดคงเหลือของคุณหมด เติมเครดิตที่หน้าราคา
404not_foundไม่มีงานนี้ (หรือไม่ใช่ของคุณ)
409not_ready, canceled, idempotency_key_reusedGET …/result ขณะงานยังทำงานอยู่ (ลองใหม่หลัง 2 วินาที) งานถูกยกเลิก หรือใช้ Idempotency-Key ซ้ำกับคำขออื่น
410result_unavailableผลลัพธ์ถูกลบหรือหมดอายุแล้ว
413too_largeรูปใหญ่กว่า 25 MB
422processing_failed, invalid_image, missing_uploadไฟล์ไม่ใช่รูปที่อ่านได้ ไม่เสียเครดิต
429rate_limited, too_many_batchesเกินขีดจำกัดคำขอต่อบัญชี (รอตาม Retry-After) หรือคุณมีงาน batch ทำงานอยู่แล้ว 3 งาน
502model_unavailable, upstream_error, …เราประมวลผลรูปไม่ได้หลังลองใหม่แล้ว ไม่เสียเครดิต
503server_paused, unavailableAPI หยุดชั่วคราว (ก่อนเปิดให้บริการ) หรือไม่พร้อมใช้งานชั่วคราว ลองใหม่ภายหลัง

Batch ตั้งแต่ต้นจนจบ

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" }'

URL ของรูปสาธารณะสูงสุด 100 รายการ พร้อมตัวเลือกใดก็ได้ของ /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 นับรายการที่ไม่ใช่ URL แบบ 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 ที่เริ่มจากศูนย์ ตำแหน่งเรียงตามรายการของคุณหลังตัด URL ที่ไม่ถูกต้องและซ้ำออก ดังนั้นเมื่อจำนวนใดจำนวนหนึ่งมากกว่า 0 ให้จับคู่ผลลัพธ์ด้วย input แทนลำดับ

  • Batch จะไม่นับรวมในขีดจำกัด 3 batch ที่เปิดอยู่อีกต่อไปเมื่อ done เป็น true
  • API ไม่มีเอนด์พอยต์ยกเลิก webhook หรือการดาวน์โหลด ZIP ส่วน batch ที่เริ่มในหน้าทีละหลายรูปสามารถยกเลิกหรือดาวน์โหลดเป็น ZIP ได้ที่หน้านั้น

การลองใหม่ รายการซ้ำ และการคิดเครดิต

ส่ง Idempotency-Key แล้วการลองใหม่จะไม่คิดเครดิตซ้ำ เพิ่มเฮดเดอร์ Idempotency-Key (สตริงที่ไม่ซ้ำกันยาวไม่เกิน 255 ตัวอักษร เช่น UUID) ใน POST /v1/remove หรือ POST /v1/batch หนึ่งคีย์ต่อหนึ่งรูปหรือหนึ่ง batch หากคุณส่งคำขอเดิมอีกครั้งด้วยคีย์เดิม คุณจะได้งานที่คำขอแรกสร้างไว้ พร้อม Idempotent-Replayed: true: ไม่มีงานใหม่และไม่คิดเครดิตใหม่ แม้คำขอแรกยังทำงานอยู่ คีย์เดิมกับรูปหรือตัวเลือกที่ต่างกันจะตอบกลับ 409 idempotency_key_reused คีย์เป็นของบัญชีคุณและไม่หมดอายุ

หากไม่มีคีย์ ทุก POST จะสร้างงานใหม่ และแต่ละงานที่สำเร็จใช้ 1 เครดิต (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 หลังเราลองใหม่แล้ว)ไม่เสียเครดิต
รูปสำเร็จ1 เครดิต คิดครั้งเดียวเมื่อสำเร็จ การลองใหม่ภายในระบบของเราไม่คิดเพิ่ม
คุณได้ 202ยังไม่คิด งานยังทำงานต่อและคิด 1 เครดิตเฉพาะเมื่อสำเร็จ
ไคลเอนต์ของคุณหมดเวลาหรือตัดการเชื่อมต่อระหว่างรองานยังทำงานต่อและถูกคิดเครดิตหากสำเร็จ ผลลัพธ์จะแสดงในสตูดิโอของคุณ
คุณส่งคำขอเดิมสองครั้งด้วย Idempotency-Key เดิมงานเดียว สูงสุด 1 เครดิต คำขอซ้ำได้งานเดิม (เฮดเดอร์ Idempotent-Replayed: true)
คุณส่งรูปเดิมสองครั้งโดยไม่มีคีย์สองงานแยกกัน แต่ละงานที่สำเร็จใช้ 1 เครดิต
คุณดาวน์โหลดผลลัพธ์ที่เสร็จแล้วอีกครั้งไม่เสียเครดิต ดาวน์โหลดได้บ่อยเท่าที่ต้องการขณะที่ยังจัดเก็บอยู่
Batch สำเร็จบางส่วน1 เครดิตต่อรูปที่สำเร็จ credits_charged ในงานแสดงยอดรวม
Batch มี URL เดิมสองครั้งรายการซ้ำใน batch เดียวกันจะถูกตัดออกก่อนเข้าคิวและไม่เสียเครดิต URL เดียวกันใน batch ต่างกันถือเป็นงานแยกกัน
เครดิตหมดระหว่าง batchรูปที่เสร็จแล้วยังคิดเครดิตตามเดิม ที่เหลือจะถูกทำเครื่องหมายว่าข้าม (out_of_credits) และไม่เสียเครดิต ซื้อเครดิต แล้วส่ง URL ที่เหลือเป็น batch ใหม่

เมื่อไรควรลองใหม่

สิ่งที่เกิดขึ้นสิ่งที่ต้องทำ
GET /v1/jobs/:id หรือ …/result ล้มเหลว (ข้อผิดพลาดเครือข่าย, 5xx)ลองใหม่ได้อย่างปลอดภัย: การอ่านงานไม่สร้างงานหรือคิดเครดิต เว้นระยะเล็กน้อยระหว่างแต่ละครั้ง
GET …/result ตอบกลับ 409 not_readyรอตาม Retry-After (2 วินาที) แล้วถามใหม่ อย่าส่งรูปซ้ำ
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รอจนกว่า batch ที่เปิดอยู่ 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 body25 MB หลังถอดรหัส (request body อาจใหญ่กว่าประมาณหนึ่งในสาม)413 too_large
ความละเอียดของรูปต้นทางรูปที่เกิน 25 MP จะถูกย่อเหลือ 25 MP ก่อนประมวลผล—
ขนาดผลลัพธ์width และ height อย่างละ 1–6000 px400 invalid_width / invalid_height
การดาวน์โหลด image_urlhttp(s) เท่านั้น หมดเวลา 15 วินาที redirect ได้สูงสุด 3 ครั้ง ที่อยู่แบบ private, loopback และ link-local จะถูกปฏิเสธในทุก redirect400 invalid_url · fetch_failed · fetch_timeout
การรอใน POST /v1/removeประมาณ 55 วินาที จากนั้นได้ 202 พร้อม job id202
ขนาด batchURL ของรูป 100 รายการต่อ POST /v1/batch400 too_many_images
Batch ที่เปิดอยู่งานหลายรูปที่ยังไม่เสร็จ 3 งานต่อบัญชี (รูปเดี่ยวไม่นับ)429 too_many_batches
อัตราคำขอ60 คำขอต่อนาทีต่อบัญชี รวมทั้ง POST /v1/remove, /v1/batch และ /v1.0/removebg หนึ่ง batch นับเป็นหนึ่งครั้งไม่ว่าขนาดเท่าไร การอ่านงานไม่จำกัด429 rate_limited (พร้อม Retry-After)

ผลลัพธ์เก็บไว้นานแค่ไหน

ผลลัพธ์ทุกรายการจัดเก็บเป็นส่วนตัวในบัญชีของคุณเป็นเวลา 48 ชั่วโมงหลังสร้าง แล้วจึงถูกลบ ระหว่างนั้นคุณดาวน์โหลดอีกครั้งได้ฟรีด้วย GET /v1/jobs/:id/result หรือจากสตูดิโอของคุณ หลังจากนั้น ลิงก์ผลลัพธ์จะตอบกลับ 410 result_unavailable การประมวลผลรูปอีกครั้งเป็นงานใหม่ บันทึกสถานะงานยังอ่านได้หลังรูปถูกลบไปแล้ว ดูนโยบายความเป็นส่วนตัวสำหรับวิธีจัดการไฟล์ที่อัปโหลด เราไม่ใช้รูปของคุณในการฝึกโมเดล

ความปลอดภัย

เก็บคีย์ API ไว้บนเซิร์ฟเวอร์ที่คุณควบคุม อย่าใส่ไว้ในโค้ดฝั่งเบราว์เซอร์ แอปมือถือ รีโพสาธารณะ หรือ URL หากต้องการให้ผู้ใช้ของคุณลบพื้นหลังได้ ให้ส่งรูปผ่านแบ็กเอนด์ของคุณ และเพิ่มระบบเข้าสู่ระบบและการจำกัดการใช้จ่ายของคุณเองที่นั่น

  • API อนุญาต CORS เพื่อให้ใช้งานได้จากเครื่องมือและโค้ดฝั่งเซิร์ฟเวอร์ แต่ไม่ได้ทำให้การใส่คีย์ในหน้าเว็บปลอดภัย: ใครก็อ่านคีย์ได้จากที่นั่น
  • ทุกคีย์ในบัญชีใช้ยอดเครดิตเดียวกัน สร้างคีย์แยกสำหรับแต่ละแอปหรือสภาพแวดล้อมในหน้าบัญชีของคุณ เพื่อให้เพิกถอนคีย์หนึ่งได้โดยไม่กระทบคีย์อื่น
  • หากคีย์รั่วไหล ให้เพิกถอนในหน้าบัญชีทันที (คีย์จะหยุดทำงานทันที) แล้วสร้างคีย์ใหม่ เราเก็บเพียงค่าแฮชของแต่ละคีย์ จึงแสดงคีย์ให้คุณอีกไม่ได้

การแก้ปัญหา

อาการสาเหตุ
เปิดไฟล์ PNG ไม่ได้body เป็น JSON (งาน 202 หรือข้อผิดพลาด) ไม่ใช่รูปภาพ ตรวจสอบสถานะ HTTP และ Content-Type ก่อนบันทึก
สคริปต์หมดเวลา แต่รูปแสดงในสตูดิโองานยังทำงานต่อหลังคุณหยุดรอ ดึงผลลัพธ์ด้วย job id แทนการส่งซ้ำ
ถูกคิดเครดิตสองครั้งสำหรับรูปเดียวรูปถูกส่งสองครั้งโดยไม่มี Idempotency-Key (มักเป็นการลองใหม่อัตโนมัติหลังหมดเวลา) ใช้หนึ่งคีย์ต่อหนึ่งรูปและใช้คีย์เดิมเมื่อลองใหม่
URL เปิดได้ในเบราว์เซอร์ แต่ API ดึงไม่ได้โฮสต์อาจต้องใช้คุกกี้หรือการเข้าสู่ระบบ บล็อกเซิร์ฟเวอร์ redirect เกิน 3 ครั้ง ใช้เวลาเกิน 15 วินาที หรือ signed URL หมดอายุแล้ว ให้อัปโหลดไฟล์แทน
Batch หยุดกลางทางดู items[] ในงาน: รายการที่ล้มเหลวมีรหัสข้อผิดพลาด รายการที่ข้ามพร้อม out_of_credits หมายความว่ายอดเครดิตหมด
ตัวเลือกดูเหมือนไม่มีผลชื่อพารามิเตอร์ที่ไม่รู้จักจะถูกละเว้นโดยไม่แจ้ง ตรวจสอบการสะกดกับตารางพารามิเตอร์ บน /v1.0/removebg ตัวเลือกบางตัวของ remove.bg รับได้แต่ไม่มีผล (ดูตารางนั้น)
พื้นหลังไม่โปร่งใสJPG โปร่งใสไม่ได้ ใช้ format=png หรือ webp และไม่ต้องตั้ง bg_color
ลิงก์ผลลัพธ์ได้ 410ผลลัพธ์ที่จัดเก็บไว้ถูกลบแล้ว การประมวลผลอีกครั้งใช้ 1 เครดิต