Ozon Product Report Search API
REST API and MCP service documentation generated from server-side API definitions. Responses use the shared code, msg, and data envelope.
API selector
REST API and MCP service documentation generated from server-side API definitions. Responses use the shared code, msg, and data envelope.
Filter Ozon products by sales, revenue, growth, conversion, price, ratings, margin, returns, ads, seller, and fulfillment metrics.
https://api.nexscope.ai/api/skill-api/v1/skills/ozon-product-report-search/runnexscope_ozon_product_report_searchAll run endpoints require a user API key. Send it as a bearer token in the Authorization header.
Authorization: Bearer nk-xxxxxxxxxxxxxxxxxhttps://api.nexscope.ai/api/skill-api/v1/skills/ozon-product-report-search/runRequest parameters documented by ecommerce.ozon-product-report-search.
| Slug | ozon-product-report-search |
| Headers | Authorization: Bearer nk-...Content-Type: application/json |
| Request body | API-specific JSON object. |
| Response body | Platform envelope: code, msg, data, ts, time, cost, traceId. Inspect data.status for asynchronous completion. |
| Code | Description |
|---|---|
| 200 | HTTP request completed. Check JSON code; only 0 indicates business success or acceptance. |
| 400 | Request JSON or required API parameters are invalid. |
| 401 | API key is missing, invalid, or cannot be matched to a user. |
| 5xx | API execution or upstream service failed. |
Replace YOUR_API_KEY, then run this command in your terminal.
curl -X POST 'https://api.nexscope.ai/api/skill-api/v1/skills/ozon-product-report-search/run' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"skus": [
1664362124
],
"page": {
"page": 1,
"pageSize": 20
}
}'https://api.nexscope.ai/api/skill-api/v1/skills/ozon-product-report-search/runSend a JSON request to execute this API and receive the documented response payload.
| Method | POST |
| Path | https://api.nexscope.ai/api/skill-api/v1/skills/ozon-product-report-search/run |
| Auth | Bearer API key |
| Content-Type | application/json |
| Name | Type | Required | Description |
|---|---|---|---|
page | object | required | Nonempty pagination and sorting object: {page, pageSize, orders[]}. Omitted nested defaults are not inserted. Ranges accept optional finite bounds and require min <= max; numeric strings and optional null remain backend compatibility extensions. Example: {
"page": 1,
"pageSize": 20
} |
page.page | integer | optional | Page number, starting from 1, default 1 Example: 1 |
{
"skus": [
1664362124
],
"page": {
"page": 1,
"pageSize": 20
}
}Platform response envelope. code 0 indicates success or acceptance; data contains the business result.
{
"data": {
"total": 1,
"data": [
{
"sku": 1,
"productId": 1,
"imageUrl": "https://example.com/image.jpg",
"productUrl": "https://example.com/image.jpg",
"productPageUrl": "https://example.com/image.jpg",
"sales": 1,
"monthlySalesUnits": 1,
"revenue": 1,
"monthlySalesRevenue": 1,
"missedRevenue": 1,
"price": 1,
"convToCartPdp": 1,
"orderConversionRate": 1,
"salesRate": 1,
"revenueRate": 1,
"drr": 1,
"grossMargin": 1,
"returnCancellationRate": 1,
"views": 1,
"reviewRating": 1,
"rating": 1,
"reviewCount": 1,
"questionsAndAnswers": 1,
"variants": 1,
"fulfillment": [],
"weight": 1,
"volume": 1,
"upTime": 1,
"upDays": 1,
"upMonths": 1,
"brandId": 1,
"brandUrl": "https://example.com/image.jpg",
"sellerId": 1,
"categoryInfo": {
"fullCategoryId": [],
"category": {}
}
}
],
"products": [
{
"sku": 1,
"productId": 1,
"imageUrl": "https://example.com/image.jpg",
"productUrl": "https://example.com/image.jpg",
"productPageUrl": "https://example.com/image.jpg",
"sales": 1,
"monthlySalesUnits": 1,
"revenue": 1,
"monthlySalesRevenue": 1,
"missedRevenue": 1,
"price": 1,
"convToCartPdp": 1,
"orderConversionRate": 1,
"salesRate": 1,
"revenueRate": 1,
"drr": 1,
"grossMargin": 1,
"returnCancellationRate": 1,
"views": 1,
"reviewRating": 1,
"rating": 1,
"reviewCount": 1,
"questionsAndAnswers": 1,
"variants": 1,
"fulfillment": [],
"weight": 1,
"volume": 1,
"upTime": 1,
"upDays": 1,
"upMonths": 1,
"brandId": 1,
"brandUrl": "https://example.com/image.jpg",
"sellerId": 1,
"categoryInfo": {
"fullCategoryId": [],
"category": {}
}
}
],
"columns": [],
"costTime": 1,
"costToken": 1
},
"code": 0,
"msg": null,
"ts": "0",
"time": "2026-01-01 00:00:00",
"cost": "-1",
"traceId": null
}| Name | Type | Required | Description |
|---|---|---|---|
data | any | required | Data value used by this API operation. |
code | integer | required | 0 means accepted or successful; nonzero is a platform error. |
msg | string | null | required | Msg value used by this API operation. |
ts |
| Code | Description |
|---|---|
| 200 | HTTP request completed. Check JSON code; only 0 indicates business success or acceptance. |
| 400 | Request JSON or required API parameters are invalid. |
| 401 | API key is missing, invalid, or cannot be matched to a user. |
| 5xx | API execution or upstream service failed. |
Source, freshness, coverage, rate limits, and estimation notes are not specified in this API definition unless they appear in the request or response field documentation above. Do not assume official marketplace data or real-time freshness when it is not explicitly documented.
Connect remote agents through the standard MCP 2025-11-25 Streamable HTTP endpoint. Use OAuth 2.1 Authorization Code with PKCE, or an API key for compatibility.
POST https://api.nexscope.ai/api/skill-api/v2/mcp
MCP-Protocol-Version: 2025-11-25
Content-Type: application/jsonOAuth clients request the mcp:tools scope. The endpoint's 401 response advertises protected-resource metadata for authorization discovery.
{
"jsonrpc": "2.0",
"id": "tool-call-1",
"method": "tools/call",
"params": {
"name": "nexscope_ozon_product_report_search",
"arguments": {
"skus": [
1664362124
],
"page": {
"page": 1,
"pageSize": 20
}
}
}
}Existing API-key clients can continue using the compatibility endpoint. New integrations should use MCP v2.
GET / POST /api/skill-api/v1/mcpExecute the current API with your API key and JSON payload.
Send a real request with the same contract shown in the reference.
https://api.nexscope.ai/api/skill-api/v1/skills/ozon-product-report-search/runnexscope_ozon_product_report_searchcurl -X POST \
https://api.nexscope.ai/api/skill-api/v1/skills/ozon-product-report-search/run \
-H "Authorization: Bearer nk-..." \
-H "Content-Type: application/json" \
-d '{ "skus": [ 1664362124 ], "page": { "page": 1, "pageSize": 20 } }'No response yet. Run the request to see the response here.
List products under an Ozon brand with sales, revenue, price, rating, stock, turnover, and lost-revenue metrics for brand benchmarking.
List products in an Ozon category with sales, revenue, price, rating, stock, turnover, and lost-revenue metrics.
Analyze products in an Ozon category by category ID, including aggregate sales, revenue, pricing, ratings, seasonality, brand, and seller data.
Retrieve full details for up to 100 Ozon SKUs, including price, discount, ratings, stock, sales, revenue, listing date, and images.
page.pageSize |
integer |
| optional |
Items per page, default 20 Example: 20 |
page.orders | array | optional | Sort rules, elements {field, direction}; direction takes DESC (descending) / ASC (ascending). field is a metric field in the response (e.g., sales, revenue, price, reviewRating, reviewCount, salesRate) Example: [
{
"field": "sales",
"direction": "DESC"
}
] |
skus | array | optional | SKU array (max 10), for precise lookup of specified products Example: [
1664362124
] |
keywords | array | optional | Keyword array, filters by product title Example: [] |
categoryIds | array | optional | Category ID array (Seerfar category IDs, not category names) Example: [] |
sellerName | array | optional | Seller name array Example: [] |
brand | object | optional | Brand filter: {brandName: array<string>, type: integer}; type takes 0 include brand, 1 exclude brand, 2 unbranded Example: {} |
fulfillment | array | optional | Fulfillment method array, fixed options: OZON, FBO, FBS, RFBS, FBP Example: [] |
labels | array | optional | Label array, fixed options: 0 new product, 1 genuine product, 2 best seller Example: [
2
] |
creationDate | integer | optional | Listing time filter (months), fixed options: 1 last 30 days, 3 last 90 days, 6 last 180 days, 12 last year, 24 last two years; no filtering if omitted Example: 1 |
variationsMerge | integer | optional | Whether to merge variants: 0 do not merge, 1 merge Example: 1 |
searchDate | string | optional | Query date yyyy-MM-dd. Omit for a rolling last-30-days period; provide a date to query the preceding complete historical month (2026-04-01 selects March 2026), not month-to-date. Example: 2026-04-01 |
tag | string | optional | Tag word |
uId | string | optional | User ID Example: example-id |
memberId | string | optional | Member ID (a unique member identifier; data is attributed to memberId) Example: example-id |
monthlySales | object | optional | Monthly sales range: {min, max}; either bound may be omitted Example: {
"min": 5000
} |
monthlySalesRate | object | optional | Sales growth-rate range: {min, max}; either bound may be omitted Example: {
"min": 10
} |
monthlyRevenue | object | optional | Monthly revenue range in RUB: {min, max}; either bound may be omitted Example: {
"min": 100000
} |
price | object | optional | Price range in RUB: {min, max}; either bound may be omitted Example: {
"max": 500
} |
convToCartPdp | object | optional | Cart conversion-rate range: {min, max}; either bound may be omitted Example: {
"min": 20
} |
reviewRating | object | optional | Rating range from 0 to 5: {min, max}; either bound may be omitted Example: {
"min": 4
} |
reviewCount | object | optional | Review-count range: {min, max}; either bound may be omitted Example: {
"min": 100
} |
questionsAndAnswers | object | optional | Question-and-answer count range: {min, max}; either bound may be omitted Example: {
"min": 1
} |
variants | object | optional | Variant-count range: {min, max}; either bound may be omitted Example: {
"min": 1
} |
drr | object | optional | Advertising cost-share range: {min, max}; either bound may be omitted Example: {
"max": 20
} |
grossMargin | object | optional | Gross-margin range: {min, max}; either bound may be omitted Example: {
"min": 10
} |
returnCancellationRate | object | optional | Return and cancellation-rate range: {min, max}; either bound may be omitted Example: {
"max": 10
} |
weight | object | optional | Weight range in grams: {min, max}; either bound may be omitted. The supplier does not specify whether packaging is included. Example: {
"max": 1000
} |
volume | object | optional | Volume range in liters: {min, max}; either bound may be omitted. The supplier does not specify whether this measures the item or parcel. Example: {
"max": 10
} |
string |
| required |
Epoch milliseconds. |
time | string | required | Server local time: yyyy-MM-dd HH:mm:ss. |
cost | string | required | Elapsed milliseconds, never credits; -1 outside web requests. |
traceId | string | null | required | Trace id value used by this API operation. |
| Name | Type | Required | Description |
|---|---|---|---|
data | object | required | Data value used by this API operation. |
data.total | integer | optional | Total matched record count (can reach tens of millions with no filters; equals hit count when using skus precise lookup) Example: 1 |
data.data | array | optional | Product report data (see details below), content identical to products Example: [] |
data.data[] | object | required | Item in data data. |
data.data[].sku | integer | optional | Product SKU Example: 1 |
data.data[].productId | integer | optional | Unified product ID (= sku) Example: 1 |
data.data[].title | string | optional | Product title (original Russian) Example: null |
data.data[].imageUrl | string | optional | Product main image URL Example: https://example.com/image.jpg |
data.data[].productUrl | string | optional | Product URL Example: https://example.com/image.jpg |
data.data[].productPageUrl | string | optional | Unified product page URL (= productUrl) Example: https://example.com/image.jpg |
data.data[].currency | string | optional | Currency, always ₽ Example: null |
data.data[].sourceType | string | optional | Data source, always ozon Example: null |
data.data[].sourceTool | string | optional | Source tool identifier for the Ozon bestseller report endpoint Example: null |
data.data[].sales | integer | optional | Monthly sales volume Example: 1 |
data.data[].monthlySalesUnits | integer | optional | Unified monthly sales (= sales) Example: 1 |
data.data[].revenue | number | optional | Monthly sales revenue (RUB) Example: 1 |
data.data[].monthlySalesRevenue | number | optional | Unified monthly revenue (= revenue) Example: 1 |
data.data[].missedRevenue | number | optional | Lost revenue (RUB) Example: 1 |
data.data[].price | number | optional | Price (RUB) Example: 1 |
data.data[].convToCartPdp | number | optional | Cart conversion rate (%) Example: 1 |
data.data[].orderConversionRate | number | optional | Order conversion rate (%) Example: 1 |
data.data[].salesRate | number | optional | Sales growth rate (%) Example: 1 |
data.data[].revenueRate | number | optional | Revenue growth rate (%) Example: 1 |
data.data[].drr | number | optional | Ad cost share (ratio) Example: 1 |
data.data[].grossMargin | number | optional | Gross margin (%) Example: 1 |
data.data[].returnCancellationRate | number | optional | Return/cancellation rate (%) Example: 1 |
data.data[].views | integer | optional | Product Card Views for the searchDate period: rolling last 30 days when omitted, or the selected complete historical month. Each request retrieves the latest available Seerfar data without caching the business response. This is a periodically updated statistic, not a strictly real-time count; its refresh frequency and delay SLA are unspecified. Example: 1 |
data.data[].reviewRating | number | optional | Rating (0~5) Example: 1 |
data.data[].rating | number | optional | Unified rating (= reviewRating) Example: 1 |
data.data[].reviewCount | integer | optional | Review count Example: 1 |
data.data[].questionsAndAnswers | integer | optional | QA count Example: 1 |
data.data[].variants | integer | optional | Variant count Example: 1 |
data.data[].fulfillment | array | optional | Fulfillment methods (values OZON/FBO/FBS/RFBS/FBP) Example: [] |
data.data[].weight | number | optional | Weight in g; the supplier does not specify whether this is packed shipping gross weight Example: 1 |
data.data[].volume | number | optional | Volume in L; the supplier does not specify whether this is item or external parcel volume or how it is measured Example: 1 |
data.data[].upTime | integer | optional | Listing timestamp (milliseconds) Example: 1 |
data.data[].upDays | integer | optional | Days since listing Example: 1 |
data.data[].upMonths | integer | optional | Months since listing Example: 1 |
data.data[].brandName | string | optional | Brand name Example: null |
data.data[].brand | string | optional | Unified brand (= brandName) Example: null |
data.data[].brandId | integer | optional | Brand ID Example: 1 |
data.data[].brandUrl | string | optional | Brand link Example: https://example.com/image.jpg |
data.data[].sellerName | string | optional | Seller name Example: null |
data.data[].sellerId | integer | optional | Seller ID (may be negative for Ozon self-operated) Example: 1 |
data.data[].categoryInfo | object | optional | Category information (see below) Example: {} |
data.data[].categoryInfo.cnTitlePath | string | optional | Chinese category path Example: null |
data.data[].categoryInfo.enTitlePath | string | optional | English category path Example: null |
data.data[].categoryInfo.titlePath | string | optional | Russian category path Example: null |
data.data[].categoryInfo.fullCategoryId | array | optional | Full category ID hierarchy array Example: [] |
data.data[].categoryInfo.category | object | optional | Category node: {cnTitle, enTitle, title, level, id, pid, crossBorderSellable, disabled} Example: {} |
data.products | array | optional | Product report data (identical to data, two keys for the same data) Example: [] |
data.products[] | object | required | Item in data products. |
data.products[].sku | integer | optional | Product SKU Example: 1 |
data.products[].productId | integer | optional | Unified product ID (= sku) Example: 1 |
data.products[].title | string | optional | Product title (original Russian) Example: null |
data.products[].imageUrl | string | optional | Product main image URL Example: https://example.com/image.jpg |
data.products[].productUrl | string | optional | Product URL Example: https://example.com/image.jpg |
data.products[].productPageUrl | string | optional | Unified product page URL (= productUrl) Example: https://example.com/image.jpg |
data.products[].currency | string | optional | Currency, always ₽ Example: null |
data.products[].sourceType | string | optional | Data source, always ozon Example: null |
data.products[].sourceTool | string | optional | Source tool identifier for the Ozon bestseller report endpoint Example: null |
data.products[].sales | integer | optional | Monthly sales volume Example: 1 |
data.products[].monthlySalesUnits | integer | optional | Unified monthly sales (= sales) Example: 1 |
data.products[].revenue | number | optional | Monthly sales revenue (RUB) Example: 1 |
data.products[].monthlySalesRevenue | number | optional | Unified monthly revenue (= revenue) Example: 1 |
data.products[].missedRevenue | number | optional | Lost revenue (RUB) Example: 1 |
data.products[].price | number | optional | Price (RUB) Example: 1 |
data.products[].convToCartPdp | number | optional | Cart conversion rate (%) Example: 1 |
data.products[].orderConversionRate | number | optional | Order conversion rate (%) Example: 1 |
data.products[].salesRate | number | optional | Sales growth rate (%) Example: 1 |
data.products[].revenueRate | number | optional | Revenue growth rate (%) Example: 1 |
data.products[].drr | number | optional | Ad cost share (ratio) Example: 1 |
data.products[].grossMargin | number | optional | Gross margin (%) Example: 1 |
data.products[].returnCancellationRate | number | optional | Return/cancellation rate (%) Example: 1 |
data.products[].views | integer | optional | Product Card Views for the searchDate period: rolling last 30 days when omitted, or the selected complete historical month. Each request retrieves the latest available Seerfar data without caching the business response. This is a periodically updated statistic, not a strictly real-time count; its refresh frequency and delay SLA are unspecified. Example: 1 |
data.products[].reviewRating | number | optional | Rating (0~5) Example: 1 |
data.products[].rating | number | optional | Unified rating (= reviewRating) Example: 1 |
data.products[].reviewCount | integer | optional | Review count Example: 1 |
data.products[].questionsAndAnswers | integer | optional | QA count Example: 1 |
data.products[].variants | integer | optional | Variant count Example: 1 |
data.products[].fulfillment | array | optional | Fulfillment methods (values OZON/FBO/FBS/RFBS/FBP) Example: [] |
data.products[].weight | number | optional | Weight in g; the supplier does not specify whether this is packed shipping gross weight Example: 1 |
data.products[].volume | number | optional | Volume in L; the supplier does not specify whether this is item or external parcel volume or how it is measured Example: 1 |
data.products[].upTime | integer | optional | Listing timestamp (milliseconds) Example: 1 |
data.products[].upDays | integer | optional | Days since listing Example: 1 |
data.products[].upMonths | integer | optional | Months since listing Example: 1 |
data.products[].brandName | string | optional | Brand name Example: null |
data.products[].brand | string | optional | Unified brand (= brandName) Example: null |
data.products[].brandId | integer | optional | Brand ID Example: 1 |
data.products[].brandUrl | string | optional | Brand link Example: https://example.com/image.jpg |
data.products[].sellerName | string | optional | Seller name Example: null |
data.products[].sellerId | integer | optional | Seller ID (may be negative for Ozon self-operated) Example: 1 |
data.products[].categoryInfo | object | optional | Category information (see below) Example: {} |
data.products[].categoryInfo.cnTitlePath | string | optional | Chinese category path Example: null |
data.products[].categoryInfo.enTitlePath | string | optional | English category path Example: null |
data.products[].categoryInfo.titlePath | string | optional | Russian category path Example: null |
data.products[].categoryInfo.fullCategoryId | array | optional | Full category ID hierarchy array Example: [] |
data.products[].categoryInfo.category | object | optional | Category node: {cnTitle, enTitle, title, level, id, pid, crossBorderSellable, disabled} Example: {} |
data.columns | array | optional | Column definitions, elements contain {field, title, cellType, sortable, filterable}, identifying sortable/filterable fields Example: [] |
data.type | string | optional | Response display type, e.g., productWorkbenches Example: null |
data.costTime | integer | optional | API latency (milliseconds) Example: 1 |
data.costToken | integer | optional | Tokens consumed Example: 1 |
data.title | string | optional | Provider-specific response title. Example: null |
data.sourceType | string | optional | Provider-specific source platform type. Example: null |
data.sourceTool | string | optional | Provider-specific source tool name. Example: null |
data.page | integer | optional | Current page returned by the upstream provider. Example: null |
data.pageSize | integer | optional | Page size returned by the upstream provider. Example: null |
data.pageItemCount | integer | optional | Item count on the current page returned by the upstream provider. Example: null |
data.totalPage | integer | optional | Total page count returned by the upstream provider. Example: null |
data.dataSnapshotMonth | string | optional | Data snapshot month returned by the upstream provider. Example: null |
| Name | Type | Required | Description |
|---|---|---|---|
data | null | required | Data value used by this API operation. |