API för bakgrundsborttagning: en förfrågan in, färdig PNG ut.
Ladda upp en fil, skicka en publik bild-URL eller skicka Base64. De flesta enskilda bilder kommer tillbaka färdiga i samma HTTP-svar, oftast på några sekunder. Om en tar längre tid får du ett jobb-id att hämta resultatet med, utan att skicka bilden igen. En batch-endpoint hanterar stora mängder.
1 kredit per lyckad bild · misslyckade bilder är gratis · nycklar i ditt konto
$ 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 · oftast några sekunder
sparade dog.png (transparent, full upplösning)Snabbstart
Kopiera, klistra in, ersätt YOUR_API_KEY. Varje exempel sparar resultatet direkt till en fil, och exemplen i JavaScript och Python väntar dessutom vid en 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.pngSkicka din bild
POST /v1/remove tar emot bilden på fyra sätt. Skicka ett av dem; om en förfrågan innehåller flera vinner image_file, sedan image_file_b64, sedan image_url och sist den råa bodyn. Exemplen läser din nyckel från miljövariabeln REMOVEBG_API_KEY (ange den med export REMOVEBG_API_KEY=…); observera de dubbla citattecknen, som låter skalet fylla i värdet.
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@photo.jpg' \
-o photo-no-bg.pngMultipart-formulärdata, fältet image_file. JPG, PNG eller WebP, upp till 25 MB.
Varje exempel sparar bodyn till en fil. Filen är bara en bild när statusen är 200; se Hantera svaret.
Hantera svaret
De flesta enskilda bilder kommer tillbaka färdiga i samma svar. När kön är ovanligt full och en bild tar längre tid än cirka 55 sekunder får du i stället 202 Accepted med ett jobb-id. Jobbet fortsätter att köras: hämta resultatet med id:t. Om du skickar bilden igen startas ett andra jobb, som kan kosta en andra kredit.
| Status | Body | Vad du gör |
|---|---|---|
200 | Bilden (image/png, image/jpeg eller image/webp) | Spara den. Använd Content-Type för att välja filändelse. |
202 | JSON: { id, status, status_url, result_url } | Inte en bild. Vänta ett par sekunder och hämta sedan result_url med GET. Skicka inte bilden igen. |
4xx / 5xx | JSON: { "error": { "code", "message" } } | Inte en bild. Läs koden (se Fel) och spara inte bodyn som en bild. |
Ett komplett exempel
Hanterar den färdiga bilden, en 202, ett jobb som misslyckas och en lokal tidsgräns. Det skickar bilden en gång och gör bara om de säkra statuskontrollerna.
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"))Kräver Python 3 och requests (pip install requests).
- Om du stoppar ditt skript stoppas inte jobbet; det kan ändå bli klart och debiteras. Resultatet dyker upp i din Studio.
- Tidsgränserna väljer du själv, de är inget löfte från oss; de flesta bilder är klara på några sekunder.
- Den remove.bg-kompatibla endpointen fungerar annorlunda: den svarar aldrig med 202 (se nedan).
Autentisering
Skicka din API-nyckel i headern x-api-key. Skapa och återkalla nycklar på din kontosida; varje anrop använder det kontots krediter. Alla endpoints finns under https://removebackground.dev och accepterar CORS-förfrågningar, men CORS gör inte en nyckel säker att lägga på en webbsida: förvara den på din server (se Säkerhet). Fel returneras som JSON: { "error": { "code": "…", "message": "…" } }.
Hela kontraktet publiceras som OpenAPI 3.1 (openapi.json), för klientgeneratorer, Postman eller tester; AI-kodassistenter kan börja från llms.txt.
POST /v1/remove
Realtid. Ta bort bakgrunden från en bild. Oftast är den färdiga bilden svarets body (image/png, image/jpeg eller image/webp), vanligtvis efter några sekunder. Parametrar kan vara formulärfält, JSON-nycklar eller värden i query-strängen; du kan också skicka bildens råa bytes med POST och Content-Type: image/jpeg, image/png, image/webp eller application/octet-stream. Högst 25 MB. Se Skicka din bild för varje indatametod.
| Parameter | Typ | Beskrivning |
|---|---|---|
image_file | file | Bilden (JPG, PNG eller WebP) som multipart-formulärdata. |
image_file_b64 | string | Bilden som Base64, med eller utan prefixet data:image/…;base64, (25 MB efter avkodning). Praktiskt från JSON. |
image_url | string | En publik http(s)-URL till bilden. Vi laddar ner den (upp till 3 omdirigeringar, 15 s). Om flera skickas vinner image_file, sedan image_file_b64, sedan image_url och sist den råa bodyn. |
format | png | jpg | webp | Utdataformat. Standard: png. JPG har ingen transparens: bilden plattas ut mot bg_color, eller vitt. |
bg_color | färg | Fyll bakgrunden: hex (ffffff, #fff), rgb(255, 255, 255), eller white, black, red, green, blue, yellow, gray / grey. transparent (standard) behåller den transparent. |
size | preview | medium | hd | full | Tak i megapixlar, bildförhållandet behålls, skalas aldrig upp: preview ≤ 0,25 MP, medium ≤ 1,5 MP, hd ≤ 4 MP, full (standard) originalupplösningen (upp till 25 MP). Ignoreras när width eller height anges. |
crop | true | false | W:H | Beskär till motivets avgränsningsruta. Med ett bildförhållande (1:1, 4:5, 4:3, 16:9 …) utökas rutan sedan (krymps aldrig) till det förhållandet runt motivet; ytor utanför fotot är transparenta (eller bg_color). Standard: false. |
padding | px | bråkdel | % | Med crop: marginal som läggs till på varje sida. 0.1 eller 10% = en tiondel av motivets bredd (vänster/höger) och höjd (topp/botten); "10%,7.5%" anger horisontellt och vertikalt separat; 24px (eller ett heltal över 1 utan enhet) är pixlar, upp till 500. Standard: 0. |
channels | rgba | rgb | alpha | rgba (standard): transparent urklipp. rgb: ogenomskinlig, utplattad mot bg_color eller vitt. alpha: PNG-mask i gråskala (vitt = motiv), samma storlek och beskärning som urklippet. type=mask fungerar fortfarande som alias för alpha. |
width / height | 1–6000 | Exakt utdatastorlek i pixlar, tillämpas efter crop (åsidosätter size). Med bara en av dem följer den andra bildförhållandet. Sträcks aldrig ut. |
roi | x1 y1 x2 y2 | Intresseområde, i px eller % (t.ex. 0% 0% 50% 100%). Bara motivet inom området behålls; allt utanför blir bakgrund. Koordinaterna avser originalbilden. Standard: hela bilden. |
fit | contain | cover | scale-down | Med width och height. contain (standard): passa in, centrerat, resten transparent (eller bg_color). cover: fyll rutan och beskär det som sticker ut runt motivet. scale-down: som contain, men förstoras aldrig. |
Alternativen tillämpas i den här ordningen: roi, size (eller width/height senare), crop + padding + bildförhållande, width/height + fit, sedan channels eller bakgrundsfärg, och sist formatet. Varje alternativ kostar samma 1 kredit. Okända parametrar ignoreras.
Exempel: HD-JPG på vitt, beskuren till motivet med 40 px marginal
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.jpgExempel: kvadratisk bild för en marknadsplats, motivet centrerat med 10% marginal
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.jpgExempel: Base64 in, alfamask ut
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
Bildens bytes, med dessa headers:
| Header | Betydelse |
|---|---|
X-Image-Width / X-Image-Height | Resultatets storlek i pixlar (skickas även som X-Width / X-Height). |
X-Request-ID | Ditt X-Request-ID om du skickade ett, annars ett genererat id. Ange det när du kontaktar supporten. |
X-Processing-Time-Ms | Tid som förfrågan tog (även X-Processing-Ms). |
X-Matte-Confidence | 0–1: hur entydig masken är (medelvärdet av |2a − 1| över alla pixlar, a = alfa). Nära 1 är ett rent urklipp; lägre värden betyder många mjuka eller osäkra kanter. |
X-Matte-Ambiguous-Ratio | Andel pixlar med alfa strikt mellan 0,1 och 0,9 (hår, glas, rörelseoskärpa). Användbart för att flagga bilder för granskning. |
X-Credits-Remaining | Ditt saldo efter den här bilden. |
X-Removal-Id | Id för det lagrade resultatet. |
X-Job-Id | Id för jobbet bakom förfrågan (kan användas med /v1/jobs/:id). |
202 Accepted (reservläge vid långa köer)
Om bilden inte är klar inom cirka 55 sekunder, till exempel när kön är ovanligt full, får du 202 med JSON { id, status, status_url, result_url } (plus Location och Retry-After: 2). Polla status_url tills done är true och ladda sedan ner result_url. Du debiteras en gång, bara när bilden lyckas. Skicka inte bilden igen utan en Idempotency-Key: då startas ett andra jobb. Se Hantera svaret för ett komplett exempel.
GET /v1/jobs/:id
Status för ett jobb som skapats av /v1/remove eller /v1/batch. Samma nyckel; du ser bara dina egna jobb.
| Fält | Betydelse |
|---|---|
status | queued, processing, succeeded, partial, failed eller canceled |
done | true när inget återstår att köra |
total, succeeded, failed, skipped | antal bilder |
credits_charged | krediter som jobbet använde (1 per lyckad bild) |
status_url, result_url | var du pollar och var du laddar ner |
items[] | per bild: position, input, status, error { code, message } och vid lyckat resultat removal_id, width, height, format, result_url |
GET /v1/jobs/:id/result
Bildens bytes för ett färdigt jobb, med samma headers som /v1/remove. ?item=N väljer en bild i ett batchjobb (standard 0). Svarar 409 not_ready med Retry-After: 2 medan jobbet fortfarande körs, eller med bildens eget fel om den misslyckades.
POST /v1/batch
Köa upp till 100 bild-URL:er som ett jobb: JSON { "image_urls": ["https://…", …], "format": "jpg", "bg_color": "ffffff", "size": "hd", "crop": "1:1", "padding": "10%" }, med samma alternativ som /v1/remove (även channels, width, height och fit). Svarar direkt med 202 och { id, status, total, invalid, duplicates, status_url }. Polla jobbet och hämta sedan varje objekts result_url. 1 kredit per bild som lyckas; högst 3 öppna batchjobb per konto. Genomgång med exempelsvar i Batchar från början till slut.
remove.bg-kompatibel endpoint
remove.bg:s självbetjänings-API upphör 1 December 2026, 09:00 CET (meddelande). Befintliga remove.bg-integrationer fungerar här genom att ändra en rad: https://api.remove.bg/v1.0/removebg → https://removebackground.dev/v1.0/removebg, med en nyckel från removebackground.dev i samma X-Api-Key-header. Samma kö, samma 1 kredit per lyckad bild, samma utdatakvalitet som /v1/remove. Migreringsguide.
POST /v1.0/removebg
Multipart-, urlencoded- eller JSON-body med remove.bg:s parameternamn. Svarar med bildens bytes och remove.bg:s headers, eller med { "data": { "result_b64", "foreground_top", "foreground_left", "foreground_width", "foreground_height" } } när du skickar Accept: application/json. Fel har remove.bg:s format: { "errors": [{ "title", "code", "detail" }] }. Till skillnad från /v1/remove svarar den aldrig med 202: den väntar upp till 110 sekunder och returnerar sedan en 503-timeout. Jobbet fortsätter att köras och debiteras om det lyckas, så ett omförsök av den förfrågan startar ett andra jobb.
| Parameter | Status | Anteckningar |
|---|---|---|
image_file / image_file_b64 / image_url | Stöds | Multipart-, urlencoded- eller JSON-body. JPG, PNG eller WebP upp till 25 MB. |
size | Stöds | auto, full, 4k och 50MP ger originalupplösningen (upp till 25 MP); preview, small och regular ≈ 0,25 MP; medium 1,5 MP; hd 4 MP. Alltid 1 kredit. |
format | Stöds | auto (PNG vid transparens, annars JPG), png, jpg, webp och zip (color.jpg + alpha.png). |
crop / crop_margin | Stöds | px eller % av motivet, 1–4 värden i CSS-stil (”10% 20%” = vertikalt, horisontellt); högst 500px eller 50% per sida. |
roi | Stöds | ”x1 y1 x2 y2” i px eller %: bara motivet inom området behålls. |
scale / position | Stöds | scale 10%–100% eller original; position center, original eller ”x% y%”. |
channels | Stöds | rgba (urklipp) eller alpha (mask i gråskala). |
bg_color | Stöds | Hex med eller utan # (81d4fa), eller ett färgnamn. Ett 8-siffrigt hexvärde behåller färgen och tar bort dess alfa. |
bg_image_url / bg_image_file | Stöds | Urklippet läggs ovanpå din bakgrundsbild, som anpassas med cover till utdatastorleken. |
Accept: application/json | Stöds | Returnerar { data: { result_b64, foreground_top, foreground_left, foreground_width, foreground_height } }. |
type / type_level | Accepteras, ignoreras | Motivet identifieras automatiskt; X-Type är alltid ”other”. |
semitransparency | Accepteras, ignoreras | Mjuka kanter och halvtransparenta områden kommer oförändrade från modellens mask. |
shadow_type / shadow_opacity / add_shadow | Accepteras, ignoreras | Inga skuggor läggs till. |
Långvariga förfrågningar | Skillnad | Vi väntar upp till 110 sekunder; om en bild inte är klar då får du en 503 som kan försökas igen (ingen debitering om den inte blev klar). |
Exempel
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/removebgSvarsheaders
| Header | Betydelse |
|---|---|
X-Width / X-Height | Resultatets storlek i pixlar. |
X-Credits-Charged | Krediter som bilden använde: alltid 1 (misslyckade bilder kostar 0). |
X-Type | Alltid ”other” (motivet identifieras automatiskt). |
X-Foreground-Top / -Left / -Width / -Height | Motivets avgränsningsruta i resultatet, i pixlar. |
X-Request-ID | Returnerar ditt X-Request-ID, eller ett genererat id. Extra. |
X-Matte-Confidence / X-Matte-Ambiguous-Ratio | Hur ren masken är (0–1), och andelen mjuka pixlar. Extra: användbart för att flagga bilder för granskning. |
Fel
| Status | Betydelse |
|---|---|
400 | Ogiltig parameter eller bild (koder som invalid_size, invalid_crop_margin, missing_source, file_too_large, unknown_foreground). |
402 | insufficient_credits: fyll på på prissidan. |
403 | auth_failed: X-Api-Key saknas eller är ogiltig. |
429 | rate_limit_exceeded. |
500 / 503 | Bearbetningen misslyckades, tog för lång tid eller tjänsten är tillfälligt otillgänglig. Försök igen; misslyckade bilder är gratis. |
GET /v1.0/account
Ditt saldo i remove.bg:s kontoformat: { "data": { "attributes": { "credits": { "total", "subscription": 0, "payg", "enterprise": 0 }, "api": { "free_calls": 0, "sizes": "all" } } } }. Alla krediter köps efter behov och går aldrig ut, så total är lika med payg. GET https://removebackground.dev/v1.0/account med din X-Api-Key.
Fel (/v1-endpoints)
Misslyckade bilder debiteras aldrig.
| Status | Koder | Betydelse |
|---|---|---|
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 | Förfrågan eller bild-URL:en kan inte användas. |
401 | unauthorized | x-api-key saknas, är fel eller har återkallats. |
402 | insufficient_credits, out_of_credits | Ditt saldo är tomt. Fyll på på prissidan. |
404 | not_found | Jobbet finns inte (eller är inte ditt). |
409 | not_ready, canceled, idempotency_key_reused | GET …/result medan jobbet fortfarande körs (försök igen efter 2 s), jobbet har avbrutits, eller en Idempotency-Key har återanvänts för en annan förfrågan. |
410 | result_unavailable | Resultatet har raderats eller gått ut. |
413 | too_large | Bilden är större än 25 MB. |
422 | processing_failed, invalid_image, missing_upload | Filen är inte en läsbar bild. Debiteras inte. |
429 | rate_limited, too_many_batches | Över gränsen för förfrågningar per konto (vänta enligt Retry-After), eller så har du redan 3 batchjobb som körs. |
502 | model_unavailable, upstream_error, … | Vi kunde inte bearbeta bilden trots omförsök. Debiteras inte. |
503 | server_paused, unavailable | API:t är pausat (före lansering) eller tillfälligt otillgängligt. Försök igen senare. |
Batchar från början till slut
1. Skicka in
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" }'Upp till 100 publika bild-URL:er plus valfria alternativ från /v1/remove. De två platshållar-URL:erna ovan skulle kosta upp till 2 krediter om de var riktiga bilder. Svaret kommer direkt:
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 räknar poster som inte är http(s)-URL:er och duplicates räknar upprepningar; båda tas bort och debiteras aldrig. Spara id: det är så du hittar jobbet igen efter en omstart.
2. Polla jobbet
GET /v1/jobs/:id med några sekunders mellanrum tills done är true. status går från queued till processing och slutar som succeeded, partial (vissa bilder misslyckades) eller failed. Ett objekt som försöks igen visar 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. Ladda ner varje resultat
GET /v1/jobs/:id/result?item=N för varje lyckat objekt (eller använd dess result_url). item är den nollbaserade position. Positionerna följer din lista efter att ogiltiga och upprepade URL:er tagits bort, så när någon av räknarna är över 0 bör du matcha resultaten via input i stället för index.
- En batch slutar räknas mot gränsen på 3 öppna batchar när
doneär true. - API:t har ingen endpoint för att avbryta, inga webhooks och ingen ZIP-nedladdning. Batchar som startats på Bulk-sidan kan avbrytas eller laddas ner som ZIP där.
Omförsök, dubbletter och debitering
Skicka en Idempotency-Key så kan omförsök aldrig debiteras två gånger. Lägg till en Idempotency-Key-header (valfri unik sträng på upp till 255 tecken, till exempel ett UUID) i POST /v1/remove eller POST /v1/batch, en nyckel per bild eller batch. Om du skickar samma förfrågan igen med samma nyckel får du jobbet som den första skapade, med Idempotent-Replayed: true: inget nytt jobb och ingen ny debitering, även om den första förfrågan fortfarande körs. Samma nyckel med en annan bild eller andra alternativ ger 409 idempotency_key_reused. Nycklarna hör till ditt konto och går inte ut.
Utan nyckel skapar varje POST ett nytt jobb, och varje jobb som lyckas kostar 1 kredit (den remove.bg-kompatibla POST /v1.0/removebg har inga nycklar). Att läsa ett jobb (GET /v1/jobs/…) är alltid gratis och säkert att upprepa.
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.pngVad som kostar en kredit
| Situation | Kostnad |
|---|---|
| Förfrågan avvisas före bearbetning (fel nyckel, fel alternativ, för stor, krediterna är slut) | Gratis. |
| Bilden kan inte bearbetas (422 ogiltig bild, 502 efter våra omförsök) | Gratis. |
| Bilden lyckas | 1 kredit, debiteras en gång, när den lyckas. Våra egna interna omförsök kostar inget extra. |
| Du får en 202 | Inget än. Jobbet fortsätter att köras och debiteras 1 kredit bara om det lyckas. |
| Din klient får timeout eller kopplar ner medan den väntar | Jobbet fortsätter att köras och debiteras om det lyckas. Resultatet visas i din Studio. |
| Du skickar samma förfrågan två gånger med samma Idempotency-Key | Ett jobb, högst 1 kredit. Upprepningen får samma jobb (headern Idempotent-Replayed: true). |
| Du skickar samma bild två gånger utan nyckel | Två separata jobb; vart och ett som lyckas kostar 1 kredit. |
| Du laddar ner ett färdigt resultat igen | Gratis, så ofta du vill så länge det är lagrat. |
| En batch lyckas delvis | 1 kredit per bild som lyckades; credits_charged på jobbet visar summan. |
| En batch innehåller samma URL två gånger | Upprepningar inom en batch tas bort innan de köas och debiteras aldrig. Identiska URL:er i olika batchar är separata jobb. |
| Krediterna tar slut under en batch | Bilder som redan är klara förblir betalda; resten markeras som skipped (out_of_credits) och är gratis. Köp krediter och skicka sedan de återstående URL:erna som en ny batch. |
När du ska försöka igen
| Vad som hände | Vad du gör |
|---|---|
| GET /v1/jobs/:id eller …/result misslyckas (nätverksfel, 5xx) | Säkert att försöka igen: att läsa ett jobb skapar aldrig arbete eller kostnader. Vänta lite längre mellan försöken. |
| GET …/result svarar 409 not_ready | Vänta enligt Retry-After (2 s) och fråga igen. Skicka inte bilden på nytt. |
| GET …/result svarar 410 result_unavailable | Det lagrade resultatet har raderats. Att bearbeta bilden igen är ett nytt jobb och kostar 1 kredit. |
| POST svarar 400, 413 eller 422 | Rätta förfrågan eller bilden först; skickar du den oförändrad får du samma svar. |
| POST svarar 401 eller 402 | Rätta nyckeln eller fyll på. Loopa inte. |
| POST svarar 429 rate_limited | Vänta det antal sekunder som anges i Retry-After och skicka sedan igen (med samma Idempotency-Key). Fler än 60 bilder i minuten? Använd POST /v1/batch: en förfrågan för upp till 100. |
| POST /v1/batch svarar 429 too_many_batches | Vänta tills en av dina 3 öppna batchar är klar (polla den) och skicka sedan. |
| POST /v1/… svarar 503 (unavailable, server_paused) | Inget jobb skapades. Försök igen efter en kort stund. (Den remove.bg-kompatibla endpointen fungerar annorlunda: där betyder en 503-timeout att jobbet fortfarande körs.) |
| POST /v1/remove svarar 502 | Jobbet misslyckades och debiterades inte. Ett nytt försök är ett nytt jobb. |
| POST får timeout, anslutningen bryts eller du får 500 | Med en Idempotency-Key: skicka samma förfrågan igen med samma nyckel; du får det ursprungliga jobbet. Utan nyckel kan jobbet redan finnas och debiteras: kontrollera din Studio först. |
| POST svarar 409 idempotency_key_reused | Nyckeln har redan använts för en annan bild eller andra alternativ. Skapa en ny nyckel för varje ny bild. |
Gränser och lagring
| Gräns | Värde | Fel vid överskridande |
|---|---|---|
| Bildfil | 25 MB (25 × 1024 × 1024 byte); JPG, PNG eller WebP, identifieras utifrån filens bytes | 413 too_large · 422 processing_failed |
| Base64- / JSON-body | 25 MB efter avkodning (förfrågans body kan vara ungefär en tredjedel större) | 413 too_large |
| Indataupplösning | Bilder över 25 MP skalas ner till 25 MP före bearbetning | — |
| Utdatastorlek | bredd och höjd vardera 1–6000 px | 400 invalid_width / invalid_height |
| Nedladdning via image_url | endast http(s), 15 s timeout, upp till 3 omdirigeringar; privata adresser, loopback- och link-local-adresser avvisas vid varje omdirigering | 400 invalid_url · fetch_failed · fetch_timeout |
| Väntetid i POST /v1/remove | Cirka 55 s, sedan 202 med jobb-id | 202 |
| Batchstorlek | 100 bild-URL:er per POST /v1/batch | 400 too_many_images |
| Öppna batchar | 3 ofärdiga jobb med flera bilder per konto (enskilda bilder räknas inte) | 429 too_many_batches |
| Förfrågningstakt | 60 förfrågningar per minut och konto, sammanlagt för POST /v1/remove, /v1/batch och /v1.0/removebg. En batch räknas en gång, oavsett storlek. Att läsa jobb är inte begränsat | 429 rate_limited (med Retry-After) |
Hur länge resultat sparas
Varje resultat lagras privat i ditt konto i 48 timmar efter att det skapats och raderas sedan. Fram till dess kan du ladda ner det igen gratis med GET /v1/jobs/:id/result eller från din Studio. Därefter svarar resultatlänkarna med 410 result_unavailable; att bearbeta bilden igen är ett nytt jobb. Jobbets statusposter går fortfarande att läsa när bilden är borta. Se integritetspolicyn för hur uppladdningar hanteras; vi använder inte dina bilder för att träna modeller.
Säkerhet
Förvara din API-nyckel på en server som du kontrollerar. Lägg den inte i webbläsarkod, mobilappar, publika repon eller URL:er. Om dina egna användare ska kunna ta bort bakgrunder skickar du deras bilder via din backend och lägger till egen inloggning och egna utgiftsgränser där.
- API:t tillåter CORS så att det fungerar från verktyg och kod på servern. Det gör det inte säkert att lägga en nyckel på en webbsida: där kan vem som helst läsa den.
- Alla nycklar på ett konto använder samma kreditsaldo. Skapa en separat nyckel per app eller miljö på din kontosida, så att du kan återkalla en utan att de andra slutar fungera.
- Om en nyckel läcker, återkalla den direkt på kontosidan (den slutar fungera omedelbart) och skapa en ny. Vi lagrar bara en hash av varje nyckel, så vi kan inte visa den för dig igen.
Felsökning
| Symptom | Vad som händer |
|---|---|
| Min PNG går inte att öppna | Bodyn var JSON (ett 202-jobb eller ett fel), inte en bild. Kontrollera HTTP-status och Content-Type innan du sparar. |
| Mitt skript fick timeout men bilden dyker upp i Studio | Jobbet fortsatte att köras efter att du slutade vänta. Hämta det med jobb-id:t i stället för att skicka igen. |
| Jag debiterades två gånger för en bild | Den skickades två gånger utan Idempotency-Key (ofta ett automatiskt omförsök efter en timeout). Skicka en nyckel per bild och återanvänd den vid omförsök. |
| URL:en öppnas i min webbläsare men API:t kan inte hämta den | Värden kan kräva cookies eller inloggning, blockera servrar, omdirigera fler än 3 gånger, ta över 15 s, eller så har den signerade URL:en gått ut. Ladda upp filen i stället. |
| Min batch stannade halvvägs | Titta på items[] i jobbet: misslyckade objekt har en felkod; överhoppade objekt med out_of_credits betyder att saldot tog slut. |
| Ett alternativ verkar inte göra något | Okända parameternamn ignoreras tyst. Kontrollera stavningen mot parametertabellen. På /v1.0/removebg accepteras vissa remove.bg-alternativ men ignoreras (se den tabellen). |
| Bakgrunden är inte transparent | JPG kan inte vara transparent. Använd format=png eller webp och låt bg_color vara tom. |
| Resultatlänken ger 410 | Det lagrade resultatet har raderats. Att bearbeta igen kostar 1 kredit. |