Ограничения для запросов

Ограничения для запросов к API Яндекс Маркета для продавцов делятся на следующие типы:

  • глобальные ограничения (ограничения на количество одновременных запросов);

  • ресурсные ограничения (ограничения на количество запросов к одному и тому же ресурсу за продолжительный период времени, например, за сутки);

  • функциональные ограничения (ограничения на количество передаваемых или возвращаемых данных в одном запросе).

Глобальные ограничения

Действуют на количество одновременных (параллельных) запросов. Разрешается выполнять не более четырёх одновременных запросов.

Лимит применяется к конкретной сущности в зависимости от URL запроса:

  • для запросов вида /campaigns/{campaignId}/... — к магазину (campaignId);
  • для запросов вида /businesses/{businessId}/... — к кабинету (businessId);
  • для остальных запросов:
    • при авторизации по Api-Key-токену — к кабинету (businessId), в котором был создан токен;
    • при авторизации по OAuth-токену — к сотруднику (userId), на имя которого был выпущен токен.

При превышении ограничения сервер возвращает специальный HTTP-код 420 Enhance Your Calm с поясняющим сообщением:

Hit rate limit of 4 parallel requests for campaignId 12345

Ресурсные ограничения

Действуют на объем запросов к одному и тому же ресурсу API за продолжительный период времени с одного логина.

Для разных методов ограничения действуют либо на количество запросов, либо на суммарный объем передаваемых или возвращаемых данных. Конкретный тип ограничения и его значение указаны на страницах соответствующих методов.

В каждом ответе на запрос сервер возвращает специальные HTTP-заголовки, в которых указывается состояние ресурсного ограничения для сущности:

  • заголовок X-RateLimit-Resource-Limit содержит числовое значение ограничения;

  • заголовок X-RateLimit-Resource-Until содержит дату, до которой действует ограничение, в формате RFC822 (например, Thu, 10 Jul 2018 00:42:42 GMT);

  • заголовок X-RateLimit-Resource-Remaining содержит числовое значение объема запросов к данному ресурсу, оставшихся до превышения ограничения.

Уменьшение ресурсного лимита

Ресурсный лимит уменьшается на стоимость запроса. Стоимость зависит от типа ограничения:

  • если ограничение по количеству запросов — стоимость равна 1 (каждый запрос уменьшает лимит на единицу);
  • если ограничение по объему данных — стоимость равна размеру коллекции в запросе или ответе.

Правила уменьшения:

  • при успешных ответах (2xx) ресурсный лимит уменьшается;
  • при ошибках клиента (4xx, например 400 Bad Request или 404 Not Found) ресурсный лимит также уменьшается;
  • при ошибках со стороны Маркета (5xx, включая 500) ресурсный лимит не уменьшается.

При превышении ограничения сервер отдает специальный HTTP-код 420 Enhance Your Calm с поясняющим сообщением, например:

Hit rate limit of 10000 points per 1 day for resource /regions/{regionId}.json for userId 67890

Функциональные ограничения

Действуют на количество передаваемых или возвращаемых данных для ресурса за один запрос. Ограничения индивидуальны для каждого ресурса, их значения указаны в описаниях самих методов.

Кроме того, действует общее для всех запросов ограничение: максимальный объем тела запроса составляет 512 КБ. Если объем получается больше, разбейте запрос на несколько.

При превышении ограничения сервер отдает специальный HTTP-код 400 Bad Request с поясняющим сообщением.