---
title: "NWS observation station catalog"
method: GET
path: "/api/v1/weather/nws/stations"
tags: ["Environment"]
---

# NWS observation station catalog

`GET /api/v1/weather/nws/stations`

Return the catalog of NWS observation stations, optionally filtered by state. Includes ASOS, AWOS, RWIS, and COOP sites across the US and its territories. Each station record carries identifier, name, latitude, longitude, elevation, time zone, and the forecast / county / fire weather zone IDs that contain the station. Cursor pagination is supported via the `cursor` parameter. Attribution: NOAA National Weather Service (api.weather.gov).

## Query parameters

- `state` string, nullable — Two-letter US state or territory code. Multiple codes may be supplied as a comma-separated string to the upstream API.
- `limit` integer — Maximum number of stations per response (NWS caps at 500).
- `cursor` string, nullable — Opaque upstream pagination cursor. Pass the value returned in `next_cursor_url` to page forward.

## Response `200`

List of observation stations.

- EnvelopeNwsStationsPayload
  - `data` NwsStationsPayload, required — Observation station catalog response.
    - `count` integer, required — Number of stations returned.
    - `stations` NwsStation[], required — Station records.
      - `station_id` string, nullable — Station identifier (e.g. `KJFK`).
      - `name` string, nullable — Human-readable station name.
      - `latitude` number, nullable — Station latitude.
      - `longitude` number, nullable — Station longitude.
      - `elevation_m` number, nullable — Station elevation in metres.
      - `time_zone` string, nullable — IANA time zone identifier.
      - `forecast_zone` string, nullable — Forecast zone ID that contains the station.
      - `county_zone` string, nullable — County zone ID that contains the station.
      - `fire_weather_zone` string, nullable — Fire weather zone ID that contains the station.
    - `next_cursor_url` string, nullable — Upstream URL of the next cursor page, when more stations are available.
  - `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/4e2740743eb4/schema)
