# Цены и оплата

Цены в PnP, стоимость запроса, резервирование средств, бюджеты и ошибка 402.

## PnP

Запросы оплачиваются в **PnP**, валюте платформы Nodul: 1 PnP = 100 ₽. Расходы пространства Router списываются с его **плательщика** — пространства Nodul, которое владелец выбрал в настройках пространства. Пополните баланс PnP плательщика в Nodul.

## Цены

У каждой модели есть цена за входной токен, за выходной токен и иногда за запрос, в PnP. [Каталог](/models) показывает цены за 1 миллион токенов; `GET /api/v1/models` возвращает цены за токен в поле `pricing`:

| Поле               | Цена за                                            |
| ------------------ | -------------------------------------------------- |
| `prompt`           | один входной токен                                 |
| `completion`       | один выходной токен, включая токены рассуждений    |
| `input_cache_read` | один входной токен, прочитанный из кеша провайдера |
| `request`          | один запрос, для моделей с такой оплатой           |

Цены уже включают наценку роутера. Цены моделей глобального региона следуют долларовой цене провайдера, цены моделей региона Россия — рублевой.

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

Поле `usage.cost` в ответе — точная сумма списания за этот запрос в PnP со всеми его попытками. Та же сумма есть в логах кабинета и в `GET /api/v1/generation`. Попытка, которую провайдер отклонил с ошибкой, ничего не стоит. Изредка провайдер принимает запрос, а затем присылает испорченный ответ: такая попытка оплачивается по оценке, и `GET /api/v1/generation` показывает ее как `billable`.

Отмененный запрос оплачивается за то, что успело сгенерироваться до закрытия соединения.

## Резервирование

Перед вызовом провайдера роутер резервирует средства на худший случай запроса: все тело как входные токены и `max_tokens` (по умолчанию 4096) как выходные, по самой дорогой модели из списка `models`. После ответа резерв снимается, и списывается только фактическая стоимость.

Запрос принимается, только если **доступный баланс** плательщика покрывает резерв:

```text
available = PnP balance − charged but not yet withdrawn − reserved by running requests
```

Иначе говоря: доступный баланс = баланс PnP − списано, но еще не выведено − зарезервировано выполняющимися запросами. Поэтому при небольшом балансе:

- задавайте `max_tokens` близко к тому, что нужно;
- держите списки `models` короткими;
- не отправляйте большие файлы в base64.

## Бюджеты

| Бюджет              | Где                                                                                               | Когда исчерпан                                   |
| ------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| Бюджет ключа        | В настройках ключа; сбрасывается никогда, ежедневно, еженедельно или ежемесячно в 00:00 по Москве | `402 the API key spending limit is reached`      |
| Бюджет пространства | В настройках пространства Router                                                                  | `402 the Router space spending limit is reached` |

`GET /api/v1/key` показывает расходы ключа в текущем периоде.

## 402 Payment Required

| Сообщение                                                     | Что делать                                               |
| ------------------------------------------------------------- | -------------------------------------------------------- |
| `Insufficient credits: top up the payer Nodul space with PnP` | Пополните баланс плательщика или уменьшите `max_tokens`. |
| `the API key spending limit is reached`                       | Увеличьте бюджет ключа или дождитесь его сброса.         |
| `the Router space spending limit is reached`                  | Увеличьте бюджет пространства.                           |

Ответ `402` ничего не стоит: провайдер не вызывается.
