# OnTheSnow API

> OnTheSnow provides ski resort snow reports, conditions, and mountain status as a workflow and API.

OnTheSnow returns the latest published snow report for a ski resort, including snow depth, snowfall, and surface conditions when reported. Get ski report requires a resort name and can use a region or country to distinguish resorts with similar names. Reports can include resort status, open runs and lifts, terrain open percentage, report date, and scheduled season dates when listed.

- Page: https://fous.com/tools/onthesnow
- Handle: `@onthesnow`
- Category: [Weather](https://fous.com/tools/category/weather)
- Source website: https://onthesnow.com
- Last verified: Sep 29, 2026

## Methods

### Get ski report

Operation `get_ski_report`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get the latest published snow report for a ski resort by name, optionally narrowed by region or country. Off-season measurements may be unavailable; surface conditions are returned only when stated in words on the report.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `region` | string | no | `"Switzerland"` | Region or country to distinguish resorts with similar names, for example Colorado or Switzerland. |
| `resort_name` | string | yes | `"Vail"` | Ski resort name, for example Vail or Zermatt. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "resort_name"
  ],
  "properties": {
    "region": {
      "type": "string",
      "default": "",
      "description": "Region or country to distinguish resorts with similar names, for example Colorado or Switzerland.",
      "examples": [
        "Switzerland",
        "Austria"
      ]
    },
    "resort_name": {
      "type": "string",
      "description": "Ski resort name, for example Vail or Zermatt.",
      "examples": [
        "Vail",
        "Zermatt",
        "Pitztaler Glacier"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "resort_name": "Vail"
    },
    {
      "region": "Switzerland",
      "resort_name": "Zermatt"
    },
    {
      "region": "Austria",
      "resort_name": "Pitztaler Glacier"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `region` | string | `"Colorado"` | Region of the ski resort. |
| `status` | string | `"closed"` | Whether the ski resort is open or closed. |
| `country` | string or null | `"United States"` | Country of the ski resort. |
| `runs_open` | number or null | `0` | Runs open. |
| `lifts_open` | number or null | `0` | Lifts open. |
| `runs_total` | number or null | `277` | Runs total. |
| `lifts_total` | number or null | `33` | Lifts total. |
| `report_date` | string | `"2026-04-09"` | Date of the most recent snow report. |
| `resort_name` | string | `"Vail"` | Name of the ski resort. |
| `base_depth_cm` | number or null |  | base depth in centimeters. |
| `onthesnow_link` | string | `"https://www.onthesnow.com/colorado/vail/skireport"` | Link to the resort snow report. |
| `new_snow_24h_cm` | number or null | `0` | new snow 24h in centimeters. |
| `new_snow_72h_cm` | number or null | `0` | new snow 72h in centimeters. |
| `summit_depth_cm` | number or null | `15` | summit depth in centimeters. |
| `base_depth_inches` | number or null |  | base depth in inches. |
| `last_snowfall_date` | string or null | `"2026-04-04"` | Most recent dated snowfall in the published recent snowfall records. |
| `surface_conditions` | string or null |  | Reported surface conditions in words. |
| `new_snow_24h_inches` | number or null | `0` | new snow 24h in inches. |
| `new_snow_72h_inches` | number or null | `0` | new snow 72h in inches. |
| `season_closing_date` | string or null | `"2027-04-11"` | Scheduled season closing date, when listed. |
| `season_opening_date` | string or null | `"2026-11-13"` | Scheduled season opening date, when listed. |
| `summit_depth_inches` | number or null | `5.91` | summit depth in inches. |
| `terrain_open_percent` | number or null | `0` | Percentage of terrain open. |

**Example input**

```json
{
  "resort_name": "Vail"
}
```

**Example output**

```json
{
  "region": "Colorado",
  "status": "closed",
  "country": "United States",
  "runs_open": 0,
  "lifts_open": 0,
  "runs_total": 277,
  "lifts_total": 33,
  "report_date": "2026-04-09",
  "resort_name": "Vail",
  "base_depth_cm": null,
  "onthesnow_link": "https://www.onthesnow.com/colorado/vail/skireport",
  "new_snow_24h_cm": 0,
  "new_snow_72h_cm": 0,
  "summit_depth_cm": null,
  "base_depth_inches": null,
  "last_snowfall_date": "2026-04-04",
  "surface_conditions": null,
  "new_snow_24h_inches": 0,
  "new_snow_72h_inches": 0,
  "season_closing_date": "2027-04-11",
  "season_opening_date": "2026-11-13",
  "summit_depth_inches": null,
  "terrain_open_percent": 0
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@onthesnow",
  "visibility": "public",
  "operation": "get_ski_report",
  "version": 1,
  "input": {
    "resort_name": "Vail"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@onthesnow\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_ski_report\",\n  \"version\": 1,\n  \"input\": {\n    \"resort_name\": \"Vail\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@onthesnow",
  "visibility": "public",
  "operation": "get_ski_report",
  "version": 1,
  "input": {
    "resort_name": "Vail"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/onthesnow`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_ski_report`: Get ski report. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-onthesnow https://api.fous.com/mcp/tools/onthesnow --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Compare snow depths across ski resorts
- Check which resorts are open
- Track recent snowfall by resort
- Review open runs and lifts before a trip
- Monitor resort terrain availability

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this OnTheSnow tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a OnTheSnow account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from onthesnow.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### How much snow has a resort received recently?

Get ski report returns new snow over 24 and 72 hours, snow depth, and the most recent dated snowfall when available.

### How many runs and lifts are open?

Get ski report returns open and total runs and lifts, along with resort status.

### What are the resort’s surface conditions?

Get ski report returns surface conditions when they are stated in words on the report.

## Related

- [Surfline API](https://fous.com/tools/surfline.md): Surf conditions and forecasts for surf spots.
- [National Weather Service API](https://fous.com/tools/national-weather-service.md): National Weather Service provides U.S. day-and-night forecasts for seven days, hourly forecasts for up to 156 hours where available, active alerts, and latest nearby station observations.
- [The Weather Channel API](https://fous.com/tools/the-weather-channel.md): The Weather Channel returns current conditions, today’s high/low, up to 15 daily forecasts (sometimes fewer), 1–48 local hourly forecasts, and active severe weather alerts.
- [MSN Weather API](https://fous.com/tools/msn-weather.md): MSN Weather provides current conditions and forecasts for places worldwide, including up to 10 days ahead and optional hourly forecasts for the next 24 hours.
- [AccuWeather API](https://fous.com/tools/accuweather.md): AccuWeather provides current conditions and RealFeel, plus up to 15 available daily forecasts; shorter public forecasts may return fewer days.
- [Weather Underground API](https://fous.com/tools/weather-underground.md): Historical and current weather conditions from stations worldwide.
- [AirNow API](https://fous.com/tools/airnow.md): Current and forecast air quality for reporting areas in the United States and covered cities in Canada and Mexico.
- [NOAA Space Weather API](https://fous.com/tools/noaa-space-weather.md): NOAA Space Weather provides near-term aurora chances, current geomagnetic activity, a three-day Kp outlook, and NOAA alerts from the past 1–7 days.
- [All Weather tools](https://fous.com/tools/category/weather)
