Une API d'essayage virtuel prend deux visuels en entrée (une photo d'une personne et la photo d'un produit) et renvoie un nouveau cliché de cette personne portant l'article en question. Ce guide vous montre comment intégrer cette fonctionnalité au sein d'une application web, d'une app mobile ou d'une boutique sur mesure grâce à l'[API d'essayage virtuel Genlook](https://genlook.app/developers). Le processus est identique pour les vêtements, les chaussures, les lunettes, les bijoux, les montres, les sacs et les chapeaux.
_Transparence : Genlook développe cette API. Si vous comparez encore les différentes solutions du marché, notre [comparatif de 10 API d'essayage virtuel](/blog/meilleures-api-essayage-virtuel-2026-comparatif) présente les résultats obtenus côte à côte._
## Les prérequis
- Une clé d'API. Créez un compte sur [platform.genlook.app](https://platform.genlook.app). Chaque nouveau compte bénéficie de 10 crédits gratuits, ce qui suffit largement pour tester l'ensemble du parcours.
- Un backend. Votre clé d'API doit impérativement rester sur un serveur sécurisé, jamais côté client dans un navigateur ou dans le binaire d'une application mobile.
- Une photo de la personne : un fichier JPEG, PNG, WebP ou HEIC d'un poids maximal de 10 Mo, pris de face, sur lequel la zone du corps concernée par l'article reste bien visible.
- Une photo de l'article : le visuel que vous utilisez déjà sur votre fiche produit. Un packshot en studio, un vêtement posé à plat ou une photo portée conviennent parfaitement. Aucun modèle 3D n'est nécessaire.
## Le déroulement des requêtes
Chaque intégration repose sur trois étapes simples :
1. **Uploadez la photo de la personne** via `POST /images/upload`. Vous obtenez en retour un `imageId` réutilisable pour tous les essayages ultérieurs de cet utilisateur.
2. **Lancez l'essayage** via `POST /try-on`. Transmettez directement les informations du produit (l'URL de l'image, un titre et une description) accompagnées de l'identifiant `imageId`. Il n'est pas nécessaire de synchroniser tout un catalogue au préalable.
3. **Récupérez le visuel généré** : interrogez régulièrement `GET /generations/:id`, appelez la fonction `waitFor()` du SDK ou écoutez le webhook `generation.completed`. Le délai moyen de traitement tourne autour de 8 secondes.
Si vous préférez n'effectuer qu'une seule requête, le endpoint `POST /try-on/sync` maintient la connexion ouverte jusqu'à ce que le rendu soit disponible et vous le renvoie directement. Cette approche est particulièrement pratique pour les scripts ou les fonctions serverless.
## Votre premier essayage en TypeScript
Le SDK officiel est [`@genlook/api`](https://genlook.app/docs/tryon-api/sdk). Il s'exécute sous Node 20+, Deno, Bun ainsi que sur les environnements edge.
```ts
import { Genlook } from "@genlook/api";
import { readFile } from "node:fs/promises";
const client = new Genlook({ apiKey: process.env.GENLOOK_API_KEY! });
// 1. Uploadez la photo de la personne une seule fois, puis réutilisez l'imageId.
const { imageId } = await client.images.upload(
await readFile("./person.jpg"),
{ mimeType: "image/jpeg" },
);
// 2. Lancez l'essayage. Le produit est défini directement dans la requête.
const { generationId } = await client.tryOn.create({
products: [{
externalId: "chemise-lin-12",
title: "Chemise ample en lin",
description: "Coupe décontractée, emmanchures tombantes, tombe sous les hanches.",
images: [{ source: { url: "https://cdn.example.com/chemise-lin.jpg" } }],
}],
person: { image: { source: { id: imageId } } },
});
// 3. Attendez la fin de la génération.
const result = await client.generations.waitFor(generationId);
console.log(result.resultImageUrl);
```
## Le même appel en cURL ou Python
Bien qu'il n'existe pas de SDK dédié à Python, notre API REST s'utilise sans peine dans n'importe quel langage. Voici l'appel synchrone en une seule requête :
```bash
curl -X POST "https://api.genlook.app/tryon/v1/try-on/sync" \
-H "x-api-key: $GENLOOK_API_KEY" \
-H "Content-Type: application/json" \
--max-time 100 \
-d '{
"products": [{
"externalId": "chemise-lin-12",
"title": "Chemise ample en lin",
"description": "Coupe décontractée, emmanchures tombantes, tombe sous les hanches.",
"images": [{ "source": { "url": "https://cdn.example.com/chemise-lin.jpg" } }]
}],
"person": { "image": { "source": { "id": "<imageId>" } } }
}'
```
```python
import os, requests
BASE = "https://api.genlook.app/tryon/v1"
headers = {"x-api-key": os.environ["GENLOOK_API_KEY"]}
with open("person.jpg", "rb") as f:
image_id = requests.post(f"{BASE}/images/upload", headers=headers,
files={"file": ("person.jpg", f, "image/jpeg")}).json()["imageId"]
result = requests.post(f"{BASE}/try-on/sync", headers=headers, timeout=100, json={
"products": [{
"externalId": "chemise-lin-12",
"title": "Chemise ample en lin",
"description": "Coupe décontractée, emmanchures tombantes, tombe sous les hanches.",
"images": [{"source": {"url": "https://cdn.example.com/chemise-lin.jpg"}}],
}],
"person": {"image": {"source": {"id": image_id}}},
}).json()
print(result["resultImageUrl"])
```
La requête synchrone patiente jusqu'à 90 secondes. Si la génération prend plus de temps, vous recevez un code HTTP `202` contenant le `generationId`, ce qui vous permet de consulter l'état d'avancement par la suite.
## Lunettes, bijoux, chaussures et autres accessoires
Vous n'avez pas besoin de préciser la typologie d'article. Le moteur analyse automatiquement l'image fournie et dispose la pièce au bon endroit : les lunettes sur le visage, les boucles d'oreilles aux lobes, un collier à la naissance du cou ou des baskets aux pieds. La structure de l'appel reste strictement identique à celle d'un vêtement.
Deux précisions importantes :
- **Les tenues complètes ne concernent que les vêtements.** Vous pouvez combiner jusqu'à 4 articles textiles sur une même requête (par exemple un haut, un pantalon et une veste). En revanche, les accessoires (lunettes, chapeaux, chaussures, maroquinerie ou bijoux) doivent faire l'objet de requêtes distinctes.
- **La zone d'application doit être visible sur la photo d'origine.** Un portrait cadré sur le visage convient très bien pour essayer des lunettes ou des boucles d'oreilles, mais ne fonctionnera pas pour des souliers.
## Applications mobiles (iOS, Android, Flutter, React Native)
Comme la clé d'API ne doit jamais être intégrée directement dans le binaire d'une application, le flux mobile transite systématiquement par votre propre infrastructure serveur :
1. L'application capture ou sélectionne une photo, puis la transmet à votre backend.
2. Votre serveur l'envoie à l'API Genlook et déclenche l'essayage virtuel.
3. Dès que l'image est prête ou que le webhook est reçu, votre backend renvoie l'URL finale à l'application mobile.
4. L'application affiche le rendu à l'utilisateur.
Votre serveur n'a besoin que d'effectuer de simples requêtes HTTP : la technologie retenue pour votre application mobile n'a donc aucune incidence.
## Grille tarifaire
Chaque rendu coûte 1 crédit, et les échecs éventuels de génération sont immédiatement remboursés. L'offre à l'usage s'élève à 0,04 $ par essayage, vendue sous forme de packs de crédits accessibles dès 5 $ et sans date d'expiration. Nos forfaits mensuels permettent de réduire ce coût à 0,02 $ par génération (forfait Starter à 20 $ pour 1 000 crédits), voire à 0,015 $ avec la formule Scale (300 $ pour 20 000 crédits). Notre [simulateur de tarif](https://genlook.app/developers#pricing) accessible sur la page développeurs vous aide à évaluer votre dépense mensuelle selon vos prévisions de volume.
## Les erreurs courantes à éviter
- **Effectuer les appels API directement depuis le front-end.** Votre clé deviendrait accessible à tous vos utilisateurs. Passez systématiquement par votre serveur.
- **Transmettre des descriptions produit trop vagues.** Le nom et la description aident l'IA à comprendre le porté et la texture de la pièce. Une mention comme « Gilet court en laine, coupe carrée » donne des résultats bien plus précis que la simple référence « Réf 4417 ».
- **Envoyer à nouveau l'intégralité du produit à chaque requête.** Lors du tout premier essayage d'un article, l'API analyse son visuel en détail, ce qui requiert quelques secondes de plus. Par la suite, renseignez simplement son `externalId` pour réutiliser cette analyse sans délai.
- **Conserver les photos des utilisateurs trop longtemps.** Configurez le paramètre `keepForDays` sur 1, 3 ou 7 jours dès l'envoi de l'image, et fournissez votre propre identifiant `externalUserId` afin d'effacer d'un seul coup toutes les données d'un client s'il le demande.
- **Consommer vos crédits pendant la phase de développement.** Renseignez la valeur `mock` dans l'intitulé du produit : le service vous renverra immédiatement la photo de la personne sans modification, de manière gratuite et instantanée, ce qui est parfait pour tester votre interface.
<Faq>
<FaqItem question="Existe-t-il une API capable de générer la photo d'une personne portant un vêtement précis ?">
Tout à fait. C'est exactement le rôle d'une API d'essayage virtuel : vous fournissez le cliché d'une personne et la photo du produit, puis elle renvoie l'image assemblée. Avec Genlook, il suffit d'une seule requête synchrone (ou de deux en mode asynchrone) et d'environ 8 secondes d'attente.
</FaqItem>
<FaqItem question="Faut-il modéliser mes produits en 3D ?">
Non. Notre moteur fonctionne directement avec vos photographies e-commerce habituelles, telles qu'elles figurent déjà sur votre boutique en ligne.
</FaqItem>
<FaqItem question="Puis-je exploiter les images générées à des fins commerciales ?">
Oui. Genlook est une solution professionnelle conçue pour être déployée en production au sein de commerces en ligne et d'applications. Les modèles académiques comme IDM-VTON ou CatVTON sont généralement restreints par des licences non commerciales.
</FaqItem>
<FaqItem question="J'utilise Shopify, WooCommerce ou PrestaShop : ai-je besoin de l'API ?">
Non. L'application ou le module Genlook ajoute la cabine d'essayage à vos pages produits en quelques clics et sans coder. Notre API s'adresse avant tout aux boutiques personnalisées, aux applications pour smartphones et aux logiciels sur mesure.
</FaqItem>
</Faq>