Sume image n: docs say up to 10, every catalog row says 4 or less
The Image API docs say n is 1 to 10, but each catalog row publishes its own ceiling: 4 on most, 1 on Grok Imagine. Cost is cost_usd times n. Table with prices.

The Sume Image API docs say n can request up to 10 images per call, then add that per-model ceilings are lower. In the catalog, the ceiling is 4 for most image rows and 1 for Grok Imagine. Higgsfield Soul's constraint text says 1 or 4. So for a real request, ignore the 10 and read the n range descriptor of the row. You pay cost_usd times n, so n=4 on Flux 2 Pro is 4 x $0.0375 = $0.15.
Where the 10 comes from
The 1 to 10 range is in the request parameter table, which describes the schema shared by all rows. The per-row catalog is stricter. GET /v1/images/models publishes n as a range with a min and a max for every model, and Sume rejects a parameter that a model does not list. Image 1.0 has a separate field, num_images, with a range of 1 to 4.
| Row | n max | Per image | n at max |
|---|---|---|---|
| Grok Imagine | 1 | $0.025 | $0.025 |
| Qwen Image | 4 | $0.025 | $0.10 |
| Seedream 4.0 | 4 | $0.0325 | $0.13 |
| Flux 2 Pro | 4 | $0.0375 | $0.15 |
| Seedream 5.0 Lite | 4 | $0.04375 | $0.175 |
| Seedream 4.5 | 4 | $0.05 | $0.20 |
| Nano Banana 2.1 | 4 | $0.10 | $0.40 |
| Nano Banana Pro | 4 | $0.1875 | $0.75 |
The arithmetic
Endpoint pricing lines are what Sume charges to your wallet and already include the Sume margin. The list rates in the repo are multiplied by 1.25, so Flux 2 Pro at a $0.03 list is $0.0375, and Seedream 5.0 Lite at $0.035 is $0.04375. Docs say the charge is cost_usd x n, so Seedream 5.0 Lite at n=4 is 4 x $0.04375 = $0.175.
Billing is all or nothing. A generation either completes and is billed in full, or fails and is not billed. That makes n=4 a single bet: if the call fails you pay nothing, and if it completes you pay for four.
Read the ceiling in code
Do not hard-code 4. Ask the catalog for the row's range, then clamp your request.
import os, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
r = requests.get("https://api.sume.com/v1/images/models", headers=H, timeout=30)
r.raise_for_status()
want = 6
for m in r.json()["data"]:
n = m["supported_parameters"]["n"]
print(m["id"], "n max", n["max"], "calls for", want, "=", -(-want // n["max"]))When n is 1
Grok Imagine takes one image per call, so four takes is four calls. Each call is its own job, so use a distinct Idempotency-Key per call and the same key only for an exact retry. At $0.025 each, four Grok takes cost $0.10, the same as one Nano Banana 2.1 image at $0.10.
For a larger set, send several calls rather than one large n. Each call has its own price line and its own queue slot, and the billing is all-or-nothing per call, so a failed call does not leave you paying for part of a set. Plans admit a limited number of jobs at once (concurrency 1, 4, 8 or 20 on Free, Pro, Startup and Scale), so size your waves from the queue headroom that the API reports instead of firing every call at once.
Sources
Related posts
More in Developers
- Sume job 404 for an id you created: check which member's key made it
A 404 on GET /v1/jobs/{id} can mean the job belongs to another member or workspace. A Python helper separates unknown from not visible.
- job.canceled: the third Sume terminal event your handler forgets
Sume sends job.completed, job.failed and job.canceled and nothing else. A handler that covers only two leaves canceled jobs open. Route all three, 204 the rest.
- Sume MCP first call: mcp_health must say mcp_oauth, then tools_list
After adding the Sume connector, call mcp_health and check authenticated.auth_source is mcp_oauth. Then call tools_list to see which tools your grant exposes.
- Limit an agent's paid MCP calls with script_run max_paid_calls
script_run runs a short program on the Sume side with max_calls, max_paid_calls and a 5-55 second timeout. What it can bound, and what it does not cap.
Written by Sume