cURL · Virtuel Try-On API
Virtuel Try-On API med cURL
Den hurtigste måde at forstå et API på er at kalde det fra shellen. Phottas dokumentation er cURL-først efter design — alt på denne side kan køre i en terminal uden krav om Node eller Python.
Kort fortalt
Export `PHOTTA_API_KEY`, lav en POST til `https://ai.photta.app/api/v1/tryon/apparel` med den korrekte JSON-body, opsnap generations-ID'et, og kør derefter et loop med `curl … /tryon/apparel/:id` hvert 3 sekund, indtil `data.status` skifter til `completed` — typisk inden for 1.5 til 4 minutter. Kombiner med `jq` for at udtrække output-URL'en fra den endelige respons.
Opdateret · 2026-04-19
Din første request
# 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
doneHvad kan man forvente
Typical completion
1.5–4min
2K / 4K credits
5 / 7
Aspect ratios
5
Product types
6
Sådan virker det
Virtuel Try-On API med cURL
Fem shell-trin, nul afhængigheder udover curl og jq.
- 01
Trin 1
Opret dig og generer en nøgle
Gå til ai.photta.app, åbn fanen Developers, og klik på Generate API key. Live-nøgler starter med `photta_live_`.
- 02
Trin 2
Eksportér nøglen
Læg `export PHOTTA_API_KEY="photta_live_xxx"` i din shell-profil eller en `.envrc` fil, så alle efterfølgende curl-kald automatisk samler den op.
- 03
Trin 3
Fastlæg base-URL
`export PHOTTA_BASE_URL="https://ai.photta.app/api/v1"` holder curl-kommandoerne korte og gør det nemt at skifte til en sandbox-URL, når en sådan frigives.
- 04
Trin 4
Indsend og polle
POST til `$PHOTTA_BASE_URL/tryon/apparel` for at få et ID, og kør derefter et loop med `curl $PHOTTA_BASE_URL/tryon/apparel/$ID` hvert 3 sekund. Pipe responsen til jq for at udtrække `.data.status` rent.
- 05
Trin 5
Persistér resultatet
Når jobbet er færdigt, trækkes `.data.output_url` ud med jq, og bytes hentes med `curl -o` til lokal lagring — klar til næste trin i din pipeline.
Kode, ende-til-ende
Copy, paste, done.
Four snippets — install prerequisites, wrap the REST call, submit + poll, then handle the errors that actually happen in production.
# 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"# 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"# 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# -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' ;;
esacHvorfor denne struktur
Hvorfor cURL stadig er den hurtigste måde at verificere et API på
- 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
Hvad det ikke gør
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
Spørgsmål fra andre udviklere
Questions other developers ask
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 underproces, og shellen er den mindste fællesnævner i CI-pipelines.
Har jeg brug for jq for at bruge API'et?+
Ikke strengt taget — men scriptede pipelines er meget lettere med det. jq lader dig trække `.data.id`, `.data.status` og `.data.output_url` ud af JSON-responsen uden at skulle parse den 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 request. Behold nøglen i en env-variabel, indlejr den aldrig 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 engangs-batch-backfills og cron-jobs, ja — tusindvis af teams sender katalog-backfills på denne måde. Til en langvarig applikation er et rigtigt sprog normalt bedre, fordi du får ordentlig fejlhåndtering, retries og observability. Curl-eksemplerne på denne side forbliver nøjagtige, selv efter du porterer til Node eller Python; request-strukturen er den samme.
Hvordan poller jeg fra et bash-loop?+
Brug `for i in $(seq 1 120); do … ; sleep 3; done` med status-tjekket inde i loopet. 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 kan hænge scriptet for evigt.
Hvordan læser jeg fejlresponser i curl?+
Brug `curl -w "\n%{http_code}"` for at opsnappe HTTP-statuskoden sammen med JSON-body. Forgren på status: 402 for manglende kreditter, 429 for rate limits (respekter Retry-After værdien), 5xx for midlertidige serverfejl. Fejl-body har altid et `error.code` og et `error.message` felt.
cURL · Virtuel Try-On API
Opret en konto og hent en API-nøgle
Export `PHOTTA_API_KEY`, lav en POST til `https://ai.photta.app/api/v1/tryon/apparel` med den korrekte JSON-body, opsnap generations-ID'et, og kør derefter et loop med `curl … /tryon/apparel/:id` hvert 3 sekund, indtil `data.status` skifter til `completed` — typisk inden for 1.5 til 4 minutter. Kombiner med `jq` for at udtrække output-URL'en fra den endelige respons.