Fonctionnalité · Mannequin fantôme
API mannequin fantôme pour des photos de produits sur mannequin invisible
En une phrase
L'API ghost mannequin de Photta prend une photo de vêtement sur mannequin et renvoie une image avec mannequin invisible dont l'intérieur est reconstruit. Choisissez un style 3d ou flat_lay, effectuez un POST, sondez toutes les 3 secondes, téléchargez une fois le traitement terminé.
- Délai typique: 1.5–4 min
- Crédits: 4 crédits en 2K · 5 crédits en 4K
- Traitement: asynchrone, polling
- Limites: 600 requêtes/min
- Authentification: Clé Bearer
Chaque chiffre sur cette page provient de la documentation de l'API Photta · vérifié
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')const res = await fetch("https://api.photta.app/api/v1/ghost-mannequin", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}),
});
const { data } = await res.json(); // data.id, data.statusimport os, requests
res = requests.post(
"https://api.photta.app/api/v1/ghost-mannequin",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
},
)
data = res.json()["data"] # data["id"], data["status"]
En un coup d'œil
En un coup d'œil
- Endpoint
- POST /api/v1/ghost-mannequin
- Authentification
- Clé API Bearer
- Traitement
- Asynchrone — interrogez l'endpoint de statut par polling
- Délai typique
- 1.5–4 min
- Crédits
- 4 crédits en 2K · 5 crédits en 4K
- Rapports d'aspect
- 3:4 · 1:1 · 4:3 · 9:16 · 16:9
- Limites d'entrée
- Jusqu'à 10 Mo par image ; JPEG, PNG, WebP
- Idempotent
- Non
Requête et réponse
Requête
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')const res = await fetch("https://api.photta.app/api/v1/ghost-mannequin", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}),
});
const { data } = await res.json(); // data.id, data.statusimport os, requests
res = requests.post(
"https://api.photta.app/api/v1/ghost-mannequin",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
},
)
data = res.json()["data"] # data["id"], data["status"]202 Accepted / Terminé
{
"data": {
"id": "gm_d4e5f6",
"status": "processing",
"style": "3d",
"angle": "side",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"credits_used": 4,
"created_at": "2026-04-10T16:00:00Z"
},
"request_id": "req_gm001"
}{
"data": {
"id": "gm_d4e5f6",
"status": "completed",
"style": "3d",
"angle": "side",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"output_url": "https://cdn.photta.app/generated/gm_d4e5f6.jpg",
"thumbnail_url": "https://cdn.photta.app/generated/gm_d4e5f6-thumb.jpg",
"credits_used": 4,
"created_at": "2026-04-10T16:00:00Z",
"completed_at": "2026-04-10T16:00:48Z",
"duration_ms": 48000
},
"request_id": "req_gm002"
}Paramètres de requête
product_imageType: stringRequis
URL or base64 data URI of the garment photo (front or back, on a mannequin or flat).
back_imageType: string
URL or base64 data URI of the opposite side — helps the AI reconstruct the interior of the garment for a more realistic 3D effect.
image_sideType: string
Which side product_image represents.
= front
Valeurs:frontbackangleType: string
Camera angle for the output. "side" is worth calling out: the side view is reconstructed from the front photo (plus the back photo when provided), giving you a third catalog view without a third photoshoot — and it works well even on textured garments (crochet, lace, embroidery).
= straight
Valeurs:straightbacksidestyleType: string
Output style: "3d" (ghost mannequin with 3D body shape) or "flat_lay" (garment laid flat, mannequin removed).
= 3d
Valeurs:3dflat_laybackground_colorType: string
Background color.
= white
Valeurs:whitegraybeigeblackresolutionType: string
Output resolution. "2K" costs 4 credits per image; "4K" costs 5 credits per image. 4K is produced natively in a single generation — pick it upfront; the resolution cannot be changed after creation. Note: 4K cannot be combined with aspect_ratio 1:1 — that combination returns 400.
= 2K
Valeurs:2K4Kaspect_ratioType: string
Output aspect ratio. Note: 1:1 is not available at 4K resolution — 1:1 combined with 4K returns 400.
= 3:4
Valeurs:3:41:14:39:1616:9user_instructionType: string
Optional free-form note, max 400 characters (anything longer is silently truncated). A guarded steer for ambiguous rendering choices — e.g. "closed front", "cream interior lining", "buttoned up" — it never overrides the source garment, brand label, or structural reconstruction, and it is explicitly NOT a determinism/seed control.
brand_label_idType: string
Brand label UUID returned by the Brand Labels API. Applied to the generated garment when present. API v1 request fields use snake_case; use brand_label_id.
Erreurs
- 400
invalid_request_error - The request is malformed or contains invalid parameters.
- 401
authentication_error - The API key is missing, invalid, or expired.
- 402
insufficient_credits_error - Your account does not have enough credits.
- 404
not_found_error - The requested resource does not exist.
- 409
conflict_error - The request conflicts with current state — e.g. your concurrent-batch cap is reached.
- 429
rate_limit_error - Too many requests. Slow down and retry.Retry-After: 30
- 500
api_error - An internal server error occurred. Retry later.
Limites
- 600 requêtes par minute par clé API (Fenêtre fixe ; la limite est identique sur tous les forfaits)
- Une 429 renvoie Retry-After: 30 secondes
- Jusqu'à 10 Mo par image
- Formats: JPEG, PNG, WebP
- Lots simultanés par forfait: Free 1 · Hobby 2 · Seller 3 · Brand 4 · Studio 6
- Polling uniquement — l'API n'envoie aucun webhook.
Une photo en entrée, une photo avec mannequin invisible en sortie
Uploadez la source, choisissez un style, soumettez, effectuez le polling, téléchargez.
Étape 1
Générer une clé d'API
Le ghost mannequin utilise les mêmes identifiants que toutes les autres fonctionnalités de Photta — une seule clé, un seul solde de credits.
Étape 2
Uploader la photo source
Passez une URL publique ou une data URI base64 dans `product_image` ; ajoutez `back_image` lorsque vous disposez d'une vue arrière. JPEG, PNG et WebP jusqu'à 10 MB par image.
Étape 3
Envoyer le job de ghost mannequin en POST
Envoyez une requête POST à `/api/v1/ghost-mannequin` avec `product_image`, `style` (`3d` ou `flat_lay`) et, en option, `angle`, `background_color`, `resolution`. Le polling est le seul signal de complétion — l'API n'envoie aucun webhook.
Étape 4
Effectuer le polling jusqu'à la fin du job
Appelez en GET `/api/v1/ghost-mannequin/:id` toutes les 3 secondes jusqu'à ce que `data.status` passe à `completed` ou `failed` ; le traitement prend généralement entre 1.5 et 4 minutes.
Étape 5
Télécharger et persister
Le résultat est un PNG avec le mannequin supprimé et l'intérieur du vêtement reconstruit. Idéal pour les visuels ghost sur PDP, les galeries produits à rendu 3D et les encarts flat-lay.
Même endpoint en Node.js, Python et cURL
Node.js
API mannequin fantôme en Node.js
Appelez aPI mannequin fantôme de Photta depuis un backend Node.js avec fetch natif. Aucun SDK requis : stockez votre clé, soumettez le job, récupérez le résultat par polling.
LirePython
API mannequin fantôme en Python
Appelez aPI mannequin fantôme de Photta en Python avec la bibliothèque requests. Un wrapper de trente lignes, compatible asynchrone via httpx, fonctionnant dans Django, FastAPI et Celery.
LirecURL
API mannequin fantôme avec cURL
Appelez aPI mannequin fantôme de Photta directement depuis le shell avec cURL. Soumettez, effectuez le polling, téléchargez — chaque extrait s'associe à jq pour vos pipelines scriptés.
Lire
Questions fréquentes des développeurs avant d'intégrer le ghost mannequin
Qu'est-ce que la photographie ghost mannequin ?
Un rendu pour PDP où le vêtement semble flotter sur un corps invisible, révélant simultanément sa coupe et ses détails intérieurs. Historiquement assemblé à partir de plusieurs prises de vue en studio, l'API de Photta le génère en un seul appel à partir d'une unique photo sur mannequin.
Combien coûte le ghost mannequin ?
4 credits en 2K, 5 credits en 4K — soit un credit de moins par niveau que le try-on. Les jobs en échec sont automatiquement remboursés.
Quelle est la différence entre le style 3D et le style flat-lay ?
Le style `3d` préserve le volume tridimensionnel du mannequin — le vêtement conserve son relief, le tombé des épaules et des manches reste naturel, et l'intérieur est reconstruit. `flat_lay` aplatit le vêtement en une disposition 2D nette, idéale pour les collections capsules ou les fiches marketplace exigeant une présentation frontale uniforme.
Puis-je traiter plusieurs photos en batch ?
Oui. Envoyez une requête POST à `/api/v1/ghost-mannequin/batch` avec un tableau d'images sources. La réponse retourne un identifiant de batch ainsi que des identifiants de génération par élément. Effectuez le polling sur `/api/v1/ghost-mannequin/batch/:id` pour un statut global ou sur chaque élément individuellement.
Les coutures intérieures et les étiquettes sont-elles conservées ?
Oui — le modèle reconstruit l'intérieur du vêtement (intérieur du col, revers des poignets, doublure de la ceinture) au lieu de générer une texture générique. Les étiquettes tissées ou imprimées visibles sur la photo d'origine sont conservées dans la mesure du possible.
Comment effectuer le polling pour récupérer le résultat ?
Appelez en GET `/api/v1/ghost-mannequin/:id` toutes les 3 secondes. Pour les jobs en batch, interrogez un endpoint parent qui renvoie un statut global ainsi qu'un détail par élément.
Fonctionnalités associées
Fonctionnalités
API de try-on virtuel pour les vêtements
API REST qui positionne des vêtements sur des mannequins générés par IA. Traitement asynchrone, génération en 1.5–4 minutes, 5 crédits en 2K, 6 en 4K. Exemples en cURL, Node.js et Python.
Voir l'endpointFonctionnalités
API de try-on de bijoux pour colliers, bagues, bracelets et boucles d'oreilles
Positionnez colliers, bagues, bracelets et boucles d'oreilles sur des modèles IA via REST. 5 credits en 2K, mannequins gros plan intégrés, rendu gérant les reflets d'après la documentation de Photta.
Voir l'endpointDévelopper
Automatisez l'extraction ghost mannequin pour votre catalogue
Recette d'automatisation nocturne de catalogue : récupérez les mises à jour produits de la veille, envoyez-les en lot à l'API ghost-mannequin de Photta, interrogez par polling le lot parent, persistez les données dans votre base.
Voir l'endpointComparer
Photta vs Pixazo — pipeline propriétaire ou agrégateur de modèles
Comparatif Photta vs Pixazo : pipeline fashion propriétaire vs agrégateur multi-modèles. Endpoints, latence, offre gratuite et compromis. Données du 2026-04-19.
Voir l'endpointDémarrage rapide
Première image Photta en moins de cinq minutes.
Inscrivez-vous, générez une clé d'API, lancez votre premier appel cURL, effectuez le polling jusqu'à la complétion, persistez le résultat. Cinq étapes documentées de bout en bout.
Voir l'endpointRéférence
Erreurs de l’API Photta
La liste complète des types d’erreurs de l’API Photta avec leurs codes de statut, la structure du corps d’erreur et les échecs pouvant être réessayés.
Voir l'endpointRéférence
Rate limits de l'API Photta
La rate limit de l'API Photta, sa fenêtre, l'en-tête Retry-After, l'intervalle de polling et les plafonds de simultanéité par forfait, tels que documentés dans l'API.
Voir l'endpoint
Chaque chiffre sur cette page provient de la documentation de l'API Photta · vérifié
Testez l'API en cinq minutes
Générez une clé d'API Photta, collez le snippet cURL ci-dessus, et vous obtiendrez votre première photo portée sur modèle avant même que le café ait fini de couler.
- 1.5–4 min
- 4 crédits en 2K · 5 crédits en 4K
- asynchrone, polling
- 600 requêtes/min
- Clé Bearer