Base URL https://api.theweatheragent.com. All responses are JSON. Every response that carries relayed data includes an attribution string and a disclaimer field.
Send your API key in the X-API-Key header (an Authorization: Bearer <key> header also works). Keys are issued once, at email verification, and stored only as a hash — we cannot recover a lost key, but you can issue another.
Quota is counted per account, not per key. Holding several keys does not grant additional allowance.
| Outcome | Counts as |
|---|---|
200 from a data endpoint | 1 call |
| Cache hit (same request inside the same model cycle) | 0 calls |
4xx / 429 | 0 calls |
Free tier is 10 calls/day per account, resetting at 00:00 UTC. Exceeding it returns 429 with a machine-readable quota object and a Retry-After header.
Connect your own AI agent over the Model Context Protocol at no cost. The MCP server is free to use and needs no separate plan or signup beyond an API key. Data calls it makes count toward your normal API allowance — the same per-account daily quota as REST. Metadata lookups do not.
| Tool | What it does | Counts toward quota |
|---|---|---|
get_point_forecast | Marine/weather point with a value per source | Yes — 1 call |
get_tide_extremes | Tide highs/lows for a day | Yes — 1 call when available |
generate_fishing_report | Report built from relayed data | Yes — base + 1 per ladder leg |
list_sources | Source catalog and licences | No — metadata |
get_usage | Quota readout | No — metadata |
get_disclaimer | The disclaimer, attribution and plan table | No — metadata |
Auth is required. Free does not mean anonymous — the server needs your API key so data calls are attributed to your account and quota can be enforced. There is no separate MCP price and no MCP-only upsell.
Ladder legs stay a paid feature via MCP exactly as over REST. The plan is read from your account, not from the MCP server's configuration, so it cannot be self-granted locally.
Liveness and configuration readout. Useful for status pages and uptime checks.
| Status | Meaning |
|---|---|
200 | Service up. Inspect cache_bound / db_bound for dependency health. |
Marine and weather values at a coordinate, returned as one value per source per timestamp plus a spread/agreement statistic. Sources are never averaged into a single number.
[-90, 90].[-180, 180].waveHeight,wavePeriod,windSpeed. Unknown ids are rejected with 400, never silently dropped.1–240. Default 48.metric (default) or imperial.Available params: waveHeight, wavePeriod, waveDirection, swellHeight, swellPeriod, swellDirection, windSpeed, windDirection, windGust, airTemperature, waterTemperature, pressure, currentSpeed, currentDirection, visibility, precipitation, cloudCover.
| Status | Meaning |
|---|---|
200 | Data returned. Check meta.sources_ok / sources_failed and meta.stale. |
400 | Bad lat, lng, hours, units, or an unknown params id. |
401 | Missing or invalid API key. |
422 | No enabled source can serve the requested parameters. |
429 | Daily quota exhausted. See the 429 contract below. |
502 | Every resolved source failed. No partial or invented value is returned. |
Reading the data: spread.agree counts the sources inside an agreement band of max(param band, 10% of the median). A forecast's newest_valid is in the future by design — use newest_observation for how current the observations are. Model resolution is ~0.25° (≈17 mi) for the gridded wave models, so a short ladder delta may sit inside a single cell; read it as a trend and trust the spread across sources over any single model's point value.
Planned (P1). High/low tide times and heights for a day, relative to MSL, units stated. Documented here so the surface is known; the MCP tide tool reports it as not-yet-available rather than inventing data.
The source catalog: id, dataset, resolution, cadence, area, licence, whether commercial use is permitted, and whether attribution is required. Use this to render correct attribution.
UK Met Office is deliberately excluded: its global wave product is CC-BY-SA (share-alike), which is incompatible with our terms through MVP.
Returns the current disclaimer and attribution strings. If you cache or re-serve our data, fetch these and attach them — they change when the source set changes.
Create an account and send an email verification link. The free tier is gated on a verified address. Request JSON: { "email": "[email protected]", "device_fp": "optional" }.
| Status | Meaning |
|---|---|
202 | Verification email sent (or re-sent). |
400 | Missing or invalid email address. |
409 | That address already has a verified account. |
429 | Too many new accounts created from this connection recently. |
503 | Accounts store unavailable. |
Note: outbound email delivery is deferred, so verification currently runs on a log transport and the response includes a dev_verify_url. That field disappears once a real mail provider is configured.
Consume a verification token and issue an API key. Tokens are single-use and expire after 24 hours (the optional query parameters token and web are accepted; web=1 renders a short HTML confirmation page instead of JSON).
| Status | Meaning |
|---|---|
200 | Verified; key issued. This is the only time the key is shown. |
400 | token missing, invalid_token, token_expired, or token_already_used. |
Quota readout: used, limit, resets_at, plan, plus the definition of what counts as a call.
List your keys, or issue an additional one. A key's secret is returned only at creation.
| Status | Meaning |
|---|---|
401 | Missing or invalid API key. |
Quota is per account: additional keys do not add allowance.
Revoke a key. Revocation is immediate and the key stops resolving on the next request.
| Status | Meaning |
|---|---|
200 | Revoked. |
401 | Missing or invalid API key. |
404 | No such active key on your account. |
Quota exhaustion is machine-readable. The body carries a quota object and the response carries a Retry-After header in seconds.
A fishing report is metered per leg: the base report is 1 call, tide adds 1, and each ladder leg you request adds 1. Ladder legs are optional and user-specified, so a report's total depends on what you ask for — there is no fixed report cost. Ladder legs require a paid plan.
| Shape | Notes |
|---|---|
{ "error": "...", "message": "...", "request_id": "..." } | Errors also carry attribution and disclaimer. |
404 | Body echoes the method actually received, e.g. No route for GET /v2/auth/signup. A wrong-method request reports the method Hono saw, which is the fastest way to diagnose a probe that sent the wrong verb. |