Skip to main content
A product is the garment your shopper tries on: a title, a description, one or more images, and your own ID for it (externalId, usually your SKU or catalog product ID). You never have to create products up front. The first try-on that includes a product creates it. What matters is that you send the same externalId every time you try on the same garment.

Why reuse the same ID

The first time we see a product, we analyze it: what kind of garment it is, and which image shows it best. That analysis adds a few seconds to the first try-on. It is saved on the product, so every later try-on with the same externalId skips it.

Three ways to send a product

Every try-on resets the product’s lifetime, so products your shoppers use keep living. Products created with POST /products never expire. Send the ID alone. If the product expired or was never sent, you get 404 PRODUCT_NOT_FOUND: send it again in full, once.
First call, or after PRODUCT_NOT_FOUND
Every call after that
The full example shows this fallback in Python, and the SDK handles it with a ProductNotFoundError.
Resending the full product with the same content is fine: the saved analysis is kept. It only runs again when the title, description or images change.

Choosing the ID

  • Use an ID that never changes for the garment: your SKU or product ID. Don’t add timestamps or random values.
  • One ID per look. If colours have their own photos, give each colour its own ID (shirt-42-red, shirt-42-blue). Switching images under one ID replaces the product and runs the analysis again.
  • The ID is yours. It is scoped to your account and can’t start with _anon_, which is reserved for one-shot products.

Getting the best results

  • Send the full title and a real description (cut, fit, length). They help the AI understand the garment.
  • Prefer image URLs to uploaded files. URLs are fetched once and cached. Uploaded bytes travel with every call that includes them.

Manage your products