Free · No sign-up · Runs in your browser

Remove image backgrounds in one click — or one API call.

Drop an image to get a transparent PNG in seconds — free and unlimited. Building something? The same model is one POST away, and Bulk handles 100 at once.

$ curl -H 'x-api-key: $KEY' -F image_file=@photo.jpg removebackground.dev/v1/remove -o out.png

or drop a file, or paste with ⌘V / Ctrl+V

Runs privately in your browser — nothing is uploaded

No image? Try one:
BulkGot a folder of photos?Upload up to 100 images or paste URLs. They’re processed on our servers in the background — download them all as a ZIP.Try Bulk →APIBuilding an app or a store?One POST with your API key returns a transparent PNG. Same model, full resolution, CORS enabled.Read the API docs →PricingPay only for what you useThe browser tool is free forever. API and Bulk cost 1 credit per image, only when it succeeds. Under 2.5¢ per image on the Studio pack.See credit packs →
API

One API call. Transparent PNG back.

The same model that powers this page is available as a simple HTTP endpoint. No SDK needed — send an image with your API key, get the cutout back as the response body. 1 credit per image, charged only when it succeeds.

Get an API keyPricing

curl -X POST https://removebackground.dev/v1/remove \
  -H 'x-api-key: YOUR_API_KEY' \
  -F 'image_file=@photo.jpg' \
  -o no-bg.png
  • Any languagePlain multipart or JSON over HTTPS.
  • Full resolutionOutput matches your input size, up to 25 MP.
  • PNG or WebPTransparent, or flattened onto any color.
  • Pay per success1 credit per image. Failed images are free.

Reference

POST https://removebackground.dev/v1/remove

Authenticate with your API key in the x-api-key header (create one on your account page). Returns the image bytes (image/png or image/webp) with X-Width, X-Height, X-Processing-Ms, X-Credits-Remaining, X-Removal-Id and X-Job-Id headers. Errors return JSON: { "error": { "code", "message" } }

Every image runs as a job in our processing queue. The request usually waits for it and returns the image. If it isn’t done within about 55 seconds (for example when the queue is busy), you get 202 Accepted with the job id, a status_url and a result_url: poll the first, then download the second. You’re charged once, only when the image succeeds.

ParameterTypeDescription
image_filefileThe image to process (JPG, PNG, WebP). Send as multipart form data.
image_urlstringPublic URL of the image — use instead of image_file.
formatpng | webpOutput format. Default png.
bg_colorhexFill the background with a color, e.g. ffffff. Default transparent.

Parameters can be form fields, JSON keys or query-string values. You can also POST the raw image bytes with Content-Type: image/jpeg.

EndpointDescription
GET /v1/jobs/:idJob status JSON: status (queued, processing, succeeded, failed…), done, and per-image result_url.
GET /v1/jobs/:id/resultThe image bytes once the job succeeded (409 while it’s still running). ?item=N for batch jobs.
POST /v1/batchQueue up to 100 image_urls in one job (JSON). Answers 202 with the job id at once.

Job endpoints use the same x-api-key and only show your own jobs.

StatusError codes
202Not an error: still processing after ~55 s. JSON with id, status_url and result_url
400missing_image, invalid_url, fetch_failed, fetch_timeout, invalid_format, invalid_bg_color
401unauthorized — missing, wrong or revoked x-api-key
402insufficient_credits — buy a credit pack to continue
409not_ready — the job is still running (from /v1/jobs/:id/result)
413too_large — image over 25 MB
422processing_failed, invalid_image — the file isn’t a readable image (not charged)
502the image couldn’t be processed on our side after retries (not charged)