addedOutput schema / properties / resorts / items / 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 / resorts / items / 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 / resorts / items / properties / location / properties / summitElevationFt
Added value: +{
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+}
changedOutput schema / properties / resorts / items / properties / location / required
Previous value: -[
- "state",
- "region",
- "country",
- "lat",
- "lon",
- "baseElevationFt"
-]New value: +[
+ "state",
+ "region",
+ "country",
+ "lat",
+ "lon",
+ "baseElevationFt",
+ "summitElevationFt"
+]
addedOutput schema / properties / resorts / items / 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 / resorts / items / 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 / resorts / items / 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 / resorts / items / 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 / properties / resorts / items / required
Previous value: -[
- "slug",
- "name",
- "canonicalUrl",
- "apiUrl",
- "location",
- "snow",
- "season",
- "websiteUrl",
- "attribution",
- "license",
- "updatedAt",
- "camCount",
- "liveCamCount"
-]New value: +[
+ "slug",
+ "name",
+ "canonicalUrl",
+ "apiUrl",
+ "location",
+ "profile",
+ "snow",
+ "season",
+ "websiteUrl",
+ "attribution",
+ "license",
+ "updatedAt",
+ "camCount",
+ "liveCamCount"
+]