Panduan Cepat

Gambar Photta pertama dalam waktu kurang dari lima menit.

Ringkasan singkat

Daftar di ai.photta.app, klik Generate API key, ekspor sebagai PHOTTA_API_KEY, lakukan POST ke /api/v1/tryon/apparel dan lakukan polling pada ID generasi yang dikembalikan setiap 3 detik hingga status berubah menjadi completed — biasanya dalam 1.5 hingga 4 menit.

  • Autentikasi: Bearer key
  • Pemrosesan: async, polling
  • Batasan: 600 requests/min

Setiap angka di halaman ini bersumber dari dokumentasi API Photta · diperiksa

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')

Cara kerja

Lima perintah dari nol hingga gambar pertama

Tempelkan ke terminal secara berurutan. Setiap snippet berdiri sendiri dan hanya menggunakan curl + jq.

  1. Langkah 1

    Buat API key

    Daftar di ai.photta.app dan buka dashboard Developers. Klik Generate API key — key live dimulai dengan photta_live_. Ekspor key tersebut agar bagian panduan selanjutnya dapat membacanya dari shell Anda.

    # https://ai.photta.app → Developers → Generate API key
    export PHOTTA_API_KEY="photta_live_xxxxx"
    export PHOTTA_BASE_URL="https://api.photta.app/api/v1"
  2. Langkah 2

    POST try-on pertama Anda

    Kirim request ke /api/v1/tryon/apparel dengan URL gambar produk dan mannequin ID. API akan segera merespons 202 Accepted dan mengembalikan ID generasi di data.id.

    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')
  3. Langkah 3

    Lakukan polling hingga selesai

    GET /api/v1/tryon/apparel/:id setiap 3 detik. Waktu penyelesaian tipikal adalah 1.5–4 menit. Berikan batas atas percobaan agar job yang macet tidak menggantung script Anda selamanya.

    # $ID is data.id from the POST response. Poll every 3 seconds until status is "completed" or "failed".
    for i in $(seq 1 120); do
      RESULT=$(curl -s "https://api.photta.app/api/v1/tryon/apparel/$ID" -H "Authorization: Bearer $PHOTTA_API_KEY")
      STATUS=$(echo "$RESULT" | jq -r '.data.status')
      [ "$STATUS" = "completed" ] && break
      [ "$STATUS" = "failed" ] && echo "generation failed" && exit 1
      sleep 3
    done
    echo "$RESULT" | jq -r '.data.output_url'
  4. Langkah 4

    Simpan output secara permanen

    Saat status berubah menjadi completed, data.output_url memuat gambar hasil render. Unduh byte tersebut ke storage Anda sendiri agar produk Anda tidak bergantung pada CDN Photta untuk rendering.

    OUTPUT_URL=$(echo "$RESULT" | jq -r '.data.output_url')
    curl -sO "$OUTPUT_URL"
    echo "Saved $(basename "$OUTPUT_URL")"
  5. Langkah 5

    Tangani skenario kegagalan secara transparan

    Buat percabangan berdasarkan kode status HTTP: 402 untuk credits tidak mencukupi, 429 untuk rate limit (patuhi Retry-After), 5xx untuk error server sementara. Setiap body error memuat error.code yang terbaca mesin untuk ditindaklanjuti.

    case "$STATUS_CODE" in
      402) echo "insufficient_credits_error — top up before retrying" ;;
      429) echo "rate_limit_error — wait the Retry-After seconds (30 by default)" ;;
      4??) echo "$BODY" | jq '.error.type, .error.message' ;;
      5??) echo "api_error — retry with backoff" ;;
    esac

Pertanyaan umum developer

Pertanyaan seputar memulai

Berapa lama proses quickstart berlangsung?

Lima menit untuk pendaftaran + pembuatan key + cURL pertama. Proses generasinya sendiri membutuhkan 1.5 hingga 4 menit, jadi alokasikan waktu sepuluh menit sebelum Anda melihat gambar on-model pertama Anda.

Apakah saya memerlukan kartu kredit untuk mencobanya?

Akun baru dilengkapi dengan credits uji coba yang dapat Anda gunakan sebelum membayar. Saat siap masuk ke tahap produksi, berlanggananlah ke suatu paket untuk mendapatkan saldo credits bulanan yang lebih tinggi dan rate limit yang lebih cepat.

Endpoint mana yang harus saya coba terlebih dahulu?

Apparel try-on (/api/v1/tryon/apparel) — ini yang paling banyak digunakan, dokumentasinya paling lengkap, dan mencakup pola async + polling yang digunakan kembali oleh setiap endpoint Photta lainnya. Setelah terbiasa di sana, perhiasan dan ghost mannequin bekerja dengan cara yang sama.

Bisakah saya menjalankannya dari browser?

Tidak. API key Anda harus tetap berada di sisi server — mengirimkannya ke browser akan membocorkannya ke setiap pengunjung. Rute panggilan melalui proxy tipis di backend Anda sendiri (Next.js route handler, Express, Flask, Lambda) dan biarkan browser berkomunikasi dengan proxy Anda.

Halaman terkait

Setiap angka di halaman ini bersumber dari dokumentasi API Photta · diperiksa

Anda hanya berjarak lima menit dari gambar pertama Anda

  • Bearer key
  • async, polling
  • 600 requests/min