{"openapi":"3.1.0","info":{"title":"Swedish Holidays API","description":"Free REST API for Swedish public holidays (röda dagar), afton-days, and workday calculations. Built by Gracestack AB.","contact":{"name":"Gracestack AB","url":"https://gracestack.se/"},"license":{"name":"MIT"},"version":"1.0.0"},"paths":{"/health":{"get":{"summary":"Health","description":"Liveness probe.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Health Get"}}}}}}},"/v1/holidays":{"get":{"summary":"List Holidays","description":"List Swedish holidays for a year.","operationId":"list_holidays_v1_holidays_get","parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","maximum":2100,"minimum":1900,"description":"Calendar year","title":"Year"},"description":"Calendar year"},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(public|eve)$"},{"type":"null"}],"description":"Filter by kind","title":"Kind"},"description":"Filter by kind"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HolidayOut"},"title":"Response List Holidays V1 Holidays Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/day/{day}":{"get":{"summary":"Day Status","description":"Check if a date is a holiday / workday.","operationId":"day_status_v1_day__day__get","parameters":[{"name":"day","in":"path","required":true,"schema":{"type":"string","title":"Day"}},{"name":"count_eves_as_off","in":"query","required":false,"schema":{"type":"boolean","description":"Treat Julafton/Midsommarafton etc. as non-workdays","default":true,"title":"Count Eves As Off"},"description":"Treat Julafton/Midsommarafton etc. as non-workdays"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DayStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/is-holiday":{"get":{"summary":"Is Holiday Endpoint","description":"Simple boolean holiday check (public-apis friendly).","operationId":"is_holiday_endpoint_v1_is_holiday_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"Date"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Is Holiday Endpoint V1 Is Holiday Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/is-workday":{"get":{"summary":"Is Workday Endpoint","description":"Simple boolean workday check.","operationId":"is_workday_endpoint_v1_is_workday_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"Date"},"description":"YYYY-MM-DD"},{"name":"count_eves_as_off","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Count Eves As Off"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Is Workday Endpoint V1 Is Workday Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/next-workday":{"get":{"summary":"Next Workday Endpoint","description":"First Swedish workday on or after the given date.","operationId":"next_workday_endpoint_v1_next_workday_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"Date"},"description":"YYYY-MM-DD"},{"name":"count_eves_as_off","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Count Eves As Off"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Next Workday Endpoint V1 Next Workday Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workdays":{"get":{"summary":"Workdays Endpoint","description":"Count inclusive workdays between two dates.","operationId":"workdays_endpoint_v1_workdays_get","parameters":[{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"Start"},"description":"YYYY-MM-DD"},{"name":"end","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"End"},"description":"YYYY-MM-DD"},{"name":"count_eves_as_off","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Count Eves As Off"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkdaysOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Landing","description":"Minimal landing + curl examples for GitHub PR traffic.","operationId":"landing__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"DayStatus":{"properties":{"date":{"type":"string","title":"Date"},"is_holiday":{"type":"boolean","title":"Is Holiday"},"holiday":{"anyOf":[{"$ref":"#/components/schemas/HolidayOut"},{"type":"null"}]},"is_weekend":{"type":"boolean","title":"Is Weekend"},"is_workday":{"type":"boolean","title":"Is Workday"}},"type":"object","required":["date","is_holiday","is_weekend","is_workday"],"title":"DayStatus","description":"Status for a single calendar day."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HolidayOut":{"properties":{"date":{"type":"string","title":"Date"},"name_sv":{"type":"string","title":"Name Sv"},"name_en":{"type":"string","title":"Name En"},"kind":{"type":"string","title":"Kind","description":"public | eve"}},"type":"object","required":["date","name_sv","name_en","kind"],"title":"HolidayOut","description":"Holiday payload."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WorkdaysOut":{"properties":{"start":{"type":"string","title":"Start"},"end":{"type":"string","title":"End"},"workdays":{"type":"integer","title":"Workdays"},"count_eves_as_off":{"type":"boolean","title":"Count Eves As Off"}},"type":"object","required":["start","end","workdays","count_eves_as_off"],"title":"WorkdaysOut","description":"Workday count between two dates."}}}}