Metadata-Version: 2.5
Name: ozon-sdk
Version: 0.2.0
Summary: Асинхронный клиент для Ozon Seller API, Performance API, FBP API, ОРД API, Comms API, Ozon Delivery API, Flex API, Logistic Platform API, Retail API, Statistics API, Applications API и Export API Logistic Platform
Project-URL: Documentation, https://github.com/serdukow/ozon-sdk#readme
Project-URL: Repository, https://github.com/serdukow/ozon-sdk
Project-URL: Changelog, https://github.com/serdukow/ozon-sdk/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/serdukow/ozon-sdk/issues
Author-email: Andrei Serdiukov <asyncdf@gmail.com>
Maintainer-email: Andrei Serdiukov <asyncdf@gmail.com>
License: MIT
License-File: LICENSE
Keywords: api,applications,async,asyncio,client,comms,delivery,fbp,flex,logistic-platform,ord,ozon,performance,retail,seller,statistics
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Framework :: AsyncIO
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: <3.14,>=3.10
Requires-Dist: aiolimiter<2.0.0,>=1.2.1
Requires-Dist: httpx<0.29.0,>=0.28.1
Requires-Dist: msgspec>=0.19.0
Requires-Dist: typing-extensions>=4.0; python_version < '3.11'
Provides-Extra: dev
Requires-Dist: mypy>=1.14.0; extra == 'dev'
Requires-Dist: pre-commit<5.0.0,>=4.3.0; extra == 'dev'
Requires-Dist: ruff<0.15.0,>=0.14.1; extra == 'dev'
Provides-Extra: test
Requires-Dist: pytest-asyncio<2.0.0,>=1.2.0; extra == 'test'
Requires-Dist: pytest-cov>=6.0.0; extra == 'test'
Requires-Dist: pytest<9.0.0,>=8.4.2; extra == 'test'
Provides-Extra: tooling
Requires-Dist: playwright>=1.48.0; extra == 'tooling'
Description-Content-Type: text/markdown

<h1 align="center">
  <a href="https://dev.ozon.ru/"><img src="https://upload.wikimedia.org/wikipedia/ru/e/ec/OZON_2019.svg?utm_source=ru.wikipedia.org&utm_campaign=index&utm_content=original" alt="OZON" height="34" valign="middle"></a>
  &nbsp;для разработчиков
</h1>

<p align="center">
  <a href="https://pypi.org/project/ozon-sdk/"><img src="https://img.shields.io/pypi/v/ozon-sdk?color=005BFF" alt="PyPI"></a>
  <a href="https://pypi.org/project/ozon-sdk/"><img src="https://img.shields.io/pypi/pyversions/ozon-sdk?color=005BFF" alt="Python"></a>
  <a href="https://github.com/serdukow/ozon-sdk/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/serdukow/ozon-sdk/ci.yml?branch=main&label=CI" alt="CI"></a>
  <a href="https://codecov.io/gh/serdukow/ozon-sdk"><img src="https://img.shields.io/codecov/c/github/serdukow/ozon-sdk?color=005BFF" alt="Coverage"></a>
  <a href="https://github.com/serdukow/ozon-sdk/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/ozon-sdk?color=005BFF" alt="MIT"></a>
</p>

<p align="center">
  <img src="https://img.shields.io/badge/mypy-strict-005BFF" alt="mypy strict">
  <a href="https://github.com/jcrist/msgspec"><img src="https://img.shields.io/badge/msgspec-%3E%3D0.19-005BFF" alt="msgspec"></a>
  <a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/badge/ruff-checked-005BFF" alt="ruff"></a>
</p>

## Асинхронный клиент для [Ozon](https://dev.ozon.ru)

- полная типизация: `msgspec`-модели
- повторы с экспоненциальной задержкой
- четыре схемы пагинации (`cursor`, `last_id`, `offset`, `page`)

## Поддерживаются сейчас:

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/gear-blue_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/seller/">Seller API 2.1</a></b> — Для работы с продажами
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/cursor-click_blue_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/performance/">Performance API 2.0</a></b> — Для работы с рекламным кабинетом
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/boxes-comp-blue_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/fbp/">FBP API 1.2.1</a></b> — Для работы с партнерскими складами Ozon 
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/reload-front_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/ord/">ОРД API 1.0.0</a></b> — Для обмена данными поставщика и Ozon
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/letter-blue_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/comms/">API партнёра 1.1</a></b> — Для отправки писем и СМС
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/box-close-logo-pink_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/delivery/">Delivery API</a></b> — Для отправки заказов клиентам
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/bag-blue_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/flex/">Flex API 1.1.0</a></b> — Для обмена данными в системе Flex
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/boxes-pointer_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/logistic-platform/">Logistic Platform API 2.0.0</a></b> — Для интеграции 3PL
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/filters-blue_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/retail/">Retail API 1.0.0</a></b> — Для автоматизации работы поставщика
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/chart-ozon-one_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/statistics/">Statistics API 2.1</a></b> — Для аналитики продаж
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/laptop-pink_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/applications/">Applications API 1.0.0</a></b> — Для интеграции в Магазин приложений
</p>

<p>
  <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/airplane-blue_m.png" alt="" width="72" valign="middle">
  &nbsp;&nbsp;<b><a href="https://docs.ozon.ru/api/export-api-logistic-platform/">Export API Logistic Platform 1.0.0</a></b> — Для экспортной логистики
</p>

## Установка

```bash
pip install ozon-sdk
```

## Как получить API-ключ

> [!CAUTION]
Не передавайте API-ключ посторонним людям
</br></br>Запросы к API изменяют данные в вашем магазине на Ozon. Если доступ к ключу будет у посторонних, они смогут управлять вашим магазином.


Чтобы получить API-ключ:

1. В личном кабинете перейдите в [Настройки → Seller API.](https://seller.ozon.ru/app/settings/api-keys)
</br></br>
2. Нажмите Сгенерировать ключ.
</br></br>
3. Придумайте название для ключа и выберите его уровень доступа.
</br></br>
4. Выберите цель использования ключа:
- для личного пользования;
- для внешнего сервиса, приложения — введите название сервиса, для которого выпускается ключ.
</br></br>
5. Нажмите Сгенерировать.
> [!CAUTION]
Срок действия ключа — 3 месяца. После истечения срока действия сгенерируйте новый ключ в личном кабинете.

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/gear-blue_m.png" alt="" width="28" valign="middle"> Seller API
Ozon Seller API — программный интерфейс для работы с маркетплейсом Ozon. Он даёт возможность обмениваться информацией между системой продавца и Ozon.

Методы Seller API позволяют изменять данные магазина, например, остатки товаров или их стоимость, и получать данные, такие как информация о возвратах или список складов.

Работа с API состоит из отправки запроса и получения ответа. Для этого можно использовать вкладку Консоль, которая находится сверху описания методов, Postman или настроить интеграцию с системами учёта, например, 1С, ERP или МойСклад.


### Получить список отправлений в отгрузке

```python
import asyncio

from ozon_sdk import SellerAPI


async def main() -> None:
    async with SellerAPI(
        client_id="123456",
        api_key="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.assembly_carriage_posting_list(limit=100)
        for posting in response.postings or []:
            print(posting.posting_number)


asyncio.run(main())
```

### Получить аналитику по остаткам

```python
import asyncio

from ozon_sdk import SellerAPI


async def main() -> None:
    async with SellerAPI(
        client_id="123456",
        api_key="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.analytics_stocks(skus=["sku"])
        for item in response.items or []:
            print(item.offer_id)


asyncio.run(main())
```

### Получить информацию о товарах по идентификаторам

```python
import asyncio

from ozon_sdk import SellerAPI


async def main() -> None:
    async with SellerAPI(
        client_id="123456",
        api_key="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.get_product_info_list(offer_id=["offerId"])
        for product in response.items or []:
            print(product.name)


asyncio.run(main())
```

### Информация о количестве товаров

```python
import asyncio

from ozon_sdk import SellerAPI


async def main() -> None:
    async with SellerAPI(
        client_id="123456",
        api_key="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.get_product_info_stocks(limit=100)
        for product in response.items or []:
            print(product.offer_id)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/cursor-click_blue_m.png" alt="" width="28" valign="middle"> Performance API

Ozon Performance API — интерфейс для работы с рекламным кабинетом для обмена информацией между системой продавца и Ozon.

### Список кампаний

```python
import asyncio

from ozon_sdk import PerformanceAPI


async def main() -> None:
    async with PerformanceAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.campaign.list_campaigns(adv_object_type="SKU")
        for campaign in response.list_ or []:
            print(campaign.title)


asyncio.run(main())
```

### Список товаров кампании

```python
import asyncio

from ozon_sdk import PerformanceAPI


async def main() -> None:
    async with PerformanceAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.product.get_products_v2(campaign_id="campaignId", page_size=100)
        for product in response.products or []:
            print(product.sku)


asyncio.run(main())
```

### Лимиты ставок для инструментов продвижения

```python
import asyncio

from ozon_sdk import PerformanceAPI


async def main() -> None:
    async with PerformanceAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.campaign.get_limits_list()
        for limit in response.limits or []:
            print(limit.object_type, limit.min_bid, limit.max_bid)


asyncio.run(main())
```

### Дневная статистика по кампаниям

```python
import asyncio

from ozon_sdk import PerformanceAPI


async def main() -> None:
    async with PerformanceAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.statistics.get_campaign_daily_stats(
            campaign_ids=["campaignId"],
            date_from="2026-09-01",
            date_to="2026-09-16",
        )
        print(response.content_type)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/boxes-comp-blue_m.png" alt="" width="28" valign="middle"> FBP API

Ozon FBP API — интерфейс для работы со схемой Fulfillment by Partner: поставками, отгрузками и остатками на складе партнёра.

```python
import asyncio

from ozon_sdk import FbpAPI


async def main() -> None:
    async with FbpAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
        api_key="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.seller_info()
        print(response)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/reload-front_m.png" alt="" width="28" valign="middle"> ОРД API

Ozon ОРД API — интерфейс для маркировки рекламы: договоры, креативы, акты и справочники ЕРИР.

```python
import asyncio

from ozon_sdk import OrdAPI


async def main() -> None:
    async with OrdAPI(api_key="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI") as api:
        response = await api.get_kktu_dict()
        for item in response:
            print(item)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/letter-blue_m.png" alt="" width="28" valign="middle"> Comms API

Ozon Comms API — интерфейс для отправки писем и СМС покупателям и партнёрам.

```python
import asyncio

from ozon_sdk import CommsAPI


async def main() -> None:
    async with CommsAPI(
        app_name="partner_name",
        username="user",
        password="pass",
    ) as api:
        response = await api.sms_send(
            comm_id=1,
            phone="+79250240477",
            source_event_name="partner_name",
        )
        print(response)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/box-close-logo-pink_m.png" alt="" width="28" valign="middle"> Ozon Delivery API

Ozon Delivery API — интерфейс для интеграции логистики Ozon: методы доставки, заказы, отправления и возвраты.

```python
import asyncio

from ozon_sdk import OzonDeliveryAPI


async def main() -> None:
    async with OzonDeliveryAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.shipment_method_search()
        print(response)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/bag-blue_m.png" alt="" width="28" valign="middle"> Flex API

Flex API — интерфейс для обмена данными с партнёрами в системе Flex: заявки на подключение курьеров и их балансы.

```python
import asyncio

from ozon_sdk import FlexAPI


async def main() -> None:
    async with FlexAPI(
        client_id="123456",
        api_key="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.get_info()
        print(response)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/boxes-pointer_m.png" alt="" width="28" valign="middle"> Logistic Platform API

Ozon Logistic Platform API — интерфейс для 3PL-провайдеров логистики: заказы, отгрузки, маршруты и пункты выдачи.

```python
import asyncio

from ozon_sdk import LogisticPlatformAPI


async def main() -> None:
    async with LogisticPlatformAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.get_points()
        print(response)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/filters-blue_m.png" alt="" width="28" valign="middle"> Retail API

Ozon Retail API — интерфейс для работы с Retail Center: заказы на поставку, склады, грузоместа и пропуска.

```python
import asyncio

from ozon_sdk import RetailAPI


async def main() -> None:
    async with RetailAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.warehouses()
        for warehouse in response:
            print(warehouse)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/chart-ozon-one_m.png" alt="" width="28" valign="middle"> Statistics API

Ozon Statistics API — интерфейс для получения данных по продажам: остатки, рейтинг и отзывы магазина.

```python
import asyncio

from ozon_sdk import StatisticsAPI


async def main() -> None:
    async with StatisticsAPI(
        client_id="12345",
        access_key="0dc8194a-be47-4983-b82b-c7fdb62ac692",
    ) as api:
        response = await api.product_reviews(sku="123456789")
        print(response)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/laptop-pink_m.png" alt="" width="28" valign="middle"> Applications API

Ozon Applications API — интерфейс для приложений в магазине Ozon: OAuth-авторизация продавца и платежи.

```python
import asyncio

from ozon_sdk import ApplicationsAPI


async def main() -> None:
    async with ApplicationsAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.get_me()
        print(response)


asyncio.run(main())
```

## <img src="https://ir.ozone.ru/s3/common-image-storage/bx/wc120/airplane-blue_m.png" alt="" width="28" valign="middle"> Export API Logistic Platform

Export API Logistic Platform — интерфейс для экспортного потока логистической платформы Ozon: посылки, маршруты и документы.

```python
import asyncio

from ozon_sdk import ExportLogisticPlatformAPI


async def main() -> None:
    async with ExportLogisticPlatformAPI(
        client_id="123456",
        client_secret="b1u5XXDQW3wEqQ7dG...ancMyuhQtMNBI",
    ) as api:
        response = await api.get_points()
        print(response)


asyncio.run(main())
```

## Лицензия

[MIT](LICENSE)
