Лимит считается в единицах, а не в запросах
Корзина МойСклада — 45 единиц за 3 секунды на весь аккаунт. Это давно известно. Что известно хуже: с 1 сентября 2026 года запрос по логину-паролю или по токену пользователя стоит 3 единицы, а с 1 декабря будет стоить 4. Значит реальный потолок — 15 запросов за 3 секунды, а с декабря — 11. На весь аккаунт, на все коннекторы вместе.
Проверяется одним вызовом. В ответе есть заголовки x-ratelimit-limit и x-ratelimit-remaining: до запроса 45, после единственного запроса — 42. Три единицы за один вызов, как и написано.
Почему очередь не помогала
На проекте, где мы это разбирали, перед МойСкладом стоял прокси с очередью: не больше сорока запросов за три секунды, по старой документации. Но очередь считает темп только по тому трафику, который через неё идёт. Часть коннекторов — маркетплейс, банки — ходила в МойСклад напрямую, и их запросы в бюджете не учитывались. Сумма выходила за потолок, а отказ доставался тому, кто шёл без очереди: каждый шестой запрос прокси получал 429, хотя сам он лимит соблюдал.
Отказы бывают двух видов, и лечатся они по-разному. Код 1049 — превышен темп, помогает пауза. Код 1073 — превышено число одновременных запросов, пауза не помогает вовсе, нужно уменьшать параллельность. Заголовки ответа показывают только первый лимит; второй виден лишь по коду ошибки.
Что на самом деле убрало ошибки
Первое — весь трафик аккаунта через одну очередь, без исключений. Скрипты, ходившие напрямую, переведены на прокси; при этом адрес пришлось раздвоить: канонический для ссылок внутри документов и адрес прокси только для транспорта, иначе ссылки на localhost попадают в данные. Темп очереди выставлен по реальному потолку — двенадцать из пятнадцати, с запасом на ручные запросы.
Второе — разметка запросов по имени скрипта. Пока все коннекторы шли под одной меткой, было видно лишь «банки съели две трети». Как только каждый запрос стал подписан, нашёлся настоящий потребитель: один скрипт синхронизации отчётов каждые пять минут заново перебирал всю историю с июня и на каждый заказ спрашивал МойСклад отдельно — 517 запросов за прогон. Ему добавили память об уже разобранном, и прогон стал стоить 31 запрос. Аккаунт после этого использует около четырёх процентов бюджета.
Когда обход лимита нужен, а когда нет
МойСклад предлагает выход: приватное решение, токен которого весит одну единицу вместо трёх. Мы прошли регистрацию, установили решение на тестовый аккаунт и замерили. Токен пользователя — 3 единицы за запрос. Токен решения-черновика — 4. Расширенные лимиты включаются только после модерации и оплаты подписки: 1300 рублей в месяц за каждый аккаунт, где решение установлено. В письме поддержки этого не было — нашлось в одном абзаце документации.
Поэтому порядок такой: сначала завести весь трафик в одну очередь и разметить его, потом посмотреть, сколько бюджета уходит на самом деле, и только затем решать, нужен ли платный обход. В нашем случае он не понадобился. Если ваши интеграции ловят 429 — начните со счёта единиц, а не запросов, и с вопроса, кто ходит мимо очереди.