Image API docs example vs live catalog: Seedream 4.5 shows 5 ratios
The docs example for Seedream 4.5 lists 5 ratios and 0.033 USD. The catalog lists 9 ratios and 0.05 USD. Why you read the endpoint, not the example.

The JSON example on the Sume Image API docs page shows Seedream 4.5 with five aspect ratios and a price of 0.033 USD, but the catalog I read on 2026-10-10 lists nine ratios and 0.05 USD. Do not copy the example into code; read GET /v1/images/models and the endpoint record for the live values.
The docs page says the same thing in another place: the endpoint route gives the definitive capabilities and prices for a model.
The two readings side by side
The left column is the example block on the Image API page. The right column is the catalog descriptor and billed price in the code I read.
| Field | Docs example | Catalog read |
|---|---|---|
| aspect_ratio values | 1:1, 16:9, 9:16, 4:3, 3:4 | 1:1, 16:9, 9:16, 4:3, 3:4, 4:5, 5:4, 3:2, 2:3 (nine values) |
| Price per image (USD) | 0.033 | 0.05 |
Why an example drifts
A docs example is a snapshot. It is written once to show the shape of a response, and the catalog it describes keeps changing as models are added, repriced or extended. Nothing is wrong with the shape; the values are illustrative.
The same page shows a billing sentence worth remembering: endpoint pricing lines are the amount Sume charges to your wallet, and they already include Sume's margin, so you pay cost_usd times n. That is the number to trust, and it comes from the endpoint, not from the sample.
What to do in code
Fetch the endpoint record before you rely on a value, and cache it for the process. Validate your own request against the descriptors so a ratio that is not listed never leaves your service. Sume would reject it with 400 invalid_request and the supported list, but a local check saves the round trip and keeps the error message in your control.
import os
import httpx
model = "bytedance-seed/seedream-4.5"
url = f"https://api.sume.com/v1/images/models/{model}/endpoints"
headers = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
data = httpx.get(url, headers=headers, timeout=30).json()
ep = data["endpoints"][0]
params = ep["supported_parameters"]
print(params["aspect_ratio"]["values"])
print(ep["pricing"][0]["cost_usd"])A worked check
Take the Seedream 4.5 case. A budget written from the docs example would price 100 images at 3.30 USD (100 times 0.033). At the catalog price of 0.05 USD the same 100 images cost 5.00 USD, about 52 percent more than planned. The error comes from copying a sample, not from the API charging unexpectedly, and the usage.cost on each response shows what was actually billed.
The ratio list has the same problem. Code written against the five-value example would never send 4:5, and so would miss the 1080 by 1350 portrait format that the live list supports.
A short rule
Use docs for how the API works and the endpoint for what a model accepts today. When the two disagree, the endpoint is right and the page is a sketch. If you notice a mismatch like this one, record the date and the value you read, so a later reader can tell a catalog change from a mistake.
- Read
supported_parametersbefore you pin a ratio,nor a reference count. - Read
pricingbefore you budget a batch. - Do not copy numbers from a docs example into a pricing sheet.
Sources
Related posts
More in Developers
- On a 402, try a cheaper rung: a Python ladder with fresh keys
A 402 on Sume means nothing was reserved, so a cheaper request can go straight through. Python ladder: Seedance 720p, 480p, then Wan 480p, one key per rung.
- Edit an AI image in rounds: feed each result URL back as a reference
Sume image calls are stateless. To refine an image over rounds, send the last result URL as input_references, keep the original too, and track cost.
- ElevenLabs made eleven_v4_turbo a default: pin your TTS engine
ElevenLabs set eleven_v4_turbo as a default on Oct 5. Sume carries Sonic engines, not Eleven; here is how to pin an engine id so audio does not drift.
- ElevenLabs dubbing 180-minute app limit vs 3 GB API and Sume detach
ElevenLabs dubs up to 180 minutes in the app or 3 GB via API. Sume detach takes 1,800 s of source and 900 s of output per job, so long videos need ranges.
Written by Sume