REST
Docs navigation
REST API
Weather MCP
Agents as developers
Weather data for the software you build.
# first: export SMARTERWEATHER_API_KEY=sw_live_... (or: set -a; source .env; set +a)
curl "https://api.smarterweather.com/v1/weather?location=Boston,%20MA&units=imperial" \
-H "Authorization: Bearer $SMARTERWEATHER_API_KEY"// save as sample.mjs; run: node --env-file=.env sample.mjs (Node 20.6+, ESM top-level await)
const res = await fetch(
"https://api.smarterweather.com/v1/weather?location=Boston,%20MA&units=imperial",
{ headers: { Authorization: `Bearer ${process.env.SMARTERWEATHER_API_KEY}` } },
);
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
console.log(JSON.stringify(data, null, 2));import os, sys, requests
r = requests.get(
"https://api.smarterweather.com/v1/weather",
params={"location":"Boston, MA","units":"imperial"},
headers={"Authorization": f"Bearer {os.environ['SMARTERWEATHER_API_KEY']}"},
)
if not r.ok:
sys.exit(f"{r.status_code} {r.text}")
data = r.json()
print(data)package main
import (
"fmt"
"io"
"log"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://api.smarterweather.com/v1/weather?location=Boston,%20MA&units=imperial", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("SMARTERWEATHER_API_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
if res.StatusCode < 200 || res.StatusCode > 299 {
log.Fatalf("%s %s", res.Status, body)
}
fmt.Println(string(body))
}location
{
"lat": 42.3601,
"lon": -71.0589,
"name": "Boston",
"region": "MA",
"country": "US",
"timezone": "America/New_York",
"county": "Suffolk",
"zip": "02108"
}current
{
"time": "2026-04-20T15:00:00Z",
"temperature": 58.4,
"feels_like": 56.1,
"humidity": 62,
"dew_point": 45.2,
"pressure": 30.05,
"wind_speed": 11.3,
"wind_gust": 17.8,
"wind_direction": 240,
"visibility": 10,
"cloud_cover": 35,
"uv_index": 5,
"precip_rate": 0,
"precip_type": "none",
"conditions": "Partly Cloudy",
"icon": "partly-cloudy-day",
"severe": false
}hourly
[
{
"time": "2026-04-20T16:00:00Z",
"temperature": 59.1,
"feels_like": 56.8,
"humidity": 60,
"wind_speed": 12.1,
"wind_direction": 245,
"precip_probability": 5,
"precip_amount": 0,
"conditions": "Partly Cloudy",
"icon": "partly-cloudy-day"
},
{
"time": "2026-04-20T17:00:00Z",
"temperature": 59.6,
"feels_like": 57.2,
"humidity": 58,
"wind_speed": 12.4,
"wind_direction": 245,
"precip_probability": 5,
"precip_amount": 0,
"conditions": "Partly Cloudy",
"icon": "partly-cloudy-day"
}
]daily
[
{
"date": "2026-04-20",
"high": 61,
"low": 44.5,
"humidity_avg": 55,
"wind_speed_max": 14.2,
"wind_direction": 240,
"precip_probability": 10,
"precip_total": 0,
"snow_total": 0,
"conditions": "Partly Cloudy",
"icon": "partly-cloudy-day",
"day": {
"temperature": 61,
"wind_speed": 14.2,
"wind_direction": 240,
"precip_probability": 10,
"precip_total": 0,
"conditions": "Partly Cloudy",
"icon": "partly-cloudy-day",
"narrative": "Partly cloudy with a high near 61. West winds 10 to 15 mph."
},
"night": {
"temperature": 44.5,
"wind_speed": 6.8,
"wind_direction": 260,
"precip_probability": 5,
"precip_total": 0,
"conditions": "Mostly Clear",
"icon": "mostly-clear-night",
"narrative": "Mostly clear with a low around 45. Winds becoming light."
}
}
]alerts
[]outlooks
[]astro
{
"civil_dawn": "2026-04-20T09:37:00Z",
"sunrise": "2026-04-20T10:05:00Z",
"solar_noon": "2026-04-20T16:47:00Z",
"sunset": "2026-04-20T23:29:00Z",
"civil_dusk": "2026-04-20T23:57:00Z",
"day_length": 48240,
"daylight_length": 51600,
"moonrise": "2026-04-20T11:42:00Z",
"moonset": "2026-04-21T01:18:00Z",
"moon_phase": 0.15,
"moon_phase_name": "Waxing Crescent",
"moon_illumination": 0.22,
"polar": null
}units
{
"temperature": "F",
"wind_speed": "mph",
"pressure": "inHg",
"visibility": "mi",
"precip_amount": "in"
}attribution
{
"sources": [
"NOAA NBM",
"HRRR",
"RTMA",
"MRMS",
"NWS",
"JPL Ephemeris"
],
"notice": "Weather data from NOAA/NWS. Astronomical calculations from JPL ephemerides."
}meta
{
"schema_version": "2026-04-20",
"generated_at": "2026-04-20T15:00:04Z",
"freshness": [
{
"source": "rtma",
"product_id": "rtma_conus_2p5km",
"reference_time": "2026-04-20T14:45:00Z",
"latest_valid": "2026-04-20T14:45:00Z",
"age_seconds": 904
},
{
"source": "hrrr",
"product_id": "hrrr_conus_3km",
"reference_time": "2026-04-20T14:00:00Z",
"latest_valid": "2026-04-20T15:00:00Z",
"age_seconds": 3604
}
],
"warnings": []
}Smarter Weather covers the 50 US states and DC only. Every route that takes a point (lat and lon, zip or location) returns 404 outside-coverage for a point outside the 50 states and DC. /v1/alerts and /v1/observations return it for a bounding box that touches no US domain (CONUS, Alaska, Hawaii); a box that touches one may still include area outside the US. /v1/weather/batch reports it per item as outside_coverage, and /v1/point with points and /v1/series/batch mark such points out_of_domain, as they do a point the check could not reach in time (retry it). If the location lookup is unavailable, the check can briefly fail open. Routes keyed by a station, radar site, forecast office or alert id, and nationwide lists, are not filtered by point, so do not treat an empty result as an all-clear. See Errors.
Three ways in
MCP
Weather MCP
Agents
Agents are first-class developers
sign_up, create_api_key, get_documentation, configure_mcp, get_usage, and upgrade_plan on behalf of a person or a company.The catalog
Every operation in the OpenAPI contract, grouped the way the docs are. Same endpoints on REST and the weather MCP.
Weather
- GET
/v1/weatherGet blended weather for a location. - POST
/v1/weather/batchGet blended weather for up to 25 locations in one call. - GET
/v1/windowsConsecutive hours that meet activity criteria. - GET
/v1/outlooksOutlook detail for a location and hazard family (SPC, WPC, CPC). - GET
/v1/outlooks/climateCPC climate outlooks at a location, from 6-10 day to seasonal.
Alerts
- GET
/v1/alertsSearch NWS alerts at a point or in a bounding box. - GET
/v1/alerts/{id}Get a single NWS alert by id. - POST
/v1/pois/exposureCivic POIs inside a bounded polygon.
Storms and tropical
- GET
/v1/storm-tracksGet active storm-cell tracks as GeoJSON. - GET
/v1/storm-reportsGet recent NWS local storm reports as GeoJSON. - GET
/v1/nexrad/featuresGet NEXRAD Level III algorithm-detection overlays as GeoJSON. - GET
/v1/tropicalGet the aggregated NHC tropical overlay as GeoJSON. - GET
/v1/tropical/observationsGet Hurricane Hunter aircraft reconnaissance as GeoJSON. - GET
/v1/record-eventsGet NWS climate-record events as GeoJSON.
Observations and soundings
- GET
/v1/observationsGet latest METAR station observations as GeoJSON. - GET
/v1/observations/nearestGet nearest METAR station observations. - GET
/v1/lightningGet recent lightning activity at a point. - GET
/v1/soundingsGet latest RAOB radiosonde soundings as GeoJSON. - GET
/v1/soundings/nearestGet nearest RAOB radiosonde soundings.
Geocoding
- GET
/v1/geocode/reverseReverse-geocode a coordinate to a location. - GET
/v1/geocode/autosuggestTypeahead-style location lookup. - GET
/v1/geocode/searchForward-geocode a place name or US ZIP.
Point data and exposure
- GET
/v1/products/{product_id}/exposure-summaryCumulative population exposure for a risk-zone product. - GET
/v1/pointCurated point value(s) for allowlisted stored data. - GET
/v1/seriesTime series of catalog grid and snapshot products at a point. - POST
/v1/series/batchTime series of catalog products at up to 25 locations.
Climate and agriculture
- GET
/v1/climate-reportsGet NWS daily climate reports as GeoJSON. - GET
/v1/agriculture/growing-degree-daysGrowing Degree Units (GDU / GDD) for a point. - GET
/v1/climate/normalsDay-of-year climate normals for a point.
Forecaster guidance
- GET
/v1/guidance/mesoscaleGet active SPC Mesoscale Discussion polygons as GeoJSON. - GET
/v1/guidance/precipitationGet active WPC Mesoscale Precipitation Discussion polygons as GeoJSON. - GET
/v1/text-productsList recent NWS text products of one type. - GET
/v1/discussions/mesoscaleTemporary alias for GET /v1/guidance/mesoscale.Deprecated
Health and deprecations
- GET
/v1/healthService health probe. - GET
/v1/statusPlatform data-freshness status. - GET
/v1/catalogList the data catalog's products. - GET
/v1/catalog/{product_id}Describe one data catalog product. - GET
/.well-known/deprecationsList active API deprecations.