{
  "openapi": "3.1.0",
  "info": {
    "title": "ourcounty.us public data API",
    "version": "1.0.0-beta",
    "description": "Free, read-only public beta for Monroe County, Florida. No account or API key. Fixed routes only; query parameters and writes are rejected. Cache responses, respect Retry-After, and never interpret unavailable as zero. checked_at is the original Atlas source/asset check time and is preserved on cache hits; cache_expires_at is not the source issue or observation time. Source time fields retain their own meaning. No guaranteed availability, capacity, or emergency notification. Credit original publishers and ourcounty.us. No blanket reuse grant for other atlas layers or map imagery."
  },
  "servers": [
    {
      "url": "https://ourcounty.us",
      "description": "Production"
    },
    {
      "url": "https://staging.monroe-atlas.pages.dev",
      "description": "Staging; subject to change"
    }
  ],
  "security": [],
  "paths": {
    "/api/v1/catalog": {
      "get": {
        "operationId": "getCatalog",
        "summary": "Discover the available datasets and fixed locations",
        "description": "Discover the available datasets and fixed locations.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "operationId": "headCatalog",
        "summary": "Same status and headers as GET, without a response body.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "options": {
        "operationId": "optionsCatalog",
        "summary": "Browser cross-origin access preflight.",
        "responses": {
          "204": {
            "description": "Allowed read methods. No response body.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Access-Control-Allow-Methods": {
                "schema": {
                  "const": "GET, HEAD, OPTIONS"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported."
          },
          "404": {
            "description": "Unknown route or location."
          }
        }
      }
    },
    "/api/v1/weather/{town}": {
      "parameters": [
        {
          "name": "town",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "enum": [
              "tortugas",
              "keywest",
              "bigpine",
              "marathon",
              "islamorada",
              "keylargo",
              "mainland"
            ]
          }
        }
      ],
      "get": {
        "operationId": "getWeather",
        "summary": "Next 24 hourly and 10 daily forecast periods",
        "description": "Next 24 hourly and 10 daily forecast periods. Hourly is required; daily may be unavailable. Fahrenheit temperatures and nullable rain probability. No rainfall-volume estimates.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Weather"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "operationId": "headWeather",
        "summary": "Same status and headers as GET, without a response body.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "options": {
        "operationId": "optionsWeather",
        "summary": "Browser cross-origin access preflight.",
        "responses": {
          "204": {
            "description": "Allowed read methods. No response body.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Access-Control-Allow-Methods": {
                "schema": {
                  "const": "GET, HEAD, OPTIONS"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported."
          },
          "404": {
            "description": "Unknown route or location."
          }
        }
      }
    },
    "/api/v1/alerts": {
      "get": {
        "operationId": "getAlerts",
        "summary": "Active NWS alerts for four Monroe land forecast zones and 16 surrounding marine zones",
        "description": "Active NWS alerts for four Monroe land forecast zones and 16 surrounding marine zones. Zone footprints may extend beyond the county. Confirmed empty and unavailable are distinct.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Alerts"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "operationId": "headAlerts",
        "summary": "Same status and headers as GET, without a response body.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "options": {
        "operationId": "optionsAlerts",
        "summary": "Browser cross-origin access preflight.",
        "responses": {
          "204": {
            "description": "Allowed read methods. No response body.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Access-Control-Allow-Methods": {
                "schema": {
                  "const": "GET, HEAD, OPTIONS"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported."
          },
          "404": {
            "description": "Unknown route or location."
          }
        }
      }
    },
    "/api/v1/tides/{station}": {
      "parameters": [
        {
          "name": "station",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "enum": [
              "key-west",
              "vaca-key"
            ]
          }
        }
      ],
      "get": {
        "operationId": "getTides",
        "summary": "Latest measured water level and up to seven days of predicted high/low tides",
        "description": "Latest measured water level and up to seven days of predicted high/low tides. Either component may be unavailable. UTC times, feet above MLLW. No inferred flood warning.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tides"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "operationId": "headTides",
        "summary": "Same status and headers as GET, without a response body.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "options": {
        "operationId": "optionsTides",
        "summary": "Browser cross-origin access preflight.",
        "responses": {
          "204": {
            "description": "Allowed read methods. No response body.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Access-Control-Allow-Methods": {
                "schema": {
                  "const": "GET, HEAD, OPTIONS"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported."
          },
          "404": {
            "description": "Unknown route or location."
          }
        }
      }
    },
    "/api/v1/communities/{geoid}": {
      "parameters": [
        {
          "name": "geoid",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "enum": [
              "1234132",
              "1236325",
              "1236550",
              "1239725",
              "1243000"
            ]
          }
        }
      ],
      "get": {
        "operationId": "getCommunity",
        "summary": "Retained Census 2020-2024 ACS five-year population and 90 percent margin of error",
        "description": "Retained Census 2020-2024 ACS five-year population and 90 percent margin of error. Five incorporated places only, not current visitors or neighborhood counts.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Community"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "operationId": "headCommunity",
        "summary": "Same status and headers as GET, without a response body.",
        "responses": {
          "200": {
            "description": "Validated data. Check status and unavailable_components before use. Cache TTL is an upper bound and can be shortened by source expiry.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Atlas-Cache": {
                "schema": {
                  "enum": [
                    "HIT",
                    "MISS",
                    "BYPASS"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Unknown path or location.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Only GET, HEAD and OPTIONS are supported.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "414": {
            "description": "Request URL exceeds the API limit.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Source data failed validation.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Source unavailable, stale or rate limited.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "504": {
            "description": "Source timed out.",
            "headers": {
              "Retry-After": {
                "description": "When present, minimum retry delay in seconds. Back off on repeated failures.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "options": {
        "operationId": "optionsCommunity",
        "summary": "Browser cross-origin access preflight.",
        "responses": {
          "204": {
            "description": "Allowed read methods. No response body.",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "const": "*"
                }
              },
              "Access-Control-Allow-Methods": {
                "schema": {
                  "const": "GET, HEAD, OPTIONS"
                }
              }
            }
          },
          "400": {
            "description": "Query parameters are not supported."
          },
          "404": {
            "description": "Unknown route or location."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "schema_version": {
            "const": 1
          },
          "status": {
            "const": "error"
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ]
          },
          "checked_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "schema_version",
          "status",
          "error",
          "checked_at"
        ]
      },
      "UnavailableComponent": {
        "type": "object",
        "properties": {
          "component": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "component",
          "reason"
        ]
      },
      "Temperature": {
        "type": "object",
        "properties": {
          "value": {
            "type": "number"
          },
          "unit": {
            "const": "F"
          }
        },
        "required": [
          "value",
          "unit"
        ]
      },
      "HourlyPeriod": {
        "type": "object",
        "properties": {
          "start_time": {
            "type": "string",
            "format": "date-time"
          },
          "end_time": {
            "type": "string",
            "format": "date-time"
          },
          "temperature": {
            "$ref": "#/components/schemas/Temperature"
          },
          "precipitation_probability_percent": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 100
          },
          "short_forecast": {
            "type": "string"
          },
          "wind_direction": {
            "type": [
              "string",
              "null"
            ]
          },
          "wind_speed": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "start_time",
          "end_time",
          "temperature",
          "precipitation_probability_percent",
          "short_forecast",
          "wind_direction",
          "wind_speed"
        ]
      },
      "DailyPeriod": {
        "type": "object",
        "properties": {
          "start_time": {
            "type": "string",
            "format": "date-time"
          },
          "end_time": {
            "type": "string",
            "format": "date-time"
          },
          "temperature": {
            "$ref": "#/components/schemas/Temperature"
          },
          "precipitation_probability_percent": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 100
          },
          "short_forecast": {
            "type": "string"
          },
          "wind_direction": {
            "type": [
              "string",
              "null"
            ]
          },
          "wind_speed": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "is_daytime": {
            "type": "boolean"
          },
          "detailed_forecast": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "start_time",
          "end_time",
          "temperature",
          "precipitation_probability_percent",
          "short_forecast",
          "wind_direction",
          "wind_speed",
          "name",
          "is_daytime",
          "detailed_forecast"
        ]
      },
      "HourlyForecast": {
        "type": "object",
        "properties": {
          "required": {
            "const": true
          },
          "issued_at": {
            "type": "string",
            "format": "date-time"
          },
          "periods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HourlyPeriod"
            },
            "maxItems": 24
          }
        },
        "required": [
          "required",
          "issued_at",
          "periods"
        ]
      },
      "DailyForecast": {
        "type": "object",
        "properties": {
          "required": {
            "const": false
          },
          "issued_at": {
            "type": "string",
            "format": "date-time"
          },
          "periods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DailyPeriod"
            },
            "maxItems": 10
          }
        },
        "required": [
          "required",
          "issued_at",
          "periods"
        ]
      },
      "Weather": {
        "type": "object",
        "properties": {
          "schema_version": {
            "const": 1
          },
          "status": {
            "enum": [
              "ok",
              "partial"
            ]
          },
          "kind": {
            "const": "weather_forecast"
          },
          "checked_at": {
            "type": "string",
            "format": "date-time"
          },
          "cache_ttl_seconds": {
            "type": "integer",
            "minimum": 0
          },
          "cache_expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "scope": {
            "type": "object",
            "properties": {
              "town_id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "latitude": {
                "type": "number"
              },
              "longitude": {
                "type": "number"
              },
              "forecast_office": {
                "type": "string"
              },
              "grid": {
                "type": "string"
              }
            },
            "required": [
              "town_id",
              "name",
              "latitude",
              "longitude",
              "forecast_office",
              "grid"
            ]
          },
          "units": {
            "type": "object",
            "properties": {
              "temperature": {
                "const": "F"
              },
              "precipitation_probability": {
                "const": "percent"
              }
            },
            "required": [
              "temperature",
              "precipitation_probability"
            ]
          },
          "hourly": {
            "$ref": "#/components/schemas/HourlyForecast"
          },
          "daily": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DailyForecast"
              },
              {
                "type": "null"
              }
            ]
          },
          "unavailable_components": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnavailableComponent"
            }
          },
          "source_urls": {
            "type": "object",
            "properties": {
              "hourly": {
                "type": "string",
                "format": "uri"
              },
              "daily": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "hourly",
              "daily"
            ]
          }
        },
        "required": [
          "schema_version",
          "status",
          "kind",
          "checked_at",
          "cache_ttl_seconds",
          "cache_expires_at",
          "scope",
          "units",
          "hourly",
          "daily",
          "unavailable_components",
          "source_urls"
        ]
      },
      "Alert": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "event": {
            "type": "string"
          },
          "severity": {
            "type": [
              "string",
              "null"
            ]
          },
          "urgency": {
            "type": [
              "string",
              "null"
            ]
          },
          "certainty": {
            "type": [
              "string",
              "null"
            ]
          },
          "sent_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "effective_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "onset_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "ends_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "headline": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": "string"
          },
          "instruction": {
            "type": [
              "string",
              "null"
            ]
          },
          "area_description": {
            "type": [
              "string",
              "null"
            ]
          },
          "affected_zones": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "maxItems": 20
          }
        },
        "required": [
          "id",
          "event",
          "severity",
          "urgency",
          "certainty",
          "sent_at",
          "effective_at",
          "onset_at",
          "ends_at",
          "expires_at",
          "headline",
          "description",
          "instruction",
          "area_description",
          "affected_zones"
        ]
      },
      "Alerts": {
        "type": "object",
        "properties": {
          "schema_version": {
            "const": 1
          },
          "status": {
            "enum": [
              "ok",
              "partial"
            ]
          },
          "kind": {
            "const": "active_alerts"
          },
          "checked_at": {
            "type": "string",
            "format": "date-time"
          },
          "cache_ttl_seconds": {
            "type": "integer",
            "minimum": 0
          },
          "cache_expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "availability": {
            "enum": [
              "active",
              "none_reported"
            ]
          },
          "scope": {
            "type": "object",
            "properties": {
              "county": {
                "type": "string"
              },
              "zones": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "maxItems": 20
              },
              "note": {
                "type": "string",
                "description": "Forecast zones may extend beyond the Monroe County boundary."
              }
            },
            "required": [
              "county",
              "zones",
              "note"
            ]
          },
          "alerts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Alert"
            },
            "maxItems": 100
          },
          "source_updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "source_urls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          }
        },
        "required": [
          "schema_version",
          "status",
          "kind",
          "checked_at",
          "cache_ttl_seconds",
          "cache_expires_at",
          "availability",
          "scope",
          "alerts",
          "source_updated_at",
          "source_urls"
        ]
      },
      "Observation": {
        "type": "object",
        "properties": {
          "observed_at": {
            "type": "string",
            "format": "date-time"
          },
          "value": {
            "type": "number"
          },
          "quality_flags": {
            "type": [
              "string",
              "null"
            ]
          },
          "quality_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "preliminary": {
            "type": "boolean"
          }
        },
        "required": [
          "observed_at",
          "value",
          "quality_flags",
          "quality_code",
          "preliminary"
        ]
      },
      "TidePrediction": {
        "type": "object",
        "properties": {
          "time": {
            "type": "string",
            "format": "date-time"
          },
          "type": {
            "enum": [
              "high",
              "low"
            ]
          },
          "value": {
            "type": "number"
          }
        },
        "required": [
          "time",
          "type",
          "value"
        ]
      },
      "Tides": {
        "type": "object",
        "properties": {
          "schema_version": {
            "const": 1
          },
          "status": {
            "enum": [
              "ok",
              "partial"
            ]
          },
          "kind": {
            "const": "tides"
          },
          "checked_at": {
            "type": "string",
            "format": "date-time"
          },
          "cache_ttl_seconds": {
            "type": "integer",
            "minimum": 0
          },
          "cache_expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "scope": {
            "type": "object",
            "properties": {
              "station_key": {
                "type": "string"
              },
              "station_id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "latitude": {
                "type": "number"
              },
              "longitude": {
                "type": "number"
              }
            },
            "required": [
              "station_key",
              "station_id",
              "name",
              "latitude",
              "longitude"
            ]
          },
          "units": {
            "type": "object",
            "properties": {
              "water_level": {
                "const": "ft"
              },
              "datum": {
                "const": "MLLW"
              },
              "time_zone": {
                "const": "UTC"
              }
            },
            "required": [
              "water_level",
              "datum",
              "time_zone"
            ]
          },
          "latest_observation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Observation"
              },
              {
                "type": "null"
              }
            ]
          },
          "high_low_predictions": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/TidePrediction"
                },
                "maxItems": 40
              },
              {
                "type": "null"
              }
            ]
          },
          "unavailable_components": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnavailableComponent"
            }
          },
          "source_urls": {
            "type": "object",
            "properties": {
              "latest_observation": {
                "type": "string",
                "format": "uri"
              },
              "high_low_predictions": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "latest_observation",
              "high_low_predictions"
            ]
          }
        },
        "required": [
          "schema_version",
          "status",
          "kind",
          "checked_at",
          "cache_ttl_seconds",
          "cache_expires_at",
          "scope",
          "units",
          "latest_observation",
          "high_low_predictions",
          "unavailable_components",
          "source_urls"
        ]
      },
      "Population": {
        "type": "object",
        "properties": {
          "status": {
            "enum": [
              "shown",
              "withheld"
            ]
          },
          "estimate": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "margin_of_error": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "estimate",
          "margin_of_error"
        ]
      },
      "Community": {
        "type": "object",
        "properties": {
          "schema_version": {
            "const": 1
          },
          "status": {
            "enum": [
              "ok",
              "partial"
            ]
          },
          "kind": {
            "const": "municipal_population"
          },
          "checked_at": {
            "type": "string",
            "format": "date-time"
          },
          "cache_ttl_seconds": {
            "type": "integer",
            "minimum": 0
          },
          "cache_expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "scope": {
            "type": "object",
            "properties": {
              "geoid": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "geography": {
                "const": "Census incorporated place"
              }
            },
            "required": [
              "geoid",
              "name",
              "geography"
            ]
          },
          "population": {
            "$ref": "#/components/schemas/Population"
          },
          "estimate_period": {
            "const": "2020-2024"
          },
          "margin_of_error_confidence_percent": {
            "const": 90
          },
          "retained_retrieved_at": {
            "type": "string",
            "format": "date-time"
          },
          "source_urls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "attribution": {
            "type": "string"
          },
          "source_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          }
        },
        "required": [
          "schema_version",
          "status",
          "kind",
          "checked_at",
          "cache_ttl_seconds",
          "cache_expires_at",
          "scope",
          "population",
          "estimate_period",
          "margin_of_error_confidence_percent",
          "retained_retrieved_at",
          "source_urls",
          "attribution",
          "source_sha256"
        ]
      },
      "Catalog": {
        "type": "object",
        "properties": {
          "schema_version": {
            "const": 1
          },
          "status": {
            "enum": [
              "ok",
              "partial"
            ]
          },
          "kind": {
            "const": "catalog"
          },
          "checked_at": {
            "type": "string",
            "format": "date-time"
          },
          "cache_ttl_seconds": {
            "type": "integer",
            "minimum": 0
          },
          "cache_expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "routes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string"
                },
                "resource": {
                  "type": "string"
                },
                "allowed": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "path",
                "resource"
              ]
            }
          },
          "source_urls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          }
        },
        "required": [
          "schema_version",
          "status",
          "kind",
          "checked_at",
          "cache_ttl_seconds",
          "cache_expires_at",
          "routes",
          "source_urls"
        ]
      }
    }
  },
  "externalDocs": {
    "description": "Examples, source links and use guidance",
    "url": "https://ourcounty.us/developers/"
  }
}
