On this page
- Getting Started
- Reading Predictions
- Endpoints
- API information
- Get OpenAPI specification
- Get current events for a location
- Get current speed timeline for a location
- Find current stations
- Get current station by ID
- Get current station by ID
- Get current events for a specific station
- Get current events for a specific station
- Get current speed timeline for a specific station
- Get current speed timeline for a specific station
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.
API information
Get OpenAPI specification
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
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| latitude | query | number | ✓ | Latitude |
| longitude | query | number | ✓ | Longitude |
| start | query | string | — | Start date/time (ISO 8601 format, defaults to now) |
| end | query | string | — | End date/time (ISO 8601 format, defaults to 7 days from start) |
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
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| latitude | query | number | ✓ | Latitude |
| longitude | query | number | ✓ | Longitude |
| start | query | string | — | Start date/time (ISO 8601 format, defaults to now) |
| end | query | string | — | End date/time (ISO 8601 format, defaults to 7 days from start) |
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
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| query | query | string | — | Full-text search query (name, ID, or location) |
| latitude | query | number | — | Latitude for proximity search |
| longitude | query | number | — | Longitude for proximity search |
| maxResults | query | integer | — | Maximum number of stations to return |
| maxDistance | query | number | — | Maximum search radius for proximity search, in kilometers |
| bbox | query | string | — | 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. |
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
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| source | path | string | ✓ | Station source (e.g., 'noaa', 'ticon') |
| id | path | string | ✓ | Current station ID within the source, optionally with a depth bin (e.g. 'EPT0003' for the primary bin, 'EPT0003@11' for bin 11) |
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
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | ✓ | Current station ID with no source prefix (e.g. 'chs-active-pass') |
Get current events for a specific station
Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| source | path | string | ✓ | Station source (e.g., 'noaa', 'ticon') |
| id | path | string | ✓ | Current station ID within the source, optionally with a depth bin (e.g. 'EPT0003' for the primary bin, 'EPT0003@11' for bin 11) |
| start | query | string | — | Start date/time (ISO 8601 format, defaults to now) |
| end | query | string | — | End date/time (ISO 8601 format, defaults to 7 days from start) |
Get current events for a specific station
Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | ✓ | Current station ID with no source prefix (e.g. 'chs-active-pass') |
| start | query | string | — | Start date/time (ISO 8601 format, defaults to now) |
| end | query | string | — | End date/time (ISO 8601 format, defaults to 7 days from start) |
Get current speed timeline for a specific station
Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| source | path | string | ✓ | Station source (e.g., 'noaa', 'ticon') |
| id | path | string | ✓ | Current station ID within the source, optionally with a depth bin (e.g. 'EPT0003' for the primary bin, 'EPT0003@11' for bin 11) |
| start | query | string | — | Start date/time (ISO 8601 format, defaults to now) |
| end | query | string | — | End date/time (ISO 8601 format, defaults to 7 days from start) |
Get current speed timeline for a specific station
Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | ✓ | Current station ID with no source prefix (e.g. 'chs-active-pass') |
| start | query | string | — | Start date/time (ISO 8601 format, defaults to now) |
| end | query | string | — | End date/time (ISO 8601 format, defaults to 7 days from start) |