{"openapi":"3.1.0","info":{"title":"Kalenderwoche.info API","version":"1.1.0","description":"Validated ISO 8601 week data and explicitly scoped regional calendar data without registration or hidden telemetry."},"servers":[{"url":"https://kalenderwoche.info"}],"paths":{"/api/health":{"get":{"operationId":"getHealth","summary":"Service liveness","responses":{"200":{"description":"Service is running"}}}},"/api/version":{"get":{"operationId":"getVersion","summary":"Release, API and data versions","responses":{"200":{"description":"Version information"}}}},"/api/v1/current-week":{"get":{"operationId":"getCurrentWeek","summary":"Current ISO week","parameters":[{"name":"timeZone","in":"query","schema":{"type":"string","default":"Europe/Berlin"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/week-from-date":{"get":{"operationId":"getWeekFromDate","summary":"ISO week for a Gregorian date","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/week-range":{"get":{"operationId":"getWeekRange","summary":"Monday-to-Sunday range for an ISO week","parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","minimum":1900,"maximum":2100}},{"name":"week","in":"query","required":true,"schema":{"type":"integer","minimum":1,"maximum":53}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/year-weeks":{"get":{"operationId":"getYearWeeks","summary":"All ISO weeks in a year","parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","minimum":1900,"maximum":2100}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/years-with-53-weeks":{"get":{"operationId":"getYearsWith53Weeks","summary":"Years containing ISO week 53","parameters":[{"name":"from","in":"query","schema":{"type":"integer","minimum":1900,"maximum":2100,"default":1900}},{"name":"to","in":"query","schema":{"type":"integer","minimum":1900,"maximum":2100,"default":2100}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/kw/heute":{"get":{"operationId":"getCurrentWeekLegacyPath","summary":"Compatibility path for the current ISO week","description":"Stable compatibility path; same response contract as /api/v1/current-week.","parameters":[{"name":"timeZone","in":"query","schema":{"type":"string","default":"Europe/Berlin"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/kw/{year}":{"get":{"operationId":"getYearWeeksByPath","summary":"All ISO weeks in a year by path","parameters":[{"name":"year","in":"path","required":true,"schema":{"type":"integer","minimum":1900,"maximum":2100}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/kw/{year}/{week}":{"get":{"operationId":"getWeekRangeByPath","summary":"ISO week range by path","parameters":[{"name":"year","in":"path","required":true,"schema":{"type":"integer","minimum":1900,"maximum":2100}},{"name":"week","in":"path","required":true,"schema":{"type":"integer","minimum":1,"maximum":53}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/feiertage/{year}":{"get":{"operationId":"getGermanPublicHolidays","summary":"Modelled German public holidays with optional federal-state scope","description":"Regional/legal source limitations are published in the data registry.","parameters":[{"name":"year","in":"path","required":true,"schema":{"type":"integer","minimum":1900,"maximum":2100}},{"name":"region","in":"query","schema":{"type":"string","pattern":"^[a-z]{2}$"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/schulferien/{year}/{region}":{"get":{"operationId":"getSchoolHolidays","summary":"Preserved school-holiday periods for a known DACH region","description":"Coverage, source review and licensing limitations are published in the data registry.","parameters":[{"name":"year","in":"path","required":true,"schema":{"type":"integer","minimum":1900,"maximum":2100}},{"name":"region","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9_]+$"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"400":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"responses":{"Success":{"description":"Successful v1 response","headers":{"X-RateLimit-Policy":{"description":"Published quota policy; enforcement is deployment-scoped","schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true},"meta":{"$ref":"#/components/schemas/ApiMeta"}}}}}},"ValidationError":{"$ref":"#/components/responses/Error"},"InternalError":{"$ref":"#/components/responses/Error"},"Error":{"description":"Stable error envelope","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string","format":"uuid"}}},"meta":{"type":"object","required":["apiVersion"],"properties":{"apiVersion":{"const":"v1"}}}}}}}}},"schemas":{"ApiMeta":{"type":"object","required":["apiVersion","dataVersion"],"properties":{"apiVersion":{"const":"v1"},"dataVersion":{"type":"string"}}}}}}