How image generation pricing works

An image is billed at a flat rate per piece, not per token. Where to find a model's exact price and how to confirm what a request actually charged.

4 min · · Updated · изображения · payments

Update, October 2026. Image generation through Zukko is temporarily unavailable. The current model list is on the Models page or at GET https://api.zukko.pro/v1/models. Closest replacement: there is no direct replacement among the available models; for image analysis (vision), the Claude and GPT models work, e.g. claude-sonnet-5 or gpt-5.6-sol.

Text models charge by input and output tokens, and the final cost of a request can only be estimated in advance — it depends on response length, which is hard to predict before generation. Images work differently: in the model catalogue they carry kind=image, meaning a separate pricing scheme — a flat price per finished picture, not per token and not per prompt length.

Why this is easier to budget for

If the number of images needed is known ahead of time, the total cost can be calculated exactly rather than estimated. A long, detailed prompt costs exactly the same as a short one — price is set purely by the chosen model, not by how much text goes into the request. That's different from text models, where spend grows with the length of the conversation and the generated response.

Where to find the current price

The model catalogue evolves, and prices move with it. Hardcoding a specific number in code, or keeping it in an old note, is a bad idea — it will drift from reality over time. The right source is the extended model listing:

bash
curl https://api.zukko.pro/v1/models/info

This endpoint returns not just model identifiers but limits and prices too, and it needs no key — it can be checked at any time without spending balance. The plain GET /v1/models is also available without a key, but for an exact price it's /v1/models/info specifically that's needed — the basic list is limited to which models are available.

Different models in the catalogue are priced differently because of different architectures and quality tiers: the nano-banana-2-* line (base, developer and lite versions, edit, reference-to-image) and the openai-gpt-image-2 / openai-gpt-image-1.5 line (text-to-image and edit) are different models with different prices, not variants of one. The comparison should be made against the current /v1/models/info output, not against an assumption that similarly-named models cost the same.

Checking what a specific request actually charged

Knowing a model's general price is useful for planning, but the exact amount charged for a specific call arrives right in the response headers:

bash
curl -i https://api.zukko.pro/v1/images/generations \
  -H "Authorization: Bearer fetch_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2-text-to-image",
    "prompt": "a city at sunset, watercolor"
  }'

The response carries X-Zukko-Cost-Micros — the cost of that specific request in micro-dollars (1,000,000 = $1) — and X-Fetch-Balance-Cents — the remaining account balance after the charge (despite the name, also in micro-dollars; the exact balance in cents is at GET /v1/balance). If generations run at volume and spend needs tracking without checking the dashboard each time, logging both headers on every request is the most direct way to do it.

The full charge history with cursor-based pagination is available on its own endpoint:

bash
curl https://api.zukko.pro/v1/usage \
  -H "Authorization: Bearer fetch_your_key"

What happens when the balance can't cover a generation

Balance is checked before the model is called, not after. If there isn't enough to cover even one generation at the model's current price, the response is a 402:

bash
{"error":{"message":"Недостаточно средств на балансе","code":"insufficient_balance"}}

The generation itself never runs in that case, so a failed request charges nothing — the balance can be topped up and the same call retried without any risk that part of it was already spent for nothing.

The response cache doesn't apply here

The gateway has a cache for repeated requests — turned on with the X-Zukko-Cache: true header (or temperature: 0 for models that accept that value), keeping chat results for up to 7 days and returning a repeat with an exactly identical body for free. The cache and Idempotency-Key only apply to POST /v1/chat/completions, /v1/messages and /v1/responses, so neither can be counted on for image generation — calling /v1/images/generations again with the same prompt is billed as a separate generation. To avoid paying twice for the same result, store finished images on your side and don't rerun a task that has already completed.

The difference between variants isn't always obvious

The same base model can be priced differently depending not on the mode itself but on the exact identifier — the plain nano-banana-2-text-to-image and its developer or lite variant are listed as separate entries in the catalogue, each with its own price in /v1/models/info. Similar names don't guarantee a similar price: a suffix in a model identifier isn't a cosmetic detail, it points to a distinct pricing tier. Before locking a specific variant into a production pipeline, check its own line in the catalogue rather than the price of the model without the suffix.

Comparing several models ahead of time

For a one-off estimate, there's no need to make a real paid request to every model — pulling the full price list from /v1/models/info once and comparing the identifiers locally is enough. A real test call is only worth making for the model that's already the leading candidate, to confirm the actual charge in X-Zukko-Cost-Micros matches what the catalogue implied.

A practical tip

Before budgeting image generation into a project — say, estimating the cost of processing a catalogue of thousands of product cards — generate one test image with the intended model, check the exact figure in X-Zukko-Cost-Micros, and multiply by the planned count, rather than relying on an approximate number from old documentation or someone else's article, this one included.

zukko

Pay 25×
less

for Claude Code & ChatGPT

One fetch_* key and base URL api.zukko.pro — for Cursor, Claude Code, Codex, and any SDK.

Get API keyDocumentation

api.zukko.pro · fetch_*

Image generation pricing via API explained · Zukko