{
  "schema": "\n  type Query {\n    \"\"\"\n    Get activities with optional filters. Sorted by ranking score (or distance if near filter is used).\n    \"\"\"\n    activities(\n      \"Search query (fuzzy match on title)\"\n      q: String\n      \"Language locale\"\n      locale: String = \"de-CH\"\n      \"Filter by type ID\"\n      typeId: String\n      \"Filter by location ID\"\n      locationId: String\n      \"Filter by supplier ID\"\n      supplierId: String\n      \"Filter by attribute value (e.g., 'Familien', 'Berge & Natur')\"\n      attributeValue: String\n      \"Latitude for near-me filter\"\n      nearLat: Float\n      \"Longitude for near-me filter\"\n      nearLng: Float\n      \"Radius in km for near-me filter (default: 50)\"\n      radiusKm: Float = 50\n      \"Max items (default: 20, max: 100)\"\n      limit: Int = 20\n      \"Offset for pagination\"\n      offset: Int = 0\n    ): ActivitiesResult!\n\n    \"\"\"\n    Get a single activity by ID\n    \"\"\"\n    activity(\n      id: String!\n      locale: String = \"de-CH\"\n    ): Activity\n\n    \"\"\"\n    Get all locations\n    \"\"\"\n    locations(\n      locale: String = \"de-CH\"\n      limit: Int = 200\n    ): [Location!]!\n\n    \"\"\"\n    Get all activity types\n    \"\"\"\n    types(\n      locale: String = \"de-CH\"\n    ): [ActivityType!]!\n\n    \"\"\"\n    Get ski resorts with live snow data\n    \"\"\"\n    wispoStations(\n      locale: String = \"de-CH\"\n      q: String\n      limit: Int = 50\n      offset: Int = 0\n    ): WispoResult!\n\n    \"\"\"\n    Get a single ski resort by ID\n    \"\"\"\n    wispoStation(\n      id: Int!\n      locale: String = \"de-CH\"\n    ): WispoStation\n\n    \"\"\"\n    Get tours (hiking, biking, snowshoe, sledging, etc.) from MySwitzerland\n    \"\"\"\n    tours(\n      \"Search query (searches name and abstract)\"\n      q: String\n      \"Filter by route type: hike, mountainbike, bicycle, snowshoe, winterhiking, crosscountryskiing, sledging, skating, canoe\"\n      routeType: String\n      \"Filter by season: summer, winter\"\n      season: String\n      \"Filter by difficulty: easy, medium, difficult\"\n      difficulty: String\n      \"Latitude for near-me filter\"\n      nearLat: Float\n      \"Longitude for near-me filter\"\n      nearLng: Float\n      \"Radius in km for near-me filter (default: 50)\"\n      radiusKm: Float = 50\n      limit: Int = 50\n      offset: Int = 0\n    ): ToursResult!\n\n    \"\"\"\n    Get a single tour by ID\n    \"\"\"\n    tour(\n      id: String!\n    ): Tour\n\n    \"\"\"\n    Get tourist attractions from MySwitzerland\n    \"\"\"\n    attractions(\n      \"Search query (searches name and abstract)\"\n      q: String\n      \"Filter by season: summer, winter, spring, autumn\"\n      season: String\n      \"Filter by sport type: hike, toboggan, bathingandswimming, etc.\"\n      sportType: String\n      \"Filter by experience type: adventure, nature, active, culture, etc.\"\n      experienceType: String\n      \"Filter by needed time: lessthan1hour, between12hours, 2to4hourshalfday, 4to8hoursfullday, severaldays\"\n      neededTime: String\n      \"Filter by children age: 0to5years, 6to9years, 10to13years, 14plus\"\n      childrenAge: String\n      \"Filter by is outdoor\"\n      isOutdoor: Boolean\n      \"Filter by is indoor\"\n      isIndoor: Boolean\n      \"Filter by wheelchair accessible\"\n      isWheelchairAccessible: Boolean\n      \"Filter by free entry\"\n      isAccessibleForFree: Boolean\n      \"Latitude for near-me filter\"\n      nearLat: Float\n      \"Longitude for near-me filter\"\n      nearLng: Float\n      \"Radius in km for near-me filter (default: 50)\"\n      radiusKm: Float = 50\n      limit: Int = 50\n      offset: Int = 0\n    ): AttractionsResult!\n\n    \"\"\"\n    Get a single attraction by ID\n    \"\"\"\n    attraction(\n      id: String!\n    ): Attraction\n  }\n\n  # ============================================================================\n  # Activities\n  # ============================================================================\n\n  type ActivitiesResult {\n    data: [Activity!]!\n    total: Int!\n    hasMore: Boolean!\n  }\n\n  type Activity {\n    id: String!\n    bookingId: Int!\n    locale: String!\n    title: String\n    teaserImage: Image\n    supplier: Supplier\n    location: Location\n    type: ActivityType\n    info: Info\n    summary: Summary!\n    isBookable: Boolean!\n    nextAvailableDate: String\n    lat: String\n    lng: String\n    \"Distance in km (only present when using nearLat/nearLng filter)\"\n    distance: Float\n  }\n\n  type Summary {\n    startingPrice: Price\n    rankingScoreValue: Float!\n    popularity: Int!\n    isActive: Boolean!\n  }\n\n  type Price {\n    amount: String!\n    currency: String!\n    formatted: String\n  }\n\n  type Image {\n    url: String!\n    alternativeText: String\n  }\n\n  type Supplier {\n    id: String\n    name: String\n    slug: String\n  }\n\n  type Location {\n    id: String!\n    title: String!\n    slug: String!\n    activityCount: Int\n  }\n\n  type ActivityType {\n    id: String!\n    title: String!\n    slug: String!\n  }\n\n  type Info {\n    title: String!\n    teaser: String\n    slug: String!\n  }\n\n  \"\"\"JSON scalar for raw data access\"\"\"\n  scalar JSON\n\n  # ============================================================================\n  # Wispo (Ski Resorts) - Complete Data\n  # ============================================================================\n\n  type WispoResult {\n    data: [WispoStation!]!\n    total: Int!\n    hasMore: Boolean!\n    \"Pagination info\"\n    pagination: WispoPagination\n    \"Meta info\"\n    meta: WispoMeta\n  }\n\n  type WispoPagination {\n    total: Int!\n    limit: Int!\n    offset: Int!\n    hasMore: Boolean!\n    page: Int!\n    totalPages: Int!\n  }\n\n  type WispoMeta {\n    locale: String!\n    lastSync: String\n    expiresAt: String\n    source: String!\n    responseTimeMs: Int\n  }\n\n  type WispoStation {\n    id: Int!\n    name: String!\n    \n    \"Coordinates (from webcam if available)\"\n    latitude: Float\n    longitude: Float\n    \n    \"Resort & Address\"\n    resort: WispoResort\n    address: WispoAddress\n    \n    \"General Info\"\n    info: WispoInfo\n    \n    \"Snow Conditions\"\n    snow: WispoSnow\n    \n    \"Ski/Piste Info\"\n    ski: WispoSki\n    \n    \"Snowboard Parks\"\n    snowboard: WispoSnowboard\n    \n    \"Cross-country Skiing\"\n    crosscountry: WispoCrosscountry\n    \n    \"Hiking & Snowshoe\"\n    hiking: WispoHiking\n    \n    \"Tobogganing/Sledging\"\n    tobogganing: WispoTobogganing\n    \n    \"Sledging (alias for tobogganing)\"\n    sledge: WispoSledge\n    \n    \"Snowshoe trails\"\n    snowshoe: WispoSnowshoe\n    \n    \"Ticket Prices\"\n    prices: WispoPrices\n    \n    \"Weather (simple format)\"\n    weather: WispoWeather\n    \n    \"Weather Forecast (7 days detailed)\"\n    weatherForecast: [WispoWeatherForecast!]\n    \n    \"Images (Logo, Piste Map, etc.)\"\n    images: [WispoImage!]\n    \n    \"Webcams with live feeds\"\n    webcams: [WispoWebcam!]\n    \n    \"Links (Ticketshop, Ski School, Interactive Map)\"\n    links: [WispoLink!]\n    \n    \"MySwitzerland detail links\"\n    detailLinks: [WispoDetailLink!]\n    \n    \"Last update timestamp\"\n    lastUpdate: String\n    \n    \"Raw API data (for advanced use)\"\n    raw: JSON\n  }\n\n  type WispoResort {\n    id: Int!\n    name: String!\n    regionId: Int\n  }\n\n  type WispoAddress {\n    name: String\n    street: String\n    place: String\n    zip: Int\n    phone: String\n    email: String\n    website: String\n  }\n\n  type WispoInfo {\n    \"Altitude in meters\"\n    altitude: Int\n    seasonStart: String\n    seasonEnd: String\n    \"Total lift facilities\"\n    totalFacilities: Int\n    \"Gondolas/Cable cars\"\n    cableCars: Int\n    \"Chairlifts\"\n    chairlifts: Int\n    \"Ski lifts (T-bar, etc.)\"\n    skilifts: Int\n    \"Baby/Beginner lifts\"\n    babyLifts: Int\n    \"Conveyor belts\"\n    conveyorBelts: Int\n    \"Shuttle bus available\"\n    hasShuttlebus: Boolean\n    \"Facility report\"\n    report: String\n    \"Lift details (nested)\"\n    lifts: WispoLifts\n  }\n\n  type WispoLifts {\n    cableCar: Int\n    chairlift: Int\n    skilift: Int\n    babyLift: Int\n  }\n\n  type WispoSnow {\n    \"Fresh snow in cm\"\n    freshSnow: Int\n    \"Fresh snow on piste top in cm\"\n    freshSnowPisteTop: Int\n    \"Snow depth at resort in cm\"\n    depthResort: Int\n    \"Snow depth on piste in cm\"\n    depthPiste: Int\n    \"Last snowfall date\"\n    lastSnowfall: String\n    \"Avalanche risk level URL\"\n    avalancheRiskUrl: String\n    \"Snow report\"\n    report: String\n  }\n\n  type WispoSki {\n    \"Ski area name\"\n    areaName: String\n    \"Total number of slopes\"\n    slopesTotal: Int\n    \"Total slopes length in meters\"\n    slopesLength: Int\n    \"Open slopes length in meters\"\n    slopesOpenLength: Int\n    \"Number of valley runs\"\n    valleyRuns: Int\n    \"Open facilities count\"\n    openFacilities: Int\n    \"Opening time\"\n    openingTime: String\n    \"Closing time\"\n    closingTime: String\n    \"Piste condition\"\n    condition: String\n    \"Snow condition\"\n    snowCondition: String\n    \"Valley runs condition\"\n    valleyRunsCondition: String\n    \"Piste report\"\n    report: String\n  }\n\n  type WispoSnowboard {\n    \"Fun park name\"\n    funparkName: String\n    \"Number of snowparks\"\n    snowparksTotal: Int\n    \"Open snowparks\"\n    snowparksOpen: Int\n    \"Open halfpipes\"\n    halfpipesOpen: Int\n    \"Open snowtubes\"\n    snowtubesOpen: Int\n    \"Has artificial snow\"\n    hasArtificialSnow: Boolean\n    \"Has floodlight\"\n    hasFloodlight: Boolean\n    \"Condition\"\n    condition: String\n    \"Detailed snowparks\"\n    snowparks: [WispoSnowpark!]\n  }\n\n  type WispoSnowpark {\n    name: String\n    type: String\n    status: String\n    lastUpdated: String\n  }\n\n  type WispoCrosscountry {\n    \"Area name\"\n    areaName: String\n    \"Phone number\"\n    phone: String\n    \"Total classic track length in meters\"\n    classicLength: Int\n    \"Prepared classic track length\"\n    classicPrepared: Int\n    \"Total skating track length in meters\"\n    skatingLength: Int\n    \"Prepared skating track length\"\n    skatingPrepared: Int\n    \"Dog trail total length\"\n    dogTrailLength: Int\n    \"Dog trail open length\"\n    dogTrailOpen: Int\n    \"Floodlight track length\"\n    floodlightLength: Int\n    \"Floodlight till time\"\n    floodlightTill: String\n    \"Classic track condition\"\n    classicCondition: String\n    \"Skating track condition\"\n    skatingCondition: String\n    \"Report\"\n    report: String\n    \"SchweizMobil routes\"\n    routes: [WispoSchweizMobilRoute!]\n  }\n\n  type WispoHiking {\n    \"Area name\"\n    areaName: String\n    \"Total walking trail length in meters\"\n    walkingTrailLength: Int\n    \"Prepared walking trail length\"\n    walkingTrailPrepared: Int\n    \"Snowshoe trail count\"\n    snowshoeTrailsTotal: Int\n    \"Snowshoe trail length in meters\"\n    snowshoeTrailsLength: Int\n    \"Trail condition\"\n    condition: String\n    \"Opening time\"\n    openingTime: String\n    \"Closing time\"\n    closingTime: String\n    \"Report\"\n    report: String\n    \"SchweizMobil routes\"\n    routes: [WispoSchweizMobilRoute!]\n  }\n\n  type WispoTobogganing {\n    \"Area name\"\n    areaName: String\n    \"Total tracks\"\n    tracksTotal: Int\n    \"Total track length in meters\"\n    tracksLength: Int\n    \"Open tracks\"\n    tracksOpen: Int\n    \"Open track length\"\n    tracksOpenLength: Int\n    \"Has artificial snow\"\n    hasArtificialSnow: Boolean\n    \"Has public transport\"\n    hasPublicTransport: Boolean\n    \"Has rental possibility\"\n    hasRental: Boolean\n    \"Skill level\"\n    skillLevel: String\n    \"Condition\"\n    condition: String\n    \"Report\"\n    report: String\n  }\n\n  type WispoSchweizMobilRoute {\n    title: String\n    status: String\n  }\n\n  type WispoPrices {\n    \"Day ticket prices\"\n    dayTicket: WispoPriceCategory\n    \"Half-day ticket prices\"\n    halfDayTicket: WispoPriceCategory\n    \"Half-day available from time\"\n    halfDayFrom: String\n    \"Week ticket prices\"\n    weekTicket: WispoPriceCategory\n    \"Season ticket prices\"\n    seasonTicket: WispoPriceCategory\n    \"Family reduction available\"\n    familyReduction: Boolean\n    \"Hour cards available\"\n    hourCardsAvailable: Boolean\n    \"Dynamic pricing\"\n    dynamicPrices: Boolean\n    \"Description\"\n    description: String\n  }\n\n  type WispoPriceCategory {\n    adult: String\n    child: String\n    teenager: String\n    senior: String\n    currency: String\n  }\n\n  \"Simple weather format\"\n  type WispoWeather {\n    condition: String\n    temperatureResort: Int\n    temperaturePiste: Int\n    forecast: String\n  }\n\n  type WispoWeatherForecast {\n    \"BERG (mountain) or TAL (valley)\"\n    type: String!\n    date: String!\n    \"Temperature in Celsius\"\n    temperature: Int\n    \"Weather icon code\"\n    iconCode: Int\n    \"Weather URL\"\n    url: String\n  }\n\n  \"Sledge/Toboggan info (alias)\"\n  type WispoSledge {\n    runsTotal: Int\n    runsLength: Int\n    runsOpenLength: Int\n    condition: String\n  }\n\n  \"Snowshoe trails\"\n  type WispoSnowshoe {\n    trailsTotal: Int\n    trailsLength: Int\n    trailsOpenLength: Int\n    condition: String\n  }\n\n  type WispoImage {\n    \"Image type: LOGO, SKIMAP, SKIMAP_MOBILE, APP_SKIMAP, STATION_PICTURE_1/2/3, etc.\"\n    type: String!\n    url: String!\n    created: String\n    updated: String\n  }\n\n  type WispoWebcam {\n    url: String!\n    sourceUrl: String\n    place: String\n    latitude: Float\n    longitude: Float\n  }\n\n  type WispoLink {\n    \"Link type: INTERACTIVE_PISTE_MAP, TICKETSHOP, SKI_SCHOOL\"\n    type: String!\n    title: String\n    url: String!\n  }\n\n  type WispoDetailLink {\n    lang: String!\n    url: String!\n  }\n\n  # ============================================================================\n  # Tours (MySwitzerland OpenData)\n  # ============================================================================\n\n  type ToursResult {\n    data: [Tour!]!\n    total: Int!\n    hasMore: Boolean!\n    pagination: ToursPagination\n    meta: ToursMeta\n  }\n\n  type ToursPagination {\n    total: Int!\n    limit: Int!\n    offset: Int!\n    hasMore: Boolean!\n    page: Int!\n    totalPages: Int!\n  }\n\n  type ToursMeta {\n    locale: String!\n    lastSync: String\n    expiresAt: String\n    source: String!\n    responseTimeMs: Int\n  }\n\n  type Tour {\n    \"Tour UUID\"\n    id: String!\n    \"Tour name\"\n    name: String!\n    \"Tour description/abstract\"\n    abstract: String\n    \"MySwitzerland URL\"\n    url: String\n    \n    \"Route type: hike, mountainbike, bicycle, snowshoe, winterhiking, crosscountryskiing, sledging, skating, canoe\"\n    routeType: String\n    \"Route category: National, Regional, Local, Handicap\"\n    routeCategory: String\n    \"Difficulty: easy, medium, difficult\"\n    difficulty: String\n    \"Season: summer, winter\"\n    season: String\n    \n    \"GPS coordinates\"\n    latitude: Float\n    longitude: Float\n    \"Start point name\"\n    startPoint: String\n    \"End point name\"\n    endPoint: String\n    \n    \"Distance in km\"\n    distance: Float\n    \"Duration in minutes\"\n    duration: Int\n    \"Ascent in meters\"\n    ascent: Int\n    \"Descent in meters\"\n    descent: Int\n    \"Minimum altitude in meters\"\n    minAltitude: Int\n    \"Maximum altitude in meters\"\n    maxAltitude: Int\n    \"Is this a roundtrip?\"\n    isRoundtrip: Boolean!\n    \"Is this barrier-free?\"\n    isBarrierFree: Boolean!\n    \n    \"SchweizMobil route number\"\n    switzerlandMobilityRoute: Int\n    \"SchweizMobil URL\"\n    switzerlandMobilityUrl: String\n    \"GeoJSON URL for route coordinates\"\n    geodataUrl: String\n    \n    \"Provider/Tourism office name\"\n    providerName: String\n    \"Provider email\"\n    providerEmail: String\n    \"Provider phone\"\n    providerPhone: String\n    \"Provider website\"\n    providerUrl: String\n    \n    \"Main image URL\"\n    imageUrl: String\n    \"Logo URL\"\n    logoUrl: String\n    \n    \"Landscape types: alongwater, withpanoramicview, onmountainpeak, etc.\"\n    landscapes: [String!]!\n    \"View types: mountainview, flatlandview, panorama\"\n    views: [String!]!\n    \n    \"Data origin (e.g., Schweiz Mobil)\"\n    origin: String\n    \"Last updated timestamp\"\n    lastUpdated: String\n    \n    \"Distance from search point (only when using nearLat/nearLng)\"\n    distance_km: Float\n  }\n\n  # ============================================================================\n  # Attractions (MySwitzerland OpenData)\n  # ============================================================================\n\n  type AttractionsResult {\n    data: [Attraction!]!\n    total: Int!\n    hasMore: Boolean!\n    pagination: AttractionsPagination\n    meta: AttractionsMeta\n  }\n\n  type AttractionsPagination {\n    total: Int!\n    limit: Int!\n    offset: Int!\n    hasMore: Boolean!\n    page: Int!\n    totalPages: Int!\n  }\n\n  type AttractionsMeta {\n    locale: String!\n    lastSync: String\n    expiresAt: String\n    source: String!\n    responseTimeMs: Int\n  }\n\n  type Attraction {\n    \"Attraction UUID\"\n    id: String!\n    \"Attraction name\"\n    name: String!\n    \"Short description\"\n    abstract: String\n    \"Full description (may contain HTML)\"\n    description: String\n    \"MySwitzerland URL\"\n    url: String\n    \n    \"GPS coordinates\"\n    latitude: Float\n    longitude: Float\n    \"City/Town\"\n    locality: String\n    \"Postal code\"\n    postalCode: String\n    \n    \"Contact name (tourism office)\"\n    contactName: String\n    \"Contact phone\"\n    contactPhone: String\n    \"Contact email\"\n    contactEmail: String\n    \"Contact website\"\n    contactUrl: String\n    \n    \"Tourist types: Adventure Tourism, etc.\"\n    touristType: [String!]!\n    \"Seasons: summer, winter, spring, autumn\"\n    seasons: [String!]!\n    \"Sport types: hike, toboggan, bathingandswimming, etc.\"\n    sportTypes: [String!]!\n    \"Needed time: lessthan1hour, between12hours, 2to4hourshalfday, etc.\"\n    neededTime: String\n    \"Suitable for children ages: 0to5years, 6to9years, 10to13years, 14plus\"\n    childrenAges: [String!]!\n    \"Difficulty: low, medium, high\"\n    difficulty: String\n    \"Nature types: parks, waterfall, caves, etc.\"\n    natureTypes: [String!]!\n    \"Experience types: adventure, nature, active, culture\"\n    experienceTypes: [String!]!\n    \"Views: mountainview, panorama, flatlandview\"\n    views: [String!]!\n    \n    \"Is entry free?\"\n    isAccessibleForFree: Boolean!\n    \"Is wheelchair accessible?\"\n    isWheelchairAccessible: Boolean!\n    \"Is indoor attraction?\"\n    isIndoor: Boolean!\n    \"Is outdoor attraction?\"\n    isOutdoor: Boolean!\n    \"Suitable for: children, family, group, individual, couples\"\n    suitableFor: [String!]!\n    \n    \"Recommended season start\"\n    seasonStart: String\n    \"Recommended season end\"\n    seasonEnd: String\n    \n    \"Main image URL\"\n    imageUrl: String\n    \"All image URLs\"\n    images: [String!]!\n    \n    \"Parent destination ID\"\n    destinationId: String\n    \"Last updated timestamp\"\n    lastUpdated: String\n    \n    \"Distance from search point (only when using nearLat/nearLng)\"\n    distance_km: Float\n  }\n",
  "documentation": "# SwissActivities GraphQL API Schema\n\n## 🔗 Endpoints\n\n- **GraphQL Playground**: https://contentcdn.swissactivities.com/api/graphql\n- **Schema (this page)**: https://contentcdn.swissactivities.com/api/schema\n\n## 🔐 Authentication\n\n**GraphQL API ist offen** - keine Authentifizierung nötig!\n\nDer Zugriff wird durch CORS geschützt (nur erlaubte Origins wie `*.swissactivities.com` können Queries ausführen).\n\n---\n\n## 🎿 Wispo Stations (Ski Resorts)\n\nLive data for Swiss ski resorts including snow conditions, prices, webcams, and more.\n\n### Query: wispoStations\n\n```graphql\nwispoStations(\n  locale: String = \"de-CH\"  # Language: de-CH, en-CH, fr-CH, it-CH\n  q: String                  # Search by name\n  limit: Int = 50            # Max 500\n  offset: Int = 0            # Pagination offset\n): WispoResult!\n```\n\n### Query: wispoStation\n\n```graphql\nwispoStation(\n  id: Int!                   # Station ID (e.g., 2 for San Bernardino)\n  locale: String = \"de-CH\"\n): WispoStation\n```\n\n### WispoStation Fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `id` | Int! | Unique station ID |\n| `name` | String! | Station name |\n| `latitude` | Float | GPS latitude |\n| `longitude` | Float | GPS longitude |\n| `resort` | WispoResort | Resort info with region |\n| `address` | WispoAddress | Contact info |\n| `info` | WispoInfo | Season dates, lifts |\n| `snow` | WispoSnow | Snow depths, conditions |\n| `ski` | WispoSki | Slopes, conditions |\n| `snowboard` | WispoSnowboard | Snowparks |\n| `crosscountry` | WispoCrosscountry | Cross-country tracks |\n| `hiking` | WispoHiking | Winter hiking |\n| `tobogganing` | WispoTobogganing | Sledge runs |\n| `sledge` | WispoSledge | Sledge (alias) |\n| `snowshoe` | WispoSnowshoe | Snowshoe trails |\n| `prices` | WispoPrices | Ticket prices |\n| `weather` | WispoWeather | Current weather |\n| `weatherForecast` | [WispoWeatherForecast] | 7-day forecast |\n| `images` | [WispoImage] | Logo, piste map, etc. |\n| `webcams` | [WispoWebcam] | Live webcams |\n| `links` | [WispoLink] | Ticketshop, ski school |\n| `raw` | JSON | Full raw API data |\n\n### Example Query\n\n```graphql\n{\n  wispoStations(limit: 2, locale: \"de-CH\") {\n    data {\n      id\n      name\n      latitude\n      longitude\n      info {\n        altitude\n        seasonStart\n        seasonEnd\n        lifts { cableCar chairlift skilift babyLift }\n      }\n      snow { freshSnow depthResort depthPiste }\n      ski { slopesTotal slopesOpenLength condition }\n      prices {\n        dayTicket { adult child }\n      }\n      images { type url }\n    }\n    pagination { total page totalPages }\n    meta { lastSync responseTimeMs }\n  }\n}\n```\n\n---\n\n## 🛷 Wispo Routes (Winter Routes)\n\nWinter routes including snowshoe trails, cross-country, hiking, and sledging.\n\n### Query: wispoRoutes\n\n```graphql\nwispoRoutes(\n  type: String    # snowshoe, crosscountry, winterhiking, sledging\n  status: String  # OPEN, CLOSED, NOINFO\n  limit: Int = 50\n  offset: Int = 0\n): WispoRoutesResult!\n```\n\n### WispoRoute Fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `id` | String! | Route UUID |\n| `type` | String! | Route type |\n| `number` | String! | Route number |\n| `status` | String | OPEN, CLOSED, NOINFO |\n| `lastUpdated` | String | Last update timestamp |\n| `link` | String | MySwitzerland link |\n| `isStationActive` | Boolean! | Station active |\n\n---\n\n## 🎯 Activities\n\nSwiss outdoor activities with booking information.\n\n### Query: activities\n\n```graphql\nactivities(\n  q: String           # Fuzzy search on title\n  locale: String      # de-CH, en-CH, fr-CH, it-CH\n  typeId: String      # Filter by activity type\n  locationId: String  # Filter by location\n  supplierId: String  # Filter by supplier\n  nearLat: Float      # Geo search latitude\n  nearLng: Float      # Geo search longitude\n  radiusKm: Float     # Geo search radius (default 50)\n  limit: Int = 20     # Max 100\n  offset: Int = 0\n): ActivitiesResult!\n```\n\n### Query: activity\n\n```graphql\nactivity(\n  id: String!\n  locale: String = \"de-CH\"\n): Activity\n```\n\n---\n\n## 📍 Locations & Types\n\n### Query: locations\n\n```graphql\nlocations(locale: String, limit: Int): [Location!]!\n```\n\n### Query: types\n\n```graphql\ntypes(locale: String): [ActivityType!]!\n```\n\n---\n\n## 📊 Response Types\n\n### Pagination\n\nAll list queries include pagination:\n\n```graphql\npagination {\n  total       # Total items\n  limit       # Items per page\n  offset      # Current offset\n  hasMore     # More pages available\n  page        # Current page number\n  totalPages  # Total pages\n}\n```\n\n### Meta\n\n```graphql\nmeta {\n  locale        # Response language\n  lastSync      # Last data sync\n  expiresAt     # Cache expiration\n  source        # Data source\n  responseTimeMs # Query time\n}\n```\n\n---\n\n## 🔄 Data Freshness\n\n- **Wispo data**: Synced daily at 04:00 UTC\n- **Activities**: Synced every 4 hours\n- **Cache TTL**: 24 hours for live data\n\n---\n\n## 💡 Tips\n\n1. Use GraphQL Playground to explore the schema interactively\n2. Use `raw` field on WispoStation to access all original API data\n3. Filter wispoRoutes by type and status for specific route categories\n4. Use nearLat/nearLng for geo-based activity search\n\n",
  "queries": {
    "activities": "# ============================================\n# ACTIVITIES - Alle verfügbaren Felder\n# ============================================\n# Filter-Optionen (alle optional):\n#   q: String           - Suche im Titel\n#   locale: String      - Sprache (de-CH, en-CH, fr-CH, it-CH)\n#   typeId: String      - Nach Aktivitätstyp filtern\n#   locationId: String  - Nach Ort filtern\n#   supplierId: String  - Nach Anbieter filtern\n#   attributeValue: String - Nach Attribut filtern\n#   nearLat: Float      - Geo-Suche Latitude\n#   nearLng: Float      - Geo-Suche Longitude\n#   radiusKm: Float     - Geo-Suche Radius (default: 50)\n#   limit: Int          - Max Ergebnisse (default: 20, max: 100)\n#   offset: Int         - Pagination Offset\n# ============================================\n\nquery Activities {\n  activities(limit: 10, locale: \"de-CH\") {\n    data {\n      id\n      bookingId\n      locale\n      title\n      \n      teaserImage {\n        url\n        alternativeText\n      }\n      \n      supplier {\n        id\n        name\n        slug\n      }\n      \n      location {\n        id\n        title\n        slug\n        activityCount\n      }\n      \n      type {\n        id\n        title\n        slug\n      }\n      \n      info {\n        title\n        teaser\n        slug\n      }\n      \n      summary {\n        startingPrice {\n          amount\n          currency\n          formatted\n        }\n        rankingScoreValue\n        popularity\n        isActive\n      }\n      \n      isBookable\n      nextAvailableDate\n      lat\n      lng\n      distance\n    }\n    \n    total\n    hasMore\n  }\n}",
    "activity": "# ============================================\n# SINGLE ACTIVITY - Einzelne Aktivität nach ID\n# ============================================\n# Parameter:\n#   id: String!         - Activity ID (required)\n#   locale: String      - Sprache (default: de-CH)\n# ============================================\n\nquery Activity {\n  activity(id: \"240\", locale: \"de-CH\") {\n    id\n    bookingId\n    locale\n    title\n    \n    teaserImage {\n      url\n      alternativeText\n    }\n    \n    supplier {\n      id\n      name\n      slug\n    }\n    \n    location {\n      id\n      title\n      slug\n      activityCount\n    }\n    \n    type {\n      id\n      title\n      slug\n    }\n    \n    info {\n      title\n      teaser\n      slug\n    }\n    \n    summary {\n      startingPrice {\n        amount\n        currency\n        formatted\n      }\n      rankingScoreValue\n      popularity\n      isActive\n    }\n    \n    isBookable\n    nextAvailableDate\n    lat\n    lng\n  }\n}",
    "locations": "# ============================================\n# LOCATIONS - Alle Orte\n# ============================================\n# Parameter:\n#   locale: String      - Sprache (default: de-CH)\n#   limit: Int          - Max Ergebnisse (default: 200)\n# ============================================\n\nquery Locations {\n  locations(locale: \"de-CH\", limit: 200) {\n    id\n    title\n    slug\n    activityCount\n  }\n}",
    "types": "# ============================================\n# TYPES - Alle Aktivitätstypen\n# ============================================\n# Parameter:\n#   locale: String      - Sprache (default: de-CH)\n# ============================================\n\nquery Types {\n  types(locale: \"de-CH\") {\n    id\n    title\n    slug\n  }\n}",
    "wispoStations": "# ============================================\n# WISPO STATIONS - Skigebiete mit ALLEN Daten\n# ============================================\n# Filter-Optionen (alle optional):\n#   locale: String      - Sprache (de-CH, en-CH, fr-CH, it-CH)\n#   q: String           - Suche nach Name\n#   limit: Int          - Max Ergebnisse (default: 50, max: 500)\n#   offset: Int         - Pagination Offset\n# ============================================\n\nquery WispoStations {\n  wispoStations(limit: 10, locale: \"de-CH\") {\n    data {\n      id\n      name\n      latitude\n      longitude\n      \n      resort {\n        id\n        name\n        regionId\n      }\n      \n      address {\n        name\n        street\n        place\n        zip\n        phone\n        email\n        website\n      }\n      \n      info {\n        altitude\n        seasonStart\n        seasonEnd\n        totalFacilities\n        cableCars\n        chairlifts\n        skilifts\n        babyLifts\n        conveyorBelts\n        hasShuttlebus\n        report\n        lifts {\n          cableCar\n          chairlift\n          skilift\n          babyLift\n        }\n      }\n      \n      snow {\n        freshSnow\n        freshSnowPisteTop\n        depthResort\n        depthPiste\n        lastSnowfall\n        avalancheRiskUrl\n        report\n      }\n      \n      ski {\n        areaName\n        slopesTotal\n        slopesLength\n        slopesOpenLength\n        valleyRuns\n        openFacilities\n        openingTime\n        closingTime\n        condition\n        snowCondition\n        valleyRunsCondition\n        report\n      }\n      \n      snowboard {\n        funparkName\n        snowparksTotal\n        snowparksOpen\n        halfpipesOpen\n        snowtubesOpen\n        hasArtificialSnow\n        hasFloodlight\n        condition\n        snowparks {\n          name\n          type\n          status\n          lastUpdated\n        }\n      }\n      \n      crosscountry {\n        areaName\n        phone\n        classicLength\n        classicPrepared\n        skatingLength\n        skatingPrepared\n        dogTrailLength\n        dogTrailOpen\n        floodlightLength\n        floodlightTill\n        classicCondition\n        skatingCondition\n        report\n        routes {\n          title\n          status\n        }\n      }\n      \n      hiking {\n        areaName\n        walkingTrailLength\n        walkingTrailPrepared\n        snowshoeTrailsTotal\n        snowshoeTrailsLength\n        condition\n        openingTime\n        closingTime\n        report\n        routes {\n          title\n          status\n        }\n      }\n      \n      tobogganing {\n        areaName\n        tracksTotal\n        tracksLength\n        tracksOpen\n        tracksOpenLength\n        hasArtificialSnow\n        hasPublicTransport\n        hasRental\n        skillLevel\n        condition\n        report\n      }\n      \n      sledge {\n        runsTotal\n        runsLength\n        runsOpenLength\n        condition\n      }\n      \n      snowshoe {\n        trailsTotal\n        trailsLength\n        trailsOpenLength\n        condition\n      }\n      \n      prices {\n        dayTicket {\n          adult\n          child\n          teenager\n          senior\n          currency\n        }\n        halfDayTicket {\n          adult\n          child\n          teenager\n          senior\n          currency\n        }\n        halfDayFrom\n        weekTicket {\n          adult\n          child\n          teenager\n          senior\n          currency\n        }\n        seasonTicket {\n          adult\n          child\n          teenager\n          senior\n          currency\n        }\n        familyReduction\n        hourCardsAvailable\n        dynamicPrices\n        description\n      }\n      \n      weather {\n        condition\n        temperatureResort\n        temperaturePiste\n        forecast\n      }\n      \n      weatherForecast {\n        type\n        date\n        temperature\n        iconCode\n        url\n      }\n      \n      images {\n        type\n        url\n        created\n        updated\n      }\n      \n      webcams {\n        url\n        sourceUrl\n        place\n        latitude\n        longitude\n      }\n      \n      links {\n        type\n        title\n        url\n      }\n      \n      detailLinks {\n        lang\n        url\n      }\n      \n      lastUpdate\n    }\n    \n    total\n    hasMore\n    \n    pagination {\n      total\n      limit\n      offset\n      hasMore\n      page\n      totalPages\n    }\n    \n    meta {\n      locale\n      lastSync\n      expiresAt\n      source\n      responseTimeMs\n    }\n  }\n}",
    "wispoStation": "# ============================================\n# SINGLE WISPO STATION - Einzelnes Skigebiet\n# ============================================\n# Parameter:\n#   id: Int!            - Station ID (required)\n#   locale: String      - Sprache (default: de-CH)\n# ============================================\n\nquery WispoStation {\n  wispoStation(id: 2, locale: \"de-CH\") {\n    id\n    name\n    latitude\n    longitude\n    \n    resort {\n      id\n      name\n      regionId\n    }\n    \n    address {\n      name\n      street\n      place\n      zip\n      phone\n      email\n      website\n    }\n    \n    info {\n      altitude\n      seasonStart\n      seasonEnd\n      totalFacilities\n      cableCars\n      chairlifts\n      skilifts\n      babyLifts\n      conveyorBelts\n      hasShuttlebus\n      report\n      lifts {\n        cableCar\n        chairlift\n        skilift\n        babyLift\n      }\n    }\n    \n    snow {\n      freshSnow\n      freshSnowPisteTop\n      depthResort\n      depthPiste\n      lastSnowfall\n      avalancheRiskUrl\n      report\n    }\n    \n    ski {\n      areaName\n      slopesTotal\n      slopesLength\n      slopesOpenLength\n      valleyRuns\n      openFacilities\n      openingTime\n      closingTime\n      condition\n      snowCondition\n      valleyRunsCondition\n      report\n    }\n    \n    snowboard {\n      funparkName\n      snowparksTotal\n      snowparksOpen\n      halfpipesOpen\n      snowtubesOpen\n      hasArtificialSnow\n      hasFloodlight\n      condition\n      snowparks {\n        name\n        type\n        status\n        lastUpdated\n      }\n    }\n    \n    crosscountry {\n      areaName\n      phone\n      classicLength\n      classicPrepared\n      skatingLength\n      skatingPrepared\n      dogTrailLength\n      dogTrailOpen\n      floodlightLength\n      floodlightTill\n      classicCondition\n      skatingCondition\n      report\n      routes {\n        title\n        status\n      }\n    }\n    \n    hiking {\n      areaName\n      walkingTrailLength\n      walkingTrailPrepared\n      snowshoeTrailsTotal\n      snowshoeTrailsLength\n      condition\n      openingTime\n      closingTime\n      report\n      routes {\n        title\n        status\n      }\n    }\n    \n    tobogganing {\n      areaName\n      tracksTotal\n      tracksLength\n      tracksOpen\n      tracksOpenLength\n      hasArtificialSnow\n      hasPublicTransport\n      hasRental\n      skillLevel\n      condition\n      report\n    }\n    \n    sledge {\n      runsTotal\n      runsLength\n      runsOpenLength\n      condition\n    }\n    \n    snowshoe {\n      trailsTotal\n      trailsLength\n      trailsOpenLength\n      condition\n    }\n    \n    prices {\n      dayTicket {\n        adult\n        child\n        teenager\n        senior\n        currency\n      }\n      halfDayTicket {\n        adult\n        child\n        teenager\n        senior\n        currency\n      }\n      halfDayFrom\n      weekTicket {\n        adult\n        child\n        teenager\n        senior\n        currency\n      }\n      seasonTicket {\n        adult\n        child\n        teenager\n        senior\n        currency\n      }\n      familyReduction\n      hourCardsAvailable\n      dynamicPrices\n      description\n    }\n    \n    weather {\n      condition\n      temperatureResort\n      temperaturePiste\n      forecast\n    }\n    \n    weatherForecast {\n      type\n      date\n      temperature\n      iconCode\n      url\n    }\n    \n    images {\n      type\n      url\n      created\n      updated\n    }\n    \n    webcams {\n      url\n      sourceUrl\n      place\n      latitude\n      longitude\n    }\n    \n    links {\n      type\n      title\n      url\n    }\n    \n    detailLinks {\n      lang\n      url\n    }\n    \n    lastUpdate\n  }\n}",
    "tours": "# ============================================\n# TOURS - Wanderungen, Velo, Schneeschuh etc.\n# ============================================\n# Filter-Optionen (alle optional):\n#   q: String           - Suche in Name/Abstract\n#   routeType: String   - hike, mountainbike, bicycle, snowshoe, winterhiking, crosscountryskiing, sledging\n#   season: String      - summer, winter\n#   difficulty: String  - easy, medium, difficult\n#   nearLat: Float      - Latitude für Geo-Suche\n#   nearLng: Float      - Longitude für Geo-Suche\n#   radiusKm: Float     - Radius in km (default: 50)\n#   limit: Int          - Max Ergebnisse (default: 50, max: 500)\n#   offset: Int         - Pagination Offset\n# ============================================\n\nquery Tours {\n  tours(routeType: \"hike\", limit: 20) {\n    data {\n      id\n      name\n      abstract\n      url\n      \n      routeType\n      routeCategory\n      difficulty\n      season\n      \n      latitude\n      longitude\n      startPoint\n      endPoint\n      \n      distance\n      duration\n      ascent\n      descent\n      minAltitude\n      maxAltitude\n      isRoundtrip\n      isBarrierFree\n      \n      switzerlandMobilityRoute\n      switzerlandMobilityUrl\n      geodataUrl\n      \n      providerName\n      providerEmail\n      providerPhone\n      providerUrl\n      \n      imageUrl\n      logoUrl\n      \n      landscapes\n      views\n      \n      origin\n      lastUpdated\n    }\n    \n    total\n    hasMore\n    pagination {\n      total\n      limit\n      offset\n      page\n      totalPages\n    }\n    meta {\n      locale\n      lastSync\n      source\n    }\n  }\n}",
    "tour": "# ============================================\n# SINGLE TOUR - Einzelne Tour\n# ============================================\n# Parameter:\n#   id: String!         - Tour UUID (required)\n# ============================================\n\nquery Tour {\n  tour(id: \"fe54be8f-e98f-42bb-a21d-16daba096a7e\") {\n    id\n    name\n    abstract\n    url\n    routeType\n    difficulty\n    season\n    distance\n    duration\n    ascent\n    descent\n    geodataUrl\n    imageUrl\n    providerName\n    landscapes\n  }\n}",
    "attractions": "# ============================================\n# ATTRACTIONS - Sehenswürdigkeiten\n# ============================================\n# Filter-Optionen (alle optional):\n#   q: String                     - Suche in Name/Abstract\n#   season: String                - summer, winter, spring, autumn\n#   sportType: String             - hike, toboggan, bathingandswimming, etc.\n#   experienceType: String        - adventure, nature, active, culture\n#   neededTime: String            - lessthan1hour, between12hours, 2to4hourshalfday\n#   childrenAge: String           - 0to5years, 6to9years, 10to13years, 14plus\n#   isOutdoor: Boolean            - Nur Outdoor Attraktionen\n#   isIndoor: Boolean             - Nur Indoor Attraktionen\n#   isWheelchairAccessible: Boolean\n#   isAccessibleForFree: Boolean\n#   nearLat: Float                - Latitude für Geo-Suche\n#   nearLng: Float                - Longitude für Geo-Suche\n#   radiusKm: Float               - Radius in km (default: 50)\n#   limit: Int                    - Max Ergebnisse (default: 50, max: 500)\n#   offset: Int                   - Pagination Offset\n# ============================================\n\nquery Attractions {\n  attractions(season: \"summer\", isOutdoor: true, limit: 20) {\n    data {\n      id\n      name\n      abstract\n      description\n      url\n      \n      latitude\n      longitude\n      locality\n      postalCode\n      \n      contactName\n      contactPhone\n      contactEmail\n      contactUrl\n      \n      touristType\n      seasons\n      sportTypes\n      neededTime\n      childrenAges\n      difficulty\n      natureTypes\n      experienceTypes\n      views\n      \n      isAccessibleForFree\n      isWheelchairAccessible\n      isIndoor\n      isOutdoor\n      suitableFor\n      \n      seasonStart\n      seasonEnd\n      \n      imageUrl\n      images\n      \n      destinationId\n      lastUpdated\n    }\n    \n    total\n    hasMore\n    pagination {\n      total\n      limit\n      offset\n      page\n      totalPages\n    }\n    meta {\n      locale\n      lastSync\n      source\n    }\n  }\n}",
    "attraction": "# ============================================\n# SINGLE ATTRACTION - Einzelne Sehenswürdigkeit\n# ============================================\n# Parameter:\n#   id: String!         - Attraction UUID (required)\n# ============================================\n\nquery Attraction {\n  attraction(id: \"fff92c7b-0525-46b4-8e04-fbf9a62abf5b\") {\n    id\n    name\n    abstract\n    description\n    url\n    latitude\n    longitude\n    locality\n    seasons\n    sportTypes\n    experienceTypes\n    isAccessibleForFree\n    isWheelchairAccessible\n    imageUrl\n    images\n  }\n}"
  },
  "endpoints": {
    "playground": "https://contentcdn.swissactivities.com/api/graphql",
    "schema": "https://contentcdn.swissactivities.com/api/schema",
    "queries": "https://contentcdn.swissactivities.com/api/schema?format=queries"
  }
}