Zomato Dining Offers API
A restaurant's current dining offers: discount, title, when it is valid and whether booking or a bank card is needed.
- 1 credit per call
- Failed calls are free
- Updated
- zomato.restaurant.offers
{ "count": 5, "res_id": "18439027", "offers": [ { "title": "Flat 25% OFF", "bank_offer": false, "description": "Valid from 4:45PM to 6PM today Booking required", "discount_type": "percentage", "discount_value": 25, "heading": "PRE-BOOK OFFER", "type": "dining_benefit", "valid_from_local": "2026-10-05T16:45:00", "valid_until_local": "2026-10-05T18:00:00", "zomato_gold_required": false }, { "title": "Flat 15% OFF", "bank_offer": false, "description": "on bill payments", "discount_type": "percentage", "discount_value": 15, "heading": "INSTANT OFFER", "type": "dining_gold", "zomato_gold_required": true } ]}
| # | Offer | Type | Discount | Terms | Bank offer | Coupon code | Discount type | Type | Zomato gold required | Offer id |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Flat 25% OFF | PRE-BOOK OFFER | 25 | Valid from 4:45PM to 6PM today Booking required | false | percentage | dining_benefit | false | ||
| 2 | Flat 15% OFF | INSTANT OFFER | 15 | on bill payments | false | percentage | dining_gold | true | ||
| 3 | Get a scratch card | SURPRISE | after every transaction | false | cashback | cashback | false | |||
| 4 | FLAT ₹175 OFF | EXCLUSIVE OFFER | 175 | valid on your next dining payment | true | WELCOME175 | fixed | bank_offer | false | 101346 |
| 5 | 25% OFF for up to ₹5,000 using RBL Bank LUMIÈRE Credit Card | BANK OFFER | 25 | and more with other banks | true | RBL5000 | percentage | bank_offer | false | 102035 |
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 | Another name for restaurant_id, kept for older requests. | |
| restaurant_id | string | one of | The restaurant's numeric Zomato ID. | 18439027 |
| url | string | one of | The restaurant's Zomato link, as an alternative to the ID. |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| offers[].title | string | The collection's title. | Flat 25% OFF |
| offers[].heading | string | The offer's headline. | PRE-BOOK OFFER |
| offers[].discount_value | integer | The size of the discount. | 25 |
| offers[].description | string | The collection's description. | Valid from 4:45PM to 6PM today Booking required |
| offers[].bank_offer | boolean | Whether the offer needs a particular bank's card. | false |
| offers[].discount_type | string | Whether the discount is a percentage or an amount. | percentage |
| offers[].type | string | The kind of offer. | dining_benefit |
| offers[].valid_from_local | string | When the offer starts, in local time. | 2026-10-05T16:45:00 |
| offers[].valid_until_local | string | When the offer ends, in local time. | 2026-10-05T18:00:00 |
| offers[].zomato_gold_required | boolean | Whether the offer needs Zomato Gold. | false |
| count | integer | How many results this response holds. | 5 |
| offers | array | The restaurant's offers. | 5 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.offers", "input": { "restaurant_id": "18439027" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "zomato.restaurant.offers", "input": { "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.offers", "input": { "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
Using Upscrape, list the current Zomato dining offers at Skyhilton, Lucknow, with the discount and when each one is valid.
More from the Zomato API
- Zomato Restaurant API1 credit
- Zomato Reviews API1 credit
- Zomato Restaurants 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
- Zomato Menu Images API1 credit
The same data from other platforms
Zomato Dining Offers API FAQ
The short answers. The docs have the long ones.
How much does the Zomato Dining Offers 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.offers, 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.