Pandamart API endpoint
Searches by keyword within one darkstore's own catalog -- the pandamart equivalent of the search box on a darkstore page. Unlike the product showcase's curated shelves, this reaches the store's full catalog by keyword. Returns matching products with real prices, stock, and availability, plus total_products and has_more for pagination via page/limit.
/pandamart/store/searchQuery parameters:
market (optional, default sg) — Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph.code (required) — darkstore code, from /pandamart/search's code field, e.g. wsg7.query (required) — product search text, e.g. milk.sort (optional, default RELEVANCE) — result order. One of RELEVANCE, PRICE_ASC, PRICE_DESC.page (optional, default 1) — 1-based result page.limit (optional, default 20) — products per page, clamped to 10-50.A query with no matches returns an empty products array with total_products: 0, not an error.
Response includes market, code, query, sort, products[], total_products, page, limit, and has_more. Each product has id, name, description, image_url, price, original_price, sku, stock_amount, is_available, and discount_badge (present only when the item currently has a discount label).
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| id | 20 | |
| name | 20 | “Greenfields Premium Fresh Jersey Milk 1L” and 19 other values |
| description | 20 | median 184 characters |
| image_url | 20 | foodpanda.dhmedia.io |
| price | 20 | 1.9 to 23.3, median 3.55 |
| original_price | 20 | 2.31 to 33.78, median 3.73 |
| sku | 20 | |
| stock_amount | 20 | 1 to 48, median 13 |
| is_available | 20 | true in 20 of 20 |
| discount_badge | 14 | “30% off” and 11 other values |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| market | string | No | sg | Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg. Allowed values: sg, pk, bd, hk, my, ph. | sg |
| code | string | Yes | Darkstore code, from /pandamart/search's code field | wsg7 | |
| query | string | Yes | Product search text | milk | |
| sort | string | No | RELEVANCE | Result order. One of RELEVANCE, PRICE_ASC, PRICE_DESC. Defaults to RELEVANCE. Allowed values: RELEVANCE, PRICE_ASC, PRICE_DESC. | RELEVANCE |
| page | integer | No | 1-based result page (default 1) | 1 | |
| limit | integer | No | Products per page, clamped to 10-50 (default 20) | 20 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/pandamart/store/search?market=sg&code=wsg7&query=milk&sort=RELEVANCE&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"market": "sg",
"code": "wsg7",
"query": "milk",
"sort": "RELEVANCE",
"products": [
{
"id": "46896362",
"name": "Greenfields Low Fat Milk 1L",
"description": "Guaranteed Shelf Life: 7 days",
"image_url": "https://foodpanda.dhmedia.io/image/darkstores/sgp/topseller/20231120/8993351129204_001.jpg",
"price": 3.39,
"original_price": 3.5,
"sku": "3P6F61",
"stock_amount": 38,
"is_available": true,
"discount_badge": "3% off"
}
],
"total_products": 400,
"page": 1,
"limit": 20,
"has_more": true
}
}Request schema
No body schema
Response schema
#/definitions/pandamart.storeSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | pandamart.StoreSearchResponse | No | ||||
| data.code | string | No | ||||
| data.has_more | boolean | No | ||||
| data.limit | integer | No | ||||
| data.market | string | No | ||||
| data.page | integer | No | ||||
| data.products | array | No | ||||
| data.products[].description | string | No | ||||
| data.products[].discount_badge | string | No | ||||
| data.products[].id | string | No | ||||
| data.products[].image_url | string | No | ||||
| data.products[].is_available | boolean | No | ||||
| data.products[].name | string | No | ||||
| data.products[].original_price | number | No | ||||
| data.products[].price | number | No | ||||
| data.products[].sku | string | No | ||||
| data.products[].stock_amount | integer | No | ||||
| data.query | string | No | ||||
| data.sort | string | No | ||||
| data.total_products | integer | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/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/pandamart/store/search?market=sg&code=wsg7&query=milk&sort=RELEVANCE&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"