Construir · Mobile Try-On
Añade virtual try-on a una app iOS o Android
En una frase
Mantén la API key de Photta en tu backend; expón un proxy endpoint (/mobile/try-on) que acepte la imagen del producto y el mannequin ID, reenvíe a /api/v1/tryon/apparel, guarde el ID de generación asociado al usuario y exponga un endpoint de estado que la app móvil consulte mediante polling cada 3 segundos hasta que la imagen esté lista. El teléfono nunca se entera de que la clave de Photta existe.
- Credits: 5 credits a 2K · 6 credits a 4K
- Tiempo típico: 1.5–4 min
- Procesamiento: asíncrono, polling
Cada cifra de esta página proviene de la documentación de la API de Photta · verificado
Tu dispositivo nunca se comunica directamente con Photta — se comunica con tu backend, y tu backend se comunica con Photta. Ese límite es lo que mantiene tu API key fuera del teléfono del usuario, tus rate limits bajo tu propio control y tu app aprobable en cualquier tienda.
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/tryon/apparel \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')const res = await fetch("https://api.photta.app/api/v1/tryon/apparel", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}),
});
const { data } = await res.json(); // data.id, data.statusimport os, requests
res = requests.post(
"https://api.photta.app/api/v1/tryon/apparel",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": True,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
},
)
data = res.json()["data"] # data["id"], data["status"]Cómo funciona
Dispositivo, backend, Photta — tres capas, un solo flujo
Cinco decisiones concretas que debes tomar antes del primer envío a la App Store.
Paso 1
Mantén la clave en tu servidor
No incluyas la clave de Photta dentro del binario de tu app, info.plist, AndroidManifest ni en ningún archivo de entorno en tiempo de compilación — decompilar el binario es trivial y la clave se filtrará. Tu backend es el único lugar donde debe residir la clave.
Paso 2
Diseña un proxy endpoint limpio
Expón /mobile/try-on a tu app. Autentica la solicitud con tu propia sesión de usuario — no pases API keys en crudo a través del proxy. El proxy luego llamará a Photta en nombre del usuario autenticado.
Paso 3
Replica el estado del trabajo de Photta en tu base de datos
Cuando Photta devuelva un ID de generación, inserta una fila en tu propia tabla de trabajos indexada por user_id. Tu app móvil hace polling a TU /mobile/try-on/:id — no al de Photta —, de modo que los rate limits escalan con TU plan, no con el dispositivo de cada usuario.
Paso 4
Almacena en caché la URL del resultado
Cuando Photta reporte completed, copia output_url en tu fila de trabajos y, opcionalmente, descarga los bytes en tu propia CDN. Los usuarios móviles pagan por MB — no enlaces directamente a la CDN de Photta durante toda la vida útil de una impresión de PDP.
Paso 5
Gestiona el modo sin conexión de forma elegante
Las redes móviles se caen a mitad del polling. Muestra un estado de 'reintentando' en lugar de un error crítico, reintenta con retroceso exponencial y persiste el ID del trabajo localmente para que un inicio en frío continúe donde se quedó la última sesión.
Tres capas de la integración
Contrato de la app, proxy en el backend, polling del lado del cliente — exactamente el límite que necesitas.
// Never ship your PHOTTA_API_KEY to the device. The mobile app
// calls YOUR API; your API calls Photta. Simple, safe, billable.
POST /mobile/try-on
{
"productImageUrl": "...",
"mannequinId": "...",
"poseId": "..."
}
// → returns { jobId } immediatelyconst res = await fetch("https://api.photta.app/api/v1/tryon/apparel", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}),
});
const { data } = await res.json(); // data.id, data.status// Store { id: data.id, user_id, status: "processing" } in your jobs table
// and return { jobId: data.id } to the device.
// App polls YOUR /mobile/try-on/:id — you poll Photta server-side
// and mirror status. This way rate limits are YOUR problem, not
// each device's, and you can add caching + analytics in one place.
async function pollJob(jobId: string) {
while (true) {
const { status, imageUrl } = await api.get(`/mobile/try-on/${jobId}`);
if (status === "completed") return imageUrl;
if (status === "failed") throw new Error("Try-on failed");
await sleep(3000);
}
}Preguntas frecuentes de desarrolladores
Lanzar una funcionalidad móvil impulsada por Photta
¿Puedo llamar a la API de Photta directamente desde el dispositivo?
Técnicamente sí — pero tendrías que incluir tu API key dentro del paquete de la app, lo que expone tu clave a cada dispositivo que la instale. Enruta a través de tu propio backend para que la clave permanezca en un servidor bajo tu control.
¿Cómo gestiono las redes móviles lentas?
Dos cosas. Primero: envía el trabajo desde el backend, no desde el dispositivo — solo estás subiendo la imagen de un producto desde el teléfono a tu propia API. Segundo: haz polling a tu propio endpoint de estado en intervalos de 3 segundos con retroceso exponencial en caso de fallo. Si el usuario cambia de pestaña o pierde la señal, persiste el ID del trabajo en el almacenamiento local para que pueda retomarlo al volver.
¿Admite Photta webhooks?
No. El polling es la única señal de finalización que ofrece la API, así que mantén el bucle del worker — y envía un server-sent event al teléfono en el momento en que tu propio backend detecte que el trabajo ha terminado.
¿Puedo usar Photta con React Native o Flutter?
Sí — desde el lado de JavaScript / Dart solo estás llamando a la API de tu propio backend. Ningún detalle específico de Photta se filtra. Las apps de Flutter hacen fetch a /mobile/try-on de la misma forma que lo hace una app en React Native o nativa con SwiftUI / Jetpack Compose.
¿Le importa esta integración al equipo de revisión de Apple?
No — porque tu app no está llamando a Photta. Está llamando a tu propio backend con tu propia autenticación. Desde la perspectiva de Apple, eres una app estándar respaldada por una API REST. Lo mismo aplica a Google Play y Huawei AppGallery.
Páginas relacionadas
Referencia
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.
LeerGuí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.
LeerLenguajes
Node.js walkthrough
Leer
Cada cifra de esta página proviene de la documentación de la API de Photta · verificado
Lanza virtual try-on en tu próxima versión de la app
Tres capas delgadas, cero impacto de SDK en el dispositivo. Obtén una API key y conecta el proxy en una tarde.