Bắt đầu nhanh

Tạo ảnh Photta đầu tiên trong vòng chưa đầy năm phút.

Tóm tắt trong một câu

Đăng ký tại ai.photta.app, nhấn Generate API key, export key dưới dạng PHOTTA_API_KEY, POST tới /api/v1/tryon/apparel và polling ID tạo ảnh trả về mỗi 3 giây cho đến khi status chuyển sang completed — thường trong vòng 1.5 đến 4 phút.

  • Xác thực: Bearer key
  • Xử lý: async, polling
  • Giới hạn: 600 requests/min

Mọi số liệu trên trang này đều lấy từ tài liệu Photta API · đã kiểm tra

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

Cơ chế hoạt động

Năm lệnh từ con số không đến ảnh đầu tiên

Paste tuần tự từng lệnh vào terminal. Mỗi đoạn code đều độc lập và chỉ dùng curl + jq.

  1. Bước 1

    Tạo một API key

    Đăng ký tại ai.photta.app và mở dashboard Developers. Nhấn Generate API key — live key sẽ bắt đầu bằng photta_live_. Export key để phần hướng dẫn tiếp theo có thể đọc được từ shell của bạn.

    # 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. Bước 2

    POST lượt try-on đầu tiên của bạn

    Gửi request tới /api/v1/tryon/apparel kèm URL ảnh sản phẩm và mannequin ID. API sẽ phản hồi 202 Accepted ngay lập tức và trả về generation ID trong 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. Bước 3

    Polling cho đến khi hoàn thành

    GET /api/v1/tryon/apparel/:id mỗi 3 giây một lần. Thời gian hoàn thành thông thường là 1.5–4 phút. Đặt giới hạn số lần thử để tác vụ bị kẹt không làm treo script của bạn vô thời hạn.

    # $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. Bước 4

    Lưu trữ dữ liệu đầu ra

    Khi status chuyển sang completed, data.output_url sẽ chứa hình ảnh đã kết xuất. Hãy tải các byte dữ liệu này về bộ lưu trữ của riêng bạn để sản phẩm của bạn không bị phụ thuộc vào CDN của Photta khi kết xuất.

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

    Xử lý thỏa đáng các trường hợp lỗi

    Rẽ nhánh xử lý dựa trên HTTP status code: 402 cho lỗi không đủ credits, 429 khi vượt rate limits (tuân thủ Retry-After), 5xx cho các lỗi máy chủ tạm thời. Mỗi thân phản hồi lỗi đều chứa error.code dưới định dạng máy có thể đọc được để bạn xử lý theo chương trình.

    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

Câu hỏi thường gặp từ developer

Câu hỏi thường gặp khi mới bắt đầu

Quá trình quickstart mất bao lâu?

Năm phút cho các bước đăng ký + tạo key + chạy lệnh cURL đầu tiên. Quá trình tạo ảnh mất từ 1.5 đến 4 phút, vì vậy hãy dự trù mười phút tính theo thời gian thực trước khi bạn thấy hình ảnh người mẫu mặc trang phục đầu tiên.

Tôi có cần thẻ tín dụng để dùng thử không?

Các tài khoản mới đều có sẵn credits dùng thử để bạn trải nghiệm trước khi thanh toán. Khi bạn sẵn sàng triển khai lên production, hãy đăng ký một gói dịch vụ để nhận số dư credit hàng tháng cao hơn và rate limits nhanh hơn.

Tôi nên thử endpoint nào trước?

Apparel try-on (/api/v1/tryon/apparel) — đây là endpoint được dùng phổ biến nhất, tài liệu chi tiết nhất và bao quát toàn bộ mô hình async + polling mà mọi endpoint khác của Photta đều tái sử dụng. Khi bạn đã quen thuộc với endpoint này, tính năng jewelry và ghost mannequin cũng hoạt động theo cách tương tự.

Tôi có thể gọi API trực tiếp từ trình duyệt không?

Không. API key của bạn phải được lưu trữ an toàn ở phía server — việc đưa key xuống trình duyệt sẽ làm lộ key cho bất kỳ ai truy cập. Hãy định tuyến các lượt gọi qua một proxy mỏng trên backend của bạn (Next.js route handler, Express, Flask, Lambda) và để trình duyệt giao tiếp với proxy này.

Các trang liên quan

Mọi số liệu trên trang này đều lấy từ tài liệu Photta API · đã kiểm tra

Bạn chỉ còn cách hình ảnh đầu tiên năm phút

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