# Use cases by activity

One model, many questions. This page says, activity by activity, what KaiCast answers and how directly it is modeled — so an agent never presents a proxy as a purpose-built forecast. The same levels are machine-readable in every decision response (`activity.model`) and in `GET /api/v1/coverage`.

| Activity | `activity` id | Decisions | Model | Useful facts |
|---|---|---|---|---|
| Snorkeling | `snorkel` | Ranked spots, best day | **Native** | visibility, swell, wind, tide |
| Scuba diving | `dive` | Ranked spots, best day | Proxy | visibility, swell, tide, water temp |
| Freediving | `freedive` | Ranked spots, best day | Proxy | visibility, wind, swell |
| Spearfishing | `spearfish` | Ranked spots, best day | Proxy | visibility, swell, tide |
| Surfing | `surf` | Declined (`activity_not_modeled`) | Not modeled | swell height/period/direction, wind |
| Kiteboarding, windsurfing, wing | — | Not offered | Not modeled | wind speed and direction, swell |

**Native** means the condition score was built and calibrated for that activity. **Proxy** means the shared, snorkel-calibrated score is a reasonable stand-in: picks carry a caveat and a confidence haircut. **Not modeled** means the decision tools decline and point you at the facts.

## Dive visibility API

The headline number is **underwater visibility in feet** per 3-hour period, up to 7 days ahead, with `visibility_source` telling you whether it came from satellite ocean color or a calibrated estimate. Visibility is also a hard ceiling on the condition rating, so a murky day can't be rated "great" because the wind is light.

```bash
curl "https://kaicast.com/api/v1/conditions?spot=electric-beach&from=2026-10-06&to=2026-10-07"
```

## Snorkel forecast API

Snorkeling is KaiCast's native model. Ask for the best spots in a region on a day, or the best day at a spot:

```bash
curl "https://kaicast.com/api/v1/recommendations?region=us-hi-maui&activity=snorkel&date=2026-10-06"
```

## Scuba diving conditions

`activity=dive` ranks with the shared condition score and breaks ties on visibility. Every pick carries a `proxy_activity_model` caveat; relay it. Conditions at depth (current, thermocline) are not scored.

## Freediving conditions

`activity=freedive` favors visibility, then calm wind. Depth, current and thermocline are not scored, and every pick says so. Never dive alone.

## Spearfishing conditions

`activity=spearfish` ranks on the shared score and visibility, and **excludes spots inside Hawaiʻi DAR marine managed areas closed to spearfishing** (Marine Life Conservation Districts such as Hanauma Bay, Molokini and Pūpūkea, Natural Area Reserves, and similar). Excluded spots are listed in `considered.excluded` with `reason: closed_to_spearfishing` and the closing areas named. Spots inside rules-only areas carry a `regulated_area` caveat. Closed seasons and bag limits are **not** modeled — every pick carries `verify_fishing_rules`. If the closure data can't be read, nothing is excluded and picks say `regulations_not_checked` instead.

## Surf forecast data

KaiCast does not model surf breaks, so `recommend_spot` and `best_day` return `activity_not_modeled` for `surf` rather than inventing a ranking. The facts are still there: swell height, period and direction, and wind speed and direction, per spot and period, from `get_conditions`.

## Kiteboarding and wind sports

There is no kite or windsurf decision model. Wind speed (knots) and direction (degrees, where it blows *from*) are published for every covered spot every 3 hours — enough for an agent to reason about a session, with the usual caveat that spot-level wind is a forecast, not a station reading.

## Trip planners, travel and concierge agents

Give the agent the destination and the dates; let it call `best_day` and `recommend_spot`. Answers come with confidence, caveats and a spot card to render in chat, and with an honest `not_covered` when the destination is outside coverage — so the agent can say so instead of hallucinating a forecast.

## Marine conditions MCP server for AI assistants

Connect `https://kaicast.com/mcp` to Claude, ChatGPT, Cursor, VS Code or your own agent — see [MCP server](https://kaicast.com/developers/mcp). Tools mirror the REST endpoints exactly.

## Anywhere in the world

Every tool takes a latitude/longitude. KaiCast answers with numbers where it has calibrated coverage and says `not_covered` (with the nearest covered spot) everywhere else. Need a region? Email [dawson@kaicast.com](mailto:dawson@kaicast.com) — requests shape the expansion order.
