cURL · Virtuel try-on API

Virtuel try-on API med cURL

I én sætning

Eksportér PHOTTA_API_KEY, send en POST til https://api.photta.app/api/v1/api/v1/tryon/apparel med den dokumenterede JSON-body, opsnap genererings-ID'et, og kør derefter et GET-loop på /api/v1/tryon/apparel/{id} hvert 3. sekund, indtil data.status er completed. Kombinér med jq for at udtrække output-URL'en.

  • Typisk tid: 1.5–4 min
  • Credits: 5 credits ved 2K · 6 credits ved 4K
  • Behandling: async, polling
  • Grænser: 600 requests/min
  • Autentifikation: Bearer key

Hvert tal på denne side stammer fra Photta API-dokumentationen · tjekket

POST/api/v1/tryon/apparel
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')

# $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'

Kort fortalt

Kort fortalt

Endpoint
POST /api/v1/tryon/apparel
Autentifikation
Bearer API-nøgle
Behandling
Asynkron — poll status-endpointet
Typisk tid
1.5–4 min
Credits
5 credits ved 2K · 6 credits ved 4K
Billedformater
3:4 · 1:1 · 4:3 · 9:16 · 16:9
Inputgrænser
Op til 10 MB pr. billede; JPEG, PNG, WebP
Idempotent
Nej

Sådan virker det

Fem shell-trin, nul afhængigheder ud over curl og jq.

  1. Trin 1

    Opret en konto og generér en nøgle

    Gå til ai.photta.app, åbn fanen Developers, og klik på Generate API key. Live-nøgler starter med `photta_live_`.

  2. Trin 2

    Eksportér nøglen

    Tilføj `export PHOTTA_API_KEY="photta_live_xxx"` i din shell-profil eller en `.envrc`-fil, så hvert efterfølgende curl-kald automatisk samler den op.

    curl --version   # macOS, Linux, WSL and Windows 10+ ship it
    export PHOTTA_API_KEY="photta_live_xxxxx"
  3. Trin 3

    Fastlås base-URL'en

    `export PHOTTA_BASE_URL="https://api.photta.app/api/v1"` holder curl-kommandoerne korte.

    export PHOTTA_BASE_URL="https://api.photta.app/api/v1"
    export AUTH_HEADER="Authorization: Bearer $PHOTTA_API_KEY"
  4. Trin 4

    Indsend og foretag polling

    Lav en POST til `$PHOTTA_BASE_URL/api/v1/tryon/apparel` for at hente et ID, og kør derefter et loop med `curl $PHOTTA_BASE_URL/api/v1/tryon/apparel/{id}` hvert 3. sekund. Send svaret videre til jq for at udtrække `.data.status` rent.

    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')
    
    # $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'
  5. Trin 5

    Gem resultatet

    Når jobbet er færdigt, trækker du `.data.output_url` ud med jq og kører `curl -o` for at gemme bytes på lokalt lager — klar til næste trin i din pipeline.

Fejl

400invalid_request_error
The request is malformed or contains invalid parameters.
401authentication_error
The API key is missing, invalid, or expired.
402insufficient_credits_error
Your account does not have enough credits.
404not_found_error
The requested resource does not exist.
409conflict_error
The request conflicts with current state — e.g. your concurrent-batch cap is reached.
429rate_limit_error
Too many requests. Slow down and retry.Retry-After: 30
500api_error
An internal server error occurred. Retry later.
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

Grænser

  • 600 anmodninger i minuttet pr. API-nøgle (Fast vindue; grænsen er den samme på alle planer)
  • En 429 indeholder Retry-After: 30 sekunder
  • Op til 10 MB pr. billede
  • Formater: JPEG, PNG, WebP
  • Samtidige batches pr. plan: Free 1 · Hobby 2 · Seller 3 · Brand 4 · Studio 6
  • Kun polling — API'et sender ingen webhooks.

Hvorfor cURL stadig er den hurtigste måde at teste en API på

  • Nul installation — cURL følger med alle større operativsystemer
  • Fungerer perfekt med jq til scriptede pipelines (CI, cron, shell hooks)
  • Den hurtigste måde at smoke-teste et endpoint på, før du integrerer det i koden
  • Hver kommando på denne side kan indsættes direkte i enhver POSIX-shell

Hvad det ikke gør

  • Polling-loopet blokerer terminalen — skift til Node eller Python for parallelle workers
  • Polling er det eneste signal om fuldførelse; API'et sender ingen webhooks
  • Brugere af Windows Command Prompt bør køre WSL eller PowerShells curl.exe

Spørgsmål udviklere stiller

Findes der et Photta CLI-værktøj?

Ikke endnu — men cURL plus en bash-wrapper på femten linjer bringer dig det meste af vejen. Dokumentationen prioriterer cURL-først-eksempler, fordi alle sprog kan køre en subprocess, og shellen er den fælles nævner i CI-pipelines.

Behøver jeg jq for at bruge API'et?

Ikke strengt taget — men scriptede pipelines er meget nemmere med det. Med jq kan du trække `.data.id`, `.data.status` og `.data.output_url` ud af JSON-svaret uden at parse det manuelt. Installer med `brew install jq` på macOS eller `apt install jq` på Debian/Ubuntu.

Hvordan autentificerer jeg med curl?

Tilføj `-H "Authorization: Bearer $PHOTTA_API_KEY"` til hver forespørgsel. Gem nøglen i en miljøvariabel, og indsæt den aldrig direkte i et script, du committer. `curl --oauth2-bearer` fungerer også, men den eksplicitte header-form er tydeligere i dokumentation og logs.

Kan jeg bruge curl-baserede scripts i produktion?

Til enkeltstående batch-backfills og cron-jobs, ja — tusindvis af teams leverer katalog-backfills på denne måde. Til en langtidsholdbar applikation er et rigtigt programmeringssprog normalt bedre, da du får ordentlig fejlhåndtering, genforsøg og observerbarhed. curl-eksemplerne på denne side forbliver retvisende, selv efter du porterer til Node eller Python; forespørgslens struktur er den samme.

Hvordan poller jeg fra et bash-loop?

Brug `for i in $(seq 1 120); do … ; sleep 3; done` med status-tjekket i loopets krop. Afbryd, når `.data.status` er `completed` eller `failed`. Kodeeksemplet på denne side viser det præcise mønster, inklusive en hård øvre grænse, så et fastlåst job ikke blokerer scriptet for evigt.

Hvordan læser jeg fejlsvar i curl?

Brug `curl -w "\n%{http_code}"` til at hente HTTP-statuskoden sammen med JSON-bodyen. Forgren baseret på statussen: 402 for utilstrækkelige credits, 429 for rate limits (respekter Retry-After-værdien), 5xx for midlertidige serverfejl. Fejl-bodyen indeholder altid felterne `error.code` og `error.message`.

Relaterede sider

Hvert tal på denne side stammer fra Photta API-dokumentationen · tjekket

Prøv API'et på fem minutter

Generér en Photta API-nøgle, indsæt cURL-kodestykket ovenfor, og du har dit første billede på en model, før kaffen er færdigbrygget.

  • 1.5–4 min
  • 5 credits ved 2K · 6 credits ved 4K
  • async, polling
  • 600 requests/min
  • Bearer key