Swiggy APIswiggy.com ↗
Access Swiggy restaurant listings, full menus, search results, and Instamart grocery categories via 5 structured API endpoints.
What is the Swiggy API?
The Swiggy API covers 5 endpoints that expose restaurant discovery, detailed menus, keyword search, and Instamart grocery category data from Swiggy's food delivery platform. With get_restaurant_details, you can retrieve a full restaurant menu including item prices, variants, ratings, and available offers for any Swiggy restaurant ID. Location-aware queries across all endpoints accept lat and lng parameters to return results relevant to a specific delivery address.
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
get_restaurants_by_city returns a cards array that includes popular food category widgets (the "What's on your mind?" section), top restaurant chains, and individual restaurant listings. Each listing exposes cuisine tags, delivery time estimates, average ratings, and active offers. search_restaurants accepts a keyword query such as "biryani" or "pizza" and returns results split across RESTAURANT and DISH tabs, including dish-level details with prices and the restaurants that serve them — useful for building ingredient- or dish-first discovery flows.
Restaurant Details and Menus
get_restaurant_details requires a restaurant_id (a numeric string like "23846") and optional delivery coordinates. The response cards array contains restaurant metadata, applicable offers, navigation tabs (Order Online, Dineout), and menu items grouped by category. Each menu item can include price, rating, and variant options, making this endpoint suitable for reconstructing a full menu view or comparing item-level pricing across locations.
Instamart Grocery Data
get_instamart_categories returns Instamart's grocery category tree for a given location, organized into groups such as "Fresh items" and "Grocery & Kitchen", each containing category names and images. An optional store_id parameter targets a specific Instamart fulfillment location. Note that search_instamart_products — which would return individual grocery product results — is currently blocked by AWS WAF protection and does not return data.
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 cuisine categories and delivery time estimates by neighborhood using
get_restaurants_by_city. - Aggregate and compare full menus across multiple Swiggy restaurants for a given dish type using
get_restaurant_detailswith differentrestaurant_idvalues. - Power a dish-first search experience that lets users find which restaurants serve a specific item via
search_restaurants. - Display active Swiggy offers and promotions for a specific restaurant by parsing the offers cards in the
get_restaurant_detailsresponse. - Populate an Instamart grocery category browser for a delivery address using the category groups and images from
get_instamart_categories. - Track how restaurant ratings, delivery times, or offer availability shift across different
lat/lngcoordinates for competitive analysis.
| 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 developer API?+
What does `search_restaurants` return beyond restaurant names?+
search_restaurants returns results in two tabs: RESTAURANT and DISH. The RESTAURANT tab includes restaurant names, ratings, cuisine tags, and delivery details. The DISH tab returns individual dish names, prices, and the restaurant serving each dish, along with sort and filter option metadata.Can the API return individual grocery product listings from Instamart?+
get_instamart_categories, but search_instamart_products is blocked by WAF protection and does not return product results. You can fork this API on Parse and revise it to add a working Instamart product endpoint if that protection changes.Does the menu returned by `get_restaurant_details` include item-level nutritional or allergen information?+
get_restaurant_details endpoint returns item names, prices, ratings, and variants. Nutritional data and allergen labels are not fields exposed in the current response shape. You can fork the API on Parse and revise it to surface those fields if the underlying restaurant listing includes them.Are results location-specific, and what happens if no coordinates are provided?+
lat and lng as optional inputs. When coordinates are supplied, results reflect restaurants and stores serviceable to that delivery location — including relevant delivery times and offers. Without coordinates, results may fall back to a default or generic view; for accurate local data, passing coordinates is recommended.