Funcionalidad · Maniquí invisible
API de maniquí invisible para fotos de producto con efecto maniquí invisible
En una frase
La API de maniquí invisible de Photta toma una foto de la prenda en un maniquí y devuelve una imagen de maniquí invisible con el interior de la prenda reconstruido. Elige un estilo 3d o flat_lay, haz POST, haz polling cada 3 segundos y descarga cuando esté completed.
- Tiempo típico: 1.5–4 min
- Credits: 4 credits a 2K · 5 credits a 4K
- Procesamiento: asíncrono, polling
- Límites: 600 requests/min
- Autenticación: Bearer key
Cada cifra de esta página proviene de la documentación de la API de Photta · verificado
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"]
De un vistazo
De un vistazo
- Endpoint
- POST /api/v1/ghost-mannequin
- Autenticación
- Bearer API key
- Procesamiento
- Asíncrono — realiza polling al endpoint de estado
- Tiempo típico
- 1.5–4 min
- Credits
- 4 credits a 2K · 5 credits a 4K
- Relaciones de aspecto
- 3:4 · 1:1 · 4:3 · 9:16 · 16:9
- Límites de entrada
- Hasta 10 MB por imagen; JPEG, PNG, WebP
- Idempotente
- No
Petición y respuesta
Petición
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 / Completado
{
"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"
}Parámetros de la petición
product_imageTipo: stringObligatorio
URL or base64 data URI of the garment photo (front or back, on a mannequin or flat).
back_imageTipo: 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_sideTipo: string
Which side product_image represents.
= front
Valores:frontbackangleTipo: 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
Valores:straightbacksidestyleTipo: string
Output style: "3d" (ghost mannequin with 3D body shape) or "flat_lay" (garment laid flat, mannequin removed).
= 3d
Valores:3dflat_laybackground_colorTipo: string
Background color.
= white
Valores:whitegraybeigeblackresolutionTipo: 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
Valores:2K4Kaspect_ratioTipo: string
Output aspect ratio. Note: 1:1 is not available at 4K resolution — 1:1 combined with 4K returns 400.
= 3:4
Valores:3:41:14:39:1616:9user_instructionTipo: 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_idTipo: 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.
Errores
- 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.
Límites
- 600 solicitudes por minuto por API key (Ventana fija; el límite es el mismo en todos los planes)
- Un 429 incluye Retry-After: 30 segundos
- Hasta 10 MB por imagen
- Formatos: JPEG, PNG, WebP
- Lotes simultáneos por plan: Free 1 · Hobby 2 · Seller 3 · Brand 4 · Studio 6
- Solo polling — la API no envía webhooks.
Una foto de entrada, una foto de maniquí invisible de salida
Sube el origen, elige un estilo, envía, haz polling y descarga.
Paso 1
Genera una API key
Ghost mannequin usa las mismas credenciales que cualquier otra capacidad de Photta: una key, un saldo de credits.
Paso 2
Sube la foto de origen
Pasa una URL pública o un data URI en base64 en `product_image`; añade `back_image` cuando tengas una vista trasera. JPEG, PNG y WebP de hasta 10 MB por imagen.
Paso 3
Envía el trabajo de ghost mannequin por POST
Haz POST a `/api/v1/ghost-mannequin` con `product_image`, `style` (`3d` o `flat_lay`) y, opcionalmente, `angle`, `background_color` y `resolution`. El polling es la única señal de finalización; la API no envía webhooks.
Paso 4
Haz polling hasta que el trabajo se complete
Haz GET a `/api/v1/ghost-mannequin/:id` cada 3 segundos hasta que `data.status` sea `completed` o `failed`; el tiempo habitual de finalización es de 1.5 a 4 minutos.
Paso 5
Descarga y persiste
La salida es un PNG con el maniquí eliminado y el interior de la prenda reconstruido. Ideal para fotos ghost en PDP, galerías de producto con efecto 3D e inserciones flat-lay.
Mismo endpoint en Node.js, Python y cURL
Node.js
API de maniquí invisible en Node.js
Llama a aPI de maniquí invisible de Photta desde un backend de Node.js con fetch nativo. Sin SDKs: guarda tu key, envía el trabajo y haz polling para obtener el resultado.
LeerPython
API de maniquí invisible en Python
Llama a aPI de maniquí invisible de Photta en Python con la biblioteca requests. Wrapper de treinta líneas, compatible con async mediante httpx, funciona en Django, FastAPI y Celery.
LeercURL
API de maniquí invisible con cURL
Llama a aPI de maniquí invisible de Photta directamente desde la terminal con cURL. Envía, haz polling, descarga: cada fragmento de código se combina con jq para pipelines automatizados.
Leer
Preguntas que los desarrolladores hacen antes de desplegar ghost mannequin
¿Qué es la fotografía con maniquí invisible?
Un tratamiento visual para PDP donde la prenda parece flotar sobre un cuerpo invisible, mostrando la forma y la confección interior a la vez. Históricamente se compone a partir de múltiples tomas de estudio; la API de Photta lo genera en una sola llamada a partir de una foto sobre maniquí.
¿Cuánto cuesta ghost mannequin?
4 credits en 2K, 5 credits en 4K — un credit más barato en cada nivel que try-on. Los trabajos fallidos se reembolsan automáticamente.
¿Cuál es la diferencia entre el estilo 3D y el flat-lay?
El estilo `3d` mantiene la forma tridimensional del cuerpo del maniquí: la prenda conserva el volumen, los hombros y las mangas se aprecian naturales y el interior se reconstruye. `flat_lay` aplana la prenda en una disposición 2D limpia, ideal para colecciones cápsula o listados de marketplace que esperan una silueta frontal consistente.
¿Puedo procesar varias fotos por lotes?
Sí. Haz POST a `/api/v1/ghost-mannequin/batch` con un array de imágenes de origen. La respuesta te devuelve un batch ID más los IDs de generación individuales. Haz polling a `/api/v1/ghost-mannequin/batch/:id` para un estado agregado o consulta cada elemento por separado.
¿Conserva las costuras y etiquetas interiores?
Sí: el modelo reconstruye el interior de la prenda (el interior del cuello, de los puños o el forro de la cintura) en lugar de alucinar una superficie genérica. Las etiquetas visibles en la foto original se mantienen siempre que sea posible.
¿Cómo hago polling para obtener el resultado?
Haz GET a `/api/v1/ghost-mannequin/:id` cada 3 segundos. Los trabajos por lotes consultan un endpoint padre que devuelve un estado agregado más el desglose por elemento.
Capacidades relacionadas
Capacidades
API de virtual try-on para ropa
API REST que viste maniquíes de IA con prendas. Generación asíncrona de 1.5–4 minutos, 5 créditos en 2K, 6 en 4K. Ejemplos en cURL, Node.js y Python.
Ver el endpointCapacidades
API de try-on de joyas para collares, anillos, pulseras y pendientes
Coloca collares, anillos, pulseras y pendientes en modelos de IA mediante REST. 5 credits en 2K, maniquíes en primer plano integrados y renderizado optimizado para reflejos según la documentación de Photta.
Ver el endpointConstruir
Automatiza la extracción de ghost mannequin para tu catálogo
Receta de automatización nocturna de catálogo: extrae las actualizaciones de productos de ayer, envíalas por lotes a la API de ghost-mannequin de Photta, haz polling del lote principal y persiste los datos en tu base de datos.
Ver el endpointComparar
Photta frente a Pixazo: pipeline propio o agregador de modelos
Comparativa de Photta vs Pixazo: pipeline de moda first-party vs agregador multimodelo. Endpoints, latencia, free tier y trade-offs. Obtenido el 2026-04-19.
Ver el endpointGuía rápida
Tu primera imagen de Photta en menos de cinco minutos.
Regístrate, genera una API key, ejecuta tu primera llamada cURL, haz polling hasta que se complete y guarda el resultado. Cinco pasos, documentados de principio a fin.
Ver el endpointReferencia
Errores de Photta API
La lista completa de tipos de error de Photta API con sus status codes, la estructura del cuerpo de error y qué fallos merece la pena reintentar.
Ver el endpointReferencia
Rate limits de la API de Photta
El rate limit de la API de Photta, su ventana, la cabecera Retry-After, el intervalo de polling y los límites de concurrencia por plan, todo extraído directamente de la documentación de la API.
Ver el endpoint
Cada cifra de esta página proviene de la documentación de la API de Photta · verificado
Prueba la API en cinco minutos
Genera una API key de Photta, pega el snippet de cURL de arriba y tendrás tu primera imagen con modelo antes de que termine de prepararse el café.
- 1.5–4 min
- 4 credits a 2K · 5 credits a 4K
- asíncrono, polling
- 600 requests/min
- Bearer key