TRY-ON API · REST · TYPESCRIPT SDK

Virtual try-on API.
One call, any product.

Send a photo of a person and a product image. About eight seconds later you get back a photo of that person wearing the product. It is the same engine that runs Genlook on Shopify, WooCommerce and PrestaShop.

median, request to result
8.2s
lowest price per try-on
$0.015
free credits on signup
10
The person photo sent to the APIperson
The product image sent to the APIproduct
AI virtual try-on result: Dress
resultImageUrl

Product text sent with this request

"title": "Cocktail mini dress""description": "Party cocktail mini dress, fitted bodice, short hemline, evening occasion"

01 · How it works

Three requests from photo to result.

There is no catalog to sync beforehand. Products are created by the try-on call itself, and generations run in the background. Use the TypeScript SDK or plain REST from any language.

Quickstart guide →
  1. 01Upload the person photoPOST /images/uploadReturns an imageId. Reuse it for every try-on with the same photo.
  2. 02Create the try-onPOST /try-onSend the product (title, description and image) with the imageId. The product is saved under your externalId, so later calls only need the ID.
  3. 03Get the resultGET /generations/:idPoll until the status is COMPLETED, call waitFor() in the SDK, or receive a webhook set up in the dashboard.

Keep your API key on your server. The SDK is server-side only, so browser requests should go through your backend.

import { Genlook } from "@genlook/api";
import { readFile } from "node:fs/promises";

const client = new Genlook({ apiKey: process.env.GENLOOK_API_KEY! });

// 1. Upload the customer photo once, reuse the imageId.
const { imageId } = await client.images.upload(
  await readFile("./customer.jpg"),
  { mimeType: "image/jpeg" },
);

// 2. Create the try-on. The product is created inline.
const { generationId } = await client.tryOn.create({
  products: [{
    externalId: "hoodie-42",
    title: "Oversized cotton hoodie",
    description: "Relaxed fit, dropped shoulders, hip length.",
    images: [{ source: { url: "https://cdn.example.com/hoodie.jpg" } }],
  }],
  person: { image: { source: { id: imageId } } },
});

// 3. Wait for the result (or use a webhook).
const result = await client.generations.waitFor(generationId);
console.log(result.resultImageUrl);
GET /generations/:id200 · COMPLETED
{
  "generationId": "cm8gen456xyz",
  "status": "COMPLETED",
  "resultImageUrl": "https://storage.googleapis.com/...",
  "createdAt": "2026-03-30T10:00:00.000Z",
  "updatedAt": "2026-03-30T10:00:10.000Z"
}

02 · Results

Real outputs, any product type.

Every image below came out of a single try-on call. Hover a tile to see the photo that was sent. The product image is in the corner.

More examples by category →
Dresses
Dresses
Outerwear
Outerwear
Streetwear
Streetwear
Eyewear
Eyewear
Wigs
Wigs
Colored lenses
Colored lenses
Print on demand
Print on demand
Pet wear
Pet wear

03 · API details

What to know before you build.

The dashboard shows logs, usage and spend for each API key.

Error reference →
Speed
8.2s median
The first try-on of a new product takes a few seconds longer, because the product is analyzed once and then reused.
Webhooks
generation.completed
Set a webhook URL in the dashboard to receive generation.completed and generation.failed events instead of polling.
Images
JPEG, PNG, WebP, HEIC
Up to 10 MB per image. Send a file, a URL or a previously uploaded imageId.
Products
No catalog sync
Products are created inline by the try-on call and kept for 15 days after their last use.
Errors
402 INSUFFICIENT_CREDITS
Every error returns a code, a message and a status. Failed generations are refunded.
User data
DELETE /customers/:id
Delete every image linked to one of your users. Set keepForDays to 1, 3 or 7 days per upload.
Output
Watermark and AI label
Add your logo to results. The EU AI Act label is on by default and can be turned off per request.
Engine
Always up to date
Engine improvements reach your integration automatically. No new version to adopt, no code to change.
Hosting
Nothing to run
No GPUs, model weights or queues on your side. Built for production traffic, launch-day spikes included.
Testing
Product titled "mock"
Returns the person photo unchanged and quickly, so you can test your integration flow.

04 · SDK and tools

Libraries and examples to start from.

05 · Pricing

One credit per try-on. Pick the plan that fits your volume.

Every option uses the same API and the same engine. Monthly plans lower the price per try-on, their included try-ons reset each month, and you can cancel anytime. Failed generations are refunded.

Above Scale, custom plans start at $1,000 a month for committed volume or dedicated capacity. For those and for the startup program, write to thibault@genlook.app.

2,000
  • Pay as you go$0.04 per try-on, in credit packs from $5. Pack credits never expire.$80.00/ month$0.04 per try-on
  • StarterLowest cost$20 a month with 1,000 try-ons included, then $0.02 each.$40.00/ month$0.02 per try-on
  • Growth$99 a month with 6,000 try-ons included, then $0.018 each.$99.00/ month$0.0495 per try-on
  • Scale$300 a month with 20,000 try-ons included, then $0.015 each.$300/ month$0.15 per try-on

Estimate before tax. Extra try-ons on monthly plans are billed in blocks at the plan's rate. New accounts get 10 free credits.

Full comparison table →

FAQ

Questions about the API.

The full reference is in the docs at genlook.app/docs.

How do I get an API key?
Create an account at platform.genlook.app. The key is available right away, and new accounts start with 10 free credits.
Can I call the API from the browser?
No. Keep your API key on your server and send browser requests through your backend. The SDK is server-side only for the same reason.
I run a Shopify, WooCommerce or PrestaShop store. Do I need the API?
No. Use the Genlook app, plugin or module for your platform. The API is for custom storefronts, mobile apps and other products.
Do you have a startup program?
Yes. Write to thibault@genlook.app with what you're building.

Second opinion

Ask an AI assistant about the API.

Each link opens the assistant with the question below already filled in.

Ask ChatGPT↗Ask Claude↗Ask Perplexity↗

“How easy is it to integrate the genlook.app Virtual Try-On API into a custom app?”

Start with 10 free credits.

Create an account, get an API key and run your first try-on in a few minutes.