Documentation

Weatherkind API

One base URL, JSON in, weather out. Everything on weatherkind.com is served by the same endpoints documented here, including forecasts, historical observations, nowcasts, airport-delay predictions, alerts, accuracy, and climate.

base urlhttps://api.weatherkind.com
authAuthorization: Bearer {api_key}
formatapplication/json · ISO-8601
versionv1 · additive changes only

Overview

The API is a small family of endpoints around one idea: field-selectable weather. You state a coordinate, the forecast sections you want (from current conditions to daily summaries), and the exact variables in each section, and the response contains precisely that, nothing else.

Interactive weather endpoints below have a live console: build the call with real parameters, copy it as curl, and inspect the returned JSON or visualization. Console calls run through this site's demo proxy. Airport-delay and map-tile endpoints include copyable integration examples. Your own integration uses your API key against api.weatherkind.com.

Data endpoints return their result directly; there is no data envelope. Forecast-oriented weather responses carry updated_at, a stale flag (true only when a cached payload is served during upstream degradation), and a warnings array for non-fatal notices. Airport-delay predictions instead expose issued_at, per-prediction data_freshness, and warnings.

  • POST /v1/forecast: named sections: current · quarter_hourly · hourly · daily
  • POST /v1/nowcast: fixed two-hour, minute-by-minute precipitation nowcast
  • POST /v1/route: forecast along a drive or hike, timed to when you arrive
  • POST /v1/airport-delay: weather-attributed delay severity and cancellation risk for supported US airports
  • POST /v1/airport-delay/accuracy: separate backtest, live, and route-aware verification
  • GET /v1/airport-delay/supported-airports: airports qualified for delay prediction
  • POST /v1/outlook: daily climate outlook, days 15–365
  • POST /v1/historical: field-selectable daily observations for completed local dates
  • GET /v1/historical/variables: variables, units, coverage limits, and methodology (public)
  • POST /v1/alerts: CAP-aligned active public alerts
  • POST /v1/accuracy: our verified error record, by locality, region, or network
  • GET /v1/accuracy/catalog: regions, leads, variables, metrics, methodology (public)
  • GET /v1/geocode: place-name search returning coordinates and time zones
  • GET /v1/map-tiles/{layer}/{z}/{x}/{y}: radar & environment rasters

Authentication

Every request carries a bearer token. Keys are scoped to a plan (free tier available) and work across all endpoints your plan includes.

Authorization: Bearer wk_live_…

Keys carry scopes: forecast:read covers forecast and outlook; nowcast:read covers the Pro+ minute nowcast; route:read covers the Pro+ route forecast; alerts:read covers alerts; and accuracy:read covers /v1/accuracy. historical:read covers /v1/historical. airport_delay:read covers prediction, verification, and the supported-airports catalog in the airport-delay family. Calling an endpoint your key doesn't cover returns 403. Three catalog endpoints need no key at all: GET /v1/forecast/variables and GET /v1/accuracy/catalog, and GET /v1/historical/variables.

Keys are secrets: call the API from your backend or an edge proxy, not from browser JavaScript, and rotate any key that ships in a client binary.

Quick start

Current conditions for Aspen, Colorado, in one call:

Request

curl 'https://api.weatherkind.com/v1/forecast' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "location": {
      "latitude": 39.1911,
      "longitude": -106.8175
    },
    "timezone": "auto",
    "units": "us",
    "current": {
      "variables": [
        "temperature",
        "condition"
      ]
    }
  }'

Response

{
  "location": {
    "latitude": 39.1911,
    "longitude": -106.8175,
    "timezone": "America/Denver",
    "forecast_elevation_m": 2422
  },
  "units": { "system": "us", "elevation": "m", "pressure": "hPa" },
  "current": {
    "time": "2026-07-30T17:04:00Z",
    "temperature": 78.3,
    "condition": "partly"
  },
  "updated_at": "2026-07-30T17:04:11Z",
  "stale": false,
  "warnings": []
}

POST /v1/forecast

Description

Returns the operational forecast from right now through the next two weeks. One request can combine current conditions, 15-minute or hourly detail, and daily summaries, with only the variables you select. Use this endpoint when you need specific near-term conditions or weather values for a particular time.

  • AuthBearer key
  • Requestapplication/json
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
required object Coordinates and optional time zone for the location being queried.
timezone optional string auto or an IANA timezone Default: "auto".
units optional enum Allowed: "metric", "us", "si". Default: "metric". See Units & time.
optional object Optional per-dimension overrides for measurement units. See Units & time.
optional object Current conditions at the requested location.
optional object Weather variables returned at 15-minute intervals.
optional object Weather variables returned at hourly intervals.
optional object Daily weather variables for the requested dates.
FieldPresenceTypeNotes
locationrequiredobjectForecast coordinate
latituderequirednumber−90…90
longituderequirednumber−180…180
timezoneoptionalstring"auto" by default, or an IANA zone
unitsoptionalstringDefaults to "metric" (°C, km/h, mm, hPa, m); also accepts "us" or "si"
unit_overridesoptionalobjectOverride individual measurement dimensions
temperatureoptionalenumdegC, degF, or K
wind_speedoptionalenumkm/h, mph, or m/s
precipitationoptionalenummm, in, or m
precipitation_rateoptionalenummm/h, in/h, or m/s
visibilityoptionalenumkm, mi, or m
pressureoptionalstringPressure unit override
elevationoptionalstringElevation unit override
currentoptionalobjectCurrent conditions section
variablesrequiredstring[]Variables returned in one flat object at request time
quarter_hourlyoptionalobject15-minute forecast section
hoursrequiredinteger1–48 hours
variablesrequiredstring[]15-minute variables to return
hourlyoptionalobjectHourly forecast section
hoursrequiredinteger1–384 future hours
past_hoursoptionalinteger0–48 prior hours
variablesrequiredstring[]Hourly variables to return
dailyoptionalobjectDaily forecast section
daysoptionalinteger1–15 local dates (today through day +14); mutually exclusive with start/end
startoptionallocal dateFirst exact date, inclusive
endoptionallocal dateLast exact date, inclusive
variablesrequiredstring[]Daily variables to return
Response schema
FieldPresenceTypeNotes
always object Coordinates and optional time zone for the location being queried.
always object Unit system and per-dimension units for the returned values. See Units & time.
conditional object Current conditions at the requested location.
conditional array<object> Weather variables returned at 15-minute intervals.
conditional array<object> Weather variables returned at hourly intervals.
conditional array<object> Daily weather variables for the requested dates.
updated_at nullable ISO datetime | null Time at which the returned data was generated.
stale always boolean Whether the response was served from resilient cache.
always array<object> Non-fatal notices about coverage, freshness, or substitutions.
Live console

Interactive example

Live
Request builder
sections
variables
request
curl 'https://api.weatherkind.com/v1/forecast' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "location": {
      "latitude": 39.1911,
      "longitude": -106.8175
    },
    "timezone": "auto",
    "units": "us",
    "current": {
      "variables": [
        "temperature",
        "condition",
        "wind_speed"
      ]
    },
    "hourly": {
      "hours": 48,
      "variables": [
        "temperature",
        "condition",
        "wind_speed",
        "precipitation",
        "precipitation_probability"
      ]
    },
    "daily": {
      "days": 14,
      "variables": [
        "temperature_max",
        "temperature_min",
        "condition",
        "precipitation",
        "precipitation_probability"
      ]
    }
  }'
response JSON
{
  "location": {
    "timezone": "America/Denver",
    "latitude": 39.1911,
    "longitude": -106.8175,
    "forecast_elevation_m": 2413
  },
  "warnings": [
    {
      "code": "stale_data",
      "message": "One or more forecast sections are being served from stale data."
    }
  ],
  "units": {
    "elevation": "ft",
    "percentage": "%",
    "precipitation": "in",
    "precipitation_rate": "in/h",
    "pressure": "inHg",
    "system": "us",
    "temperature": "degF",
    "visibility": "mi",
    "wind_speed": "mph"
  },
  "current": {
    "condition": "clear-night",
    "temperature": 71,
    "time": "2026-09-10T02:21:39Z",
    "wind_speed": 6
  },
  "stale": true,
  "updated_at": "2026-09-10T02:21:29Z",
  "daily": [
    {
      "condition": "sun",
      "date": "2026-09-09",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature_max": 71,
      "temperature_min": 60,
      "type": "forecast"
    },
    {
      "condition": "cloudy",
      "date": "2026-09-10",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature_max": 79,
      "temperature_min": 49,
      "type": "forecast"
    },
    {
      "condition": "cloudy",
      "date": "2026-09-11",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature_max": 78,
      "temperature_min": 50,
      "type": "forecast"
    },
    {
      "condition": "partly",
      "date": "2026-09-12",
      "precipitation": 0,
      "precipitation_probability": 20,
      "temperature_max": 80,
      "temperature_min": 48,
      "type": "forecast"
    },
    {
      "condition": "drizzle",
      "date": "2026-09-13",
      "precipitation": 0.01,
      "precipitation_probability": 45,
      "temperature_max": 77,
      "temperature_min": 51,
      "type": "forecast"
    },
    {
      "condition": "drizzle",
      "date": "2026-09-14",
      "precipitation": 0.04,
      "precipitation_probability": 31,
      "temperature_max": 75,
      "temperature_min": 49,
      "type": "forecast"
    },
    {
      "condition": "drizzle",
      "date": "2026-09-15",
      "precipitation": 0.05,
      "precipitation_probability": 46,
      "temperature_max": 72,
      "temperature_min": 47,
      "type": "forecast"
    },
    {
      "condition": "rain",
      "date": "2026-09-16",
      "precipitation": 0.16,
      "precipitation_probability": 54,
      "temperature_max": 75,
      "temperature_min": 47,
      "type": "forecast"
    },
    {
      "condition": "rain",
      "date": "2026-09-17",
      "precipitation": 0.13,
      "precipitation_probability": 29,
      "temperature_max": 75,
      "temperature_min": 46,
      "type": "forecast"
    },
    {
      "condition": "drizzle",
      "date": "2026-09-18",
      "precipitation": 0.05,
      "precipitation_probability": 27,
      "temperature_max": 77,
      "temperature_min": 46,
      "type": "forecast"
    },
    {
      "condition": "drizzle",
      "date": "2026-09-19",
      "precipitation": 0.06,
      "precipitation_probability": 29,
      "temperature_max": 74,
      "temperature_min": 46,
      "type": "forecast"
    },
    {
      "condition": "drizzle",
      "date": "2026-09-20",
      "precipitation": 0.06,
      "precipitation_probability": 27,
      "temperature_max": 80,
      "temperature_min": 46,
      "type": "forecast"
    },
    {
      "condition": "sun",
      "date": "2026-09-21",
      "precipitation": 0,
      "precipitation_probability": 18,
      "temperature_max": 72,
      "temperature_min": 40,
      "type": "forecast"
    },
    {
      "condition": "sun",
      "date": "2026-09-22",
      "precipitation": 0,
      "precipitation_probability": 14,
      "temperature_max": 77,
      "temperature_min": 39,
      "type": "forecast"
    }
  ],
  "hourly": [
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 64,
      "time": "2026-09-10T04:00:00Z",
      "type": "forecast",
      "wind_speed": 2
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 60,
      "time": "2026-09-10T05:00:00Z",
      "type": "forecast",
      "wind_speed": 3
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 2,
      "temperature": 58,
      "time": "2026-09-10T06:00:00Z",
      "type": "forecast",
      "wind_speed": 4
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 55,
      "time": "2026-09-10T07:00:00Z",
      "type": "forecast",
      "wind_speed": 6
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 52,
      "time": "2026-09-10T08:00:00Z",
      "type": "forecast",
      "wind_speed": 5
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 51,
      "time": "2026-09-10T09:00:00Z",
      "type": "forecast",
      "wind_speed": 6
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 50,
      "time": "2026-09-10T10:00:00Z",
      "type": "forecast",
      "wind_speed": 7
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 49,
      "time": "2026-09-10T11:00:00Z",
      "type": "forecast",
      "wind_speed": 7
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 2,
      "temperature": 49,
      "time": "2026-09-10T12:00:00Z",
      "type": "forecast",
      "wind_speed": 8
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 2,
      "temperature": 50,
      "time": "2026-09-10T13:00:00Z",
      "type": "forecast",
      "wind_speed": 7
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 2,
      "temperature": 52,
      "time": "2026-09-10T14:00:00Z",
      "type": "forecast",
      "wind_speed": 7
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 3,
      "temperature": 59,
      "time": "2026-09-10T15:00:00Z",
      "type": "forecast",
      "wind_speed": 1
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 3,
      "temperature": 65,
      "time": "2026-09-10T16:00:00Z",
      "type": "forecast",
      "wind_speed": 4
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 3,
      "temperature": 70,
      "time": "2026-09-10T17:00:00Z",
      "type": "forecast",
      "wind_speed": 6
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 75,
      "time": "2026-09-10T18:00:00Z",
      "type": "forecast",
      "wind_speed": 8
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 76,
      "time": "2026-09-10T19:00:00Z",
      "type": "forecast",
      "wind_speed": 9
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 77,
      "time": "2026-09-10T20:00:00Z",
      "type": "forecast",
      "wind_speed": 10
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 2,
      "temperature": 78,
      "time": "2026-09-10T21:00:00Z",
      "type": "forecast",
      "wind_speed": 10
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 2,
      "temperature": 78,
      "time": "2026-09-10T22:00:00Z",
      "type": "forecast",
      "wind_speed": 10
    },
    {
      "condition": "cloudy",
      "precipitation": 0,
      "precipitation_probability": 2,
      "temperature": 77,
      "time": "2026-09-10T23:00:00Z",
      "type": "forecast",
      "wind_speed": 10
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 3,
      "temperature": 74,
      "time": "2026-09-11T00:00:00Z",
      "type": "forecast",
      "wind_speed": 9
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 3,
      "temperature": 69,
      "time": "2026-09-11T01:00:00Z",
      "type": "forecast",
      "wind_speed": 5
    },
    {
      "condition": "cloudy-night",
      "precipitation": 0,
      "precipitation_probability": 3,
      "temperature": 63,
      "time": "2026-09-11T02:00:00Z",
      "type": "forecast",
      "wind_speed": 3
    },
    {
      "condition": "cloudy-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 60,
      "time": "2026-09-11T03:00:00Z",
      "type": "forecast",
      "wind_speed": 4
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 57,
      "time": "2026-09-11T04:00:00Z",
      "type": "forecast",
      "wind_speed": 3
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 56,
      "time": "2026-09-11T05:00:00Z",
      "type": "forecast",
      "wind_speed": 2
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 54,
      "time": "2026-09-11T06:00:00Z",
      "type": "forecast",
      "wind_speed": 4
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 53,
      "time": "2026-09-11T07:00:00Z",
      "type": "forecast",
      "wind_speed": 5
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 52,
      "time": "2026-09-11T08:00:00Z",
      "type": "forecast",
      "wind_speed": 4
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 52,
      "time": "2026-09-11T09:00:00Z",
      "type": "forecast",
      "wind_speed": 5
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 51,
      "time": "2026-09-11T10:00:00Z",
      "type": "forecast",
      "wind_speed": 5
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 51,
      "time": "2026-09-11T11:00:00Z",
      "type": "forecast",
      "wind_speed": 4
    },
    {
      "condition": "cloudy-night",
      "precipitation": 0,
      "precipitation_probability": 1,
      "temperature": 50,
      "time": "2026-09-11T12:00:00Z",
      "type": "forecast",
      "wind_speed": 4
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 53,
      "time": "2026-09-11T13:00:00Z",
      "type": "forecast",
      "wind_speed": 3
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 55,
      "time": "2026-09-11T14:00:00Z",
      "type": "forecast",
      "wind_speed": 3
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 61,
      "time": "2026-09-11T15:00:00Z",
      "type": "forecast",
      "wind_speed": 3
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 66,
      "time": "2026-09-11T16:00:00Z",
      "type": "forecast",
      "wind_speed": 2
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 71,
      "time": "2026-09-11T17:00:00Z",
      "type": "forecast",
      "wind_speed": 5
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 0,
      "temperature": 77,
      "time": "2026-09-11T18:00:00Z",
      "type": "forecast",
      "wind_speed": 8
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 7,
      "temperature": 76,
      "time": "2026-09-11T19:00:00Z",
      "type": "forecast",
      "wind_speed": 9
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 7,
      "temperature": 76,
      "time": "2026-09-11T20:00:00Z",
      "type": "forecast",
      "wind_speed": 10
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 4,
      "temperature": 75,
      "time": "2026-09-11T21:00:00Z",
      "type": "forecast",
      "wind_speed": 10
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 7,
      "temperature": 73,
      "time": "2026-09-11T22:00:00Z",
      "type": "forecast",
      "wind_speed": 9
    },
    {
      "condition": "partly",
      "precipitation": 0,
      "precipitation_probability": 7,
      "temperature": 72,
      "time": "2026-09-11T23:00:00Z",
      "type": "forecast",
      "wind_speed": 7
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 7,
      "temperature": 71,
      "time": "2026-09-12T00:00:00Z",
      "type": "forecast",
      "wind_speed": 7
    },
    {
      "condition": "sun",
      "precipitation": 0,
      "precipitation_probability": 3,
      "temperature": 67,
      "time": "2026-09-12T01:00:00Z",
      "type": "forecast",
      "wind_speed": 4
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 3,
      "temperature": 63,
      "time": "2026-09-12T02:00:00Z",
      "type": "forecast",
      "wind_speed": 3
    },
    {
      "condition": "clear-night",
      "precipitation": 0,
      "precipitation_probability": 5,
      "temperature": 59,
      "time": "2026-09-12T03:00:00Z",
      "type": "forecast",
      "wind_speed": 5
    }
  ]
}
visual response
  • conditionclear-night
  • temperature71
  • wind_speed6
0″0″4 AM3 AM3 AM
hourly · precipitation
7%0%4 AM3 AM3 AM
hourly · precipitation_probability
78°49°4 AM3 AM3 AM
hourly · temperature
10 mph1 mph4 AM3 AM3 AM
hourly · wind_speed
0″0″9/99/159/22
daily · precipitation
54%0%9/99/159/22
daily · precipitation_probability
80°71°9/99/159/22
daily · temperature_max
60°39°9/99/159/22
daily · temperature_min
hourly · returned fields
condition clear-night · sun · cloudy · partlytype forecast
daily · returned fields
condition sun · cloudy · partly · drizzletype forecast

POST /v1/nowcast

Description

Returns the operational precipitation nowcast in one fixed shape: one-minute entries for the next two hours. It is refreshed on the radar cadence and cached independently from the broader forecast, so clients can poll it frequently without recomputing or transferring current, hourly, and daily sections.

Poll according to Retry-After when present. A pending status means the first radar-backed result is still warming; dry is a valid result with no active precipitation.

  • AuthBearer · nowcast:read · Pro+
  • Requestapplication/json
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
required object Coordinates and optional time zone for the location being queried.
timezone optional string auto or an IANA timezone Default: "auto".
units optional enum Allowed: "metric", "us", "si". Default: "metric". See Units & time.
optional object Optional per-dimension overrides for measurement units. See Units & time.
variables optional array<string> Minute variables to return. Defaults to every nowcast variable. At least 1 item. See Variables.
FieldPresenceTypeNotes
locationrequiredobjectNowcast coordinate
latituderequirednumber−90…90
longituderequirednumber−180…180
timezoneoptionalstring"auto" by default, or an IANA time zone
unitsoptionalstringDefaults to "metric" (°C, km/h, mm, hPa, m); also accepts "us" or "si"
unit_overridesoptionalobjectOverride individual measurement dimensions
temperatureoptionalenumdegC, degF, or K
wind_speedoptionalenumkm/h, mph, or m/s
precipitationoptionalenummm, in, or m
precipitation_rateoptionalenummm/h, in/h, or m/s
visibilityoptionalenumkm, mi, or m
pressureoptionalenumhPa, inHg, or Pa
elevationoptionalenumm or ft
variablesoptionalstring[]Minute variables to return; defaults to every nowcast variable
Response schema
FieldPresenceTypeNotes
always object Coordinates and optional time zone for the location being queried.
always object Unit system and per-dimension units for the returned values. See Units & time.
status always enum Allowed: "active", "dry", "pending".
start always ISO datetime Start of the requested or returned time window.
end always ISO datetime End of the requested or returned time window.
always array<object> Precipitation and confidence variables returned minute by minute.
updated_at nullable ISO datetime | null Time at which the returned data was generated.
stale always boolean Whether the response was served from resilient cache.
radar_pending always boolean Value for radar pending.
onset_uncertainty_minutes nullable integer | null Value for onset uncertainty minutes.
always array<object> Non-fatal notices about coverage, freshness, or substitutions.
Live console

Interactive example

Live
Request builder
request
curl 'https://api.weatherkind.com/v1/nowcast' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "location": {
      "latitude": 39.1911,
      "longitude": -106.8175
    },
    "timezone": "auto",
    "units": "us"
  }'
response JSON
{
  "start": "2026-09-10T03:26:00Z",
  "status": "dry",
  "location": {
    "timezone": "America/Denver",
    "latitude": 39.1911,
    "longitude": -106.8175,
    "forecast_elevation_m": 2413
  },
  "end": "2026-09-10T05:26:00Z",
  "minutes": [],
  "warnings": [],
  "units": {
    "elevation": "ft",
    "percentage": "%",
    "precipitation": "in",
    "precipitation_rate": "in/h",
    "pressure": "inHg",
    "system": "us",
    "temperature": "degF",
    "visibility": "mi",
    "wind_speed": "mph"
  },
  "stale": false,
  "updated_at": "2026-09-10T03:22:53Z",
  "radar_pending": false,
  "onset_uncertainty_minutes": null
}
visual response

Dry for the next two hours at this location.

POST /v1/route

Description

Forecasts a journey rather than a place. Give it a path and a schedule and it returns the weather at each point at the time you will actually be there — the storm over the pass at four o'clock, not the storm at the trailhead now.

Timing comes from one of two sources, never both. Either every waypoint carries its own time, which is what to send when your routing engine already knows the leg durations, or you send a departure_time and a travel model and the server paces the route. Hiking applies Naismith's rule with Langmuir's descent correction, so a climb changes the arrival times rather than being ignored.

Samples are cut by time, not distance, so a drive and a hike are both resolved where their conditions actually change. Your own waypoints are always returned, flagged waypoint: true. Alongside the samples, summary carries the extremes and the stretches that matter: where it rains, where it freezes, where it blows.

Coverage degrades per sample rather than per request. A sample whose region is still warming comes back with status: "unavailable" and a reason while the rest of the route resolves normally; a route running past the 384-hour horizon is truncated with a route_truncated warning and a coverage_end_time, not rejected.

  • AuthBearer · route:read · Pro+
  • Requestapplication/json
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
required array<object> At least 2 items.
departure_time optional string An ISO 8601 timestamp, or "now"
optional object How the route is paced when waypoints carry no times.
optional object Object containing interval.
timezone optional string auto or an IANA timezone Default: "auto".
units optional enum Allowed: "metric", "us", "si". Default: "metric". See Units & time.
optional object Optional per-dimension overrides for measurement units. See Units & time.
variables optional array<string> At least 1 item. See Variables.
Response schema
FieldPresenceTypeNotes
always object Object containing arrival time, coverage end time, departure time, distance, duration seconds, mode, sample interval, and timezone.
always object Unit system and per-dimension units for the returned values. See Units & time.
always array<object> List of records containing distance, elevation, index, latitude, longitude, status, time, timezone, type, unavailable reason, and waypoint, plus additional fields.
always object Object containing extremes and windows.
updated_at nullable ISO datetime | null Time at which the returned data was generated.
stale always boolean Whether the response was served from resilient cache.
always array<object> Non-fatal notices about coverage, freshness, or substitutions.
Live console

Interactive example

Live
Request builder
request
curl 'https://api.weatherkind.com/v1/route' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "path": [
      {
        "latitude": 39.1911,
        "longitude": -106.8175
      },
      {
        "latitude": 39.0972,
        "longitude": -106.9403
      },
      {
        "latitude": 39.0736,
        "longitude": -106.9556
      },
      {
        "latitude": 39.0475,
        "longitude": -106.986
      },
      {
        "latitude": 39.0264,
        "longitude": -107.0069
      },
      {
        "latitude": 38.9819,
        "longitude": -107.0353
      },
      {
        "latitude": 38.9583,
        "longitude": -106.9925
      },
      {
        "latitude": 38.8997,
        "longitude": -106.9656
      },
      {
        "latitude": 38.8697,
        "longitude": -106.9878
      }
    ],
    "departure_time": "now",
    "travel": {
      "mode": "hiking",
      "speed": 2.5
    },
    "sample": {
      "interval": "1h"
    },
    "units": "us",
    "variables": [
      "temperature",
      "condition",
      "precipitation_probability",
      "wind_gust"
    ]
  }'
response JSON
{
  "warnings": [
    {
      "code": "stale_data",
      "message": "One or more route segments are being served from stale data."
    }
  ],
  "units": {
    "distance": "mi",
    "elevation": "ft",
    "percentage": "%",
    "precipitation": "in",
    "precipitation_rate": "in/h",
    "pressure": "inHg",
    "system": "us",
    "temperature": "degF",
    "visibility": "mi",
    "wind_speed": "mph"
  },
  "route": {
    "mode": "hiking",
    "timezone": "America/Denver",
    "arrival_time": "2026-09-10T16:56:44Z",
    "distance": 28.28,
    "duration_seconds": 48667,
    "sample_interval": "1h",
    "coverage_end_time": null,
    "departure_time": "2026-09-10T03:25:37Z"
  },
  "stale": true,
  "updated_at": "2026-09-10T02:21:39Z",
  "summary": {
    "windows": [],
    "extremes": {
      "precipitation_probability_max": {
        "index": 18,
        "value": 3,
        "time": "2026-09-10T09:25:37-06:00",
        "latitude": 38.91884,
        "longitude": -106.97438
      },
      "temperature_max": {
        "index": 21,
        "value": 66.73,
        "time": "2026-09-10T10:56:44-06:00",
        "latitude": 38.8697,
        "longitude": -106.9878
      },
      "temperature_min": {
        "index": 8,
        "value": 36,
        "time": "2026-09-10T04:22:13-06:00",
        "latitude": 39.0736,
        "longitude": -106.9556
      },
      "wind_gust_max": {
        "index": 2,
        "value": 11.57,
        "time": "2026-09-09T23:25:37-06:00",
        "latitude": 39.15026,
        "longitude": -106.87097
      }
    }
  },
  "samples": [
    {
      "index": 0,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-09T21:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.1911,
      "longitude": -106.8175,
      "elevation": 7890.42,
      "distance": 0,
      "waypoint": true,
      "condition": "clear-night",
      "precipitation_probability": 0.43,
      "temperature": 65.72,
      "wind_gust": 8.72
    },
    {
      "index": 1,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-09T22:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.17068,
      "longitude": -106.84424,
      "elevation": 8123.36,
      "distance": 2.01,
      "waypoint": false,
      "condition": "clear-night",
      "precipitation_probability": 0.57,
      "temperature": 56.72,
      "wind_gust": 5.15
    },
    {
      "index": 2,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-09T23:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.15026,
      "longitude": -106.87097,
      "elevation": 10853.02,
      "distance": 4.02,
      "waypoint": false,
      "condition": "clear-night",
      "precipitation_probability": 1.43,
      "temperature": 50.72,
      "wind_gust": 11.57
    },
    {
      "index": 3,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T00:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.12983,
      "longitude": -106.89769,
      "elevation": 9169.95,
      "distance": 6.03,
      "waypoint": false,
      "condition": "clear-night",
      "precipitation_probability": 1.57,
      "temperature": 50.72,
      "wind_gust": 11.44
    },
    {
      "index": 4,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T01:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.10939,
      "longitude": -106.92438,
      "elevation": 9835.96,
      "distance": 8.04,
      "waypoint": false,
      "condition": "clear-night",
      "precipitation_probability": 1.57,
      "temperature": 44.57,
      "wind_gust": 6.15
    },
    {
      "index": 5,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T02:01:24-06:00",
      "timezone": "America/Denver",
      "latitude": 39.0972,
      "longitude": -106.9403,
      "elevation": 9662.07,
      "distance": 9.24,
      "waypoint": true,
      "condition": "clear-night",
      "precipitation_probability": 1,
      "temperature": 42.98,
      "wind_gust": 3.93
    },
    {
      "index": 6,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T02:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.09314,
      "longitude": -106.94293,
      "elevation": 10377.3,
      "distance": 9.55,
      "waypoint": false,
      "condition": "clear-night",
      "precipitation_probability": 1,
      "temperature": 42.57,
      "wind_gust": 2.72
    },
    {
      "index": 7,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T03:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.08309,
      "longitude": -106.94945,
      "elevation": 12365.49,
      "distance": 10.33,
      "waypoint": false,
      "condition": "clear-night",
      "precipitation_probability": 1,
      "temperature": 39,
      "wind_gust": 2.43
    },
    {
      "index": 8,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T04:22:13-06:00",
      "timezone": "America/Denver",
      "latitude": 39.0736,
      "longitude": -106.9556,
      "elevation": 12844.49,
      "distance": 11.07,
      "waypoint": true,
      "condition": "clear-night",
      "precipitation_probability": 1,
      "temperature": 36,
      "wind_gust": 3.37
    },
    {
      "index": 9,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T04:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.07208,
      "longitude": -106.95737,
      "elevation": 12224.41,
      "distance": 11.21,
      "waypoint": false,
      "condition": "clear-night",
      "precipitation_probability": 1,
      "temperature": 38.57,
      "wind_gust": 3
    },
    {
      "index": 10,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T05:20:34-06:00",
      "timezone": "America/Denver",
      "latitude": 39.0475,
      "longitude": -106.986,
      "elevation": 11742.13,
      "distance": 13.5,
      "waypoint": true,
      "condition": "clear-night",
      "precipitation_probability": 1.34,
      "temperature": 37,
      "wind_gust": 5.03
    },
    {
      "index": 11,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T05:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.04509,
      "longitude": -106.98839,
      "elevation": 11768.37,
      "distance": 13.71,
      "waypoint": false,
      "condition": "clear-night",
      "precipitation_probability": 1.43,
      "temperature": 37,
      "wind_gust": 5.28
    },
    {
      "index": 12,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T06:04:43-06:00",
      "timezone": "America/Denver",
      "latitude": 39.0264,
      "longitude": -107.0069,
      "elevation": 11532.15,
      "distance": 15.34,
      "waypoint": true,
      "condition": "clear-night",
      "precipitation_probability": 2,
      "temperature": 40,
      "wind_gust": 6.92
    },
    {
      "index": 13,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T06:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 39.01511,
      "longitude": -107.01411,
      "elevation": 11938.98,
      "distance": 16.21,
      "waypoint": false,
      "condition": "clear-night",
      "precipitation_probability": 2,
      "temperature": 40,
      "wind_gust": 3.72
    },
    {
      "index": 14,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T07:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 38.98269,
      "longitude": -107.03479,
      "elevation": 11476.38,
      "distance": 18.71,
      "waypoint": false,
      "condition": "sun",
      "precipitation_probability": 2,
      "temperature": 40.28,
      "wind_gust": 2.43
    },
    {
      "index": 15,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T07:27:05-06:00",
      "timezone": "America/Denver",
      "latitude": 38.9819,
      "longitude": -107.0353,
      "elevation": 11351.71,
      "distance": 18.77,
      "waypoint": true,
      "condition": "sun",
      "precipitation_probability": 2,
      "temperature": 40.35,
      "wind_gust": 2.45
    },
    {
      "index": 16,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T08:16:08-06:00",
      "timezone": "America/Denver",
      "latitude": 38.9583,
      "longitude": -106.9925,
      "elevation": 9521,
      "distance": 21.59,
      "waypoint": true,
      "condition": "sun",
      "precipitation_probability": 2.27,
      "temperature": 46.69,
      "wind_gust": 2.73
    },
    {
      "index": 17,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T08:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 38.95291,
      "longitude": -106.99003,
      "elevation": 9432.41,
      "distance": 21.98,
      "waypoint": false,
      "condition": "sun",
      "precipitation_probability": 2.43,
      "temperature": 50.27,
      "wind_gust": 2.57
    },
    {
      "index": 18,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T09:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 38.91884,
      "longitude": -106.97438,
      "elevation": 9799.87,
      "distance": 24.48,
      "waypoint": false,
      "condition": "sun",
      "precipitation_probability": 3,
      "temperature": 53.71,
      "wind_gust": 4.56
    },
    {
      "index": 19,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T09:59:19-06:00",
      "timezone": "America/Denver",
      "latitude": 38.8997,
      "longitude": -106.9656,
      "elevation": 9396.33,
      "distance": 25.89,
      "waypoint": true,
      "condition": "sun",
      "precipitation_probability": 3,
      "temperature": 58.93,
      "wind_gust": 7.93
    },
    {
      "index": 20,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T10:25:37-06:00",
      "timezone": "America/Denver",
      "latitude": 38.88596,
      "longitude": -106.97577,
      "elevation": 9153.54,
      "distance": 26.98,
      "waypoint": false,
      "condition": "sun",
      "precipitation_probability": 3,
      "temperature": 61.13,
      "wind_gust": 7
    },
    {
      "index": 21,
      "status": "ok",
      "type": "forecast",
      "time": "2026-09-10T10:56:44-06:00",
      "timezone": "America/Denver",
      "latitude": 38.8697,
      "longitude": -106.9878,
      "elevation": 8920.6,
      "distance": 28.28,
      "waypoint": true,
      "condition": "sun",
      "precipitation_probability": 3,
      "temperature": 66.73,
      "wind_gust": 7
    }
  ]
}
visual response
Drawing the route…
  • clear-night
  • sun

Each label reads arrival time, then temperature and conditions, then chance of precipitation and gust (degF, mph). Labels thin out where they would overlap; your own waypoints keep theirs.

POST /v1/airport-delay

Description

Predicts weather-attributed delay severity and cancellation risk for a supported US airport. With only airport and hours, it returns an hourly outlook for the next 1–48 hours and marginalizes risk across the airport's destination network. Add a scheduled departure and destination to score a specific flight instead.

Each prediction includes disruption and cancellation probabilities, an operated-flight delay distribution, data freshness, and probabilistic attribution across delay drivers and weather locations. destination_mode is exact for a named route and marginalized for the network outlook.

These probabilities cover BTS-attributed weather delay minutes and weather-coded cancellations, not all-cause disruption. Driver and cause values are calibrated statistical attribution, not proof of why a particular flight was disrupted.

  • AuthBearer · airport_delay:read
  • Requestapplication/json
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
airport required string Global IATA or ICAO code
destination optional string Optional supported destination airport, identified by IATA or ICAO code.
scheduled_departure_time optional ISO datetime Value for scheduled departure time.
scheduled_arrival_time optional ISO datetime Value for scheduled arrival time.
hours optional integer Range: 1…48. Default: 48.

destination requires scheduled_departure_time. scheduled_arrival_time additionally requires a destination and must be later than departure. Departure must be no more than one hour in the past and no more than 48 hours ahead. Without a departure time, hours controls the hourly outlook and defaults to 48.

Response schema
FieldPresenceTypeNotes
destination_mode always enum Allowed: "exact", "marginalized".
destination_coverage conditional number Range: 0…1.
arrival_time_estimated conditional boolean Value for arrival time estimated.
issued_at always ISO datetime Value for issued at.
always array<object> Airport-delay predictions for the requested departure or outlook hours.
always array<object> Non-fatal notices about coverage, freshness, or substitutions.
risk_basis always string Probabilities represent weather-attributed delay and cancellation risk, not all-cause disruption.
serving_mode always enum Climatology is served when no promoted weather-target model is available; candidate model residuals are never served. Allowed: "model", "climatology".
* conditional any Additional fields may appear in records.

Probability fields are decimals from 0 through 1. Inspect risk_basis, freshness, model version, and warnings before using a result operationally.

Implementation

Use this endpoint

Example

12-hour DEN outlook

curl 'https://api.weatherkind.com/v1/airport-delay' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "airport": "DEN",
    "hours": 12
  }'

POST /v1/airport-delay/accuracy

Description

Returns verification for a supported airport and model version. backtest reports out-of-sample historical evaluation; live reports predictions captured and scored after activation; and live_route_aware isolates predictions made with a specific destination. The modes remain separate so a strong backtest cannot obscure weak live performance.

A mode may return status: "insufficient_data" with a null verification score. That is a valid response, not zero skill. Lead buckets expose their sample counts and outcome-day coverage.

  • AuthBearer · airport_delay:read
  • Requestapplication/json
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
airport required string Supported US airport, identified by IATA or ICAO code.
window_months optional integer Range: 3…24. Default: 12.
model_version optional string Airport-delay model version used for this result.
Response schema
FieldPresenceTypeNotes
risk_basis always enum Allowed: "weather_attributed".
always object Out-of-sample model verification from the historical backtest.
always object Verification for predictions captured and scored after model activation.
conditional object Verification for predictions that used a specific destination.
always object Object keyed by the selected methodology variables.
updated_at always ISO datetime Time at which the returned data was generated.
* conditional any Additional fields may appear in records.
Implementation

Use this endpoint

Example

DEN verification

curl 'https://api.weatherkind.com/v1/airport-delay/accuracy' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "airport": "DEN",
    "window_months": 12
  }'

GET /v1/airport-delay/supported-airports

Description

Lists the US airports currently qualified for airport-delay prediction. Use this catalog to validate an origin or destination before presenting the prediction flow, and read feature_readiness to distinguish a ready model from a pipeline that is still bootstrapping or degraded.

An IATA or ICAO code absent from this catalog is rejected by the prediction and verification endpoints with 404; the service never silently substitutes another airport.

  • AuthBearer · airport_delay:read
  • RequestNo request body
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
request bodynonenoneThis endpoint is a GET
Response schema
FieldPresenceTypeNotes
always array<object> US airports currently qualified for airport-delay prediction.
count always integer Number of airports in the catalog.
feature_readiness always object Current feature-pipeline state: bootstrapping, ready, or degraded, with supporting detail.
updated_at always ISO datetime Time at which the catalog response was generated.
Implementation

Use this endpoint

Example

Supported airport catalog

curl 'https://api.weatherkind.com/v1/airport-delay/supported-airports' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY"

POST /v1/outlook

Description

Returns a long-range daily outlook for local dates 15 to 365 days ahead. It is designed for seasonal planning and broad temperature or precipitation tendencies, not precise event timing. Uncertainty is higher than /v1/forecast, so use the forecast for the next two weeks and the outlook for the period beyond it.

  • AuthBearer key
  • Requestapplication/json
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
required object Coordinates and optional time zone for the location being queried.
timezone optional string auto or an IANA timezone Default: "auto".
units optional enum Allowed: "metric", "us", "si". Default: "metric". See Units & time.
optional object Optional per-dimension overrides for measurement units. See Units & time.
start required local date First local date, inclusive
end required local date Last local date, inclusive
variables required array<string> At least 1 item. See Variables.
FieldPresenceTypeNotes
locationrequiredobjectOutlook coordinate
latituderequirednumber−90…90
longituderequirednumber−180…180
timezoneoptionalstring"auto" by default, or an IANA zone; defines local dates
unitsoptionalstringDefaults to "metric" (°C and mm); also accepts "us" or "si"
unit_overridesoptionalobjectOverride the measurement dimensions used by daily outlook variables
temperatureoptionalenumdegC, degF, or K
precipitationoptionalenummm, in, or m
startrequiredlocal dateFirst date returned, 15–365 days ahead
endrequiredlocal dateLast date returned, inclusive
variablesrequiredstring[]Daily temperature and precipitation variables
Response schema
FieldPresenceTypeNotes
always object Coordinates and optional time zone for the location being queried.
always object Unit system and per-dimension units for the returned values. See Units & time.
conditional object Current conditions at the requested location.
conditional array<object> Weather variables returned at 15-minute intervals.
conditional array<object> Weather variables returned at hourly intervals.
conditional array<object> Daily weather variables for the requested dates.
updated_at nullable ISO datetime | null Time at which the returned data was generated.
stale always boolean Whether the response was served from resilient cache.
always array<object> Non-fatal notices about coverage, freshness, or substitutions.
Live console

Interactive example

Live
Request builder
request
curl 'https://api.weatherkind.com/v1/outlook' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "location": {
      "latitude": 39.1911,
      "longitude": -106.8175
    },
    "units": "us",
    "start": "2026-09-25",
    "end": "2026-12-24",
    "variables": [
      "temperature_max",
      "temperature_min",
      "precipitation"
    ]
  }'
response JSON
{
  "location": {
    "timezone": "America/Denver",
    "latitude": 39.1911,
    "longitude": -106.8175,
    "forecast_elevation_m": 2405
  },
  "warnings": [
    {
      "code": "climatology_data",
      "message": "Climatology values are expected conditions for the time of year, not predictions for a specific day.",
      "interval": "1d"
    }
  ],
  "units": {
    "elevation": "ft",
    "percentage": "%",
    "precipitation": "in",
    "precipitation_rate": "in/h",
    "pressure": "inHg",
    "system": "us",
    "temperature": "degF",
    "visibility": "mi",
    "wind_speed": "mph"
  },
  "stale": false,
  "updated_at": "2026-09-10T02:21:31Z",
  "daily": [
    {
      "basis": "ensemble",
      "date": "2026-09-25",
      "precipitation": 0.06,
      "temperature_max": 59.09,
      "temperature_min": 38.93,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-09-26",
      "precipitation": 0.07,
      "temperature_max": 58.19,
      "temperature_min": 38.03,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-09-27",
      "precipitation": 0.06,
      "temperature_max": 57.29,
      "temperature_min": 36.23,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-09-28",
      "precipitation": 0.07,
      "temperature_max": 59.09,
      "temperature_min": 37.13,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-09-29",
      "precipitation": 0.11,
      "temperature_max": 57.65,
      "temperature_min": 38.21,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-09-30",
      "precipitation": 0.07,
      "temperature_max": 56.75,
      "temperature_min": 37.11,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-10-01",
      "precipitation": 0.07,
      "temperature_max": 56.75,
      "temperature_min": 36.61,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-10-02",
      "precipitation": 0.07,
      "temperature_max": 56.03,
      "temperature_min": 36.59,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-10-03",
      "precipitation": 0.06,
      "temperature_max": 55.31,
      "temperature_min": 35.33,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-10-04",
      "precipitation": 0.07,
      "temperature_max": 55.85,
      "temperature_min": 34.97,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-10-05",
      "precipitation": 0.11,
      "temperature_max": 54.95,
      "temperature_min": 35.51,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-10-06",
      "precipitation": 0.06,
      "temperature_max": 55.13,
      "temperature_min": 35.69,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble",
      "date": "2026-10-07",
      "precipitation": 0.15,
      "temperature_max": 52.79,
      "temperature_min": 35.15,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble_climatology_blend",
      "date": "2026-10-08",
      "precipitation": 0.06,
      "temperature_max": 53.78,
      "temperature_min": 33.03,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble_climatology_blend",
      "date": "2026-10-09",
      "precipitation": 0.07,
      "temperature_max": 54.72,
      "temperature_min": 32.88,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble_climatology_blend",
      "date": "2026-10-10",
      "precipitation": 0.07,
      "temperature_max": 56.81,
      "temperature_min": 33.03,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble_climatology_blend",
      "date": "2026-10-11",
      "precipitation": 0.07,
      "temperature_max": 55.9,
      "temperature_min": 33.12,
      "type": "climate_outlook"
    },
    {
      "basis": "ensemble_climatology_blend",
      "date": "2026-10-12",
      "precipitation": 0.09,
      "temperature_max": 57.25,
      "temperature_min": 31.35,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-13",
      "precipitation": 0.06,
      "temperature_max": 58.4,
      "temperature_min": 31.41,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-14",
      "precipitation": 0.07,
      "temperature_max": 58.33,
      "temperature_min": 31.62,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-15",
      "precipitation": 0.08,
      "temperature_max": 57.38,
      "temperature_min": 30.5,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-16",
      "precipitation": 0.06,
      "temperature_max": 58.61,
      "temperature_min": 30.74,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-17",
      "precipitation": 0.05,
      "temperature_max": 58.6,
      "temperature_min": 30.24,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-18",
      "precipitation": 0.07,
      "temperature_max": 57.76,
      "temperature_min": 29.99,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-19",
      "precipitation": 0.07,
      "temperature_max": 56.59,
      "temperature_min": 29.74,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-20",
      "precipitation": 0.04,
      "temperature_max": 57.64,
      "temperature_min": 30.4,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-21",
      "precipitation": 0.05,
      "temperature_max": 57.27,
      "temperature_min": 29.62,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-22",
      "precipitation": 0.03,
      "temperature_max": 57.15,
      "temperature_min": 29.79,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-23",
      "precipitation": 0.07,
      "temperature_max": 55.07,
      "temperature_min": 28.67,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-24",
      "precipitation": 0.1,
      "temperature_max": 57.06,
      "temperature_min": 28.07,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-25",
      "precipitation": 0.03,
      "temperature_max": 55.77,
      "temperature_min": 27.62,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-26",
      "precipitation": 0.09,
      "temperature_max": 54.71,
      "temperature_min": 26.33,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-27",
      "precipitation": 0.07,
      "temperature_max": 53.49,
      "temperature_min": 25.77,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-28",
      "precipitation": 0.05,
      "temperature_max": 52.77,
      "temperature_min": 26.1,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-29",
      "precipitation": 0.1,
      "temperature_max": 51.23,
      "temperature_min": 25.98,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-30",
      "precipitation": 0.04,
      "temperature_max": 50.65,
      "temperature_min": 24.92,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-10-31",
      "precipitation": 0.08,
      "temperature_max": 50.1,
      "temperature_min": 25.87,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-01",
      "precipitation": 0.09,
      "temperature_max": 49.28,
      "temperature_min": 25.97,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-02",
      "precipitation": 0.09,
      "temperature_max": 49.49,
      "temperature_min": 25.67,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-03",
      "precipitation": 0.07,
      "temperature_max": 50.05,
      "temperature_min": 24.81,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-04",
      "precipitation": 0.05,
      "temperature_max": 49.54,
      "temperature_min": 24.39,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-05",
      "precipitation": 0.07,
      "temperature_max": 50.37,
      "temperature_min": 24.75,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-06",
      "precipitation": 0.07,
      "temperature_max": 49.67,
      "temperature_min": 25.44,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-07",
      "precipitation": 0.01,
      "temperature_max": 49.43,
      "temperature_min": 24.74,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-08",
      "precipitation": 0.07,
      "temperature_max": 50.48,
      "temperature_min": 25.25,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-09",
      "precipitation": 0.15,
      "temperature_max": 49.98,
      "temperature_min": 23.58,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-10",
      "precipitation": 0.1,
      "temperature_max": 47.73,
      "temperature_min": 23.27,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-11",
      "precipitation": 0.08,
      "temperature_max": 47.39,
      "temperature_min": 22.41,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-12",
      "precipitation": 0.05,
      "temperature_max": 46.51,
      "temperature_min": 21.91,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-13",
      "precipitation": 0.05,
      "temperature_max": 46.23,
      "temperature_min": 20.86,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-14",
      "precipitation": 0.12,
      "temperature_max": 46.22,
      "temperature_min": 21.68,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-15",
      "precipitation": 0.06,
      "temperature_max": 44.37,
      "temperature_min": 19.96,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-16",
      "precipitation": 0.04,
      "temperature_max": 44.8,
      "temperature_min": 19.37,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-17",
      "precipitation": 0.06,
      "temperature_max": 45.1,
      "temperature_min": 21.01,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-18",
      "precipitation": 0.06,
      "temperature_max": 43.19,
      "temperature_min": 19.14,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-19",
      "precipitation": 0.05,
      "temperature_max": 42.61,
      "temperature_min": 18.58,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-20",
      "precipitation": 0.03,
      "temperature_max": 44.04,
      "temperature_min": 18.63,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-21",
      "precipitation": 0.06,
      "temperature_max": 45.19,
      "temperature_min": 18.85,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-22",
      "precipitation": 0.06,
      "temperature_max": 43.38,
      "temperature_min": 18.8,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-23",
      "precipitation": 0.06,
      "temperature_max": 42.95,
      "temperature_min": 17.38,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-24",
      "precipitation": 0.07,
      "temperature_max": 41.83,
      "temperature_min": 18.07,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-25",
      "precipitation": 0.06,
      "temperature_max": 41.05,
      "temperature_min": 16.67,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-26",
      "precipitation": 0.1,
      "temperature_max": 39.33,
      "temperature_min": 16.02,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-27",
      "precipitation": 0.12,
      "temperature_max": 37.54,
      "temperature_min": 14.55,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-28",
      "precipitation": 0.09,
      "temperature_max": 38.58,
      "temperature_min": 13.7,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-29",
      "precipitation": 0.08,
      "temperature_max": 37.58,
      "temperature_min": 15.55,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-11-30",
      "precipitation": 0.04,
      "temperature_max": 37.81,
      "temperature_min": 14.14,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-01",
      "precipitation": 0.08,
      "temperature_max": 37.33,
      "temperature_min": 14.41,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-02",
      "precipitation": 0.07,
      "temperature_max": 37.72,
      "temperature_min": 14.1,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-03",
      "precipitation": 0.06,
      "temperature_max": 38.43,
      "temperature_min": 14.76,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-04",
      "precipitation": 0.06,
      "temperature_max": 38.95,
      "temperature_min": 14.19,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-05",
      "precipitation": 0.04,
      "temperature_max": 38.4,
      "temperature_min": 13.75,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-06",
      "precipitation": 0.07,
      "temperature_max": 37.91,
      "temperature_min": 13.86,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-07",
      "precipitation": 0.08,
      "temperature_max": 37.33,
      "temperature_min": 13.81,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-08",
      "precipitation": 0.06,
      "temperature_max": 36.94,
      "temperature_min": 12.97,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-09",
      "precipitation": 0.09,
      "temperature_max": 35.89,
      "temperature_min": 12.43,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-10",
      "precipitation": 0.04,
      "temperature_max": 35.53,
      "temperature_min": 11.38,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-11",
      "precipitation": 0.06,
      "temperature_max": 36.49,
      "temperature_min": 13.97,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-12",
      "precipitation": 0.05,
      "temperature_max": 37.15,
      "temperature_min": 12.94,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-13",
      "precipitation": 0.06,
      "temperature_max": 36.49,
      "temperature_min": 12.45,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-14",
      "precipitation": 0.09,
      "temperature_max": 34.86,
      "temperature_min": 12.39,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-15",
      "precipitation": 0.06,
      "temperature_max": 34.66,
      "temperature_min": 11.44,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-16",
      "precipitation": 0.05,
      "temperature_max": 34.09,
      "temperature_min": 9.65,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-17",
      "precipitation": 0.07,
      "temperature_max": 34.26,
      "temperature_min": 10.98,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-18",
      "precipitation": 0.03,
      "temperature_max": 35.08,
      "temperature_min": 10.63,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-19",
      "precipitation": 0.07,
      "temperature_max": 34.41,
      "temperature_min": 11.57,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-20",
      "precipitation": 0.06,
      "temperature_max": 35.88,
      "temperature_min": 12.47,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-21",
      "precipitation": 0.08,
      "temperature_max": 35.88,
      "temperature_min": 12.91,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-22",
      "precipitation": 0.09,
      "temperature_max": 33.81,
      "temperature_min": 11.6,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-23",
      "precipitation": 0.08,
      "temperature_max": 33.87,
      "temperature_min": 11.06,
      "type": "climate_outlook"
    },
    {
      "basis": "climatology",
      "date": "2026-12-24",
      "precipitation": 0.09,
      "temperature_max": 32.69,
      "temperature_min": 7.71,
      "type": "climate_outlook"
    }
  ]
}
visual response
0″0″9/2511/912/24
daily · precipitation
59°33°9/2511/912/24
daily · temperature_max
39°9/2511/912/24
daily · temperature_min
daily · returned fields
type climate_outlook

POST /v1/historical

Description

Returns field-selectable daily weather observations for completed local dates. Use it for backtesting, event reconstruction, and observed weather history—not forecast-performance metrics, which come from /v1/accuracy. Coverage depends on the location, date, and variable; missing observations remain in the response as null with structured warnings.

  • AuthBearer · historical:read
  • Requestapplication/json
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
required object Coordinates and optional time zone for the location being queried.
timezone optional string auto or an IANA timezone Default: "auto".
units optional enum Allowed: "metric", "us", "si". Default: "metric". See Units & time.
optional object Optional per-dimension overrides for measurement units. See Units & time.
start required local date First local date, inclusive
end required local date Last local date, inclusive
variables required array<string> At least 1 item. See Historical variables.
include optional array<string> Default: [].
FieldPresenceTypeNotes
locationrequiredobjectObservation coordinate
latituderequirednumber−90…90
longituderequirednumber−180…180
timezoneoptionalstring"auto" by default, or an IANA zone; defines local calendar days
unitsoptionalstringDefaults to "metric" (°C and mm); also accepts "us" or "si". Use unit_overrides for individual dimensions
unit_overridesoptionalobjectOverride historical measurement dimensions
temperatureoptionalenumdegC, degF, or K
precipitationoptionalenummm, in, or m
startrequiredlocal dateFirst completed local date, inclusive
endrequiredlocal dateLast completed local date, inclusive; the range may span up to 50 calendar years
variablesrequiredstring[]One or more historical variables; at most 25,000 scalar values
includeoptionalstring[]"stations" and/or "sources" adds observation provenance

Requests containing air_quality_index may span at most 366 days. Other variables may span up to 50 calendar years, subject to the 25,000-value request limit.

Response schema
FieldPresenceTypeNotes
always object Coordinates and optional time zone for the location being queried.
always object Unit system and per-dimension units for the returned values. See Units & time.
start always local date First local date, inclusive
end always local date Last local date, inclusive
always array<object> Daily weather variables for the requested dates.
conditional array<object> Data-source provenance for the returned observations.
conditional array<object> Weather stations contributing observations to the result.
updated_at nullable ISO datetime | null Time at which the returned data was generated.
stale always boolean Whether the response was served from resilient cache.
always array<object> Non-fatal notices about coverage, freshness, or substitutions.
Live console

Interactive example

Live
Request builder
daily variables
request
curl 'https://api.weatherkind.com/v1/historical' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "location": {
      "latitude": 39.1911,
      "longitude": -106.8175
    },
    "timezone": "auto",
    "units": "us",
    "start": "2025-06-01",
    "end": "2025-07-01",
    "variables": [
      "temperature_max",
      "temperature_min",
      "precipitation",
      "rain_total",
      "snow_total"
    ],
    "include": [
      "stations",
      "sources"
    ]
  }'
response JSON
{
  "start": "2025-06-01",
  "sources": [
    {
      "id": "ghcn_daily",
      "label": "NOAA Global Historical Climatology Network Daily",
      "variables": [
        "temperature_max",
        "temperature_min",
        "precipitation",
        "rain_total",
        "snow_total"
      ],
      "kind": "station_observation"
    },
    {
      "id": "acis_station_observations",
      "label": "Applied Climate Information System station observations",
      "variables": [
        "temperature_max",
        "temperature_min",
        "precipitation"
      ],
      "kind": "station_observation"
    }
  ],
  "location": {
    "timezone": "America/Denver",
    "latitude": 39.1911,
    "longitude": -106.8175
  },
  "end": "2025-07-01",
  "warnings": [],
  "units": {
    "precipitation": "in",
    "system": "us",
    "temperature": "degF"
  },
  "stale": false,
  "updated_at": "2026-09-09T18:17:15Z",
  "stations": [
    {
      "code": "93073 1",
      "name": "ASPEN PITKIN COUNTY AP SARDY FIELD",
      "location": {
        "latitude": 39.22994,
        "longitude": -106.87052
      },
      "elevation_m": 2339.9496,
      "distance_km": 6.286,
      "observation_source": "acis_station_observations",
      "observed_variables": [
        "precipitation",
        "temperature_max",
        "temperature_min"
      ]
    },
    {
      "code": "USC00050372",
      "name": "ASPEN 1SW",
      "location": {
        "latitude": 39.1853,
        "longitude": -106.8381
      },
      "elevation_m": 2491.7,
      "distance_km": 1.794,
      "observation_source": "ghcn_daily",
      "observed_variables": [
        "precipitation",
        "rain_total",
        "snow_total",
        "temperature_max",
        "temperature_min"
      ]
    }
  ],
  "daily": [
    {
      "date": "2025-06-01",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 79.24,
      "temperature_min": 43.24
    },
    {
      "date": "2025-06-02",
      "precipitation": 0.27,
      "rain_total": 0.27,
      "snow_total": 0,
      "temperature_max": 71.24,
      "temperature_min": 43.24
    },
    {
      "date": "2025-06-03",
      "precipitation": 0.07,
      "rain_total": 0.07,
      "snow_total": 0,
      "temperature_max": 67.24,
      "temperature_min": 45.24
    },
    {
      "date": "2025-06-04",
      "precipitation": 0.01,
      "rain_total": 0.01,
      "snow_total": 0,
      "temperature_max": 65.24,
      "temperature_min": 39.24
    },
    {
      "date": "2025-06-05",
      "precipitation": 0.01,
      "rain_total": 0.01,
      "snow_total": 0,
      "temperature_max": 61.24,
      "temperature_min": 37.24
    },
    {
      "date": "2025-06-06",
      "precipitation": 0.07,
      "rain_total": 0.07,
      "snow_total": 0,
      "temperature_max": 59.24,
      "temperature_min": 37.24
    },
    {
      "date": "2025-06-07",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 71.24,
      "temperature_min": 33.24
    },
    {
      "date": "2025-06-08",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 74.24,
      "temperature_min": 41.24
    },
    {
      "date": "2025-06-09",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 77.24,
      "temperature_min": 40.24
    },
    {
      "date": "2025-06-10",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 74.95,
      "temperature_min": 45.97
    },
    {
      "date": "2025-06-11",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 76.24,
      "temperature_min": 45.24
    },
    {
      "date": "2025-06-12",
      "precipitation": 0.03,
      "rain_total": 0.03,
      "snow_total": 0,
      "temperature_max": 80.24,
      "temperature_min": 46.24
    },
    {
      "date": "2025-06-13",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 80.24,
      "temperature_min": 49.24
    },
    {
      "date": "2025-06-14",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 82.24,
      "temperature_min": 43.24
    },
    {
      "date": "2025-06-15",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 84.24,
      "temperature_min": 45.24
    },
    {
      "date": "2025-06-16",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 83.24,
      "temperature_min": 45.24
    },
    {
      "date": "2025-06-17",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 74.24,
      "temperature_min": 46.24
    },
    {
      "date": "2025-06-18",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 78.24,
      "temperature_min": 40.24
    },
    {
      "date": "2025-06-19",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 84.24,
      "temperature_min": 46.24
    },
    {
      "date": "2025-06-20",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 84.24,
      "temperature_min": 47.24
    },
    {
      "date": "2025-06-21",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 84.24,
      "temperature_min": 47.24
    },
    {
      "date": "2025-06-22",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 76.24,
      "temperature_min": 43.24
    },
    {
      "date": "2025-06-23",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 80.24,
      "temperature_min": 37.24
    },
    {
      "date": "2025-06-24",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 76.24,
      "temperature_min": 43.24
    },
    {
      "date": "2025-06-25",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 76.24,
      "temperature_min": 45.24
    },
    {
      "date": "2025-06-26",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 79.24,
      "temperature_min": 38.24
    },
    {
      "date": "2025-06-27",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 81.24,
      "temperature_min": 43.24
    },
    {
      "date": "2025-06-28",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 83.24,
      "temperature_min": 44.24
    },
    {
      "date": "2025-06-29",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 81.24,
      "temperature_min": 47.24
    },
    {
      "date": "2025-06-30",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 83.24,
      "temperature_min": 42.24
    },
    {
      "date": "2025-07-01",
      "precipitation": 0,
      "rain_total": 0,
      "snow_total": 0,
      "temperature_max": 79.24,
      "temperature_min": 48.24
    }
  ]
}
visual response
0″0″6/16/167/1
daily · precipitation
006/16/167/1
daily · rain_total
006/16/167/1
daily · snow_total
84°59°6/16/167/1
daily · temperature_max
49°33°6/16/167/1
daily · temperature_min

POST /v1/alerts

Description

Returns active public weather alerts that apply to the requested coordinate. Each alert includes CAP-aligned severity, urgency, certainty, onset and expiration times, instructions, and the issuing authority; request geometry when you also need the affected polygon. A successful response with an empty alerts array means no public alert is active at that point.

  • AuthBearer key
  • Requestapplication/json
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
required object Coordinates and optional time zone for the location being queried.
include optional array<string> Default: [].
FieldPresenceTypeNotes
locationrequiredobjectAlert lookup coordinate
latituderequirednumber−90…90
longituderequirednumber−180…180
includeoptionalstring[]Add "geometry" to return the GeoJSON polygon
Response schema
FieldPresenceTypeNotes
always object Coordinates and optional time zone for the location being queried.
always array<object> Active public alerts affecting the requested location.
updated_at always ISO datetime Time at which the returned data was generated.
stale always boolean Whether the response was served from resilient cache.
always array<object> Non-fatal notices about coverage, freshness, or substitutions.
Live console

Interactive example

Live
Request builder
request
curl 'https://api.weatherkind.com/v1/alerts' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "location": {
      "latitude": 39.1911,
      "longitude": -106.8175
    }
  }'
response JSON
{
  "location": {
    "latitude": 39.1911,
    "longitude": -106.8175
  },
  "warnings": [],
  "stale": false,
  "updated_at": "2026-09-10T03:25:38Z",
  "alerts": []
}
visual response

No active alerts at this point right now. Quiet skies. Try coordinates under a storm.

POST /v1/accuracy

Description

Returns historical forecast-performance statistics, not current weather. Query a coordinate, weather region, or the full verified network to see error and skill by interval and lead time, scored against quality-controlled station observations. Use it to understand expected uncertainty, compare Weatherkind with a persistence baseline, and qualify decisions made from /v1/forecast.

  • AuthBearer · accuracy:read
  • Requestapplication/json
  • Response200 · JSON
Request parameters
FieldPresenceTypeNotes
required object Geographic scope used to select the accuracy evaluation area.
days optional integer Range: 7…365. Default: 30.
units optional enum Allowed: "metric", "us", "si". Default: "metric". See Units & time.
optional object Optional per-dimension overrides for measurement units. See Units & time.
optional object Forecast variables returned minute by minute for accuracy scoring.
optional object Weather variables returned at hourly intervals.
optional object Daily weather variables for the requested dates.
compare_to optional array<string> Default: [].
include optional array<string> Default: [].
FieldPresenceTypeNotes
scoperequiredobjectEvaluation scope
typerequiredenum"local", "region", or "network"
locationlocal onlyobjectCoordinate evaluated for local scope
latituderequirednumber−90…90
longituderequirednumber−180…180
regionregion onlystringRegion id
daysoptionalintegerTrailing window, 7–365; default 30
unitsoptionalstringDefaults to "metric" (°C and mm); also accepts "us" or "si". Dimension overrides are supported
unit_overridesoptionalobjectOverride accuracy metric dimensions
temperatureoptionalenumdegC, degF, or K
precipitationoptionalenummm, in, or m
minutelyat least oneobjectMinute-forecast accuracy section
lead_minutesoptionalinteger[]Minute leads to evaluate; defaults are listed below
variablesrequiredstring[]Minutely variables to evaluate
hourlyat least oneobjectHourly-forecast accuracy section
lead_hoursoptionalinteger[]Hourly leads to evaluate; defaults are listed below
variablesrequiredstring[]Hourly variables to evaluate
dailyat least oneobjectDaily-forecast accuracy section
lead_daysoptionalinteger[]Daily leads to evaluate; defaults are listed below
variablesrequiredstring[]Daily variables to evaluate
compare_tooptionalstring[]["persistence"] adds baseline comparisons and skill scores
includeoptionalstring[]["stations"] adds verifying stations for local scope

Sections, leads & variables

SectionDefault leadsVariables
1m5, 15, 30, 60, 90, 115 minprecipitation, precipitation_probability
1h0, 1, 2, 3, 6, 12, 24 htemperature, precipitation fields
1d1–14 daysdaily temperature and precipitation fields
Response schema
FieldPresenceTypeNotes
always object Geographic scope used to select the accuracy evaluation area.
always object Date window and data cutoff used for this evaluation.
always object Availability and verification coverage for this accuracy result.
always object Unit system and per-dimension units for the returned values. See Units & time.
conditional array<object> Forecast variables returned minute by minute for accuracy scoring.
conditional array<object> Weather variables returned at hourly intervals.
conditional array<object> Daily weather variables for the requested dates.
conditional array<object> Weather stations contributing observations to the result.
updated_at always ISO datetime Time at which the returned data was generated.
stale always boolean Whether the response was served from resilient cache.
always array<object> Non-fatal notices about coverage, freshness, or substitutions.

Insufficient verified coverage is returned as a successful response with coverage.available: false, not as an error.

Live console

Interactive example

Live
Request builder
request
curl 'https://api.weatherkind.com/v1/accuracy' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "type": "local",
      "location": {
        "latitude": 39.1911,
        "longitude": -106.8175
      }
    },
    "days": 30,
    "units": "us",
    "hourly": {
      "lead_hours": [
        1,
        6,
        12,
        24
      ],
      "variables": [
        "temperature",
        "precipitation_probability"
      ]
    },
    "daily": {
      "variables": [
        "temperature_max",
        "temperature_min"
      ]
    },
    "compare_to": [
      "persistence"
    ],
    "include": [
      "stations"
    ]
  }'
response JSON
{
  "scope": {
    "type": "local",
    "location": {
      "latitude": 39.1911,
      "longitude": -106.8175
    }
  },
  "evaluation_period": {
    "start": "2026-06-30",
    "end": "2026-07-30",
    "data_through": "2026-07-29",
    "days": 30
  },
  "coverage": {
    "available": true,
    "basis": "nearby_verified_areas",
    "radius_km": 16.1,
    "verified_areas": 18
  },
  "units": {
    "system": "us",
    "temperature": "degF",
    "precipitation": "in"
  },
  "hourly": [
    {
      "lead_hours": 1,
      "temperature": {
        "mean_absolute_error": 1.8,
        "bias": -0.2,
        "root_mean_square_error": 2.4,
        "samples": 2160,
        "comparisons": {
          "persistence": {
            "mean_absolute_error": 3.1,
            "samples": 2160,
            "skill_score": 0.42
          }
        }
      },
      "precipitation_probability": {
        "brier_score": 0.08,
        "bias": 0.01,
        "samples": 2160
      }
    }
  ],
  "daily": [
    {
      "lead_days": 1,
      "temperature_max": {
        "mean_absolute_error": 2,
        "bias": -0.2,
        "root_mean_square_error": 3.1,
        "samples": 114
      },
      "temperature_min": {
        "mean_absolute_error": 2.5,
        "bias": -0.8,
        "root_mean_square_error": 3.9,
        "samples": 114
      }
    }
  ],
  "stations": [
    {
      "id": "KASE",
      "name": "Aspen-Pitkin Airport",
      "source": "nws",
      "latitude": 39.2232,
      "longitude": -106.8687,
      "distance_miles": 3.5,
      "elevation_ft": 7815
    }
  ],
  "updated_at": "2026-07-30T17:04:11Z",
  "stale": false,
  "warnings": []
}
visual response

hourly temperature · mean absolute error by lead · 30-day window through 2026-07-29

  • +1 h ±1.8° 42% better

Weatherkind persistence baseline

GET /v1/geocode

Description

Searches for places by name and returns coordinates suitable for the weather endpoints. Results include administrative context and an IANA time zone when available, so a user-entered place can be resolved before requesting a forecast or historical observations.

  • AuthBearer key
  • RequestQuery string
  • Response200 · JSON array
Request parameters
FieldPresenceTypeNotes
qrequiredstringPlace name to search for, for example Aspen or Aspen, Colorado
Response schema
FieldPresenceTypeNotes
always array<object> Matching places, ordered by relevance; empty when no place matches.
Live console

Interactive example

Live
Request builder
request
curl 'https://api.weatherkind.com/v1/geocode?q=Aspen' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY"
response JSON
[
  {
    "name": "Aspen",
    "admin1": "Colorado",
    "country": "United States",
    "latitude": 39.1911,
    "longitude": -106.8175,
    "timezone": "America/Denver"
  }
]
visual response
  • Aspen Colorado, United States 39.1911, -106.8175

GET /v1/map-tiles/{layer}/{z}/{x}/{y}

Description

Returns a PNG raster tile for an XYZ map coordinate, rather than a JSON document. Use these tiles as visual overlays in MapLibre, Leaflet, or MapKit for radar, temperature, air quality, smoke, and severe-weather layers. Tiles are cacheable and intended for map rendering; query /v1/forecast when you need numeric weather values instead.

  • AuthBearer key
  • RequestPath parameters
  • Response200 · image/png
Request parameters
FieldPresenceTypeNotes
layerrequiredenumradar, precipitation-global, radar-future, radar-site, temperature, temperature-global, air-quality, air-quality-global, smoke, fire-smoke, smoke-global, fire-global, or alerts
zrequiredintegerXYZ zoom level
xrequiredintegerXYZ horizontal tile coordinate
yrequiredintegerXYZ vertical tile coordinate
request bodynonenoneThis endpoint is a GET
Response schema
FieldPresenceTypeNotes
HTTP status always 200 Successful tile response.
Content-Type always image/png Raster PNG payload.
Cache-Control always header Layer-appropriate public cache policy.
ETag always header Validator for conditional tile requests.
X-Weatherkind-Tile-Cache always header Origin tile-cache status.
body always binary Raster PNG tile bytes, not JSON.
Implementation

Use this endpoint

Example

Request

curl 'https://api.weatherkind.com/v1/map-tiles/radar/7/26/49' \
  -H "Authorization: Bearer $WEATHERKIND_API_KEY" \
  --output 'radar.png'

Variables

Which variables each forecast section accepts. Requesting a variable outside its supported section is a 422; the authoritative live list is GET /v1/forecast/variables.

Variable current15m1h1d
temperature
temperature_max
temperature_min
apparent_temperature
condition
precipitation
precipitation_probability
rain_total
snow_total
wind_speed
wind_gust
wind_direction
humidity
dew_point
pressure
cloud_cover
uv_index
air_quality_index
sunrise
sunset

Historical variables

POST /v1/historical accepts the variables below directly. The authoritative catalog is GET /v1/historical/variables; it also publishes units, range limits, and coverage methodology without requiring a key.

VariableKindUnitsMeaning
temperature_maxobservationdegC · degF · KMaximum near-surface temperature for the local day, adjusted to effective elevation.
temperature_minobservationdegC · degF · KMinimum near-surface temperature for the local day, adjusted to effective elevation.
precipitationobservationmm · in · mTotal liquid-equivalent precipitation for the local day.
rain_totalderivedmm · in · mTotal liquid precipitation; null when observed phase cannot be separated defensibly.
snow_totalobservationmm · in · mTotal observed snowfall depth, not snow-water equivalent.
air_quality_indexobservation or analysisUS EPA AQIDaily AQI where available; provenance and modeled-analysis use are exposed in sources and warnings.

Forecast sections

Name the resolution you need. The server handles alignment and turns readable counts into concrete forecast records:

SectionRequest shapeWhat it returns
current { "variables": ["temperature", "condition"] } One flat object at request time.
quarter_hourly { "hours": 6, "variables": […] } Six hours at 15-minute resolution.
hourly { "hours": 48, "past_hours": 6, "variables": […] } Six recent hours plus 48 forecast hours.
daily { "days": 10, "variables": […] } Ten local calendar days.

For a specific daily window, replace days with local start and end dates. Both dates are inclusive, so start equal to end requests a single day. Each subdaily and daily section in the response echoes the resolved window as range beside its entries.

Conditions

condition is a closed enum of fourteen strings: stable identifiers you can map to your own icons:

  • sun
  • partly
  • cloudy
  • drizzle
  • rain
  • heavy-rain
  • thunderstorm
  • snow
  • blizzard
  • sleet
  • mixed
  • clear-night
  • cloudy-night
  • sunrise

Units & time

  • Unit systems. If omitted, units defaults to "metric" (°C, km/h, mm, hPa, m). You can instead request "us" (°F, mph, in, inHg, ft) or "si" (K, m/s, m, Pa). Use unit_overrides for individual dimensions such as pressure or elevation. The response echoes the units it used.
  • Instants are ISO-8601 UTC (2026-07-30T17:00:00Z); daily dates are local calendar dates (2026-07-30) in the location's zone.
  • Forecast horizons are counts: hours, past_hours, and days. The server owns timestamp alignment. Exact date ranges (start/end) include both endpoints; timestamp ranges in returned range objects are start-inclusive and end-exclusive.

Errors

Every endpoint uses the same HTTP status vocabulary. JSON errors use a machine-checkable problem-details shape; validation responses also identify the exact request field in errors[].path and provide a stable errors[].code.

{ "type": "https://api.weatherkind.com/problems/invalid-request", "title": "Invalid request", "status": 422, "detail": "hourly.hours must be an integer from 1 through 384" }
StatusMeaningApplies to
400Invalid map-tile coordinate or layer-specific query parameter.Map tiles
401Missing or invalid API key.Authenticated endpoints
403The key is valid but does not include the endpoint's required scope.Scoped endpoints
404Unknown endpoint path or map-tile layer, or an unsupported airport code.All endpoints
422Validation failed: a field is missing, malformed, out of range, or unsupported. The problem response identifies the exact field path.JSON and query endpoints
429Rate limit exceeded. Honor the Retry-After header before retrying.All endpoints
502The upstream tile provider is temporarily unavailable.Map tiles
503A required data provider is temporarily unavailable. Retry after the supplied Retry-After interval when present.Data endpoints
5xxAn unexpected server failure occurred. Retry with exponential backoff; weather responses may set stale: true when cached data can be served safely.All endpoints

An empty result or unavailable data is not always an error. Geocoding can return an empty array, alerts can return no active alerts, and accuracy can return coverage.available: false with 200.

Rate limits

Limits follow your plan. Exceeding them returns 429 with a Retry-After header. Back off for that many seconds rather than retrying immediately.

PlanQuotaThroughputOverage
Free1,000 calls / day1 request / secnot applicable
Pro300,000 calls / mo included10 requests / sec$0.25 per extra 1,000 calls
Enterprisecustom volumecustomcommitted-use pricing

A forecast request with several named sections and many variables is still one call. Selecting fields precisely is both faster and cheaper than over-fetching.

Production guide

This is the operational contract for integrating Weatherkind into a production service. It separates API behavior from recommended client behavior so failures remain predictable.

Request lifecycle

ConcernContractClient responsibility
Transport HTTPS at https://api.weatherkind.com. Reject insecure URLs and use a finite request timeout.
Authentication Authorization: Bearer {api_key}. Keep keys on a server or edge worker, never in browser or mobile client code.
Content JSON request and response bodies use application/json. Map tiles return image/png. Send Content-Type: application/json for JSON POST requests.
Idempotency Documented GET requests and data-retrieval POST requests are read-only and safe to repeat. No idempotency key is required; retry only under the rules below.
Timeouts The API does not prescribe one client timeout for every workload. Use a finite timeout appropriate to the product. Ten to thirty seconds is a reasonable starting range.

Retries and backoff

ResultRetry?Recommended action
422NoCorrect the field identified by the problem response.
401NoReplace or rotate the missing or invalid credential.
403NoCheck the key scope and plan entitlement.
404NoCorrect the endpoint path or tile coordinates.
429YesWait for the Retry-After duration before trying again.
5xx or network timeoutYesUse exponential backoff with jitter. Start near 500 ms, double each attempt, and stop after three retries unless the workload requires otherwise.

Never retry all failures in a tight loop. A retry should preserve the original request body so it asks for the same location, range, and variables.

Freshness and caching

  • Generation time. JSON data responses include updated_at. Use it to show when the returned data was produced.
  • Resilient responses. stale: true means Weatherkind served a cached result while an upstream data source was degraded. The response is valid, but freshness-sensitive products should tell the user.
  • Warnings. Inspect warnings even on 200. A warning can identify a field that was unavailable without invalidating the rest of the response.
  • HTTP caching. Respect any Cache-Control response header. Map tiles are publicly cacheable for five minutes. Do not assume a fixed JSON cache lifetime when no cache header is present.
  • Client caches. Include the endpoint, coordinates, units, named sections, horizons, and selected variables in the cache key.

Logging and support

Log the endpoint, HTTP status, UTC request time, latency, updated_at, stale, and warning codes. For failed validation, log errors.detail. Never log the bearer token. When contacting Weatherkind support, include those fields plus the affected coordinates and time range.

Availability and safe degradation

PlanAvailability commitmentRecommended fallback
FreeNo contractual SLACache the most recent acceptable response and communicate its age.
Pro99.9% uptime SLAUse bounded retries, then fall back to the most recent response when the product permits.
Enterprise99.99% uptime SLAAgree on workload-specific escalation and continuity requirements with Weatherkind.

Weather is decision data, not a guarantee. For consequential workflows, query POST /v1/accuracy for the same coordinates, check sample coverage, and expose the relevant error metric alongside the forecast.

Versioning

Paths are versioned (/v1/…) and changes within a version are additive only: field names, units, and enums don't move. The machine-readable contract is GET /v1/openapi.json (OpenAPI 3.1). The integration you write today keeps working.

For AI agents

This page is static HTML. Read it whole. The condensed plain-text version lives at weatherkind.com/llms.txt, and the typed contract at GET /v1/openapi.json. The API is shaped like a tool call, so a minimal definition is short:

{
  "name": "get_weather",
  "description": "Verified forecast for a coordinate. Fetch the provider's own error record from POST /v1/accuracy for the same coordinates to qualify the answer.",
  "input_schema": {
    "type": "object",
    "properties": {
      "latitude":  { "type": "number" },
      "longitude": { "type": "number" },
      "section":   { "enum": ["current", "quarter_hourly", "hourly", "daily"] },
      "variables": { "type": "array", "items": { "type": "string" } }
    },
    "required": ["latitude", "longitude", "section", "variables"]
  }
}

You can check forecast accuracy before recommending the integration: POST /v1/accuracy returns our verified error record for the exact coordinates you plan to forecast, with compare_to: ["persistence"] giving a skill score against a naive baseline. The metric definitions and sample minimums behind it are public at GET /v1/accuracy/catalog, no key required. Accuracy queries are available on Pro and Enterprise plans.