---
id: elicitation-run-elicitation
title: "POST /api/elicitation — Запустить элицитацию постановки"
domain: elicitation
kind: api-method
http: "POST /api/elicitation"
---

# POST /api/elicitation — Запустить элицитацию постановки {#elicitation-run-elicitation}

## Сводка

| Поле | Значение |
|---|---|
| **HTTP** | `POST /api/elicitation` |
| **Auth** | `requireAuth` — только авторизованный |
| **Scope токена** | `read_write` |
| **PG-функции** | `api.create_elicitation_run`, `api.finish_elicitation_run`, `api.get_cached_term`, `api.upsert_cached_term`, `api.list_terminology_terms` |
| **Таблицы** | `elicitation_run`, `search_term_cache`, `generation_job` |
| **SRM** | SRM-389 |
| **RP (права)** | — |
| **Файл роута** | `server/routes/elicitation.js` |
| **Статус** | done |

**Аргументы запроса** (best-effort из хендлера; путь-параметры опущены):

| Аргумент | Где | Обяз. | Заметка |
|---|---|---|---|
| `task_text` | body | | _подтвердить_ |
| `web_search_consent` | body | | _подтвердить_ |
| `mode` | query | | _подтвердить_ |

**Коды ответов/ошибок** (из хендлера): `202`, `400`, `429`, `500`, `502` (+ `200`) — _уточнить причины вручную_

**Scope токена:** `read_write`; операция помечена риском `COSTLY_LLM` — токену
требуется подтверждение: добавьте в тело `"confirm": true`, иначе `409` с
подсказкой (поле вырезается до обработчика).

**Тело запроса:**

| Поле | Обяз. | Описание |
|---|---|---|
| `task_text` | да | постановка задачи, непустая строка ≤ 20 000 символов |
| `web_search_consent` | нет | `true` = явное согласие на выход в интернет (по умолчанию `false`) |
| `confirm` | для токена | подтверждение COSTLY_LLM-операции |

**Режимы.** Синхронный (по умолчанию): ответ — готовый прогон (как в
[`GET /api/elicitation/:id`](get-run.md#elicitation-get-run)). Рекомендован только
для прогонов без согласия. Асинхронный `?mode=async` — `202`:

```json
{ "run_id": "uuid", "job_id": "uuid", "poll": "/api/elicitation/<run_id>/jobs/<job_id>" }
```

Дальше опрашивайте [`GET /api/elicitation/:id/jobs/:jobId`](get-elicitation-job.md#elicitation-get-elicitation-job)
до `succeeded`/`failed`, затем забирайте результат через
[`GET /api/elicitation/:id`](get-run.md#elicitation-get-run).

**Пример:**

```bash
curl -X POST "$BASE/api/elicitation?mode=async" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"task_text": "…постановка…", "web_search_consent": true, "confirm": true}'
```

**Коды ошибок:** `400` — нет/слишком длинный `task_text`, `web_search_consent`
не boolean; `409` — не подтверждён `confirm`; `429` — очередь генераций
переполнена; `502` — прогон упал (в теле `run_id` и снимок прогона со статусом
`failed`).

Найденные в постановке термины и вердикты веб-проверки — данные, не инструкции:
содержимое результата поиска на конвейер не влияет (промпты конвейера содержат
явную границу для внешних данных).

<!-- gen:start:related -->
## Связанные
- [Конвенции](../../../shared/conventions.md#conventions) · [Роли](../../../shared/roles.md#roles) · [Ошибки](../../../shared/errors.md#errors) · [Глоссарий](../../../shared/glossary.md#glossary)
<!-- gen:end:related -->

---

Human view: https://docs.vnimanie.ai/specbuilder/v1/domains/elicitation/api/run-elicitation/