{"openapi":"3.1.0","info":{"title":"peaks.fyi mountain data","version":"3.1.0","description":"Public mountain research and published forecasts. Read-only; no booking, live route safety, or avalanche bulletins."},"servers":[{"url":"https://peaks.fyi"}],"paths":{"/api/agent/get_route_briefs":{"get":{"operationId":"get_route_briefs_get","description":"Compare up to six known routes in one compact evidence packet: grade, timing conflicts, selected equipment, linked huts, access, notices and optional dated daylight. Preserves per-route errors and source provenance. Partial results must not be treated as complete; no booking, live transport or suitability guarantee. Use get_route for full details and get_weather for forecasts. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"routes":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"routeId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"required":["slug","routeId"],"additionalProperties":false},"description":"One to six known peak slug / route ID pairs from search_routes; not free-text names."},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"sections":{"default":["equipment","huts","access","notices","daylight"],"maxItems":5,"type":"array","items":{"type":"string","enum":["equipment","huts","access","notices","daylight"]}}},"required":["routes"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"complete":{"type":"boolean"},"requested":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"results":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"requested":{"type":"object","properties":{"slug":{"type":"string"},"routeId":{"type":"string"}},"required":["slug","routeId"],"additionalProperties":false},"status":{"type":"string","const":"ok"},"brief":{"type":"object","properties":{"canonicalId":{"type":"string"},"routeId":{"type":"string"},"sourceUpdatedAt":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}},"limitations":{"type":"array","items":{"type":"string"}}},"required":["canonicalId","routeId","sourceUpdatedAt","sources","limitations"],"additionalProperties":{}}},"required":["requested","status","brief"],"additionalProperties":false},{"type":"object","properties":{"requested":{"type":"object","properties":{"slug":{"type":"string"},"routeId":{"type":"string"}},"required":["slug","routeId"],"additionalProperties":false},"status":{"type":"string","const":"error"},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}},"required":["requested","status","error"],"additionalProperties":false}]}}},"required":["dataVersion","complete","requested","succeeded","results"],"additionalProperties":false},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_route_briefs","description":"Compare up to six known routes in one compact evidence packet: grade, timing conflicts, selected equipment, linked huts, access, notices and optional dated daylight. Preserves per-route errors and source provenance. Partial results must not be treated as complete; no booking, live transport or suitability guarantee. Use get_route for full details and get_weather for forecasts.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"routes":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"routeId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"required":["slug","routeId"],"additionalProperties":false},"description":"One to six known peak slug / route ID pairs from search_routes; not free-text names."},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"sections":{"default":["equipment","huts","access","notices","daylight"],"maxItems":5,"type":"array","items":{"type":"string","enum":["equipment","huts","access","notices","daylight"]}}},"required":["routes"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"complete":{"type":"boolean"},"requested":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"succeeded":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"results":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"requested":{"type":"object","properties":{"slug":{"type":"string"},"routeId":{"type":"string"}},"required":["slug","routeId"],"additionalProperties":false},"status":{"type":"string","const":"ok"},"brief":{"type":"object","properties":{"canonicalId":{"type":"string"},"routeId":{"type":"string"},"sourceUpdatedAt":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}},"limitations":{"type":"array","items":{"type":"string"}}},"required":["canonicalId","routeId","sourceUpdatedAt","sources","limitations"],"additionalProperties":{}}},"required":["requested","status","brief"],"additionalProperties":false},{"type":"object","properties":{"requested":{"type":"object","properties":{"slug":{"type":"string"},"routeId":{"type":"string"}},"required":["slug","routeId"],"additionalProperties":false},"status":{"type":"string","const":"error"},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}},"required":["requested","status","error"],"additionalProperties":false}]}}},"required":["dataVersion","complete","requested","succeeded","results"],"additionalProperties":false},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/get_capabilities":{"get":{"operationId":"get_capabilities_get","description":"Inspect actual catalogue coverage, output JSON schemas, data version, units and unsupported operations before planning. Unknown data is not evidence of absence. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"peakCount":{"type":"number"},"routeCount":{"type":"number"},"coverage":{"type":"object","properties":{},"additionalProperties":{}},"unsupported":{"type":"array","items":{"type":"string"}}},"required":["dataVersion","peakCount","routeCount","coverage","unsupported"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_capabilities","description":"Inspect actual catalogue coverage, output JSON schemas, data version, units and unsupported operations before planning. Unknown data is not evidence of absence.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"peakCount":{"type":"number"},"routeCount":{"type":"number"},"coverage":{"type":"object","properties":{},"additionalProperties":{}},"unsupported":{"type":"array","items":{"type":"string"}}},"required":["dataVersion","peakCount","routeCount","coverage","unsupported"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/get_notices":{"get":{"operationId":"get_notices_get","description":"Read dated notices with publication validity, explicit scope uncertainty and recurrence hints. Supply slug and the trip date; omitted date means today (UTC), echoed in requestedDate. Expired notices may describe recurring regulations; expiry is not evidence that access is open. Verify current law with the linked source. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"date":{"description":"Trip date, YYYY-MM-DD. Omit to check today's UTC date, which is echoed in requestedDate.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"routeId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"required":["slug"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"peakSlug":{"type":"string"},"requestedDate":{"type":"string"},"requestedRoute":{"type":["string","null"]},"notices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"date":{"type":"string"},"sourceValidity":{"type":"string"},"recurrenceHint":{"type":"boolean"},"routeScope":{"type":"string"},"currentRuleConfirmed":{"type":"boolean","const":false}},"required":["id","text","date","sourceValidity","recurrenceHint","routeScope","currentRuleConfirmed"],"additionalProperties":{}}}},"required":["peakSlug","requestedDate","requestedRoute","notices"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_notices","description":"Read dated notices with publication validity, explicit scope uncertainty and recurrence hints. Supply slug and the trip date; omitted date means today (UTC), echoed in requestedDate. Expired notices may describe recurring regulations; expiry is not evidence that access is open. Verify current law with the linked source.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"date":{"description":"Trip date, YYYY-MM-DD. Omit to check today's UTC date, which is echoed in requestedDate.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"routeId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"required":["slug"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"peakSlug":{"type":"string"},"requestedDate":{"type":"string"},"requestedRoute":{"type":["string","null"]},"notices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"date":{"type":"string"},"sourceValidity":{"type":"string"},"recurrenceHint":{"type":"boolean"},"routeScope":{"type":"string"},"currentRuleConfirmed":{"type":"boolean","const":false}},"required":["id","text","date","sourceValidity","recurrenceHint","routeScope","currentRuleConfirmed"],"additionalProperties":{}}}},"required":["peakSlug","requestedDate","requestedRoute","notices"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/resolve_peak":{"get":{"operationId":"resolve_peak_get","description":"Resolve a canonical peak ID, external Wikidata/OSM ID, current slug or exact name to its current slug and citable URL. Example input: {\"id\":\"Ben Nevis\"}. Use canonical IDs to recover from renamed slugs. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":150,"description":"Canonical peak:id, Wikidata Q ID, OSM ID, current slug or exact translated name."}},"required":["id"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"canonicalId":{"type":"string"},"slug":{"type":"string"},"externalIds":{"type":"object","properties":{},"additionalProperties":{}},"revision":{"type":"string"},"url":{"type":"string"}},"required":["canonicalId","slug","externalIds","revision","url"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"resolve_peak","description":"Resolve a canonical peak ID, external Wikidata/OSM ID, current slug or exact name to its current slug and citable URL. Example input: {\"id\":\"Ben Nevis\"}. Use canonical IDs to recover from renamed slugs.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":150,"description":"Canonical peak:id, Wikidata Q ID, OSM ID, current slug or exact translated name."}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"canonicalId":{"type":"string"},"slug":{"type":"string"},"externalIds":{"type":"object","properties":{},"additionalProperties":{}},"revision":{"type":"string"},"url":{"type":"string"}},"required":["canonicalId","slug","externalIds","revision","url"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/get_changes":{"get":{"operationId":"get_changes_get","description":"Compare a watched set of peaks with a previous snapshot. Returns content changes, removals and an updated snapshot. No changes means no new source data, not proof that conditions are unchanged. Date-dependent notice status must still be checked. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slugs":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"previous":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":150},"revision":{"type":"string","maxLength":64}},"required":["id","revision"],"additionalProperties":false}}},"required":["slugs"],"additionalProperties":false,"description":"Poll an explicit watch list. Send the preceding snapshot to receive changed records and removals; an empty previous list establishes a baseline."}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"changed":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},"removed":{"type":"array","items":{"type":"string"}},"unchanged":{"type":"number"},"snapshot":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}}},"required":["dataVersion","changed","removed","unchanged","snapshot"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_changes","description":"Compare a watched set of peaks with a previous snapshot. Returns content changes, removals and an updated snapshot. No changes means no new source data, not proof that conditions are unchanged. Date-dependent notice status must still be checked.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slugs":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"previous":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":150},"revision":{"type":"string","maxLength":64}},"required":["id","revision"],"additionalProperties":false}}},"required":["slugs"],"additionalProperties":false,"description":"Poll an explicit watch list. Send the preceding snapshot to receive changed records and removals; an empty previous list establishes a baseline."}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"changed":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},"removed":{"type":"array","items":{"type":"string"}},"unchanged":{"type":"number"},"snapshot":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}}},"required":["dataVersion","changed","removed","unchanged","snapshot"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/get_daylight":{"get":{"operationId":"get_daylight_get","description":"Compute sunrise, sunset and civil twilight for the exact calendar date and IANA zone. UTC instants handle daylight saving and polar days. Terrain and weather can reduce usable daylight. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"timeZone":{"description":"Optional explicit IANA zone; defaults to the catalogue zone.","type":"string","maxLength":80}},"required":["slug","date"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"date":{"type":"string"},"timeZone":{"type":"string"},"sunrise":{"type":["string","null"]},"sunset":{"type":["string","null"]},"civilDawn":{"type":["string","null"]},"civilDusk":{"type":["string","null"]}},"required":["date","timeZone","sunrise","sunset","civilDawn","civilDusk"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_daylight","description":"Compute sunrise, sunset and civil twilight for the exact calendar date and IANA zone. UTC instants handle daylight saving and polar days. Terrain and weather can reduce usable daylight.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"timeZone":{"description":"Optional explicit IANA zone; defaults to the catalogue zone.","type":"string","maxLength":80}},"required":["slug","date"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"date":{"type":"string"},"timeZone":{"type":"string"},"sunrise":{"type":["string","null"]},"sunset":{"type":["string","null"]},"civilDawn":{"type":["string","null"]},"civilDusk":{"type":["string","null"]}},"required":["date","timeZone","sunrise","sunset","civilDawn","civilDusk"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/search":{"get":{"operationId":"search_get","description":"Search peaks.fyi by mountain name, alternative name, country, range or climbing request. Returns citable peak IDs and URLs. Use fetch to read a result; use search_peaks for explicit filters and pagination. An empty result means no match in this catalogue, not that the mountain does not exist. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":200,"description":"Peak name, alias, country, range, or request such as hiking in Austria in July."}},"required":["query"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"elevationM":{"type":"number"},"countries":{"type":"array","items":{"type":"string"}}},"required":["id","title","url","elevationM","countries"],"additionalProperties":{}}},"metadata":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"total":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"elevationM":{"type":"number"},"countries":{"type":"array","items":{"type":"string"}}},"required":["id","title","url","elevationM","countries"],"additionalProperties":{}}},"nextOffset":{"type":["number","null"]}},"required":["dataVersion","total","results","nextOffset"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}},"required":["results","metadata"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"search","description":"Search peaks.fyi by mountain name, alternative name, country, range or climbing request. Returns citable peak IDs and URLs. Use fetch to read a result; use search_peaks for explicit filters and pagination. An empty result means no match in this catalogue, not that the mountain does not exist.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":200,"description":"Peak name, alias, country, range, or request such as hiking in Austria in July."}},"required":["query"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"elevationM":{"type":"number"},"countries":{"type":"array","items":{"type":"string"}}},"required":["id","title","url","elevationM","countries"],"additionalProperties":{}}},"metadata":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"total":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"elevationM":{"type":"number"},"countries":{"type":"array","items":{"type":"string"}}},"required":["id","title","url","elevationM","countries"],"additionalProperties":{}}},"nextOffset":{"type":["number","null"]}},"required":["dataVersion","total","results","nextOffset"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}},"required":["results","metadata"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/fetch":{"get":{"operationId":"fetch_get","description":"Read a peak search result by catalogue slug as a citable text document. Example input: {\"id\":\"ben-nevis\"}. This retrieves catalogue documents, not external website URLs; use your own browsing tool for publisher pages. Includes routes, season, access, hazards, huts, notices and provenance. Use get_weather for current forecasts. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak ID (slug) from search."}},"required":["id"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"},"url":{"type":"string"}},"required":["id","title","text","url"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"fetch","description":"Read a peak search result by catalogue slug as a citable text document. Example input: {\"id\":\"ben-nevis\"}. This retrieves catalogue documents, not external website URLs; use your own browsing tool for publisher pages. Includes routes, season, access, hazards, huts, notices and provenance. Use get_weather for current forecasts.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak ID (slug) from search."}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"},"url":{"type":"string"}},"required":["id","title","text","url"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/get_peak":{"get":{"operationId":"get_peak_get","description":"Get compact peak facts and route IDs. Example input: {\"slug\":\"ben-nevis\"}. Optionally request access, huts, seasons, hazards or provenance sections. For fact questions search may already suffice. For current weather use get_weather; for hut booking information use get_huts. Research is not live availability. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"sections":{"description":"Omit for a compact overview, route IDs, season and notices. Request only sections needed.","maxItems":8,"type":"array","items":{"type":"string","enum":["overview","routes","seasons","access","huts","hazards","notices","provenance"]}}},"required":["slug"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"slug":{"type":"string"},"canonicalId":{"type":"string"},"name":{"type":"string"},"location":{"type":"array","items":{"type":"number"}},"timeZone":{"type":"string"},"revision":{"type":"string"}},"required":["slug","canonicalId","name","location","timeZone","revision"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_peak","description":"Get compact peak facts and route IDs. Example input: {\"slug\":\"ben-nevis\"}. Optionally request access, huts, seasons, hazards or provenance sections. For fact questions search may already suffice. For current weather use get_weather; for hut booking information use get_huts. Research is not live availability.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"sections":{"description":"Omit for a compact overview, route IDs, season and notices. Request only sections needed.","maxItems":8,"type":"array","items":{"type":"string","enum":["overview","routes","seasons","access","huts","hazards","notices","provenance"]}}},"required":["slug"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"slug":{"type":"string"},"canonicalId":{"type":"string"},"name":{"type":"string"},"location":{"type":"array","items":{"type":"number"}},"timeZone":{"type":"string"},"revision":{"type":"string"}},"required":["slug","canonicalId","name","location","timeZone","revision"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/get_route":{"get":{"operationId":"get_route_get","description":"Get one route by peak slug and routeId from get_peak: grade, equipment, key passages, stages, trailhead, timing, confidence and geometry QA. Failed, truncated or outline geometry must not be used for navigation. Times are estimates. No live route safety or opening guarantee. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"routeId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Route ID from get_peak or search_routes."},"includeDescription":{"default":false,"type":"boolean"}},"required":["slug","routeId"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"id":{"type":"string"},"canonicalId":{"type":"string"},"name":{"type":"string"},"glacierTravel":{"type":["boolean","null"]},"timing":{"type":"object","properties":{"computed":{"type":"object","properties":{"ascentHours":{"type":"number"},"descentHours":{"type":"number"},"roundTripHours":{"type":"number"}},"required":["ascentHours","descentHours","roundTripHours"],"additionalProperties":{}},"published":{"anyOf":[{"type":"object","properties":{},"additionalProperties":{}},{"type":"null"}]},"preferredEstimate":{"type":"null"}},"required":["computed","published","preferredEstimate"],"additionalProperties":{}},"geometry":{"type":"object","properties":{"status":{"type":"string"},"navigationSuitable":{"type":"boolean"},"warning":{"type":["string","null"]}},"required":["status","navigationSuitable","warning"],"additionalProperties":{}},"peakSlug":{"type":"string"},"trailhead":{"type":"object","properties":{},"additionalProperties":{}},"stages":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},"equipment":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},"gpxUrl":{"type":["string","null"]},"gpxScope":{"type":"string","enum":["round-trip","ascent-only"]}},"required":["id","canonicalId","name","glacierTravel","timing","geometry","peakSlug","trailhead","stages","equipment","gpxUrl","gpxScope"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_route","description":"Get one route by peak slug and routeId from get_peak: grade, equipment, key passages, stages, trailhead, timing, confidence and geometry QA. Failed, truncated or outline geometry must not be used for navigation. Times are estimates. No live route safety or opening guarantee.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"routeId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Route ID from get_peak or search_routes."},"includeDescription":{"default":false,"type":"boolean"}},"required":["slug","routeId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"id":{"type":"string"},"canonicalId":{"type":"string"},"name":{"type":"string"},"glacierTravel":{"type":["boolean","null"]},"timing":{"type":"object","properties":{"computed":{"type":"object","properties":{"ascentHours":{"type":"number"},"descentHours":{"type":"number"},"roundTripHours":{"type":"number"}},"required":["ascentHours","descentHours","roundTripHours"],"additionalProperties":{}},"published":{"anyOf":[{"type":"object","properties":{},"additionalProperties":{}},{"type":"null"}]},"preferredEstimate":{"type":"null"}},"required":["computed","published","preferredEstimate"],"additionalProperties":{}},"geometry":{"type":"object","properties":{"status":{"type":"string"},"navigationSuitable":{"type":"boolean"},"warning":{"type":["string","null"]}},"required":["status","navigationSuitable","warning"],"additionalProperties":{}},"peakSlug":{"type":"string"},"trailhead":{"type":"object","properties":{},"additionalProperties":{}},"stages":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},"equipment":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},"gpxUrl":{"type":["string","null"]},"gpxScope":{"type":"string","enum":["round-trip","ascent-only"]}},"required":["id","canonicalId","name","glacierTravel","timing","geometry","peakSlug","trailhead","stages","equipment","gpxUrl","gpxScope"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/get_route_point":{"get":{"operationId":"get_route_point_get","description":"Look up a named waypoint or difficult passage on a route. Returns source notes, known coordinates, nearby stage names, key passages and relevant equipment. Missing coordinates or conditions remain unknown; this is not live navigation guidance. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"routeId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"query":{"type":"string","minLength":1,"maxLength":150,"description":"Name of a waypoint or key passage, e.g. Grand Couloir or halfway lochan."}},"required":["slug","routeId","query"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"peakSlug":{"type":"string"},"routeId":{"type":"string"},"query":{"type":"string"},"waypoints":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}}},"required":["peakSlug","routeId","query","waypoints"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_route_point","description":"Look up a named waypoint or difficult passage on a route. Returns source notes, known coordinates, nearby stage names, key passages and relevant equipment. Missing coordinates or conditions remain unknown; this is not live navigation guidance.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"routeId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"query":{"type":"string","minLength":1,"maxLength":150,"description":"Name of a waypoint or key passage, e.g. Grand Couloir or halfway lochan."}},"required":["slug","routeId","query"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"peakSlug":{"type":"string"},"routeId":{"type":"string"},"query":{"type":"string"},"waypoints":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}}},"required":["peakSlug","routeId","query","waypoints"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/get_huts":{"get":{"operationId":"get_huts_get","description":"Read huts, documented seasonal operation, source years and booking/contact URLs for a peak. Beds means capacity, never vacancies. Live availability, reservations, rental inventory and current opening status are unknown. Do not infer next year's opening dates from a dated season; contact the linked provider. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"hutId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"date":{"description":"Planning date; does not turn published seasons into live availability.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["slug"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"peakSlug":{"type":"string"},"requestedDate":{"type":["string","null"]},"huts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"capacityBeds":{"type":["number","null"]},"sourceYears":{"type":"array","items":{"type":"string"}},"bookingInformationUrl":{"type":["string","null"]},"availability":{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false},"rentalEquipmentAvailability":{"type":"object","properties":{"status":{"type":"string","const":"unknown"}},"required":["status"],"additionalProperties":false}},"required":["id","name","capacityBeds","sourceYears","bookingInformationUrl","availability","rentalEquipmentAvailability"],"additionalProperties":{}}}},"required":["peakSlug","requestedDate","huts"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_huts","description":"Read huts, documented seasonal operation, source years and booking/contact URLs for a peak. Beds means capacity, never vacancies. Live availability, reservations, rental inventory and current opening status are unknown. Do not infer next year's opening dates from a dated season; contact the linked provider.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"hutId":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"date":{"description":"Planning date; does not turn published seasons into live availability.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["slug"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"peakSlug":{"type":"string"},"requestedDate":{"type":["string","null"]},"huts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"capacityBeds":{"type":["number","null"]},"sourceYears":{"type":"array","items":{"type":"string"}},"bookingInformationUrl":{"type":["string","null"]},"availability":{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false},"rentalEquipmentAvailability":{"type":"object","properties":{"status":{"type":"string","const":"unknown"}},"required":["status"],"additionalProperties":false}},"required":["id","name","capacityBeds","sourceYears","bookingInformationUrl","availability","rentalEquipmentAvailability"],"additionalProperties":{}}}},"required":["peakSlug","requestedDate","huts"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/search_routes":{"get":{"operationId":"search_routes_get","description":"Find routes satisfying all supplied constraints on the SAME route, including difficulty, glacier travel, style and computed round-trip hours. Unknown glacier status is excluded by glacier filters. Searches all candidate peaks; use nextCursor until null for complete results. Coordinates filter peak locations, not trailheads. Transport matches documented prose, not confirmed operation. Historical season and public transport descriptions are not current operating confirmations. Read route details and conflicts before recommending. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"near":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"radiusKm":{"type":"number","exclusiveMinimum":0,"maximum":20000}},"required":["latitude","longitude","radiusKm"],"additionalProperties":false},"bbox":{"description":"Exactly [west,south,east,north] in degrees; west > east crosses the antimeridian.","minItems":4,"maxItems":4,"type":"array","items":{"type":"number","minimum":-180,"maximum":180}},"query":{"default":"","type":"string","maxLength":200},"cursor":{"description":"Opaque nextCursor from the same query. Bound to the catalogue revision and filters.","type":"string","maxLength":500},"countries":{"maxItems":8,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"}},"month":{"type":"integer","minimum":1,"maximum":12},"maxDifficulty":{"type":"integer","minimum":1,"maximum":10},"maxRoundTripHours":{"type":"number","exclusiveMinimum":0,"maximum":100},"glacier":{"type":"string","enum":["none","only"]},"styles":{"maxItems":7,"type":"array","items":{"type":"string","enum":["hike","scramble","via_ferrata","glacier","rock","mixed","ski"]}},"publicTransport":{"description":"Require documented transport to the trailhead; schedules and operating dates still need checking.","type":"boolean"},"limit":{"default":10,"type":"integer","minimum":1,"maximum":20}},"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"total":{"type":"number"},"routes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"canonicalId":{"type":"string"},"name":{"type":"string"},"glacierTravel":{"type":["boolean","null"]},"timing":{"type":"object","properties":{"computed":{"type":"object","properties":{"ascentHours":{"type":"number"},"descentHours":{"type":"number"},"roundTripHours":{"type":"number"}},"required":["ascentHours","descentHours","roundTripHours"],"additionalProperties":{}},"published":{"anyOf":[{"type":"object","properties":{},"additionalProperties":{}},{"type":"null"}]},"preferredEstimate":{"type":"null"}},"required":["computed","published","preferredEstimate"],"additionalProperties":{}},"geometry":{"type":"object","properties":{"status":{"type":"string"},"navigationSuitable":{"type":"boolean"},"warning":{"type":["string","null"]}},"required":["status","navigationSuitable","warning"],"additionalProperties":{}}},"required":["id","canonicalId","name","glacierTravel","timing","geometry"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]},"complete":{"type":"boolean"},"coverage":{"type":"object","properties":{},"additionalProperties":{}}},"required":["dataVersion","total","routes","nextCursor","complete","coverage"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"search_routes","description":"Find routes satisfying all supplied constraints on the SAME route, including difficulty, glacier travel, style and computed round-trip hours. Unknown glacier status is excluded by glacier filters. Searches all candidate peaks; use nextCursor until null for complete results. Coordinates filter peak locations, not trailheads. Transport matches documented prose, not confirmed operation. Historical season and public transport descriptions are not current operating confirmations. Read route details and conflicts before recommending.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"near":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"radiusKm":{"type":"number","exclusiveMinimum":0,"maximum":20000}},"required":["latitude","longitude","radiusKm"],"additionalProperties":false},"bbox":{"description":"Exactly [west,south,east,north] in degrees; west > east crosses the antimeridian.","minItems":4,"maxItems":4,"type":"array","items":{"type":"number","minimum":-180,"maximum":180}},"query":{"default":"","type":"string","maxLength":200},"cursor":{"description":"Opaque nextCursor from the same query. Bound to the catalogue revision and filters.","type":"string","maxLength":500},"countries":{"maxItems":8,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"}},"month":{"type":"integer","minimum":1,"maximum":12},"maxDifficulty":{"type":"integer","minimum":1,"maximum":10},"maxRoundTripHours":{"type":"number","exclusiveMinimum":0,"maximum":100},"glacier":{"type":"string","enum":["none","only"]},"styles":{"maxItems":7,"type":"array","items":{"type":"string","enum":["hike","scramble","via_ferrata","glacier","rock","mixed","ski"]}},"publicTransport":{"description":"Require documented transport to the trailhead; schedules and operating dates still need checking.","type":"boolean"},"limit":{"default":10,"type":"integer","minimum":1,"maximum":20}},"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"total":{"type":"number"},"routes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"canonicalId":{"type":"string"},"name":{"type":"string"},"glacierTravel":{"type":["boolean","null"]},"timing":{"type":"object","properties":{"computed":{"type":"object","properties":{"ascentHours":{"type":"number"},"descentHours":{"type":"number"},"roundTripHours":{"type":"number"}},"required":["ascentHours","descentHours","roundTripHours"],"additionalProperties":{}},"published":{"anyOf":[{"type":"object","properties":{},"additionalProperties":{}},{"type":"null"}]},"preferredEstimate":{"type":"null"}},"required":["computed","published","preferredEstimate"],"additionalProperties":{}},"geometry":{"type":"object","properties":{"status":{"type":"string"},"navigationSuitable":{"type":"boolean"},"warning":{"type":["string","null"]}},"required":["status","navigationSuitable","warning"],"additionalProperties":{}}},"required":["id","canonicalId","name","glacierTravel","timing","geometry"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]},"complete":{"type":"boolean"},"coverage":{"type":"object","properties":{},"additionalProperties":{}}},"required":["dataVersion","total","routes","nextCursor","complete","coverage"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/get_weather":{"get":{"operationId":"get_weather_get","description":"Get published weather for a peak and optional summit/hut/trailhead target. Set targetId and start/end for a bounded planning response; unfiltered forecasts can be large. Point samples are separate from accumulated rain/snow intervals and complete-window totals. Check target coverage and missing fields. Stale is marked; expired, missing and far-future data is unavailable. For a trip months away use get_peak seasons instead, never invent a forecast or a safety verdict. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"view":{"default":"full","description":"Compact retains requested weather, intervals, uncertainty and coverage, omitting auxiliary per-point fields. Follow fullData for all fields.","type":"string","enum":["full","compact"]},"start":{"description":"Inclusive forecast interval start, ISO 8601 with time zone.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"end":{"description":"Exclusive forecast interval end, ISO 8601 with time zone.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"targetId":{"description":"Optional exact summit, hut or trailhead target ID. Omit to see all targets.","type":"string","maxLength":200}},"required":["slug"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"get_weather","description":"Get published weather for a peak and optional summit/hut/trailhead target. Set targetId and start/end for a bounded planning response; unfiltered forecasts can be large. Point samples are separate from accumulated rain/snow intervals and complete-window totals. Check target coverage and missing fields. Stale is marked; expired, missing and far-future data is unavailable. For a trip months away use get_peak seasons instead, never invent a forecast or a safety verdict.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Peak slug returned by search, for example mont-blanc."},"view":{"default":"full","description":"Compact retains requested weather, intervals, uncertainty and coverage, omitting auxiliary per-point fields. Follow fullData for all fields.","type":"string","enum":["full","compact"]},"start":{"description":"Inclusive forecast interval start, ISO 8601 with time zone.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"end":{"description":"Exclusive forecast interval end, ISO 8601 with time zone.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"targetId":{"description":"Optional exact summit, hut or trailhead target ID. Omit to see all targets.","type":"string","maxLength":200}},"required":["slug"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}},"/api/agent/search_peaks":{"get":{"operationId":"search_peaks_get","description":"Find and compare mountains with explicit country, elevation, season, difficulty and glacier filters. All filters are hard constraints; never silently relaxed. Returns compact peak summaries, IDs, total and nextOffset. Read get_peak and get_route before recommending a route: peak-level filters can describe different routes. Pass a URL-encoded JSON object in input, or pass individual fields as query parameters.","x-openai-isConsequential":false,"parameters":[{"name":"input","in":"query","required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":200,"description":"Peak name, alias, country, range, or request such as hiking in Austria in July."},"near":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"radiusKm":{"type":"number","exclusiveMinimum":0,"maximum":20000}},"required":["latitude","longitude","radiusKm"],"additionalProperties":false},"bbox":{"description":"Exactly [west,south,east,north] in degrees; west > east crosses the antimeridian.","minItems":4,"maxItems":4,"type":"array","items":{"type":"number","minimum":-180,"maximum":180}},"countries":{"maxItems":8,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"}},"month":{"description":"Month with a good historical climbing season; not a weather forecast.","type":"integer","minimum":1,"maximum":12},"minElevationM":{"type":"number","minimum":0,"maximum":9000},"maxElevationM":{"type":"number","minimum":0,"maximum":9000},"maxDifficulty":{"description":"1–2 easy hike, 3 mountain hike, 4 alpine hike/F, 5 PD, 6 AD, 7 D, 8 TD, 9 ED, 10 extreme. Peak-level minimum, not a guarantee for every route.","type":"integer","minimum":1,"maximum":10},"glacier":{"type":"string","enum":["none","only"]},"limit":{"default":10,"description":"Page size, at most 20. Omit for 10. Use nextOffset to request another page.","type":"integer","minimum":1,"maximum":20},"offset":{"default":0,"description":"Start at 0; use nextOffset from the preceding response for subsequent pages.","type":"integer","minimum":0,"maximum":100000}},"required":["query"],"additionalProperties":false}}},"description":"URL-encoded JSON object matching the POST request schema. For simple requests, individual scalar fields can be query parameters instead."}],"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"total":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"elevationM":{"type":"number"},"countries":{"type":"array","items":{"type":"string"}}},"required":["id","title","url","elevationM","countries"],"additionalProperties":{}}},"nextOffset":{"type":["number","null"]}},"required":["dataVersion","total","results","nextOffset"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid or duplicate query parameters"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity"},"413":{"description":"Query exceeds 16 KiB"},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}},"post":{"operationId":"search_peaks","description":"Find and compare mountains with explicit country, elevation, season, difficulty and glacier filters. All filters are hard constraints; never silently relaxed. Returns compact peak summaries, IDs, total and nextOffset. Read get_peak and get_route before recommending a route: peak-level filters can describe different routes.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":200,"description":"Peak name, alias, country, range, or request such as hiking in Austria in July."},"near":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"radiusKm":{"type":"number","exclusiveMinimum":0,"maximum":20000}},"required":["latitude","longitude","radiusKm"],"additionalProperties":false},"bbox":{"description":"Exactly [west,south,east,north] in degrees; west > east crosses the antimeridian.","minItems":4,"maxItems":4,"type":"array","items":{"type":"number","minimum":-180,"maximum":180}},"countries":{"maxItems":8,"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$"}},"month":{"description":"Month with a good historical climbing season; not a weather forecast.","type":"integer","minimum":1,"maximum":12},"minElevationM":{"type":"number","minimum":0,"maximum":9000},"maxElevationM":{"type":"number","minimum":0,"maximum":9000},"maxDifficulty":{"description":"1–2 easy hike, 3 mountain hike, 4 alpine hike/F, 5 PD, 6 AD, 7 D, 8 TD, 9 ED, 10 extreme. Peak-level minimum, not a guarantee for every route.","type":"integer","minimum":1,"maximum":10},"glacier":{"type":"string","enum":["none","only"]},"limit":{"default":10,"description":"Page size, at most 20. Omit for 10. Use nextOffset to request another page.","type":"integer","minimum":1,"maximum":20},"offset":{"default":0,"description":"Start at 0; use nextOffset from the preceding response for subsequent pages.","type":"integer","minimum":0,"maximum":100000}},"required":["query"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sourced data, including explicit unavailable states.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"retrievedAt":{"type":"string"},"data":{"type":"object","properties":{"dataVersion":{"type":"string"},"total":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"elevationM":{"type":"number"},"countries":{"type":"array","items":{"type":"string"}}},"required":["id","title","url","elevationM","countries"],"additionalProperties":{}}},"nextOffset":{"type":["number","null"]}},"required":["dataVersion","total","results","nextOffset"],"additionalProperties":{}},"sources":{"type":"array","items":{"type":"string"}}},"required":["schemaVersion","retrievedAt","data","sources"],"additionalProperties":false}}}},"400":{"description":"Invalid input"},"404":{"description":"Unknown peak or route"},"409":{"description":"Cursor expired or ambiguous identity; restart search or disambiguate."},"429":{"description":"Rate limited; wait for Retry-After"},"503":{"description":"Data temporarily unavailable"}}}}}}