---
title: "Get NEXRAD Level III algorithm-detection overlays as GeoJSON."
method: GET
path: "/v1/nexrad/features"
tags: ["Storms"]
---

# Get NEXRAD Level III algorithm-detection overlays as GeoJSON.

`GET /v1/nexrad/features`

## Request

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

Returns a GeoJSON `FeatureCollection` of NEXRAD Level III
algorithm-detection overlays — Hail Index, Mesocyclone, and
Tornado Vortex Signature (TVS) — for a single radar site. Each
feature carries `site_id` plus the product-specific detection
payload (e.g. probability-of-hail / max hail size, mesocyclone
or TVS strength) in a forward-compat `properties` bag. Treat
unknown keys as opaque additive data.

### Product selector

`product` is required and selects which detection layer to
return: `hail_index`, `mesocyclone`, or `tvs`.

### Site selector

`site` is the 3-letter Level III radar site code (e.g. `TLX`);
a 4-letter ICAO (e.g. `KTLX`) is also accepted and uppercased
server-side. As an alternative to `site`, pass `lat` + `lon`
together to resolve the nearest radar server-side.

### Caching

Successful responses carry `Cache-Control: public, max-age=30,
stale-while-revalidate=30`.

### Coverage

With `lat`/`lon`, a point outside the 50 US states and DC returns
`404` `outside-coverage` with `next_steps`; `site` is not checked.

### Auth

Standard sw-api Bearer auth applies.

## Query parameters

- `product` 'hail_index' | 'mesocyclone' | 'tvs', required
- `site` string
- `lat` number, double
- `lon` number, double

## Response `200`

GeoJSON FeatureCollection. Empty `features` array when no
detections exist for the product/site (200, not 404).

## Other responses

- `400`: Bad request.
- `401`: Missing or invalid API key. Carries a `WWW-Authenticate` challenge and a `next_steps` extension. `recommended` is `device_flow`: the object is a complete no-install mint recipe.
- `403`: API key lacks the required scope. Carries a `WWW-Authenticate` challenge with `error="insufficient_scope"` and a `next_steps` extension.
- `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`).
- `429`: Rate limit exceeded. Carries a `next_steps` extension (`recommended: upgrade`, plus `pricing` and `usage`) telling the caller how to lift the limit.
- `500`: Internal server error.
- `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)
