# Типові помилки

Сторінка складена з розподілу статусів на проді за 30 днів. Там, де ми чогось не вимірюємо, так і написано.

<Aside type="note">
Коди помилок ми **не** пишемо в журнал запитів, тільки HTTP-статуси. Тому нижче є частоти статусів, але немає рейтингу кодів на кшталт `INVALID_FIELD`. Вигадувати його ми не стали.
</Aside>

## Помилки шляху

Найчастіші 4xx у журналі це `404`, і майже всі вони не ваші: це сканери, які перебирають `.env`, `.git/config`, `wordpress/`, `wp-content/…`. Справжні помилки шляху в інтеграторів інші, і вони вже описані з прикладами тут: [Помилкові виклики, які ми бачимо найчастіше](/api-conventions/#помилкові-виклики-які-ми-бачимо-найчастіше). Коротко: `/api/…` замість `/v1/…`, подвоєний `/v1/v1/…`, `/swagger.json` замість `/v1/openapi.json`.

## `402`: тариф не включає ендпоінт

385 відповідей за 30 днів. Розподіл показує, куди частіше за все впирається безкоштовний тариф:

| Ендпоінт | `402` за 30 днів |
|---|---|
| `chart` | 114 |
| `transit-calendar` | 101 |
| `vedic/dashas/vimshottari/maha` | 48 |
| `ingresses` | 25 |
| `planetary-hours` | 24 |
| `vedic/panchang/full` | 24 |
| `eclipses` | 13 |

У тілі відповіді приходить `current_plan` і `upgrade_to`. Це не помилка запиту: тіло правильне, ключ дійсний, просто тариф не включає цей ендпоінт.

## `429`: два різні ліміти

6 791 відповідь за 30 днів, з них 3 769 без ключа і 3 022 з ключем. Це два різні механізми, і плутати їх не варто:

- **без ключа** ліміт рахується за IP, 30 запитів на годину. Найбільший блок у нашому журналі це навіть не інтегратори, а синтетичний аудит Chrome-Lighthouse з 15 адрес;
- **з ключем** ліміт це RPM вашого тарифу. У відповіді є `Retry-After` у секундах, і саме його треба чекати, а не робити ретрай одразу.

## `400`: майже завжди тіло карткового запиту

700 відповідей за 30 днів, і вони зосереджені на ендпоінтах, які приймають дату, час і координати: `chart` (111), `horoscope/daily` (19), `transits` (18), `synastry` (15), `rectification` (15).

Найдорожча з таких помилок навіть не та, що дає `400`, а та, що колись давала `200`: короткі написання полів. Правила й приклад відповіді: [Формати полів](/agent-setup/field-formats/).

## `401` і `403`

`401` це відсутній або невірний ключ; повідомлення називає обидва класи, `aw_` і `pk_`. `403` це походження: браузерний ключ `pk_` відхиляється, якщо запит прийшов без походження або з чужого домену, а ключ з областю ендпоінтів відповідає `ENDPOINT_NOT_IN_SCOPE` і перелічує свій список у `details`.

Повна таблиця кодів: [Помилки](/errors/).
