---
title: "Price an image before creating it: USD per image and the balance hold; writes nothing"
method: POST
path: "/v1/images/estimate"
tags: ["platform-api"]
---

# Price an image before creating it: USD per image and the balance hold; writes nothing

`POST /v1/images/estimate`

## Request

- Base URL: `https://api.cuddler.ai`
- URL: `https://api.cuddler.ai/v1/images/estimate`
- Auth: HTTP bearer

## Request body

- object
  - `model` 'seedream-5' | 'seedream-5-pro' | 'qwen-image-3' | 'z-image-turbo' | 'grok-imagine-2.0' | 'ideogram-4' | 'ideogram-4.5' | 'recraft-4.1' | 'nano-banana-2.1' | 'nano-banana-2' | 'nano-banana-2-lite' | 'nano-banana-pro' | 'imagen-4-ultra' | 'imagen-4' | 'imagen-4-fast' | 'imagen-3' | 'imagen-3-fast' | 'gpt-image-2.5-sunburst' | 'gpt-image-2.5-flare' | 'gpt-image-2' | 'gpt-image-1.5' | 'gpt-image-1-mini' | 'gpt-image-1', required
  - `reference_image_count` integer
  - `variant` 'default' | 'fast' | 'pro' | 'standard' | 'turbo' | '4k' | 'base' | 'utility' | 'utility-pro'
  - `resolution` '0.5K' | '1K' | '2K' | '4K'
  - `aspect_ratio` '1:1' | '4:3' | '3:4' | '16:9' | '9:16'

## Response `200`

What POST /v1/images would bill and hold

- object
  - `object` 'image_estimate', required
  - `model` 'seedream-5' | 'seedream-5-pro' | 'qwen-image-3' | 'z-image-turbo' | 'grok-imagine-2.0' | 'ideogram-4' | 'ideogram-4.5' | 'recraft-4.1' | 'nano-banana-2.1' | 'nano-banana-2' | 'nano-banana-2-lite' | 'nano-banana-pro' | 'imagen-4-ultra' | 'imagen-4' | 'imagen-4-fast' | 'imagen-3' | 'imagen-3-fast' | 'gpt-image-2.5-sunburst' | 'gpt-image-2.5-flare' | 'gpt-image-2' | 'gpt-image-1.5' | 'gpt-image-1-mini' | 'gpt-image-1', required
  - `resolution` '0.5K' | '1K' | '2K' | '4K', required
  - `aspect_ratio` '1:1' | '4:3' | '3:4' | '16:9' | '9:16', required
  - `images` integer, required
  - `usd` string, required
  - `usd_micros` integer, required
  - `hold_usd` string, required
  - `usd_per_image` string, required
  - `price_version` string, required
  - `list_usd` string
  - `unit` 'image', required
  - `campaign` object
    - `id` string, required
    - `ends_at` string, required
    - `applied` boolean, required
    - `reason` 'daily_limit_reached' | 'budget_spent'
    - `daily_images_left` integer, required

## Other responses

- `400`: invalid_request — validation failed (details.issues), or the model does not render that canvas
- `401`: unauthorized — no key, or an unknown or revoked one (WWW-Authenticate: Bearer)
- `403`: model_not_enabled — the model is not enabled for this organization; organization_suspended
- `404`: not_found — the Platform API is switched off, or the object does not exist
- `429`: rate_limited — over this key's requests per minute (Retry-After)
- `500`: internal_error — quote request_id when contacting support

---

[API](https://skmtc.dev/cuddler/apis/cuddler-platform-api.md) · [All operations](https://skmtc.dev/cuddler/apis/cuddler-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cuddler/apis/cuddler-platform-api/revisions/f03943ceadff?raw)
