NOAA Tides & Currents

App · Weather & Space · 35 actions

Read NOAA's tide and current data for the US coast: water levels from any of its gauges, tide predictions for 3,500 stations, tidal current predictions, wind, air and water temperature, pressure and visibility, bridge clearances, and the live board from every PORTS. It also covers the long view - sea level trends and rise projections, record and extreme water levels, and high tide flooding days, likelihoods and projections. No account or API key required.

Actions

ActionWhat it does
Check service statusCheck whether CO-OPS is running in Continuity of Operations mode, when it serves from its backup site and some products are reduced.
Find nearby stationsList the stations within a given distance of another one, nearest first, with what each measures.
Find stationsFind CO-OPS stations by name or state and get the id every other action takes, along with their coordinates and which networks they belong to.
Get a stationRead one station's record - where it is, what it is affiliated with, which resources it publishes - and optionally fold those resources straight in, so its datums, sensors and flood thresholds arrive in the same step.
Get annual current predictionsRead a whole year of tidal current predictions for one station in a single step: every slack water and every maximum flood and ebb, in order.
Get annual flood outlookRead how many days of high tide flooding a station is expected to see this meteorological year, as a low-to-high range, with when the outlook was issued and how it was computed.
Get benchmark elevationsRead a survey benchmark's published elevation and the datums measured from it - the fixed marks a tide station's heights are ultimately tied to, used when a gauge is re-levelled or replaced.
Get bridge clearanceRead the air gap - the clearance between a bridge and the water beneath it - at the bridges NOAA measures, which is what a ship's master checks before passing under one.
Get current meter statusRead a current meter's own housekeeping record for a period: which way it is pointing, its pitch and roll, the water temperature and pressure at the instrument, and its battery voltage.
Get current predictionsRead predicted tidal currents: when the flood and ebb run hardest, when the water goes slack, and how fast it runs in between.
Get daily flood daysRead, day by day, whether a station flooded and how high the water got: the day's peak level, the hour it happened, and whether minor, moderate or major flooding was reached.
Get daily highest and lowest levelsRead the highest and lowest water level of each day at a station, with the time each happened and how complete that day's record was.
Get extreme water levelsRead the highest (or lowest) water level of every year, or every month, in a station's record, detrended so the years can be compared.
Get flood day countsCount how many days a station flooded, summarised by calendar year, by month, by season, or by meteorological year - the May to April year that keeps a winter's floods together.
Get flood day projectionsRead how many days of flooding a station is projected to see in a future decade, under each sea level rise scenario - or the narrower range now judged most likely.
Get flood level probabilitiesRead how likely a given water level is at a station: the levels expected to be exceeded once in 1, 5, 10, 50 and 100 years, with confidence intervals, from NOAA's regional frequency analysis.
Get flood likelihoodsRead how likely high tide flooding is at a station over the coming year: the chance for each day, or the peak day of each month, with how far the predicted tide sits below the flooding threshold.
Get forecast model water levelsRead water level guidance from NOAA's Operational Forecast System models - the nowcast and forecast for a station, at 6-minute steps.
Get high and low watersRead the high and low waters that actually happened at a station - when each tide turned and how high it got, with the higher high and lower low of each day marked.
Get mean water levelsRead a station's monthly means - mean sea level, mean high and low water, the month's highest and lowest, and the tidal ranges - going back as far as the station does.
Get measured currentsRead how fast the water is moving and which way, from one of NOAA's current meters.
Get observed sea level recordRead the observed sea level record a station's trend is fitted to - the trend itself, the seasonal cycle, and optionally the whole monthly mean series behind it.
Get PORTS live readingsRead every live reading from one PORTS in a single call: water level, wind, air and water temperature, pressure, visibility and currents from every sensor in the port, all timestamped together.
Get record water levelsRead the ten highest water levels ever recorded at a station, with the storm that caused each one and how it was measured.
Get regional flood outlookRead NOAA's written high tide flooding outlook for a stretch of coast: which dates to watch this month and why, in plain English.
Get sea level rise projectionsRead how much sea level is projected to rise at a station, by decade and by scenario, from the US Interagency Sea Level Rise Task Force report - Low through Extreme, each with its confidence interval.
Get sea level trendRead how fast sea level is changing at a station, measured from its own record: the trend per decade, the confidence interval on it, and the years it was fitted over.
Get station metadataRead one piece of a station's reference data: its tidal datums and the epoch they belong to, its harmonic constituents, its sensors and their status, its NOS and NWS flood thresholds, its survey benchmarks, its prediction offsets, or a current meter's depth bins and deployments.
Get storm peak water levelsRead the named storms of a year, then the peak water level each station recorded during one of them.
Get tide predictionsRead predicted tides for any of NOAA's 3,500 prediction stations: the high and low waters with their times and heights, or the whole curve at an interval you choose.
Get water levelsRead the water level measured at a tide station: the latest reading, today's, or any period you name.
Get weather and water conditionsRead what a tide station's other sensors report: air and water temperature, wind speed, direction and gusts, barometric pressure, humidity, visibility, conductivity, and salinity.
List PORTSList every PORTS - the Physical Oceanographic Real-Time Systems NOAA runs at major US seaports - with the two-letter code the other PORTS actions take.
List PORTS plotsList the plots CO-OPS publishes for PORTS stations - which chart is drawn for which station, and the image it is published as.
List PORTS stationsList the stations that make up one PORTS, with the id and position of each - the water level gauges, current meters and weather sensors a port is watched with.

Check service status

Check whether CO-OPS is running in Continuity of Operations mode, when it serves from its backup site and some products are reduced. A scheduled workflow can check this first and hold off rather than recording a gap as real data. No API key required.

Inputs

None.

Outputs

countnumber
How many rows came back.
entrieslist
A single row describing the service's current mode.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "continuity_of_operations": false,
      "status": "normal service"
    }
  ],
  "message": "",
  "station": null,
  "units": ""
}

Find nearby stations

List the stations within a given distance of another one, nearest first, with what each measures. Use it to find the gauge nearest a harbour, or a fallback when a station goes quiet. No API key required.

Inputs

Station IDstationtextRequired
A CO-OPS station id of any kind: a water level station (8454000), a current meter (cb0102), or a prediction station (ACT0926). Find stations returns them, and a current prediction resource may want the bin-suffixed form, ACT0091_1.
Withinradiusnumber
How far to search, in nautical miles. Defaults to 10.From 0.1 to 500.0. Default: 10.0.

Outputs

countnumber
How many rows came back.
entrieslist
One row per station, nearest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
radius_nautical_milesnumber
The radius that was searched.
stationobject
The station the data came from. Null for products that cover many stations at once.
station_idtext
The station that was searched around.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "distance_nautical_miles": 18.4,
      "id": "8452660",
      "latitude": 41.504333,
      "longitude": -71.32614,
      "name": "Newport, RI",
      "station_type": "Water Level,Meteorological"
    }
  ],
  "message": "",
  "radius_nautical_miles": 10.0,
  "station": null,
  "station_id": "8454000",
  "units": ""
}

Find stations

Find CO-OPS stations by name or state and get the id every other action takes, along with their coordinates and which networks they belong to. Pick the collection you need - active water level gauges, tide prediction stations, current meters, weather sensors, and more. No API key required.

Inputs

Kind of stationstation_typetext
Which collection to search. Leave blank for every station CO-OPS publishes.One of: waterlevels (Water level stations (active)), historicwl (Water level stations (active and historic)), met (Meteorological stations), waterlevelsandmet (Water level and meteorological stations), tidepredictions (Tide prediction stations), harcon (Stations with harmonic constituents), datums (Stations with published datums), supersededdatums (Stations with superseded datums), benchmarks (Stations with published benchmarks), supersededbenchmarks (Stations with superseded benchmarks), and 13 more.
Name containsname_containstext
Only stations whose name contains this text, for example 'harbor'. Leave blank for all of them.
Statestatetext
Only stations in this US state or territory, as its two-letter code.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Stations per pagelimitnumber
How many stations to return, up to 5000. Defaults to 200.From 1 to 5000. Default: 200.
Skipoffsetnumber
How many stations to skip before returning results. Feed the result's next_offset back in to walk a long list.From 0 to 5000. Default: 0.

Outputs

countnumber
How many rows came back.
entrieslist
One row per station, by name.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
next_offsetnumber
Feed this back as 'Skip' to read the next page. Null on the last page.
stationobject
The station the data came from. Null for products that cover many stations at once.
total_matchingnumber
How many stations matched before the page was cut.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "affiliations": "NWLON,PORTS",
      "available_resources": [
        "details",
        "sensors",
        "datums"
      ],
      "great_lakes": false,
      "id": "8454000",
      "latitude": 41.807167,
      "longitude": -71.400665,
      "name": "Providence",
      "ports_code": "nb",
      "shef_code": "FOXR1",
      "state": "RI",
      "station_type": "",
      "tidal": true,
      "tide_type": "Mixed",
      "time_zone_offset": -5
    }
  ],
  "message": "",
  "next_offset": null,
  "station": null,
  "total_matching": 1,
  "units": ""
}

Get a station

Read one station's record - where it is, what it is affiliated with, which resources it publishes - and optionally fold those resources straight in, so its datums, sensors and flood thresholds arrive in the same step. No API key required.

Inputs

Station IDstationtextRequired
A CO-OPS station id of any kind: a water level station (8454000), a current meter (cb0102), or a prediction station (ACT0926). Find stations returns them, and a current prediction resource may want the bin-suffixed form, ACT0091_1.
Includeincludelist
Resources to fold into the record instead of fetching them separately. A station only carries the ones its kind publishes; asking for another is simply ignored.One or more of: details, sensors, products (Product links), disclaimers, notices, datums, supersededdatums (Superseded datums), harcon (Harmonic constituents), tidepredoffsets (Tide prediction offsets), currentpredictionoffsets (Current prediction offsets), and 5 more.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.

Outputs

countnumber
How many rows came back.
entrieslist
One row per station, by name.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
next_offsetnumber
Feed this back as 'Skip' to read the next page. Null on the last page.
stationobject
The station the data came from. Null for products that cover many stations at once.
total_matchingnumber
How many stations matched before the page was cut.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "affiliations": "NWLON,PORTS",
      "available_resources": [
        "details",
        "sensors",
        "datums"
      ],
      "expanded": {
        "details": {
          "established": "1938-06-03 00:00:00",
          "id": "8454000",
          "noaachart": "13224",
          "removed": ""
        }
      },
      "great_lakes": false,
      "id": "8454000",
      "latitude": 41.807167,
      "longitude": -71.400665,
      "name": "Providence",
      "ports_code": "nb",
      "shef_code": "FOXR1",
      "state": "RI",
      "station_type": "",
      "tidal": true,
      "tide_type": "Mixed",
      "time_zone_offset": -5
    }
  ],
  "message": "",
  "next_offset": null,
  "station": null,
  "total_matching": 1,
  "units": ""
}

Get annual current predictions

Read a whole year of tidal current predictions for one station in a single step: every slack water and every maximum flood and ebb, in order. This is the annual current table, the same one NOAA publishes as a report. No API key required.

Inputs

StationstationtextRequired
The tidal current prediction station, chosen by name. Harmonic stations can be predicted on any interval; subordinate stations only produce maximum flood, slack and maximum ebb.
YearyearnumberRequired
The year to cover.From 1900 to 2100.
Depth binbin_numbernumber
Which depth to predict for. Defaults to bin 1, which is the only bin most prediction stations have.From 1 to 200. Default: 1.
Time zonetime_zonetext
The time zone the predictions are timed in.One of: LST_LDT (Local time, corrected for daylight saving), LST (Local standard time), GMT (Greenwich Mean Time). Default: LST_LDT.
Clockclocktext
Whether times are written on a 12- or 24-hour clock.One of: 24hr (24-hour clock), am/pm (12-hour clock). Default: 24hr.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.

Outputs

countnumber
How many rows came back.
entrieslist
One row per slack water or maximum current, in order.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
time_columntext
The report's own heading for its time column.
unitstext
The units the values are in, as the service reported them.
yeartext
The year covered.
Example output
{
  "count": 2,
  "entries": [
    {
      "speed": null,
      "time": "2026-01-01 01:59",
      "type": "slack"
    },
    {
      "speed": 0.8,
      "time": "2026-01-01 06:23",
      "type": "flood"
    }
  ],
  "message": "",
  "station": {
    "id": "ACT0926_1",
    "latitude": null,
    "longitude": null,
    "name": ""
  },
  "time_column": "Date_Time (LST_LDT)",
  "units": "english",
  "year": "2026"
}

Get annual flood outlook

Read how many days of high tide flooding a station is expected to see this meteorological year, as a low-to-high range, with when the outlook was issued and how it was computed. NOAA publishes it each May. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Meteorological yearmet_yearnumber
The May-to-April year to read. Leave blank for every outlook published for the station.From 1900 to 2100.
Years to includeyears_backnumber
How many years to return, counting back from the year given.From 1 to 200.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per meteorological year that has been forecast.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {},
  "entries": [
    {
      "highConf": 10,
      "lowConf": 5,
      "metYear": 2025,
      "projectDate": "2025-05-31",
      "projectMethod": "Quadratic",
      "stnId": "8454000",
      "stnName": "Providence, RI"
    }
  ],
  "message": "",
  "station": null,
  "units": ""
}

Get benchmark elevations

Read a survey benchmark's published elevation and the datums measured from it - the fixed marks a tide station's heights are ultimately tied to, used when a gauge is re-levelled or replaced. Take the benchmark number from a station's benchmarks. No API key required.

Inputs

Benchmark numberbenchmark_numbernumberRequired
The benchmark's 'vm' number, from Get station metadata with resource 'benchmarks'.At least 1.
Mark IDmark_idtext
Optional National Geodetic Survey permanent identifier, such as HU0108, to read one mark of that benchmark.
As published ondatedate
Read the sheet as it stood on this date. Leave blank for the current one.

Outputs

benchmark_numbernumber
The benchmark that was read.
countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per published mark.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "benchmark_number": 8,
  "count": 1,
  "details": {},
  "entries": [
    {
      "datums": {
        "mhhw_offset": 1.83,
        "mllw_offset": 0.0
      },
      "elevation": 5.11,
      "epoch": "1983-2001",
      "hiObs": 4.98,
      "loObs": -1.09,
      "stationId": "1611400",
      "vmNum": 8
    }
  ],
  "message": "",
  "station": null,
  "units": ""
}

Get bridge clearance

Read the air gap - the clearance between a bridge and the water beneath it - at the bridges NOAA measures, which is what a ship's master checks before passing under one. Measured from a fixed point on the bridge, so no datum applies. No API key required.

Inputs

BridgestationtextRequired
The bridge whose clearance to read, chosen by name. Air gap is measured at a couple of dozen bridges over US shipping channels.
Quick rangedatetext
A ready-made period, instead of naming dates. Leave the start and end dates blank when using it.One of: latest (Latest reading (the last 18 minutes)), today (Today, from midnight), recent (The last 72 hours).
Frombegin_datedate and time
Start of the period to read, in the time zone chosen below. Pair it with an end date, or with 'Hours of data'.
Toend_datedate and time
End of the period to read, in the time zone chosen below. Pair it with a start date, or with 'Hours of data'.
Hours of datahours_backnumber
How many hours to read. On its own it counts back from now; with a start date it counts forward from there, and with an end date it counts back from there.From 0.1 to 8760.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per reading, oldest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "flags": "0,0,0,0",
      "quality": "",
      "sigma": 0.118,
      "time": "2026-08-19 16:06",
      "value": 227.808
    }
  ],
  "message": "",
  "station": {
    "id": "8517986",
    "latitude": 40.6062,
    "longitude": -74.0448,
    "name": "Verrazano-Narrows Air Gap"
  },
  "units": "english"
}

Get current meter status

Read a current meter's own housekeeping record for a period: which way it is pointing, its pitch and roll, the water temperature and pressure at the instrument, and its battery voltage. This is how you tell a station that has stopped reporting from one whose mooring has shifted. No API key required.

Inputs

StationstationtextRequired
The current meter to read, chosen by name. Meters deployed now, retired meters and short survey deployments are all listed.
Quick rangedatetext
A ready-made period, instead of naming dates. Leave the start and end dates blank when using it.One of: latest (Latest reading (the last 18 minutes)), today (Today, from midnight), recent (The last 72 hours).
Frombegin_datedate and time
Start of the period to read, in the time zone chosen below. Pair it with an end date, or with 'Hours of data'.
Toend_datedate and time
End of the period to read, in the time zone chosen below. Pair it with a start date, or with 'Hours of data'.
Hours of datahours_backnumber
How many hours to read. On its own it counts back from now; with a start date it counts forward from there, and with an end date it counts back from there.From 0.1 to 8760.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per record, oldest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "battery_voltage": 11.5,
      "depth": null,
      "heading": 92.1,
      "pitch": -3.3,
      "pressure": 2.03,
      "roll": -3.2,
      "time": "2026-08-16 20:21:00",
      "water_temperature": 25.11
    }
  ],
  "message": "",
  "station": {
    "id": "cb0102",
    "latitude": 36.9594,
    "longitude": -76.0128,
    "name": "Cape Henry LB 2CH"
  },
  "units": "english"
}

Get current predictions

Read predicted tidal currents: when the flood and ebb run hardest, when the water goes slack, and how fast it runs in between. Slack water is what you plan a transit or a dive around. Covers 4,000-odd prediction stations, for any date. No API key required.

Inputs

StationstationtextRequired
The tidal current prediction station, chosen by name. Harmonic stations can be predicted on any interval; subordinate stations only produce maximum flood, slack and maximum ebb.
Intervalintervaltext
Maximums and slacks is the current table itself. The other intervals return the predicted curve. Subordinate stations only publish maximums and slacks.One of: max_slack (Maximum flood, slack water and maximum ebb), h (Hourly), 60 (Every 60 minutes), 30 (Every 30 minutes), 10 (Every 10 minutes), 6 (Every 6 minutes), 1 (Every minute). Default: max_slack.
Depth binbin_numbernumber
Which depth to predict for. Leave blank for the bin nearest the surface.From 0 to 200.
Reported asvelocity_typetext
Flood and ebb reports the speed along the channel with the directions it runs, which is how a current table reads. Speed and direction reports a compass bearing instead, and only applies to the interval predictions at harmonic stations.One of: default (Flood and ebb directions), speed_dir (Speed and compass direction). Default: default.
Quick rangedatetext
A ready-made period, instead of naming dates. Leave the start and end dates blank when using it.One of: latest (Latest reading (the last 18 minutes)), today (Today, from midnight), recent (The last 72 hours).
Frombegin_datedate and time
Start of the period to read, in the time zone chosen below. Pair it with an end date, or with 'Hours of data'.
Toend_datedate and time
End of the period to read, in the time zone chosen below. Pair it with a start date, or with 'Hours of data'.
Hours of datahours_backnumber
How many hours to read. On its own it counts back from now; with a start date it counts forward from there, and with an end date it counts back from there.From 0.1 to 8760.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per prediction, oldest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 2,
  "entries": [
    {
      "bin": 1,
      "depth": 10,
      "direction": null,
      "mean_ebb_direction": 66,
      "mean_flood_direction": 259,
      "speed": null,
      "time": "2026-08-19 03:12",
      "type": "flood",
      "velocity_major": 0.62
    },
    {
      "bin": 1,
      "depth": 10,
      "direction": null,
      "mean_ebb_direction": 66,
      "mean_flood_direction": 259,
      "speed": null,
      "time": "2026-08-19 05:18",
      "type": "slack",
      "velocity_major": 0
    }
  ],
  "message": "",
  "station": null,
  "units": "feet, knots"
}

Get daily flood days

Read, day by day, whether a station flooded and how high the water got: the day's peak level, the hour it happened, and whether minor, moderate or major flooding was reached. High tide flooding is the sunny-day flooding that closes a road at high water. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Fromstart_datedateRequired
First day to include.
Toend_datedateRequired
Last day to include.
Datumdatumtext
The level heights are measured from.One of: MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), MLLW (MLLW - Mean Lower Low Water (chart datum)), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum). Default: MHHW.
Unitsunitstext
English gives feet; metric gives metres.One of: english (English (feet)), metric (Metric (metres)). Default: english.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per day.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {},
  "entries": [
    {
      "day": "09/01/2024",
      "majFlag": 0,
      "maxTime": 12,
      "maxWL": 8.78,
      "minFlag": 0,
      "modFlag": 0,
      "nanFlag": 0,
      "percent_completeness": 100.0
    }
  ],
  "message": "",
  "station": {
    "id": "8454000",
    "latitude": 41.807167,
    "longitude": -71.400665,
    "name": "Providence, RI"
  },
  "units": "feet"
}

Get daily highest and lowest levels

Read the highest and lowest water level of each day at a station, with the time each happened and how complete that day's record was. Verified data - the quickest way to find the worst day of a storm, or to chart a season. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Measured frommeasured_fromtext
Which series the daily extremes are taken from. The 6-minute series catches a sharper peak; the hourly one is the published default.One of: hourly (Hourly readings (the default)), 6 (6-minute readings). Default: hourly.
Frombegin_datedate and timeRequired
Start of the period to read. This product is verified after the fact, so it is always asked for by date rather than as a live reading.
Toend_datedate and timeRequired
End of the period to read.
Datumdatumtext
The level heights are measured from. Mean Lower Low Water is the nautical chart datum for US coastal waters and is what tide tables are drawn against; the Great Lakes use IGLD or LWD instead.One of: MLLW (MLLW - Mean Lower Low Water (chart datum)), MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum), IGLD (IGLD - International Great Lakes Datum), LWD (LWD - Great Lakes Low Water Datum), CRD (CRD - Columbia River Datum). Default: MLLW.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. This product is only published in standard time or GMT.One of: lst (Station local standard time (no daylight saving)), gmt. Default: lst.

Outputs

countnumber
How many rows came back.
entrieslist
Two rows per day - the maximum and the minimum - in date order.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 2,
  "entries": [
    {
      "date": "2026-01-01",
      "flags": "0",
      "percent_complete": 100,
      "time": "05:00",
      "type": "maximum",
      "value": 6.087
    },
    {
      "date": "2026-01-01",
      "flags": "0",
      "percent_complete": 100,
      "time": "11:00",
      "type": "minimum",
      "value": 0.612
    }
  ],
  "message": "",
  "station": {
    "id": "8454000",
    "latitude": 41.8072,
    "longitude": -71.4007,
    "name": "Providence"
  },
  "units": "english"
}

Get extreme water levels

Read the highest (or lowest) water level of every year, or every month, in a station's record, detrended so the years can be compared. Optionally add the exceedance levels - the height expected to be passed once a year, once a decade, once a century. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
One row perperiodtext
Whether to read yearly or monthly extremes.One of: annuals (One row per year), monthlies (One row per month). Default: annuals.
Extremelevel_typetext
Whether to read the highest or the lowest levels.One of: high (Highest levels), low (Lowest levels). Default: high.
Also includedetailstext
Add the exceedance probability levels - how high the water is expected to get at each return period. Leave blank for the extremes alone.One of: exceedancelevels (Add the yearly exceedance probability levels), exceedancelevelsmonth (Add the monthly exceedance probability levels).
Unitsunitstext
English gives feet; metric gives metres.One of: english (English (feet)), metric (Metric (metres)). Default: english.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per year or month, oldest first, each with the extreme level reached. Asking for exceedance levels adds the levels expected to be passed once a year, once a decade and so on.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 2,
  "details": {
    "datum": "mhhw",
    "trend": 1.04,
    "trendUnits": "in/decade"
  },
  "entries": [
    {
      "value": 13.12,
      "year": 1938
    },
    {
      "value": 2.31,
      "year": 1939
    }
  ],
  "message": "",
  "station": {
    "id": "8454000",
    "latitude": null,
    "longitude": null,
    "name": ""
  },
  "units": "feet"
}

Get flood day counts

Count how many days a station flooded, summarised by calendar year, by month, by season, or by meteorological year - the May to April year that keeps a winter's floods together. The record summary instead returns the worst year on record and how many flood days were typical in 2000, for comparison. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Counted byperiodtext
How the flood days are grouped.One of: annual (Calendar year), monthly (Month), seasonal (Season), met_year (Meteorological year (May to April)), record (Record and typical flood days). Default: annual.
Yearyearnumber
The year to count. Leave blank for the whole published record - which is what the record summary wants, since it is only published for a couple of report years.From 1900 to 2100.
Monthmonthnumber
Counting by month: which month, 1 to 12. Leave blank for every month of the year.From 1 to 12.
Seasonseasontext
Counting by season: which season. Leave blank for all four.One of: 1 (Winter (Dec, Jan, Feb)), 2 (Spring (Mar, Apr, May)), 3 (Summer (Jun, Jul, Aug)), 4 (Autumn (Sep, Oct, Nov)).
Periods to includeperiods_backnumber
How many periods to return, counting back from the year given. Use it to pull a decade in one step.From 1 to 200.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per period.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
periodtext
Which summary was read.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {},
  "entries": [
    {
      "majCount": 0,
      "minCount": 19,
      "modCount": 2,
      "nanCount": 0,
      "percent_completeness": 100.0,
      "stnId": "8454000",
      "stnName": "Providence, RI",
      "year": 2024
    }
  ],
  "message": "",
  "period": "annual",
  "station": null,
  "units": ""
}

Get flood day projections

Read how many days of flooding a station is projected to see in a future decade, under each sea level rise scenario - or the narrower range now judged most likely. The number a planning or resilience case is built on. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Readdatasettext
Every scenario for the decade, or just the range now judged most likely.One of: decadal (Projected flood days per decade, by scenario), likely_scenarios (The scenarios judged most likely for the decade). Default: decadal.
Decadedecadenumber
The decade to project to, as a four-digit year such as 2050. Leave blank for every decade published.From 2020 to 2200.
Decades to includedecades_aheadnumber
How many decades to return, counting on from the decade given.From 1 to 20.
Flooding levelflood_thresholdtext
Only this level of flooding. Leave blank for all three.One of: minor (Minor flooding), moderate (Moderate flooding), major (Major flooding).

Outputs

countnumber
How many rows came back.
datasettext
'decadal' or 'likely_scenarios', whichever was asked for.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per flooding level per decade.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "dataset": "decadal",
  "details": {},
  "entries": [
    {
      "decade": 2050,
      "flood_level": "minor",
      "high": 100,
      "intHigh": 85,
      "intLow": 55,
      "intermediate": 70,
      "low": 45,
      "source": "https://sealevel.globalchange.gov/internal_resources/756/noaa-nos-techrpt01-global-regional-SLR-scenarios-US.pdf"
    }
  ],
  "message": "",
  "station": {
    "id": "8454000",
    "latitude": 41.807167,
    "longitude": -71.400665,
    "name": "Providence, RI"
  },
  "units": ""
}

Get flood level probabilities

Read how likely a given water level is at a station: the levels expected to be exceeded once in 1, 5, 10, 50 and 100 years, with confidence intervals, from NOAA's regional frequency analysis. This is the number a design or insurance question turns on. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Datumdatumtext
The level heights are measured from.One of: MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), MLLW (MLLW - Mean Lower Low Water (chart datum)), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum). Default: MHHW.
Unitsunitstext
English gives feet; metric gives metres.One of: english (English (feet)), metric (Metric (metres)). Default: english.
Use the long-term analysislong_termtrue/false
Use the analysis that accounts for long-term sea level change rather than the stationary one.Default: false.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per station, holding the levels expected to be exceeded at each return period - once in 1, 5, 10, 50 or 100 years - with their confidence intervals.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {},
  "entries": [
    {
      "lat": "41.8072",
      "lon": "-71.4007",
      "name": "PROVIDENCE, PROVIDENCE RIVER",
      "stationId": "8454000",
      "tidalEpoch": "1983-2001"
    }
  ],
  "message": "",
  "station": null,
  "units": "feet"
}

Get flood likelihoods

Read how likely high tide flooding is at a station over the coming year: the chance for each day, or the peak day of each month, with how far the predicted tide sits below the flooding threshold. This is the forecast behind NOAA's High Tide Bulletin. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
One row perreporttext
Every day in the period, or just the most likely day of each month.One of: daily (One row per day), monthly_max (The highest likelihood in each month). Default: daily.
Fromstart_datedate
First day to include. Leave blank for the whole published run.
Toend_datedate
Last day to include. Leave blank for the whole published run.
Thresholdthresholdtext
Which flooding threshold to forecast against. Leave blank for the ones the station publishes.One of: nos_minor (NOS minor flooding threshold), nws_minor (NWS minor flooding threshold), 0.5 (0.5 ft above the datum), 1.0 (1.0 ft above the datum), 1.5 (1.5 ft above the datum), 2.0 (2.0 ft above the datum), 2.5 (2.5 ft above the datum).
Stationsstations_publishedtext
Whether to answer only for stations CO-OPS publishes likelihoods for. Leave blank for its own default.One of: 1 (Only stations CO-OPS publishes likelihoods for), 0 (Only stations it does not publish), all (Every station).
Datumdatumtext
The level heights are measured from.One of: MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), MLLW (MLLW - Mean Lower Low Water (chart datum)), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum). Default: MHHW.
Unitsunitstext
English gives feet; metric gives metres.One of: english (English (feet)), metric (Metric (metres)). Default: english.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per day, or per month on the monthly reading.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
reporttext
'daily' or 'monthly_max', whichever was asked for.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {
    "region": "Northeast"
  },
  "entries": [
    {
      "date": "2026-08-19",
      "disttothreshold": -1.79,
      "flood": false,
      "likelihood": 0.0,
      "threshold": 1.83,
      "threshold_name": "NOS minor",
      "updated": "2026-07-13"
    }
  ],
  "message": "",
  "report": "daily",
  "station": {
    "id": "8454000",
    "latitude": 41.807167,
    "longitude": -71.400665,
    "name": "Providence, RI"
  },
  "units": "feet"
}

Get forecast model water levels

Read water level guidance from NOAA's Operational Forecast System models - the nowcast and forecast for a station, at 6-minute steps. Where the gauge tells you what the water is doing, this tells you what the model expects it to do next. Available at real-time stations inside a model's area, from 2020 onwards. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Quick rangedatetext
A ready-made period, instead of naming dates. Leave the start and end dates blank when using it.One of: latest (Latest reading (the last 18 minutes)), today (Today, from midnight), recent (The last 72 hours).
Frombegin_datedate and time
Start of the period to read, in the time zone chosen below. Pair it with an end date, or with 'Hours of data'.
Toend_datedate and time
End of the period to read, in the time zone chosen below. Pair it with a start date, or with 'Hours of data'.
Hours of datahours_backnumber
How many hours to read. On its own it counts back from now; with a start date it counts forward from there, and with an end date it counts back from there.From 0.1 to 8760.
Datumdatumtext
The level heights are measured from. Mean Lower Low Water is the nautical chart datum for US coastal waters and is what tide tables are drawn against; the Great Lakes use IGLD or LWD instead.One of: MLLW (MLLW - Mean Lower Low Water (chart datum)), MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum), IGLD (IGLD - International Great Lakes Datum), LWD (LWD - Great Lakes Low Water Datum), CRD (CRD - Columbia River Datum). Default: MLLW.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per reading, oldest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "flags": "",
      "quality": "",
      "sigma": null,
      "time": "2026-08-19 16:06",
      "value": 5.451
    }
  ],
  "message": "",
  "station": {
    "id": "9414290",
    "latitude": 37.8063,
    "longitude": -122.4659,
    "name": "San Francisco"
  },
  "units": "english"
}

Get high and low waters

Read the high and low waters that actually happened at a station - when each tide turned and how high it got, with the higher high and lower low of each day marked. This is verified data, published about a month in arrears; for the tides still to come, use Get tide predictions. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Frombegin_datedate and timeRequired
Start of the period to read. This product is verified after the fact, so it is always asked for by date rather than as a live reading.
Toend_datedate and timeRequired
End of the period to read.
Hours of datahours_backnumber
How many hours to read. On its own it counts back from now; with a start date it counts forward from there, and with an end date it counts back from there.From 0.1 to 8760.
Datumdatumtext
The level heights are measured from. Mean Lower Low Water is the nautical chart datum for US coastal waters and is what tide tables are drawn against; the Great Lakes use IGLD or LWD instead.One of: MLLW (MLLW - Mean Lower Low Water (chart datum)), MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum), IGLD (IGLD - International Great Lakes Datum), LWD (LWD - Great Lakes Low Water Datum), CRD (CRD - Columbia River Datum). Default: MLLW.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per tide, oldest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 2,
  "entries": [
    {
      "flags": "0,0",
      "time": "2026-06-01 02:48",
      "type": "low",
      "type_code": "L",
      "value": 1.055
    },
    {
      "flags": "0,0",
      "time": "2026-06-01 09:18",
      "type": "high",
      "type_code": "H",
      "value": 4.47
    }
  ],
  "message": "",
  "station": {
    "id": "8454000",
    "latitude": 41.8072,
    "longitude": -71.4007,
    "name": "Providence"
  },
  "units": "english"
}

Get mean water levels

Read a station's monthly means - mean sea level, mean high and low water, the month's highest and lowest, and the tidal ranges - going back as far as the station does. Great Lakes stations can also be read as daily means. This is the series long-term change is measured in. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Averaged overperiodtext
Monthly means are published for every station. Daily means are a Great Lakes product only, and are always reported in local standard time.One of: monthly_mean (Monthly means), daily_mean (Daily means (Great Lakes only)). Default: monthly_mean.
Frombegin_datedate and timeRequired
Start of the period to read. This product is verified after the fact, so it is always asked for by date rather than as a live reading.
Toend_datedate and timeRequired
End of the period to read.
Datumdatumtext
The level heights are measured from. Mean Lower Low Water is the nautical chart datum for US coastal waters and is what tide tables are drawn against; the Great Lakes use IGLD or LWD instead.One of: MLLW (MLLW - Mean Lower Low Water (chart datum)), MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum), IGLD (IGLD - International Great Lakes Datum), LWD (LWD - Great Lakes Low Water Datum), CRD (CRD - Columbia River Datum). Default: MLLW.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per month for monthly means - each carrying every datum the month was summarised against - or one row per day for daily means, which carry a single value.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "diurnal_high_water_inequality": 0.279,
      "diurnal_low_water_inequality": 0.207,
      "dtl": 2.456,
      "gt": 4.751,
      "high_water_interval": 0.34,
      "highest": 6.419,
      "inferred": false,
      "low_water_interval": 5.97,
      "lowest": -1.022,
      "mhhw": 4.831,
      "mhw": 4.552,
      "mllw": 0.08,
      "mlw": 0.287,
      "mn": 4.265,
      "month": 1,
      "msl": 2.282,
      "mtl": 2.419,
      "year": 2025
    }
  ],
  "message": "",
  "station": {
    "id": "8454000",
    "latitude": 41.8072,
    "longitude": -71.4007,
    "name": "Providence"
  },
  "units": "english"
}

Get measured currents

Read how fast the water is moving and which way, from one of NOAA's current meters. Each meter records at several depths, so pick a bin or take the one the station publishes by default. Covers meters deployed now as well as retired and survey deployments. No API key required.

Inputs

StationstationtextRequired
The current meter to read, chosen by name. Meters deployed now, retired meters and short survey deployments are all listed.
Depth binbin_numbernumber
Which depth to read. Leave blank for the station's published bin, or use 0 for every bin at once (limited to seven days). Get station metadata, resource 'bins', lists the depths.From 0 to 200.
Quick rangedatetext
A ready-made period, instead of naming dates. Leave the start and end dates blank when using it.One of: latest (Latest reading (the last 18 minutes)), today (Today, from midnight), recent (The last 72 hours).
Frombegin_datedate and time
Start of the period to read, in the time zone chosen below. Pair it with an end date, or with 'Hours of data'.
Toend_datedate and time
End of the period to read, in the time zone chosen below. Pair it with a start date, or with 'Hours of data'.
Hours of datahours_backnumber
How many hours to read. On its own it counts back from now; with a start date it counts forward from there, and with an end date it counts back from there.From 0.1 to 8760.
Hourly readings onlyhourlytrue/false
Return the reading on each hour instead of every six minutes.Default: false.
Include signal qualitydetailedtrue/false
Also return the meter's echo intensity and correlation magnitude, which say how much to trust a reading. Not published for the last five days, or at every station.Default: false.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per reading, oldest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "bin": 4,
      "correlation": null,
      "direction": 297,
      "echo_intensity": null,
      "speed": 0.935,
      "time": "2026-08-19 16:09"
    }
  ],
  "message": "",
  "station": {
    "id": "cb0102",
    "latitude": 36.9594,
    "longitude": -76.0128,
    "name": "Cape Henry LB 2CH"
  },
  "units": "english"
}

Get observed sea level record

Read the observed sea level record a station's trend is fitted to - the trend itself, the seasonal cycle, and optionally the whole monthly mean series behind it. Choose the current tidal datum epoch or the most recent 30 years. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Fitted overtrend_periodtext
Which period the trend is computed across.One of: NTDE (National Tidal Datum Epoch (1983-2001)), 30YEAR (Latest 30 years). Default: NTDE.
Include the monthly seriesinclude_monthly_meanstrue/false
Also return the monthly mean sea levels the trend was fitted to. That is decades of rows, so leave it off unless you are charting the record.Default: false.
Unitsunitstext
English gives feet; metric gives metres.One of: english (English (feet)), metric (Metric (metres)). Default: english.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per station, holding the fitted trend, the station's metadata, and - when monthly means were asked for - the series the trend was fitted to.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {},
  "entries": [
    {
      "metadata": {
        "state": "RI",
        "stationName": "Providence",
        "trendType": "NTDE",
        "trendUnits": "in/decade"
      },
      "seaLvlTrend": {
        "trend": 1.04,
        "trendError": 0.05
      },
      "stationId": "8454000"
    }
  ],
  "message": "",
  "station": null,
  "units": ""
}

Get PORTS live readings

Read every live reading from one PORTS in a single call: water level, wind, air and water temperature, pressure, visibility and currents from every sensor in the port, all timestamped together. This is the screen a harbour pilot checks before a transit. No API key required.

Inputs

PORTSports_codetextRequired
The PORTS - the real-time system CO-OPS runs at a major seaport - to read, chosen by name.

Outputs

countnumber
How many rows came back.
entrieslist
One row per station reporting into the PORTS.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
observed_attext
When the screen was generated, YYYYMMDD HH:MM.
portstext
The PORTS that was read.
stationobject
The station the data came from. Null for products that cover many stations at once.
time_zonetext
The time zone the readings are timestamped in.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "kind": "water level",
      "latitude": 42.35389,
      "longitude": -71.05028,
      "measurements": {
        "airTemperature": {
          "airTemp": 84.38,
          "time": "2026-08-19 20:18:00.0"
        },
        "waterLevel": {
          "datum": "0",
          "observed": 9.723,
          "time": "2026-08-19 20:18:00.0",
          "trend": "rising"
        }
      },
      "name": "Boston",
      "station_id": "8443970"
    }
  ],
  "message": "",
  "observed_at": "20260819 16:24",
  "ports": "Boston Harbor PORTS",
  "station": null,
  "time_zone": "EDT",
  "units": ""
}

Get record water levels

Read the ten highest water levels ever recorded at a station, with the storm that caused each one and how it was measured. The answer to 'has it ever been this high before?'. No API key required.

Inputs

Stationstationtext
The station to read, chosen by name. Leave blank for every station's records.
Datumdatumtext
The level heights are measured from.One of: MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), MLLW (MLLW - Mean Lower Low Water (chart datum)), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum). Default: MHHW.
Unitsunitstext
English gives feet; metric gives metres.One of: english (English (feet)), metric (Metric (metres)). Default: english.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per record water level, highest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {},
  "entries": [
    {
      "category": "Tropical",
      "datum": "MHHW",
      "event": "Great New England Hurricane",
      "height": 12.67,
      "peakDate": "1938-09-21",
      "peakTime": "00:00",
      "source": "High Water Mark",
      "stationId": "8454000",
      "stationName": "Providence, RI"
    }
  ],
  "message": "",
  "station": null,
  "units": "feet"
}

Get regional flood outlook

Read NOAA's written high tide flooding outlook for a stretch of coast: which dates to watch this month and why, in plain English. Ready to drop straight into a newsletter or an alert. No API key required.

Inputs

Regionregiontext
Which stretch of coast the outlook is for.One of: Northeast, Mid-Atlantic, Southeast and Caribbean Islands, Gulf Coast, West Coast, Pacific Islands, Alaska. Default: Northeast.
Yearyearnumber
The year to read. Leave blank for the current one.From 1900 to 2100.
Monthmonthnumber
The month to read, 1 to 12. Leave blank for the current one.From 1 to 12.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
The outlook, as written for the region.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {
    "month": "08",
    "region": "Northeast",
    "year": "2026"
  },
  "entries": [
    {
      "reason": "Most coastal locations along the Northeast coast are unlikely to experience flooding based primarily on tides this month. Expect higher tides on and around the dates of the new moon and full moon."
    }
  ],
  "message": "",
  "station": null,
  "units": ""
}

Get sea level rise projections

Read how much sea level is projected to rise at a station, by decade and by scenario, from the US Interagency Sea Level Rise Task Force report - Low through Extreme, each with its confidence interval. The offsets dataset returns the reference levels those projections are stated against. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Readdatasettext
The projections themselves, or the offsets behind them.One of: projections (Projected rise, by scenario and year), offsets (Offsets used to reference the projections). Default: projections.
Scenarioscenariotext
Only this rise scenario. Leave blank for all six, which is what you want to show a range.One of: low, intermediate-low, intermediate, intermediate-high, high, extreme.
Projection yearprojection_yearnumber
Only the projection for this year, which the report publishes by decade. Leave blank for every year.From 2000 to 2200.
Stationsaffiliationtext
Whether the station id is a US or a global one.One of: US (US stations), Global (Global stations). Default: US.
Unitsunitstext
English gives feet; metric gives metres.One of: english (English (feet)), metric (Metric (metres)). Default: english.
Pagepagenumber
Which page of results to read. Defaults to the first.From 1 to 1000. Default: 1.

Outputs

countnumber
How many rows came back.
datasettext
'projections' or 'offsets', whichever was asked for.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per scenario and projection year, or one per offset.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "dataset": "projections",
  "details": {
    "currPage": 1,
    "totalPages": 1
  },
  "entries": [
    {
      "projectionCiHigh": 15.7,
      "projectionCiLow": 7.9,
      "projectionRsl": 11.8,
      "projectionYear": 2050,
      "scenario": "Intermediate",
      "stationId": "8454000",
      "units": "in"
    }
  ],
  "message": "",
  "station": null,
  "units": ""
}

Get sea level trend

Read how fast sea level is changing at a station, measured from its own record: the trend per decade, the confidence interval on it, and the years it was fitted over. Leave the station blank for every station NOAA publishes a trend for, US or global. No API key required.

Inputs

Stationstationtext
The station to read, chosen by name. Leave blank for every station with a published trend.
Stationsaffiliationtext
Whether to read US stations or the global ones NOAA also tracks. Leave blank for both.One of: US (US stations), Global (Global stations).

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per station.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {},
  "entries": [
    {
      "endDate": "2025-12-15",
      "latitude": 41.807167,
      "longitude": -71.400667,
      "startDate": "1938-07-15",
      "stationId": "8454000",
      "stationName": "Providence",
      "trend": 1.04,
      "trendError": 0.05,
      "trendUnits": "inches/decade"
    }
  ],
  "message": "",
  "station": null,
  "units": ""
}

Get station metadata

Read one piece of a station's reference data: its tidal datums and the epoch they belong to, its harmonic constituents, its sensors and their status, its NOS and NWS flood thresholds, its survey benchmarks, its prediction offsets, or a current meter's depth bins and deployments. No API key required.

Inputs

Station IDstationtextRequired
A CO-OPS station id of any kind: a water level station (8454000), a current meter (cb0102), or a prediction station (ACT0926). Find stations returns them, and a current prediction resource may want the bin-suffixed form, ACT0091_1.
Resourceresourcetext
Which piece of the station's reference data to read. Get a station lists the ones it publishes.One of: details (Details (when it was installed, charts, time meridian)), sensors (Sensors installed, with status), datums (Tidal datums for the current epoch), supersededdatums (Tidal datums from the previous epoch), harcon (Harmonic constituents used for predictions), benchmarks (Survey benchmarks), floodlevels (NOS and NWS flood thresholds), notices (Station notices), disclaimers, products (Links to the products published for the station), and 4 more. Default: datums.
Depth binbin_numbernumber
Harmonic constituents at a current meter only: return just this bin's constituents. Leave blank for all of them.From 1 to 200.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.

Outputs

countnumber
How many rows came back.
entrieslist
The resource's rows: one per datum, sensor, constituent, benchmark or bin. Resources that are a single record - flood levels, details, prediction offsets - come back as one row. The fields are the service's own; a datum, for instance, is name, description and value.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
resourcetext
Which resource was read.
stationobject
The station the data came from. Null for products that cover many stations at once.
station_idtext
The station it was read for.
summaryobject
The context that comes with the rows - the datum epoch, the number of bins, the units - when the resource has any.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 2,
  "entries": [
    {
      "description": "Station Datum",
      "name": "STND",
      "value": 0.0
    },
    {
      "description": "Mean Higher High Water",
      "name": "MHHW",
      "value": 4.8
    }
  ],
  "message": "",
  "resource": "datums",
  "station": null,
  "station_id": "8454000",
  "summary": {
    "OrthometricDatum": "NAVD88",
    "accepted": "Apr 17 2003",
    "epoch": "1983-2001",
    "superseded": ""
  },
  "units": "feet"
}

Get storm peak water levels

Read the named storms of a year, then the peak water level each station recorded during one of them. Name a year to list its storms and their event ids, then feed an id back in to see what the water did along the coast. No API key required.

Inputs

Yearyearnumber
List the storms of this year. Leave blank when reading one storm by its id.From 1900 to 2100.
Stormevent_idnumber
The event id of one storm, from an earlier run of this action. Returns what each station recorded.At least 1.
Datumdatumtext
The level heights are measured from.One of: MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), MLLW (MLLW - Mean Lower Low Water (chart datum)), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum). Default: MHHW.
Unitsunitstext
English gives feet; metric gives metres.One of: english (English (feet)), metric (Metric (metres)). Default: english.

Outputs

countnumber
How many rows came back.
detailsobject
Whatever the product publishes alongside its rows - the datum it was computed against, the trend, the notice explaining how to read it.
entrieslist
One row per storm when a year was named, or one row per station when a storm was.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "details": {},
  "entries": [
    {
      "eventId": 578,
      "eventType": "Extra Tropical",
      "height": null,
      "name": "Nor easter",
      "peakDate": null,
      "startDate": "2012-01-12 00:00:00",
      "stationId": null
    }
  ],
  "message": "",
  "station": null,
  "units": "feet"
}

Get tide predictions

Read predicted tides for any of NOAA's 3,500 prediction stations: the high and low waters with their times and heights, or the whole curve at an interval you choose. Works for dates years ahead, so it answers 'when is high tide on Saturday?' as easily as it fills a year's tide table. No API key required.

Inputs

StationstationtextRequired
The tide prediction station, chosen by name. Every station tides are predicted for is listed, including the thousands of subordinate ones that have no gauge of their own.
Intervalintervaltext
High and low waters is the tide table most people want. The other intervals return the predicted curve, one row per interval. Subordinate stations - most of the 3,500 - only publish high and low waters.One of: hilo (High and low waters only), h (Hourly), 60 (Every 60 minutes), 30 (Every 30 minutes), 15 (Every 15 minutes), 10 (Every 10 minutes), 6 (Every 6 minutes), 5 (Every 5 minutes), 1 (Every minute). Default: hilo.
Quick rangedatetext
A ready-made period, instead of naming dates. Leave the start and end dates blank when using it.One of: latest (Latest reading (the last 18 minutes)), today (Today, from midnight), recent (The last 72 hours).
Frombegin_datedate and time
Start of the period to read, in the time zone chosen below. Pair it with an end date, or with 'Hours of data'.
Toend_datedate and time
End of the period to read, in the time zone chosen below. Pair it with a start date, or with 'Hours of data'.
Hours of datahours_backnumber
How many hours to read. On its own it counts back from now; with a start date it counts forward from there, and with an end date it counts back from there.From 0.1 to 8760.
Datumdatumtext
The level heights are measured from. Mean Lower Low Water is the nautical chart datum for US coastal waters and is what tide tables are drawn against; the Great Lakes use IGLD or LWD instead.One of: MLLW (MLLW - Mean Lower Low Water (chart datum)), MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum), IGLD (IGLD - International Great Lakes Datum), LWD (LWD - Great Lakes Low Water Datum), CRD (CRD - Columbia River Datum). Default: MLLW.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per prediction, oldest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 2,
  "entries": [
    {
      "time": "2026-08-19 01:27",
      "type": "high",
      "type_code": "H",
      "value": 3.897
    },
    {
      "time": "2026-08-19 06:14",
      "type": "low",
      "type_code": "L",
      "value": 0.74
    }
  ],
  "message": "",
  "station": {
    "id": "8454000",
    "latitude": 41.8072,
    "longitude": -71.4007,
    "name": "Providence"
  },
  "units": "english"
}

Get water levels

Read the water level measured at a tide station: the latest reading, today's, or any period you name. Choose the 6-minute series for the live gauge, the hourly series for verified history, or the 1-minute series for storm detail. Heights come back against the datum you pick, so they read the same way a tide table does. No API key required.

Inputs

StationstationtextRequired
The water level station to read, chosen by name. Only stations that measure water levels are listed.
Seriesdata_typetext
Which water level series to read. The 6-minute series is the live gauge and is what most workflows want; the hourly series is verified about a month after the fact and is the one to use for history.One of: water_level (6-minute (preliminary or verified)), one_minute_water_level (1-minute (preliminary)), hourly_height (Hourly (verified)), partner_water_level (6-minute from a partner agency). Default: water_level.
Quick rangedatetext
A ready-made period, instead of naming dates. Leave the start and end dates blank when using it.One of: latest (Latest reading (the last 18 minutes)), today (Today, from midnight), recent (The last 72 hours).
Frombegin_datedate and time
Start of the period to read, in the time zone chosen below. Pair it with an end date, or with 'Hours of data'.
Toend_datedate and time
End of the period to read, in the time zone chosen below. Pair it with a start date, or with 'Hours of data'.
Hours of datahours_backnumber
How many hours to read. On its own it counts back from now; with a start date it counts forward from there, and with an end date it counts back from there.From 0.1 to 8760.
Datumdatumtext
The level heights are measured from. Mean Lower Low Water is the nautical chart datum for US coastal waters and is what tide tables are drawn against; the Great Lakes use IGLD or LWD instead.One of: MLLW (MLLW - Mean Lower Low Water (chart datum)), MHHW (MHHW - Mean Higher High Water), MHW (MHW - Mean High Water), MTL (MTL - Mean Tide Level), MSL (MSL - Mean Sea Level), MLW (MLW - Mean Low Water), NAVD (NAVD - North American Vertical Datum), STND (STND - Station Datum), IGLD (IGLD - International Great Lakes Datum), LWD (LWD - Great Lakes Low Water Datum), CRD (CRD - Columbia River Datum). Default: MLLW.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per reading, oldest first.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "flags": "0,0,0,0",
      "quality": "preliminary",
      "sigma": 0.036,
      "time": "2026-08-19 16:06",
      "value": 3.945
    }
  ],
  "message": "",
  "station": {
    "id": "8454000",
    "latitude": 41.8072,
    "longitude": -71.4007,
    "name": "Providence"
  },
  "units": "english"
}

Get weather and water conditions

Read what a tide station's other sensors report: air and water temperature, wind speed, direction and gusts, barometric pressure, humidity, visibility, conductivity, and salinity. One action, one measurement at a time. Which sensors a station carries varies, and a measurement it does not record comes back empty rather than failing. No API key required.

Inputs

StationstationtextRequired
The station to read, chosen by name. Only stations carrying a weather or water-quality sensor are listed; which sensors a station has varies, so a measurement it does not record comes back empty rather than failing.
Measurementmeasurementtext
Which sensor to read.One of: air_temperature (Air temperature), water_temperature (Water temperature), wind (Wind (speed, direction and gusts)), air_pressure (Barometric pressure), humidity (Relative humidity), conductivity, salinity (Salinity and specific gravity), visibility. Default: air_temperature.
Quick rangedatetext
A ready-made period, instead of naming dates. Leave the start and end dates blank when using it.One of: latest (Latest reading (the last 18 minutes)), today (Today, from midnight), recent (The last 72 hours).
Frombegin_datedate and time
Start of the period to read, in the time zone chosen below. Pair it with an end date, or with 'Hours of data'.
Toend_datedate and time
End of the period to read, in the time zone chosen below. Pair it with a start date, or with 'Hours of data'.
Hours of datahours_backnumber
How many hours to read. On its own it counts back from now; with a start date it counts forward from there, and with an end date it counts back from there.From 0.1 to 8760.
Hourly readings onlyhourlytrue/false
Return the reading on each hour instead of every six minutes. Useful for a long period, which is otherwise ten rows an hour.Default: false.
Unitsunitstext
English gives feet, Fahrenheit and knots; metric gives metres, Celsius and centimetres per second.One of: english (English (feet, °F, knots)), metric (Metric (metres, °C, cm/s)). Default: english.
Time zonetime_zonetext
The time zone the dates you give and the times you get back are in. Local time is the station's own, not yours.One of: lst_ldt (Station local time (daylight saving applied)), gmt, lst (Station local standard time (no daylight saving)). Default: lst_ldt.

Outputs

countnumber
How many rows came back.
entrieslist
One row per reading, oldest first. Which fields are filled in depends on the measurement: most report 'value', wind reports speed, direction and gust, and salinity reports salinity and specific gravity.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "direction": 230.0,
      "direction_cardinal": "SW",
      "flags": "0,0",
      "gust": 15.94,
      "speed": 12.83,
      "time": "2026-08-19 16:06"
    }
  ],
  "message": "",
  "station": {
    "id": "8454000",
    "latitude": 41.8072,
    "longitude": -71.4007,
    "name": "Providence"
  },
  "units": "english"
}

List PORTS

List every PORTS - the Physical Oceanographic Real-Time Systems NOAA runs at major US seaports - with the two-letter code the other PORTS actions take. No API key required.

Inputs

None.

Outputs

countnumber
How many rows came back.
entrieslist
One row per PORTS, by name.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "code": "bh",
      "id": 79,
      "latitude": 42.34193,
      "longitude": -71.0142,
      "name": "Boston Harbor PORTS",
      "weather_forecast_url": "https://forecast.weather.gov/MapClick.php?lon=-71.02&lat=42.349"
    }
  ],
  "message": "",
  "station": null,
  "units": "English"
}

List PORTS plots

List the plots CO-OPS publishes for PORTS stations - which chart is drawn for which station, and the image it is published as. No API key required.

Inputs

Station IDstationtext
Only the plots for this station, by its id. Leave blank for every PORTS plot.
Plots to returnlimitnumber
How many plots to return. Defaults to 200.From 1 to 5000. Default: 200.

Outputs

countnumber
How many rows came back.
entrieslist
One row per plot.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
total_matchingnumber
How many plots matched before the list was cut.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "image_name": "8443970_wl_72.png",
      "plot_tab": "3WM",
      "plot_type": "wl",
      "source_station_id": "8443970",
      "station_id": "8443970"
    }
  ],
  "message": "",
  "station": null,
  "total_matching": 8,
  "units": "English"
}

List PORTS stations

List the stations that make up one PORTS, with the id and position of each - the water level gauges, current meters and weather sensors a port is watched with. No API key required.

Inputs

PORTSports_codetextRequired
The PORTS - the real-time system CO-OPS runs at a major seaport - to read, chosen by name.

Outputs

countnumber
How many rows came back.
entrieslist
One row per station in the PORTS.
messagetext
Empty on a normal read. When a station does not offer the product asked for, or has nothing recorded for the period, this carries the service's explanation and 'entries' is empty - the step succeeds so a workflow covering several stations is not stopped by the one without that sensor.
stationobject
The station the data came from. Null for products that cover many stations at once.
unitstext
The units the values are in, as the service reported them.
Example output
{
  "count": 1,
  "entries": [
    {
      "label": "Boston",
      "latitude": 42.35389,
      "longitude": -71.05028,
      "ports_code": "bh",
      "ports_name": "Boston Harbor PORTS",
      "station_id": "8443970"
    }
  ],
  "message": "",
  "station": null,
  "units": "English"
}

On this page