---
title: "Завести магазин Ozon"
method: POST
path: "/api/v1/marketplace/ozon/stores"
tags: ["Marketplace stores"]
---

# Завести магазин Ozon

`POST /api/v1/marketplace/ozon/stores`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/marketplace/ozon/stores`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)
  - HTTP bearer

Создаёт управляемое подключение Ozon. MPTrack назначает external_id сам; ключи и токены никогда не возвращаются в ответе.

## Headers

- `X-Tenant` string, required
- `Idempotency-Key` string, required

## Request body

- MarketplaceStoreInput: Тело создания управляемого подключения. Платформу задаёт маршрут, а external_id назначает MPTrack (у Ламоды — кабинет). Для Ozon нужны ozon_client_id и ozon_api_key, для Wildberries — wb_token, для Яндекс Маркета — ym_api_key (ym_business_id кабинет узнаёт по ключу сам; нужен, только когда ключ видит несколько бизнесов — иначе 422 marketplace.yandex_business_ambiguous), для Ламоды — lamoda_client_id и lamoda_client_secret.
  - `name` string, required
  - `tax_source` 'policy' | 'store': Источник налога магазина: policy — из учётной политики юрлица магазина (tax_percent не нужен и не сохраняется), store — ставка tax_percent вручную. Без поля: store, если передан tax_percent (прежний контракт), иначе policy. Иное значение — 400 marketplace.store_tax_source_invalid
  - `tax_percent` string: Ручная ставка налога в процентах при источнике store; пустая строка сохраняется как ноль
  - `is_active` boolean
  - `has_fbs` boolean
  - `has_jam` boolean: Используется для Wildberries
  - `article_size_separator` '' | '-' | '/' | '_': Правило именования артикула Ozon: «БАЗА<разделитель>РАЗМЕР». Список закрыт; пустая строка означает «правила нет». Официальные поля размера площадки всегда старше этого правила
  - `ozon_client_id` string
  - `ozon_api_key` string
  - `ozon_pf_client_id` string
  - `ozon_pf_client_secret` string
  - `wb_token` string: Рекомендуется персональный токен класса personal; значение не возвращается
  - `ym_business_id` string: Необязателен: без него кабинет берёт Business ID из магазинов, видных ключу. Строкой; ERP проверяет числовой идентификатор и преобразует его для MPTrack
  - `ym_api_key` string
  - `lamoda_client_id` string: client_id Ламоды; он же отпечаток аккаунта — второй магазин с тем же client_id не заводится
  - `lamoda_client_secret` string
  - `proxy` string: Необязательный адрес proxy; значение не возвращается
  - `business_id` string, uuid

## Response `201`

Сохранённый магазин

- MarketplaceStore: Магазин маркетплейса в кабинете. Форма одна для Ozon, Wildberries, Яндекс Маркета и Ламоды — их различает только поле platform. Ключи, токены и proxy в ответ не попадают; вместо них возвращаются безопасные признаки настройки. Магазин Ламоды живёт только в кабинете — сборщик её пока не грузит, external_id у него отрицательный.
  - `id` string, uuid, required
  - `platform` 'ozon' | 'wildberries' | 'yandex' | 'lamoda', required: Платформа задаётся маршрутом, а не телом запроса
  - `name` string, required
  - `external_id` integer: Внутренний идентификатор MPTrack; назначается после передачи настройки и не вводится пользователем. У магазина Ламоды (сборщик её не грузит) номер назначает кабинет — он отрицательный и не меньше −2^53
  - `tax_percent` string, required: Процент налога с того, что заплатил покупатель, на сегодня — им считают ОПиУ, декомпозиция, воронка и цены; decimal строкой. При источнике policy выводится из учётной политики юрлица магазина, при store — ручная ставка магазина
  - `tax_source` 'policy' | 'store', required: Источник налога на сегодня: policy — система налогообложения юрлица магазина из учётной политики, store — ставка, заданная в магазине вручную (переопределение)
  - `tax` MarketplaceStoreTax: Налог магазина на сегодня с объяснением. Процент от выручки выводится из учётной политики только у режимов с налогом от дохода (УСН и АУСН «доходы», НПД); у ОСНО, УСН/АУСН «доходы минус расходы» и ЕСХН налог берётся с прибыли юрлица и считается в разделе «Налоги», с выручки магазина его нет
    - `source` 'policy' | 'store', required: Источник: policy — учётная политика юрлица, store — ставка магазина вручную
    - `state` 'manual' | 'policy' | 'profit_based' | 'fixed' | 'not_set' | 'no_company', required: manual — ручная ставка магазина; policy — процент из системы налогообложения юрлица; profit_based — режим юрлица берёт налог с прибыли; fixed — патент, фиксированная стоимость; not_set — у юрлица не задана система налогообложения или её ставка; no_company — у магазина не выбрано юрлицо
    - `percent` string, required: Процент налога с выручки на сегодня, decimal строкой
    - `company_id` string, uuid, required
    - `company_name` string: Название юрлица
    - `regime` 'osno' | 'usn_income' | 'usn_income_expense' | 'ausn_income' | 'ausn_income_expense' | 'eshn' | 'psn' | 'npd': Система налогообложения юрлица на сегодня
    - `regime_rate` string: Ставка системы налогообложения в процентах, как в учётной политике
    - `regime_valid_from` string, date: С какого дня действует система налогообложения юрлица
  - `cost` MarketplaceStoreCost: Себестоимость магазина на сегодня для списка магазинов: действующая версия учётной настройки, метод оценки склада юрлица и запуск склада площадки. Поля нет — источник себестоимости не задан
    - `source` 'manual' | 'stock', required: manual — ставки в товарах маркетплейса; stock — из складского учёта
    - `valid_from` string, date, required: С какого дня действует источник
    - `stock_method` 'fifo' | 'moving_average': Метод оценки склада юрлица; поля нет — складская политика не настроена
    - `stock_from` string, date: Только у stock: с какого дня склад площадки ведётся в учёте
    - `stock_opened_on` string, date: Только у stock: день запуска склада площадки; поля нет — склад не запущен, недели ждут запуска
  - `is_active` boolean, required
  - `has_fbs` boolean, required: Для подключения включена загрузка схемы FBS
  - `has_jam` boolean, required: Для подключения Wildberries включена аналитика «Джем»
  - `credentials_configured` boolean, required: Есть хотя бы один сохранённый API-реквизит
  - `ozon_client_id_set` boolean, required
  - `ozon_api_key_set` boolean, required
  - `ozon_pf_client_id_set` boolean, required
  - `ozon_pf_client_secret_set` boolean, required
  - `wb_token_set` boolean, required
  - `ym_business_id_set` boolean, required
  - `ym_api_key_set` boolean, required
  - `lamoda_client_id_set` boolean, required
  - `lamoda_client_secret_set` boolean, required
  - `proxy_set` boolean, required
  - `config_sync_status` 'not_configured' | 'synced' | 'error', required: Состояние передачи настройки в MPTrack
  - `config_synced_at` string, date-time
  - `collector_local_only` boolean: Стенд не боевой: магазин у сборщика общий с боевым стендом, поэтому выключение и удаление меняют только этот кабинет, а загрузки у сборщика продолжаются
  - `credentials_withheld` boolean: Реквизиты магазина сняты при копии кабинета с другого стенда: шифроблоб не переносится, на этом стенде реквизиты не заданы. Номер магазина у сборщика сохранён; признак уходит, когда ключ введут здесь заново
  - `token_class` 'basic' | 'personal' | 'test' | 'service' | 'unknown': Безопасная классификация токена Wildberries без раскрытия токена: basic — ограниченный базовый, personal — персональный, test — тестовый, service — сервисный, unknown — тип не определён
  - `credential` object: Несекретные сведения о ключе площадки: тип, категории доступа или роли, только чтение и срок действия. Wildberries — разобрано из самого токена; Ozon — роли и срок по методу Ozon /v1/roles, только при key_info=1
    - `kind` 'basic' | 'personal' | 'test' | 'service' | 'unknown' | 'ozon', required: Тип ключа по полю acc токена Wildberries; ozon — ключ Seller API Ozon
    - `roles` string[]: Роли ключа Ozon названиями площадки
    - `scopes` string[], required: Категории методов, к которым у ключа есть доступ
    - `read_only` boolean, required: Ключ только на чтение
    - `expires_at` string, date-time: Когда ключ перестанет работать
  - `write_key` MarketplaceStoreWriteKey: Признаки ключа магазина на запись в площадку (марки в сборочные задания FBS); сам ключ не возвращается
    - `set` boolean, required: Ключ задан
    - `mask` string: Последние 4 символа токена или Api-Key
    - `kind` 'basic' | 'personal' | 'test' | 'service' | 'unknown': Тип токена Wildberries
    - `scopes` string[], required: Категории токена Wildberries
    - `read_only` boolean, required: Токен только на чтение
    - `ability` 'ready' | 'no_key' | 'no_write_scope' | 'unchecked', required: Можно ли передавать марки: ready — можно, no_key — ключа нет, no_write_scope — нет права записи, unchecked — не проверено
    - `set_by` integer, nullable, required: Кто задал ключ
    - `set_at` string, date-time, nullable, required: Когда задан ключ
    - `checked_at` string, date-time, nullable, required: Когда ключ проверяли
    - `check_result` 'ready' | 'no_write_scope' | 'rejected' | 'unchecked' | 'unavailable': Итог последней проверки без записи
    - `last_used_at` string, date-time, nullable, required: Когда ключом последний раз передавали марки
    - `last_result` 'not_sent' | 'sent' | 'accepted' | 'rejected': Итог последней передачи марок
    - `last_error_code` string: Код отказа последней передачи
  - `connection_status` 'not_checked' | 'pending' | 'disabled' | 'ok' | 'warning' | 'error', required: Безопасное состояние подключения в ERP: not_checked — проверка ещё не запускалась, pending — MPTrack проверяет реквизиты или запускает первую загрузку, disabled — загрузки отключены, ok — подключение работает, warning — требуется внимание, error — подключение не работает. Сырые статусы и тексты MPTrack не публикуются
  - `connection_error_code` string: Безопасный стабильный код состояния подключения; сырой текст ошибки не публикуется
  - `last_etl_at` string, date-time: Момент последней успешной загрузки этого подключения
  - `initial_load_ready_at` string, date-time, nullable: Когда первичная загрузка магазина подтвердилась журналом сборщика. null — карточки, остатки или заказы ещё не загружены, и решения разбора и ввод начального остатка закрыты; подробности — marketplaceGetStoreInitialLoad
  - `article_size_separator` '' | '-' | '/' | '_': Разделитель базы и размера в артикуле продавца, объявленный владельцем магазина. Пустая строка — правило не объявлено, и размер берётся только из полей площадки. Применяется на Ozon, где каждый размер продаётся своим артикулом
  - `catalog_auto_create` boolean, nullable: Новые карточки площадки без единого совпадения загрузка каталога заводит товарами сама (true) или оставляет новыми до решения человека (false). null — решение ещё не принято: первая загрузка включит автосоздание только в кабинете без активных товаров и запишет решение. Применяется к Ozon и Wildberries
  - `business_id` string, uuid

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `409`: На Ozon уже заведено 10 подключений; код marketplace_store_limit
- `422`: Запрос разобран, но бизнес-значение недопустимо
- `503`: Внешний банк, справочник или контур подключений временно недоступен

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/a99574d597cc?raw)
