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.
- MAI-Voice-2.1 vs Sume text to speech: cost per 1,000 characters
Sume TTS costs 4.75 cents per 1,000 characters before the per-job round-up. A tracker lists MAI-Voice-2.1 at $0.022 and Flash at $0.015, cheaper per character.
- Manus agent calling paid Sume tools: cap spend per call
A Manus agent with a Sume API key can start paid generation. Tell it to send max_spend_usd, dry_run and an idempotency_key on every paid call. Why each matters.
- MiniMax H3 Max reference-to-video: what the reserve leaves out
Sume bills H3 Max reference-to-video by output seconds at list x 1.25; the provider's reference-token overage is not reserved. What to check before a big batch.
Written by Sume