Эта страница переведена автоматически. Оригинал на английском языке является каноническим. Читать на английском →
Перейти к основному содержимому

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

Лимиты на уровне кошелька для операций с заявками и API-запросов.

Обзор​

Ограничение частоты работает на фиксированных 60-секундных окнах. Лимиты кошелька определяются его уровнем (tier) и применяются к:

  • Выставлению заявок (POST /order, PUT /order, WebSocket PlaceOrder и отправка заявок по перпам через маршрут TEE)
  • Отмене заявок (DELETE /order, DELETE /order_cloid и отмены по перпам через маршрут TEE)
  • API-запросам (чтение в разрезе кошелька и прочие подписанные операции записи)

К отменам, авторизации агентов, записи настроек MMP и публичным риск-симуляциям применяются отдельные лимиты по сетевому источнику с общим потолком на уровне процесса.

Счётчики хранятся в памяти каждого API-процесса и не разделяются между репликами. Поэтому опубликованные значения следует рассматривать как максимум, который пропустит один процесс, а не как бюджет на весь кластер.

Лимиты по умолчанию​

УровеньЗаявок/минОтмен/минAPI-запросов/минМакс. открытых заявокМакс. позиций
По умолчанию6012060010050
Tier 130603005020
Tier 21203001 200500200
Маркетмейкер1 2002 4006 0005 000Без ограничений

Новые кошельки получают лимиты по умолчанию. Для повышения уровня обратитесь в поддержку. Текущий лимит API-запросов возвращается в заголовке X-RateLimit-Limit любого запроса на чтение в разрезе кошелька, например GET /orders?wallet=....

Ответ при превышении лимита​

При превышении лимита API возвращает 429 Too Many Requests:

{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded for OrderPlacement: 60 per minute, retry after 45 seconds",
"retry_after_secs": 45,
"limit": 60
}

Заголовки ответа​

Эндпоинты с лимитами на уровне кошелька возвращают следующие заголовки. Ответ 429 содержит X-RateLimit-Limit, X-RateLimit-Remaining: 0 и Retry-After, но не X-RateLimit-Reset:

ЗаголовокОписаниеПример
X-RateLimit-LimitМаксимальное число запросов в окне60
X-RateLimit-RemainingОставшееся число запросов в текущем окне42
X-RateLimit-ResetUnix-время в секундах, когда окно сбрасывается (только в успешных ответах)1737312060
Retry-AfterЧисло секунд до повторной попытки (только при 429)45

Пример заголовков ответа​

Успешный запрос:

HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1737312060

Запрос, отклонённый по лимиту:

HTTP/1.1 429 Too Many Requests
Retry-After: 45
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0

Категории лимитов​

Лимиты учитываются отдельно для каждого типа действия:

Выставление заявок​

Учитывается по кошельку в счёт лимита «Заявок/мин» для его уровня:

  • POST /order и PUT /order
  • WebSocket PlaceOrder
  • POST /v1/tee-perp/orders/submit и прочие отправки заявок по перпам, учитываются по менеджеру аккаунта

POST /bulk_order и PUT /bulk_order ограничены 50 позициями в одном запросе.

Отмена заявок​

Учитывается по кошельку в счёт лимита «Отмен/мин» для его уровня:

  • DELETE /order и DELETE /order_cloid
  • Отмены по перпам, учитываются по подписывающему API-кошельку

Каждый маршрут отмены, включая DELETE /bulk_order и DELETE /bulk_order_cloid, дополнительно ограничивается ещё до проверки подписи: 6 000 отменяемых позиций на сетевой источник и 60 000 на процесс в минуту. Пакетная отмена засчитывает одну позицию за каждый элемент.

API-запросы​

Учитываются по кошельку в счёт лимита «API-запросов/мин» для его уровня:

  • Чтение в разрезе кошелька, ключ берётся из query-параметра wallet
  • Подписанные операции записи, не перечисленные выше, например настройка MMP и режима маржи

Отправка RFQ​

POST /rfq/request и WebSocket-команды отправки RFQ ограничены 10 запросами на кошелёк в минуту независимо от уровня.

Риск-симуляции​

Публичные симуляции портфеля и заявок (POST /risk/simulate/portfolio, POST /risk/simulate/orders и предпросмотр для перпов POST /v1/tee-perp/preview) имеют отдельные лимиты: 60 запросов на сетевой источник и 600 запросов на процесс в минуту. В одном API-процессе одновременно выполняется не более четырёх симуляций. Запрос, превысивший квоту или заставший все обработчики симуляций занятыми, получает 429 Too Many Requests.

Авторизация агентов​

POST /approve-agent, DELETE /revoke-agent и DELETE /revoke-all-agents ограничиваются ещё до проверки подписи: 120 запросов на сетевой источник и 1 200 запросов на процесс в минуту.

Запись настроек MMP​

Запись конфигурации MMP ограничивается ещё до проверки подписи: 120 запросов на сетевой источник и 1 200 запросов на процесс в минуту, в дополнение к лимиту API-запросов кошелька.

Лимиты на позиции и заявки​

Помимо ограничений частоты, для кошельков действуют лимиты на максимальное число открытых заявок и позиций:

Тип лимитаОписаниеОтклонение
Макс. открытых заявокМаксимальное число одновременно открытых заявокНовая заявка отклоняется, пока кошелёк находится на лимите
Макс. позицийМаксимальное число уникальных позиций (-1 = без ограничений)Заявка отклоняется, если она откроет новую позицию

Это отклонения заявок, а не HTTP-ошибки. Ответ на заявку возвращается с HTTP 200, status: "REJECTED" и полем reason, например:

max_open_orders_exceeded: current=100, limit=100
max_positions_exceeded: wallet 0x... has 50 positions, limit is 50

Рекомендации​

Обработка лимитов​

  1. Отслеживайте заголовки: заранее контролируйте X-RateLimit-Remaining
  2. Соблюдайте Retry-After: выжидайте указанное время перед повторной попыткой
  3. Используйте backoff: применяйте экспоненциальную задержку при повторяющихся 429
import time

def place_order_with_retry(order, max_retries=3):
for attempt in range(max_retries):
response = api.place_order(order)

if response.status_code == 429:
retry_after = int(response.headers.get('Retry-After', 60))
time.sleep(retry_after)
continue

return response

raise RateLimitError("Max retries exceeded")

Экономия запросов​

  1. Используйте пакетные эндпоинты: POST /bulk_order для нескольких заявок в одном запросе
  2. Отменяйте пакетами: DELETE /bulk_order или DELETE /bulk_order_cloid вместо множества запросов DELETE /order
  3. WebSocket для обновлений: подписывайтесь на обновления заявок вместо опроса GET /orders

Мониторинг​

Отслеживайте на стороне клиента следующие метрики:

  • Частоту запросов по типам действий
  • Динамику X-RateLimit-Remaining
  • Частоту ответов 429
  • Среднюю длительность Retry-After

Справочник ошибок​

HTTP-статусКод ошибкиОписание
429rate_limit_exceededЛимит превышен, повторите попытку через указанное время

Полный справочник ошибок см. в разделе Ошибки.