---
title: "Water-level observations"
method: GET
path: "/api/v1/environment/noaa-tides/station/{id}/water-level"
tags: ["Environment"]
---

# Water-level observations

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

Return tide-gauge water-level observations at a CO-OPS station. Default datum is MLLW (Mean Lower-Low Water, the US navigational default) and units metric (meters). Requests without `begin_date`/`end_date` default to today's 6-minute observations. Requests with an explicit range are capped at 31 days for 6-minute data and 365 days for hourly (`interval=h`). `q` quality flag: `p` preliminary (last 30-45 days), `v` verified (older, passed CO-OPS QC). 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 in `YYYYMMDD` format (e.g. `20260419`). Paired with `end_date`.
- `end_date` string, nullable — End date in `YYYYMMDD` format. Paired with `begin_date`.
- `date` string, nullable — Alternative date token. One of `latest`, `today`, `recent` (last 72h). Ignored when both `begin_date` and `end_date` are set.
- `datum` string — Tidal datum: MLLW, MSL, MHW, MHHW, MLW, STND, NAVD88, IGLD (Great Lakes).
- `units` string — Units: `metric` (meters, Celsius, km/h, mbar) or `english`.
- `interval` string, nullable — Sampling interval. Omit (default 6-minute) or pass `h` for hourly. `hilo` and `1` are not valid for observations.

## Response `200`

Observation time series with timestamps in ISO 8601 UTC.

- EnvelopeNoaaTidesObservationPayload
  - `data` NoaaTidesObservationPayload, required — Time-series response for water-level, meteorology, or water-temperature products.
    - `station_id` string, required — Station identifier queried upstream.
    - `station_name` string, nullable — Human-readable station name echoed from the upstream `metadata` block.
    - `lat` number, nullable — Station latitude in decimal degrees, echoed upstream.
    - `lon` number, nullable — Station longitude in decimal degrees, echoed upstream.
    - `product` string, required — CO-OPS product requested (`water_level`, `air_pressure`, `wind`, etc.).
    - `datum` string, nullable — Datum used for water-level values, when applicable.
    - `units` string, required — Units requested (`metric` or `english`).
    - `time_zone` string, required — Time zone used for the upstream query (always `gmt` from Sugra).
    - `interval` string, nullable — Sampling interval used (`6`, `h`, or upstream default).
    - `count` integer, required — Number of observations returned.
    - `observations` NoaaTidesObservation[], required — Array of observation rows.
      - `data_time` string, nullable — Observation timestamp as ISO 8601 UTC (YYYY-MM-DDTHH:MM:SSZ).
      - `value` number, nullable — Observed value in the requested units (meters, Celsius, km/h, mbar, etc.).
      - `sigma` number, nullable — Standard deviation within the 6-minute sampling window (water-level only).
      - `flags` boolean[], nullable — Four CO-OPS quality flags: `[timeout, flat, trend, max_min_exceeded]`.
      - `flags_raw` string, nullable — Raw flags field as published upstream (4 comma-separated 0/1 digits).
      - `quality` string, nullable — Quality code: `p` preliminary (last 30-45 days) or `v` verified (older).
    - `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.
- `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/dcf7427e6897/schema)
