Ошибки и лимиты

Ошибки возвращают статус вне 2xx и JSON-тело с сообщением. Обрабатывайте их аккуратно — особенно 401 (подпись) и 429 (лимит).

Формат ошибки#

{
  "error": "Market not active"
}

Ошибки валидации (Zod) включают массив details с описанием проблемных полей.

Коды статусов#

КодЗначениеЧастая причина
400Неверный запросНеверные параметры, рынок неактивен, цена не кратна шагу.
401Не авторизованНет/неверная подпись или устаревший таймстамп (±30с).
403ЗапрещеноАдрес не совпадает с API-ключом.
404Не найденоНеизвестный рынок / токен / ордер.
429Слишком много запросовПревышен лимит — сделайте паузу и повторите.
5xxОшибка сервераВременная — повтор с экспоненциальной задержкой.

Лимиты запросов#

ЧастьЛимитПримечание
REST API~30 req/sНа IP. Списочные эндпоинты кратко кэшируются.
CLOB~60 req/sНа IP. У части маршрутов более строгие лимиты.
WebSocket1 соединение, много подписокДля живых данных предпочитайте WS, а не опрос.

Хорошая практика

Кэшируйте списки рынков, подписывайтесь по WebSocket вместо опроса и добавляйте экспоненциальную задержку с джиттером на 429/5xx. Так интеграция останется быстрой и в рамках лимитов.

Пример повтора#

async function withRetry<T>(fn: () => Promise<T>, tries = 4): Promise<T> {
  let lastErr: unknown;
  for (let i = 0; i < tries; i++) {
    try {
      return await fn();
    } catch (err) {
      lastErr = err;
      const delay = Math.min(1000 * 2 ** i, 8000) + Math.random() * 250;
      await new Promise((r) => setTimeout(r, delay));
    }
  }
  throw lastErr;
}