RMBG or upscale fails: image_not_fetchable and the HTTPS fix list
Sume cutout and upscale jobs need a public HTTPS image_url of at most 2,048 characters. Fix list for image_not_fetchable, 400 on model, 402 and 429 errors.

When a Sume remove-background or image-upscale request fails with image_not_fetchable or input_media_unreachable, Sume could not fetch the image. The input must be a public HTTPS URL that returns the image without a login, and the URL can be at most 2,048 characters. Fix the URL, then retry with the same idempotency key.
Errors and what to do
Sume's error docs say that image_not_fetchable, input_media_unreachable and storage configuration errors mean that Sume could not fetch or mirror the media safely. The advice is to make sure the input is a public HTTPS image URL and then retry, or contact support with the request id. The same page lists the usual API errors, and the table below maps the ones that matter for cutouts and upscales.
| Status or code | Meaning | What to do |
|---|---|---|
| 400 invalid_request | Bad body, such as a non-HTTPS URL, an extra field, or a model field | Send only the documented fields. Never send model or an endpoint field |
| 402 insufficient_credits | Balance cannot cover the request | Top up, then resubmit the same call |
| 429 rate_limited | Too many requests in the window | Back off, use retry-after when present |
| 429 queue_full | Concurrency and queue are both full | Wait for running jobs, then resubmit with the same key |
| image_not_fetchable | Sume could not fetch the image | Make the URL public HTTPS and retry |
| 413 payload_too_large | Request body over the limit | Send a URL, not the image bytes |
Why a signed URL can fail
A presigned storage URL is public for as long as the signature lasts. If the signature expires in 60 seconds and the job waits in a queue, the fetch can fail even though the URL worked when you copied it. Sign for a longer period than the job could take to start, for example 15 minutes, for a large batch.
Other common causes are a URL that redirects to a login page, a host that blocks unknown crawlers, a private network address, and plain HTTP. Sume rejects localhost, private-network and non-HTTPS URLs before the job is created. Test the URL from a machine outside your own network, using curl without credentials.
Fields the routes refuse
Both routes are strict. The body schema lists the allowed fields, and an unknown one is an error. The routes also refuse model, endpoint and provider_endpoint, because Sume picks the engine on the server. If you port a request from another provider that carried a model name, remove it.
A 4xx on a field is not a charge. Fix the body and submit again. For a result that came back transparent when you did not expect it, or the reverse, read the note on PNG inputs that already have alpha.
curl -sI "https://cdn.example.com/p/0042.jpg" | head -n 5
curl -s -o /dev/null -w "%{http_code} %{content_type}\n" "https://cdn.example.com/p/0042.jpg"A pre-flight check
Before you submit a batch, run a check over the list of URLs and drop the ones that fail. It costs nothing, because it is your own HTTP request, and it catches the dead links that would otherwise turn into failed jobs. For each URL, confirm a 200 status, an image content type and an HTTPS scheme.
Log the failures with the SKU, then fix the source rows. Submitting only URLs that pass keeps the ledger clean: each SKU has one job, and each job either completes or fails for a reason that is not the link.
- Status is 200 without a redirect to a sign-in page.
- Content type starts with image/.
- Scheme is https and the host is public.
- URL length is under 2,048 characters.
Sources
Related posts
More in Developers
- Rotate the Sume webhook secret twice in one 24-hour window: what dies
Sume signs with both secrets for 24 hours after a rotation. Rotate a second time inside that window and the secret from two rotations back stops at once.
- Rotate the Sume webhook secret without dropping events
After POST /v1/webhooks/signing-secret/rotate, Sume signs with both secrets for 24 hours. How verifyWebhook handles the two-entry header, and the deploy order.
- Same image as first and last frame: a 6-second loop on three models
A 6 s loop with one image as both first and last frame costs $2.27 on Seedance 2.0 at 720p, $0.60 on H3 Max at 768p and $0.75 on Omni at 720p.
- Same prompt on five Sume image models in one script: about 18 cents
One loop sends a text-in-image prompt to Flux 2 Pro, Seedream 5.0 Lite, Qwen Image, Imagen 4 Fast and Recraft V4. Expected total $0.18125. Code you can run.
Written by Sume