Skip to main content
Send a customer photo and a product, get back a photo of the customer wearing it. No catalog sync: products are created and cached on the fly by the try-on call.

Basics

How it works

  1. Upload the customer photo once. Reuse the imageId for every try-on.
  2. Create the try-on with the product inline (externalId, title, description, images). The product is created or updated in the same call. Next time, send only the externalId.
  3. Poll the generation until COMPLETED, or call client.generations.waitFor() in the SDK.
Send the full product title and description. They tell the AI what the garment is and how it fits, which gives faster and more accurate results.

Products

products takes exactly one item. Three ways to send it:
Send a product once, then reuse its ID. The first try-on of a product analyzes it, which adds a few seconds. After that, send only { externalId }: the analysis is reused, so results come back faster.
Every try-on resets the lifetime, so products in use never expire. If a reference returns PRODUCT_NOT_FOUND, resend it inline. POST /products is optional: use it only for products that should never expire or should appear in GET /products.

Limits

  • 429 RATE_LIMITED when you send too many requests. Back off and retry. Normal traffic, polling included, stays well below the limit.
  • 402 INSUFFICIENT_CREDITS when the balance is empty. Top up in the dashboard.
  • Images: JPEG, PNG, WebP or HEIC, 10 MB max.
Building a new product? The startup program gives free credits to new integrations.

Next steps

Quickstart

First try-on in 5 minutes

TypeScript SDK

Typed client with a built-in poller

Example app (Next.js)

Clone a working integration

MCP server

Try-on from Claude, ChatGPT or Cursor