Ideogram API image URLs expire: save the edit, and what Sume returns

Ideogram's docs say image URLs expire and to download what you keep. Sume returns a hosted signed URL; here is a download step that works for both.

4 min readSume
All posts

Yes, they expire, and you should copy the file the moment the edit finishes. Ideogram's API overview (read 2026-10-06) says image URLs expire, so you should download anything you want to keep. The page does not give a time window, so do not build on a guess.

The same rule is cheap insurance on Sume. Its Image API docs say data[].url is Sume-hosted and signed. They do not state a retention window for image results, so treat the URL as a delivery link, not as your archive.

Why it matters for multi-turn edits

Ideogram 4.5 is sold on repeated edits that leave the rest of the image alone. Each pass takes the last result as the next input. If pass three starts from a URL that has lapsed, the chain breaks and you pay again to rebuild passes one and two. Keep your own copy at every step.

What to store per pass

Edit-chain bookkeeping, from Ideogram and Sume docs read 2026-10-06
FieldIdeogram precise editSume /v1/images
Result locationurl in the data arraydata[].url, signed, Sume-hosted
Output sizeMatches the input width and heightAn edit with no aspect_ratio keeps the source geometry
ExpiryExpires, window not statedNot stated in the image docs
Your copyDownload nowDownload now
Cost recordNot on this pageusage.cost, the billed USD amount

Download and check the file

The helper writes the bytes and refuses anything that is not an image, so an error page never lands in your edit chain.

import pathlib, sys, requests

def save(url: str, dest: str) -> str:
    r = requests.get(url, timeout=60)
    r.raise_for_status()
    kind = r.headers.get("content-type", "")
    if not kind.startswith("image/"):
        raise ValueError(f"not an image: {kind}")
    path = pathlib.Path(dest)
    path.write_bytes(r.content)
    return f"{path} {len(r.content)} bytes {kind}"

if __name__ == "__main__":
    if len(sys.argv) != 3:
        raise SystemExit("usage: save.py URL DEST")
    print(save(sys.argv[1], sys.argv[2]))

A simple storage rule

Write each pass to your own storage under a name that carries the pass number, such as hero-v1.png, hero-v2.png. Keep the instruction text next to it. If a later pass goes wrong you can restart from the last good file instead of from the original.

Then give the next call the URL of your copy. Sume's reference inputs must be public HTTPS URLs it can fetch, so a private bucket link without a signature will fail before the model runs.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume