Endpoint Playground
Returns restaurants delivering to a latitude/longitude, optionally filtered by a keyword or browsed within a curated collection. With no query and no collection_id this browses the nearby-restaurant listing; with a query it runs a keyword search across restaurant names, cuisines, and dishes; with a collection_id (from /swiggy/collections) it browses restaurants within that curated collection. query and collection_id are mutually exclusive. Keyword search has two result tabs, selected with tab: dish (the default) returns restaurants that serve a matching dish, each with the matching dishes, their prices, and Swiggy's own per-dish rating where it has one, in a dishes array; restaurant returns restaurants whose own name or cuisine matches, a wider set with no dishes. tab, veg, min_rating and offers are only valid together with query. sort works with either query (relevance, delivery_time, rating) or collection_id (those three plus cost_low_to_high and cost_high_to_low), and is rejected on a plain nearby browse. Each restaurant carries its id (the value the restaurant and menu endpoints take), name, cuisines, cost for two, rating, delivery time, open/closed status, a hero image, and, where one is shown, an external_rating block with the third-party aggregate score, count, and source. Where the result card advertises a promotion it also carries offers, the same title/description/tag shape /swiggy/restaurant returns (a listing card never carries a coupon code, and a card showing both a discount and a separate free-delivery benefit returns them as two entries). is_promoted is present and true only for a result Swiggy itself labels a sponsored placement rather than an organic one. unavailable_message is present only when Swiggy says the restaurant cannot currently be ordered from and carries its own reason; it is not the inverse of is_open, since Swiggy reports a restaurant as open while still refusing orders for the requested location. A plain nearby browse also returns is_serviceable, which says whether Swiggy delivers to the requested coordinates at all: false means the coordinates are outside Swiggy's delivery coverage, so the empty restaurants list is a coverage answer rather than a no-matches answer, while an empty list without the field means no matches in a served area. It is omitted on keyword search and on a collection_id browse, neither of which carries Swiggy's own coverage marker.
14 Oct 2026: 50 restaurants; 14 fields had a value in every checked item and 2 varied between items.
Sample value profiles: rating: 4 to 4.6, median 4.3; name: “Pizza Hut” and 49 other values; image_url: media-assets.swiggy.com.
curl 'https://api.crawlora.net/api/v1/swiggy/search?latitude=12.9716&longitude=77.5946&sort=relevance&tab=dish' \
-H "x-api-key: $CRAWLORA_API_KEY"| Parameter | Type | Required | Prefilled value | Description |
|---|---|---|---|---|
| latitude | number | Yes | 12.9716 | Search center latitude |
| longitude | number | Yes | 77.5946 | Search center longitude |
| query | string | No | Optional keyword to search restaurants and dishes by, at least 2 characters. Mutually exclusive with collection_id. | |
| collection_id | string | No | Optional curated collection id from /swiggy/collections's id field. Browses restaurants within that collection instead of the plain nearby listing. Mutually exclusive with query. | |
| sort | string | No | relevance | Optional sort order. With query: relevance, delivery_time, rating. With collection_id: those three plus cost_low_to_high and cost_high_to_low. Not valid on a plain nearby browse. |
| offset | string | No | Opaque pagination cursor from a prior response's next_offset (not meaningful when query is set) | |
| tab | string | No | dish | Which keyword-search result tab to read: dish (default, restaurants serving a matching dish, each with a dishes array) or restaurant (restaurants whose own name/cuisine matches). Only valid together with query. |
| veg | boolean | No | Only return vegetarian results: veg dishes on tab=dish, pure-veg restaurants on tab=restaurant. Only valid together with query. | |
| min_rating | number | No | Only return restaurants rated at or above this score (0-5). Only valid together with query. | |
| offers | boolean | No | Only return restaurants currently running an offer. Only valid together with query. |
{
"code": 200,
"msg": "OK",
"data": {
"restaurants": [
{
"id": "537139",
"name": "Narmada Chain of Restaurant",
"locality": "Koramangala",
"area": "Koramangala",
"cuisines": [
"Biryani",
"Andhra",
"South Indian"
],
"cost_for_two": "₹500 for two",
"rating": 4.4,
"rating_count": "13K+",
"external_rating": {
"source": "GOOGLE",
"rating": 4.2,
"count": "2.6K+"
},
"delivery_time_minutes": 51,
"is_open": true,
"image_url": "https://media-assets.swiggy.com/swiggy/image/upload/fl_lossy,f_auto,q_auto/RX_THUMBNAIL/IMAGES/VENDOR/2025/11/29/753d7fd4-a3f2-46d0-b803-4e1682b33109_537139.jpg",
"offers": [
{
"title": "ITEMS",
"description": "AT ₹39"
},
{
"title": "Free Delivery"
}
],
"is_promoted": true
}
],
"next_offset": "CJhlELQ4KICY0ZzT+sHYBDCnEw==",
"is_serviceable": true
}
}The sample response, schema and code snippets below work without an account. Sending a live request needs an API key.