Build · Try-on da mobile
Aggiungi il try-on virtuale a un'app iOS o Android
In sintesi
Conserva la chiave API di Photta sul backend; esponi un endpoint proxy (/mobile/try-on) che accetta l'immagine del prodotto e l'ID del manichino, inoltra a /api/v1/tryon/apparel, salva l'ID di generazione associato all'utente ed esponi un endpoint di stato che l'app mobile interroga in polling ogni 3 secondi finché l'immagine non è pronta. Il telefono non deve mai sapere dell'esistenza della chiave di Photta.
- Credits: 5 credits a 2K · 6 credits a 4K
- Tempo tipico: 1.5–4 min
- Elaborazione: asincrono, polling
Ogni dato in questa pagina proviene da la documentazione dell'API di Photta · verificato
Il tuo dispositivo non comunica mai direttamente con Photta: parla con il tuo backend, e il tuo backend parla con Photta. Questo confine è ciò che tiene la tua chiave API lontana dal telefono dell'utente, trasforma i rate limit in un problema esclusivamente tuo e mantiene la tua app approvabile su ogni store.
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"]Come funziona
Dispositivo, backend, Photta — tre livelli, un solo flusso
Cinque decisioni concrete da prendere prima del primo invio ad App Store.
Passaggio 1
Conserva la chiave sul tuo server
Non distribuire la chiave di Photta all'interno del binario dell'app, in info.plist, AndroidManifest o in qualsiasi file env di compilazione: decompilare il binario è banale e la chiave verrebbe compromessa. Il backend è l'unico posto in cui la chiave deve risiedere.
Passaggio 2
Progetta un endpoint proxy pulito
Esponi /mobile/try-on alla tua app. Autentica la richiesta con la sessione del tuo utente: non passare chiavi API non elaborate attraverso il proxy. Il proxy effettuerà poi la chiamata a Photta per conto dell'utente autenticato.
Passaggio 3
Rispecchia lo stato dei job di Photta nel tuo database
Quando Photta restituisce un ID di generazione, inserisci una riga nella tua tabella dei job indicizzata per user_id. La tua app mobile effettuerà il polling sul TUO /mobile/try-on/:id — non su quello di Photta — così i rate limit scaleranno con il TUO piano, non con il dispositivo di ciascun utente.
Passaggio 4
Salva in cache l'URL del risultato
Quando Photta segnala completed, copia output_url nella riga del tuo job e, opzionalmente, scarica i byte sulla tua CDN. Gli utenti mobile pagano per MB: non effettuare hotlinking della CDN di Photta per l'intera durata di una visualizzazione PDP.
Passaggio 5
Gestisci l'offline in modo pulito
Le reti mobili cadono durante il polling. Mostra uno stato di "nuovo tentativo in corso" invece di un errore bloccante, ritenta con backoff esponenziale e mantieni l'ID del job in locale per consentire a un avvio a freddo di ripartire da dove l'ultima sessione era stata interrotta.
Tre livelli di integrazione
Contratto dell'app, proxy del backend, polling lato client: l'esatta separazione di cui hai bisogno.
// 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);
}
}Domande frequenti degli sviluppatori
Rilasciare una funzionalità mobile basata su Photta
Posso chiamare l'API di Photta direttamente dal dispositivo?
Tecnicamente sì, ma dovresti includere la tua chiave API nel pacchetto dell'applicazione, distribuendola così su ogni dispositivo che installa l'app. Instrada le richieste attraverso il tuo backend, così la chiave resterà su un server sotto il tuo controllo.
Come gestisco le reti mobili lente?
In due modi. Primo: invia il job dal backend, non dal dispositivo — dal telefono stai solo caricando un'immagine del prodotto verso la tua API. Secondo: interroga in polling il tuo endpoint di stato a intervalli di 3 secondi con un backoff esponenziale in caso di fallimento. Se l'utente cambia scheda o perde la connessione, memorizza l'ID del job nello storage locale per consentirgli di riprendere quando torna.
Photta supporta i webhook?
No. Il polling è l'unico segnale di completamento offerto dall'API, quindi mantieni il ciclo di polling del worker e invia un server-sent event al telefono nel momento esatto in cui il tuo backend vede il completamento del job.
Posso usare Photta con React Native o Flutter?
Sì — dal lato JavaScript / Dart stai semplicemente chiamando l'API del tuo backend. Nessun dettaglio interno di Photta traspare. Le app Flutter eseguono la fetch di /mobile/try-on allo stesso identico modo di un'app React Native o nativa in SwiftUI / Jetpack Compose.
Il team di revisione di Apple solleva obiezioni su questa integrazione?
No, perché la tua app non chiama Photta. Chiama il tuo backend con la tua autenticazione. Dal punto di vista di Apple, si tratta di una normale app basata su REST. Lo stesso vale per Google Play e Huawei AppGallery.
Pagine correlate
Riferimento
Funzionalità
API di Virtual try-on per abbigliamento
REST API per applicare capi di abbigliamento su manichini AI. Generazione asincrona in 1.5–4 minuti, 5 crediti a 2K, 6 a 4K. Esempi per cURL, Node.js e Python.
LeggiGuida rapida
La prima immagine con Photta in meno di cinque minuti.
Registrati, genera una chiave API, esegui la tua prima chiamata cURL, fai polling fino al completamento, salva il risultato. Cinque passaggi, interamente documentati.
LeggiLinguaggi
Node.js walkthrough
Leggi
Ogni dato in questa pagina proviene da la documentazione dell'API di Photta · verificato
Rilascia il try-on virtuale nella tua prossima versione dell'app
Tre livelli leggeri, zero impronta di SDK sul dispositivo. Prendi una chiave API e configura il proxy in un pomeriggio.