List products
Returns one page of products matching the given filters. No single filter is
required, but you should almost always pass at least one identifying parameter
(url, external_id+marketplace, or seller_code) — otherwise you get a
broad slice of the whole dataset.
Changed 2026-09-05: this endpoint no longer returns an exact
meta.total— it returnsmeta.has_moreinstead. If your integration still readsmeta.totalhere, update it to checkmeta.has_moreinstead.
Authorization
bearerAuth Bearer token — see the API Overview page in the docs for how to get one and use it.
In: header
Query Parameters
Value in
- "ozon"
- "wildberries"
- "yandex_market"
- "lamoda"
The seller's id on the marketplace. Usually paired with marketplace — on its own it isn't guaranteed unique across marketplaces.
The seller's or brand's own internal SKU for this listing (not our external_id). Deliberately not required to pair with seller_id — the real brand use case is usually "find my SKU wherever it's being resold," not "only under one specific reseller."
Substring match against seller_code, for when a seller adds their own prefix/suffix around your internal SKU (e.g. vendor SKU 34100001, listed as 34100001/0958) — pass just the part you know. Unlike seller_code, this is not a precise identity lookup: a short value can match multiple unrelated codes, so pair it with seller_id/marketplace when you can.
length <= 200The marketplace's own SKU (WB nmId, Ozon sku, etc.). Only unique paired with marketplace — pass both.
A product page URL. Query string and fragment (?utm_source=..., #reviews, etc.) are stripped automatically before matching — paste it exactly as copied from a browser.
uriContainment match against category_path (any level of the hierarchy, not just the leaf). See GET /categories for the available values. Matches against any of a product's known-language translations, not just the one returned as its default category_path in the response.
Exact brand name match, case-insensitive — not a substring search like name_contains. Brand casing varies across marketplaces/submissions as scraping noise, not a meaningful distinction, so the match ignores it. See GET /brands for the available values.
Case-insensitive substring match against the product name (no stemming or morphological matching). Matches against any of a product's known-language translations, not just the one returned as its default name in the response — a product can match here even if the term doesn't appear in the name you see on the result.
length <= 200Filter by trust status. When omitted, products of every status are returned — the API deliberately never withholds unverified/flagged rows; the caller decides what to trust.
Value in
- "unverified"
- "verified"
- "flagged"
Invalid or missing values are silently clamped to the default rather than rejected with a 400.
1 <= value1500 max — deliberately generous relative to a typical UI-facing API, sized for bulk pulls.
1 <= value <= 500100Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/products?marketplace=wildberries&seller_id=2557&seller_code=BV2648-010&seller_code_contains=34100001&external_id=231151629&url=https%3A%2F%2Fwww.wildberries.ru%2Fcatalog%2F231151629%2Fdetail.aspx&category=%D0%97%D0%BE%D0%BE%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B&brand=Nike&name_contains=Nike"{ "data": [ { "id": "e86bee19-9cc9-4a83-b9cc-6b61f1209d90", "marketplace": "wildberries", "external_id": "231151629", "url": "https://www.wildberries.ru/catalog/231151629/detail.aspx", "name": "Air Rift Breathe White Pure Platinum Women's", "brand": "Nike", "category_path": [ "Обувь", "Женская", "Туфли и лоферы" ], "attributes": { "color": "желтый", "season": "демисезон", "is_authentic": true }, "image_cover": "https://basket-15.wbbasket.ru/vol2311/part231151/231151629/images/big/1.webp", "image_gallery": [ "https://basket-15.wbbasket.ru/vol2311/part231151/231151629/images/big/1.webp" ], "video_cover": null, "video_gallery": [], "seller": { "id": "3994154", "name": "POIZON(ДЭВУ)", "code": "2604540" }, "trust_status": "unverified", "price_flagged": false, "prices": [ { "country_code": "ru", "region_code": null, "user_auth_status": "anonymous", "price": 7093, "old_price": 8651, "currency": "RUB", "stock_status": null, "stock_quantity": null, "recorded_at": "2026-08-02T23:21:53.185302+00:00" } ], "special_price": [ { "country_code": "ru", "region_code": "", "user_auth_status": "anonymous", "min": 6783, "max": 6880 } ], "stats": null, "first_seen_language": "ru", "default_language": "ru", "translations": [ { "language": "ru", "name": "Air Rift Breathe White Pure Platinum Women's", "category_path": [ "Обувь", "Женская", "Туфли и лоферы" ], "attributes": { "color": "желтый", "season": "демисезон", "is_authentic": true }, "updated_at": "2026-08-02T23:21:53.081+00:00" } ], "first_seen_at": "2026-08-01T01:03:17.913664+00:00", "last_seen_at": "2026-08-02T23:21:53.081+00:00" } ], "meta": { "has_more": true, "page": 1, "page_size": 100 }}Get product price history GET
The full time series of price and stock observations for a product — unlike the current price (already included in `GET /products` and `GET /products/{id}`), this endpoint is only needed for historical trend analysis.
Get one scrape session's status GET
`status` is `completed` once every submission in the session has left `pending`/`processing` — not necessarily "every item successfully merged"; see `stats` for the exact per-status breakdown. A session with `stats.total: 0` is always `processing`, never `completed`, whether because nothing has arrived yet or (much later) because its submissions have already aged out of retention.