{
  "openapi": "3.1.0",
  "info": {
    "title": "Calendar Workbench API",
    "version": "1.0.0",
    "description": "Deterministic proleptic Gregorian calendar calculations for years 2026–2035, plus Julian/Gregorian conversion helpers."
  },
  "paths": {
    "/health": {
      "get": {
        "summary": "Readiness check",
        "responses": {
          "200": {
            "description": "Service is ready"
          }
        }
      }
    },
    "/api/v1/calendar/{year}": {
      "get": {
        "summary": "Get all twelve months",
        "parameters": [
          {
            "name": "year",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 2026,
              "maximum": 2035
            }
          },
          {
            "name": "weekStart",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "monday",
                "sunday"
              ],
              "default": "monday"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Year calendar"
          },
          "400": {
            "description": "Invalid input"
          }
        }
      }
    },
    "/api/v1/calendar/{year}/{month}": {
      "get": {
        "summary": "Get one month grid",
        "parameters": [
          {
            "name": "year",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "month",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 12
            }
          },
          {
            "name": "weekStart",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "monday",
                "sunday"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Month grid"
          },
          "400": {
            "description": "Invalid input"
          }
        }
      }
    },
    "/api/v1/month-grid": {
      "get": {
        "summary": "Get month-grid fixture",
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "month",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "weekStart",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "monday",
                "sunday"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Month grid"
          }
        }
      }
    },
    "/api/v1/iso-week": {
      "get": {
        "summary": "Get ISO week for a date",
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ISO week number"
          },
          "400": {
            "description": "Invalid input"
          }
        }
      }
    },
    "/api/v1/leap-year": {
      "get": {
        "summary": "Check Gregorian leap year",
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Leap year result"
          }
        }
      }
    },
    "/api/v1/convert": {
      "get": {
        "summary": "Convert proleptic Gregorian and Julian dates",
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "month",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "day",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "gregorian",
                "julian"
              ]
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "gregorian",
                "julian"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Converted date and Julian Day Number"
          }
        }
      }
    },
    "/api/v1/print": {
      "get": {
        "summary": "Export a month as JSON, SVG, PDF, or printable HTML",
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "month",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "svg",
                "pdf",
                "html"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Calendar export"
          }
        }
      }
    }
  }
}