Live snow reports, SNOTEL measurements, webcams and powder rankings for 150 ski resorts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
One natural-language question in, one tool result out, deterministically: the router resolves the resort by name or nickname, picks an intent from the wording (snow, open/closed, forecast, cams, history, compare, where did it snow, percent of normal, profile, regions, alerts) and calls the matching tool. Returns the tool's data, the resort, citation URLs and a dated sentence to quote. Answers `answerable: false` with suggestions rather than guessing. No language model is involved.
The question as the user asked it, up to 300 characters, e.g. "is Alta open" or "where did it snow most in Colorado".
One natural-language question in, one tool result out, deterministically: the router resolves the resort by name or nickname, picks an intent from the wording (snow, open/closed, forecast, cams, history, compare, where did it snow, percent of normal, profile, regions, alerts) and calls the matching tool. Returns the tool's data, the resort, citation URLs and a dated sentence to quote. Answers `answerable: false` with suggestions rather than guessing. No language model is involved.
| Argument | Type | Description |
|---|---|---|
| question* | string | The question as the user asked it, up to 300 characters, e.g. "is Alta open" or "where did it snow most in Colorado". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "The question as the user asked it, up to 300 characters, e.g. \"is Alta open\" or \"where did it snow most in Colorado\"."
}
}
}How each weather model has verified at a resort over the trailing 90 days, graded against measured snow (SNOTEL depth change, clipped at zero), and what each model says for the next 7 days right now. Per model: rank, mean absolute error at day 1/3/7 (cm), bias ratio (total forecast over total measured; above 1 over-forecasts), samples, plus the current 7-day total and horizon. `truthBasis` and `measuredDays` say what the grading rested on; a resort with no measured series has no scores. The PeakCam blend is graded by the same rule and appears as `blend`.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
}
}
}Side-by-side latest snow, today's Snow Score (0–100 with a rating; get_score explains it), season status and cam counts for 2–6 resorts. Every slug must resolve; an unknown one returns suggestions.
| Argument | Type | Description |
|---|---|---|
| slugs* | array | 2–6 resort slugs. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slugs"
],
"properties": {
"slugs": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
},
"maxItems": 6,
"minItems": 2,
"description": "2–6 resort slugs."
}
}
}Rank resorts by new snow in the last 24 or 48 hours, optionally within one state/province and above a minimum. Pass sourceOnly="snotel" to answer "where did it snow most, measured only" with station data alone. Resorts with no report are left out; zero inches is a measurement. Each row also carries today's Snow Score (`score`, 0–100 with a rating) when one is stored; get_score explains it. 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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Rows to return, 1–25. |
| state | string | US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive. |
| window | string | Which window ranks first; the other breaks ties. |
| minInches | number | Keep only resorts with at least this many inches in the window. |
| sourceOnly | string | `snotel` keeps only station-measured reports and drops model estimates. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Rows to return, 1–25."
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive."
},
"window": {
"enum": [
"24h",
"48h"
],
"type": "string",
"default": "24h",
"description": "Which window ranks first; the other breaks ties."
},
"minInches": {
"type": "number",
"maximum": 500,
"minimum": 0,
"description": "Keep only resorts with at least this many inches in the window."
},
"sourceOnly": {
"enum": [
"snotel"
],
"type": "string",
"description": "`snotel` keeps only station-measured reports and drops model estimates."
}
}
}How to be told when it snows, without this server writing anything: the powder-alert threshold and schedule, the e-mail, webhook (Standard Webhooks, signed), Atom and iCal channels, the per-resort public Atom feed, the webhook payload contract, and the manage page where a person registers a destination. Pass a slug to get that resort's feed URL.
| Argument | Type | Description |
|---|---|---|
| slug | string | Optional: a resort slug, to fill in its public Atom feed URL. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Optional: a resort slug, to fill in its public Atom feed URL."
}
}
}Archived still frames for a resort's webcams (or one cam) over the last 1–48 hours, as links with capture times, plus the newest storm frame on tape per cam. Only cams whose operator allows archiving appear; PeakCam captures every 6 hours. Use it for "what did it look like this morning" or "show me the last storm". Frames are never returned inline.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
| camId | string | Optional: one cam's id from get_resort_cams; default is every archived cam at the resort. |
| hours | integer | Window, 1–48 hours. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
},
"camId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Optional: one cam's id from get_resort_cams; default is every archived cam at the resort."
},
"hours": {
"type": "integer",
"default": 24,
"maximum": 48,
"minimum": 1,
"description": "Window, 1–48 hours."
}
}
}Fourteen-day blended snow forecast for a resort: per day the median snowfall across the weather models that reach that day (ECMWF IFS, GFS, GEM, ICON, JMA, Météo-France, UKMO; NBM and HRRR added for US points), the 25th/75th percentile band as snowfallLoIn/snowfallHiIn, and modelCount so you can weigh a far-out two-model day against a near-term nine-model one. `summary` has next 48 h, 7- and 14-day totals and the peak day. US resorts also get the National Weather Service text narrative (`periods`), with its snow amounts replaced by the blend. Weather data by Open-Meteo.com (CC BY 4.0): quote the credit. `available: false` when no model run is stored yet.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
| point | string | Which elevation's blend. Falls back to the other point with a note when the asked one has no runs. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
},
"point": {
"enum": [
"summit",
"base"
],
"type": "string",
"default": "summit",
"description": "Which elevation's blend. Falls back to the other point with a note when the asked one has no runs."
}
}
}Resorts ranked on one of four season boards: best-powder-this-week (measured new snow in the last 7 days), season-powder-days (days with ≥ 8 in since Oct 1), deepest-base (latest station or model depth) and season-snowfall (measured new snow since Oct 1), optionally within one state and measured-only. The season boards cover the Northern hemisphere. Answers a dated sentence, the rule in words and rows with source and station. Same data as https://www.peakcam.io/snow-report/{kind}.
| Argument | Type | Description |
|---|---|---|
| kind* | string | Which board. |
| limit | integer | Rows to return, 1–50. |
| state | string | US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive. |
| sourceOnly | string | `snotel` keeps only station-measured rows. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"best-powder-this-week",
"season-powder-days",
"deepest-base",
"season-snowfall"
],
"type": "string",
"description": "Which board."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Rows to return, 1–50."
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive."
},
"sourceOnly": {
"enum": [
"snotel"
],
"type": "string",
"description": "`snotel` keeps only station-measured rows."
}
}
}Average snowfall, snow days (≥ 1 in), depth and the biggest storm per calendar month at the resort's SNOTEL station, over the 30 most recent complete winters and, separately, the 10 most recent, with the recent decade as a percent of the 30-winter figure and a note when they differ by more than 10 %. Use it for "which month is snowiest", "how much does it usually snow in January". Resorts without a station normal answer available: false.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge`. Get it from search_resorts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge`. Get it from search_resorts."
}
}
}Season opening and closing dates with status (open / closed / unknown) for every resort, or those in one state/province, soonest opening first. Confirmed dates come from the resort; projected ones are third-party estimates.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Rows to return, 1–150. |
| state | string | US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 150,
"minimum": 1,
"description": "Rows to return, 1–150."
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive."
}
}
}SNOTEL-fed resorts ranked by snowpack relative to normal: snow water equivalent against the station's own 1991–2020 median for today's date, deepest first, optionally within one state. Only measured station readings qualify, inside the 10–300 % band and above 2 in of SWE; early-season noise is withheld, not ranked. Same data as https://www.peakcam.io/snow-report/percent-of-normal.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Rows to return, 1–50. |
| state | string | US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Rows to return, 1–50."
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive."
}
}
}The resort's webcams as links: PeakCam page URL, the operator's stream or page URL, a still-image URL when one exists, and health (live / down / unchecked, from PeakCam's probe, not proof of a live broadcast). Frames are never returned inline.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
}
}
}Who and where a resort is, without the snow numbers: location and elevations, website and social links, PeakCam's cam page, the SNOTEL station its numbers come from (if any), season status, cam counts, and every URL PeakCam publishes for it (page, JSON, markdown, Atom feed, state hub). Use get_resort_conditions for today's snow.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
}
}
}PeakCam's 0–100 Snow Score for one resort, scored once a day by a fixed formula (scoredBy is always `algorithmic`): `today` carries the score, its four-tier rating (great ≥ 75, good ≥ 55, fair ≥ 35, else poor; the same words as the conditions rating), a dated tagline to quote and five components, each with points, max, a one-line basis and its source: depth vs the station's 1991–2020 normal (30), new snow over the last 7 days (25), the blended 7-day forecast (20), snow quality from days since snow, the 3-day high and the surface tags (15), and the operating status (10). `history` is one point per scored day over the last 30 days. Use it for "how good is X right now and why", "score X out of 100", "is X better than last week"; for a ranking use find_powder, compare_resorts or /api/v1/snow-report?sort=score. `available: false` before the first scoring run.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
}
}
}Season-to-date for one resort from PeakCam's own daily station record: measured snowfall since the season start (daily new snow = the positive change in station depth, a floor on what fell), days measured, snow days, powder days (8 in or more, the alert threshold), current and deepest base, percent of the 30-winter normal to this day and of the recent decade (with a baselineNote when they disagree by more than 10 %), the same day last year, a 7-day trend and a dated sentence to quote. Use it for "how is the season going", "is this a good year", "how does it compare with last year".
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge`. Get it from search_resorts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge`. Get it from search_resorts."
}
}
}Daily snow depth, snow water equivalent, precipitation accumulation and temperatures for the last 1–30 days at the resort's station (SNOTEL where there is one, Open-Meteo model otherwise), newest first. Use it for "how has the base changed this week" questions. Pass `season` (`2024-25`, or `current`) for a whole season's daily depth and new-snow rows instead of the last N days; get_season_stats summarises a season.
| Argument | Type | Description |
|---|---|---|
| days | integer | Days back, 1–30. Ignored when `season` is set. |
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
| season | string | A season label (`2024-25` for the Northern water year, `2026` for an Andes resort) or `current`: returns every daily row of that season, oldest first, with daily new snow. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"days": {
"type": "integer",
"default": 14,
"maximum": 30,
"minimum": 1,
"description": "Days back, 1–30. Ignored when `season` is set."
},
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
},
"season": {
"type": "string",
"pattern": "^(current|\\d{4}(-\\d{2})?)$",
"description": "A season label (`2024-25` for the Northern water year, `2026` for an Andes resort) or `current`: returns every daily row of that season, oldest first, with daily new snow."
}
}
}What the instruments near one resort measured, by elevation band (summit / mid / base): up to three stations within 25 km with the network named (SNOTEL, GHCN-Daily, NWS, BC ASWS, ECCC), elevation, distance, the time of the reading and its age, snow depth, new snow, SWE, temperature and wind. Daily networks carry depth; hourly ones carry temperature and wind. Use it for "what is it like at the top right now" and "how old is that number" questions; the snow report itself comes from get_resort_conditions.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
}
}
}Rendered timelapse clips for a resort's webcams (or one cam), as links: the rolling 24-hour MP4 per cam (H.264, 7 fps, 720p max, at most 3 MB, re-rendered every 6 hours from PeakCam's still archive) with its poster JPEG and frame bounds, plus storm reels (rendered while the resort's measured 24 h new snow is 8 in or more, from the first frame after the last dry day, capped at 72 h; one per storm day, kept a year). Only cams whose operator allows archiving have clips. Use it for "show me the last 24 hours" or "show me the last storm" questions; get_cam_timeline returns the individual frames. Media is never returned inline.
| Argument | Type | Description |
|---|---|---|
| slug* | string | PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts. |
| camId | string | Optional: one cam's id from get_resort_cams; default is every cam with a clip. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "PeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts."
},
"camId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Optional: one cam's id from get_resort_cams; default is every cam with a clip."
}
}
}Every state, province and country PeakCam covers, with resort, reporting, measured (SNOTEL) and cam counts and the hub page URL. Call it to learn the valid `state` values for find_powder, get_opening_dates and get_percent_of_normal, or to answer "where does PeakCam have data".
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Find PeakCam resorts by name (or part of one, or a region) and get their slugs with a one-line snow summary each. Call this first when the user names a resort; then use the slug with the other tools. Covers about 300 resorts in the US, Canada, Chile and Argentina.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Rows to return, 1–20. |
| query* | string | Resort name or fragment, e.g. `vail`, `big sky`, `portillo`, `tahoe`. Also matches region names. |
| state | string | US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive. |
| country | string | ISO 3166-1 alpha-2 country code: `US`, `CA`, `CL` or `AR`. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 20,
"minimum": 1,
"description": "Rows to return, 1–20."
},
"query": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Resort name or fragment, e.g. `vail`, `big sky`, `portillo`, `tahoe`. Also matches region names."
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state or Canadian province code (`CO`, `UT`, `BC`), or for the Andes the country name PeakCam lists (`Chile`, `Argentina`). Case-insensitive."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 country code: `US`, `CA`, `CL` or `AR`."
}
}
}