---
title: "Tide predictions"
method: GET
path: "/api/v1/environment/noaa-tides/station/{id}/predictions"
tags: ["Environment"]
---

# Tide predictions

`GET /api/v1/environment/noaa-tides/station/{id}/predictions`

Harmonic-analysis tide predictions at a CO-OPS station. Predictions are deterministic from the station's harmonic constants and run 12+ months ahead and into the past. Default datum MLLW, units metric. Interval values: `6` (six-minute, default), `h` (hourly), `hilo` (high/low events only). For high/low events prefer the dedicated `/high-low` endpoint. Attribution: NOAA CO-OPS Tides and Currents (api.tidesandcurrents.noaa.gov).

## Path parameters

- `id` string, required — 7-digit CO-OPS station identifier.

## Query parameters

- `begin_date` string, nullable — Start date `YYYYMMDD`.
- `end_date` string, nullable — End date `YYYYMMDD`.
- `date` string, nullable — Alternative date token (`today`, `recent`, `latest`).
- `datum` string — Tidal datum (default MLLW).
- `units` string — `metric` or `english`.
- `interval` string — Prediction interval: `6` (six-minute), `h` (hourly), or `hilo`.

## Response `200`

Prediction time series with timestamps in ISO 8601 UTC.

- EnvelopeNoaaTidesPredictionPayload
  - `data` NoaaTidesPredictionPayload, required — Time-series response for tide predictions or high/low events.
    - `station_id` string, required — Station identifier queried upstream.
    - `station_name` string, nullable — Station name echoed upstream (predictions usually omit station metadata; None when absent).
    - `product` string, required — Prediction product (`predictions` or `high_low`).
    - `datum` string, required — Datum used for predicted water levels.
    - `units` string, required — Units requested (`metric` or `english`).
    - `time_zone` string, required — Time zone used upstream (always `gmt` from Sugra).
    - `interval` string, required — Prediction interval (`6`, `h`, or `hilo`).
    - `count` integer, required — Number of prediction rows returned.
    - `predictions` NoaaTidesPrediction[], required — Array of prediction rows.
      - `data_time` string, nullable — Prediction timestamp as ISO 8601 UTC.
      - `value` number, nullable — Predicted water level relative to the requested datum, in requested units.
      - `type` string, nullable — Event marker for high/low results: `H` (high tide) or `L` (low tide). `None` for regular intervals.
    - `attribution` string, required — Upstream attribution string.
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `422` — Validation Error
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

[API](https://skmtc.net/sugra/apis/sugra-api.md) · [All operations](https://skmtc.net/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sugra/sugra-api/versions/4c4530760ba1/schema)
