cURL · Ghost mannequin-API

Ghost mannequin-API med cURL

I én setning

Eksporter PHOTTA_API_KEY, POST til https://api.photta.app/api/v1/api/v1/ghost-mannequin med den dokumenterte JSON-bodyen, fang opp generasjons-ID-en, og kjør deretter en GET-løkke mot /api/v1/ghost-mannequin/{id} hvert 3. sekund inntil data.status er completed. Kombiner med jq for å hente ut output-URL-en.

  • Typisk tidsbruk: 1.5–4 min
  • Credits: 4 credits ved 2K · 5 credits ved 4K
  • Prosessering: asynkron, polling
  • Grenser: 600 forespørsler/min
  • Autentisering: Bearer-nøkkel

Hvert tall på denne siden er hentet fra dokumentasjonen for Photta-API-et · verifisert

POST/api/v1/ghost-mannequin
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin \
  -H "Authorization: Bearer $PHOTTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
  "back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
  "image_side": "front",
  "angle": "side",
  "style": "3d",
  "background_color": "white",
  "resolution": "2K",
  "aspect_ratio": "3:4",
  "user_instruction": "closed front, cream interior lining",
  "brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}')
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/ghost-mannequin/$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 oppsummert

Kort oppsummert

Endepunkt
POST /api/v1/ghost-mannequin
Autentisering
Bearer API-nøkkel
Prosessering
Asynkron – poll status-endepunktet
Typisk tidsbruk
1.5–4 min
Credits
4 credits ved 2K · 5 credits ved 4K
Bildeformater
3:4 · 1:1 · 4:3 · 9:16 · 16:9
Inndatagrenser
Opptil 10 MB per bilde; JPEG, PNG, WebP
Idempotent
Nei

Slik fungerer det

Fem steg i terminalen, null avhengigheter utover curl og jq.

  1. Trinn 1

    Registrer deg og generer en nøkkel

    Gå til ai.photta.app, åpne Developers-fanen og klikk på Generate API key. Live-nøkler starter med `photta_live_`.

  2. Trinn 2

    Eksporter nøkkelen

    Legg `export PHOTTA_API_KEY="photta_live_xxx"` i shell-profilen din eller i en `.envrc`-fil, slik at alle påfølgende curl-kall fanger den opp automatisk.

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

    Lås base-URL-en

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

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

    Send inn og utfør polling

    Gjør en POST til `$PHOTTA_BASE_URL/api/v1/ghost-mannequin` for å hente en ID, og kjør deretter `curl $PHOTTA_BASE_URL/api/v1/ghost-mannequin/{id}` i en løkke hvert 3. sekund. Send responsen videre til jq for å hente ut `.data.status` rent.

    RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin \
      -H "Authorization: Bearer $PHOTTA_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
      "back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
      "image_side": "front",
      "angle": "side",
      "style": "3d",
      "background_color": "white",
      "resolution": "2K",
      "aspect_ratio": "3:4",
      "user_instruction": "closed front, cream interior lining",
      "brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
    }')
    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/ghost-mannequin/$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. Trinn 5

    Lagre resultatet

    Når jobben er ferdig, henter du ut `.data.output_url` med jq og bruker `curl -o` for å lagre bytene til lokal lagring — klart for neste steg i pipelinen din.

Feil

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

Grenser

  • 600 forespørsler per minutt per API-nøkkel (Fast tidsvindu; grensen er lik for alle abonnementer)
  • En 429 inneholder Retry-After: 30 sekunder
  • Opptil 10 MB per bilde
  • Formater: JPEG, PNG, WebP
  • Samtidige batcher per abonnement: Free 1 · Hobby 2 · Seller 3 · Brand 4 · Studio 6
  • Kun polling – API-et sender ikke webhooks.

Hvorfor cURL fortsatt er den raskeste måten å verifisere et API på

  • Null installasjon — cURL følger med alle store operativsystemer
  • Fungerer sømløst med jq for skriptede pipelines (CI, cron, shell hooks)
  • Den raskeste måten å røykteste et endpoint på før du integrerer det i koden
  • Hver kommando på denne siden kan limes rett inn i ethvert POSIX-skall

Hva den ikke gjør

  • Polling-løkken blokkerer terminalen — gå over til Node eller Python for parallelle workers
  • Polling er det eneste signalet på fullføring; API-et sender ingen webhooks
  • Brukere av Windows Command Prompt bør kjøre WSL eller PowerShells curl.exe

Spørsmål utviklere stiller

Finnes det et CLI-verktøy for Photta?

Ikke ennå — men cURL pluss en bash-wrapper på femten linjer tar deg nesten hele veien. Dokumentasjonen prioriterer cURL-først-eksempler fordi alle språk kan kjøre en subprosess, og skallet er den felles nevneren i CI-pipelines.

Trenger jeg jq for å bruke API-et?

Ikke strengt tatt — men skriptede pipelines er mye enklere med det. jq lar deg hente ut `.data.id`, `.data.status` og `.data.output_url` fra JSON-responsen uten manuell parsing. Installer med `brew install jq` på macOS eller `apt install jq` på Debian/Ubuntu.

Hvordan autentiserer jeg med curl?

Legg til `-H "Authorization: Bearer $PHOTTA_API_KEY"` på hver forespørsel. Behold nøkkelen i en miljøvariabel, og aldri legg den direkte inn i et skript du committer. `curl --oauth2-bearer` fungerer også, men den eksplisitte header-formen er tydeligere i dokumentasjon og logger.

Kan jeg bruke curl-baserte skript i produksjon?

For enkeltstående batch-backfills og cron-jobber, ja — tusenvis av team leverer katalog-backfills på denne måten. For en langvarig applikasjon er et ekte programmeringsspråk vanligvis bedre, ettersom du får ordentlig feilhåndtering, retries og observerbarhet. curl-eksemplene på denne siden forblir nøyaktige selv etter at du porterer til Node eller Python; strukturen på forespørselen er den samme.

Hvordan gjør jeg polling fra en bash-løkke?

Bruk `for i in $(seq 1 120); do … ; sleep 3; done` med statussjekken inne i løkken. Avbryt når `.data.status` er `completed` eller `failed`. Kodeeksempelet på denne siden viser det nøyaktige mønsteret, inkludert en hard øvre grense slik at en jobb som henger seg ikke låser skriptet for alltid.

Hvordan leser jeg feilresponser i curl?

Bruk `curl -w "\n%{http_code}"` for å fange opp HTTP-statuskoden sammen med JSON-kroppen. Forgren basert på statusen: 402 for utilstrekkelige credits, 429 for rate limits (respekter Retry-After-verdien), 5xx for forbigående serverfeil. Feilresponskroppen inneholder alltid feltene `error.code` og `error.message`.

Prøv API-et på fem minutter

Generer en Photta API-nøkkel, lim inn cURL-kodesnutten ovenfor, og du har ditt første bilde på modell før kaffen er ferdig traktet.

  • 1.5–4 min
  • 4 credits ved 2K · 5 credits ved 4K
  • asynkron, polling
  • 600 forespørsler/min
  • Bearer-nøkkel