Funnel API v1
Funnel-сессия создаёт одну товарную карточку пошагово. Распознанный товар,
вопросы, идеи и настройки сохраняются в funnel_id, поэтому клиенту не нужно
повторять весь контекст в каждом запросе.
Base URL: https://api.aidentika.com/api/v1/public
Все запросы используют Authorization: Bearer ak_.... Endpoint доступен, когда
на окружении включён FUNNEL_ENABLED; иначе возвращается 503 с кодом
funnel_disabled.
Поток
POST /funnels
├─ POST /funnels/{id}/idea (необязательно, можно повторять)
├─ POST /funnels/{id}/setup (необязательно)
└─ POST /funnels/{id}/generate
└─ GET /status/{action_id} или GET /funnels/{id}Шаги idea и setup можно пропустить.
1. Начать сессию
POST /funnels
Загружает от 1 до 6 фото, распознаёт товар и сразу возвращает вопросы. Endpoint
поддерживает заголовок Idempotency-Key и ограничен примерно 6 запросами в
минуту.
{
"images": [{"url": "https://example.com/product.jpg"}],
"locale": "ru",
"product_name": "Крем для рук",
"category_id": "cosmetics",
"description": "Натуральный состав, для сухой кожи"
}Вместо URL можно передать base64:
{
"images": [
{"data": "BASE64_БЕЗ_DATA_PREFIX", "media_type": "image/jpeg"}
]
}| Поле | Обязательное | Описание |
|---|---|---|
images | да | 1–6 изображений (url либо data + media_type) |
locale | нет | ru, en или es |
product_name | нет | Авторитетное название товара |
category_id | нет | apparel, wearables, food, cosmetics, gadgets, home, other |
description | нет | Дополнительные факты о товаре, до 10 000 символов |
Ответ:
{
"funnel_id": 123,
"project_id": 456,
"product": {
"name": "Крем для рук",
"category_id": "cosmetics",
"known_facts": ["объём 50 мл"]
},
"questions": [
{
"id": 0,
"question": "Для какого типа кожи?",
"options": ["сухая", "жирная"]
}
],
"next_steps": ["idea", "setup", "generate"]
}2. Добавить идею
POST /funnels/:funnel_id/idea
Body не требуется. Один вызов создаёт одну идею и добавляет её в пул. В пуле может быть до 10 идей; endpoint ограничен примерно 10 запросами в минуту.
{
"idea_id": "ide_a1b2c3d4e5f60708",
"idea": "Крупный план текстуры",
"text": "Увлажнение 24 часа",
"scene": "студийный свет",
"pool_size": 2,
"next_steps": ["setup", "generate"]
}Сохраните idea_id, если хотите выбрать эту идею при генерации.
3. Настроить сессию
POST /funnels/:funnel_id/setup
{
"aspect_ratio": "3:4",
"resolution": "2K",
"card_style": "infographic",
"design_by_reference": true,
"refs": {
"design": [{"url": "https://example.com/style.jpg"}],
"model": [{"url": "https://example.com/model.jpg"}],
"environment": [{"url": "https://example.com/background.jpg"}]
}
}| Поле | Описание |
|---|---|
aspect_ratio | 9:16, 4:3, 1:1, 16:9, 3:4; по умолчанию 3:4 |
resolution | 1K, 2K, 4K; сохраняется и возвращается в состоянии сессии |
card_style | infographic или cinematic |
design_by_reference | Использовать design reference при infographic |
refs.design | До 3 стилевых референсов; несовместимо с cinematic |
refs.model | До 3 фото модели, добавляются к product refs |
refs.environment | До 3 фото окружения, добавляются к product refs |
{
"ok": true,
"aspect_ratio": "3:4",
"resolution": "2K",
"card_style": "infographic",
"design_by_reference": true,
"design_ref_count": 1,
"model_ref_count": 1,
"environment_ref_count": 1,
"next_steps": ["idea", "generate"]
}4. Запустить генерацию
POST /funnels/:funnel_id/generate
Передайте ответы на вопросы и, при необходимости, выбранную идею.
{
"answers": [{"question_id": 0, "answer": "сухая"}],
"idea_id": "ide_a1b2c3d4e5f60708",
"wishes": "Минимализм, светлый фон"
}Идея выбирается в таком порядке:
idea_idиз пула;- inline override через
idea/text; - последняя идея пула;
- генерация без отдельной идеи.
Endpoint ограничен примерно 10 запросами в минуту.
{
"action_id": 789,
"status": "pending",
"poll_url": "/api/v1/public/status/789",
"funnel_id": 123,
"card_id": 111,
"project_id": 456,
"first_check_after_sec": 20
}Дальше опрашивайте GET /status/{action_id} до completed / failed или
получайте агрегат сессии через GET /funnels/{funnel_id}.
Состояние сессии
GET /funnels/:funnel_id
Ответ содержит выполненные шаги, товар, вопросы, пул идей, настройки и последнюю генерацию:
{
"funnel_id": 123,
"project_id": 456,
"completed": ["start", "idea", "generate"],
"next_steps": ["setup", "generate"],
"product": {
"name": "Крем для рук",
"category_id": "cosmetics",
"known_facts": ["объём 50 мл"]
},
"questions": [],
"ideas": [],
"aspect_ratio": "3:4",
"resolution": "2K",
"card_style": "infographic",
"design_by_reference": true,
"action_id": 789,
"status": "completed",
"result_url": "https://...",
"result_url_expires_at": "2026-08-30T00:00:00Z",
"error_message": null
}Ошибки
Ошибки используют общую оболочку FastAPI:
{
"detail": {
"error": "start_required",
"message": "Session not started — call POST /public/funnels first"
}
}| HTTP | detail.error | Причина |
|---|---|---|
400 | start_failed, unsupported_parameter | Не удалось начать сессию или несовместимы параметры |
401 / 403 | auth / forbidden | Нет ключа или сессия принадлежит другому пользователю |
404 | not_found, unknown_idea | Нет сессии или выбранной идеи |
409 | start_required, idea_pool_full | Нарушен порядок шагов или пул заполнен |
422 | validation detail | Невалидная категория или тело запроса |
502 | intake_failed, idea_failed | Сбой распознавания или генерации идеи |
503 | funnel_disabled | Funnel API выключен на окружении |
Пример cURL
Start
curl -X POST https://api.aidentika.com/api/v1/public/funnels \
-H "Authorization: Bearer ak_ваш_ключ" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-42-start" \
-d '{"images":[{"url":"https://example.com/product.jpg"}],"locale":"ru"}'