Zomato Menu Images API
A restaurant's menu as Zomato shows it in photos, page by page.
- 1 credit per call
- Failed calls are free
- Updated
- zomato.restaurant.menu_images
{ "count": 3, "fetched_at": "2026-09-24T08:48:44Z", "res_id": "18439027", "items": [ { "name": "Food Menu", "description": "12 pages", "image_url": "https://b.zmtcdn.com/data/menus/027/18439027/a7d208532a2d9c1a8325f20cb3a2ad10.jpg?fit=around%7C200%3A200&crop=200%3A200%3B%2A%2C%2A" }, { "name": "Bar Menu", "description": "3 pages", "image_url": "https://b.zmtcdn.com/data/menus/027/18439027/c19f0a48456e769889af9776b2a7593b.jpg?fit=around%7C200%3A200&crop=200%3A200%3B%2A%2C%2A" } ]}
| # | Name | Description | Image url |
|---|---|---|---|
| 1 | Food Menu | 12 pages | https://b.zmtcdn.com/data/menus/027/18439027/a7d208532a2d9c1a83… |
| 2 | Bar Menu | 3 pages | https://b.zmtcdn.com/data/menus/027/18439027/c19f0a48456e769889… |
| 3 | Beverages | 1 page | https://b.zmtcdn.com/data/menus/027/18439027/56e46872d82d84bcd8… |
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| res_id | string | one of | Compatibility alias for restaurant_id. | |
| restaurant_id | string | one of | Canonical numeric Zomato restaurant identifier. | 18439027 |
| url | string | one of | Canonical https://www.zomato.com restaurant page link (optionally /info, /reviews or /menu). Resolved to the numeric restaurant id from the page and required to agree with restaurant_id/res_id when both are given. | |
| limit | integer | no | Maximum image-menu records to return. From 1 to 200. Default: 50. |
50 |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| items[].name | string | The name of the city, restaurant, dish or choice. | Food Menu |
| items[].description | string | The collection's description. | 12 pages |
| items[].image_url | string | Link to the image. | https://b.zmtcdn.com/data/menus/027/18439027/a7d208532a2d9c1a83… |
| count | integer | How many results this response holds. | 3 |
| fetched_at | string | When this result was collected. | 2026-09-24T08:48:44Z |
| items | array | The results. | 3 records |
| res_id | string | Zomato's ID for the restaurant. | 18439027 |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "zomato.restaurant.menu_images", "input": { "limit": 50, "restaurant_id": "18439027" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "zomato.restaurant.menu_images", "input": { "limit": 50, "restaurant_id": "18439027" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "zomato.restaurant.menu_images", "input": { "limit": 50, "restaurant_id": "18439027" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
With Upscrape, get the Zomato menu images for restaurant id "18439027". Tell me what it costs before you run it, then show the results as a table.
More from the Zomato API
- Zomato Restaurant API1 credit
- Zomato Reviews API1 credit
- Zomato Restaurants API1 credit
- Zomato Dining Offers API1 credit
- Zomato Order Menu API1 credit
- Zomato Delivery Serviceability API1 credit
- Zomato All Restaurants API1 credit
- Zomato Search API1 credit
- Zomato Location Search API1 credit
- Zomato Cities API1 credit
- Zomato Cuisines API1 credit
- Zomato Collections API1 credit
- Zomato Menu Images API1 credit
The same data from other platforms
Zomato Menu Images API FAQ
The short answers. The docs have the long ones.
How much does the Zomato Menu Images API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send restaurant_id or res_id or url. The input fields below list every option with its type and limits.
Do I need a Zomato login?
No. It reads public Zomato data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds zomato.restaurant.menu_images, checks its price and runs it with the same credits as the REST API.
Your first Zomato call is free.
Up to 100 free credits to start, no card needed.