Skip to main content
Glama

Resort conditions

get_resort_conditions
Read-onlyIdempotent

The latest snow report for one resort with provenance, inside the conditions contract v2 envelope: data.status is the derived operating status (OPEN, CLOSED_TODAY, PRE_SEASON, OFF_SEASON or UNKNOWN; OPEN only on a fresh operator lift feed or a resort-confirmed opening date, never by default) with reasons; every field in data (base depth measured and operator-reported, new snow 24 h / 48 h, SWE, percent of normal, lifts and runs open / total, surface, snow quality, temperature, wind, blended 48-hour forecast, season dates) is {value, source, observedAt, confidence, freshness: {tier, ageHours}}; depthDisagreement is set when the station and the operator differ by more than 30 % (quote the measured value); sentence is a dated line to quote. The classic Resort document (snow, season, cams, profile, measuredNow) rides alongside for compatibility. Use it for "is X open today" as well as "what are conditions at X". Sources: snotel = measured at a USDA NRCS SNOTEL station near the resort (station elevation, not the summit), open_meteo = weather-model estimate for resorts without a station.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugYesPeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
camsYes
dataYes
metaYes
nameYes
slugYes
snowYesNull when the resort has never had a snow report.
scoreNoToday's 0–100 Snow Score with components (P7). Null when the scorer has not written a row at most 3 days old; absent only when the score table is not served.
apiUrlYes
seasonYes
licenseYesURL of the terms that govern reuse.
profileYes
forecastNoHeadline numbers from the blended 14-day forecast (summit point when one exists). Null when no run is current; absent on list and compare rows. The full daily blend and every model run are at `/resorts/{slug}/forecast`.
locationYes
sentenceYesA dated, source-labelled status sentence that can be quoted verbatim.
stationsNoObservation stations serving the resort, once the station layer is live.
schemaUrlYesThe JSON Schema this document validates against.
updatedAtYesNewest instant among the snow report and cam checks/captures.
websiteUrlYes
attributionYes
measuredNowNoLatest observation per station, once the station layer is live.
canonicalUrlYesThe resort's PeakCam page. Cite this.
schemaVersionYesContract version; the schema file name carries the major.
forecastScoresNoPer-model verification at this resort over 90 days, ranked; empty until the scorer has measured days. Detail at `/resorts/{slug}/forecast-accuracy`.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / score / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "components": {
      -        "additionalProperties": {
      -          "anyOf": [
      -            {
      -              "type": "number"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "date": {
      -        "description": "YYYY-MM-DD the score is for.",
      -        "type": "string"
      -      },
      -      "rating": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "great",
      -              "good",
      -              "fair",
      -              "poor"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "score": {
      -        "maximum": 100,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "scoredBy": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Scorer version, e.g. `score-v1`."
      -      }
      -    },
      -    "required": [
      -      "date",
      -      "score",
      -      "rating",
      -      "components",
      -      "scoredBy"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "components": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "depthVsNormal": {
      +            "additionalProperties": false,
      +            "description": "30: snowpack against the station's 1991–2020 median (SWE); without a normal, base depth on a fixed scale capped at 27.",
      +            "properties": {
      +              "basis": {
      +                "description": "One line saying what the points rest on, quotable as is.",
      +                "type": "string"
      +              },
      +              "max": {
      +                "description": "The component's weight; the five maximums add to 100.",
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "points": {
      +                "description": "Points earned, one decimal.",
      +                "minimum": 0,
      +                "type": "number"
      +              },
      +              "source": {
      +                "enum": [
      +                  "snotel",
      +                  "model",
      +                  "operator",
      +                  "profile",
      +                  "derived",
      +                  "none"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "points",
      +              "max",
      +              "basis",
      +              "source"
      +            ],
      +            "type": "object"
      +          },
      +          "forecast7d": {
      +            "additionalProperties": false,
      +            "description": "20: the blended next-7-day forecast total (20 in is full marks).",
      +            "properties": {
      +              "basis": {
      +                "description": "One line saying what the points rest on, quotable as is.",
      +                "type": "string"
      +              },
      +              "max": {
      +                "description": "The component's weight; the five maximums add to 100.",
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "points": {
      +                "description": "Points earned, one decimal.",
      +                "minimum": 0,
      +                "type": "number"
      +              },
      +              "source": {
      +                "enum": [
      +                  "snotel",
      +                  "model",
      +                  "operator",
      +                  "profile",
      +                  "derived",
      +                  "none"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "points",
      +              "max",
      +              "basis",
      +              "source"
      +            ],
      +            "type": "object"
      +          },
      +          "operatingStatus": {
      +            "additionalProperties": false,
      +            "description": "10: OPEN full, PRE_SEASON and CLOSED_TODAY half, OFF_SEASON and UNKNOWN none.",
      +            "properties": {
      +              "basis": {
      +                "description": "One line saying what the points rest on, quotable as is.",
      +                "type": "string"
      +              },
      +              "max": {
      +                "description": "The component's weight; the five maximums add to 100.",
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "points": {
      +                "description": "Points earned, one decimal.",
      +                "minimum": 0,
      +                "type": "number"
      +              },
      +              "source": {
      +                "enum": [
      +                  "snotel",
      +                  "model",
      +                  "operator",
      +                  "profile",
      +                  "derived",
      +                  "none"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "points",
      +              "max",
      +              "basis",
      +              "source"
      +            ],
      +            "type": "object"
      +          },
      +          "recentSnow7d": {
      +            "additionalProperties": false,
      +            "description": "25: measured or modelled new snow over the last 7 days (24 in is full marks).",
      +            "properties": {
      +              "basis": {
      +                "description": "One line saying what the points rest on, quotable as is.",
      +                "type": "string"
      +              },
      +              "max": {
      +                "description": "The component's weight; the five maximums add to 100.",
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "points": {
      +                "description": "Points earned, one decimal.",
      +                "minimum": 0,
      +                "type": "number"
      +              },
      +              "source": {
      +                "enum": [
      +                  "snotel",
      +                  "model",
      +                  "operator",
      +                  "profile",
      +                  "derived",
      +                  "none"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "points",
      +              "max",
      +              "basis",
      +              "source"
      +            ],
      +            "type": "object"
      +          },
      +          "snowQuality": {
      +            "additionalProperties": false,
      +            "description": "15: days since the last snow day × the 3-day high temperature × the engine's surface tags.",
      +            "properties": {
      +              "basis": {
      +                "description": "One line saying what the points rest on, quotable as is.",
      +                "type": "string"
      +              },
      +              "max": {
      +                "description": "The component's weight; the five maximums add to 100.",
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "points": {
      +                "description": "Points earned, one decimal.",
      +                "minimum": 0,
      +                "type": "number"
      +              },
      +              "source": {
      +                "enum": [
      +                  "snotel",
      +                  "model",
      +                  "operator",
      +                  "profile",
      +                  "derived",
      +                  "none"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "points",
      +              "max",
      +              "basis",
      +              "source"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "depthVsNormal",
      +          "recentSnow7d",
      +          "forecast7d",
      +          "snowQuality",
      +          "operatingStatus"
      +        ],
      +        "type": "object"
      +      },
      +      "date": {
      +        "description": "YYYY-MM-DD the score is for (Mountain-time day of the scoring run).",
      +        "type": "string"
      +      },
      +      "rating": {
      +        "description": "The score's four-tier label: great ≥ 75, good ≥ 55, fair ≥ 35, else poor.",
      +        "enum": [
      +          "great",
      +          "good",
      +          "fair",
      +          "poor"
      +        ],
      +        "type": "string"
      +      },
      +      "score": {
      +        "maximum": 100,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "scoredBy": {
      +        "const": "algorithmic",
      +        "description": "Always `algorithmic`: a fixed function of measured and modelled inputs, never an editorial call.",
      +        "type": "string"
      +      },
      +      "tagline": {
      +        "description": "Dated sentence to quote: the score, its rating and the components strongest first.",
      +        "type": "string"
      +      },
      +      "version": {
      +        "description": "Formula version, e.g. `score-v1`; a change re-scores the history.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "date",
      +      "score",
      +      "rating",
      +      "tagline",
      +      "components",
      +      "scoredBy",
      +      "version"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / score / description
      Previous value: -"Today's 0–100 score, once the scorer is live."New value: +"Today's 0–100 Snow Score with components (P7). Null when the scorer has not written a row at most 3 days old; absent only when the score table is not served."
  2. Changed6 schema fields changed
    • addedOutput schema / properties / data
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "baseDepthIn": {
      +      "additionalProperties": false,
      +      "description": "Measured (or model) base depth from the snow report, inches. Prefer this over `operatorBaseDepthIn`.",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "depthDisagreement": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "differencePct": {
      +              "description": "|measured − operator| as a percent of the larger value; present only above 30 %.",
      +              "type": "number"
      +            },
      +            "measuredIn": {
      +              "type": "number"
      +            },
      +            "note": {
      +              "type": "string"
      +            },
      +            "operatorIn": {
      +              "type": "number"
      +            },
      +            "preferred": {
      +              "const": "measured",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "measuredIn",
      +            "operatorIn",
      +            "differencePct",
      +            "preferred",
      +            "note"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "forecastNext48hCm": {
      +      "additionalProperties": false,
      +      "description": "Blended forecast snowfall over the next 48 h, cm (P4 blend, summit point).",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "liftsOpen": {
      +      "additionalProperties": false,
      +      "description": "Lifts open per the operator feed.",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "liftsTotal": {
      +      "additionalProperties": false,
      +      "description": "From the operator feed when it lists lifts, else the profile total.",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "newSnow24hIn": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "newSnow48hIn": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "operatorBaseDepthIn": {
      +      "additionalProperties": false,
      +      "description": "The operator's own base figure, when a feed carries one.",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "percentOfNormal": {
      +      "additionalProperties": false,
      +      "description": "SWE against the station's 1991–2020 median, inside the publishable band.",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "reasons": {
      +      "description": "Why the status and the verdict came out as they did, in order; quote them.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "recommendableToday": {
      +      "description": "True only when the status is OPEN on a usable source, a current base depth is on file and the rating is not poor.",
      +      "type": "boolean"
      +    },
      +    "runsOpen": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "runsTotal": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "seasonClosing": {
      +      "additionalProperties": false,
      +      "description": "YYYY-MM-DD, mainly Southern-hemisphere rows.",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "seasonOpening": {
      +      "additionalProperties": false,
      +      "description": "YYYY-MM-DD. Source `operator` for a resort-confirmed date, `profile` for a third-party projection.",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "snowQuality": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "powder",
      +                "packed",
      +                "spring",
      +                "ice"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "status": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "OPEN",
      +                "CLOSED_TODAY",
      +                "PRE_SEASON",
      +                "OFF_SEASON",
      +                "UNKNOWN"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "surface": {
      +      "additionalProperties": false,
      +      "description": "Operator-reported surface, when a feed carries one.",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "sweIn": {
      +      "additionalProperties": false,
      +      "description": "Snow water equivalent, inches.",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "tempF": {
      +      "additionalProperties": false,
      +      "description": "The highest station with a temperature (summit first).",
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    },
      +    "windMph": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "confidence": {
      +          "description": "0–1: SNOTEL 0.9, other stations 0.8, operator 0.7, profile 0.6, derived 0.6, model 0.5; halved when stale, 0 when unknown.",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "freshness": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ageHours": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Hours between the observation and `generatedAt`, one decimal; null for static facts and empty fields."
      +            },
      +            "tier": {
      +              "enum": [
      +                "live",
      +                "recent",
      +                "estimated",
      +                "stale",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tier",
      +            "ageHours"
      +          ],
      +          "type": "object"
      +        },
      +        "observedAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ISO-8601 instant the value was observed or published; null for static facts and empty fields."
      +        },
      +        "source": {
      +          "enum": [
      +            "snotel",
      +            "station:snotel",
      +            "station:ghcn",
      +            "station:nws",
      +            "station:bc_asws",
      +            "station:eccc",
      +            "operator",
      +            "model",
      +            "profile",
      +            "derived",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when PeakCam has nothing for this field."
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "source",
      +        "observedAt",
      +        "confidence",
      +        "freshness"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "recommendableToday",
      +    "reasons",
      +    "depthDisagreement",
      +    "seasonOpening",
      +    "seasonClosing",
      +    "baseDepthIn",
      +    "operatorBaseDepthIn",
      +    "newSnow24hIn",
      +    "newSnow48hIn",
      +    "sweIn",
      +    "liftsOpen",
      +    "liftsTotal",
      +    "runsOpen",
      +    "runsTotal",
      +    "surface",
      +    "snowQuality",
      +    "tempF",
      +    "windMph",
      +    "forecastNext48hCm",
      +    "percentOfNormal"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / meta
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "freshness": {
      +      "additionalProperties": {
      +        "enum": [
      +          "live",
      +          "recent",
      +          "estimated",
      +          "stale",
      +          "unknown"
      +        ],
      +        "type": "string"
      +      },
      +      "description": "Freshness tier per field.",
      +      "propertyNames": {
      +        "enum": [
      +          "status",
      +          "seasonOpening",
      +          "seasonClosing",
      +          "baseDepthIn",
      +          "operatorBaseDepthIn",
      +          "newSnow24hIn",
      +          "newSnow48hIn",
      +          "sweIn",
      +          "liftsOpen",
      +          "liftsTotal",
      +          "runsOpen",
      +          "runsTotal",
      +          "surface",
      +          "snowQuality",
      +          "tempF",
      +          "windMph",
      +          "forecastNext48hCm",
      +          "percentOfNormal"
      +        ],
      +        "type": "string"
      +      },
      +      "required": [
      +        "status",
      +        "seasonOpening",
      +        "seasonClosing",
      +        "baseDepthIn",
      +        "operatorBaseDepthIn",
      +        "newSnow24hIn",
      +        "newSnow48hIn",
      +        "sweIn",
      +        "liftsOpen",
      +        "liftsTotal",
      +        "runsOpen",
      +        "runsTotal",
      +        "surface",
      +        "snowQuality",
      +        "tempF",
      +        "windMph",
      +        "forecastNext48hCm",
      +        "percentOfNormal"
      +      ],
      +      "type": "object"
      +    },
      +    "generatedAt": {
      +      "type": "string"
      +    },
      +    "localDate": {
      +      "description": "YYYY-MM-DD at the resort when the status was resolved.",
      +      "type": "string"
      +    },
      +    "newestObservationAt": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The newest `observedAt` across the populated fields."
      +    },
      +    "resolvedAt": {
      +      "description": "ISO instant the status was evaluated at (ages are measured from it).",
      +      "type": "string"
      +    },
      +    "sources": {
      +      "description": "Distinct sources used, best first.",
      +      "items": {
      +        "enum": [
      +          "snotel",
      +          "station:snotel",
      +          "station:ghcn",
      +          "station:nws",
      +          "station:bc_asws",
      +          "station:eccc",
      +          "operator",
      +          "model",
      +          "profile",
      +          "derived",
      +          "none"
      +        ],
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "timeZone": {
      +      "description": "IANA zone the resort's calendar day runs on.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "generatedAt",
      +    "resolvedAt",
      +    "timeZone",
      +    "localDate",
      +    "newestObservationAt",
      +    "freshness",
      +    "sources"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / schemaUrl
      Added value: +{
      +  "description": "The JSON Schema this document validates against.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / schemaVersion
      Added value: +{
      +  "const": "1.0.0",
      +  "description": "Contract version; the schema file name carries the major.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / sentence
      Added value: +{
      +  "description": "A dated, source-labelled status sentence that can be quoted verbatim.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "slug",
      -  "name",
      -  "canonicalUrl",
      -  "apiUrl",
      -  "location",
      -  "profile",
      -  "snow",
      -  "season",
      -  "cams",
      -  "websiteUrl",
      -  "attribution",
      -  "license",
      -  "updatedAt"
      -]New value: +[
      +  "slug",
      +  "name",
      +  "canonicalUrl",
      +  "apiUrl",
      +  "location",
      +  "profile",
      +  "snow",
      +  "season",
      +  "cams",
      +  "websiteUrl",
      +  "attribution",
      +  "license",
      +  "updatedAt",
      +  "schemaVersion",
      +  "schemaUrl",
      +  "sentence",
      +  "meta",
      +  "data"
      +]
  3. Changed8 schema fields changed
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / bytes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Size of the MP4."
      +}
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / endsAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Capture time of the last frame (ISO-8601)."
      +}
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / frames / description
      Added value: +"Archived frames in the clip; at 7 fps the duration is frames / 7 seconds."
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / posterUrl
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Public JPEG of the clip's last frame, the <video> poster. Null for clips rendered before the poster existed."
      +}
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / startsAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Capture time of the first frame (ISO-8601)."
      +}
    • changedOutput schema / properties / cams / items / properties / timelapses / items / properties / url / description
      Previous value: -"Public MP4 URL."New value: +"Public MP4 URL (H.264, 7 fps, 720p max, at most 3 MB). Link it; never inline it."
    • changedOutput schema / properties / cams / items / properties / timelapses / items / properties / window / description
      Previous value: -"Which clip: `24h` (rolling day), `storm` (one storm, see `stormDate`), or another label."New value: +"Which clip: `24h` (rolling day, replaced every render), `storm` (one storm, see `stormDate`), or another label."
    • changedOutput schema / properties / cams / items / properties / timelapses / items / required
      Previous value: -[
      -  "id",
      -  "window",
      -  "url",
      -  "frames",
      -  "renderedAt",
      -  "stormDate"
      -]New value: +[
      +  "id",
      +  "window",
      +  "url",
      +  "posterUrl",
      +  "frames",
      +  "startsAt",
      +  "endsAt",
      +  "bytes",
      +  "renderedAt",
      +  "stormDate"
      +]
  4. Changed7 schema fields changed
    • addedOutput schema / properties / forecast / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "issuedAt": {
      +        "description": "Newest model issue instant among the runs blended.",
      +        "type": "string"
      +      },
      +      "modelCount": {
      +        "description": "Models contributing to the first day.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "models": {
      +        "description": "Every model id that contributed to any day.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "next48hCm": {
      +        "type": "number"
      +      },
      +      "next48hIn": {
      +        "type": "number"
      +      },
      +      "peak": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "cm": {
      +                "type": "number"
      +              },
      +              "date": {
      +                "description": "The day with the most blended snowfall.",
      +                "type": "string"
      +              },
      +              "in": {
      +                "type": "number"
      +              },
      +              "windowDays": {
      +                "description": "Consecutive days around the peak with at least 1 cm (the storm window).",
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "date",
      +              "in",
      +              "cm",
      +              "windowDays"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Null when no day has any blended snow."
      +      },
      +      "point": {
      +        "description": "The elevation the summary is for: summit when the resort has a summit point, else base.",
      +        "enum": [
      +          "summit",
      +          "base"
      +        ],
      +        "type": "string"
      +      },
      +      "total14dCm": {
      +        "type": "number"
      +      },
      +      "total14dIn": {
      +        "type": "number"
      +      },
      +      "total7dCm": {
      +        "type": "number"
      +      },
      +      "total7dIn": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "point",
      +      "issuedAt",
      +      "modelCount",
      +      "models",
      +      "next48hIn",
      +      "next48hCm",
      +      "total7dIn",
      +      "total7dCm",
      +      "total14dIn",
      +      "total14dCm",
      +      "peak"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / forecast / description
      Previous value: -"Latest run per model and point, once stored forecasts are live."New value: +"Headline numbers from the blended 14-day forecast (summit point when one exists). Null when no run is current; absent on list and compare rows. The full daily blend and every model run are at `/resorts/{slug}/forecast`."
    • removedOutput schema / properties / forecast / items
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "days": {
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "date": {
      -            "description": "YYYY-MM-DD, local to the resort.",
      -            "type": "string"
      -          },
      -          "precipProb": {
      -            "anyOf": [
      -              {
      -                "type": "number"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "0–100."
      -          },
      -          "snowfallCm": {
      -            "anyOf": [
      -              {
      -                "type": "number"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "snowfallHi": {
      -            "anyOf": [
      -              {
      -                "type": "number"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "snowfallLo": {
      -            "anyOf": [
      -              {
      -                "type": "number"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Low end of the spread across models / members; null for a single model."
      -          },
      -          "tempMax": {
      -            "anyOf": [
      -              {
      -                "type": "number"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "°C as the models report it."
      -          },
      -          "tempMin": {
      -            "anyOf": [
      -              {
      -                "type": "number"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "weatherCode": {
      -            "anyOf": [
      -              {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "WMO weather interpretation code."
      -          },
      -          "windGust": {
      -            "anyOf": [
      -              {
      -                "type": "number"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "km/h."
      -          }
      -        },
      -        "required": [
      -          "date",
      -          "snowfallCm",
      -          "snowfallLo",
      -          "snowfallHi",
      -          "tempMax",
      -          "tempMin",
      -          "precipProb",
      -          "windGust",
      -          "weatherCode"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "horizonDays": {
      -      "maximum": 9007199254740991,
      -      "minimum": -9007199254740991,
      -      "type": "integer"
      -    },
      -    "id": {
      -      "type": "string"
      -    },
      -    "issuedAt": {
      -      "type": "string"
      -    },
      -    "model": {
      -      "description": "Model id as the provider names it, or `blend` for PeakCam's skill-weighted blend.",
      -      "type": "string"
      -    },
      -    "point": {
      -      "enum": [
      -        "summit",
      -        "base"
      -      ],
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "id",
      -    "point",
      -    "model",
      -    "issuedAt",
      -    "horizonDays",
      -    "days"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / forecast / type
      Removed value: -"array"
    • changedOutput schema / properties / forecastScores / description
      Previous value: -"Per-model verification at this resort, once computed."New value: +"Per-model verification at this resort over 90 days, ranked; empty until the scorer has measured days. Detail at `/resorts/{slug}/forecast-accuracy`."
    • addedOutput schema / properties / forecastScores / items / properties / rank
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "1 = lowest day-1 MAE among the models scored at this resort (the blend is ranked too). Null before the first scoring run."
      +}
    • changedOutput schema / properties / forecastScores / items / required
      Previous value: -[
      -  "model",
      -  "periodDays",
      -  "day1Mae",
      -  "day3Mae",
      -  "day7Mae",
      -  "samples",
      -  "biasRatio",
      -  "computedAt"
      -]New value: +[
      +  "model",
      +  "periodDays",
      +  "day1Mae",
      +  "day3Mae",
      +  "day7Mae",
      +  "samples",
      +  "biasRatio",
      +  "computedAt",
      +  "rank"
      +]
  5. Changed12 schema fields changed
    • addedOutput schema / properties / measuredNow / items / properties / ageMinutes
      Added value: +{
      +  "description": "Minutes between `observedAt` and `generatedAt`. Daily sources read 1,440 or more; hourly sources under 120 when live.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / measuredNow / items / properties / attribution
      Added value: +{
      +  "description": "The credit line the provider's terms ask for.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / measuredNow / items / properties / distanceKm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Great-circle distance from the resort's coordinates."
      +}
    • addedOutput schema / properties / measuredNow / items / properties / elevationFt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Station elevation. Every value below describes this elevation."
      +}
    • addedOutput schema / properties / measuredNow / items / properties / name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / measuredNow / items / properties / newSnowIn / description
      Previous value: -"New snow since the previous observation, inches."New value: +"New snow over the provider's own period (24 h for daily sources), inches. Null for hourly sources, which do not measure it."
    • changedOutput schema / properties / measuredNow / items / properties / observedAt / description
      Previous value: -"ISO-8601 instant of the observation."New value: +"ISO-8601 instant of the observation; a daily value is stamped at the end of its UTC day."
    • addedOutput schema / properties / measuredNow / items / properties / role
      Added value: +{
      +  "description": "summit / mid / base by the station's elevation against the resort's vertical.",
      +  "enum": [
      +    "summit",
      +    "mid",
      +    "base",
      +    "approach"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / measuredNow / items / properties / source
      Added value: +{
      +  "enum": [
      +    "snotel",
      +    "ghcn",
      +    "nws",
      +    "bc_asws",
      +    "eccc"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / measuredNow / items / properties / sourceId
      Added value: +{
      +  "description": "The provider's own station id, e.g. `AMB`, `1308:UT:SNTL`, `USC00420072`.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / measuredNow / items / properties / stationId / description
      Added value: +"PeakCam station id; joins `stations[]`."
    • changedOutput schema / properties / measuredNow / items / required
      Previous value: -[
      -  "stationId",
      -  "observedAt",
      -  "snowDepthIn",
      -  "sweIn",
      -  "newSnowIn",
      -  "tempF",
      -  "windMph"
      -]New value: +[
      +  "stationId",
      +  "role",
      +  "source",
      +  "sourceId",
      +  "name",
      +  "elevationFt",
      +  "distanceKm",
      +  "observedAt",
      +  "ageMinutes",
      +  "snowDepthIn",
      +  "sweIn",
      +  "newSnowIn",
      +  "tempF",
      +  "windMph",
      +  "attribution"
      +]
  6. Changed14 schema fields changed
    • addedOutput schema / properties / cams / items / properties / credit
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Attribution line to show with the frame. Null means credit the resort."
      +}
    • addedOutput schema / properties / cams / items / properties / kind
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "summit",
      +        "mid",
      +        "base",
      +        "snow-stake",
      +        "village",
      +        "approach"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "What the cam looks at. Null when not classified."
      +}
    • addedOutput schema / properties / cams / items / properties / sourceTermsUrl
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The operator's terms governing reuse of this feed, when known."
      +}
    • addedOutput schema / properties / cams / items / properties / timelapses
      Added value: +{
      +  "description": "Rendered clips, once PeakCam renders them for this cam.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "frames": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "renderedAt": {
      +        "description": "ISO-8601 instant the clip was rendered.",
      +        "type": "string"
      +      },
      +      "stormDate": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "YYYY-MM-DD of the storm a `storm` clip covers."
      +      },
      +      "url": {
      +        "description": "Public MP4 URL.",
      +        "type": "string"
      +      },
      +      "window": {
      +        "description": "Which clip: `24h` (rolling day), `storm` (one storm, see `stormDate`), or another label.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "window",
      +      "url",
      +      "frames",
      +      "renderedAt",
      +      "stormDate"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / cams / items / required
      Previous value: -[
      -  "id",
      -  "name",
      -  "elevation",
      -  "live",
      -  "lastCheckedAt",
      -  "stillUrl",
      -  "capturedAt",
      -  "embedType",
      -  "pageUrl",
      -  "sourceUrl"
      -]New value: +[
      +  "id",
      +  "name",
      +  "elevation",
      +  "live",
      +  "lastCheckedAt",
      +  "stillUrl",
      +  "capturedAt",
      +  "embedType",
      +  "pageUrl",
      +  "sourceUrl",
      +  "kind",
      +  "credit",
      +  "sourceTermsUrl"
      +]
    • addedOutput schema / properties / forecast
      Added value: +{
      +  "description": "Latest run per model and point, once stored forecasts are live.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "days": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "date": {
      +              "description": "YYYY-MM-DD, local to the resort.",
      +              "type": "string"
      +            },
      +            "precipProb": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "0–100."
      +            },
      +            "snowfallCm": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "snowfallHi": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "snowfallLo": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Low end of the spread across models / members; null for a single model."
      +            },
      +            "tempMax": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "°C as the models report it."
      +            },
      +            "tempMin": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "weatherCode": {
      +              "anyOf": [
      +                {
      +                  "maximum": 9007199254740991,
      +                  "minimum": -9007199254740991,
      +                  "type": "integer"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "WMO weather interpretation code."
      +            },
      +            "windGust": {
      +              "anyOf": [
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "km/h."
      +            }
      +          },
      +          "required": [
      +            "date",
      +            "snowfallCm",
      +            "snowfallLo",
      +            "snowfallHi",
      +            "tempMax",
      +            "tempMin",
      +            "precipProb",
      +            "windGust",
      +            "weatherCode"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "horizonDays": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "issuedAt": {
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "Model id as the provider names it, or `blend` for PeakCam's skill-weighted blend.",
      +        "type": "string"
      +      },
      +      "point": {
      +        "enum": [
      +          "summit",
      +          "base"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "point",
      +      "model",
      +      "issuedAt",
      +      "horizonDays",
      +      "days"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / forecastScores
      Added value: +{
      +  "description": "Per-model verification at this resort, once computed.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "biasRatio": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Sum(forecast) / sum(observed); above 1 means the model over-forecasts snow."
      +      },
      +      "computedAt": {
      +        "type": "string"
      +      },
      +      "day1Mae": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Mean absolute error of the day-1 snowfall forecast, cm."
      +      },
      +      "day3Mae": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "day7Mae": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "model": {
      +        "type": "string"
      +      },
      +      "periodDays": {
      +        "description": "Trailing verification window, days.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "samples": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "periodDays",
      +      "day1Mae",
      +      "day3Mae",
      +      "day7Mae",
      +      "samples",
      +      "biasRatio",
      +      "computedAt"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / location / properties / summitElevationFt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / location / required
      Previous value: -[
      -  "state",
      -  "region",
      -  "country",
      -  "lat",
      -  "lon",
      -  "baseElevationFt"
      -]New value: +[
      +  "state",
      +  "region",
      +  "country",
      +  "lat",
      +  "lon",
      +  "baseElevationFt",
      +  "summitElevationFt"
      +]
    • addedOutput schema / properties / measuredNow
      Added value: +{
      +  "description": "Latest observation per station, once the station layer is live.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "newSnowIn": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "New snow since the previous observation, inches."
      +      },
      +      "observedAt": {
      +        "description": "ISO-8601 instant of the observation.",
      +        "type": "string"
      +      },
      +      "snowDepthIn": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "stationId": {
      +        "type": "string"
      +      },
      +      "sweIn": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "tempF": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "windMph": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "stationId",
      +      "observedAt",
      +      "snowDepthIn",
      +      "sweIn",
      +      "newSnowIn",
      +      "tempF",
      +      "windMph"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / profile
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "aliases": {
      +      "description": "Other names the resort is known by, e.g. `A-Basin`.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "annualSnowfallIn": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Operator-stated average annual snowfall, inches."
      +    },
      +    "description": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "descriptionSource": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "operator",
      +            "generated",
      +            "editor"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "`operator`: the resort's own copy. `generated`: a model-written draft, labelled as such on the page. `editor`: hand-written by PeakCam."
      +    },
      +    "liftsTotal": {
      +      "anyOf": [
      +        {
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "longestRunMi": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "passes": {
      +      "description": "Multi-resort passes the resort is on.",
      +      "items": {
      +        "enum": [
      +          "ikon",
      +          "epic",
      +          "mountain-collective",
      +          "indy",
      +          "power"
      +        ],
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "runsTotal": {
      +      "anyOf": [
      +        {
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "skiableAcres": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "trailMapUrl": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The operator's trail map (linked, never copied)."
      +    },
      +    "verticalFt": {
      +      "anyOf": [
      +        {
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "wikidataId": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "runsTotal",
      +    "liftsTotal",
      +    "skiableAcres",
      +    "verticalFt",
      +    "annualSnowfallIn",
      +    "longestRunMi",
      +    "description",
      +    "descriptionSource",
      +    "trailMapUrl",
      +    "wikidataId",
      +    "aliases",
      +    "passes"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / score
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "components": {
      +          "additionalProperties": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "date": {
      +          "description": "YYYY-MM-DD the score is for.",
      +          "type": "string"
      +        },
      +        "rating": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "great",
      +                "good",
      +                "fair",
      +                "poor"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "score": {
      +          "maximum": 100,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "scoredBy": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Scorer version, e.g. `score-v1`."
      +        }
      +      },
      +      "required": [
      +        "date",
      +        "score",
      +        "rating",
      +        "components",
      +        "scoredBy"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Today's 0–100 score, once the scorer is live."
      +}
    • addedOutput schema / properties / stations
      Added value: +{
      +  "description": "Observation stations serving the resort, once the station layer is live.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "distanceKm": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Great-circle distance from the resort's coordinates."
      +      },
      +      "elevationFt": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "id": {
      +        "description": "PeakCam station id (UUID).",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "enum": [
      +          "snotel",
      +          "scan",
      +          "nws_obs",
      +          "metar",
      +          "ghcn",
      +          "bc_asws",
      +          "eccc",
      +          "road_cam"
      +        ],
      +        "type": "string"
      +      },
      +      "lat": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "lon": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "name": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "rank": {
      +        "description": "1 = the preferred station for its role.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "role": {
      +        "description": "Where the station sits relative to the resort.",
      +        "enum": [
      +          "summit",
      +          "mid",
      +          "base",
      +          "approach"
      +        ],
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Provider, e.g. `nrcs`, `nws`, `eccc`, `udot`.",
      +        "type": "string"
      +      },
      +      "sourceId": {
      +        "description": "The provider's own identifier (SNOTEL triplet, ICAO code, GHCN id).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "source",
      +      "sourceId",
      +      "name",
      +      "kind",
      +      "role",
      +      "lat",
      +      "lon",
      +      "elevationFt",
      +      "distanceKm",
      +      "rank"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "slug",
      -  "name",
      -  "canonicalUrl",
      -  "apiUrl",
      -  "location",
      -  "snow",
      -  "season",
      -  "cams",
      -  "websiteUrl",
      -  "attribution",
      -  "license",
      -  "updatedAt"
      -]New value: +[
      +  "slug",
      +  "name",
      +  "canonicalUrl",
      +  "apiUrl",
      +  "location",
      +  "profile",
      +  "snow",
      +  "season",
      +  "cams",
      +  "websiteUrl",
      +  "attribution",
      +  "license",
      +  "updatedAt"
      +]
  7. First observed

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read-only profile, and the description adds substantial behavioral detail beyond them: the OPEN-only-on-fresh-feed rule, the meaning of UNKNOWN, the 30% depthDisagreement trigger, what `sentence` is for, and the distinction between snotel (measured, station elevation not summit) and open_meteo (model estimate) sources.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence front-loads the purpose well, but the body enumerates nearly every field inside `data` and the legacy Resort document even though an output schema exists — that detail is largely duplicated in structured data. Dense parenthetical packing makes it heavier than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only tool with a full output schema and covering annotations, an agent has everything needed to call it correctly, and the status/source semantics are genuinely useful. It over-delivers on return-value detail rather than leaving gaps, so completeness is high but not perfectly matched to what the schema already provides.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single `slug` parameter is fully documented in the schema (100% coverage) including kebab-case format and where to obtain it. The description adds no parameter-specific guidance, so it relies on the schema baseline of 3; the source-type explanation is about returned data, not the input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('latest snow report for one resort'), plus the envelope shape it returns (conditions contract v2). It is clearly distinguishable from siblings like get_resort_profile, get_snow_history, or compare_resorts because it is scoped to a single resort's current conditions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names two triggering questions: "is X open today" and "what are conditions at X", and tells the agent where the required slug comes from (search_resorts). It does not name alternative siblings (e.g., get_forecast for future outlook, get_snow_history for past), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.