---
slug: "yandex-market"
name: "Яндекс Маркет Partner API"
vendor: "Яндекс"
industry: "marketplaces"
docsUrl: "https://yandex.ru/dev/market/partner-api/doc/"
version: 2
updatedAt: "2026-10-24"
---

# Яндекс Маркет Partner 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 — не отправляй их в учётную систему.

```bash
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 снимает товар с продажи, пока его нет на складе.

```bash
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 запросов в минуту.

```bash
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.

```bash
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} с паузой, пока статус не станет готовым, и скачай файл по ссылке из ответа.

```bash
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

- Боевой: `https://api.partner.market.yandex.ru`

## Авторизация

Тип: 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`.

## Нюансы

- Пагинация — по `pageToken` и `limit`; параметры `page` и `pageSize` устарели и отключаются с 05.10.2026.
- `GET /v2/campaigns/{campaignId}/orders` отключается 12.04.2027 — переходите на `POST /v1/businesses/{businessId}/orders`.
- Параметры `offer.category`, `offer.params`, `customsCommodityCode` устарели (отключение 12.10.2026); используйте `marketCategoryId`, `parameterValues`, `commodityCodes`.
- При ошибке хотя бы в одном товаре `offer-mappings/update` не отправляет в каталог ни один товар из запроса; ответ `200` сам по себе не означает, что товары прошли проверку.
- Отчёты генерируются асинхронно: сначала `.../generate`, потом опрос `GET /v2/reports/info/{reportId}`.
- Тестовые заказы отмечены `fake: true`.
- У метода `GET /v2/campaigns/{campaignId}/orders` ограничение — до 6 параллельных запросов.

## Ошибки

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

## Ограничения

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

- Заказы (`GET /v2/campaigns/{campaignId}/orders`, `POST /v1/businesses/{businessId}/orders`), смена статуса заказа — 10 000 запросов в час.
- `offer-mappings` (чтение) — 100 запросов в минуту; `offer-mappings/update` — 5 000 в минуту.
- Цены `offer-prices/updates` — 10 000 в минуту.
- Остатки `PUT .../offers/stocks` — 100 000 в минуту; `POST /v3/businesses/{businessId}/offers/stocks/update` — 50 в минуту.
- Возвраты — 5 000 запросов в час.
- Сообщения в чат — 1 000 в час.
- Генерация отчёта по заказам — 1 запрос в 1–2 минуты.

## Источники

- [OpenAPI-спецификация (GitHub)](https://github.com/yandex-market/yandex-market-partner-api)
- [Документация API](https://yandex.ru/dev/market/partner-api/doc/)

---

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