Changelog
API releases and changes, newest first.
Strict geometry validation
2026-07-15aspect_ratiois 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 400ERR_INVALID_REQUESTbefore any charge, instead of rendering1:1.- Omitting
aspect_ratiorenders1:1— now stated explicitly onPOST /images/generate. Set it explicitly for any non-square image. resolutionis validated the same way: one of1K,2K,4K(case-insensitive), defaulting to2Kwhen omitted. An unsupported tier is rejected with 400ERR_INVALID_REQUESTbefore any charge, instead of being served — and billed — as2K.- Breaking: the two fields
widthandheightwere never part of the geometry contract and were previously ignored; sending either one now returns 400ERR_INVALID_REQUESTbefore any charge. Output geometry isaspect_ratio+resolutiononly — if your integration sentwidth/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
nparameter is no longer supported on image endpoints. Each request produces exactly one image; a request withngreater than 1 is rejected with 400ERR_INVALID_REQUESTbefore any charge. To generate several images, send parallel requests — one per image — within your account limits. resolutionnow documents and enforces its default: omitting it generates at 2K and bills the2kvariant. The internaldefaultpricing variant is retired and no longer appears inGET /modelsvariants[].- A failed creation's
errorfield is now one of four fixed 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
errorfield 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_urlsparameter onPOST /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_urlsis mutually exclusive withimage_file_id/image_file_ids; a request naming both fails with 400ERR_INVALID_REQUEST.- URL failures (blocked target, oversize, wrong content type, timeout) reject the request before any charge with
details.urlnaming 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, andrequired(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
currencyfield onGET /models— the authoritative denomination marker for every money amount in the response.
Public launch
2026-07-02POST /images/generate— asynchronous image generation withnano-banana-2andnano-banana-pro.POST /uploads— reference-image uploads for image-to-image workflows.GET /creations/{id}— job status and results.GET /models— model catalog with account-specific pricing.- Signed webhooks on creation completion and failure.
- Idempotent retries via
X-Idempotency-Key.