Bygg · Virtuell try-on for mobil
Legg til virtuell try-on i en iOS- eller Android-app
I én setning
Hold Photta-API-nøkkelen på backend-en din; eksponer et proxy-endpoint (/mobile/try-on) som tar imot produktbildet og mannequin-ID, videresender til /api/v1/tryon/apparel, lagrer genererings-ID-en knyttet til brukeren, og eksponerer et status-endpoint som mobilappen poller hvert 3. sekund til bildet er klart. Telefonen får aldri vite at Photta-nøkkelen eksisterer.
- Credits: 5 credits ved 2K · 6 credits ved 4K
- Typisk tidsbruk: 1.5–4 min
- Prosessering: asynkron, polling
Hvert tall på denne siden er hentet fra dokumentasjonen for Photta-API-et · verifisert
Enheten din kommuniserer aldri direkte med Photta — den snakker med backend-en din, og backend-en din snakker med Photta. Det er dette skillet som sørger for at API-nøkkelen din ikke havner på brukerens telefon, at rate limits forblir ditt eget problem, og at appen godkjennes i alle app-butikker.
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"]Slik fungerer det
Enhet, backend, Photta — tre lag, én flyt
Fem konkrete beslutninger du må ta før første innsending til App Store.
Trinn 1
Hold nøkkelen på serveren din
Ikke inkluder Photta-nøkkelen i app-binæren, info.plist, AndroidManifest eller i noen env-filer under bygging — det er trivielt å dekompilere binæren, og nøkkelen vil lekke. Backend-en din er det eneste stedet nøkkelen skal ligge.
Trinn 2
Design et rent proxy-endpoint
Eksponer /mobile/try-on for appen din. Autentiser forespørselen med din egen brukersesjon — ikke send rå API-nøkler gjennom proxyen. Proxyen kaller deretter Photta på vegne av den autentiserte brukeren.
Trinn 3
Speil Phottas jobbstatus i databasen din
Når Photta returnerer en genererings-ID, setter du inn en rad i din egen jobb-tabell med user_id som nøkkel. Mobilappen poller DITT /mobile/try-on/:id — ikke Phottas — slik at rate limits skalerer med DIN plan, ikke med hver enkelt brukers enhet.
Trinn 4
Mellomlagre resultat-URL-en
Når Photta rapporterer completed, kopierer du output_url inn i jobb-raden din og laster eventuelt ned bytene til ditt eget CDN. Mobilbrukere betaler per MB — ikke hotlink Photta-CDN-et for hele levetiden til en PDP-visning.
Trinn 5
Håndter frakoblet tilstand elegant
Mobilnettverk faller ut midt under polling. Vis en «prøver igjen»-tilstand i stedet for en hard feil, prøv på nytt med eksponensiell backoff, og lagre jobb-ID-en lokalt slik at en kaldstart fortsetter der forrige økt slapp.
Integrasjonens tre lag
App-kontrakt, backend-proxy, polling på klientsiden — nøyaktig det skillet du trenger.
// 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);
}
}Spørsmål utviklere stiller
Levere en Photta-drevet mobilfunksjon
Kan jeg kalle Photta-API-et direkte fra enheten?
Teknisk sett ja — men da måtte du ha inkludert API-nøkkelen i app-pakken, noe som sender nøkkelen din til hver eneste enhet som installerer appen. Rute gjennom din egen backend slik at nøkkelen forblir på en server du kontrollerer.
Hvordan håndterer jeg trege mobilnettverk?
To ting. Én: send inn jobben fra backend, ikke fra enheten — du laster bare opp et produktbilde fra telefonen til ditt eget API. To: poll ditt eget status-endpoint med 3-sekunders intervaller og eksponensiell backoff ved feil. Hvis brukeren bytter fane eller mister dekningen, lagrer du jobb-ID-en i lokal lagring slik at de kan fortsette når de kommer tilbake.
Støtter Photta webhooks?
Nei. Polling er det eneste fullføringssignalet API-et tilbyr, så behold worker-løkken — og send et server-sent event til telefonen i samme øyeblikk som din egen backend ser at jobben er fullført.
Kan jeg bruke Photta med React Native eller Flutter?
Ja — fra JavaScript- eller Dart-siden kaller du bare ditt eget backend-API. Ingen av Phottas særegenheter lekker igjennom. Flutter-apper kaller /mobile/try-on på nøyaktig samme måte som en React Native- eller nativ SwiftUI- / Jetpack Compose-app gjør det.
Bryr Apples vurderingsteam seg om denne integrasjonen?
Nei — fordi appen din ikke kaller Photta. Den kaller din egen backend med din egen autentisering. Fra Apples perspektiv er du en helt vanlig app med REST-backend. Det samme gjelder for Google Play og Huawei AppGallery.
Relaterte sider
Referanse
Funksjoner
Virtuell try-on API for klær
REST API som plasserer klær på AI-mannequiner. Asynkront, 1,5–4 minutters generering, 5 credits i 2K, 6 i 4K. Eksempler for cURL, Node.js og Python.
LesHurtigstart
Første Photta-bilde på under fem minutter.
Registrer deg, generer en API-nøkkel, kjør ditt første cURL-kall, utfør polling til det er fullført, lagre resultatet. Fem trinn, dokumentert fra start til slutt.
LesSpråk
Node.js walkthrough
Les
Hvert tall på denne siden er hentet fra dokumentasjonen for Photta-API-et · verifisert
Lever virtuell try-on i neste app-utrulling
Tre tynne lag, null SDK-fotavtrykk på enheten. Skaff deg en API-nøkkel og koble opp proxyen på en ettermiddag.