{
  "$defs": {
    "ActiveManifest": {
      "additionalProperties": false,
      "description": "The global active-storms manifest \u2014 written last.\n\n``degraded`` / ``sources_down`` make the entry point self-describing: a reader must be\nable to tell a genuine \"no active storms\" (empty list, not degraded) from an upstream\noutage (possibly empty list, degraded) without a second request (invariant 4).\n\n``overviews`` are the multi-storm maps for the landing view \u2014 the ``global`` frame plus\none per active basin \u2014 so the site can offer region tabs without a second request.",
      "properties": {
        "degraded": {
          "default": false,
          "title": "Degraded",
          "type": "boolean"
        },
        "generated_at": {
          "format": "date-time",
          "title": "Generated At",
          "type": "string"
        },
        "overviews": {
          "default": [],
          "items": {
            "$ref": "#/$defs/OverviewMap"
          },
          "title": "Overviews",
          "type": "array"
        },
        "schema_version": {
          "default": "1.0",
          "title": "Schema Version",
          "type": "string"
        },
        "sources_down": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Sources Down",
          "type": "array"
        },
        "storms": {
          "items": {
            "$ref": "#/$defs/ActiveStormSummary"
          },
          "title": "Storms",
          "type": "array"
        }
      },
      "required": [
        "generated_at",
        "storms"
      ],
      "title": "ActiveManifest",
      "type": "object"
    },
    "ActiveStormSummary": {
      "additionalProperties": false,
      "description": "One active storm's entry in the global manifest (pointer, not products).",
      "properties": {
        "basin": {
          "title": "Basin",
          "type": "string"
        },
        "issue_ts": {
          "title": "Issue Ts",
          "type": "string"
        },
        "manifest_url": {
          "title": "Manifest Url",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Name"
        },
        "status": {
          "title": "Status",
          "type": "string"
        },
        "storm_id": {
          "title": "Storm Id",
          "type": "string"
        },
        "updated_at": {
          "format": "date-time",
          "title": "Updated At",
          "type": "string"
        }
      },
      "required": [
        "storm_id",
        "name",
        "basin",
        "status",
        "issue_ts",
        "manifest_url",
        "updated_at"
      ],
      "title": "ActiveStormSummary",
      "type": "object"
    },
    "OverviewMap": {
      "additionalProperties": false,
      "description": "A published multi-storm overview map for one region (``global`` or a basin).",
      "properties": {
        "height_px": {
          "title": "Height Px",
          "type": "integer"
        },
        "label": {
          "title": "Label",
          "type": "string"
        },
        "png_url": {
          "title": "Png Url",
          "type": "string"
        },
        "region": {
          "title": "Region",
          "type": "string"
        },
        "webp_url": {
          "title": "Webp Url",
          "type": "string"
        },
        "width_px": {
          "title": "Width Px",
          "type": "integer"
        }
      },
      "required": [
        "region",
        "label",
        "png_url",
        "webp_url",
        "width_px",
        "height_px"
      ],
      "title": "OverviewMap",
      "type": "object"
    },
    "PublishedProduct": {
      "additionalProperties": false,
      "description": "One graphic type as published: immutable URLs + verification hash.",
      "properties": {
        "graphic_type": {
          "title": "Graphic Type",
          "type": "string"
        },
        "height_px": {
          "title": "Height Px",
          "type": "integer"
        },
        "image_sha256": {
          "pattern": "^[0-9a-f]{64}$",
          "title": "Image Sha256",
          "type": "string"
        },
        "png_url": {
          "title": "Png Url",
          "type": "string"
        },
        "sidecar_url": {
          "title": "Sidecar Url",
          "type": "string"
        },
        "webp_url": {
          "title": "Webp Url",
          "type": "string"
        },
        "width_px": {
          "title": "Width Px",
          "type": "integer"
        }
      },
      "required": [
        "graphic_type",
        "png_url",
        "webp_url",
        "sidecar_url",
        "image_sha256",
        "width_px",
        "height_px"
      ],
      "title": "PublishedProduct",
      "type": "object"
    },
    "StatusManifest": {
      "additionalProperties": false,
      "description": "Pipeline-health mirror (populated more fully by the Phase 13 pipeline).",
      "properties": {
        "active_storms": {
          "title": "Active Storms",
          "type": "integer"
        },
        "degraded": {
          "default": false,
          "title": "Degraded",
          "type": "boolean"
        },
        "detail": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Detail"
        },
        "generated_at": {
          "format": "date-time",
          "title": "Generated At",
          "type": "string"
        },
        "last_publish_at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Last Publish At"
        },
        "schema_version": {
          "default": "1.0",
          "title": "Schema Version",
          "type": "string"
        }
      },
      "required": [
        "generated_at",
        "active_storms"
      ],
      "title": "StatusManifest",
      "type": "object"
    },
    "StormManifest": {
      "additionalProperties": false,
      "description": "A storm's current issuance and its products (the mutable per-storm pointer).",
      "properties": {
        "attribution": {
          "title": "Attribution",
          "type": "string"
        },
        "basin": {
          "title": "Basin",
          "type": "string"
        },
        "issue_ts": {
          "title": "Issue Ts",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Name"
        },
        "products": {
          "items": {
            "$ref": "#/$defs/PublishedProduct"
          },
          "title": "Products",
          "type": "array"
        },
        "schema_version": {
          "default": "1.0",
          "title": "Schema Version",
          "type": "string"
        },
        "snapshot_sha256": {
          "pattern": "^[0-9a-f]{64}$",
          "title": "Snapshot Sha256",
          "type": "string"
        },
        "snapshot_url": {
          "title": "Snapshot Url",
          "type": "string"
        },
        "source_issue_time": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Issue Time"
        },
        "status": {
          "title": "Status",
          "type": "string"
        },
        "storm_id": {
          "title": "Storm Id",
          "type": "string"
        },
        "summary": {
          "$ref": "#/$defs/StormSummary"
        },
        "updated_at": {
          "format": "date-time",
          "title": "Updated At",
          "type": "string"
        }
      },
      "required": [
        "storm_id",
        "name",
        "basin",
        "status",
        "issue_ts",
        "source_issue_time",
        "updated_at",
        "attribution",
        "snapshot_url",
        "snapshot_sha256",
        "summary",
        "products"
      ],
      "title": "StormManifest",
      "type": "object"
    },
    "StormSummary": {
      "additionalProperties": false,
      "description": "Compact current-state numbers, denormalized from the snapshot.\n\nLets a reader (the website, a consumer app) show intensity/motion without fetching the\nfull snapshot, which carries the whole forecast + model guidance and runs to hundreds of\nkilobytes. Values are the canonical raw units \u2014 wind/gust in knots, pressure in hPa,\nbearing in degrees, speed in knots, position in signed decimal degrees. Presentation\n(mph, Saffir-Simpson category, compass points) is deliberately the reader's job, so this\nstays a data record rather than a rendering. A field is ``null`` when the source omits it.",
      "properties": {
        "gust_kt": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Gust Kt"
        },
        "has_cone": {
          "default": false,
          "title": "Has Cone",
          "type": "boolean"
        },
        "max_sustained_wind_kt": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Max Sustained Wind Kt"
        },
        "min_pressure_hpa": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Min Pressure Hpa"
        },
        "movement_bearing_deg": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Movement Bearing Deg"
        },
        "movement_speed_kt": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Movement Speed Kt"
        },
        "peak_forecast_wind_kt": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Peak Forecast Wind Kt"
        },
        "position_lat": {
          "title": "Position Lat",
          "type": "number"
        },
        "position_lon": {
          "title": "Position Lon",
          "type": "number"
        }
      },
      "required": [
        "position_lat",
        "position_lon"
      ],
      "title": "StormSummary",
      "type": "object"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "description": "The static JSON objects served under api/v1/. See /docs.html.",
  "title": "Maverick Wx published API",
  "version": "1.0",
  "x-endpoints": {
    "api/v1/active.json": "ActiveManifest",
    "api/v1/status.json": "StatusManifest",
    "api/v1/storms/<storm_id>.json": "StormManifest"
  }
}
