NOAA Tides

Science API · Works in USA · NOAA CO-OPS data · Water level, currents, datums

TL;DR

NOAA's Tides & Currents API provides real-time water level measurements, tide predictions, current data, and station datums for thousands of coastal stations across the United States and its territories. Operated by NOAA's Center for Operational Oceanographic Products and Services (CO-OPS), this is the authoritative source for US tide data. You can query water levels (6-minute intervals), daily highs/lows, predicted tides months in advance, and historical data going back decades.

Quick start: https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?station=9414290&product=water_level&datum=MLLW&units=english&time_zone=gmt&format=json

No API key needed — just make a request!

How to Use This API

1. Real-Time Water Levels

Station 9414290 is in San Diego, CA:

https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?station=9414290&product=water_level&datum=MLLW&units=english&time_zone=gmt&format=json

2. Tide Predictions

https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?station=9414290&product=predictions&datum=MLLW&units=english&time_zone=gmt&format=json&interval=hilo

3. Station Info

https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?station=9414290&product=datums&format=json

4. JavaScript — Check Tide

fetch('https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?station=9414290&product=predictions&datum=MLLW&units=english&time_zone=gmt&format=json')
  .then(r => r.json())
  .then(d => {
    d.predictions.forEach(p => {
      console.log(p.t, '—', p.v, 'ft');
    });
  });

5. Python — Water Level Graph Data

import requests
from datetime import datetime, timedelta

today = datetime.now().strftime('%Y%m%d')
params = {
    'station': '9414290',
    'product': 'water_level',
    'datum': 'MLLW',
    'units': 'english',
    'time_zone': 'gmt',
    'format': 'json',
    'date': today
}
resp = requests.get('https://api.tidesandcurrents.noaa.gov/api/prod/datagetter', params=params)
data = resp.json()
for reading in data['data'][:10]:
    print(f"{reading['t']}: {reading['v']} ft")
Try it: https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?station=9414290&product=predictions&datum=MLLW&interval=hilo&units=english&format=json

API Details

API URL
https://api.tidesandcurrents.noaa.gov/api/prod/datagetter
Documentation
tidesandcurrents.noaa.gov/api/
Category
Science
Authentication
Not Required
Geographic Coverage
USA — all coastal states and territories

Frequently Asked Questions

What products does the API support?
water_level, predictions, datums, currents, wind, air_pressure, air_temperature, water_temperature, and conductivity.
How do I find a station ID?
Browse the station map at tidesandcurrents.noaa.gov or use the product=stations query with latitude/longitude range.
What datums are available?
MLLW (Mean Lower Low Water), MLW, MHW, MHHW, NAVD88, NGVD29, and STND (Station Datum). MLLW is standard for tide predictions.
What units are supported?
units=english (feet) or units=metric (meters). Wind uses knots in english, m/s in metric.
Can I get historical water level data?
Yes, specify a date range with date=20240101 and range=30 (for 30 days), or use begin_date and end_date parameters.
How often are water levels measured?
NOAA stations report water levels every 6 minutes. The API returns the most recent measurements and can provide data up to 31 days in the past.

What You Can Build