Quickstart

Eerste Photta-afbeelding in minder dan vijf minuten.

In één zin

Registreer je op ai.photta.app, klik op Generate API key, exporteer deze als PHOTTA_API_KEY, POST naar /api/v1/tryon/apparel en poll het geretourneerde generation-ID elke 3 seconden totdat de status overgaat naar completed — doorgaans binnen 1.5 tot 4 minuten.

  • Authenticatie: Bearer key
  • Verwerking: async, polling
  • Limieten: 600 requests/min

Elk getal op deze pagina is afkomstig uit de Photta-API-documentatie · gecontroleerd

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

Hoe het werkt

Vijf commando's van nul naar de eerste afbeelding

Plak ze op volgorde in een terminal. Elk fragment is op zichzelf staand en gebruikt alleen curl + jq.

  1. Stap 1

    Genereer een API-sleutel

    Registreer je op ai.photta.app en open het Developers-dashboard. Klik op Generate API key — live-sleutels beginnen met photta_live_. Exporteer deze zodat de rest van de handleiding hem vanuit je shell kan uitlezen.

    # 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. Stap 2

    POST je eerste try-on

    Roep /api/v1/tryon/apparel aan met een URL van een productafbeelding en een mannequin ID. De API antwoordt onmiddellijk met 202 Accepted en retourneert een generation-ID in 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. Stap 3

    Poll totdat het voltooid is

    GET /api/v1/tryon/apparel/:id elke 3 seconden. Een typische verwerking duurt 1.5–4 minuten. Stel een limiet in op het aantal pogingen, zodat een vastgelopen taak je script niet oneindig blokkeert.

    # $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. Stap 4

    Sla de output persistent op

    Wanneer status verandert in completed, bevat data.output_url de gegenereerde afbeelding. Download de bytes naar je eigen storage, zodat je product voor het renderen niet afhankelijk is van het CDN van Photta.

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

    Handel foutmodi op de juiste manier af

    Vertak op basis van de HTTP-statuscode: 402 voor onvoldoende credits, 429 voor rate limits (respecteer Retry-After), 5xx voor tijdelijke serverfouten. Elke error-body bevat een machineleesbare error.code waar je logica op kunt baseren.

    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

Veelgestelde vragen van developers

Vragen over aan de slag gaan

Hoe lang duurt de quickstart?

Vijf minuten voor registratie + key genereren + eerste cURL. De generatie zelf duurt 1.5 tot 4 minuten, dus reken op tien minuten totale tijd voordat je je eerste on-model afbeelding ziet.

Heb ik een creditcard nodig om het te proberen?

Nieuwe accounts worden geleverd met trial credits die je kunt gebruiken voordat je betaalt. Wanneer je klaar bent voor productie, neem je een abonnement voor een hoger maandelijks credits-saldo en ruimere rate limits.

Welk endpoint moet ik als eerste proberen?

Apparel try-on (/api/v1/tryon/apparel) — dit is het meest gebruikt, de documentatie is het compleetst, en het volgt het async + polling-patroon dat elk ander Photta-endpoint hergebruikt. Zodra je dat onder de knie hebt, werken jewelry en ghost mannequin op precies dezelfde manier.

Kan ik het aanroepen vanuit de browser?

Nee. Je API-key moet server-side blijven — als je deze naar een browser stuurt, lekt hij naar elke bezoeker. Leid calls via een thin proxy op je eigen backend (Next.js route handler, Express, Flask, Lambda) en laat de browser communiceren met jouw proxy.

Gerelateerde pagina's

Elk getal op deze pagina is afkomstig uit de Photta-API-documentatie · gecontroleerd

Binnen vijf minuten je eerste afbeelding

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