---
title: "Upscale an image"
method: POST
path: "/v2/tools/upscale"
tags: ["tools"]
---

# Upscale an image

`POST /v2/tools/upscale`

Upscale one image to 2x, 4x, or 8x its original resolution, up to a
maximum output of 8192px per side. Ideogram selects the best upscaling
model for each request, and the selection may change over time; callers
never choose a model.

Supply the source either as an `image_asset_identifier` reference (an
image already stored with Ideogram) or as raw `image` bytes (multipart
requests only). Provide exactly one of the two forms; supplying both,
or neither, is rejected with a 400. Uploaded bytes are used for this
request only and are not stored as an asset; upscales of a referenced
asset keep a visible link to their source image.

Upscaling takes no prompt: the source image is enhanced as-is.

By default the request blocks until the upscaled image is ready and
returns it in `data`. Set `async` to true to return immediately after
the request is accepted, then poll for completion and results with
`GET /v1/generations/{generation_id}` using the returned
`generation_id`.

Supplying a `webhook_url` makes the request asynchronous whatever
`async` says: the response returns as soon as the request is accepted,
and the finished result is POSTed to that URL.

## Request body

- UpscaleToolRequest — Supply the source image either as an `image_asset_identifier` reference or (multipart requests only) as raw `image` bytes. Provide exactly one of the two forms; supplying both, or neither, is rejected with a 400.
  - `image_asset_identifier` AssetIdentifier — An identifier for an ideogram asset.
    - `asset_type` 'ASSET' | 'CANVAS_ASSET' | 'LAYERED_ASSET' | 'RESPONSE' | 'UPLOAD', required
    - `asset_id` string, required
  - `image` string, binary — The source image to upscale (max size 50MB), as raw bytes; only common image formats such as JPEG, PNG, and WEBP are supported. Multipart requests only. Provide exactly one of `image_asset_identifier` or `image`. The bytes are used for this request only and are not stored as an asset.
  - `upscale_factor` 'X2' | 'X4' | 'X8' — How much to enlarge the source image: 2x, 4x, or 8x its original width and height. Rejected when the output would exceed 8192px on either side.
  - `seed` integer — Random seed. Set for reproducible generation.
  - `async` boolean — When false (the default), the request blocks until the upscaled image is ready and returns it in `data`. When true, the request returns as soon as it is accepted; poll for completion and results with `GET /v1/generations/{generation_id}` using the returned `generation_id`.
  - `webhook_url` string, uri — HTTPS URL that Ideogram delivers the generated result to. Ideogram sends a JSON POST to this URL once all images for the request have finished generating. The body mirrors the synchronous generate response: `request_id`, `created`, and a `data` array containing every generated image (`url`, `prompt`, `resolution`, `seed`, `is_image_safe`). Each delivery is signed with Ed25519 and verifiable against the public keys at `https://api.ideogram.ai/v1/.well-known/jwks.json`. Must be HTTPS; private and loopback hosts and the cloud metadata service are rejected.

## Response `200`

The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v1/generations/{generation_id}` (`async` requests).

- UpscaleToolResponse — Response returned by `POST /v2/tools/upscale`. Synchronous requests (the default) include the upscaled image in `data`. Requests with `async` set to true omit `data`; poll for completion and results with `GET /v1/generations/{generation_id}` using the returned `generation_id`. The seed reports the value the request resolved to when the caller left it unset; width and height report the output dimensions.
  - `generation_id` string, required — URL-safe base64 ID of the accepted generation. Accepted by the `GET /v1/generations/{generation_id}` polling endpoint.
  - `data` UpscaleImageObject[] — The upscaled image. Present only for synchronous requests (`async` omitted or false).
    - `url` string, uri, nullable — The direct link to the upscaled image. Empty when the image did not pass safety checks.
    - `resolution` string, required — The resolution of the upscaled image, formatted as "WIDTHxHEIGHT".
    - `is_image_safe` boolean, required — Whether the image passed safety checks. If false, `url` is empty.
    - `seed` integer, required — Random seed. Set for reproducible generation.
  - `seed` integer, required — Random seed. Set for reproducible generation.
  - `width` integer, required — The output width in pixels.
  - `height` integer, required — The output height in pixels.

## Other responses

- `400` — Invalid input provided, or the output would exceed the 8K limit.
- `401` — Unauthorized.
- `402` — Insufficient credits or quota.
- `403` — Not authorized to upscale images.
- `404` — The referenced source asset was not found.
- `429` — Too many requests.
- `500` — Internal server error.
- `503` — The endpoint is temporarily unavailable.

## Changes

- **2026-08-27** `3eb3216eed39` — 2 info
  - added the new optional request property `webhook_url` (media type: multipart/form-data)
  - added the new optional request property `webhook_url` (media type: application/json)
- **2026-08-26** `204996bf317a` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/ideogram/apis/ideogram-openapi-3-0/changes/v2/tools/upscale/post.md)

---

[API](https://skmtc.dev/ideogram/apis/ideogram-openapi-3-0.md) · [All operations](https://skmtc.dev/ideogram/apis/ideogram-openapi-3-0/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ideogram/ideogram-openapi-3-0/revisions/3eb3216eed39/schema)
