Developers

API & docs

Pull the same report the site shows, as JSON, or connect it to your own agent over MCP. The report generation pipeline, the MCP server and the account API are live in this build. The account and key endpoints under /v1/* are deployed and enforcing auth; the usage endpoint and the data route catalogue below are not deployed and are still a shape.

Read the status labels. There is a deployed API behind api.fishingreportagent.com — the account and key endpoints under /v1/* are live and enforcing auth (an unauthenticated call returns 401). The usage endpoint and the data route catalogue below are not deployed: today they answer 404, so the shapes documented below are intent, not behavior. Report generation, the artifact store, the MCP server and the account surface are built and working; see AI & MCP for the live surface. Nothing below is a commitment to a schema.

Quickstart (intended)

Create an account

Free tier, 10 report calls a day per account. Email verification would be required before the first call.

Make a key

One key per tool you connect. Keys are per account, but the daily allowance is shared across them.

Call the report endpoint

Send a launch point and a destination (or a single spot) and get back a structured report.

Authentication

Bearer key

Live on /v1

Requests carry an API key in the Authorization header, and the account endpoints enforce it — an unkeyed call returns 401. Keys are issued by the account surface, and no key belongs in client-side code. The fra_live_ value below is a shape, not a working key.

// shape only — no such key exists Authorization: Bearer fra_live_<your-key>

Endpoints

GET /v1/report key required

The full fishing report: verdict, wave ladder, tides, solunar, water temp.

lat, lon
Destination or spot coordinates.
launch_lat, launch_lon
Optional. If given, the wave ladder is computed along the route.
legs
Number of legs to sample between launch and destination (default 4).
window
ISO 8601 trip window, e.g. 2026-09-12T05:30/2026-09-12T15:00.
units
imperial (default) or metric.
format
json (default) or text for a readable report.
GET /v1/report?launch_lat=30.14&launch_lon=-85.70&lat=29.71&lon=-85.86&legs=4&units=imperial // 200 OK — sample payload, not a real forecast { "verdict": { "call": "marginal", "score": 5.4, "headline": "Marginal — go small, or fish inside 20 nm", "drivers": ["short_period_sea", "sea_state_builds_offshore"] }, "wave_ladder": [ { "leg": "launch", "nm": 0, "height_ft": 1.2, "period_s": 4, "direction_deg": 158 }, { "leg": "10nm", "nm": 10, "height_ft": 2.1, "period_s": 5, "direction_deg": 160 }, { "leg": "20nm", "nm": 20, "height_ft": 2.9, "period_s": 6, "direction_deg": 172 }, { "leg": "30nm", "nm": 30, "height_ft": 3.4, "period_s": 7, "direction_deg": 178 }, { "leg": "destination", "nm": 38, "height_ft": 3.8, "period_s": 7, "direction_deg": 184 } ], "water_temp_f": 78.4, "sources": ["wave_model_a", "point_forecast_b"], "sample": true }
GET /v1/marine/point key required

One point, one time: wind, seas, swell, air and water temperature. The building block behind the ladder.

lat, lon
Point to sample.
at
ISO 8601 timestamp. Defaults to now.
// 200 OK — sample payload { "at": "2026-09-12T10:00:00-05:00", "wind": { "speed_kt": 12, "gust_kt": 17, "direction_deg": 158 }, "seas": { "height_ft": 3.8, "period_s": 7, "direction_deg": 184 }, "swell": { "height_ft": 1.1, "period_s": 11, "direction_deg": 138 }, "air_temp_f": 76, "water_temp_f": 78.4 }
GET /v1/tides key required

Highs and lows for a station near a point, with the current stage between them.

// 200 OK — sample payload { "station": "St. Andrew Bay entrance", "datum": "MLLW", "events": [ { "time": "2026-09-12T06:12-05:00", "type": "low", "height_ft": 0.4 }, { "time": "2026-09-12T13:47-05:00", "type": "high", "height_ft": 1.6 }, { "time": "2026-09-12T20:05-05:00", "type": "low", "height_ft": 0.9 } ], "stage": "rising" }
GET /v1/solunar key required

Sunrise, sunset, moon phase and the major/minor feeding windows. Computed, not forecast.

// 200 OK — sample payload { "sun": { "rise": "07:12", "set": "19:24", "legal_light": "06:44" }, "moon": { "phase": "waxing_gibbous", "illumination": 0.78 }, "windows": [ { "start": "05:40", "end": "07:40", "type": "major" } ] }
GET /v1/usage key required

Current allowance and consumption. This is what draws the usage meter in the app.

// 200 OK — sample payload { "period": "day", "used": 3, "limit": 10, "resets_at": "2026-09-13T00:00:00-05:00", "scope": "account" }

Usage meter component

How it renders

Sample data

One component, used on the dashboard and the pricing page. It reads the shape above and shows used / limit / reset. Interactive here so you can see both states.

3 of 10 calls today resets 00:00 CT
Within free tier scope: account

MCP server

For your own agent

Live over stdioHTTP live

The MCP server ships in this repository and runs over stdio today. It reads stored report artifacts — it never regenerates and never calls upstream. Full detail, including auth, quota and the disclosure rules, is on AI & MCP. Tools as built:

get_fishing_report
Full report for a slug, or a lat/lng plus date.
list_locations
Runs that exist in the artifact store, newest first.
get_conditions
Conditions block plus the wave ladder, from a stored report.
get_usage
Remaining allowance and the server's auth mode.
list_affiliate_partners
Ranked affiliate shortlist for operators.

Every result — success, refusal or error — carries the attribution and the safety disclaimer, so an agent cannot quietly present these numbers as a clearance to go.

Errors (intended)

Shape

{ "error": { "code": "quota_exceeded", "message": "Daily free-tier allowance reached (10/day per account).", "resets_at": "2026-09-13T00:00:00-05:00" } }
StatusCodeMeaning
401missing_keyNo bearer key on the request.
403key_revokedKey no longer valid.
422bad_coordinatesPoint is not in a supported marine area.
429quota_exceededDaily allowance used up.
503upstream_unavailableA required forecast source is down; the report is refused rather than served with holes.

Data sources

What feeds the report

Only sources that actually exist are named. Multiple sources are shown per value so you can see where they agree and where they don't, rather than hiding the spread behind one number.

Build status

Honest state of things

Demo build
PieceStateNotes
This websiteBuiltOne token layer, zero inline styles. Marketing panels still show labelled sample content.
Report generationWorkingReal reports from live upstreams, published to /reports/<slug>.html. /report is a labelled sample.
Verdict engineWorkingFixed vocabulary: go / go small / go inside / stay home.
Render-once artifact storeWorkingStandalone HTML + JSON. Re-views cost zero API calls and zero tokens.
MCP serverLive — stdio and HTTPReads the artifact store. Hosted at mcp.fishingreportagent.com/mcp, keyed per request.
Tides & astroWorkingNOAA CO-OPS and USNO, both public domain. Solunar computed locally.
Wave ladderPartialWorks where a wave-capable buoy is in range; Gulf routes often have none, and the gap is reported rather than filled.
Hosted account APIPartial/v1/auth/request, /v1/auth/verify, /v1/auth/logout, /v1/me and POST /v1/keys are deployed and enforce auth. The data endpoints and /v1/usage are not deployed — they answer 404.
Accounts & verificationWorkingAccounts, sessions, keys and server-side logout are live. Self-service sign-in is closed (internal_only) — links are operator-issued. The usage endpoint is not deployed.
Inland mode, reefs/ramps/MPAs, red tide, regulatoryNot startedDesigned, not built.

Safety disclaimer

Read this

Marine forecasts are uncertain, and the sea is indifferent to your plans. This product is informational only. It is not a marine forecast service, it is not a clearance to depart, and it is not a substitute for official marine warnings or your own judgment. Responsibility for deciding whether to leave the dock always rests with the skipper. The generated report carries this notice itself, so it travels with the report.

Request a key → See a sample report