Image API usage shows 0 tokens: where the cost is on Sume
POST /v1/images returns usage.prompt_tokens, completion_tokens and total_tokens as 0 in v1. The billed amount is usage.cost in USD, metered per image.

In Sume's POST /v1/images response, usage.prompt_tokens, completion_tokens and total_tokens are always 0 in v1, and usage.cost is the USD amount billed to your wallet. Image models are metered per image, and per-token accounting is not plumbed through yet.
From Sume's Image API docs, read 2026-09-30.
What does the usage block look like?
The documented response for a Seedream 4.5 example:
{
"created": 1748372400,
"model": "bytedance-seed/seedream-4.5",
"data": [{ "url": "https://media.sume.com/img/01J.../0.png", "media_type": "image/png" }],
"usage": {
"prompt_tokens": 0,
"completion_tokens": 0,
"total_tokens": 0,
"cost": 0.04
}
}Which field do I record?
Record usage.cost. The model field echoes the id you requested, so sume/auto stays sume/auto. Endpoint pricing lines are the amount charged with Sume's margin already applied, so cost_usd x n is what you pay for n images.
| Field | Meaning in v1 |
|---|---|
usage.prompt_tokens | Always 0 |
usage.completion_tokens | Always 0 |
usage.total_tokens | Always 0 |
usage.cost | USD billed to your wallet |
Why does GPT Image 2.5 still mention tokens?
Sume's docs describe ChatGPT Image 2.5 pricing from Fal token rates and estimated token counts, but the response still reports per-image cost. The docs say the response token counts are always 0 in v1, so use usage.cost.
What about failed generations?
Billing is all-or-nothing: completed generations are billed in full, failed or cancelled ones are not billed, and failed requests return 502. A 202 job returns the result later from GET /v1/jobs/{id}/result, in the standard job shape rather than this body.
How do I check this myself?
If your dashboards multiply tokens by a rate, they will show zero for images. Sum usage.cost per request instead. The linked docs pages and the catalog endpoint show the current values, and this post reflects them as of 2026-09-30.
Sources
Related posts
More in Developers
- Lambda 90-minute timeout: does it change AI video jobs?
AWS raised Lambda's async timeout to 90 minutes on Managed Instances. A Sume job still fits best as submit, then poll or webhook, and sync waits stay 30 s.
- List music models by API: GET /v1/music-router/models
The Music Router catalog endpoints list routable music model ids and a provider list price. Routable ids today: sume/music-auto, lyria-3.5, lyria-3-pro.
- MCP tool name with a dot or underscore: tools.list vs tools_list
Sume MCP tool ids use underscores; a dotted alias such as tools.list is canonicalized on call. Retired aliases map to generate_image and generate_video.
- Music API 400 model_not_found: fix an unknown model id
An unknown model on POST /v1/music-router/generate fails with 400 model_not_found and a catalog_url. Use an id from GET /v1/music-router/models or omit model.
Written by Sume