cURL · Virtual Try-On API
Virtual Try-On API через cURL
Самый быстрый способ понять API — вызвать его из терминала. Документация Photta ориентирована на cURL: все примеры запускаются в консоли без Node или Python.
Суть
Экспортируйте `PHOTTA_API_KEY`, отправьте POST на `https://ai.photta.app/api/v1/tryon/apparel`, получите ID генерации и опрашивайте через `curl … /tryon/apparel/:id` каждые 3 секунды до статуса `completed`. Используйте `jq` для извлечения ссылки на результат.
Обновлено · 2026-04-19
Ваш первый запрос
# 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Чего ожидать
Typical completion
1.5–4min
2K / 4K credits
5 / 7
Aspect ratios
5
Product types
6
Как это работает
Virtual Try-On API через cURL
Пять команд в терминале, никаких зависимостей кроме curl и jq.
- 01
Шаг 1
Зарегистрируйтесь и создайте ключ
На ai.photta.app во вкладке Developers нажмите Generate API key. Ключи начинаются с `photta_live_`.
- 02
Шаг 2
Экспортируйте ключ
Добавьте `export PHOTTA_API_KEY="photta_live_xxx"` в профиль оболочки или `.envrc`, чтобы curl подхватывал его автоматически.
- 03
Шаг 3
Задайте базовый URL
`export PHOTTA_BASE_URL="https://ai.photta.app/api/v1"` сократит команды и позволит легко переключиться на песочницу в будущем.
- 04
Шаг 4
Отправка и опрос
Сделайте POST на `$PHOTTA_BASE_URL/tryon/apparel` для получения ID, затем опрашивайте статус через `curl $PHOTTA_BASE_URL/tryon/apparel/$ID`. Фильтруйте через jq для получения `.data.status`.
- 05
Шаг 5
Сохраните результат
Когда задача выполнена, извлеките `.data.output_url` и используйте `curl -o` для сохранения изображения локально.
Код от и до
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' ;;
esacПочему такая структура
Почему cURL — все еще лучший способ проверить 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
Чего он не делает
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 other developers ask
Есть ли у Photta CLI-инструмент?+
Пока нет, но cURL и небольшой bash-скрипт заменяют его. Мы даем примеры на cURL, потому что любой язык умеет запускать подпроцессы, и это стандарт для CI/CD.
Нужен ли jq для работы с API?+
Не обязательно, но с ним гораздо проще. jq позволяет достать `.data.id`, `.data.status` и `.data.output_url` из JSON без ручного парсинга. Установка: `brew install jq` (macOS) или `apt install jq` (Linux).
Как аутентифицироваться через curl?+
Добавляйте `-H "Authorization: Bearer $PHOTTA_API_KEY"` в каждый запрос. Используйте переменную окружения. Метод `curl --oauth2-bearer` тоже работает, но явный заголовок нагляднее в логах.
Можно ли использовать curl-скрипты в продакшне?+
Для разовых задач или cron-скриптов — да. Для полноценных приложений лучше использовать языки программирования с нормальной обработкой ошибок и ретраями. Формат запроса в любом случае останется таким же, как в примерах cURL.
Как реализовать опрос в bash?+
Используйте цикл `for i in $(seq 1 120); do … ; sleep 3; done` с проверкой статуса внутри. Выходите из цикла, когда статус станет `completed` или `failed`. Пример кода на этой странице показывает, как добавить лимит времени.
Как читать ошибки в curl?+
Используйте `curl -w "\n%{http_code}"`, чтобы видеть HTTP-статус вместе с JSON. Обрабатывайте коды: 402 — нет кредитов, 429 — лимит запросов (смотрите Retry-After), 5xx — временная ошибка сервера. Тело ошибки всегда содержит `error.code` и `error.message`.
cURL · Virtual Try-On API
Создайте аккаунт и получите API-ключ
Экспортируйте `PHOTTA_API_KEY`, отправьте POST на `https://ai.photta.app/api/v1/tryon/apparel`, получите ID генерации и опрашивайте через `curl … /tryon/apparel/:id` каждые 3 секунды до статуса `completed`. Используйте `jq` для извлечения ссылки на результат.