---
title: "Get latest METAR station observations as GeoJSON."
method: GET
path: "/v1/observations"
tags: ["Observations"]
---

# Get latest METAR station observations as GeoJSON.

`GET /v1/observations`

## Request

- Base URL: `https://api.smarterweather.com`
- URL: `https://api.smarterweather.com/v1/observations`
- Auth: HTTP bearer

Returns a GeoJSON FeatureCollection of METAR surface observations
ingested from MADIS. By default returns the latest observation per
station within the last 2 hours. `hours` or `station` switches to
every report in a lookback window, newest first: `hours` sets the
window (1-24 hours) and `station` limits it to one station (window
1 hour unless `hours` is set).

A bounding box (`min_lon`, `min_lat`, `max_lon`, `max_lat`) filters
only the default latest-per-station view, so combining it with
`hours` or `station` is a `400`. It needs all four values as
finite numbers with `-180 <= min_lon <= max_lon <= 180` and
`-90 <= min_lat <= max_lat <= 90` (antimeridian-crossing boxes are not
supported); a partial, non-numeric, out-of-range or inverted box is a
`400`. Empty-valued bbox params count as absent. A non-integer `hours`, or one outside 1-24, is
a `400`, as is repeating `hours`, `station` or a bbox key.

Point parameters (`lat`, `lon`, `lng`, `latitude`, `longitude`,
`zip`, `location`, `n`, `radius`) are not accepted here and return
`400`; for the stations nearest a point use
`GET /v1/observations/nearest`.

An area (a bounding box) that touches none of the US domains (CONUS,
Alaska, Hawaii) returns `404` `outside-coverage` with `next_steps`;
a box that touches one is served as is and may include area outside
the US. `station` is not checked.

## Query parameters

- `station` string
- `hours` integer
- `min_lon` number
- `min_lat` number
- `max_lon` number
- `max_lat` number

## Response `200`

GeoJSON FeatureCollection of METAR observations.

## Other responses

- `400`: Bad request.
- `404`: Resource not found: a location that cannot be resolved (unknown ZIP, unrecognised free-text location), no upstream data for the location, or a missing resource. On a route that checks coverage (its description says so), a location outside the 50 US states and DC returns type `https://smarterweather.com/errors/outside-coverage`; that and the location-not-found problem carry `next_steps` (`recommended = coverage`).
- `502`: Bad gateway. The service received an invalid response from an upstream data source. Transient; clients should retry with backoff.
- `503`: Service unavailable. An upstream dependency is unavailable or shedding load (type `service-unavailable`). Transient; retry with backoff and honor any `Retry-After` header.
- `504`: Gateway timeout. An upstream data source did not respond within the service's budget.

---

[API](https://skmtc.dev/smarterweather/apis/smarter-weather-api.md) · [All operations](https://skmtc.dev/smarterweather/apis/smarter-weather-api/llms.txt) · [OpenAPI document](https://skmtc.dev/smarterweather/apis/smarter-weather-api/revisions/520d55a696e4?raw)
