Zomato API endpoint
Returns one restaurant's menu grouped into categories, plus its restaurant summary. A category is named by Zomato's own sub-heading when it has one (e.g. "Veg Burgers") and otherwise by the menu section it sits under (e.g. "Burgers"), since most restaurants name only the section level. Each item carries a name, description, veg/non-veg flag, image, and price when Zomato's own anonymous response includes one -- confirmed live, item prices are commonly gated behind login for the delivery-ordering flow, so price is frequently absent even though the item itself is public.
/zomato/restaurant/menuQuery parameters:
url (required) — canonical public Zomato restaurant URL, from /zomato/search's url field, e.g. https://www.zomato.com/mumbai/persian-darbar-byculla. Same validation as /zomato/restaurant.An unrecognized restaurant URL returns a 404. A restaurant with no categorized delivery menu on Zomato (dine-out-only restaurants, or ones whose menu is only a set of photos) returns an empty categories list, not an error.
Response includes restaurant (the same shape /zomato/restaurant returns, including its coordinates, weekly opening_hours[], split dining/delivery ratings, and delivery metadata) and categories[]. Each category has name and items[]. A category's name is Zomato's own sub-heading when it has one (e.g. Veg Burgers) and otherwise the menu section it sits under (e.g. Burgers) — most restaurants name only the section level. Each item has name, description, price (only present when Zomato's own anonymous response includes one — confirmed live, item prices are commonly gated behind login for the delivery-ordering flow, so this is frequently absent even though the item itself is public), is_veg (only present when Zomato's own dietary tags clearly say veg or non-veg), and image_url.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| url | string | Yes | Canonical public Zomato restaurant URL, from /zomato/search's url field | https://www.zomato.com/mumbai/persian-darbar-byculla | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/zomato/restaurant/menu?url=https%3A%2F%2Fwww.zomato.com%2Fmumbai%2Fpersian-darbar-byculla" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"restaurant": {
"id": "34269",
"name": "Persian Darbar",
"url": "https://www.zomato.com/mumbai/persian-darbar-byculla",
"cuisines": [
"Biryani",
"Mughlai",
"North Indian"
],
"rating": 4.2,
"rating_count": "3403",
"locality": "Byculla, Mumbai",
"address": "5, Alexandra Terrace, Byculla, Mumbai",
"phone": "+912262261112, +912223791112",
"status_text": "Closed for dining",
"timing": "9am – 1am (Today)",
"city": "Mumbai",
"zipcode": "400027",
"country": "India",
"latitude": 18.97572852,
"longitude": 72.83370833,
"image_url": "https://b.zmtcdn.com/data/pictures/9/34269/thumb.jpg",
"opening_hours": [
{
"days": "Mon-Sun",
"timing": "9am – 1am"
}
],
"ratings": {
"dining": {
"rating": 4.2,
"review_count": "3,403"
},
"delivery": {
"rating": 4.2,
"review_count": "51.3K"
}
},
"delivery": {
"time": "34 min",
"has_online_ordering": true,
"is_serviceable": true,
"min_order_amount": 0,
"pickup_available": true
}
},
"categories": [
{
"name": "Persian Special",
"items": [
{
"name": "Chicken Tikka Biryani (4 Pieces)",
"description": "Grilled chicken tikka pieces cooked with aromatic biryani rice and spices.",
"is_veg": false,
"image_url": "https://b.zmtcdn.com/data/dish_photos/8cb/608a81294e7f9c04622dfb2cc36c58cb.jpeg"
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/zomato.menuResponseDoc
| 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 | zomato.MenuResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].items | array | No | ||||
| data.categories[].items[].description | string | No | ||||
| data.categories[].items[].id | string | No | ||||
| data.categories[].items[].image_url | string | No | ||||
| data.categories[].items[].is_veg | boolean | No | ||||
| data.categories[].items[].name | string | No | ||||
| data.categories[].items[].price | number | No | ||||
| data.categories[].name | string | No | ||||
| data.restaurant | zomato.RestaurantResponse | No | RestaurantResponse record, 37 fields: address, city, country, cuisines, delivery, id, image_url, is_dark_kitchen, is_delivery_only, is_permanently_closed, is_temporarily_closed, latitude and 12 more. Described under Zomato Restaurant API. | |||
| 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 |
| 404 | Not Found | #/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/zomato/restaurant/menu?url=https%3A%2F%2Fwww.zomato.com%2Fmumbai%2Fpersian-darbar-byculla" \
-H "x-api-key: $CRAWLORA_API_KEY"