{
  "openapi": "3.0.1",
  "info": {
    "title": "District Dining Scraper: Zomato Restaurants & Offers",
    "description": "Restaurants from District (by Zomato) across India: live table-booking discounts, ratings with food/service/ambience scores, cost for two, cuisines, phone, address, GPS, hours, menus and reviews. Browse with filters, search dishes, look up links or list a whole city. No login.",
    "version": "0.1",
    "x-build-id": "kAW4dLIYzxzrHgEit"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~district-dining-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-district-dining-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/yugenox~district-dining-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-district-dining-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/yugenox~district-dining-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-district-dining-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "location",
              "search",
              "restaurants",
              "fullCity"
            ],
            "type": "string",
            "description": "<b>Browse a location</b>: restaurants around a city or neighbourhood, with District's sort and filters (up to ~500 per location and filter set; turn on <i>Cover the whole city</i> for thousands).<br><b>Search</b>: restaurants matching a dish, cuisine or name near each location.<br><b>Specific restaurants</b>: District or Zomato restaurant links, or restaurant ids.<br><b>Every restaurant in a city</b>: the complete public directory of a city (includes closed and delivery-only places).",
            "default": "location"
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities (\"Mumbai\", \"Delhi NCR\", \"Bengaluru\"), neighbourhoods (\"Powai, Mumbai\", \"Koramangala\") or coordinates (\"19.0760, 72.8777\"). Used by every mode except <i>Specific restaurants</i>.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Search terms",
            "type": "array",
            "description": "For <i>Search</i>: dishes, cuisines or restaurant names, e.g. \"biryani\", \"sushi\", \"rooftop\". District returns up to 20 restaurants per term and location; turn on <i>Cover the whole city</i> to repeat the search in every neighbourhood.",
            "items": {
              "type": "string"
            }
          },
          "restaurants": {
            "title": "Restaurant links or ids",
            "type": "array",
            "description": "For <i>Specific restaurants</i>: district.in/dining/... links, zomato.com restaurant links, or numeric restaurant ids (District and Zomato share ids).",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max restaurants",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many restaurants in total. 0 = no limit.",
            "default": 100
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "popularity",
              "rating",
              "offer",
              "costLowToHigh",
              "costHighToLow",
              "distance"
            ],
            "type": "string",
            "description": "Browse mode only. District's own sort orders.",
            "default": "popularity"
          },
          "cuisines": {
            "title": "Cuisines",
            "type": "array",
            "description": "Only restaurants serving any of these cuisines, e.g. \"North Indian\", \"Japanese\", \"Chinese\", \"Desserts\". Names are matched to District's cuisine list (87 cuisines).",
            "items": {
              "type": "string"
            }
          },
          "quickFilters": {
            "title": "Quick filters",
            "type": "array",
            "description": "District's quick filters. All selected filters must match.",
            "items": {
              "type": "string",
              "enum": [
                "openNow",
                "openLate",
                "pureVeg",
                "servesAlcohol",
                "outdoorSeating",
                "petFriendly",
                "cafes",
                "fineDining",
                "offer30",
                "offer50",
                "nearAndTopRated"
              ],
              "enumTitles": [
                "Open now",
                "Open late",
                "Pure veg",
                "Serves alcohol",
                "Outdoor seating",
                "Pet friendly",
                "Cafés",
                "Fine dining",
                "30% off and above",
                "50% off",
                "Near & top rated"
              ]
            }
          },
          "costForTwo": {
            "title": "Cost for two",
            "type": "array",
            "description": "Price bands (in rupees).",
            "items": {
              "type": "string",
              "enum": [
                "under1000",
                "1000to1500",
                "1500to2000",
                "2000to2500",
                "over2500"
              ],
              "enumTitles": [
                "Less than ₹1,000",
                "₹1,000 - ₹1,500",
                "₹1,500 - ₹2,000",
                "₹2,000 - ₹2,500",
                "₹2,500 and above"
              ]
            }
          },
          "minRating": {
            "title": "Minimum rating",
            "enum": [
              "any",
              "3.5",
              "4.0",
              "4.5"
            ],
            "type": "string",
            "description": "Only restaurants rated at least this.",
            "default": "any"
          },
          "coverWholeCity": {
            "title": "Cover the whole city",
            "type": "boolean",
            "description": "Repeat the query in every neighbourhood District knows for the city (Mumbai has 36, Pune 11; smaller cities get a grid) and merge the results without duplicates. Goes past the ~500-per-query limit: about 3,000 restaurants for Pune in 2.5 minutes. With the default sort, each neighbourhood is read nearest-first.",
            "default": false
          },
          "maxItemsPerLocation": {
            "title": "Max restaurants per location",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap for each location (and each search term in Search mode). Empty = only the overall limit applies."
          },
          "urlContains": {
            "title": "Directory: only links containing",
            "type": "string",
            "description": "For <i>Every restaurant in a city</i>: keep only restaurants whose link contains this text, e.g. \"koramangala\", \"gurgaon\", \"bandra-west\". District links end with the neighbourhood and city."
          },
          "skipClosed": {
            "title": "Skip closed restaurants",
            "type": "boolean",
            "description": "Leave out restaurants District marks as temporarily or permanently closed (for dining or altogether). Most useful with <i>Every restaurant in a city</i>, whose directory still lists closed places.",
            "default": false
          },
          "includeDetails": {
            "title": "Full restaurant details",
            "type": "boolean",
            "description": "Open each restaurant's page for phone, address, GPS, opening hours, rating count and food/service/ambience scores, facilities, highlights, photos and all live offers. Turn off for a faster, lighter listing (name, locality, cuisine, cost for two, rating, discount, distance). Always on for <i>Specific restaurants</i> and <i>Every restaurant in a city</i>.",
            "default": true
          },
          "includeReviews": {
            "title": "Include recent reviews",
            "type": "boolean",
            "description": "Add the latest reviews shown on each restaurant page (rating, text, date, photos).",
            "default": false
          },
          "maxReviews": {
            "title": "Reviews per restaurant",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Up to 10 (what District shows on the restaurant page).",
            "default": 5
          },
          "includeMenuImages": {
            "title": "Include menu images",
            "type": "boolean",
            "description": "Links to every menu page photo, grouped by menu section (Food, Bar, Beverages...).",
            "default": false
          },
          "includeBankOffers": {
            "title": "Include bank / card offers",
            "type": "boolean",
            "description": "Add the card and bank offers shown on each restaurant page (e.g. \"10% OFF up to ₹1,200 on ... Credit Card\").",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Parallel requests. 20 is fast and safe.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy's automatic (datacenter) group works and is the cheapest. The actor switches to residential (India) proxies on its own if it gets blocked.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}