Zomato All Restaurants API
Delivery restaurants across a whole area: a city, a box or a centre and radius, in one list without duplicates.
- 1 credit per call
- Failed calls are free
- Updated
- zomato.restaurants.all
{ "summary": { "city": "ncr", "fetched_at": "2026-09-24T08:48:44Z", "source_url": "https://www.zomato.com/ncr/delivery", "total_items": 1 }, "items": [ { "name": "Hira Sweets", "aggregate_rating": 3.9, "fetched_at": "2026-09-24T08:48:44Z", "res_id": "300658", "restaurant_id": "300658", "slug": "hira-sweets-connaught-place-new-delhi", "source_url": "https://www.zomato.com/ncr/delivery", "url": "https://www.zomato.com/ncr/hira-sweets-connaught-place-new-delhi/order", "votes": 15, "query_context": { "latitude": 28.6315, "longitude": 77.2167 } } ]}
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| center_latitude | number | no | From -90 to 90. | 28.6315 |
| center_longitude | number | no | From -180 to 180. | 77.2167 |
| city | string | no | City name. Default: ncr. |
ncr |
| max_latitude | number | no | From -90 to 90. | |
| max_longitude | number | no | From -180 to 180. | |
| max_restaurants | integer | no | From 1 to 5000. Default: 500. |
100 |
| min_latitude | number | no | From -90 to 90. | |
| min_longitude | number | no | From -180 to 180. | |
| radius_km | number | no | From 0.001 to 100. | 5 |
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. | Hira Sweets |
| items[].aggregate_rating | number | The restaurant's overall rating, out of 5. | 3.9 |
| items[].fetched_at | string | When this result was collected. | 2026-09-24T08:48:44Z |
| items[].query_context | object | 2 fields | |
| items[].query_context.latitude | number | Latitude. | 28.63 |
| items[].query_context.longitude | number | Longitude. | 77.22 |
| items[].res_id | string | Zomato's ID for the restaurant. | 300658 |
| items[].restaurant_id | string | Zomato's ID for the restaurant. | 300658 |
| items[].slug | string | The name in the page's address. | hira-sweets-connaught-place-new-delhi |
| items[].source_url | string | The Zomato page this came from. | https://www.zomato.com/ncr/delivery |
| items[].url | string | The page on Zomato. | https://www.zomato.com/ncr/hira-sweets-connaught-place-new-delh… |
| items[].votes | integer | How many ratings the restaurant has. | 15 |
| items | array | The results. | 1 records |
| summary | object | Totals for this response. | 4 fields |
| summary.city | string | The city. | ncr |
| summary.fetched_at | string | When this result was collected. | 2026-09-24T08:48:44Z |
| summary.source_url | string | The Zomato page this came from. | https://www.zomato.com/ncr/delivery |
| summary.total_items | integer | How many results this response holds. | 1 |
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.restaurants.all", "input": { "center_latitude": 28.6315, "center_longitude": 77.2167, "city": "ncr", "max_restaurants": 100, "radius_km": 5 }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "zomato.restaurants.all", "input": { "center_latitude": 28.6315, "center_longitude": 77.2167, "city": "ncr", "max_restaurants": 100, "radius_km": 5 }}''')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.restaurants.all", "input": { "center_latitude": 28.6315, "center_longitude": 77.2167, "city": "ncr", "max_restaurants": 100, "radius_km": 5 }}),});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 all restaurants for center latitude "28.6315", center longitude "77.2167" and city "ncr". 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 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
- Zomato Menu Images API1 credit
The same data from other platforms
Zomato All Restaurants API FAQ
The short answers. The docs have the long ones.
How much does the Zomato All Restaurants API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Every input is optional; the input fields below list what each one does.
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.restaurants.all, 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.