Лимиты запросов API Polymarket: полный справочник
Polymarket публикует свои лимиты запросов на нескольких страницах, в двух совершенно разных системах и с 10-секундным окном, которого почти никто не ожидает. Здесь всё это собрано в одном наборе таблиц — плюс что на самом деле происходит, когда вы превышаете лимит.
Если вы когда-нибудь пытались ответить на простой вопрос — сколько запросов в секунду можно отправлять в Polymarket? — то обнаружили, что простого ответа нет. Лимиты разбросаны по двум отдельным системам, опубликованы на разных страницах и выражены в 10-секундном окне, а не в запросах в секунду или в минуту, как у большинства API.
Лимит для конкретного маршрута также указан на отдельной странице каждого эндпоинта в справочнике API Polymarket.
На этой странице собраны все задокументированные лимиты, объяснены обе системы и показано, что на самом деле происходит при их превышении. Все цифры взяты из официальной документации Polymarket и актуальны на сентябрь 2026 года.
Короткий ответ
Делите на 10. Лимит 1,500 req / 10s — это 150 запросов в секунду. Глобальный потолок Polymarket — 15,000 req / 10s (1,500 rps), но у каждого семейства эндпоинтов есть гораздо более низкий лимит, и остановит вас именно лимит эндпоинта.
Две разные системы лимитов
На этом спотыкается большинство разработчиков. Polymarket использует два независимых ограничителя, и соблюдение одного не защищает вас от другого.
| Лимиты Cloudflare по IP | Token bucket на подписанта | |
|---|---|---|
| Область действия | Ваш IP-адрес | Адрес вашего подписанта |
| Применяется к | Каждому API и эндпоинту | Только к запросам ордеров и отмен в CLOB |
| Механизм | Скользящее окно | Token bucket (скорость пополнения + всплеск) |
| При превышении | Запросы замедляются — задерживаются и ставятся в очередь | Запрос отклоняется с 429 |
| Зависит от | Эндпоинта | Уровня вашего 30-дневного торгового объёма |
Замедление, а не отказ
Это самое полезное, что нужно понять о слое Cloudflare. Когда вы превышаете лимит по IP, Polymarket задерживает и ставит в очередь ваши запросы, а не отклоняет их сразу. Вы не увидите шквала 429 — вы увидите, как тихо растёт задержка. Бот, который выглядит здоровым, но у которого время ответа выросло с 40ms до 3s, обычно просто превысил лимит запросов.
Лимиты запросов Gamma API
Базовый URL https://gamma-api.polymarket.com. Gamma отдаёт метаданные рынков и событий — к этим эндпоинтам большинство обращается первыми, когда изучает платформу.
| Эндпоинт | Лимит | В секунду |
|---|---|---|
| Общий | 4,000 запр. / 10 с | 400 запр./с |
/events | 500 запр. / 10 с | 50 запр./с |
/markets | 300 запр. / 10 с | 30 запр./с |
Списки /markets + /events | 900 запр. / 10 с | 90 запр./с |
/comments | 200 запр. / 10 с | 20 запр./с |
/tags | 200 запр. / 10 с | 20 запр./с |
/public-search | 350 запр. / 10 с | 35 запр./с |
/markets — самый жёсткий лимит, в который вы упрётесь
С лимитом 300 запросов / 10 с /markets — самый ограниченный из часто используемых эндпоинтов на всей платформе, в 13 раз жёстче общего лимита Gamma над ним. Если вы в цикле листаете полный список рынков, сломается именно это.
Лимиты запросов Data API
Базовый URL https://data-api.polymarket.com. Позиции, история сделок и данные портфеля. Обратите внимание, насколько этот API жёстче, чем Gamma или CLOB: общий лимит — 1,000 запросов / 10 с, четверть от лимита Gamma.
| Эндпоинт | Лимит | В секунду |
|---|---|---|
| Общий | 1,000 запр. / 10 с | 100 запр./с |
/trades | 200 запр. / 10 с | 20 запр./с |
/positions | 150 запр. / 10 с | 15 запр./с |
/closed-positions | 150 запр. / 10 с | 15 запр./с |
Проверка состояния (/ok) | 100 запр. / 10 с | 10 запр./с |
Data API v2
Data API v2 вышел 4 сентября 2026 года по адресу https://data-api.polymarket.com/v2 с собственными лимитами. v1 продолжает работать, но заморожен — новые эндпоинты и поля появляются только в v2.
| Эндпоинт | Лимит | В секунду |
|---|---|---|
Общий (все эндпоинты /v2) | 800 запр. / 10 с | 80 запр./с |
/v2/trades | 300 запр. / 10 с | 30 запр./с |
/v2/positions, /v2/positions/combos | 200 запр. / 10 с | 20 запр./с |
/v2/activity, /v2/activity/combos | 200 запр. / 10 с | 20 запр./с |
/v2/prices-history | 200 запр. / 10 с | 20 запр./с |
/v2/status | 100 запр. / 10 с | 10 запр./с |
История цен переехала на другой хост и стала в 5 раз жёстче
GET /v2/prices-history на хосте data заменяет маршрут на хосте CLOB. Версия CLOB допускала 1,000 запросов / 10 с; маршрут v2 допускает 200. Перенесёте вызов, не перенеся темп, — и упрётесь в потолок в пять раз быстрее. Кроме того, v2 сигнализирует о нагрузке через 429 с Retry-After и использует пагинацию с непрозрачными курсорами — offset нет.
Лимиты запросов CLOB API
Базовый URL https://clob.polymarket.com. Сам стакан. У CLOB самый высокий общий лимит среди всех API Polymarket (9,000 запросов / 10 с), но он делится на четыре группы с очень разными лимитами.
Общие
| Эндпоинт | Лимит | В секунду |
|---|---|---|
| Общий | 9,000 запр. / 10 с | 900 запр./с |
GET баланса и разрешений | 200 запр. / 10 с | 20 запр./с |
UPDATE баланса и разрешений | 50 запр. / 10 с | 5 запр./с |
Рыночные данные
Закономерность, которую стоит заметить: эндпоинты в единственном числе получают 1,500 запросов / 10 с, пакетные во множественном — 500 запросов / 10 с. Это похоже на понижение, пока не вспомнишь, что один пакетный вызов охватывает много токенов. По лимиту пакетный запрос втрое дороже, но каждый вызов делает гораздо больше работы — всегда выбирайте /books, а не цикл по /book.
| Эндпоинт | Лимит | В секунду |
|---|---|---|
/book | 1,500 запр. / 10 с | 150 запр./с |
/books | 500 запр. / 10 с | 50 запр./с |
/price | 1,500 запр. / 10 с | 150 запр./с |
/prices | 500 запр. / 10 с | 50 запр./с |
/midpoint | 1,500 запр. / 10 с | 150 запр./с |
/midpoints | 500 запр. / 10 с | 50 запр./с |
/prices-history | 1,000 запр. / 10 с | 100 запр./с |
| Размер тика рынка | 200 запр. / 10 с | 20 запр./с |
Журнал
| Эндпоинт | Лимит | В секунду |
|---|---|---|
/trades, /orders, /notifications, /order | 900 запр. / 10 с | 90 запр./с |
/data/orders | 500 запр. / 10 с | 50 запр./с |
/data/trades | 500 запр. / 10 с | 50 запр./с |
/notifications | 125 запр. / 10 с | 12.5 запр./с |
Аутентификация
| Эндпоинт | Лимит | В секунду |
|---|---|---|
| Эндпоинты API-ключей | 100 запр. / 10 с | 10 запр./с |
Торговля — всплеск и устойчивый темп
Торговые эндпоинты — единственные, у которых два лимита Cloudflare: лимит всплеска для коротких пиков и устойчивый лимит, измеряемый за 10 минут. Нужно укладываться в оба.
| Эндпоинт | Всплеск | Устойчивый |
|---|---|---|
POST /order | 5,000 запр. / 10 с | 120,000 запр. / 10 мин |
DELETE /order | 5,000 запр. / 10 с | 120,000 запр. / 10 мин |
POST /orders | 2,000 запр. / 10 с | 21,000 запр. / 10 мин |
DELETE /orders | 2,000 запр. / 10 с | 15,000 запр. / 10 мин |
DELETE /cancel-all | 250 запр. / 10 с | 6,000 запр. / 10 мин |
DELETE /cancel-market-orders | 1,500 запр. / 10 с | 21,000 запр. / 10 мин |
Отдельно стоит отметить DELETE /cancel-all с 250 запросами / 10 с. Маркетмейкеры, которые делают cancel-all в каждом цикле перекотировки, быстро исчерпывают этот лимит, а устойчивый лимит в 6,000 за 10 минут в среднем даёт всего 10 вызовов cancel-all в секунду.
Bridge, Relayer и всё остальное
| Эндпоинт | Лимит |
|---|---|
| Общее ограничение (глобальный потолок) | 15,000 запр. / 10 с |
Проверка состояния (/ok) | 100 запр. / 10 с |
Bridge API (https://bridge.polymarket.com) | 50 запр. / 10 с |
Relayer /submit | 25 запр. / 1 мин |
| API пользовательского PNL | 200 запр. / 10 с |
Лимит Relayer — исключение из правил
Relayer /submit — единственный задокументированный лимит, измеряемый в минуту, а не за 10 секунд, и с 25 запросами в минуту это самое жёсткое число на платформе. Если вы отправляете транзакции через relayer, это примерно одна отправка каждые 2.4 секунды.
Token bucket на подписанта (торговля в CLOB)
Отдельно от Cloudflare Polymarket проверяет запросы ордеров и отмен в CLOB по token bucket на каждого подписанта. У каждого адреса подписанта есть bucket ордеров и bucket отмен; расход из одного не влияет на другой. В отличие от слоя Cloudflare, превышение здесь возвращает настоящий 429.
Запросы стоят токенов, а не считаются как одна единица каждый:
| Bucket | Запрос | Стоимость в токенах |
|---|---|---|
| Ордера | POST /order | 1 |
| Ордера | POST /orders | Количество ордеров в пакете |
| Отмены | DELETE /order | 1 |
| Отмены | DELETE /orders | Количество переданных ID ордеров |
| Отмены | DELETE /cancel-all | 1 + количество фактически отменённых ордеров |
| Отмены | DELETE /cancel-market-orders | 1 + количество отменённых подходящих ордеров |
Пакеты — всё или ничего
Пакет принимается, только если в bucket достаточно токенов для каждой записи. Иначе отклоняется весь запрос, и ничего не обрабатывается. Пакет, стоимость которого в токенах превышает ёмкость всплеска вашего уровня, не может быть принят никогда, сколько ни жди, — его нужно разбить.
Уровни по объёму
Размер вашего bucket зависит от совокупного объёма кошелька-мейкера за скользящие 30 дней. Уровни пересчитываются каждые три часа.
| Уровень | Объём за 30 дней | Ордеров/с | Всплеск ордеров | Отмен/с | Всплеск отмен |
|---|---|---|---|---|---|
| Standard | — | 40 | 60 | 80 | 120 |
| Copper | $30,000+ | 60 | 90 | 120 | 180 |
| Bronze | $50,000+ | 80 | 120 | 160 | 240 |
| Silver | $100,000+ | 200 | 300 | 400 | 600 |
| Gold | $500,000+ | 400 | 600 | 800 | 1,200 |
| Platinum | $2.5M+ | 450 | 675 | 900 | 1,350 |
| Diamond | $5M+ | 525 | 787 | 1,050 | 1,575 |
| Elite | $10M+ | 600 | 900 | 1,200 | 1,800 |
Сколько длится полный всплеск, считается по формуле burst_seconds = burst / rate_per_sec. Для подписанта уровня Standard это 60 / 40 — 1.5 секунды отправки ордеров на полной скорости, после чего вы ограничены скоростью пополнения 40/с.
Как читать заголовки лимитов
Ограничитель на подписанта возвращает заголовки в каждом проверенном запросе. Это самый дешёвый способ следить за бюджетом — никаких дополнительных вызовов API.
| Заголовок | Значение |
|---|---|
Poly-RateLimit-Remaining | Баланс токенов в соответствующем bucket после этого запроса |
Poly-RateLimit-Reset | Unix-метка времени окончания текущего периода ожидания |
Poly-RateLimit-Tier | Какой уровень был применён |
Retry-After | Задержка до повтора в секундах — только в ответах 429 |
Poly-RateLimit-Warning | true, если при реальном применении ограничений запрос был бы отклонён |
Poly-RateLimit-Reset — не время полного пополнения
При 429 он сообщает, когда токенов будет достаточно для запроса, который вы только что попытались отправить, а не когда bucket заполнится. Обычно ждать нужно меньше, чем кажется. А Poly-RateLimit-Remaining может уйти в минус после cancel-all на уровнях, допускающих отрицательный баланс отмен.
Правильная обработка 429
Правильная стратегия повторов зависит от того, в какой ограничитель вы упёрлись, и ошибка здесь делает только хуже. Соблюдайте Retry-After, если он есть; если нет — используйте экспоненциальный отступ со случайным разбросом. Разброс важен: без него все ваши обработчики повторяют запрос в один и тот же момент, и вы сразу снова упираетесь в лимит.
const MAX_RETRIES = 5;
async function polyFetch(url: string, init?: RequestInit): Promise<Response> {
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
const res = await fetch(url, init);
// Watch the budget even on success — this is your early warning.
const remaining = res.headers.get("Poly-RateLimit-Remaining");
if (remaining !== null && Number(remaining) < 10) {
console.warn(`Low token budget: ${remaining} (tier ${res.headers.get("Poly-RateLimit-Tier")})`);
}
// Warning mode: not rejected yet, but it would have been.
if (res.headers.get("Poly-RateLimit-Warning") === "true") {
console.warn("Request would be rejected under live enforcement — slow down.");
}
if (res.status !== 429) return res;
if (attempt === MAX_RETRIES) return res;
// Prefer the server's own answer, else exponential backoff.
const retryAfter = res.headers.get("Retry-After");
const baseMs = retryAfter
? Number(retryAfter) * 1000
: Math.min(2 ** attempt * 250, 8000);
// Full jitter — spreads a fleet of workers out instead of resynchronising them.
await new Promise((r) => setTimeout(r, Math.random() * baseMs));
}
throw new Error("unreachable");
}Не повторяйте слишком большой пакет без изменений
Если пакет стоит больше токенов, чем ёмкость всплеска вашего уровня, повторять бесполезно — одним запросом его никогда не примут. Разбейте его. Это единственный случай, когда отступ будет крутиться вечно.
Как изначально укладываться в лимиты
- Используйте пакеты вместо циклов. Один вызов
/booksвместо пятидесяти вызовов/bookстоит одного запроса из бюджета 500 запросов / 10 с, а не пятидесяти из бюджета 1,500 запросов / 10 с — запас увеличивается в 17 раз. - Кешируйте метаданные. Метаданные рынка из
/marketsпочти не меняются за время жизни рынка, а у/marketsсамый жёсткий лимит в Gamma — 300 запросов / 10 с. Получите один раз, закешируйте и перестаньте запрашивать их заново в горячем цикле. - Используйте WebSocket для текущего состояния. Опрос
/bookпо таймеру — самый частый способ сжечь бюджет запросов. Подпишитесь на поток, и пусть сервер сам присылает изменения. - Добавляйте случайный разброс к запланированным задачам. Если каждый обработчик просыпается ровно в начале минуты, вы создаёте синхронный всплеск намного выше среднего темпа. Рандомизируйте смещения запуска.
- Следите за задержкой, а не только за долей ошибок. Поскольку Cloudflare замедляет, а не отклоняет, рост задержки p99 — первый сигнал превышения лимита по IP, задолго до того, как что-то проявится в виде ошибок.
- Отслеживайте заголовки.
Poly-RateLimit-Remainingничего не стоит прочитать, и он точно говорит, сколько бюджета осталось.
Лимиты запросов — это не то же самое, что доступ к данным
И последнее, о чём стоит сказать прямо, потому что это самое частое заблуждение, которое мы видим: ни один уровень лимитов не даёт историческую глубину стакана. API Polymarket отдаёт текущее состояние стакана. Он не предоставляет исторический архив того, как выглядел стакан в 14:03:17 прошлого вторника, а после разрешения рынка его стакан возвращает 404.
Это структурный пробел, а не проблема ограничения скорости, и никакая логика отступа его не решит. Если вы пытаетесь провести бэктест стратегии, вам нужны снимки на конкретный момент времени, которые кто-то записал в то время, — ровно для этого и существует PolyTest: 240M+ исторических снимков крипторынков Polymarket Up/Down с полной глубиной стакана, разрешением до долей секунды и без пропусков.
| Тариф | Запросов / мин | Всплеск / с | История |
|---|---|---|---|
| Free | 30 | 2 | Свежие рынки |
| Builder | 250 | 12 | 14 дней |
| Pro | 750 | 40 | Вся история |
| Enterprise | Индивидуально | Индивидуально | Вся история + массовая выгрузка |
GET /api/v1/limits. См. лимиты запросов и цены.Часто задаваемые вопросы
- Какой лимит запросов в секунду у API Polymarket?
- Polymarket публикует лимиты на 10-секундное окно, так что делите на 10. Глобальный потолок — 15,000 запросов / 10 с (1,500 rps), но лимиты отдельных эндпоинтов гораздо ниже, и именно они ограничивают на практике: /book и /price в CLOB допускают 1,500 запросов / 10 с (150 rps), эндпоинт /markets в Gamma — всего 300 запросов / 10 с (30 rps), а эндпоинт /positions в Data API — 150 запросов / 10 с (15 rps).
- Возвращает ли Polymarket 429 при превышении лимита запросов?
- Зависит от того, в какой ограничитель вы упёрлись. Лимиты Cloudflare по IP замедляют запросы — они задерживаются и ставятся в очередь, а не отклоняются, — поэтому вы видите рост задержки, а не ошибки. Отдельные token bucket на подписанта на эндпоинтах ордеров и отмен CLOB действительно возвращают 429 Too Many Requests вместе с заголовком Retry-After, указывающим минимальную задержку до повтора.
- Какие лимиты запросов у CLOB API Polymarket?
- Общий лимит CLOB — 9,000 запросов / 10 с. Эндпоинты рыночных данных /book, /price и /midpoint допускают по 1,500 запросов / 10 с, а их пакетные аналоги /books, /prices и /midpoints — 500 запросов / 10 с. Эндпоинты журнала допускают 900 запросов / 10 с. У торговых эндпоинтов есть и лимит всплеска, и устойчивый лимит: POST /order допускает всплеск 5,000 запросов / 10 с и устойчивый темп 120,000 запросов / 10 мин.
- Какие лимиты запросов у Gamma API Polymarket?
- Общий лимит Gamma API — 4,000 запросов / 10 с. Отдельные эндпоинты жёстче: /events — 500 запросов / 10 с, /markets — 300 запросов / 10 с, совместные списки /markets + /events — 900 запросов / 10 с, /public-search — 350 запросов / 10 с, а /comments и /tags — по 200 запросов / 10 с. Лимит /markets — самый жёсткий среди часто используемых на платформе.
- Лимиты запросов Polymarket действуют на IP-адрес или на API-ключ?
- Основные лимиты Cloudflare действуют на IP-адрес, а не на API-ключ, поэтому несколько ключей за одним IP делят один бюджет. Отдельные лимиты token bucket на эндпоинтах ордеров и отмен CLOB привязаны к адресу вашего подписанта, а их размер зависит от уровня 30-дневного торгового объёма вашего кошелька-мейкера.
- Можно ли получить исторические данные стакана Polymarket через API?
- Нет. API Polymarket отдаёт только текущее состояние рынка. Архива исторической глубины стакана нет, а стакан разрешившегося рынка возвращает 404. Для бэктестинга нужны снимки на конкретный момент времени, записанные во время работы рынков. PolyTest предоставляет 240M+ таких снимков крипторынков Polymarket Up/Down с полной 8-уровневой глубиной стакана и разрешением до долей секунды.
Получите исторические данные, которые Polymarket не хранит
PolyTest записывает крипторынки Polymarket Up/Down в процессе их работы — 240M+ снимков с 8 уровнями глубины стакана, метками времени с точностью до долей секунды и сохранёнными разрешившимися рынками. Начните с 3-дневного бесплатного пробного периода.
Читать дальше
WebSocket в Polymarket: данные в реальном времени без обрывов
Опрос стакана — самый частый способ впустую сжечь бюджет лимита запросов. Вот четыре потока, параметры подписки, которые никто не документирует, и сбой, при котором ваш бот получает тишину и принимает её за затишье.
Ошибки API Polymarket: расшифровка каждого кода
Сообщения об ошибках Polymarket лаконичны, а те, что ломают вашего бота в 3 часа ночи, обычно вообще отсутствуют в документации. Вот полный справочник — задокументированные ошибки, незадокументированные и что на самом деле делать с каждой.
Как создать торгового бота для Polymarket
Большинство руководств по ботам для Polymarket построены на SDK, которых больше не существует. Здесь — актуальный путь от начала до конца: что устанавливать в 2026 году, как на самом деле работает аутентификация, где пробелы в данных и какие сбои убивают ботов в первую неделю.