Яндекс Маркет Partner API API

Отрасль: Маркетплейсы. Актуально на 2026-10-24.

API Яндекс Маркета для продавцов: управление каталогом товаров и карточками, цены и остатки, обработка заказов и возвратов, отгрузки, отчёты, чаты с покупателями, отзывы и вопросы, акции и буст продаж. Методы работают либо на уровне кабинета (businessId), либо на уровне магазина (campaignId). Официальная OpenAPI-спецификация опубликована на GitHub.

Сценарии

Забирать новые заказы и подтверждать их

Обработка заказов FBS: получить новые заказы из всех магазинов кабинета и сообщить Маркету, что заказ собран.

  1. Создай Api-Key-токен в кабинете продавца с доступом inventory-and-order-processing. Узнай businessId (кабинет) и campaignId (магазин): GET /v2/campaigns.
  2. Забирай новые заказы: POST /v1/businesses/{businessId}/orders с statuses = ["PROCESSING"] и substatuses = ["STARTED"] — это заказы, которые ждут сборки. Листай страницы через pageToken из ответа. Старый GET /v2/campaigns/{campaignId}/orders отключается 12.04.2027 — сразу пиши на новом.
  3. Собрал заказ — переведи его на следующий этап: PUT /v2/campaigns/{campaignId}/orders/{orderId}/status с order.status = PROCESSING и order.substatus = READY_TO_SHIP.
  4. Если товара нет, отмени заказ тем же методом: status = CANCELLED с причиной в substatus, например SHOP_FAILED.
  5. Тестовые заказы приходят с fake: true — не отправляй их в учётную систему.
H="Api-Key: $YM_TOKEN"

# Новые заказы во всех магазинах кабинета
curl -X POST "https://api.partner.market.yandex.ru/v1/businesses/<businessId>/orders?limit=50" \
  -H "$H" -H 'Content-Type: application/json' \
  -d '{"statuses": ["PROCESSING"], "substatuses": ["STARTED"]}'

# Заказ собран
curl -X PUT "https://api.partner.market.yandex.ru/v2/campaigns/<campaignId>/orders/<orderId>/status" \
  -H "$H" -H 'Content-Type: application/json' \
  -d '{"order": {"status": "PROCESSING", "substatus": "READY_TO_SHIP"}}'

Передать остатки со своего склада

Синхронизировать остатки из учётной системы, чтобы Маркет не продавал отсутствующий товар.

  1. Нужен campaignId магазина (из GET /v2/campaigns) и токен с доступом inventory-and-order-processing.
  2. Отправь остатки: PUT /v2/campaigns/{campaignId}/offers/stocks — в skus для каждого товара твой SKU (sku) и items с count. SKU в одном запросе не должны повторяться.
  3. Передавай остатки сразу после изменения, а не раз в сутки: лимит щедрый — 100 000 запросов в минуту.
  4. Нулевой count снимает товар с продажи, пока его нет на складе.
curl -X PUT "https://api.partner.market.yandex.ru/v2/campaigns/<campaignId>/offers/stocks" \
  -H "Api-Key: $YM_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
        "skus": [
          {"sku": "MUG-WHITE-330", "items": [{"count": 25}]},
          {"sku": "MUG-BLACK-330", "items": [{"count": 0}]}
        ]
      }'

Обновить цены во всех магазинах

Установить единую цену товара сразу для всех магазинов кабинета — с зачёркнутой ценой для скидки.

  1. Нужен businessId и токен с доступом pricing.
  2. Отправь цены: POST /v2/businesses/{businessId}/offer-prices/updates — в offers для каждого товара offerId (твой SKU) и price с value и currencyId = RUR.
  3. Чтобы показать скидку, передай discountBase — зачёркнутую цену, целым числом и больше value.
  4. offerId в одном запросе должны быть уникальны. Лимит — 10 000 запросов в минуту.
curl -X POST "https://api.partner.market.yandex.ru/v2/businesses/<businessId>/offer-prices/updates" \
  -H "Api-Key: $YM_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
        "offers": [
          {"offerId": "MUG-WHITE-330", "price": {"value": 790, "currencyId": "RUR", "discountBase": 990}}
        ]
      }'

Добавить товар в каталог

Завести новый товар: выбрать категорию Маркета, заполнить характеристики и отправить в каталог.

  1. Найди категорию: POST /v2/categories/tree вернёт дерево категорий Маркета с id. Характеристики выбранной категории — в методе /v2/category/{categoryId}/parameters.
  2. Отправь товар: POST /v2/businesses/{businessId}/offer-mappings/update — в offerMappings[].offer: offerId, name (тип + бренд + модель + особенности), marketCategoryId, pictures, vendor, barcodes, description, weightDimensions и parameterValues.
  3. Ответ 200 ещё не значит, что товар принят: при ошибке хотя бы в одном товаре не уходит ни один товар из запроса. Смотри ошибки и предупреждения в теле ответа.
  4. Проверь статус карточки: POST /v2/businesses/{businessId}/offer-mappings с offerIds — в ответе статус карточки и категория.
  5. Не используй устаревшие offer.category и offer.params — они отключаются 12.10.2026; вместо них marketCategoryId и parameterValues.
curl -X POST "https://api.partner.market.yandex.ru/v2/businesses/<businessId>/offer-mappings/update" \
  -H "Api-Key: $YM_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
        "offerMappings": [{
          "offer": {
            "offerId": "MUG-WHITE-330",
            "name": "Кружка керамическая Моя марка 330 мл белая",
            "marketCategoryId": <id категории>,
            "vendor": "Моя марка",
            "pictures": ["https://example.ru/img/mug-white.jpg"],
            "barcodes": ["4601234567893"],
            "description": "Белая керамическая кружка объёмом 330 мл.",
            "weightDimensions": {"length": 12, "width": 9, "height": 10, "weight": 0.4}
          }
        }]
      }'

Выгрузить отчёт по заказам за период

Финансовая сверка и аналитика: отчёт по всем заказам кабинета за нужные даты.

  1. Запусти генерацию: POST /v2/reports/united-orders/generate с businessId, dateFrom и dateTo (период не больше года); format — формат файла.
  2. Отчёт готовится асинхронно, в ответе — reportId. Генерировать можно примерно раз в 1–2 минуты.
  3. Опрашивай GET /v2/reports/info/{reportId} с паузой, пока статус не станет готовым, и скачай файл по ссылке из ответа.
REPORT=$(curl -s -X POST "https://api.partner.market.yandex.ru/v2/reports/united-orders/generate?format=FILE" \
  -H "Api-Key: $YM_TOKEN" -H 'Content-Type: application/json' \
  -d '{"businessId": <businessId>, "dateFrom": "2026-09-01", "dateTo": "2026-09-30"}' | jq -r .result.reportId)

curl "https://api.partner.market.yandex.ru/v2/reports/info/$REPORT" -H "Api-Key: $YM_TOKEN"

Базовые URL

Авторизация

Тип: API-ключ

Основной способ — API-ключ (Api-Key-токен) из кабинета продавца в заголовке Api-Key. Также поддерживается OAuth-токен Яндекса со скоупом market:partner-api (авторизация через https://oauth.yandex.ru/authorize). Доступ к методам определяется доступами токена: all-methods, all-methods:read-only, inventory-and-order-processing, offers-and-cards-management, pricing, communication, finance-and-accounting, settings-management, promotion и их read-only вариантами.

curl https://api.partner.market.yandex.ru/v2/campaigns -H "Api-Key: <token>"

Методы

GET /v2/campaigns — Список магазинов пользователя

Для Api-Key-токена возвращает магазины кабинета, для которого выдан токен. Отсюда берут campaignId и businessId.

Параметр Где Тип Обяз. Описание
pageToken query string нет Идентификатор страницы результатов
limit query integer нет Количество значений на странице

POST /v2/auth/token — Информация о токене авторизации

Возвращает сведения о текущем токене и его доступах.

POST /v1/businesses/{businessId}/orders — Информация о заказах в кабинете

Заказы по всем магазинам кабинета; рекомендуемая замена GET /v2/campaigns/{campaignId}/orders.

Параметр Где Тип Обяз. Описание
businessId path integer да Идентификатор кабинета
pageToken query string нет Страница результатов
limit query integer нет Количество значений на странице
orderIds body array нет ID заказов
externalOrderIds body array нет Внешние ID заказов
campaignIds body array нет ID магазинов
statuses body array нет Статусы заказов
substatuses body array нет Этапы обработки или причины отмены
programTypes body array нет Модели работы магазина
dates body object нет Фильтр по датам
fake body boolean нет true — тестовые заказы
waitingForCancellationApprove body boolean нет Только DBS: заказы с запросом на отмену
sourcePlatforms body array нет Площадки-источники заказов

GET /v2/campaigns/{campaignId}/orders — Информация о заказах в магазине

Устаревает: деградация с 18.01.2027, отключение 12.04.2027; замена — POST /v1/businesses/{businessId}/orders.

Параметр Где Тип Обяз. Описание
campaignId path integer да Идентификатор магазина
orderIds query array нет ID заказов; не сочетать с другими фильтрами
status query array нет Статус: CANCELLED, DELIVERED, DELIVERY, PROCESSING и др.
substatus query array нет Этап обработки или причина отмены
fromDate query string нет Дата оформления от, ДД-ММ-ГГГГ
toDate query string нет Дата оформления до, ДД-ММ-ГГГГ
updatedAtFrom query string нет Дата обновления от, ISO 8601
updatedAtTo query string нет Дата обновления до, ISO 8601
fake query boolean нет Тестовые заказы
pageToken query string нет Страница результатов
limit query integer нет Количество значений на странице

GET /v2/campaigns/{campaignId}/orders/{orderId} — Информация об одном заказе

Параметр Где Тип Обяз. Описание
campaignId path integer да Идентификатор магазина
orderId path integer да Идентификатор заказа

PUT /v2/campaigns/{campaignId}/orders/{orderId}/status — Изменение статуса заказа

Возвращает обновлённую информацию о заказе. Для нескольких заказов — POST /v2/campaigns/{campaignId}/orders/status-update.

Параметр Где Тип Обяз. Описание
campaignId path integer да Идентификатор магазина
orderId path integer да Идентификатор заказа
order.status body string да Новый статус заказа
order.substatus body string нет Этап обработки (PROCESSING) или причина отмены (CANCELLED)
order.delivery body object нет Информация о доставке

POST /v2/businesses/{businessId}/offer-mappings — Информация о товарах в каталоге

Список товаров, их категории на Маркете и характеристики.

Параметр Где Тип Обяз. Описание
businessId path integer да Идентификатор кабинета
pageToken query string нет Страница результатов
limit query integer нет Количество значений на странице
language query string нет Язык name и description, по умолчанию RU
offerIds body array нет SKU товаров
cardStatuses body array нет Статусы карточек
categoryIds body array нет Категории на Маркете
vendorNames body array нет Бренды
tags body array нет Теги
archived body boolean нет true — товары в архиве

POST /v2/businesses/{businessId}/offer-mappings/update — Добавление и изменение товаров

Параметр Где Тип Обяз. Описание
businessId path integer да Идентификатор кабинета
offerMappings body array да Товары для добавления или обновления
offerMappings[].offer.offerId body string да Ваш SKU
offerMappings[].offer.name body string нет Название: тип + бренд + модель + особенности
offerMappings[].offer.marketCategoryId body integer нет Категория на Маркете
offerMappings[].offer.pictures body array нет Ссылки на изображения; первое — основное
offerMappings[].offer.vendor body string нет Бренд
offerMappings[].offer.barcodes body array нет Штрихкоды (EAN-13, EAN-8, UPC-A, UPC-E)
offerMappings[].offer.description body string нет Описание
offerMappings[].offer.weightDimensions body object нет Габариты упаковки и вес
offerMappings[].offer.parameterValues body array нет Характеристики; передаются вместе с marketCategoryId
offerMappings[].offer.basicPrice body object нет Цена с указанием скидки
offerMappings[].mapping body object нет Подходящая карточка на Маркете
onlyPartnerMediaContent body boolean нет Использовать только ваши данные о товаре

POST /v2/businesses/{businessId}/offer-prices/updates — Установка цен для всех магазинов

Параметр Где Тип Обяз. Описание
businessId path integer да Идентификатор кабинета
offers body array да Товары с ценами; offerId уникальны в запросе
offers[].offerId body string да Ваш SKU
offers[].price.value body number да Цена
offers[].price.currencyId body string да Валюта, например RUR
offers[].price.discountBase body number нет Зачёркнутая цена (целое число)
offers[].price.minimumForBestseller body number нет Минимальная цена для акции «Бестселлеры Маркета»

PUT /v2/campaigns/{campaignId}/offers/stocks — Передача остатков

Параметр Где Тип Обяз. Описание
campaignId path integer да Идентификатор магазина
skus body array да Остатки; sku уникальны в запросе
skus[].sku body string да Ваш SKU
skus[].items body array да Информация об остатках
skus[].items[].count body integer да Количество доступного товара
skus[].items[].updatedAt body string нет Дата и время обновления остатков

GET /v2/campaigns/{campaignId}/returns — Список невыкупов и возвратов

Параметр Где Тип Обяз. Описание
campaignId path integer да Идентификатор магазина

POST /v2/categories/tree — Дерево категорий

Возвращает дерево категорий Маркета. Характеристики категории — POST /v2/category/{categoryId}/parameters.

POST /v2/reports/united-orders/generate — Отчёт по заказам

Запускает асинхронную генерацию отчёта; результат забирают через GET /v2/reports/info/{reportId}.

Параметр Где Тип Обяз. Описание
format query string нет Формат отчёта
language query string нет Язык отчёта
businessId body integer да Идентификатор кабинета
dateFrom body string да Начало периода, ГГГГ-ММ-ДД
dateTo body string да Конец периода, максимум 1 год
campaignIds body array нет Магазины для отчёта
promoId body string нет Акция

GET /v2/reports/info/{reportId} — Получение отчёта

Параметр Где Тип Обяз. Описание
reportId path string да Идентификатор отчёта

POST /v2/businesses/{businessId}/chats/message — Отправка сообщения в чат

Сообщение покупателю в чате. Доступ communication.

Нюансы

Ошибки

Код Описание
400 Запрос содержит неправильные данные
401 В запросе не указаны данные для авторизации
403 Данные для авторизации неверны или доступ к ресурсу запрещён
404 Запрашиваемый ресурс не найден
420 Превышено ограничение на доступ к ресурсу
423 К ресурсу нельзя применить указанный метод
500 Внутренняя ошибка Маркета

Ограничения

Лимиты задаются для каждого метода отдельно, например:

Источники


Если этого недостаточно — официальная документация: https://yandex.ru/dev/market/partner-api/doc/ JSON: https://mcp-everything.ru/api/integrations/yandex-market. MCP: https://mcp-everything.ru/mcp