Перейти к содержимому

Документация API

Не хотите писать интеграцию? Виджет примерки ставится одним тегом <script> на витрину — без бэкенда и без вызовов API.

Как поставить виджет →

Аутентификация

Передайте ваш API ключ в заголовке X-Api-Key. Ключи начинаются с префикса tn_live_.

X-Api-Key: tn_live_xxxxxxxxxxxxxxxx

Модель списания кредитов

Каждый вызов B2B-функции списывает кредиты с квоты текущего периода в момент отправки. При окончательной ошибке кредиты возвращаются автоматически.

ФункцияФормула кредитов
Try-On1 кредит за вызов
Описание1 кредит за вызов
Model Shootварианты × 3 + (2 если генерируется модель) + (1 если своё фото фона)
Видеопо длительности: 5с = 1, 8с = 2, 10с = 3, 15с = 4 (управляется в админке)
Видео-примеркапо длительности: 5с = 1, 8с = 2, 10с = 3, 15с = 4 (отдельный баланс tryon_video)

Возврат: окончательная ошибка провайдера → автовозврат всех кредитов; промежуточные сбои (внутренние повторы) — без возврата; провал QA model-shoot — без возврата (генерация состоялась).

Загрузка изображений

POST /api/v1/b2b/uploads/ — multipart-загрузка одного изображения (поле file; JPEG, PNG или WebP, до 10 МБ). Кредиты не списываются. Возвращает upload_id (передайте как garment_upload_id) и публичный url (подходит как *_image_url). Нужно, потому что все submit-эндпоинты принимают только публичные HTTPS-ссылки — теперь не требуется свой хостинг. Ссылка живёт expires_in секунд.

curl -X POST https://api.try-nova.shop/api/v1/b2b/uploads/ \
  -H "X-Api-Key: tn_live_..." \
  -F "file=@garment.jpg"

# => { "data": { "upload_id": "9f2c...", "url": "https://...", "expires_in": 900 } }
# Pass upload_id as garment_upload_id, or use url as garment_image_url.

Каталог поз и фонов

GET /api/v1/b2b/public/presets/ — без авторизации. Возвращает допустимые значения pose_preset_ids и background_preset вместе с картинками-превью и подписями. Запрашивайте их, а не хардкодьте: список меняется, и неверный id даёт 400. Параметры: locale (ru/en) и gender (male — мужской набор поз; фоны не зависят от пола).

# No API key needed — this is a public catalogue.
curl "https://api.try-nova.shop/api/v1/b2b/public/presets/?locale=en&gender=female"

# => { "data": { "version": 3, "gender": "female",
#      "poses":       [{ "id": "front_full", "label": "Front", "image_url": "..." }, ...],
#      "backgrounds": [{ "id": "studio_white", "label": "White studio", ... }, ...] } }

Свои модели (saved models)

POST /api/v1/b2b/models/generate/ — создать модель с нужными параметрами (асинхронно; списывается надбавка за генерацию, по умолчанию 2 кредита). Опрос: GET /api/v1/b2b/models/jobs/{request_id}/. Затем передавайте model.uuid как saved_model_id с model_source="saved" — повторное использование бесплатно. Список: GET /api/v1/b2b/models/. Это же решение, если в стоковой библиотеке нет нужного типа модели.

# 1. Generate a model (async, charges the generate surcharge once)
curl -X POST https://api.try-nova.shop/api/v1/b2b/models/generate/ \
  -H "X-Api-Key: tn_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"gender":"male","ethnicity":"south_asian","body_type":"athletic","age_range":"25-30","name":"Hero model"}'

# 2. Poll until status is "completed"
curl https://api.try-nova.shop/api/v1/b2b/models/jobs/<request_id>/ \
  -H "X-Api-Key: tn_live_..."

# 3. Reuse the model.uuid on any shoot or video — free from here on
curl -X POST https://api.try-nova.shop/api/v1/b2b/model-shoot/ \
  -H "X-Api-Key: tn_live_..." -H "Content-Type: application/json" \
  -d '{"garment_image_url":"https://...","model_source":"saved","saved_model_id":"<uuid>","model_gender":"male","pose_preset_ids":["front_full"],"variant_count":1}'

Виртуальная примерка (VTO)

POST /api/v1/b2b/tryon/ — отправить задачу примерки. output_format=image (1 кредит) или output_format=video (анимированный ролик; списывается с отдельного баланса tryon_video по длительности — передайте video_duration_seconds и motion_type). Используйте Idempotency-Key. Статус: GET /api/v1/b2b/tryon/{request_id}/ (result_image_url — кадр/постер, result_video_url — готовое видео).

# Image output (1 credit)
curl -X POST https://api.try-nova.shop/api/v1/b2b/tryon/ \
  -H "X-Api-Key: tn_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: unique-request-id" \
  -d '{"body_image_url":"https://...","garment_image_url":"https://..."}'

# Video output (charged from the tryon_video balance by duration)
curl -X POST https://api.try-nova.shop/api/v1/b2b/tryon/ \
  -H "X-Api-Key: tn_live_..." \
  -H "Content-Type: application/json" \
  -d '{"body_image_url":"https://...","garment_image_url":"https://...","output_format":"video","video_duration_seconds":8,"motion_type":"turn"}'

Генерация описания товара

POST /api/v1/b2b/tools/description/ — сгенерировать SEO-описание товара (1 кредит). Поддерживаются Wildberries, Ozon и др.

curl -X POST https://api.try-nova.shop/api/v1/b2b/tools/description/ \
  -H "X-Api-Key: tn_live_..." \
  -H "Content-Type: application/json" \
  -d '{"product_name":"Denim Jacket","product_attributes":{"color":"blue","size":"M"},"platform":"wildberries"}'

Model Shoot — фотосессия с моделью

POST /api/v1/b2b/model-shoot/ — сгенерировать фото товара на модели. Стоимость: варианты × 3 + 2 (если model_source=generate) + 1 (если background_custom_url). Проверка статуса: GET /api/v1/b2b/model-shoot/{request_id}/.

# You need a saved_model_id first — see "Your Own Models" above.
# model_source "stock" is retired and returns 400 STOCK_MODELS_UNAVAILABLE.
# pose_preset_ids must be DISTINCT and its length must equal variant_count;
# fetch valid pose/background ids from /api/v1/b2b/public/presets/.
curl -X POST https://api.try-nova.shop/api/v1/b2b/model-shoot/ \
  -H "X-Api-Key: tn_live_..." \
  -H "Content-Type: application/json" \
  -d '{"garment_image_url":"https://...","model_source":"saved","saved_model_id":"<uuid>","model_gender":"female","model_ethnicity":"european","model_body_type":"average","model_age_range":"25-30","background_preset":"studio_white","pose_preset_ids":["front_full","three_quarter","profile","walking"],"lighting_preset":"studio_softbox","variant_count":4}'

Генерация видео

POST /api/v1/b2b/video/ — сгенерировать рекламное видео. Поддерживаемые длительности и стоимость в кредитах управляются админом (по умолчанию 5с=1, 8с=2, 10с=3, 15с=4). Проверка статуса: GET /api/v1/b2b/video/{request_id}/.

curl -X POST https://api.try-nova.shop/api/v1/b2b/video/ \
  -H "X-Api-Key: tn_live_..." \
  -H "Content-Type: application/json" \
  -d '{"garment_image_url":"https://...","model_gender":"female","duration_seconds":8,"aspect_ratio":"9:16"}'

Аналитика и трекинг

1. Установите пиксель отслеживания

После интеграции API генерации один раз добавьте этот код на каждую страницу витрины, где показывается ассет TryNova:

<script src="https://pixel.try-nova.shop/pixel.js" data-key="YOUR_PIXEL_KEY"></script>

Пометьте каждый отрендеренный ассет идентификатором request_id, полученным при генерации:

<div data-trynova-asset="REQUEST_ID" data-trynova-sku="YOUR_SKU"> …asset… </div>

Согласие: пиксель ничего не сохраняет и не отправляет, пока не получено согласие. Добавьте data-consent="granted" в тег script либо вызовите TryNova.consent() после того, как пользователь примет ваш баннер cookie/согласия (TryNova.revoke() отзывает согласие). После этого показы и просмотры отслеживаются автоматически. События намерения отправляйте сами:

TryNova.track("add_to_cart", { assetId: "REQUEST_ID", sku: "YOUR_SKU" });

Покупки и возвраты не отправляются из браузера (ключ пикселя публичный) — см. шаг 2.

2. Отправляйте покупки и возвраты с сервера (обязательно для учёта выручки)

Ключ пикселя публичный — он виден в исходном коде страницы, поэтому им можно отправлять только низкодоверенные события (показы / просмотры / add-to-cart). Покупки и возвраты связаны с деньгами, поэтому их нужно отправлять с вашего бэкенда секретным API-ключом, а не ключом пикселя:

curl -X POST https://api.try-nova.shop/api/v1/b2b/events/ \
  -H "X-Api-Key: YOUR_SECRET_KEY" -H "Content-Type: application/json" \
  -d '{"event_id":"order-1234","asset_id":"REQUEST_ID","sku":"YOUR_SKU","event_type":"purchase","value":4990,"currency":"RUB","occurred_at":"2026-06-23T12:00:00Z"}'

Указывайте стабильный event_id (например, id заказа), чтобы повторные отправки были идемпотентны. Для возврата заказа используйте "event_type":"return".

3. Продаёте на маркетплейсе (Wildberries / Ozon / Amazon)?

Пиксель не может работать на страницах карточек маркетплейса, поэтому аналитика витрины пока не покрывает эти продажи. Подключение аккаунта маркетплейса для чтения просмотров, заказов и возвратов по SKU появится скоро (отдельный релиз).

Коды ошибок

КодHTTPОписание
QUOTA_EXCEEDED429Превышен лимит запросов или баланс исчерпан
VALIDATION_ERROR400Неверные параметры запроса
FIELD_NOT_SUPPORTED400Поле удалено из API (например, camera_angles или scene_vibe) — уберите его
IDEMPOTENCY_CONFLICT409Idempotency-Key повторно использован с другим телом запроса
PROVIDER_ERROR502Ошибка стороннего AI-провайдера
NOT_FOUND404Ресурс не найден