Products

Curated point value(s) for allowlisted stored data.

Returns the value in effect now of allowlisted stored data sampled at a point: the latest frame of an analysis, or the forecast frame whose period contains now, from the newest run that has one (HeatRisk: today's level; unavailable when no frame covers now). Output is friendly (canonical unit, an optional category label, observed_at, and a staleness flag). The other days of a forecast are on GET /v1/series.

This is the one curated point lookup over stored data: it serves only the (product, var) pairs on a server-side allowlist, so the public surface stays safe and small while every widget/card is onboarded by adding an allowlist entry — no new endpoint. The allowlist is every variable with point metadata on a product of the data catalog (GET /v1/catalog). Requesting a (product, var) that is not allowlisted returns 404 (single form) or a per-item not_allowlisted status (batch form).

Data kinds (transparent to the caller)

The allowlist entry's kind selects how the point is resolved — a scalar grid cell, or a vector zone (point-in-polygon outlook, e.g. SPC categorical / fire-weather). Both collapse to one answer at a location and share one envelope: value/unit are present for scalars and ordinal bands, category/label name the band, and a point in no band is a valid answer with value: null and category: "none" (not a 404).

Single vs. batch

  • Single — product + var + lat + lon returns one PointValue.
  • Batch — select (multiple (product, var)) and/or points (multiple locations) returns a PointBatchResponse of per-point, per-value items, each with a status. One request can populate a whole family card (several metrics) or a map of locations; partial conditions (out of domain, not allowlisted, no data) are reported per item and never fail the whole request.

Coverage

Coverage is the 50 US states and DC. A single point outside it gets the 404 outside-coverage problem with next_steps; in a batch such a point is out_of_domain for every selector, as is a batch point the check could not reach within its time limit (retry it; the lookup carries on and caches). A point outside every US model grid is rejected without an upstream call; one inside a grid but outside the 50 states and DC (Canada, Mexico, open water) is rejected after a cached reverse geocode. Each allowlisted entry also carries a coverage domain; a covered point outside it returns the plain 404 (single) or an out_of_domain item (batch). Scalar values are sampled from the nearest grid cell (products are snapped to a ~1 km grid), so nearby requests share cache entries.

Staleness

approximate is true when the value is older than the product's update cadence allows (e.g. a SPoRT-LIS daily analysis older than ~36 h, an MRMS hourly accumulation older than ~3 h). A forecast's age is that of the run it is served from: HeatRisk is approximate when that run is older than ~36 h.

Caching

Successful responses carry Cache-Control with a max-age keyed to the product's cadence (SPoRT-LIS daily: 30 min; MRMS QPE hourly: 5 min). The service additionally caches by (product, var, rounded lat/lon).

Auth

Standard sw-api Bearer auth applies.

get/v1/point

Request

  • Base URL: https://api.smarterweather.com
  • URL: https://api.smarterweather.com/v1/point
  • Auth: HTTP bearer

Query parameters

productstring

Allowlisted catalog product id (lowercase, digits, underscores), e.g. sport_rsm_0_2m_pct_conus, mrms_qpe_24h_pass2_conus, or the outlook spc_day1_categorical. Single form: pair with var + lat + lon. Ignored when select is provided.

varstring

Variable standard_name within the product, e.g. soil_moisture_percentile_0_200cm, multisensor_qpe_24h_pass2, or convective_outlook_risk for zone outlooks. The variable's stored name is also accepted, as an alias; the response echoes var as sent. Ignored when select is provided.

latnumber double

Latitude of the point (single form). Ignored when points is provided.

lonnumber double

Longitude of the point (single form). Ignored when points is provided.

selectstring[]

Batch form. One or more product:var selectors (each individually allowlisted; var is the variable standard_name, or the stored name as an alias, and each item echoes its selector as sent). Repeat the parameter or comma-join within a single value, e.g. select=sport_rsm_0_2m_pct_conus:soil_moisture_percentile_0_200cm&select=spc_day1_categorical:convective_outlook_risk. Presence of select (or points) switches the response to PointBatchResponse. Max 25 selectors; points × selectors ≤ 500.

pointsstring[]

Batch form. One or more lat,lon locations. Repeat the parameter for multiple points (Go query parsing rejects ;), e.g. points=41.9,-93.6&points=42.0,-93.4. Presence of points (or select) switches the response to PointBatchResponse. Max 100 points; points × selectors ≤ 500. A point outside lat [-90, 90] / lon [-180, 180] (here or in the lat & lon fallback) is reported as out_of_domain items; a non-numeric or non-finite (NaN, Inf) point is a 400.

Response

The requested value(s). Single form (product+var+lat+lon) returns a PointValue; batch form (select and/or points) returns a PointBatchResponse.

OR

Example response

{
  "product": "sport_rsm_0_2m_pct_conus",
  "var": "soil_moisture_percentile_0_200cm",
  "value": 34.2,
  "unit": "percentile",
  "category": "dry",
  "label": "Slight",
  "observed_at": "2026-06-30T12:00:00Z",
  "status": "ok"
}

Changes

No recorded changes to this operation across all 1 revision of this API.