cURL · API d'essayage virtuel
API d'essayage virtuel avec cURL
La façon la plus rapide de comprendre une API est de l'appeler depuis le terminal. La documentation de Photta est conçue pour cURL — chaque extrait sur cette page s'exécute directement dans votre shell.
En une phrase
Exportez `PHOTTA_API_KEY`, effectuez un POST vers `https://ai.photta.app/api/v1/tryon/apparel` avec le corps JSON adéquat, récupérez l'ID, puis bouclez sur `curl … /tryon/apparel/:id` toutes les 3 secondes jusqu'à ce que `data.status` passe à `completed` — généralement sous 1.5 à 4 minutes. Utilisez `jq` pour extraire l'URL finale.
Mis à jour · 2026-04-19
Votre première requête
# 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À quoi s'attendre
Typical completion
1.5–4min
2K / 4K credits
5 / 7
Jewelry types
4
Close-up mannequins
built-in
Comment ça marche
API d'essayage virtuel avec cURL
Cinq étapes shell, zéro dépendance au-delà de curl et jq.
- 01
Étape 1
S'inscrire et générer une clé
Allez sur ai.photta.app, ouvrez l'onglet Développeurs, cliquez sur Générer une clé API. Les clés de production commencent par `photta_live_`.
- 02
Étape 2
Exporter la clé
Ajoutez `export PHOTTA_API_KEY="photta_live_xxx"` à votre profil shell ou fichier `.envrc` pour que chaque appel curl l'utilise automatiquement.
- 03
Étape 3
Définir l'URL de base
`export PHOTTA_BASE_URL="https://ai.photta.app/api/v1"` permet de raccourcir les commandes curl et facilite le passage à une URL de sandbox ultérieure.
- 04
Étape 4
Soumettre et interroger
POST sur `$PHOTTA_BASE_URL/tryon/apparel` pour obtenir un ID, puis bouclez sur `curl $PHOTTA_BASE_URL/tryon/apparel/$ID` toutes les 3 secondes. Pipez la réponse dans jq pour extraire `.data.status` proprement.
- 05
Étape 5
Persister le résultat
Une fois la tâche terminée, extrayez `.data.output_url` avec jq et utilisez `curl -o` pour sauvegarder les octets localement — prêt pour l'étape suivante de votre pipeline.
Code, de bout en bout
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' ;;
esacPourquoi cette structure
Pourquoi cURL reste la méthode la plus rapide pour tester une 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
Ce qu'il ne fait pas
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
Questions fréquentes des développeurs
Questions other developers ask
Existe-t-il un outil CLI Photta ?+
Pas encore — mais cURL associé à un wrapper bash de quinze lignes fait l'affaire. La documentation privilégie cURL car tout langage peut exécuter un sous-processus, et le shell est le dénominateur commun des pipelines CI.
Ai-je besoin de jq pour utiliser l'API ?+
Pas strictement — mais c'est bien plus simple pour scripter. jq permet d'extraire `.data.id`, `.data.status` et `.data.output_url` du JSON sans parsing manuel. Installez-le via `brew install jq` sur macOS ou `apt install jq` sur Debian/Ubuntu.
Comment s'authentifier avec curl ?+
Ajoutez `-H "Authorization: Bearer $PHOTTA_API_KEY"` à chaque requête. Gardez la clé dans une variable d'environnement, ne l'écrivez jamais en clair dans un script committé. `curl --oauth2-bearer` fonctionne aussi, mais l'en-tête explicite est plus clair.
Puis-je utiliser des scripts cURL en production ?+
Pour des traitements de masse ponctuels ou des tâches cron, oui — de nombreuses équipes gèrent leurs catalogues ainsi. Pour une application pérenne, un langage de programmation est préférable pour la gestion d'erreurs, les tentatives et l'observabilité. Les exemples curl restent valables même après portage vers Node ou Python.
Comment interroger depuis une boucle bash ?+
Utilisez `for i in $(seq 1 120); do … ; sleep 3; done` avec la vérification de statut dans la boucle. Sortez quand `.data.status` est `completed` ou `failed`. L'exemple sur cette page montre le modèle exact, incluant une limite maximale.
Comment lire les erreurs dans curl ?+
Utilisez `curl -w "\n%{http_code}"` pour capturer le code HTTP à côté du corps JSON. Gérez selon le code : 402 pour crédits insuffisants, 429 pour limite de débit (respectez Retry-After), 5xx pour erreurs serveur temporaires. L'objet d'erreur contient toujours `error.code` et `error.message`.
cURL · API d'essayage virtuel
Créer un compte et obtenir une clé API
Exportez `PHOTTA_API_KEY`, effectuez un POST vers `https://ai.photta.app/api/v1/tryon/apparel` avec le corps JSON adéquat, récupérez l'ID, puis bouclez sur `curl … /tryon/apparel/:id` toutes les 3 secondes jusqu'à ce que `data.status` passe à `completed` — généralement sous 1.5 à 4 minutes. Utilisez `jq` pour extraire l'URL finale.