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
| Action | What it does |
|---|---|
| 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. |
| Find nearby stations | List the stations within a given distance of another one, nearest first, with what each measures. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| Get measured currents | Read how fast the water is moving and which way, from one of NOAA's current meters. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| Get storm peak water levels | Read the named storms of a year, then the peak water level each station recorded during one of them. |
| 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. |
| Get water levels | Read the water level measured at a tide station: the latest reading, today's, or any period you name. |
| 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. |
| 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. |
| 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. |
| 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. |
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 ID
stationtextRequired - 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.
- Within
radiusnumber - 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 station
station_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 contains
name_containstext - Only stations whose name contains this text, for example 'harbor'. Leave blank for all of them.
- State
statetext - Only stations in this US state or territory, as its two-letter code.
- Units
unitstext - 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 page
limitnumber - How many stations to return, up to 5000. Defaults to 200.From 1 to 5000. Default:
200. - Skip
offsetnumber - 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 ID
stationtextRequired - 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.
- Include
includelist - 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. - Units
unitstext - 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
- Station
stationtextRequired - 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.
- Year
yearnumberRequired - The year to cover.From 1900 to 2100.
- Depth bin
bin_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 zone
time_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. - Clock
clocktext - Whether times are written on a 12- or 24-hour clock.One of:
24hr(24-hour clock),am/pm(12-hour clock). Default:24hr. - Units
unitstext - 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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Meteorological year
met_yearnumber - The May-to-April year to read. Leave blank for every outlook published for the station.From 1900 to 2100.
- Years to include
years_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 number
benchmark_numbernumberRequired - The benchmark's 'vm' number, from Get station metadata with resource 'benchmarks'.At least 1.
- Mark ID
mark_idtext - Optional National Geodetic Survey permanent identifier, such as HU0108, to read one mark of that benchmark.
- As published on
datedate - 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
- Bridge
stationtextRequired - The bridge whose clearance to read, chosen by name. Air gap is measured at a couple of dozen bridges over US shipping channels.
- Quick range
datetext - 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). - From
begin_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'.
- To
end_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 data
hours_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.
- Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - The current meter to read, chosen by name. Meters deployed now, retired meters and short survey deployments are all listed.
- Quick range
datetext - 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). - From
begin_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'.
- To
end_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 data
hours_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.
- Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - 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.
- Interval
intervaltext - 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 bin
bin_numbernumber - Which depth to predict for. Leave blank for the bin nearest the surface.From 0 to 200.
- Reported as
velocity_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 range
datetext - 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). - From
begin_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'.
- To
end_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 data
hours_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.
- Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- From
start_datedateRequired - First day to include.
- To
end_datedateRequired - Last day to include.
- Datum
datumtext - 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. - Units
unitstext - 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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Measured from
measured_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. - From
begin_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.
- To
end_datedate and timeRequired - End of the period to read.
- Datum
datumtext - 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. - Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- One row per
periodtext - Whether to read yearly or monthly extremes.One of:
annuals(One row per year),monthlies(One row per month). Default:annuals. - Extreme
level_typetext - Whether to read the highest or the lowest levels.One of:
high(Highest levels),low(Lowest levels). Default:high. - Also include
detailstext - 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). - Units
unitstext - 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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Counted by
periodtext - 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. - Year
yearnumber - 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.
- Month
monthnumber - Counting by month: which month, 1 to 12. Leave blank for every month of the year.From 1 to 12.
- Season
seasontext - 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 include
periods_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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Read
datasettext - 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. - Decade
decadenumber - 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 include
decades_aheadnumber - How many decades to return, counting on from the decade given.From 1 to 20.
- Flooding level
flood_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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Datum
datumtext - 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. - Units
unitstext - English gives feet; metric gives metres.One of:
english(English (feet)),metric(Metric (metres)). Default:english. - Use the long-term analysis
long_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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- One row per
reporttext - 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. - From
start_datedate - First day to include. Leave blank for the whole published run.
- To
end_datedate - Last day to include. Leave blank for the whole published run.
- Threshold
thresholdtext - 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). - Stations
stations_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). - Datum
datumtext - 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. - Units
unitstext - 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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Quick range
datetext - 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). - From
begin_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'.
- To
end_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 data
hours_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.
- Datum
datumtext - 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. - Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- From
begin_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.
- To
end_datedate and timeRequired - End of the period to read.
- Hours of data
hours_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.
- Datum
datumtext - 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. - Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Averaged over
periodtext - 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. - From
begin_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.
- To
end_datedate and timeRequired - End of the period to read.
- Datum
datumtext - 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. - Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - The current meter to read, chosen by name. Meters deployed now, retired meters and short survey deployments are all listed.
- Depth bin
bin_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 range
datetext - 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). - From
begin_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'.
- To
end_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 data
hours_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 only
hourlytrue/false - Return the reading on each hour instead of every six minutes.Default:
false. - Include signal quality
detailedtrue/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. - Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Fitted over
trend_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 series
include_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. - Units
unitstext - 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
- PORTS
ports_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
- Station
stationtext - The station to read, chosen by name. Leave blank for every station's records.
- Datum
datumtext - 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. - Units
unitstext - 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
- Region
regiontext - 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. - Year
yearnumber - The year to read. Leave blank for the current one.From 1900 to 2100.
- Month
monthnumber - 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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Read
datasettext - 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. - Scenario
scenariotext - 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 year
projection_yearnumber - Only the projection for this year, which the report publishes by decade. Leave blank for every year.From 2000 to 2200.
- Stations
affiliationtext - Whether the station id is a US or a global one.One of:
US(US stations),Global(Global stations). Default:US. - Units
unitstext - English gives feet; metric gives metres.One of:
english(English (feet)),metric(Metric (metres)). Default:english. - Page
pagenumber - 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
- Station
stationtext - The station to read, chosen by name. Leave blank for every station with a published trend.
- Stations
affiliationtext - 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 ID
stationtextRequired - 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.
- Resource
resourcetext - 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 bin
bin_numbernumber - Harmonic constituents at a current meter only: return just this bin's constituents. Leave blank for all of them.From 1 to 200.
- Units
unitstext - 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
- Year
yearnumber - List the storms of this year. Leave blank when reading one storm by its id.From 1900 to 2100.
- Storm
event_idnumber - The event id of one storm, from an earlier run of this action. Returns what each station recorded.At least 1.
- Datum
datumtext - 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. - Units
unitstext - 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
- Station
stationtextRequired - 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.
- Interval
intervaltext - 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 range
datetext - 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). - From
begin_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'.
- To
end_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 data
hours_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.
- Datum
datumtext - 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. - Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - The water level station to read, chosen by name. Only stations that measure water levels are listed.
- Series
data_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 range
datetext - 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). - From
begin_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'.
- To
end_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 data
hours_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.
- Datum
datumtext - 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. - Units
unitstext - 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 zone
time_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
- Station
stationtextRequired - 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.
- Measurement
measurementtext - 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 range
datetext - 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). - From
begin_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'.
- To
end_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 data
hours_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 only
hourlytrue/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. - Units
unitstext - 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 zone
time_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 ID
stationtext - Only the plots for this station, by its id. Leave blank for every PORTS plot.
- Plots to return
limitnumber - 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
- PORTS
ports_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"
}