Marketplace pricing and availability monitoring
Use Wish endpoints to turn marketplace pricing and availability monitoring into repeatable API requests with documented inputs and JSON responses.
Turn Wish's own internal marketplace data into structured JSON — keyword product search with real offset-based pagination, and per-product detail with pricing, sold-out state, aggregate rating, images, and every purchasable size/color/merchant variation, all as normalized JSON. Credential-free.
Search Wish's product catalog and get full product detail — pricing, availability, images, and every purchasable variation — as structured JSON.
Endpoint families
4
Documented params
15
Examples
6
Live catalog snapshot
Active endpoints
6
Methods
GET
Required params
11
Schema refs
6
{
"platform": "Wish",
"endpoint": "wish-search",
"method": "GET",
"path": "/wish/search",
"auth": "apiKey"
}Use cases
Search Wish's product catalog and get full product detail — pricing, availability, images, and every purchasable variation — as structured JSON.
Use Wish endpoints to turn marketplace pricing and availability monitoring into repeatable API requests with documented inputs and JSON responses.
Use Wish endpoints to turn product catalog research into repeatable API requests with documented inputs and JSON responses.
Use Wish endpoints to turn merchant and variation tracking into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Wish endpoint catalog — 6 endpoints, 15 documented request parameters, and 6 published response schemas — the same catalog Docs and Playground run against.
6 documented Wish endpoints, grouped into 4 request families — Product, Categories and Search, plus 1 more.
15 request parameters are documented across those Wish endpoints, 11 of them required — the full input contract is public before you write any integration code.
6 of the 6 Wish endpoints ship a recorded example response, and 6 carry a documented response schema — you can code against the real JSON before the first request.
Wish endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
6 hosted MCP tools back the Wish endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/wish/product/{id}
/wish/categories
/wish/search
/wish/suggest
Endpoint catalog
/wish/searchSearches Wish's product catalog by keyword, with real offset-based pagination. Returns normalized products with price, currency, rating, review count, and merchant id. A query with no matches returns a normal, empty result rather than an error.
Response notes
- Pagination is real, but Wish's own backend requires each subsequent page to be requested with the same `count` used on the first page of that sequence -- this endpoint replays that pattern internally, so a nonzero `offset` costs one extra upstream request per page walked. `next_offset` is the offset to request for the next page; `has_more` is `true` while more results remain. An `offset` that is not an exact multiple of `count`, or exceeds the reachable depth for the given `count`, returns `400` before any upstream request is made -- increase `count` to reach deeper pages in fewer steps. - A query with no matches returns a normal `200` with an empty `products` array and `has_more: false`, not an error. - `price` and `currency_code` reflect the requester's own localized pricing (e.g. a Hong Kong-geolocated request sees `HKD` prices); they are not always US dollars. - `rating` and `review_count` reflect the product's current aggregate rating; a brand-new product with no reviews yet returns `0` for both rather than an error. Example response: ```json {"code":200,"msg":"OK","data":{"query":"shoes","count":30,"offset":0,"result_count":3,"next_offset":30,"has_more":true,"products":[{"product_id":"68b46c0356ea5dba05e9f755","name":"Waterproof Leather Casual Sneakers for Men, Lightweight Breathable Walking Shoes, Fashion Athletic Running Shoes","price":129.74,"currency_code":"HKD","rating":5,"merchant_id":"68ad644a332a553b38e113ec","image_url":"https://canary.contestimg.wish.com/api/webimage/68b46c0356ea5dba05e9f755-medium.jpg","url":"https://www.wish.com/product/68b46c0356ea5dba05e9f755"}],"source_url":"https://www.wish.com/api/feed/get-search-universal-feed","fetched_at":"2026-08-10T10:00:00Z"}} ```
MCP tool wish_search
/wish/product/{id}Returns one Wish product's full detail: name, description, sold-out state, aggregate rating, image URLs, and every purchasable variation with its own price, currency, inventory, and merchant. id is taken from a search result's product_id field or a product page's URL. An unrecognized id returns 404.
Response notes
- `rating`/`rating_count` are the product's own aggregate rating. A brand-new product with no reviews yet returns `0` for both rather than an error. - `variations` lists every purchasable size/color/merchant combination of the product -- a single-SKU product still returns a one-element list. Each variation carries its own `price`, `currency_code`, `inventory`, and merchant fields. - `is_sold_out` reflects the product's current availability. - An unrecognized `id` returns `404`. A malformed `id` returns `400` before any upstream request is made. Example response: ```json {"code":200,"msg":"OK","data":{"product_id":"68b46c0356ea5dba05e9f755","name":"Waterproof Leather Casual Sneakers for Men, Lightweight Breathable Walking Shoes, Fashion Athletic Running Shoes","description":"Product Category: Casual Sports Shoes\nStyle: Sports\nFunction: Waterproof","is_sold_out":true,"images":["https://canary.contestimg.wish.com/api/webimage/68b46c0356ea5dba05e9f755-large.jpg"],"variations":[{"variation_id":"68b46c0356ea5dba05e9f750","price":129.74,"currency_code":"HKD","merchant_id":"68ad644a332a553b38e113ec","merchant_name":"urbandailyselect10"}],"url":"https://www.wish.com/product/68b46c0356ea5dba05e9f755","source_url":"https://www.wish.com/api/get-product-detail-page","fetched_at":"2026-08-10T10:00:00Z"}} ```
MCP tool wish_product
/wish/categoriesReturns Wish's own top navigation/category tree (e.g. "Popular", "Deals Hub", "Fashion", "Gadgets") plus each category's nested filter groups (e.g. Color, Rating) where present. This is a static, site-wide taxonomy -- it takes no input and its result does not vary by search term or category.
Response notes
- Each category's `filter_id` is Wish's own stable identifier for that nav tab. - `is_main_tab` marks the small set of primary tabs Wish's own header nav highlights (e.g. "Popular", "Deals Hub", "Recently Viewed") versus the longer tail of secondary category tags. - Most categories return an empty `filter_groups` list; only "Popular" (Wish's own default/landing tab) was observed carrying nested filter groups such as Color and Rating. Example response: ```json {"code":200,"msg":"OK","data":{"categories":[{"name":"Popular","filter_id":"tabbed_feed_latest","is_main_tab":true,"filter_groups":[{"id":"Color","name":"Color","icon_url":"https://main.cdn.wish.com/web/9a9befad15d4/img/filtered_feed/filter_feed_filter_color.png","filters":[{"name":"Blue","filter_id":"color_53dc217e21a8632b3c6e0735","is_quick_filter":false,"is_toggle":false,"default_selected":false}]}]},{"name":"Deals Hub","filter_id":"dealshub_flashsale","is_main_tab":true,"filter_groups":[]},{"name":"Fashion","filter_id":"tag_53dc186321a86318bdc87ef8","is_main_tab":false,"filter_groups":[]}],"source_url":"https://www.wish.com/api/feed/get-filtered-feed-categories","fetched_at":"2026-08-12T10:00:00Z"}} ```
MCP tool wish_categories
/wish/product/{id}/relatedReturns a Wish product's related-item rails: shelves of similar products, grouped by rail (e.g. general similar items, a faster-shipping-eligible subset). id is taken from a search result's product_id field or a product page's URL. A faster-shipping rail with no eligible items, or a nonexistent id, returns a normal, empty result rather than an error.
Response notes
- `shelves` always includes a `similar` rail (general related items) and, when eligible items exist, an `express` rail (a faster-shipping-eligible subset). `feed_mode` on each shelf identifies which rail it is; `title`/`subtitle` are Wish's own display text when available. - The `express` rail can be a well-formed, empty shelf (`items: []`, `has_more: false`) for a product with no faster-shipping-eligible similar items -- this is normal, not an error, and `shelves` may then contain only the `similar` rail. - A malformed `id` returns `400` before any upstream request is made. An unrecognized (but well-formed) `id` returns a normal `200` with an empty `similar` shelf rather than an error -- Wish's own related-items source does not distinguish an unknown product id from a known one. - `price` and `currency_code` reflect the requester's own localized pricing (e.g. a Hong Kong-geolocated request sees `HKD` prices); they are not always US dollars. Example response: ```json {"code":200,"msg":"OK","data":{"product_id":"68b46c0356ea5dba05e9f755","shelves":[{"feed_mode":"similar","title":"Similar Items","has_more":true,"items":[{"product_id":"5d795cac54553612b72abd6c","name":"New 2pcs Disc Detainer Locksmith Tools Lock Picks Set Padlock Tool","price":59.64,"currency_code":"HKD","rating":5,"merchant_id":"56cddd431e15ff78d61e0041","image_url":"https://canary.contestimg.wish.com/api/webimage/5d795cac54553612b72abd6c-normal.jpg","url":"https://www.wish.com/product/5d795cac54553612b72abd6c"}]},{"feed_mode":"express","title":"Faster Shipping","subtitle":"Similar Items with 5-7 Day Shipping","has_more":false,"items":[]}],"source_url":"https://www.wish.com/api/related-feed/get","fetched_at":"2026-08-11T13:56:00Z"}} ```
MCP tool wish_product_related
/wish/product/{id}/reviewsReturns a Wish product's normalized customer reviews. id is taken from a search result's product_id field or a product page's URL. A product with zero reviews returns a normal, empty result rather than an error. A caller wanting more reviews should re-request with a larger count -- this endpoint does not support an offset/cursor parameter, since the upstream source does not support one.
Response notes
- This endpoint does not support an offset/cursor parameter. A caller wanting more reviews should re-request with a larger `count` -- the upstream source does not support a working paging cursor, so exposing one here would promise pagination this endpoint cannot deliver. - `has_more` reflects the upstream's own signal for whether more reviews exist beyond the returned `count`. - A product with zero reviews returns a normal, empty result (`result_count: 0`) rather than an error. - An unrecognized `id` returns `404`. A malformed `id` returns `400` before any upstream request is made. Example response: ```json {"code":200,"msg":"OK","data":{"product_id":"5c204af997fd253055250a4d","count":10,"result_count":10,"has_more":true,"reviews":[{"id":"5f9010f5e7e021e9388e830c","rating":5,"comment":"Beautiful ","upvote_count":2,"image_ids":["5f91a50bffa216889a593953"],"created_at":"2020-10-21T10:44:05+00:00","user_name":"Cassandra Mae","user_country_code":"US"}],"source_url":"https://www.wish.com/api/mobile/get-product-ugc-ratings","fetched_at":"2026-08-11T10:00:00Z"}} ```
MCP tool wish_product_reviews
/wish/suggestReturns Wish's own search-suggestion (typeahead) result for a partial search term: a flat list of suggested search terms, no product data. A partial term with no matches returns a normal, empty result rather than an error.
Response notes
- There is no pagination -- `suggestions` is a single flat list. - A partial term with no matches returns a normal, empty result (`count: 0`, empty `suggestions`) rather than an error. Example response: ```json {"code":200,"msg":"OK","data":{"query":"shoe","count":10,"suggestions":["shoes for men","shoes for women","shoe storage organizer","shoe rack","shoe horn","shoe rack organizer","shoe laces","shoei x 14","shoe goo","shoe covers"],"source_url":"https://www.wish.com/api/search/autcomplete","fetched_at":"2026-08-11T10:00:00Z"}} ```
MCP tool wish_suggest
Related APIs
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
Marketplaces & Retail
Turn public Shop.app product and merchant pages into structured JSON for e-commerce product intelligence, price research, shop monitoring, and marketplace discovery workflows.
How to scrape Wish
Wish's storefront categories split into four main tabs plus sixteen thematic tags such as Gadgets, Pet Accessories, and Automotive, each with its own Color and Rating filter groups. A 2026-09-24 pull of "wireless earbuds" returned six live listings from $7.57 to $17.27, five of them from the same merchant account, urbandailyselect7 — a clustering pattern worth watching if deduplicating sellers. Crawlora's six Wish endpoints turn that catalog, plus product detail, reviews, related shelves, and typeahead, into normalized JSON with one API key. Wish itself has run under Singapore's Qoo10 since it bought Wish's operating assets for roughly $161 million in April 2024.
Send a query to /wish/search for offset-based pages of normalized listings: price, currency, star rating, review count, and merchant id. A 2026-09-24 run of "wireless earbuds" returned six listings on the first page, with has_more set for further pages.
Call /wish/categories for Wish's four main tabs (Popular, Express, Deals Hub, Recently Viewed) and sixteen thematic tags like Fashion, Gadgets, and Wallets & Bags, plus Color and Rating filter groups nested under Popular.
Pass a 24-character hex id to /wish/product/{id} for every purchasable variation. A GT760 earbuds listing returned three color variations, all priced at $8.32, with per-variation inventory in the thousands.
/wish/product/{id}/reviews can return zero review bodies even when detail carries a nonzero rating and rating_count — the GT760 earbuds show a 5-star rating from one rater but an empty reviews array.
/wish/product/{id}/related returns similar-item rails; one pull surfaced a near-identical earbuds listing priced in Japanese yen, not USD.
/wish/suggest returns Wish's own typeahead completions for a partial query — ten phrase suggestions for "phone case," search terms only, no product data.
FAQ
count echoes the page size you asked for; result_count is how many listings actually came back on that page. A 2026-09-24 pull for "wireless earbuds" asked for ten and received six, with has_more true, so keep paging on has_more rather than on a full page.
Yes — /wish/product/{id} returns every purchasable variation with its own price, currency, inventory, and merchant. A GT760 earbuds listing carried three color variations, all $8.32, each with a different inventory count.
Not necessarily. /wish/product/{id}/reviews can return an empty array on a product that still shows a nonzero rating elsewhere — the rating aggregate and the review-text feed aren't guaranteed to stay in sync.
ContextLogic, Wish's operating company, sold substantially all of its assets to Qoo10, the Singapore-based ecommerce group, in a deal that closed April 19, 2024 for roughly $161 million.
Yes — a query with no matches returns a normal response with an empty products array, and /wish/suggest behaves the same way for an unmatched partial term.