On this page

Currents API

Tidal current predictions from harmonic constituents, powered by the open source Slackwater engine. Open and free, no authentication required, and described by an OpenAPI specification. Browse current stations at slackwater.xyz or in the Slackwater app.

Getting Started

Authentication

The currents API is open and does not require authentication.

Rate Limits

The currents API shares the tides API's limits:

  • 100 requests per minute per IP address
  • 10,000 requests per day per IP address

If you need higher limits for a production application, please contact us.

A First Request

Slack water and the strongest flood and ebb at the current station nearest a point, for the next seven days:

curl "https://api.openwaters.io/currents/events?latitude=48.406&longitude=-122.643"

Error Handling

Errors are returned with appropriate HTTP status codes and a JSON body with a message, the same shape as the tides API.

Reading Predictions

Signed Speeds

Speeds are in knots along the station's flood axis. Positive is flood and negative is ebb. Responses carry the station's floodDirection and ebbDirection in degrees true when it publishes them.

Events

Each event has a kind: slack, maxFlood, or maxEbb. Maximum flood and ebb also carry a direction in degrees true when the station has one. Slack carries the small residual speed left at the turn. The timeline endpoints return a signed speed every 10 minutes instead.

Depth Bins

Some stations predict currents at several depths, called bins. A station ID on its own selects the primary bin, the one NOAA predicts by default. Append @N to select bin N, as in /currents/stations/noaa/EPT0003@11. Every station lists its bins in bins, primary first, and station searches return each station once, at its primary bin.

Canadian Stations

Canadian Hydrographic Service stations are listed so you can show them, but CHS terms do not allow its predictions to be redistributed. Their prediction endpoints return 451 with a link to the official CHS predictions, and station listings mark them predictions: false. The nearest-station endpoints return that 451 rather than answering for a station farther away. Stations with no prediction model return 404.

GEThttps://api.openwaters.io/currents

API information

GEThttps://api.openwaters.io/currents/openapi.json

Get OpenAPI specification

GEThttps://api.openwaters.io/currents/events

Get current events for a location

Returns slack water, maximum flood, and maximum ebb between start and end for the nearest current station, skipping stations with no model. When that station's source forbids redistributing its predictions the request is refused with 451 rather than answered from a station farther away. end must be within 366 days of start.

Parameters

NameLocationTypeRequiredDescription
latitudequerynumber✓Latitude
longitudequerynumber✓Longitude
startquerystring—Start date/time (ISO 8601 format, defaults to now)
endquerystring—End date/time (ISO 8601 format, defaults to 7 days from start)
GEThttps://api.openwaters.io/currents/timeline

Get current speed timeline for a location

Returns signed current speed every 10 minutes for the nearest current station, skipping stations with no model and refused with 451 when that station's source forbids redistributing its predictions. end must be within 366 days of start.

Parameters

NameLocationTypeRequiredDescription
latitudequerynumber✓Latitude
longitudequerynumber✓Longitude
startquerystring—Start date/time (ISO 8601 format, defaults to now)
endquerystring—End date/time (ISO 8601 format, defaults to 7 days from start)
GEThttps://api.openwaters.io/currents/stations

Find current stations

Search current stations by name/ID, find them near the given coordinates, or list all. Each station appears once, at its primary bin, with its other bins listed in bins. Stations whose predictions can't be served are included with predictions: false.

Parameters

NameLocationTypeRequiredDescription
queryquerystring—Full-text search query (name, ID, or location)
latitudequerynumber—Latitude for proximity search
longitudequerynumber—Longitude for proximity search
maxResultsqueryinteger—Maximum number of stations to return
maxDistancequerynumber—Maximum search radius for proximity search, in kilometers
bboxquerystring—Bounding box in GeoJSON order: minLon,minLat,maxLon,maxLat (longitude first). Longitudes must be within -180..180, latitudes within -90..90, and minLat <= maxLat. minLon > maxLon denotes an antimeridian crossing.
GEThttps://api.openwaters.io/currents/stations/{source}/{id}

Get current station by ID

Find a current station by its ID. An ID without a bin is the station's primary bin; append @N for bin N.

Parameters

NameLocationTypeRequiredDescription
sourcepathstring✓Station source (e.g., 'noaa', 'ticon')
idpathstring✓Current station ID within the source, optionally with a depth bin (e.g. 'EPT0003' for the primary bin, 'EPT0003@11' for bin 11)
GEThttps://api.openwaters.io/currents/stations/{id}

Get current station by ID

Find a current station by its ID. An ID without a bin is the station's primary bin; append @N for bin N.

Parameters

NameLocationTypeRequiredDescription
idpathstring✓Current station ID with no source prefix (e.g. 'chs-active-pass')
GEThttps://api.openwaters.io/currents/stations/{source}/{id}/events

Get current events for a specific station

Parameters

NameLocationTypeRequiredDescription
sourcepathstring✓Station source (e.g., 'noaa', 'ticon')
idpathstring✓Current station ID within the source, optionally with a depth bin (e.g. 'EPT0003' for the primary bin, 'EPT0003@11' for bin 11)
startquerystring—Start date/time (ISO 8601 format, defaults to now)
endquerystring—End date/time (ISO 8601 format, defaults to 7 days from start)
GEThttps://api.openwaters.io/currents/stations/{id}/events

Get current events for a specific station

Parameters

NameLocationTypeRequiredDescription
idpathstring✓Current station ID with no source prefix (e.g. 'chs-active-pass')
startquerystring—Start date/time (ISO 8601 format, defaults to now)
endquerystring—End date/time (ISO 8601 format, defaults to 7 days from start)
GEThttps://api.openwaters.io/currents/stations/{source}/{id}/timeline

Get current speed timeline for a specific station

Parameters

NameLocationTypeRequiredDescription
sourcepathstring✓Station source (e.g., 'noaa', 'ticon')
idpathstring✓Current station ID within the source, optionally with a depth bin (e.g. 'EPT0003' for the primary bin, 'EPT0003@11' for bin 11)
startquerystring—Start date/time (ISO 8601 format, defaults to now)
endquerystring—End date/time (ISO 8601 format, defaults to 7 days from start)
GEThttps://api.openwaters.io/currents/stations/{id}/timeline

Get current speed timeline for a specific station

Parameters

NameLocationTypeRequiredDescription
idpathstring✓Current station ID with no source prefix (e.g. 'chs-active-pass')
startquerystring—Start date/time (ISO 8601 format, defaults to now)
endquerystring—End date/time (ISO 8601 format, defaults to 7 days from start)