Marine & Sea Temperature API
Wave height, swell, wind waves and sea surface temperature for any point on the ocean, up to 7 days ahead. One GET request, JSON back.
{
"lat": 36.62,
"lon": -121.9,
"timezone": "UTC",
"days": 1,
"source": "TidesAtlas weather engine. Waves: NOAA GFS-Wave / WaveWatch III. Water temperature: MUR SST (NASA JPL / GHRSST, ~1km).",
"daily": [
{
"date": "2026-10-18",
"wave_height_max_m": 1.96,
"wave_period_max_s": 12.2,
"wave_direction_dominant": 288,
"swell_height_max_m": 1.96,
"swell_period_max_s": 12.2,
"sea_state": "slight"
},
{
"date": "2026-10-19",
"wave_height_max_m": 2.09,
"wave_period_max_s": 11.6,
"wave_direction_dominant": 289,
"swell_height_max_m": 2.09,
"swell_period_max_s": 11.6,
"sea_state": "slight"
}
],
"hourly": [
{
"datetime": "2026-10-18T06:00:00+00:00",
…
Request
| Parameter | Type | Description |
|---|---|---|
lat, lon | float | Coordinates of the point (decimal degrees). |
port | string | Instead of lat/lon: a station slug from /api/v1/ports, e.g. brest. |
days | int | 1 to 7. Default 3. |
X-API-Key | header | Your API key (or ?api_key= in the query string). |
Code examples
curl "https://tidesatlas.com/api/v1/marine?lat=36.62&lon=-121.90&days=1" \ -H "X-API-Key: YOUR_KEY"
const params = new URLSearchParams({ lat: 36.62, lon: -121.90, days: 1 });
const res = await fetch(`https://tidesatlas.com/api/v1/marine?${params}`, {
headers: { 'X-API-Key': 'YOUR_KEY' }
});
const data = await res.json();import requests
r = requests.get(
"https://tidesatlas.com/api/v1/marine",
params={"lat": 36.62, "lon": -121.90, "days": 1},
headers={"X-API-Key": "YOUR_KEY"},
timeout=30,
)
data = r.json()$ch = curl_init('https://tidesatlas.com/api/v1/marine?lat=36.62&lon=-121.90&days=1');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: YOUR_KEY'],
]);
$data = json_decode(curl_exec($ch), true);Response
Real response for Monterey Bay, California, 18 October 2026 (arrays shortened).
{
"lat": 36.62,
"lon": -121.9,
"timezone": "UTC",
"days": 1,
"source": "TidesAtlas weather engine. Waves: NOAA GFS-Wave / WaveWatch III. Water temperature: MUR SST (NASA JPL / GHRSST, ~1km).",
"daily": [
{
"date": "2026-10-18",
"wave_height_max_m": 1.96,
"wave_period_max_s": 12.2,
"wave_direction_dominant": 288,
"swell_height_max_m": 1.96,
"swell_period_max_s": 12.2,
"sea_state": "slight"
},
{
"date": "2026-10-19",
"wave_height_max_m": 2.09,
"wave_period_max_s": 11.6,
"wave_direction_dominant": 289,
"swell_height_max_m": 2.09,
"swell_period_max_s": 11.6,
"sea_state": "slight"
}
],
"hourly": [
{
"datetime": "2026-10-18T06:00:00+00:00",
"wave_height_m": 1.55,
"wave_direction_deg": 198,
"wave_period_s": 17.4,
"swell_height_m": 1.55,
"swell_direction_deg": 198,
"swell_period_s": 17.4,
"wind_wave_height_m": null,
"wind_wave_direction": null,
"wind_wave_period_s": null,
"sea_surface_temperature_c": 19
},
{
"datetime": "2026-10-18T09:00:00+00:00",
"wave_height_m": 1.62,
"wave_direction_deg": 200,
"wave_period_s": 16.8,
"swell_height_m": 1.62,
"swell_direction_deg": 200,
"swell_period_s": 16.8,
"wind_wave_height_m": null,
"wind_wave_direction": null,
"wind_wave_period_s": null,
"sea_surface_temperature_c": 19
}
]
}| Field | Meaning |
|---|---|
hourly[].wave_height_m | Significant wave height (combined sea), metres |
hourly[].wave_period_s / wave_direction_deg | Peak period (s) and direction waves come from (°) |
hourly[].swell_height_m / swell_period_s / swell_direction_deg | Primary swell component |
hourly[].wind_wave_height_m / wind_wave_period_s / wind_wave_direction | Locally generated wind sea |
hourly[].sea_surface_temperature_c | Sea surface temperature, °C |
daily[].wave_height_max_m, swell_height_max_m, … | Daily maxima and dominant direction |
daily[].sea_state | Douglas-style label: calm_glassy, smooth, slight, moderate, rough, very_rough, high, very_high |
Data sources
Waves come from NOAA GFS-Wave (WaveWatch III), served through our own weather engine. Sea surface temperature comes from MUR SST (NASA JPL / GHRSST), a satellite analysis on a ~1 km grid that stays reliable close to the coast, where cheaper model SST often runs several degrees warm.
Good to know
- Times are in UTC with
lat/lon. Steps are 3 hours even though the array is calledhourly. - Each requested point is cached for up to 3 hours and never reused across UTC days.
- Open-ocean wave model: it does not resolve surf breaks, harbours or sheltered bays. Not for navigation.
FAQ
Can I get the water temperature for a beach?
Yes. Pass the beach coordinates or a station slug; sea_surface_temperature_c is the satellite value for the nearest ocean pixel (~1 km).
Is swell separated from wind waves?
Yes: each step returns total waves, the primary swell and the wind sea, each with height, period and direction.
Which plans include it?
The Complete pack, which also includes tides, and the weather-only pack. New accounts get 50 free requests; see the docs for current prices.