cURL · Virtual Try-On API

Virtual Try-On API z cURL

Najszybszym sposobem na zrozumienie każdego API jest wywołanie go z konsoli. Dokumentacja Photta jest zaprojektowana jako cURL-first — wszystko na tej stronie można uruchomić w terminalu, bez Node czy Pythona.

W jednym zdaniu

Wyeksportuj `PHOTTA_API_KEY`, wyślij POST do `https://ai.photta.app/api/v1/tryon/apparel` z odpowiednim body JSON, przechwyć identyfikator generacji, a następnie odpytuj w pętli `curl … /tryon/apparel/:id` co 3 sekundy, aż `data.status` zmieni się na `completed` — zwykle w 1.5 do 4 minut. Użyj `jq`, aby wyciągnąć wynikowy adres URL z końcowej odpowiedzi.

Zaktualizowano · 2026-04-19

Twoje pierwsze zapytanie

cURLNode.jsPythoncURL
# Submit a try-on job. The API returns 202 Accepted + a generation ID.
JOB=$(curl -s -X POST "$PHOTTA_BASE_URL/tryon/apparel" \
  -H "$AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{
    "product_type": "dress",
    "product_images": ["https://example.com/dress.jpg"],
    "mannequin_id": "mnq_athena_ts",
    "pose_id": "pose_standing_front",
    "resolution": "2K",
    "aspect_ratio": "3:4"
  }')

ID=$(echo "$JOB" | jq -r '.data.id')
echo "Generation $ID queued"

# Poll every 3 seconds until the job completes (max 6 minutes).
for i in $(seq 1 120); do
  RESULT=$(curl -s "$PHOTTA_BASE_URL/tryon/apparel/$ID" -H "$AUTH_HEADER")
  STATUS=$(echo "$RESULT" | jq -r '.data.status')
  if [ "$STATUS" = "completed" ]; then
    echo "$RESULT" | jq -r '.data.output_url'
    break
  fi
  if [ "$STATUS" = "failed" ]; then
    echo "$RESULT" | jq -r '.data.error_message' >&2
    exit 1
  fi
  sleep 3
done

Czego się spodziewać

Typical completion

1.5–4min

2K / 4K credits

5 / 7

Aspect ratios

5

Product types

6

Jak to działa

Virtual Try-On API z cURL

Pięć kroków w konsoli, zero zależności poza curl i jq.

  1. 01

    Krok 1

    Zarejestruj się i wygeneruj klucz

    Wejdź na ai.photta.app, otwórz zakładkę Developers, kliknij Generate API key. Klucze live zaczynają się od `photta_live_`.

  2. 02

    Krok 2

    Wyeksportuj klucz

    Dodaj `export PHOTTA_API_KEY="photta_live_xxx"` do profilu powłoki lub pliku `.envrc`, aby każde kolejne wywołanie curl automatycznie go widziało.

  3. 03

    Krok 3

    Zdefiniuj bazowy URL

    `export PHOTTA_BASE_URL="https://ai.photta.app/api/v1"` skraca polecenia curl i ułatwia zmianę na URL sandboxa, gdy zostanie udostępniony.

  4. 04

    Krok 4

    Wyślij i odpytuj

    Wyślij POST do `$PHOTTA_BASE_URL/tryon/apparel`, aby otrzymać ID, a następnie odpytuj w pętli `curl $PHOTTA_BASE_URL/tryon/apparel/$ID` co 3 sekundy. Przekaż odpowiedź do jq, aby czysto wyciągnąć `.data.status`.

  5. 05

    Krok 5

    Zapisz wynik

    Po zakończeniu zadania wyciągnij `.data.output_url` za pomocą jq i użyj `curl -o`, aby zapisać bajty lokalnie — gotowe do następnego kroku w Twoim potoku.

Kod, od początku do końca

Copy, paste, done.

Four snippets — install prerequisites, wrap the REST call, submit + poll, then handle the errors that actually happen in production.

01cURL is already installed on macOS, Linux, WSL and modern Windows
bash
# Verify curl is available
curl --version

# Export your API key so the rest of the calls can reference it
export PHOTTA_API_KEY="photta_live_xxxxx"
02Set the base URL + auth header once
bash
# Pin the base URL in a shell variable so every call is a one-liner.
export PHOTTA_BASE_URL="https://ai.photta.app/api/v1"

# Reusable auth header — every request needs it.
AUTH_HEADER="Authorization: Bearer $PHOTTA_API_KEY"
03Submit and poll in one script
bash
# Submit a try-on job. The API returns 202 Accepted + a generation ID.
JOB=$(curl -s -X POST "$PHOTTA_BASE_URL/tryon/apparel" \
  -H "$AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{
    "product_type": "dress",
    "product_images": ["https://example.com/dress.jpg"],
    "mannequin_id": "mnq_athena_ts",
    "pose_id": "pose_standing_front",
    "resolution": "2K",
    "aspect_ratio": "3:4"
  }')

ID=$(echo "$JOB" | jq -r '.data.id')
echo "Generation $ID queued"

# Poll every 3 seconds until the job completes (max 6 minutes).
for i in $(seq 1 120); do
  RESULT=$(curl -s "$PHOTTA_BASE_URL/tryon/apparel/$ID" -H "$AUTH_HEADER")
  STATUS=$(echo "$RESULT" | jq -r '.data.status')
  if [ "$STATUS" = "completed" ]; then
    echo "$RESULT" | jq -r '.data.output_url'
    break
  fi
  if [ "$STATUS" = "failed" ]; then
    echo "$RESULT" | jq -r '.data.error_message' >&2
    exit 1
  fi
  sleep 3
done
04Read the status code + error body instead of silently failing
bash
# -w pulls out the HTTP status without polluting the JSON body.
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "$PHOTTA_BASE_URL/tryon/apparel" \
  -H "$AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{ "product_type": "dress" }')

BODY=$(echo "$RESPONSE" | sed '$d')
STATUS=$(echo "$RESPONSE" | tail -1)

case "$STATUS" in
  200|202)
    echo "$BODY" | jq '.data' ;;
  402)
    echo "Out of credits" ; echo "$BODY" | jq '.error' ;;
  429)
    RETRY=$(echo "$BODY" | jq -r '.error.retry_after')
    echo "Rate limited — retry in ${RETRY}s" ;;
  *)
    echo "Error $STATUS" ; echo "$BODY" | jq '.error' ;;
esac

Dlaczego taki format

Dlaczego cURL wciąż jest najszybszym sposobem na weryfikację API

  • Zero install — cURL ships with every major OS
  • Pairs with `jq` for scripted pipelines (CI, cron, bash hooks)
  • Ideal for smoke-testing endpoints before wiring them into code
  • All code in this page copy-pastes into any POSIX shell

Czego to nie robi

Honest caveats

  • cURL's polling loop blocks your terminal — move to Node/Python for parallel workers
  • No streaming parser for the result; you fetch the final URL when the job is done
  • Windows Command Prompt users should run WSL or PowerShell's curl.exe wrapper

Pytania innych programistów

Questions other developers ask

Czy istnieje narzędzie Photta CLI?+

Jeszcze nie — ale cURL plus piętnastoliniowy wrapper w bashu załatwia większość spraw. Dokumentacja priorytetyzuje przykłady cURL, ponieważ każdy język może uruchomić proces podrzędny, a powłoka jest wspólnym mianownikiem w potokach CI.

Czy potrzebuję jq, aby korzystać z API?+

Niekoniecznie — ale skryptowanie potoków jest z nim znacznie łatwiejsze. jq pozwala wyciągnąć `.data.id`, `.data.status` i `.data.output_url` z odpowiedzi JSON bez ręcznego parsowania. Zainstaluj za pomocą `brew install jq` na macOS lub `apt install jq` na Debian/Ubuntu.

Jak uwierzytelnić się za pomocą curl?+

Dodaj `-H "Authorization: Bearer $PHOTTA_API_KEY"` do każdego zapytania. Trzymaj klucz w zmiennej env, nigdy nie wstawiaj go bezpośrednio do skryptu w repozytorium. `curl --oauth2-bearer` również działa, ale forma z nagłówkiem jest czytelniejsza w dokumentacji i logach.

Czy mogę używać skryptów opartych na curl w produkcji?+

Do jednorazowych aktualizacji wsadowych i zadań cron — tak, tysiące zespołów tak aktualizuje katalogi. W przypadku długo działających aplikacji lepszy jest prawdziwy język programowania ze względu na obsługę błędów, retries i obserwowalność. Przykłady curl na tej stronie pozostaną aktualne nawet po przejściu na Node czy Pythona; struktura zapytania jest taka sama.

Jak odpytywać w pętli bash?+

Użyj `for i in $(seq 1 120); do … ; sleep 3; done` ze sprawdzeniem statusu wewnątrz pętli. Wyjdź z pętli, gdy `.data.status` to `completed` lub `failed`. Przykładowy kod na tej stronie pokazuje dokładny wzorzec, w tym górny limit prób.

Jak czytać odpowiedzi o błędach w curl?+

Użyj `curl -w "\n%{http_code}"`, aby przechwycić kod statusu HTTP obok body JSON. Reaguj na status: 402 przy braku kredytów, 429 przy limitach (uwzględnij wartość Retry-After), 5xx przy przejściowych błędach serwera. Body błędu zawsze zawiera pola `error.code` i `error.message`.

cURL · Virtual Try-On API

Utwórz konto i pobierz klucz API

Wyeksportuj `PHOTTA_API_KEY`, wyślij POST do `https://ai.photta.app/api/v1/tryon/apparel` z odpowiednim body JSON, przechwyć identyfikator generacji, a następnie odpytuj w pętli `curl … /tryon/apparel/:id` co 3 sekundy, aż `data.status` zmieni się na `completed` — zwykle w 1.5 do 4 minut. Użyj `jq`, aby wyciągnąć wynikowy adres URL z końcowej odpowiedzi.

Virtual Try-On API z cURL — Photta | Photta