Swiggy APIswiggy.com ↗
Access Swiggy restaurant listings, full menus, dineout details, and Instamart grocery categories via 7 structured API endpoints.
What is the Swiggy API?
The Swiggy API provides 7 endpoints covering food delivery restaurants, full menu data, dineout search, and Instamart grocery categories from swiggy.com. Using get_restaurant_details, you can retrieve every menu category, item price, variant, and offer for a given restaurant ID. search_restaurants returns matching dishes and restaurants by keyword, and search_dineout_restaurants exposes dine-in venues with ratings, cuisines, locality, and cost-for-two.
curl -X GET 'https://api.parse.bot/scraper/0fca980e-bb1b-497c-9e70-fe66ef61fab8/get_restaurants_by_city?lat=12.9716&lng=77.5946' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace swiggy-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Swiggy API — browse restaurants, search dishes, explore grocery categories."""
from parse_apis.swiggy_api import Swiggy, RestaurantNotFound
client = Swiggy()
# Browse restaurants in Bangalore (default coordinates)
city = client.citylistings.get(lat=12.9716, lng=77.5946)
print(f"City listing status: {city.status_code}")
print(f"Number of cards: {len(city.data.cards)}")
# Search for pizza dishes/restaurants
results = client.restaurants.search(query="pizza", lat=12.9716, lng=77.5946)
print(f"Search status: {results.status_code}")
print(f"Search result cards: {len(results.data.cards)}")
# Get details for a specific restaurant
try:
detail = client.restaurants.get(restaurant_id="23846", lat=12.9716, lng=77.5946)
print(f"Restaurant detail status: {detail.status_code}")
print(f"Menu sections: {len(detail.data.cards)}")
except RestaurantNotFound as exc:
print(f"Restaurant not found: {exc.restaurant_id}")
# Explore Instamart grocery categories
groceries = client.grocerylistings.get(lat=12.9716, lng=77.5946)
print(f"Grocery listing status: {groceries.status_code}")
print("exercised: citylistings.get / restaurants.search / restaurants.get / grocerylistings.get")
Get list of restaurants for a given city/coordinates, including popular categories, top restaurant chains, and restaurant listings with ratings, cuisines, delivery time, and offers. Returns Swiggy's card-based response with heterogeneous widgets for the city homepage.
| Param | Type | Description |
|---|---|---|
| lat | number | Latitude of location. |
| lng | number | Longitude of location. |
{
"type": "object",
"fields": {
"data": "object containing statusMessage, pageOffset, and cards array with restaurant listings and category widgets",
"statusCode": "integer indicating success (0) or failure"
},
"sample": {
"data": {
"cards": [
{
"card": {
"card": {
"@type": "type.googleapis.com/swiggy.gandalf.widgets.v2.GridWidget",
"header": {
"title": "What's on your mind?"
}
}
}
}
],
"pageOffset": {
"nextOffset": "CJhlELQ4KID405flsYCjWjCnEzgB"
},
"statusMessage": "done successfully"
},
"statusCode": 0
}
}About the Swiggy API
Restaurant Discovery and Search
The get_restaurants_by_city endpoint accepts lat and lng coordinates and returns a card-based response that mirrors Swiggy's city homepage — popular category widgets, top chains, and individual restaurant listings each carrying cuisine tags, delivery time estimates, ratings, and active offers. search_restaurants takes a keyword query (e.g. "biryani" or "pizza") alongside coordinates and returns results split into RESTAURANT and DISH tabs, so you can distinguish whether a match is a venue or a specific menu item.
Full Menu and Restaurant Details
get_restaurant_details requires a numeric restaurant_id string and optional delivery coordinates. The response includes the restaurant's metadata, available tabs (Order Online, Dineout), all grouped menu categories, individual item names and prices, variants, ratings, and any live offers. This is the right endpoint when you need a complete picture of what a restaurant serves and at what price.
Dineout (Dine-In) Data
search_dineout_restaurants searches Swiggy's dine-in product by keyword and returns an array of matching venues, each with avg_rating, total_ratings, cost_for_two, locality, area_name, and city. get_dineout_restaurant_details goes deeper on a single venue: it returns structured timings (day/hours schedule), an offers array, a highlights array, a location object with formatted address and coordinates, and the canonical dineout_url.
Instamart Grocery Categories
get_instamart_categories returns Swiggy Instamart's grocery category tree — groups like Fresh items and Grocery & Kitchen — for a given location and optional store_id. Note that search_instamart_products (product-level grocery search) is currently blocked by WAF protection and will not return results.
The Swiggy API is a managed, monitored endpoint for swiggy.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when swiggy.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official swiggy.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a restaurant discovery app that surfaces top chains and popular cuisine categories for any Indian city using
get_restaurants_by_city. - Aggregate and compare menu prices across multiple restaurants for a given dish using
search_restaurantsDISH tab results. - Populate a food-ordering interface with full item variants, prices, and offers by calling
get_restaurant_detailsfor a specific restaurant ID. - Create a dine-in venue finder that shows ratings, cost-for-two, and opening hours using
search_dineout_restaurantsandget_dineout_restaurant_details. - Monitor live offers and discounts on dine-in restaurants by checking the
offersarray inget_dineout_restaurant_detailsresponses. - Display Instamart grocery category navigation for a location-aware grocery browsing feature using
get_instamart_categories. - Track delivery time estimates and cuisine coverage across neighborhoods by querying
get_restaurants_by_citywith varying coordinates.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Swiggy have an official public developer API?+
What does `get_dineout_restaurant_details` return beyond basic info?+
timings object with day-by-day opening hours, an offers array with title and description per offer, a highlights array of feature strings (e.g. parking, outdoor seating), a location object with formatted_address, lat, lng, area_name, and city, plus ratings with a numeric value and review count. It also includes the canonical dineout_url for linking directly to the venue's Swiggy Dineout page.Does `search_restaurants` let you filter by cuisine, rating, or delivery time?+
cuisine or min_rating in the current input spec. The results come back pre-grouped into RESTAURANT and DISH tabs. You can fork the API on Parse and revise it to add parameter-driven filtering if your use case requires it.Is Instamart product-level search available?+
search_instamart_products endpoint is blocked by AWS WAF protection and does not return results. get_instamart_categories does work and returns the grocery category tree. You can fork the API on Parse and revise it to add product-level data once the endpoint becomes accessible.