{
  "components": {
    "schemas": {
      "LaunchBlock": {
        "properties": {
          "cautions": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "launch_time": {
            "format": "date-time",
            "type": "string"
          },
          "observations": {
            "additionalProperties": true,
            "type": "object"
          },
          "reasons": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "verdict": {
            "enum": [
              "ROW",
              "CAUTION",
              "NO ROW"
            ],
            "type": "string"
          },
          "window_end": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "launch_time",
          "verdict",
          "reasons",
          "cautions"
        ],
        "type": "object"
      },
      "OutlookSnapshot": {
        "properties": {
          "blocks": {
            "items": {
              "$ref": "#/components/schemas/LaunchBlock"
            },
            "type": "array"
          },
          "generated_at": {
            "format": "date-time",
            "type": "string"
          },
          "location": {
            "additionalProperties": true,
            "type": "object"
          },
          "schema_version": {
            "example": "1.0",
            "type": "string"
          },
          "source_links": {
            "items": {
              "$ref": "#/components/schemas/SourceLink"
            },
            "type": "array"
          },
          "source_statuses": {
            "items": {
              "$ref": "#/components/schemas/SourceStatus"
            },
            "type": "array"
          },
          "summary": {
            "$ref": "#/components/schemas/Summary"
          },
          "valid_until": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "schema_version",
          "generated_at",
          "valid_until",
          "location",
          "summary",
          "blocks"
        ],
        "type": "object"
      },
      "SourceLink": {
        "properties": {
          "href": {
            "format": "uri",
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        },
        "required": [
          "label",
          "href"
        ],
        "type": "object"
      },
      "SourceStatus": {
        "properties": {
          "message": {
            "type": "string"
          },
          "ok": {
            "type": "boolean"
          },
          "source": {
            "type": "string"
          }
        },
        "required": [
          "source",
          "ok",
          "message"
        ],
        "type": "object"
      },
      "Summary": {
        "properties": {
          "caution": {
            "type": "integer"
          },
          "no_row": {
            "type": "integer"
          },
          "row": {
            "type": "integer"
          },
          "text": {
            "type": "string"
          },
          "verdict": {
            "enum": [
              "ROW",
              "CAUTION",
              "NO ROW"
            ],
            "type": "string"
          }
        },
        "required": [
          "verdict",
          "text",
          "row",
          "caution",
          "no_row"
        ],
        "type": "object"
      }
    }
  },
  "info": {
    "description": "Static snapshot API for Safe to Row launch decisions.",
    "title": "Safe to Row API",
    "version": "1.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/v1/openapi.json": {
      "get": {
        "responses": {
          "200": {
            "description": "OpenAPI 3.1 document for the static API."
          }
        },
        "summary": "Get this OpenAPI document"
      }
    },
    "/api/v1/outlook.json": {
      "get": {
        "description": "Returns the same generated snapshot used by the public dashboard. The file is rebuilt on the dashboard publish schedule and does not call upstream weather providers when requested.",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OutlookSnapshot"
                }
              }
            },
            "description": "Latest generated rowing safety outlook."
          }
        },
        "summary": "Get the latest rowing safety outlook"
      }
    }
  }
}
