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, key and usage endpoints under /v1/* are deployed and enforcing auth; the wider endpoint catalogue below is still a shape.

Read the status labels. There is a deployed API behind api.fishingreportagent.com — the account, key and usage endpoints under /v1/* are live and enforcing auth (an unauthenticated call returns 401). The wider endpoint catalogue below still describes intended behavior and may change. 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

Not live

Requests carry an API key in the Authorization header. No key exists in this build, and no key belongs in client-side code — the example below is a placeholder shape only.

// 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 planned

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 /report.html and /reports/<slug>.html.
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 over stdioReads the artifact store. Hosted HTTP/SSE not built.
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 REST APINot deployedShapes documented above.
Accounts, verification, hosted quotaNot builtNext up. Auth and quota hooks already exist in the MCP layer.
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.

Get a key (not live yet) → See the live report