> ## Documentation Index
> Fetch the complete documentation index at: https://api.csboard.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Лимиты запросов API CSBoard и обработка ошибок 429

> Разберитесь в лимитах запросов на ключ для всех эндпоинтов API CSBoard, читайте заголовок Retry-After и реализуйте корректную логику отката при 429.

API CSBoard применяет лимиты запросов на каждый ключ, чтобы сохранять стабильность сервиса для всех пользователей. Если вы превышаете лимит, то сразу получаете ответ `429` — ни один запрос не обрабатывается частично. Реализуйте клиент так, чтобы он считывал заголовок `Retry-After` и делал паузу перед повтором, а не долбил эндпоинт в плотном цикле.

## Лимиты по эндпоинтам

Все лимиты действуют **на API-ключ** и сбрасываются в скользящем окне 60 секунд.

| Лимит        | Эндпоинт(ы)                                                                           |
| ------------ | ------------------------------------------------------------------------------------- |
| **30 / мин** | Listings, prices, currency, balance и статус ордера — все стандартные эндпоинты `GET` |
| **30 / мин** | `POST /v1/orders` (размещает ордер на покупку и расходует реальные деньги)            |
| **1 / мин**  | `GET /v1/prices/snapshot.ndjson.gz` (массовый сжатый снапшот)                         |

<Note>
  Отправка более 30 запросов с **неверными или отсутствующими API-ключами** с одного IP-адреса в течение одной минуты автоматически приводит к 5-минутному бану на уровне IP. Во время бана каждый запрос с этого IP возвращает `401 too_many_failed_auth` независимо от того, какой ключ используется. Переключитесь на действительный ключ и дождитесь окончания cooldown перед повтором.
</Note>

## Формат ответа 429

При превышении лимита стандартного эндпоинта API возвращает:

```http theme={null}
HTTP/1.1 429 Too Many Requests
Retry-After: 14
Content-Type: application/json

{ "code": "rate_limit_exceeded", "detail": "Rate limit exceeded. Retry after 14 seconds." }
```

Значение заголовка `Retry-After` — целое число **секунд**, которые необходимо подождать, прежде чем следующий запрос будет успешным.

Эндпоинт массового снапшота использует отдельный код ошибки при превышении лимита:

```json theme={null}
{ "code": "snapshot_rate_limited", "detail": "Snapshot rate limit exceeded. Retry after 60 seconds." }
```

## Обработка 429 в клиенте

Считывайте `Retry-After` и спите как минимум столько секунд, прежде чем повторять запрос. Ниже показан простой цикл повторов на bash:

```bash theme={null}
while true; do
  RESPONSE=$(curl -si https://csboard.com/v1/listings \
    -H "Authorization: Bearer csb_pub_...")

  STATUS=$(echo "$RESPONSE" | head -1 | awk '{print $2}')

  if [ "$STATUS" = "429" ]; then
    RETRY_AFTER=$(echo "$RESPONSE" | grep -i "retry-after" | awk '{print $2}' | tr -d '\r')
    echo "Rate limited. Waiting ${RETRY_AFTER}s..."
    sleep "$RETRY_AFTER"
  else
    echo "$RESPONSE" | tail -1  # print body
    break
  fi
done
```

<Tip>
  Добавьте небольшое случайное смещение (например, `sleep $((RETRY_AFTER + RANDOM % 5))`) при запуске нескольких воркеров параллельно, чтобы они не возобновляли работу одновременно и не срабатывали по лимиту снова.
</Tip>

## Повышение лимитов

Стандартные лимиты подходят для большинства интеграций, но если у вас сценарий с высокой нагрузкой — например, конвейер данных или высокочастотный торговый бот — [свяжитесь с нами](https://csboard.com), чтобы обсудить более высокий лимит на ключ для вашей учётной записи.
