Bangun · Try-On Seluler
Tambahkan virtual try-on ke aplikasi iOS atau Android
Ringkasan singkat
Simpan Photta API key di backend Anda; sediakan endpoint proxy (/mobile/try-on) yang menerima gambar produk dan ID manekin, meneruskannya ke /api/v1/tryon/apparel, menyimpan ID pembuatan berdasarkan pengguna, dan menyediakan endpoint status yang di-polling oleh aplikasi seluler setiap 3 detik hingga gambar siap. Ponsel tidak akan pernah mengetahui keberadaan key Photta.
- Credits: 5 credits pada 2K · 6 credits pada 4K
- Waktu umum: 1.5–4 min
- Pemrosesan: async, polling
Setiap angka di halaman ini bersumber dari dokumentasi API Photta · diperiksa
Perangkat Anda tidak pernah berkomunikasi langsung dengan Photta — perangkat berbicara ke backend Anda, dan backend Anda berbicara ke Photta. Batasan itulah yang menjaga API key Anda tidak berada di ponsel pengguna, menjadikan rate limit sebagai urusan Anda sendiri, dan membuat aplikasi Anda lolos review di setiap toko aplikasi.
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"]Cara kerja
Perangkat, backend, Photta — tiga tier, satu alur
Lima keputusan konkret yang perlu Anda buat sebelum pengajuan pertama ke App Store.
Langkah 1
Simpan key di server Anda
Jangan sertakan key Photta di dalam biner aplikasi Anda, info.plist, AndroidManifest, atau file env build-time apa pun — mendekompilasi biner itu sangat mudah dan key akan bocor. Backend Anda adalah satu-satunya tempat key tersebut berada.
Langkah 2
Rancang endpoint proxy yang rapi
Sediakan /mobile/try-on untuk aplikasi Anda. Autentikasi request dengan sesi pengguna Anda sendiri — jangan meneruskan API key mentah melalui proxy. Proxy kemudian memanggil Photta atas nama pengguna yang terautentikasi.
Langkah 3
Mirror status job Photta di database Anda
Saat Photta mengembalikan ID pembuatan, masukkan baris baru ke dalam tabel jobs Anda sendiri dengan kunci user_id. Aplikasi seluler Anda melakukan polling ke /mobile/try-on/:id MILIK ANDA — bukan milik Photta — sehingga rate limit berskala mengikuti paket ANDA, bukan perangkat masing-masing pengguna.
Langkah 4
Cache URL hasil
Saat Photta melaporkan completed, salin output_url ke baris jobs Anda dan secara opsional unduh byte-nya ke CDN Anda sendiri. Pengguna seluler membayar per MB — jangan melakukan hot-link ke CDN Photta selama masa tayang impresi PDP.
Langkah 5
Tangani kondisi offline dengan baik
Jaringan seluler sering terputus di tengah-tengah polling. Tampilkan status 'mencoba lagi' alih-alih hard error, lakukan percobaan ulang dengan exponential backoff, dan simpan ID job secara lokal sehingga proses cold-start dapat melanjutkan sesi terakhir yang terputus.
Tiga lapisan integrasi
Kontrak aplikasi, proxy backend, polling sisi klien — batasan tepat yang Anda butuhkan.
// 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);
}
}Pertanyaan umum developer
Merilis fitur seluler bertenaga Photta
Bisakah saya memanggil Photta API langsung dari perangkat?
Secara teknis bisa — tetapi Anda harus menyertakan API key di dalam bundle aplikasi, yang berarti mendistribusikan key Anda ke setiap perangkat yang memasang aplikasi tersebut. Rutekan melalui backend Anda sendiri agar key tetap berada di server yang Anda kendalikan.
Bagaimana cara menangani jaringan seluler yang lambat?
Dua hal. Pertama: kirimkan job dari backend, bukan dari perangkat — Anda hanya perlu mengunggah gambar produk dari ponsel ke API Anda sendiri. Kedua: lakukan polling ke endpoint status Anda sendiri dengan interval 3 detik dan exponential backoff jika terjadi kegagalan. Jika pengguna berpindah tab atau kehilangan sinyal, simpan ID job di penyimpanan lokal agar mereka dapat melanjutkannya saat kembali.
Apakah Photta mendukung webhook?
Tidak. Polling adalah satu-satunya sinyal penyelesaian yang disediakan API, jadi pertahankan loop worker — dan kirimkan server-sent event ke ponsel begitu backend Anda mendeteksi job telah selesai.
Bisakah saya menggunakan Photta dengan React Native atau Flutter?
Bisa — dari sisi JavaScript / Dart, Anda hanya memanggil API backend Anda sendiri. Tidak ada detail teknis spesifik Photta yang bocor ke klien. Aplikasi Flutter melakukan fetch ke /mobile/try-on dengan cara yang sama persis seperti yang dilakukan aplikasi React Native atau native SwiftUI / Jetpack Compose.
Apakah tim review Apple mempermasalahkan integrasi ini?
Tidak — karena aplikasi Anda tidak memanggil Photta secara langsung. Aplikasi Anda memanggil backend Anda sendiri dengan autentikasi Anda sendiri. Dari sudut pandang Apple, aplikasi Anda adalah aplikasi standar berbasis REST. Hal yang sama berlaku untuk Google Play dan Huawei AppGallery.
Halaman terkait
Referensi
Kapabilitas
Virtual try-on API untuk pakaian
REST API yang memakaikan pakaian pada manekin AI. Asinkron, waktu generasi 1.5–4 menit, 5 credits pada 2K, 6 pada 4K. Contoh cURL, Node.js, dan Python.
BacaQuickstart
Gambar Photta pertama dalam waktu kurang dari lima menit.
Daftar, buat API key, jalankan pemanggilan cURL pertama Anda, lakukan polling hingga selesai, simpan hasilnya. Lima langkah, terdokumentasi end-to-end.
BacaBahasa
Node.js walkthrough
Baca
Setiap angka di halaman ini bersumber dari dokumentasi API Photta · diperiksa
Rilis virtual try-on di versi rilis aplikasi Anda berikutnya
Tiga lapisan tipis, tanpa jejak SDK sama sekali di perangkat. Ambil API key dan hubungkan proxy-nya hanya dalam waktu satu siang.