# Цены в ответе

Konductor пишет цену в сам ответ и в заголовок, так что стоимость запроса не нужно считать по таблице. Здесь — где её искать и как защитить запрос от смены тарифа.

## Стоимость запроса

Сколько рублей списано за запрос, лежит в `usage.cost_rub`. Значение — строка с двумя знаками после точки.

| Формат | Где поле |
|---|---|
| `/v1/chat/completions` | `usage.cost_rub` ответа; при `stream=true` — в части с `usage` |
| `/v1/messages` | `usage.cost_rub` ответа; при потоке — в событиях с `usage` |
| `/v1/responses` | `usage.cost_rub` внутри `response`; при потоке — в событии `response.completed` |

Если запрос завершился ошибкой до ответа модели, `cost_rub` не придёт: деньги не списаны. Итог по уже выполненному запросу можно запросить по `id` ответа (для `/v1/messages` он же в заголовке `X-Generation-Id`) методом `GET /v1/generation/{id}`: там `cost_rub`, `input_tokens`, `output_tokens` и `price_version_id`.

## Версия тарифа

Цены действуют по версии тарифа. Её номер Konductor возвращает в заголовке `X-Price-Version` ответа на запрос модели. Тот же номер лежит в поле `price_version.id` ответа `GET /v1/models` вместе с ценами за 1 млн токенов.

## Защита от смены цены

Два необязательных поля в теле запроса не дают заплатить не по тем ценам:

- `price_version` — версия тарифа, по которой ты считал стоимость. Если действует другая, Konductor ответит 409 с кодом `price_version_mismatch`, не отправит запрос модели и ничего не спишет. В ответе будет действующая версия.
- `max_cost_rub` — потолок стоимости запроса в рублях, например `"15.00"`. Если потолок возможной стоимости (по входу и `max_tokens`) выше, Konductor ответит 409 с кодом `max_cost_exceeded` и тоже ничего не спишет.

```bash
curl https://llm.kodzavod.ru/v1/chat/completions \
  -H "Authorization: Bearer $KONDUCTOR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"<идентификатор модели>","messages":[{"role":"user","content":"Привет"}],"max_tokens":256,"max_cost_rub":"15.00"}'
```

В `/v1/responses` потолок ответа задаётся полем `max_output_tokens`, поля `price_version` и `max_cost_rub` те же.

## Если запрос не прошёл

Коды 402, 403 и 429 разобраны на странице [Ошибки 402, 403 и 429](/konductor/docs/errors). Все поля и ответы — в [справочнике API](/konductor/docs/api).

Стоимость каждого запроса округляется вверх до целой копейки, минимум — копейка.
