Ideogram 4.5 with n=4 on Sume: one write, four times the price
A POST /v1/images with n=4 spends one request from the write budget but bills cost_usd x n. Worst-case table for low, medium and high quality.

Two budgets apply to an image call and they count different things. The rate limit counts requests: a POST /v1/images is one write whether n is 1 or 10. The wallet counts images: the image docs say endpoint pricing lines already include the Sume margin, so you pay cost_usd x n. Ideogram 4.5 (ideogram/ideogram-v4.5) accepts n from 1 to 10.
So a loop that raises n to save requests saves nothing on cost and only trims the write count.
Worst case by quality
The docs list Ideogram 4.5 at $0.03, $0.06 or $0.22 per image for quality low, medium or high (medium is the default), at 1K or 2K. Treat these as the ceiling for planning and read the live number from GET /v1/images/models/ideogram/ideogram-v4.5/endpoints, where pricing[].cost_usd is the billed rate.
| Quality | Per image | n=1 | n=4 | n=10 |
|---|---|---|---|---|
| low | $0.03 | $0.03 | $0.12 | $0.30 |
| medium | $0.06 | $0.06 | $0.24 | $0.60 |
| high | $0.22 | $0.22 | $0.88 | $2.20 |
Sample
The key includes quality and n, so changing either is a deliberate new job rather than an idempotency_conflict.
import json, os, urllib.request
PRICE = {"low": 0.03, "medium": 0.06, "high": 0.22} # per image, from the Sume docs
def worst_case(quality: str, n: int) -> float:
return round(PRICE[quality] * n, 4) # one request, cost_usd x n
def generate(prompt: str, quality: str, n: int) -> dict:
req = urllib.request.Request(
"https://api.sume.com/v1/images",
data=json.dumps({"model": "ideogram/ideogram-v4.5", "prompt": prompt,
"quality": quality, "n": n}).encode(),
headers={"x-api-key": os.environ["SUME_API_KEY"],
"content-type": "application/json",
"idempotency-key": f"poster-v1-{quality}-n{n}"},
)
with urllib.request.urlopen(req, timeout=40) as res:
return {"status": res.status, "body": json.load(res)}
for quality in PRICE:
print(quality, "n=4 ->", worst_case(quality, 4), "USD, 1 write against the rate limit")What else changes with n
- The route waits up to 30 seconds and returns
200withdata[].url. Largenand highqualityare the configurations most likely to come back as202with a job envelope, so branch on the status code. - The response
usage.costis the billed amount, which you can add to your own ledger. - Failed or canceled generations are not billed.
Sources
Related posts
More in Pricing
- Is a 540x960 preview render cheaper? Not on Sume Timeline
Sume prices Timeline 1.0 per whole output minute with no resolution term in the docs. Use the free plan to check a Short instead of paying for a small preview.
- Monthly AI content budget at three sizes: starter, growth and scale
Three monthly volumes of images, voiceovers and 6-second clips priced on Sume: the starter plan is about $10, growth about $39 and scale about $146.
- Price a Sume timeline render before you pay: the unbilled plan call
POST /v1/timeline-1.0/plan compiles a render without reserving credits and returns billable minutes and an estimated cost. What it prices, and what it cannot.
- Monthly AI media budget calculator in Python, from live Sume prices
Build a monthly budget for images and voiceovers by reading list prices from the Sume image and TTS router catalogs, then applying list x 1.25 and the 5.5% fee.
Written by Sume