{
  "openapi": "3.0.1",
  "info": {
    "title": "LUX Event Listings Scraper",
    "description": "Collect LUX event listings and return event titles, types, start and end dates, times, venues, booking links, images and descriptions. Choose a year, event type, keyword or event URL; the WordPress API can retrieve events back to 2011, beyond the latest listing page.",
    "version": "0.1",
    "x-build-id": "I8Iv2gK3EPd2wGspg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/axiomworks~lux-events-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-axiomworks-lux-events-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/axiomworks~lux-events-scraper/runs": {
      "post": {
        "operationId": "runs-sync-axiomworks-lux-events-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/axiomworks~lux-events-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-axiomworks-lux-events-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": {
          "startUrls": {
            "title": "LUX listing, archive, search or event URLs",
            "type": "array",
            "description": "LUX page URLs as {\"url\":\"https://lux.org.uk/whats-on/\"} objects. Accepts /event/, /event/{slug}/, /event_catogories/{slug}/, /years/{year}/ and /?s={keyword}. Empty returns newest events. Listing URLs combine with filters; single event URLs ignore type, year and keyword filters. URLs share maxItems. Dead or blocked targets return no rows with warnings; correct the URL or retry with proxyConfiguration.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "eventUrls": {
            "title": "LUX URLs as plain strings",
            "type": "array",
            "description": "LUX page URLs as strings, e.g. [\"https://lux.org.uk/event/showing-up/\"]. Accepts the same listing, archive, search and event URLs as startUrls. Both lists combine in order, share maxItems and skip duplicate events. Default [] adds no URLs.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "eventIds": {
            "title": "WordPress event IDs",
            "type": "array",
            "description": "Positive LUX WordPress event IDs as strings, e.g. IDs from a previous dataset. Default [] adds none. Runs after URLs, shares maxItems and skips duplicates. Type, year and search filters do not apply; upcomingOnly and date windows do. Unknown IDs return no rows with a warning.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "eventType": {
            "title": "Event type slug, e.g. workshop",
            "enum": [
              "",
              "activity",
              "artist-development",
              "book-launch",
              "education",
              "exhibition",
              "exhibition-opening",
              "festival",
              "in-dialogue",
              "lecture",
              "listening-party",
              "lux-salon",
              "members-event",
              "new-work",
              "online-exhibition",
              "online-screening",
              "performance",
              "reading-group",
              "screening-talk",
              "symposium",
              "workshop"
            ],
            "type": "string",
            "description": "Event type to keep, as the lux.org.uk type slug, e.g. 'screening-talk' (the most common), 'exhibition', 'workshop', 'education', 'performance', 'online-exhibition', 'in-dialogue' or 'lux-salon'. Empty (default) = every type. An unknown type returns 0 events with a warning.",
            "default": ""
          },
          "category": {
            "title": "Event type alias, e.g. Screening/Talk",
            "type": "string",
            "description": "Alias of eventType for callers that prefer this name; accepts a slug ('screening-talk') or a type name ('Screening/Talk'). Ignored when eventType is set. Default: empty.",
            "default": ""
          },
          "year": {
            "title": "Programme year string, e.g. 2017",
            "type": "string",
            "description": "Programme year to keep, e.g. '2017'. The year archive covers 2017 to the current year (events before 2017 have no year tag: use search or the full listing for them). An unknown year returns 0 events with a warning. Default: every year.",
            "default": ""
          },
          "search": {
            "title": "Title and description keyword, e.g. Zoom",
            "type": "string",
            "description": "Keyword to search event titles and descriptions for, e.g. 'workshop' or 'Zoom' (the site's own search). A term with no hits returns 0 events with a warning. Default: no keyword.",
            "default": ""
          },
          "dateFrom": {
            "title": "First day of date window",
            "type": "string",
            "description": "Include events ending on or after this YYYY-MM-DD date. Empty default applies no lower bound. Uses event dates, not publication dates. Combines with dateTo and other filters; undated events are excluded. Examines up to dateScanLimit per target.",
            "default": ""
          },
          "dateTo": {
            "title": "Last day of date window",
            "type": "string",
            "description": "Include events starting on or before this YYYY-MM-DD date. Empty default applies no upper bound. Inclusive overlap retains exhibitions spanning the window. Must be on or after dateFrom when both are set.",
            "default": ""
          },
          "dateScanLimit": {
            "title": "Date window scan limit",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum newest events examined per target when dateFrom or dateTo is set. Integer 1-1000, default 100; ignored without date bounds. Combine year or search to narrow archive scans. With upcomingOnly, the smaller of this and upcomingScanLimit applies. Only returned events are charged.",
            "default": 100
          },
          "upcomingOnly": {
            "title": "Keep upcoming events, true or false",
            "type": "boolean",
            "description": "Set true to keep events ending today or later in UTC, e.g. true. Default false includes past events. Checks newest publications up to upcomingScanLimit and shares maxItems across targets. If no rows match, increase upcomingScanLimit, relax other filters or set false.",
            "default": false
          },
          "upcomingScanLimit": {
            "title": "Upcoming scan count, e.g. 40",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Number of newest events to examine when upcomingOnly=true, e.g. 40. Integer 1-1000, default 100; ignored when upcomingOnly=false. Each examined event requires a detail request, but only returned events are charged. Increase this if the upcoming scan returns no rows.",
            "default": 100
          },
          "maxItems": {
            "title": "Shared event result limit, e.g. 10",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum events saved across all URLs and filters, e.g. 10. Integer 0-10000, default 50; 0 collects all matching events up to 10000. Duplicate ids count once. Stops at this shared result limit or the run spending limit; only saved events are charged.",
            "default": 50
          },
          "includeContentHtml": {
            "title": "Include raw description HTML, true or false",
            "type": "boolean",
            "description": "Set true to include contentHtml in each row, e.g. true (default). Set false to omit contentHtml and reduce output size; description remains as plain text.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy settings, e.g. useApifyProxy true",
            "type": "object",
            "description": "Proxy configuration object, e.g. {\"useApifyProxy\":true} (default: Apify datacenter proxy). Blocked requests retry with fresh sessions. If warnings show persistent HTTP 403 or a block page, retry later or select a residential group in this object.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}