# Тарифы и лимиты — полный справочник

> Цены и месячные лимиты трёх тарифов, суточная защита, разница между tariff_limit_reached и tariff_daily_burst, пробный период и ограничения частоты запросов — всё на одной странице.

## Коротко

В Qut Pay действуют **три разных ограничения**, и их важно не путать:

1. **Месячный лимит счетов** — сколько счетов разрешает ваш тариф. Закончился — приходит `tariff_limit_reached` (HTTP 429).
2. **Суточная защита** — это не бизнес-лимит, а страховка от интеграции, ушедшей в цикл. Превышена — приходит `tariff_daily_burst` (HTTP 429).
3. **Частота запросов** — сколько HTTP-запросов в секунду вы можете отправлять. Превышена — `rate_limited` или `request_rate_limited`.

Процент с оборота не взимается: оплата сервиса — месячная подписка. Деньги приходят напрямую на ваш счёт в Kaspi.

## Таблица тарифов

| Тариф | Цена в месяц | Счетов в месяц | Суточная защита |
|---|---|---|---|
| Пробный | 0 ₸ | — | 50 |
| Бастау | 4 990 ₸ | 800 | 200 |
| Бизнес | 14 900 ₸ | 4 000 | 1 500 |
| Про | 39 900 ₸ | 15 000 | 5 000 |
| Партнёрский | По договорённости | без лимита | — |

Тариф меняется в разделе **Тариф** в кабинете: https://qut.kz/app

## Как считается месячный лимит

| Вопрос | Ответ |
|---|---|
| Какой период | Календарный месяц: с 1-го по последнее число |
| Часовой пояс | Время Алматы |
| Что считается | Счета, созданные в боевом режиме |
| Что не считается | Счета песочницы (созданные ключом `qp_test_…`) |
| Когда обнуляется | В первый день нового месяца |

Месячный лимит — это **количество созданных счетов**, а не оплаченных. Неоплаченный, истёкший или отменённый счёт тоже попадает в счётчик. Поэтому если код выставляет несколько счетов на один заказ, лимит закончится быстрее ожидаемого — включите [идемпотентность](/kb/ru/idempotency).

При достижении лимита останавливается только создание новых счетов. Уже созданные продолжают работать: покупатель платит, вебхук приходит, возврат и чтение статуса тоже работают.

## Суточная защита

Суточное число — **не бизнес-лимит**. Оно защищает от цикла в коде, от бесконечных повторов при обработке ошибок и от сломанной интеграции. Нормально работающий магазин до него не доходит: при месячном лимите 800 на тарифе Бастау суточные 200 — это 6 000 в месяц, то есть порог стоит намного выше реальных продаж.

Если вы видите `tariff_daily_burst`, проверяйте в первую очередь **свой код**, а не тариф: где-то повторяется цикл, где-то бесконечный retry в обработке ошибок, или на один заказ создаётся несколько счетов.

## Разница между двумя ошибками

| | `tariff_limit_reached` | `tariff_daily_burst` |
|---|---|---|
| HTTP | 429 | 429 |
| Значение | Закончился месячный лимит | Слишком много счетов за сутки |
| Причина | Бизнес вырос или создаются лишние счета | Обычно цикл в коде |
| Решение | Повысить тариф или дождаться нового месяца | Починить код |
| Когда пройдёт | В начале нового месяца | На следующие сутки |
| Поможет ли смена тарифа | Да, сразу | Косвенно: на старшем тарифе суточное число выше |

Есть и третья ошибка: `tariff_inactive` (HTTP 403) — тариф не оплачен или закончился пробный период. Это не лимит, а неактивная подписка.

## Пробный период

| Что | Значение |
|---|---|
| Длительность | 7 дней |
| Счетов в сутки | 50 |
| Когда начинается | **С первого боевого (live) счёта** |
| Важна ли дата регистрации | Нет |
| Запускает ли пробный период песочница | Нет |

Значит, интеграцию можно писать в песочнице сколько угодно долго — семь дней начинают идти только тогда, когда вы принимаете первую настоящую оплату. Подробнее: [Пробный период](/kb/ru/trial-period).

## Песочница в лимит не входит

Песочница — режим с ключом `qp_test_…`. Запросы не уходят в Kaspi, настоящие деньги не движутся, оплату вы симулируете сами. Поэтому:

- счета песочницы не попадают в месячный лимит;
- счета песочницы не попадают в суточную защиту;
- как бы часто ни гоняли автотесты в песочнице, на боевой лимит это не влияет.

Разница режимов: [Песочница и боевой режим](/kb/ru/sandbox-vs-live).

## Ограничения частоты запросов

Это не количество счетов, а количество **HTTP-запросов**. Точные значения меняются в зависимости от нагрузки, поэтому пишите код не по фиксированному числу, а по признакам в ответе.

| Код | HTTP | Что делать |
|---|---|---|
| `rate_limited` | 429 | Подождать время из заголовка `Retry-After` и повторить |
| `request_rate_limited` | 429 | Снизить частоту, уменьшить число параллельных потоков |
| `too_many_attempts` | 429 | Слишком частый повтор одного действия, подождите минуту |

Правильная тактика — **растущая пауза** (backoff): 1, 2, 4, 8 секунд, с добавлением случайных сотен миллисекунд на каждом шаге. Повтор с постоянным интервалом только продлевает ограничение.

```js
async function withRetry(fn, tries = 5) {
  for (let i = 0; i < tries; i++) {
    const res = await fn();
    if (res.status !== 429) return res;
    const wait = Number(res.headers.get('Retry-After')) || 2 ** i;
    await new Promise((r) => setTimeout(r, wait * 1000 + Math.random() * 300));
  }
  throw new Error('rate limited');
}
```

Подробнее: [Ограничения частоты запросов](/kb/ru/rate-limits).

## Что делать при приближении к лимиту

1. Посмотрите текущее число за месяц в разделе **Тариф** в кабинете.
2. Проверьте, нормальное ли это число: совпадает ли количество продаж с количеством счетов? Если разрыв большой — есть дубли.
3. Есть дубли — включите [идемпотентность](/kb/ru/idempotency), это заодно экономит лимит.
4. Дублей нет, бизнес действительно вырос — повышайте тариф.
5. Если объём выше 15 000 счетов в месяц, напишите в поддержку о партнёрском тарифе: WhatsApp +7 778 881 3333, Telegram @qutpaybot.

## Вопросы и ответы

**Если повысить тариф в середине месяца, лимит вырастет сразу?** Да, месячный лимит и суточное число нового тарифа применяются с этого момента.

**Неоплаченные счета входят в лимит?** Да. Лимит считается по созданным счетам, а не по оплаченным.

**У меня несколько организаций — лимиты складываются?** Нет. У каждой организации свой тариф и свой лимит, они не переносятся между организациями.

**Что происходит с уже созданными счетами при достижении лимита?** Ничего. Покупатель платит, вебхук приходит, возврат работает. Не создаются только новые счета.

**Можно ли отключить суточную защиту?** Нет. Это ограничение защищает и вас, и ваших покупателей, если интеграция уйдёт в цикл.
