Типобезопасные TypeScript-клиенты для Seller API российских маркетплейсов.
SDK поддерживает Ozon Seller API, Wildberries API и Yandex Market Partner API. Можно установить только нужную площадку или использовать общий пакет.
@seller-sdk/ozon— установка, настройка и примеры Ozon; полный API Reference.@seller-sdk/wb— установка, настройка и примеры Wildberries; полный API Reference.@seller-sdk/ym— установка, настройка и примеры Яндекс Маркета; полный API Reference.
Для проекта, который работает только с Ozon:
npm i @seller-sdk/ozonimport { OzonClient, OzonValues } from "@seller-sdk/ozon";
const ozon = new OzonClient({
clientId: process.env.OZON_CLIENT_ID!,
apiKey: process.env.OZON_API_KEY!,
});
const products = await ozon.products.list({
filter: {
visibility: OzonValues.ProductListVisibility.All,
},
limit: 100,
});Для проекта, который работает только с Wildberries:
npm i @seller-sdk/wbimport { WbClient, WbValues } from "@seller-sdk/wb";
const wb = new WbClient({ token: process.env.WB_API_TOKEN! });
const connection = await wb.general.getPing();
const tariffs = await wb.general.getTariffConstructorOptions({
query: { locale: WbValues.GetV1TariffConstructorOptionsLocale.Ru },
});Для проекта, который работает только с Яндекс Маркетом:
npm i @seller-sdk/ymimport { YmClient, YmValues } from "@seller-sdk/ym";
const ym = new YmClient({ apiKey: process.env.YM_API_KEY! });
const orders = await ym.orders.getBusinessOrders({
path: { businessId: 123456 },
body: {
statuses: [YmValues.OrdersOrderStatusType.Processing],
},
});Для приложения, которому нужна единая точка входа:
npm i seller-sdkimport { Marketplace, SellerClient } from "seller-sdk";
const seller = new SellerClient({
marketplace: Marketplace.Ozon,
credentials: {
clientId: process.env.OZON_CLIENT_ID!,
apiKey: process.env.OZON_API_KEY!,
},
});
const roles = await seller.ozon.access.getRoles();Использовать одновременно seller-sdk и focused package не требуется.
- Все 461 операция Ozon распределены по предметным областям.
- Все 286 операций WB распределены по 13 официальным разделам.
- Все 165 операций Yandex Market распределены по официальным предметным tags.
- TypeScript подсказывает обязательные поля, ограничения и закрытые наборы значений.
- Ответы проверяются во время выполнения через SafeShape.
- Версионные семейства имеют рекомендуемые методы без суффикса версии.
- Тайм-ауты, отмена, безопасные повторы и метаданные ответа настраиваются единообразно.
- Для распространённых списков есть ленивые async-итераторы.
- Новые методы Ozon можно временно вызвать через fixed-origin
rawRequest.
В прикладном коде используйте имя без версии. SDK направит вызов на актуальный поддерживаемый контракт:
await ozon.warehouses.listWarehouses({ limit: 100 }); // сейчас v2
await ozon.finance.listFinanceTransactions(input); // сейчас v3
await wb.general.getNews({ query: { from: "2026-08-01" } }); // сейчас v2Явную версию используйте только для намеренной фиксации контракта:
await ozon.warehouses.listWarehousesV2({ limit: 100 });
await wb.general.getV2News({ query: { from: "2026-08-01" } });В Yandex Market официальные operationId текущего snapshot уже не содержат
суффиксов версии. Например, /v1/businesses/{businessId}/orders вызывается как
ym.orders.getBusinessOrders(...); отдельный versionless alias не требуется.
Если Ozon пометил контракт устаревшим, IDE зачеркнёт и версионный метод, и его
алиас. Например, listFinanceTransactions устаревает 8 сентября 2026 года;
для нового кода используйте finance.accruals.
Все клиенты поддерживают одинаковые настройки тайм-аутов, общего дедлайна, повторов, отмены и наблюдения за ответами.
const ozon = new OzonClient(credentials, {
timeoutMs: 30_000,
deadlineMs: 60_000,
maxRetries: 2,
onResponse({ operationId, status, requestId, attempt, willRetry }) {
console.info({ operationId, status, requestId, attempt, willRetry });
},
});
await ozon.products.list(input, {
timeoutMs: 10_000,
maxRetries: 1,
signal: abortController.signal,
});const wb = new WbClient(
{ token: process.env.WB_API_TOKEN! },
{
environment: "production",
timeoutMs: 30_000,
deadlineMs: 60_000,
maxRetries: 2,
onResponse({ operationId, status, requestId, attempt, willRetry }) {
console.info({ operationId, status, requestId, attempt, willRetry });
},
},
);
await wb.general.getNews(
{ query: { from: "2026-08-01", fromID: 42 } },
{
timeoutMs: 10_000,
deadlineMs: 30_000,
maxRetries: 1,
signal: abortController.signal,
},
);maxRetries задаёт количество повторов после первой попытки. SDK повторяет
только безопасные операции чтения: GET и методы, отмеченные в Swagger как
x-readonly-method. Мутации не повторяются автоматически независимо от
maxRetries.
const ym = new YmClient(
{ apiKey: process.env.YM_API_KEY! },
{
timeoutMs: 30_000,
deadlineMs: 60_000,
maxRetries: 2,
onResponse({ operationId, status, requestId, attempt, willRetry }) {
console.info({ operationId, status, requestId, attempt, willRetry });
},
},
);
await ym.orders.getBusinessOrders(
{
path: { businessId: 123456 },
body: { fake: true },
},
{
timeoutMs: 10_000,
deadlineMs: 30_000,
signal: abortController.signal,
},
);Yandex Market использует те же timeout/deadline/request options; автоматически
повторяются только GET, а HTTP 420 возвращается как RateLimitError. Полное
описание аутентификации, businessId/campaignId, всех 36 областей API,
YmValues, пагинации, тестовых заказов, бинарных ответов и rawRequest
находится в README focused-пакета.
for await (const product of ozon.products.listAll({
filter: {},
limit: 100,
})) {
console.log(product.offer_id);
}listPages() возвращает страницы, а listAll() — отдельные элементы без
накопления всего ответа в памяти. Готовые итераторы есть для товаров, FBO и FBS.
import { toSellerSdkErrorDetails } from "@seller-sdk/ozon";
try {
await ozon.products.list({ filter: {}, limit: 100 });
} catch (error) {
console.error(toSellerSdkErrorDetails(error));
}toSellerSdkErrorDetails() одинаково работает для Ozon, WB, YM и
umbrella-пакета.
Результат содержит стабильные code, message, operationId, HTTP status,
request ID, API code/message и validation issues, когда они доступны. В него не
включаются stack, cause, ключ API, Client-Id и заголовки авторизации.
- Node.js 20.10 или новее;
- ESM;
- TypeScript рекомендуется, но собранный JavaScript также поддерживается;
- секреты продавца должны использоваться только на сервере.
Поддержка браузера не заявляется: ключи Seller API нельзя передавать в клиентское приложение.
- Публичный API
- Полный справочник Ozon
- Полный справочник Wildberries
- Полный справочник Yandex Market
- Источник контрактов Yandex Market
- Архитектура
- Источник контрактов Ozon
- Процесс добавления endpoint
- История изменений
- Политика безопасности
pnpm install
pnpm release:checkrelease:check проверяет форматирование, сгенерированные файлы, lint,
TypeScript, тесты, сборку, состав tarball и установку в чистый consumer-проект.
MIT © Seller SDK contributors.
Seller SDK — независимый open-source проект. Он не связан с Ozon, Wildberries или Яндексом, не одобрен и не спонсируется ими либо другими маркетплейсами. Названия маркетплейсов используются только для обозначения совместимости с их API.