Wish API endpoint
Searches Wish's product catalog by keyword, with real offset-based pagination. Returns products with price, currency, rating, review count, and merchant id. A query with no matches returns a normal, empty result rather than an error.
/wish/searchquery is required, 1 to 200 characters. count is optional, 1 to 70, defaults to 30. offset is optional, 0-based, defaults to 0, and must be an exact multiple of count (e.g. with the default count=30, valid offsets are 0, 30, 60, 90) up to 3 * count.
Notable response behavior:
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.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.| Field | Filled in, of 17 checked | Values in the sample |
|---|---|---|
| product_id | 17 | |
| name | 17 | “Pembe Potin Nakış Detaylı Hasır Dolgu Taban Önü Açık Kadın…” and 16 other values |
| price | 17 | 13 to 191, median 91 |
| currency_code | 17 | |
| rating | 17 | 5 |
| merchant_id | 17 | |
| image_url | 17 | canary.contestimg.wish.com |
| url | 17 | wish.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| query | string | Yes | Search keyword | shoes | |
| count | integer | No | 30 | Number of results per page, 1 to 70, defaults to 30 | 30 |
| offset | integer | No | 0 | Result offset, 0-based, defaults to 0, must be an exact multiple of count up to 3 * count | 0 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/wish/search?query=shoes&count=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"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"
}
}Request schema
No body schema
Response schema
#/definitions/wish.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | wish.SearchResponse | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.has_more | boolean | No | ||||
| data.next_offset | integer | No | ||||
| data.offset | integer | No | ||||
| data.products | array | No | ||||
| data.products[].currency_code | string | No | ||||
| data.products[].image_url | string | No | ||||
| data.products[].merchant_id | string | No | ||||
| data.products[].name | string | No | ||||
| data.products[].price | number | No | ||||
| data.products[].product_id | string | No | ||||
| data.products[].rating | number | No | ||||
| data.products[].review_count | integer | No | ||||
| data.products[].url | string | No | ||||
| data.query | string | No | ||||
| data.result_count | integer | No | ||||
| data.source_url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/wish/search?query=shoes&count=10" \
-H "x-api-key: $CRAWLORA_API_KEY"