Changelog

API releases and changes, newest first.

Balance endpoint and faster failure verdicts

2026-08-26
  • New: GET /balance returns the spendable balance of the wallet your credential bills, as { currency, balance }. See Balance.
  • A job the rendering backend rejects (for example a safety refusal) now reaches failed within a couple of minutes of the rejection instead of three to eight. Refunds and the job status contract are unchanged.

Single reference images: fix and a stricter request check

2026-08-26
  • Fixed: a request with exactly one reference image (image_file_id or a single image_urls entry) could be rendered without that reference on some rendering backends. The reference now reaches every backend.
  • New request check: image_file_id and image_file_ids in the same request now fail with 400 ERR_INVALID_REQUEST before anything is charged. Previously the plural won silently and the singular was dropped. Send one or the other. See Input images.

More reference images by URL

2026-08-13
  • image_urls now accepts up to 14 source-image URLs, matching image_file_ids and the provider's own per-request limit. It was capped at 4, which was an accident of the field's introduction rather than a provider constraint — the upload-first flow has taken 14 since it shipped.
  • Nothing else changes: each URL is still downloaded server-side and validated exactly like an upload, and a failure still rejects the request before any charge. Requests already sending 1–4 URLs are unaffected.

Per-account provider configuration

2026-08-08
  • Accounts can now be configured (by arrangement with us) to use a fixed subset of the rendering backends — for example, to disable the automatic fallback when your own pipeline already provides one.
  • New pre-charge refusal: when your account's configuration cannot render the requested resolution for a model, the request fails immediately with 400 ERR_INVALID_REQUEST and details.reason = provider_policy_no_route — nothing is charged, and retrying the identical request will not succeed. Change resolution or contact support. See Errors.

Clearer failed-creation error values

2026-08-07
  • The error value "Provider returned no image." is replaced with "Generation failed. Please try again." — a retry is the remedy that works for this failure class. Historical failed creations return the new wording too. If your integration matches error strings, update it — the full current set is in Failed creations.
  • A refusal aimed at the source photo gets its own value (since 2026-08-05): "The source image was rejected. Try a different photo." — previously undocumented here.
  • More of the model's text-refusal phrasings are now recognised as content verdicts, so those failures read as the safety-filter message instead of the no-image one.

Strict geometry validation

2026-07-15
  • aspect_ratio is now validated against the supported list — 1:1, 16:9, 9:16, 4:3, 3:4, 2:3, 3:2, 5:4, 4:5, 21:9. An unsupported value is rejected with 400 ERR_INVALID_REQUEST before any charge, instead of rendering 1:1.
  • Omitting aspect_ratio renders 1:1 — now stated explicitly on POST /images/generate. Set it explicitly for any non-square image.
  • resolution is validated the same way: one of 1K, 2K, 4K (case-insensitive), defaulting to 2K when omitted. An unsupported tier is rejected with 400 ERR_INVALID_REQUEST before any charge, instead of being served — and billed — as 2K.
  • Breaking: the two fields width and height were never part of the geometry contract and were previously ignored; sending either one now returns 400 ERR_INVALID_REQUEST before any charge. Output geometry is aspect_ratio + resolution only — if your integration sent width/height, replace them with those two parameters (the error message names them, and lists every supported value).

One image per request; 2K default resolution

2026-07-11
  • Breaking: the n parameter is no longer supported on image endpoints. Each request produces exactly one image; a request with n greater than 1 is rejected with 400 ERR_INVALID_REQUEST before any charge. To generate several images, send parallel requests — one per image — within your account limits.
  • resolution now documents and enforces its default: omitting it generates at 2K and bills the 2k variant. The internal default pricing variant is retired and no longer appears in GET /models variants[].
  • A failed creation's error field is now one of a fixed set of strings — see Failed creations.

Actionable safety-filter errors

2026-07-04
  • When the model's safety filter declines a prompt at generation time, the creation's error field now explains what to change: specific, descriptive scene prompts pass, while abstract or meaningless phrases are declined more often. Historical failed creations return the new wording too.
  • A safety-filter decline is never charged — the up-front charge is refunded in full automatically. See Safety filter.

Image inputs by URL

2026-07-04
  • New optional image_urls parameter on POST /images/generate — pass 1–4 source-image URLs directly instead of uploading first. Each URL is downloaded server-side, validated exactly like an upload (public http(s) only, 25 MiB cap, image content verification), and used as the input image(s).
  • image_urls is mutually exclusive with image_file_id / image_file_ids; a request naming both fails with 400 ERR_INVALID_REQUEST.
  • URL failures (blocked target, oversize, wrong content type, timeout) reject the request before any charge with details.url naming the offending URL. See Input images.

USD pricing & per-resolution variants

2026-07-03
  • Pricing is now denominated in USD — every money amount on the API (price, cost, required, wallet balances) is a USD value.
  • Money fields renamed: price, cost, and required (the legacy ruble-suffixed names are no longer emitted).
  • Per-resolution (1K / 2K / 4K) pricing for all image models — each resolution bills its own variant. See Models.
  • New top-level currency field on GET /models — the authoritative denomination marker for every money amount in the response.

Public launch

2026-07-02