Worldwide Tides, Weather & Ocean API
Tides, weather, waves, swell, sea temperature, sun & moon for 18,230+ stations in 188 countries. 12 REST endpoints. One API key. Built on TICON-4, NOAA & FES2022 models.
// Fetch today's tides in San Francisco const res = await fetch( 'https://tidesatlas.com/api/v1/tides?port=san-francisco&days=3', { headers: { 'X-API-Key': 'YOUR_KEY' } } ); const { extremes } = await res.json(); // [{ datetime: "2026-03-27T05:12:00-07:00", height_m: 1.82, type: "high" }, ...]
Smart routing
Calibrated stations when nearby, global FES2022 model when not. Automatic, transparent.
Tides anywhere at sea
NEWExact-coordinate predictions, no station required. Built for offshore navigation and research.
Live observations
Real-time REFMAR/SHOM gauges merged with predictions for French ports.
Production-ready
Aggressive caching, webhooks, rate limiting, 99.9% uptime.
Built for every tide use case
From hobby weather apps to enterprise marine platforms.
Marine navigation
Port entry/exit planning, draft clearance calculations, and passage timing.
Fishing apps
Optimal fishing windows based on tide phase, height, and tidal flow.
Surf & water sports
Tide-aware surf reports, kayak trip planners, and beach activity guides.
Coastal real estate
Flood risk analysis, waterfront property insights, and insurance assessments.
Research & science
Oceanography datasets, marine biology fieldwork, and climate modeling.
Weather & travel
Integrate tides into weather dashboards, travel planners, and IoT devices.
12 endpoints, infinite possibilities
Clean JSON, CSV & GeoJSON responses. No XML, no SOAP, no headaches.
Returns high and low tide times with heights. Use a station slug for calibrated port predictions, or pass coordinates to let TidesAtlas pick the best source automatically.
| Parameter | Type | Description |
|---|---|---|
port | string | Station slug, e.g. aberdeen. Use /ports to search. |
lat / lon | float | Smart routing: if a calibrated station is within 50 km, returns its prediction (data_source: "ticon"). Otherwise uses the FES2022 global ocean model at your exact coordinates (data_source: "fes2022"). No silent snap to a far station. |
date | YYYY-MM-DD | Start date (default: today). |
days | int | 1-14 days (default: 1). |
format | string | Response format: json, csv, or geojson (default: json). |
coefficients object (daily morning/afternoon/max, 2026-01-01 → 2035-12-29) plus a coefficient field on each high tide (French scale, 20 = neap → 120 = extreme spring). Not applicable outside France. Try it
Response example
France: tidal coefficients (French scale)
For stations in France, the response includes the French tidal coefficient — a dimensionless number from 20 (neap tide) to 120 (extreme spring tide), commonly used in French maritime contexts. The field appears in two places:
- A
coefficientfield on each high tide inextremes(omitted on low tides). - A top-level
coefficientsobject with daily morning/afternoon/max values for the requested date range.
Coverage: 2026-01-01 → 2035-12-29. Source: computed in-house from Brest harmonic constituents. Geography: French stations only — the fields are omitted for stations outside France.
Scale legend: < 45 = neap tide (mortes-eaux), 45-70 = average, 70-95 = above average, 95-110 = spring tide (vives-eaux), > 110 = exceptional spring tide.
Example response (France-only fields shown):
Always uses the FES2022 global ocean tide model (34 harmonic constituents) at the exact coordinates you provide — never snaps to a station. Use this when you specifically need the model output (research, comparisons, offshore navigation). For most apps, /api/v1/tides?lat=&lon= is a better choice since it picks the best source automatically.
| Parameter | Type | Description |
|---|---|---|
lat | float | Latitude, decimal degrees, -90 to 90. Required. |
lon | float | Longitude, decimal degrees, -180 to 180. Required. |
date | YYYY-MM-DD | Start date UTC (default: today). |
days | int | 1-14 days (default: 1). |
datum | string | Vertical reference: LAT (default, like the /tides endpoint) or MSL. |
interval | int | Minutes between samples, 5-60 (default: 10). Sets the spacing of the optional heights series and the resolution of extremes detection. |
heights | bool | Set to 1 to also return an interval-sampled height series — ideal for plotting the tide curve (default: off). Each point is { datetime, height_m }. |
404 if the point is on land or outside the ocean mask.
Response example
Search and list available tide stations worldwide.
| Parameter | Type | Description |
|---|---|---|
search | string | Search by name, e.g. aberdeen. |
country | string | Filter by country slug, e.g. united-kingdom. |
limit | int | Max results, 1-500 (default: 50). |
format | string | Response format: json, csv, or geojson (default: json). |
Returns all 188 countries with their station count.
Returns hourly and daily weather forecast including temperature, wind, precipitation, UV index, and conditions.
cached and stale fields in the response. A 502 response means no data is available at all for that location.
| Parameter | Type | Description |
|---|---|---|
port | string | Station slug, e.g. brest-3-fra-refmar |
lat / lon | float | Coordinates (alternative to port). |
days | int | 1-7 days (default: 3). |
Response example
Possible condition values
The condition field always returns one of these values (map an icon to each, including unknown):
clearmostly_clearpartly_cloudyovercastfogfreezing_foglight_drizzledrizzleheavy_drizzlefreezing_drizzleheavy_freezing_drizzlelight_rainrainheavy_rainfreezing_rainheavy_freezing_rainlight_snowsnowheavy_snowsnow_grainslight_showersshowersheavy_showerssnow_showersheavy_snow_showersthunderstormthunderstorm_hailheavy_thunderstorm_hailunknown Returns wave height, swell, wind waves, and sea state from Copernicus/ECMWF ocean models.
cached and stale fields. A 502 means no data is available for that location.
| Parameter | Type | Description |
|---|---|---|
port | string | Station slug, e.g. brest-3-fra-refmar |
lat / lon | float | Coordinates (alternative to port). |
days | int | 1-7 days (default: 3). |
Response example
Each hourly entry also includes sea_surface_temperature_c — the sea-surface (water) temperature in °C, from satellite SST (MUR / GHRSST, ~1 km), accurate near coasts.
Possible sea_state values
The sea_state field is based on the Douglas sea scale (from wave height) and always returns one of these values:
calm_glassycalm_rippledsmoothslightmoderateroughvery_roughhighvery_highunknown Returns sunrise, sunset, dawn, dusk, moon phase, illumination, moonrise and moonset.
| Parameter | Type | Description |
|---|---|---|
port | string | Station slug, e.g. brest-3-fra-refmar |
lat / lon | float | Coordinates (alternative to port). |
date | YYYY-MM-DD | Start date (default: today). |
days | int | 1-7 days (default: 1). |
Response example
Returns weather, marine, and astronomy data in a single call. Use the include parameter to select specific datasets.
| Parameter | Type | Description |
|---|---|---|
port | string | Station slug, e.g. brest-3-fra-refmar |
lat / lon | float | Coordinates (alternative to port). |
days | int | 1-7 days (default: 3). |
include | string | Comma-separated: weather,marine,astronomy (default: all). |
Response example
Returns real-time rain radar tile URLs for animated precipitation maps. Data from RainViewer, updated every ~10 minutes.
| Parameter | Type | Description |
|---|---|---|
port | string | Station slug, e.g. brest-3-fra-refmar |
lat / lon | float | Coordinates (alternative to port). |
Response example
Real-time data with ~10 minute delay. Tile URLs are standard slippy map format compatible with Leaflet, Mapbox GL, etc.
Returns real-time observed sea level heights from French REFMAR/SHOM tide gauges. Available for ~100 French stations.
| Parameter | Type | Description |
|---|---|---|
port | string | Station slug (French REFMAR stations only), e.g. brest |
date | YYYY-MM-DD | Start date (default: today). |
days | int | 1-7 days (default: 1). |
Response example
Only available for French REFMAR stations (~100 tide gauges). Observations are sub-sampled to 10-minute intervals. Heights are aligned with our prediction datum. The /api/v1/tides endpoint also includes an observations field for REFMAR stations.
Returns historical tide predictions and weather data for past dates. Tides via TICON engine, weather via Open-Meteo Archive.
| Parameter | Type | Description |
|---|---|---|
port | string | Station slug (required). |
date | YYYY-MM-DD | Start date in the past (required). |
days | int | 1-365 for tides, 1-90 for weather (default: 7). |
include | string | Comma-separated: tides,weather (default: tides). |
format | string | Response format: json, csv, or geojson (default: json). |
Try it
Response example
Create, manage, and test webhooks for real-time alerts on spring tides and storm warnings.
| Parameter | Type | Description |
|---|---|---|
action | string | list, create, update, delete, test |
id | int | Webhook ID (for update/delete/test). |
Supported events
spring_tide— Spring tide alert (high tide > 4m)storm_warning— Storm warning (wind > 60km/h or waves > 4m)
All deliveries are signed with HMAC-SHA256. Verify the X-TidesAtlas-Signature header.
Webhooks are auto-disabled after 3 consecutive failures.
Data sources & attribution
TidesAtlas builds the routing, caching and integration layer on top of these open scientific datasets. Each source is listed with its license.
FES2022
Global finite-element ocean tide model. Used for the /api/v1/tides/point endpoint and for 13,360+ FES2022-derived stations.
Produced by LEGOS, NOVELTIS and CLS. Distributed by AVISO+ with support from CNES. Use requires citation per AVISO+ license. Product page →
TICON
Harmonic constants for 3,000+ tide gauges worldwide. Used for the /api/v1/tides endpoint.
Sourced from the GESLA/PANGAEA database. License: CC BY 4.0 — commercial use permitted. Dataset →
NOAA CO-OPS
Harmonic constants for 1,000+ US tide stations.
Public domain (US government work). NOAA CO-OPS →
REFMAR / SHOM
Live observations from ~100 French tide gauges. Used to enrich /tides responses for French ports.
License: Etalab 2.0. REFMAR →
Weather & marine
NOAA GFS (weather) and Copernicus Marine / ECMWF (waves, marine state) via Open-Meteo.
License: CC BY 4.0. Open-Meteo →
Rain radar
Live rain radar tiles via RainViewer.
Attribution required, commercial use permitted. RainViewer →
Citing TidesAtlas in your work? Link to tidesatlas.com and credit the upstream source (e.g. "FES2022 via TidesAtlas") when the tide model is the key dataset.
Quick start in your favorite language
Copy, paste, and start building in under 60 seconds.
Official SDKs
Get started faster with our official client libraries.
npm install tidesatlas
pip install tidesatlas
MCP Server for AI Agents
Connect TidesAtlas directly to Claude, Cursor, or any MCP-compatible AI assistant.
MCP endpoint
8 tools available: tides, ports, countries, weather, marine, astronomy, conditions, history.
Claude Desktop configuration
Simple, transparent pricing
Start free. Scale when you need to. No hidden fees.
All 12 endpoints
Authentication & rate limits
Authentication
Pass your API key via header (recommended) or query parameter:
Rate limit headers
Every response includes your usage info:
X-RateLimit-Limit | Your daily limit |
X-RateLimit-Remaining | Requests left today |
X-RateLimit-Reset | Reset time (Unix) |
Two limits apply — exceeding either returns HTTP 429 Too Many Requests:
| Plan quota | Free 50 total · Hobby 500/day · Starter 1,000/day · Pro 10,000/day · Business 50,000/day |
| Per-IP rate | 10 requests/second per IP (short bursts up to 30), max 20 concurrent connections |
On a 429, wait before retrying (see Retry-After / X-RateLimit-Reset). Exponential backoff is recommended.
Frequently asked questions
?lat=&lon= to /api/v1/tides and TidesAtlas picks the best source automatically: if a calibrated station is within 50 km, it returns the station prediction; otherwise it uses the FES2022 global ocean tide model at your exact coordinates. For an explicit model-only response (no station snap), use /api/v1/tides/point. Both work anywhere on the world's oceans, no station required.pip install tidesatlas (Python) or npm install tidesatlas (Node.js). We also publish an MCP server at tidesatlas.com/mcp for AI agents, and the API itself is plain REST — usable from any language with curl-style HTTP. Source code is available on GitHub under @TidesAtlas./api/v1/marine endpoint returns hourly sea-surface (water) temperature in °C (sea_surface_temperature_c), alongside wave height, swell, wind waves and sea state. Data comes from the Copernicus/ECMWF marine model via Open-Meteo./api/v1/tides/point with ?heights=1&interval=30 to get an interval-sampled height series ({ datetime, height_m } every 5–60 minutes) — everything you need to draw a smooth tide curve. Without the flag you get the high/low extremes only./api/v1/marine endpoint returns hourly and daily wave height, period and direction, swell, wind waves, sea state (Douglas scale) and sea-surface temperature — from Copernicus/ECMWF ocean models.Start building with tides, weather & ocean data today
Free API key in 30 seconds. No credit card needed.