# Лимитке жеттім — не істеу керек

> tariff_limit_reached пен tariff_daily_burst — екі басқа нәрсе. Біріншісі айлық бизнес лимиті, екіншісі кодтағы циклден қорғаныс. Қалай ажырату және әрқайсысына не істеу керек.

## Қысқаша

429 келсе, алдымен `error` кодына қараңыз — екі мүлде басқа жағдай бар.

- **`tariff_limit_reached`** — тарифіңіздің **айлық** счёт лимиті бітті. Бұл қалыпты бизнес жағдайы: тарифті көтересіз немесе жаңа айды күтесіз.
- **`tariff_daily_burst`** — **тәуліктік қорғаныс** іске қосылды. Бұл бизнес лимиті емес, ол сіздің кодыңызда цикл бар деген белгі. Тарифті көтеру бұл жерде дұрыс шешім емес, алдымен кодты тексеру керек.

Sandbox счёттары лимитке кірмейді, сондықтан тексеруді `qp_test_…` кілтпен жалғастыра беруге болады.

## Симптом → себеп → шешім

| Симптом | Қате коды | Себебі | Шешімі |
|---|---|---|---|
| Ай ортасында счёттар тоқтады, көлем қалыпты | `tariff_limit_reached` | Айлық лимит бітті | Тарифті көтеріңіз немесе жаңа айды күтіңіз |
| Айдың басында, бірнеше минутта тоқтады | `tariff_daily_burst` | Кодта цикл, қайталанып жіберу | Кодты тоқтатыңыз, себебін табыңыз |
| Бір клиентке ондаған бірдей счёт | `tariff_daily_burst` | Қайталау логикасы идемпотентсіз | `Idempotency-Key` қосыңыз |
| Сынақ мерзімінде тез тоқтады | `tariff_daily_burst` | Сынақта тәулігіне 50 счёт | Sandbox-та сынаңыз |
| 429, бірақ коды басқа | `rate_limited` | Сұрау жиілігі, лимит емес | `Retry-After` тақырыбын қараңыз |

## Қалай ажырату

Жауаптың денесіндегі `error` өрісі — жалғыз сенімді белгі. HTTP күйі екеуінде де 429, сондықтан тек күй кодына қарап шешім қабылдауға болмайды.

Кабинеттегі **Тариф** бөлімінде айлық есептің қай жерде тұрғаны көрінеді. Егер ол лимитке жақын болмаса, ал сізде 429 келіп жатса — бұл тәуліктік қорғаныс.

Айлық есеп **күнтізбелік ай** бойынша, Алматы уақытымен жүреді. Яғни есеп айдың бірінші күні нөлден басталады, тіркелген күнінен емес.

## `tariff_limit_reached` — айлық лимит

Бұл жоспарлы жағдай: бизнесіңіз өсті, тарифтің лимиті таусылды.

| Тариф | Айына счёт |
|---|---|
| Бастау | 800 |
| Бизнес | 4 000 |
| Про | 15 000 |
| Серіктес | шектеусіз |

Не істеу керек:

1. **Кабинет → Тариф** бөліміне барыңыз, ағымдағы есепті қараңыз.
2. **Тарифті көтеріңіз.** Жаңа лимит бірден күшіне енеді, счёттар қайта жүре бастайды.
3. Немесе **жаңа айды күтіңіз** — есеп нөлге түседі.
4. **Sandbox-та жұмысты жалғастырыңыз** — тест счёттары лимитке кірмейді, интеграцияны дамыту тоқтамайды.

Қай тарифті таңдау керектігі: [Қай тарифті таңдау керек](/kb/tariff-choose), толық анықтама: [Тарифтер және лимиттер](/kb/tariff-limits).

**Алдын ала болдырмау:** айлық есеп 80 пайызға жеткенде тарифті ауыстыруды жоспарлаңыз. Лимит бітіп қалған сәтте сату тоқтайды, ал ол әдетте ең қолайсыз күні болады.

## `tariff_daily_burst` — тәуліктік қорғаныс

Тәуліктік сан — **бизнес лимиті емес**. Ол циклге түскен интеграциядан қорғау үшін бар: код қателесіп, бір нәрсені қайта-қайта жіберіп жатқанда счёттар да, Kaspi-ге кететін сұраулар да көбейіп кетпеуі үшін.

| Тариф | Тәуліктік қорғаныс |
|---|---|
| Сынақ | 50 |
| Бастау | 200 |
| Бизнес | 1 500 |
| Про | 5 000 |

Бұл қате келсе, бірінші әрекет — **тарифті көтеру емес, кодты тексеру**. Себебі көбіне мыналардың бірі:

- **Қайталау логикасы шектеусіз.** Сұрау сәтсіз болғанда код оны тоқтаусыз қайталайды.
- **Webhook өңдеуі жаңа счёт жасайды.** Келген оқиғаға жауап ретінде тағы счёт жасалып, шексіз тізбек пайда болады.
- **Форма екі рет жіберіледі.** Батырма бұғатталмаған, клиент екі-үш рет басады.
- **Фондық тапсырма қабаттасып кеткен.** Бұрынғысы бітпей тұрып, жаңасы қосылған.
- **Тест скрипті өндіріс кілтімен жүріп кеткен.**

Не істеу керек:

1. **Интеграцияны тоқтатыңыз.** Цикл жүріп тұрса, әр минут сайын қоқыс счёт көбейеді.
2. **Соңғы бір сағаттағы счёттарды қараңыз.** Кабинеттегі Счёттар бөлімінде бірдей сома мен сипаттама қайталанып тұрса, цикл табылды.
3. **`Idempotency-Key` қосыңыз.** Сол кілтпен қайталасаңыз жаңа счёт жасалмай, бұрынғысы қайтады. Толығы: [Идемпоттылық](/kb/idempotency).
4. **Қоқыс счёттарды болдырмаңыз**, әсіресе олар клиенттерге кетіп үлгерген болса.
5. **Қайталауды шектеңіз:** ең көбі 3-5 әрекет, өсіп отыратын кідіріспен.

Счёттар қосарланып жатса, шұғыл әрекеттер бөлек сипатталған: [Счёттар қосарланып жатыр](/kb/duplicate-invoices).

## Лимит пен сұрау жиілігін шатастырмаңыз

Үшінші түрлі 429 бар — `rate_limited` немесе `request_rate_limited`. Бұл счёт санына емес, **сұрау жиілігіне** қатысты: тым жиі сұрап жатырсыз. Мұнда `Retry-After` тақырыбын оқып, көрсетілген уақыттан кейін қайталаңыз. Толығы: [Сұрау жиілігінің шектеулері](/kb/rate-limits).

| Код | Не туралы | Бірінші әрекет |
|---|---|---|
| `tariff_limit_reached` | Айлық счёт саны | Тарифті көтеру |
| `tariff_daily_burst` | Тәуліктегі счёт саны | Кодты тексеру |
| `rate_limited` | Сұрау жиілігі | `Retry-After` бойынша күту |
| `tariff_inactive` | Тариф төленбеген немесе сынақ бітті | Кабинет → Тариф |

## Жиі қойылатын сұрақтар

**Тарифті көтерсем, тәуліктік қорғаныс та көтеріле ме?** Иә, әр тарифтің өз тәуліктік саны бар. Бірақ `tariff_daily_burst` келген кезде тарифті көтеру — себепті емес, салдарды жасыру.

**Sandbox счёттары лимитке кіре ме?** Жоқ. `qp_test_…` кілтпен жасалған счёттар айлық лимитке де, тәуліктік қорғанысқа да әсер етпейді. Сондықтан интеграцияны сынау лимитті жеп қоймайды.

**Лимитке жеткен кезде бұрынғы счёттарға не болады?** Ештеңе. Ашық счёттар төлене береді, webhook-тар келе береді, қайтару істейді. Шектелетіні — тек жаңа счёт жасау.

**Айлық есеп қашан нөлге түседі?** Күнтізбелік айдың басында, Алматы уақытымен. Тіркелген күніңізден емес.

**Сынақ мерзімінде лимит қандай?** 7 күн, тәулігіне 50 счёт. Сынақ **бірінші нақты (live) счёттан** басталады, тіркелген күннен емес. Sandbox сынақты бастамайды: [Сынақ мерзімі](/kb/trial-period).

**Болдырылған және мерзімі өткен счёттар лимитке кіре ме?** Есеп жасалған счёттар бойынша жүреді. Сондықтан циклге түскен интеграция лимитті ешкім төлемесе де жеп қояды — бұл тағы бір себеп, неге идемпоттылық керек.
