Image edit reference URL rejected? Public HTTPS checklist for Sume
Sume rejects localhost, private-network and non-HTTPS reference URLs, and a URL it cannot download fails as input_media_unreachable. Check yours in 12 lines.

Every image-editing launch this fall assumes you can hand the model a photo. Over an API you hand it a URL, and the URL has to be one Sume's servers can fetch. The Image API docs say reference URLs must be public HTTPS, and that Sume rejects localhost, private-network and non-HTTPS URLs before submission.
Two different failures
A URL that breaks the rule is refused up front. A URL that passes the rule but cannot be downloaded fails later. In a synchronous call that second case comes back as 502 with an error envelope; the docs show the code input_media_unreachable, the message "Could not download an input media URL (image_url). Verify the URL is publicly reachable, then retry.", retryable: false and next_action: "fix_input". Retrying the same URL will not help, so fix the input.
| URL problem | When Sume reports it | What to do |
|---|---|---|
| http:// instead of https:// | Before submission | Serve the file over HTTPS |
| localhost or a private-network address | Before submission | Host it on a public address or a public bucket |
| Public HTTPS but the download fails (expired signature, login wall) | 502 input_media_unreachable, next_action fix_input | Re-issue a fresh public URL, then send a new request |
A pre-flight check you can run
Do the check yourself before you spend a request. The script asks for the headers only and confirms the status and that the content is an image.
import requests
def reference_ok(url: str) -> bool:
if not url.startswith("https://"):
return False
r = requests.head(url, allow_redirects=True, timeout=15)
ctype = r.headers.get("content-type", "")
return r.status_code == 200 and ctype.startswith("image/")
print(reference_ok("https://example.com/photo.png"))
Signed URLs need a long enough life
If your photos sit in private storage, create a signed URL with a lifetime that covers the whole job, not just the submit. A job can wait in the queue before it starts, so an expiry measured in seconds can pass before Sume downloads the file. For slow models, pass the URL and read the job at GET /v1/jobs/{id}/status (Jobs and results).
Sources
Related posts
More in Developers
- Image job progress bar: Sume has no percentage, so show job stages
ChatGPT Images 2.5 shows a progress percentage. Sume image jobs report queued, processing and completed plus events, and stream:true returns 400.
- Image quality defaults differ: OpenAI auto, Sume high, Ideogram medium
Omit quality and the tier differs: OpenAI defaults GPT Image 2.5 to auto, Sume to high, Ideogram 4.5 to medium, Image 1.0 to low. Pin it before you budget.
- Index-Echo bilingual SRT from a Chinese video to Sume cues
Index-Echo S2TT turns Chinese speech into timed bilingual subtitles in 60-second windows. Convert its SRT into Sume caption cues and burn the English line.
- Syllable-controlled translation for voiceover that must fit
Translated speech often runs longer than the original. Index-Homura targets length-controlled translation. How to budget words against clip time before TTS.
Written by Sume