Foodpanda API endpoint
Returns restaurants delivering to a latitude/longitude in a foodpanda market, optionally filtered by a numeric cuisine id (call foodpanda_search_cuisines for the live, location-scoped set of valid ids). Each restaurant carries its code (the value the restaurant and menu endpoints take), name, address, coordinates, budget tier, rating, cuisines, minimum order amount and delivery fee, delivery/pickup availability, and a hero image. A location with no coverage returns an empty list rather than an error.
/foodpanda/searchQuery parameters:
market (optional, default sg) — Delivery Hero market. One of sg, pk, bd, hk, my, ph, la, kh, tw, mm.latitude (required) — search center latitude, e.g. 1.3521.longitude (required) — search center longitude, e.g. 103.8198.cuisine_id (optional) — numeric cuisine id to filter by, e.g. 44. Cuisine ids are location- and market-scoped, not a fixed global enum -- call /foodpanda/search/cuisines with the same market/latitude/longitude to get the valid id set for this location.limit (optional, default 20, max 50) — restaurants to return.offset (optional, default 0) — result offset for pagination.Response includes market, restaurants[], available_count, returned_count, and offset. Each restaurant has code, name, address, city, latitude, longitude, distance_km, budget (a 1-4 tier), rating, review_count, cuisines[] (id, name), hero_image_url, minimum_delivery_fee, minimum_order_amount, minimum_delivery_time_minutes, is_delivery_available, is_pickup_available, has_discount, timezone, web_path, customer_phone, tags[] (code, text — small badges the upstream attaches, e.g. a deal label), discounts[] (id, value — active promotions as a percentage off), and legal_information (legal_name, trade_register_number).
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| code | 20 | |
| name | 20 | “瑞客來永和豆漿 (台北信義店)” and 19 other values |
| address | 20 | |
| city | 20 | Taipei City in all 20 |
| latitude | 20 | |
| longitude | 20 | |
| distance_km | 20 | 0.55 to 3.75, median 1.17 |
| budget | 20 | 1 to 3, median 1 |
| rating | 19 | 4.5 to 4.9, median 4.7 |
| review_count | 19 | 168 to 31,416, median 6,468 |
| cuisines | 19 | median 2 entries |
| hero_image_url | 20 | images.deliveryhero.io and 1 other host |
| minimum_delivery_fee | 19 | 29 |
| minimum_order_amount | 19 | 79 to 99, median 99 |
| minimum_delivery_time_minutes | 19 | 40 |
| is_delivery_available | 20 | true in 20 of 20 |
| is_pickup_available | 20 | true in 15 of 20 |
| has_discount | 20 | true in 5 of 20 |
| timezone | 20 | Asia/Taipei in all 20 |
| web_path | 20 | foodpanda.com.tw |
| customer_phone | 20 | |
| tags | 13 | median 1 entry |
| legal_information | 20 | |
| discounts | 3 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| market | string | No | sg | Delivery Hero market. Defaults to sg. Allowed values: sg, pk, bd, hk, my, ph, la, kh, tw, mm. | sg |
| latitude | number | Yes | Search center latitude | 1.3521 | |
| longitude | number | Yes | Search center longitude | 103.8198 | |
| cuisine_id | integer | No | Numeric cuisine id to filter by. Cuisine ids are location- and market-scoped, not a fixed global enum -- call foodpanda_search_cuisines with the same market/latitude/longitude to get the valid id set for this location | 44 | |
| limit | integer | No | Restaurants to return, clamped to 50 (default 20) | 20 | |
| offset | integer | No | Result offset for pagination (default 0) | 0 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/foodpanda/search?market=sg&latitude=1.3521&longitude=103.8198&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"market": "sg",
"restaurants": [
{
"code": "dxpr",
"name": "NKS RESTAURANT (179 MACPHERSON RD) - Islandwide",
"address": "179 MACPHERSON ROAD, SINGAPORE 348539",
"city": "Singapore",
"latitude": 1.330233,
"longitude": 103.875209,
"distance_km": 6.622,
"budget": 1,
"rating": 3.8,
"review_count": 18,
"cuisines": [
{
"id": 44,
"name": "Indian"
},
{
"id": 115,
"name": "Western"
}
],
"hero_image_url": "https://images.deliveryhero.io/image/fd-sg/LH/dxpr-listing.jpg",
"minimum_delivery_fee": 4.3,
"minimum_order_amount": 16,
"minimum_delivery_time_minutes": 30,
"is_delivery_available": true,
"is_pickup_available": false,
"has_discount": false,
"timezone": "Asia/Singapore",
"web_path": "https://foodpanda.sg/restaurant/dxpr/nks-restaurant-179-macpherson-rd-islandwide",
"customer_phone": "+6596694923",
"legal_information": {
"legal_name": "FOOD ASPIRATION PTE. LTD.",
"trade_register_number": "201304764C"
}
}
],
"available_count": 797,
"returned_count": 1,
"offset": 0
}
}Request schema
No body schema
Response schema
#/definitions/foodpanda.searchResponseDoc
| 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 | foodpanda.SearchResponse | No | ||||
| data.available_count | integer | No | ||||
| data.market | string | No | ||||
| data.offset | integer | No | ||||
| data.restaurants | array | No | ||||
| data.restaurants[].address | string | No | ||||
| data.restaurants[].budget | integer | No | ||||
| data.restaurants[].city | string | No | ||||
| data.restaurants[].code | string | No | ||||
| data.restaurants[].cuisines | array | No | ||||
| data.restaurants[].cuisines[].id | integer | No | ||||
| data.restaurants[].cuisines[].name | string | No | ||||
| data.restaurants[].customer_phone | string | No | ||||
| data.restaurants[].discounts | array | No | ||||
| data.restaurants[].discounts[].id | string | No | ||||
| data.restaurants[].discounts[].value | number | No | ||||
| data.restaurants[].distance_km | number | No | ||||
| data.restaurants[].has_discount | boolean | No | ||||
| data.restaurants[].hero_image_url | string | No | ||||
| data.restaurants[].is_delivery_available | boolean | No | ||||
| data.restaurants[].is_pickup_available | boolean | No | ||||
| data.restaurants[].latitude | number | No | ||||
| data.restaurants[].legal_information | foodpanda.LegalInformation | No | ||||
| data.restaurants[].legal_information.legal_name | string | No | ||||
| data.restaurants[].legal_information.trade_register_number | string | No | ||||
| data.restaurants[].longitude | number | No | ||||
| data.restaurants[].minimum_delivery_fee | number | No | ||||
| data.restaurants[].minimum_delivery_time_minutes | number | No | ||||
| data.restaurants[].minimum_order_amount | number | No | ||||
| data.restaurants[].name | string | No | ||||
| data.restaurants[].rating | number | No | ||||
| data.restaurants[].review_count | integer | No | ||||
| data.restaurants[].tags | array | No | ||||
| data.restaurants[].tags[].code | string | No | ||||
| data.restaurants[].tags[].text | string | No | ||||
| data.restaurants[].timezone | string | No | ||||
| data.restaurants[].web_path | string | No | ||||
| data.returned_count | 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/foodpanda/search?market=sg&latitude=1.3521&longitude=103.8198&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"