# product_id, SKU и offer_id в Ozon API: как сопоставить заказы, начисления и карточки

> У товара Ozon три идентификатора: product_id (ID карточки в каталоге продавца), sku (ID товара на витрине) и offer_id (артикул продавца). В отправлениях, начислениях и отзывах товар указан через sku, и он не совпадает с product_id карточки, поэтому сопоставлять нужно по SKU карточки. offer_id Ozon различает с учетом регистра: ABC-1 и abc-1 - два разных товара.

Проверено: 11.10.2026. Источник: https://mp-index.ru/spravka/identifikatory-tovara-ozon-api

## Где какой идентификатор

| Данные | Метод | Чем указан товар |
| --- | --- | --- |
| Карточки | `/v3/product/info/list` | `id` (product_id), `offer_id`; SKU - в `stocks.stocks[].sku` |
| Отправления FBO и FBS | `/v3/posting/fbo/list`, `/v4/posting/fbs/list` | `products[].sku`, `products[].offer_id` |
| Начисления | `/v1/finance/accrual/by-day` | `posting.products[].sku` |
| Отзывы | `/v1/review/list` | sku |
| Отчет о выкупе | `/v1/finance/products/buyout` | `sku`, `offer_id` |

## Как найти SKU карточки

- В ответе `/v3/product/info/list` SKU лежит в `stocks.stocks[]`: у каждого элемента есть `sku` и `source` со значением `fbo` или `fbs`. Так SKU есть даже у товара без единого заказа (проверено 10.08.2026).
- У старых карточек два SKU, для FBO и для FBS. После перехода Ozon на единый SKU они обычно совпадают, но сопоставляйте по обоим.
- Верхнеуровневое поле `sources[].source` для этого не подходит: там коды вроде `sds`, а не fbo и fbs.
- Товар без остатков, которому Ozon еще не выдал SKU, в ответе SKU не имеет: его начисления сопоставятся позже.

## Регистр offer_id

Ozon считает артикулы, которые отличаются только регистром букв, разными товарами. Большинство баз данных по умолчанию сравнивают текст без учета регистра (в MySQL это коллации `_ci`), и тогда заказы двух разных товаров склеиваются, а отчеты по ним удваиваются или обнуляются.

- Храните offer_id в колонке с бинарным сравнением (в MySQL - `utf8mb4_bin`) или сравнивайте как `CAST(a AS BINARY) = CAST(b AS BINARY)`.
- Группировки по offer_id (`GROUP BY`, `DISTINCT`) тоже должны учитывать регистр.
- Поиск по артикулу для пользователя можно оставить без учета регистра: это поиск, а не сопоставление.

## Источники

- [Документация Ozon Seller API](https://docs.ozon.ru/api/seller/)

## Смотрите также

- [Чем заменить /v3/finance/transaction/list в Ozon Seller API](https://mp-index.ru/spravka/api-nachisleniy-ozon-2026)
- [Ограничения Ozon Seller API, о которых не пишут в документации](https://mp-index.ru/spravka/limity-ozon-seller-api)
- [Кластеры Ozon в API: список кластеров, кластер заказа и остатки по складам](https://mp-index.ru/spravka/klastery-ozon-api)

---
Справочник продавца Ozon, MP Index: https://mp-index.ru/spravka/
