edit-workflow

Transfer a shoe upper onto a preserved sole

Uses the sole-donor shoe as the output canvas, preserving its sole, camera, background, and lighting while transferring the upper from ordered references.

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

post/v2/tool/sole-swap

Request body

instructionstring

Optional additional direction for the sole swap.

aspect_ratiostring

Output aspect ratio. When omitted, the closest supported ratio is derived from the sole-donor base image.

base_generation_size'1K' | '2K' | '4K'

Output resolution tier. Defaults to 2K.

quality'LOW' | 'MEDIUM' | 'HIGH'

The quality tier for the image edit. Higher tiers may improve detail and take longer to complete.

seedinteger

Random seed. Set for reproducible generation.

num_images1 | 2 | 4

Number of sole-swap images to create.

privateboolean

When true or omitted, the output is kept private to your account. Set to false to publish the output to the public feed. Enterprise accounts always generate privately.

webhook_urlstring 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.

Example request

{
  "aspect_ratio": "aspect_ratio",
  "private": true,
  "seed": 12345,
  "webhook_url": "https://api.example.com/webhooks/ideogram",
  "base_generation_size": "2K",
  "base_asset_identifier": {
    "asset_type": "RESPONSE",
    "asset_id": "7uS_VESkRI6O3-sVgHQp_A"
  },
  "instruction": "instruction",
  "num_images": 0,
  "upper_asset_identifiers": [
    {
      "asset_type": "RESPONSE",
      "asset_id": "7uS_VESkRI6O3-sVgHQp_A"
    },
    {
      "asset_type": "RESPONSE",
      "asset_id": "7uS_VESkRI6O3-sVgHQp_A"
    },
    {
      "asset_type": "RESPONSE",
      "asset_id": "7uS_VESkRI6O3-sVgHQp_A"
    },
    {
      "asset_type": "RESPONSE",
      "asset_id": "7uS_VESkRI6O3-sVgHQp_A"
    },
    {
      "asset_type": "RESPONSE",
      "asset_id": "7uS_VESkRI6O3-sVgHQp_A"
    }
  ],
  "quality": null
}

Response

Sole swap accepted for asynchronous processing.

generation_idstring required

URL-safe base64 ID accepted by the generation polling endpoint.

Example response

{
  "generation_id": "generation_id"
}

Changes