MountainSwitch Know before you go.

Search and menu

Search for a destination, or browse routes, system status, documentation, and legal links.

Area
Area All areas
Activity
Activity Any activity

Developers

Destinations

Overview

GET

/v1/destinations

Destinations

Destinations is the complete consumer-place discovery endpoint. Use each item's endpoint markers before requesting access, weather, map geometry, or route-specific drilldown.

Parameters

Path and query parameters are documented together so the request surface stays easy to scan.

jurisdiction

Query Optional

string

Optional canonical jurisdiction filter. If omitted, the API returns every consumer place in the current catalog. Inspect endpoint markers before requesting live data. In the current California scope, jurisdiction must canonicalize to US-CA.

area

Query Optional

string

Exact consumer area id. An exactly empty value is treated as absent.

activity

Query Optional

string

Exact activity facet. The skiing selection returns ski-resort places; since FACET-ATTACHMENT-2, skiing is carried only by ski-resort records, so the selection and the facet agree.

q

Query Optional

string

Trimmed, case-insensitive substring search over the shared consumer search corpus.

kind

Query Optional

string

Exact place kind from the seven-value destination kind vocabulary.

Example request

Use the same endpoint across all three snippets. The tabs switch only the client syntax.

cURL

curl -sS "https://api.mountainswitch.co/v1/destinations?jurisdiction=US-CA&area=southern-california-mountains" \
  -H "Accept: application/json"

Example response

The example response shows the documented JSON envelope with endpoint data in data and request metadata in _meta.

200 OK application/json
{
  "data": [
    {
      "destination": "big-bear",
      "label": "Big Bear Lake",
      "kind": "mountain-community",
      "area": "southern-california-mountains",
      "jurisdiction": "US-CA",
      "jurisdiction_slug": "ca",
      "routes": ["SR-18", "SR-38", "SR-138", "SR-330"],
      "communities": [],
      "facets": ["mountain-biking", "boating", "fishing", "hiking", "off-roading"],
      "contained_by": null,
      "endpoints": {
        "access": true,
        "weather": true,
        "map_geometry": true,
        "route_summary": true
      }
    }
  ],
  "_meta": {
    "request_id": "req_destinations_docs",
    "response_generated_at": "2026-04-15T17:00:00Z",
    "pagination": null
  }
}

Response fields

This reference stays flat on purpose so the documented fields remain easy to scan.

data
Array<object>
Complete consumer-place records ordered by label ascending.
data[].destination
string
Canonical consumer-place slug. Check endpoints.access before using the access URL.
data[].label
string
Human-facing destination label.
data[].kind
string
Single primary identity: ski-resort, lake, mountain-community, mountain-pass, corridor, park-gateway, or region.
data[].area
string
Homepage consumer-area id shared with the area filter.
data[].facets
string[]
Public askable activity or feature tags. The activity=skiing selection returns ski-resort-kind places, and skiing is carried only by ski-resort-kind records (FACET-ATTACHMENT-2).
data[].jurisdiction
string
Canonical API jurisdiction code for the destination record.
data[].jurisdiction_slug
string
Website jurisdiction slug paired with the canonical jurisdiction code.
data[].routes
string[]
Canonical API route values preserved in the destination-owned route order.
data[].communities
string[]
Curated community labels in the destination-owned order. Empty arrays remain valid.
data[].contained_by
string | null
Hub or backing destination for overlay and related-target places; null for independent places. Empty routes and communities on a contained place mean it registers none of its own.
data[].endpoints.access
boolean
Whether the place is in the destination-access capability roster.
data[].endpoints.weather
boolean
Whether the place is in the public destination-weather capability roster.
data[].endpoints.map_geometry
boolean
Whether access support, a registered access path, and public map-geometry exposure all hold.
data[].endpoints.route_summary
boolean
Whether the slug may scope a route that registers it; this is not eligibility for every route.
_meta.request_id
string
Request identifier for debugging and support workflows.
_meta.response_generated_at
string
ISO timestamp describing when the API assembled the response.
_meta.pagination
null
Always null because destinations is a non-paginated discovery endpoint.

Errors

These rows keep the repo-wide rate-limit and infrastructure behavior visible without inventing endpoint-specific transport semantics.

Status Code When it happens
400 INVALID_PARAMETER The request contains a repeated or unrecognized query parameter, an unrecognized non-empty filter value, or a known jurisdiction other than US-CA.
400 INVALID_JURISDICTION The provided jurisdiction value does not canonicalize to a known jurisdiction code.
429 RATE_LIMIT_EXCEEDED The caller exceeded the shared API rate limit.
503 SERVICE_UNAVAILABLE D1 or another critical dependency is unavailable.

Notes

These notes capture the contract edges that matter most for consumers of the endpoint.

Use this endpoint for live discovery

Call GET /v1/destinations first to discover every consumer place, then inspect endpoints before continuing. A true marker means roster membership, not that the endpoint is live or healthy for the current request.

This endpoint omits source coverage metadata

GET /v1/destinations returns place-catalog metadata, not live condition-derived truth. The response keeps _meta.request_id, _meta.response_generated_at, and _meta.pagination, but omits _meta.sources and _meta.query_coverage.

Destinations is always a live no-store read

This endpoint is not written to the response KV cache. It returns Cache-Control: no-store even though the response is non-paginated.