---
title: "Change a product's color while preserving everything else"
method: POST
path: "/v2/workflow/colorways"
tags: ["edit-workflow"]
---

# Change a product's color while preserving everything else

`POST /v2/workflow/colorways`

Recolors the masked region of the product photo to the target color
while preserving the product's geometry, materials, prints, logos,
and shading, and keeping every region outside the mask unchanged.

The request is processed asynchronously. Poll
`GET /v1/generations/{generation_id}` with the returned `generation_id`
until the generation is completed or failed.

Supply the product photo as either an `AssetIdentifier` reference
(`image_asset_identifier`) or the raw image bytes directly (`image`,
multipart requests only). Provide exactly one of the two forms;
supplying both, or neither, is rejected with a 400.

Supply the mask marking the region to recolor as either an
`AssetIdentifier` reference (`mask_asset_identifier`) or the raw mask
bytes directly (`mask`, multipart requests only). Provide exactly one
of the two forms. The mask must have the same pixel dimensions as the
product photo; white (or opaque) pixels mark the region to recolor.

## Request body

- ColorwaysRequest — Supply the product photo as either an `AssetIdentifier` reference or (multipart requests only) 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 product photo to recolor (max size 25MB), as raw bytes; only JPEG, PNG, and WEBP formats are supported. Multipart requests only. Provide exactly one of `image_asset_identifier` or `image`.
  - `mask_asset_identifier` AssetIdentifier — An identifier for an ideogram asset.
    - `asset_type` 'ASSET' | 'CANVAS_ASSET' | 'LAYERED_ASSET' | 'RESPONSE' | 'UPLOAD', required
    - `asset_id` string, required
  - `mask` string, binary — The mask marking the region of the product photo to recolor (max size 25MB), as raw bytes; only JPEG, PNG, and WEBP formats are supported. The mask must have the same pixel dimensions as the product photo; white (or opaque) pixels mark the region to recolor. Multipart requests only. Provide exactly one of `mask_asset_identifier` or `mask`.
  - `color` string, required — The target color for the masked region, as a six-digit hex code like `#B3202C`. The product's shape, construction, materials, prints, and logos are always preserved.
  - `aspect_ratio` string — The aspect ratio of the generated image. Defaults to the aspect ratio of the product photo when omitted, which preserves the original framing exactly. When a different ratio is requested, the scene is extended to fill the new shape rather than cropped, so part of the frame is newly generated. Supported values are `1:1`, `3:4`, `4:3`, `16:9`, and `9:16`.
  - `quality` 'VERY_LOW' | 'LOW' | 'MEDIUM' | 'HIGH' — The generation quality level. Higher levels may use more inference steps or additional prompt processing.
  - `private` boolean — If true, the user is requesting private generation. If omitted, this defaults to the user's plan entitlement. Enterprise generations are always private.
  - `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`

Colorway accepted for asynchronous processing.

- ColorwaysResponse — Acknowledgement that the colorway was accepted. Poll `GET /v1/generations/{generation_id}` for status and results.
  - `generation_id` string, required — URL-safe base64 ID accepted by the generation polling endpoint.

## Other responses

- `400` — Invalid input provided.
- `401` — Unauthorized.
- `402` — Insufficient credits or quota.
- `403` — Not authorized to create a colorway.
- `429` — Too many requests.

---

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