remove.bg API rate limit: 500 per minute, weighted by megapixels
remove.bg allows 500 images per minute at about 1 MP, less for larger inputs. Sume limits requests per minute per key and sends retry-after on 429.
remove.bg's API limit is 500 images per minute, and the page says the real number depends on input megapixels: a 4 MP image counts as 500 / 4 = 125 images per minute. Sume's limit is different in kind: a per-key requests-per-minute budget set by plan, where one RMBG request is one image regardless of its size.
Vendor numbers are from the remove.bg API page; Sume numbers are from Authentication, both read 2026-10-01.
How does remove.bg weight the limit by megapixels?
The page gives worked examples. Exceeding the limit returns HTTP 429 and, per the page, no credits are charged. It also lists X-RateLimit-Limit and X-RateLimit-Remaining response headers.
| Input | Megapixels | Effective limit |
|---|---|---|
| 625 x 400 | 1 | 500 images per minute |
| 1600 x 1200 | 2 | 250 images per minute |
| 2500 x 1600 | 4 | 125 images per minute |
| 4000 x 2500 | 10 | 50 images per minute |
| 8000 x 6250 | 50 | 10 images per minute |
How does the Sume limit work?
Every API key gets a request budget per minute across /v1, set by the workspace plan. Reads and writes have separate budgets, so polling a job cannot 429 your own submits. Submitting a background removal is a write.
The docs table lists these write budgets per minute: Free 120, Pro 300, Startup 600, Scale 1200. Reads get forty times the write number. The request body for RMBG 1.0 is a public HTTPS image_url, so image size does not change how many requests you are allowed.
| Plan | Writes per minute |
|---|---|
| Free | 120 |
| Pro | 300 |
| Startup | 600 |
| Scale | 1200 |
| Enterprise | Contact sales |
What should a bulk catalog job do on a 429?
Sume's docs say a 429 means the plan's requests-per-minute budget was exceeded: back off and retry after retry-after. Every response carries ratelimit-limit, ratelimit-remaining, ratelimit-reset, and retry-after is sent on 429. Read ratelimit-remaining instead of counting requests yourself.
A 429 names the budget in error.details.scope (read or write). Request rate is also separate from generation capacity, which the plan's concurrency limit governs. For queueing patterns see batch image generation concurrency limits.
async function removeBackground(imageUrl) {
for (let attempt = 0; attempt < 5; attempt++) {
const res = await fetch("https://api.sume.com/v1/rmbg-1.0/remove", {
method: "POST",
headers: {
Authorization: "Bearer " + process.env.SUME_API_KEY,
"Content-Type": "application/json",
"Idempotency-Key": "rmbg-" + crypto.randomUUID(),
},
body: JSON.stringify({ image_url: imageUrl }),
});
if (res.status !== 429) return res.json();
const wait = Number(res.headers.get("retry-after") ?? 1);
await new Promise((r) => setTimeout(r, wait * 1000));
}
throw new Error("still rate limited");
}Which limit should I plan around?
With remove.bg, sort the catalog by resolution first, since large files use more of the 500. With Sume, plan around your plan's write budget and the retry-after header. The two numbers are not interchangeable, so measure your own catalog's size mix against each page before picking a batch rate.
Sources
Related posts
More in Developers
- remove.bg bg_color replacement: Sume RMBG gives a transparent PNG
remove.bg's API has bg_color and bg_image_url. Sume RMBG 1.0 takes only an image_url and returns a PNG with alpha, so the new background is a second step.
- remove.bg crop and roi parameters: what Sume RMBG does instead
remove.bg has crop, roi, crop_margin, scale and position. Sume RMBG takes an image_url only and rejects other fields, so cropping happens before or after.
- remove.bg PNG over 10 MP unsupported: Sume RMBG limits
remove.bg does not support PNG above 10 megapixels; use WebP or ZIP up to 50 MP. Sume RMBG returns PNG with alpha and caps compressed input at 20 MiB.
- remove.bg type parameter (car, product, person) vs Sume RMBG
remove.bg's API has a type parameter and an X-Type header. Sume RMBG 1.0 has no foreground-type hint: send an image_url and Sume selects the model.
Written by Sume