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
Crawlora's Wish endpoints return search and product detail as normalized JSON with one API key — no Wish account required.
Send a free-text query to /wish/search for paginated, normalized products with price, currency, rating, review count, and merchant id.
Pass a 24-character hex product id (from a search result's product_id field or a product page URL) to /wish/product/{id} for full detail — description, sold-out state, aggregate rating, images, and every purchasable variation with its own price, currency, inventory, and merchant.
FAQ
Yes — /wish/search uses real offset-based pagination. offset must be an exact multiple of the count used on the first page (default count is 30), and a nonzero offset costs one extra upstream request per page walked. A query with no matches returns a normal 200 with an empty products array.
Yes — /wish/product/{id} returns every purchasable size/color/merchant variation, each with its own price, currency, inventory, and merchant — a single-SKU product still returns a one-element list.
No Wish account or API key is required from the caller — only your Crawlora API key.