{
  "openapi": "3.0.1",
  "info": {
    "title": "BookMyShow Showtimes Scraper",
    "description": "Finds every showtime for a movie across the cinemas in a city - dates, times, theatres, and ticket price ranges - even though BookMyShow releases each cinema's schedule on its own timetable.",
    "version": "1.0",
    "x-build-id": "IIAf1jcvOoF3hIzK7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/monknwarriors~bookmyshow-showtimes-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-monknwarriors-bookmyshow-showtimes-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/monknwarriors~bookmyshow-showtimes-scraper/runs": {
      "post": {
        "operationId": "runs-sync-monknwarriors-bookmyshow-showtimes-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/monknwarriors~bookmyshow-showtimes-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-monknwarriors-bookmyshow-showtimes-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",
        "required": [
          "citySlugs"
        ],
        "properties": {
          "citySlugs": {
            "title": "Cities",
            "type": "array",
            "description": "Which cities to check. Use the short city name from that city's BookMyShow web address — you can find it by opening BookMyShow, picking a city, and reading the address bar. BookMyShow covers well over a thousand towns and cities, not just the major ones, so type any city's slug even if it isn't listed here. The major metros are: mumbai, national-capital-region-ncr (Delhi-NCR), bengaluru, hyderabad, chandigarh, ahmedabad, pune, chennai, kolkata, kochi.",
            "items": {
              "type": "string"
            }
          },
          "eventCodes": {
            "title": "Movies",
            "type": "array",
            "description": "The BookMyShow code for each movie, found in its BookMyShow web address (the part that looks like ET00505635). Leave this empty to automatically track whatever's currently showing in each city instead of naming specific movies — see \"Currently-showing movies per city\" below to limit how many.",
            "items": {
              "type": "string"
            }
          },
          "maxRecommendedMoviesPerCity": {
            "title": "Currently-showing movies per city",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Only used when Movies is left empty. Caps how many of BookMyShow's currently-recommended movies are checked per city, so a run doesn't grow unbounded.",
            "default": 5
          },
          "dateMode": {
            "title": "Which dates to check",
            "enum": [
              "AUTO_DISCOVER",
              "EXPLICIT_DATES",
              "DATE_RANGE"
            ],
            "type": "string",
            "description": "BookMyShow does not release every cinema's schedule at once, so there's no single fixed number of days to check. \"Find every date automatically\" keeps looking day by day until it stops finding new showtimes — this is the right choice for most people.",
            "default": "AUTO_DISCOVER"
          },
          "maxDaysAhead": {
            "title": "Stop looking after this many days ahead",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "A safety limit for \"Find every date automatically\", so a run can't keep going forever.",
            "default": 30
          },
          "emptyDateStreakLimit": {
            "title": "Stop after this many empty days in a row",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "For \"Find every date automatically\" — once this many days in a row have no showtimes listed yet, the scraper assumes the schedule isn't released any further and stops.",
            "default": 2
          },
          "dates": {
            "title": "Exact dates to check",
            "type": "array",
            "description": "Used only with \"Only these exact dates\". Each date as YYYYMMDD, e.g. 20260906.",
            "items": {
              "type": "string"
            }
          },
          "fromDate": {
            "title": "Start date",
            "type": "string",
            "description": "Used only with \"Every date in a range\". YYYYMMDD, e.g. 20260906."
          },
          "toDate": {
            "title": "End date",
            "type": "string",
            "description": "Used only with \"Every date in a range\". YYYYMMDD, e.g. 20260920."
          },
          "fetchVenueDetail": {
            "title": "Cinema detail lookup",
            "enum": [
              "AUTO",
              "ALWAYS",
              "NEVER"
            ],
            "type": "string",
            "description": "Leave this on Automatic — it looks up each cinema individually, which is what makes ticket prices and language/format available on every row. \"Never\" is much faster but returns showtimes with no price information at all, since BookMyShow only exposes prices through that per-cinema lookup.",
            "default": "AUTO"
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Leave this on the default (Residential, India) — BookMyShow expects requests to come from an Indian IP address and blocks ones that don't. This actor only fetches small JSON responses (no images or video), so proxy usage stays low even on Residential.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "IN"
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}