{
  "openapi": "3.0.1",
  "info": {
    "title": "Public Holidays Scraper — Any Country, Any Year, Next Holidays",
    "description": "Public holidays for 204 countries: full year or multi-year calendars, upcoming holidays, is-today-a-holiday checks, long weekends with bridge days, school holidays (36 countries), regional filters. Local + English names, weekday, days-from-now. No API key.",
    "version": "0.1",
    "x-build-id": "n7dnnvNu34VVLTb4s"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yadroo~public-holidays/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yadroo-public-holidays",
        "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/yadroo~public-holidays/runs": {
      "post": {
        "operationId": "runs-sync-yadroo-public-holidays",
        "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/yadroo~public-holidays/run-sync": {
      "post": {
        "operationId": "run-sync-yadroo-public-holidays",
        "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": {
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "ISO 3166-1 alpha-2 codes (`KZ`, `US`, `DE`, `GB`…). English names and common aliases (`Germany`, `UK`, `USA`) are also accepted; letter case, accents and a space instead of a hyphen do not matter. 204 countries supported (full list in the README). Needed in every mode except `nextWorldwide` (there it acts as a filter). An unknown value is skipped and named in the status with a suggestion; if no value can be read, the run stops with that message.",
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "year",
              "range",
              "next",
              "isHoliday",
              "longWeekends",
              "school",
              "countryInfo",
              "nextWorldwide"
            ],
            "type": "string",
            "description": "What to fetch. `year` / `next` / `longWeekends` are the original modes; the others were added for scheduling, HR, logistics and market-research jobs. One dataset row per holiday (or per country in layout `perCountry`).",
            "default": "year"
          },
          "year": {
            "title": "Year",
            "minimum": 1975,
            "maximum": 2100,
            "type": "integer",
            "description": "Calendar year for modes `year`, `longWeekends`, `countryInfo` (and the first year of `range` when `yearFrom` is empty). Empty = the current year on the day of the run (in `utcOffsetHours`). Nager.Date typically covers 1975–2100 (varies by country; an out-of-range year is reported for that country in the SUMMARY record, not as a row)."
          },
          "yearFrom": {
            "title": "Year from",
            "minimum": 1975,
            "maximum": 2100,
            "type": "integer",
            "description": "First year for mode `range` (max 10 years per run). Empty = `year`, or the current year. Ignored when startDate/endDate are set."
          },
          "yearTo": {
            "title": "Year to",
            "minimum": 1975,
            "maximum": 2100,
            "type": "integer",
            "description": "Last year (inclusive) for mode `range`. Defaults to `yearFrom`."
          },
          "startDate": {
            "title": "Start date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Inclusive lower bound `YYYY-MM-DD`. Works in every calendar mode (`year`, `range`, `school`, `longWeekends`) as a post-filter; with `range`/`school` it also defines which years are fetched."
          },
          "endDate": {
            "title": "End date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Inclusive upper bound `YYYY-MM-DD`."
          },
          "nextDays": {
            "title": "Next N days",
            "minimum": 1,
            "maximum": 730,
            "type": "integer",
            "description": "Mode `next`: how far ahead to look from today.",
            "default": 365
          },
          "date": {
            "title": "Date to check",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Mode `isHoliday`: the day to check (`YYYY-MM-DD`). Default: today in `utcOffsetHours`."
          },
          "utcOffsetHours": {
            "title": "UTC offset (hours) for \"today\"",
            "minimum": -12,
            "maximum": 14,
            "type": "integer",
            "description": "Defines the calendar date of \"today\" used by `next`, `isHoliday` and `daysFromNow` (e.g. 5 for Kazakhstan, -5 for New York). Default UTC.",
            "default": 0
          },
          "types": {
            "title": "Holiday types",
            "type": "array",
            "description": "Keep only holidays of these types. Empty = all. Most countries only have `Public`; US/CA/GB/AU/DE… also carry Bank/School/Observance/Optional. School-calendar types come from mode `school`.",
            "items": {
              "type": "string",
              "enum": [
                "Public",
                "Bank",
                "School",
                "Authorities",
                "Optional",
                "Observance",
                "BackToSchool",
                "EndOfLessons"
              ],
              "enumTitles": [
                "Public — official day off",
                "Bank — banks/offices closed",
                "School — schools closed",
                "Authorities — government offices closed",
                "Optional — majority of people take the day off",
                "Observance — observed, not a day off",
                "BackToSchool — first school day (OpenHolidays school calendar)",
                "EndOfLessons — last school day (OpenHolidays school calendar)"
              ]
            }
          },
          "nationalOnly": {
            "title": "Nationwide holidays only",
            "type": "boolean",
            "description": "Drop regional holidays (those limited to certain states/counties, e.g. Epiphany in DE-BW/BY/ST).",
            "default": false
          },
          "subdivision": {
            "title": "Subdivision (state / region)",
            "type": "string",
            "description": "ISO 3166-2 code such as `DE-BY`, `US-CA`, `ES-CT` (prefix optional when a single country is requested). Keeps nationwide holidays plus the ones valid in this subdivision; long weekends then count that subdivision's holidays too, and OpenHolidays school calendars are read for it. Applies only to the matching country in multi-country runs."
          },
          "skipWeekendHolidays": {
            "title": "Skip holidays falling on Saturday/Sunday",
            "type": "boolean",
            "description": "Keep only holidays that actually remove a working day (Mon–Fri). Note: substitute days-off (e.g. \"Monday after\") are only included where the source lists them.",
            "default": false
          },
          "source": {
            "title": "Data source",
            "enum": [
              "auto",
              "nager",
              "openholidays"
            ],
            "type": "string",
            "description": "Nager.Date covers 204 countries with English + local names. OpenHolidays covers 36 (mostly European) countries with names in every official language, `regionalScope`/`temporalScope` and school holidays; it is always used for mode `school`.",
            "default": "auto"
          },
          "language": {
            "title": "Language (OpenHolidays names)",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string",
            "description": "ISO 639-1 code for OpenHolidays requests (`EN`, `DE`, `FR`, `ES`…). Empty = `EN`. `localName` uses the country's first official language; `name` stays English when available."
          },
          "availableBridgeDays": {
            "title": "Bridge days available (long weekends)",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Mode `longWeekends`: how many vacation days an employee can spend on each side of a holiday to join it to a weekend. 1 = Nager.Date's own long weekends; with 2–3 (or a `subdivision`) the actor computes them from the calendar with the same rules.",
            "default": 1
          },
          "layout": {
            "title": "Layout",
            "enum": [
              "rows",
              "perCountry"
            ],
            "type": "string",
            "description": "`perCountry` is handy for agents and dashboards: total / national / regional / weekday counts, by-month and by-type breakdowns, next holiday, plus the `holidays` array. Applies to `year`, `range`, `next`, `school`.",
            "default": "rows"
          },
          "dedupe": {
            "title": "Deduplicate",
            "type": "boolean",
            "description": "Drop repeated rows with the same country, states/regions (subdivisions), start and end date and name. Rows for different states are kept apart, so school holidays stay one row per state.",
            "default": true
          },
          "fields": {
            "title": "Output fields",
            "type": "array",
            "description": "Keep only these columns, in this order, e.g. `[\"date\", \"name\", \"localName\"]`. `countryCode` always comes first unless you list it elsewhere. Empty = every column of the mode. Letter case is forgiven; an unknown name (with a suggestion) or a column of another mode is named in the status; a list with no column of this mode's rows stops the run with the valid names. Column lists per row type: README → Output.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many dataset rows (cost cap). A country-year is ~10–20 rows.",
            "default": 5000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}