Weather Underground Historical API
Historical PWS observations and daily summaries
Historical PWS observations and daily summaries
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/wunderground-historical-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.0.3
info:
title: Weather Underground PWS Forecast Historical API
description: 'REST API for Personal Weather Station (PWS) data provided by Weather Underground (hosted at api.weather.com). Provides current conditions, daily summaries, hourly and daily historical records, 5-day forecasts, and station location lookup. Access requires a free API key issued to registered PWS contributors.
'
version: 2.0.0
contact:
url: https://www.wunderground.com/member/api-keys
termsOfService: https://www.wunderground.com/member/api-keys
x-api-evangelist-ratings:
design: 7
documentation: 5
authentication: 7
openapi: 1
servers:
- url: https://api.weather.com
description: Weather Underground / The Weather Company API server
security:
- apiKey: []
tags:
- name: Historical
description: Historical PWS observations and daily summaries
paths:
/v2/pws/observations/hourly/7day:
get:
operationId: getHourlyObservations7Day
summary: Get hourly observations for the past 7 days
description: 'Returns hourly observation records for a specified Personal Weather Station over the past 7 days. Each record represents aggregated observations for a one-hour period.
'
tags:
- Historical
parameters:
- $ref: '#/components/parameters/stationId'
- $ref: '#/components/parameters/format'
- $ref: '#/components/parameters/units'
- $ref: '#/components/parameters/numericPrecision'
responses:
'200':
description: Successful hourly observations response for 7 days
content:
application/json:
schema:
$ref: '#/components/schemas/ObservationsListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/pws/dailysummary/7day:
get:
operationId: getDailySummary7Day
summary: Get daily summary observations for the past 7 days
description: 'Returns daily summary observation records for a specified Personal Weather Station over the past 7 days. Each record aggregates all observations from a single calendar day into min/max/average values.
'
tags:
- Historical
parameters:
- $ref: '#/components/parameters/stationId'
- $ref: '#/components/parameters/format'
- $ref: '#/components/parameters/units'
- $ref: '#/components/parameters/numericPrecision'
responses:
'200':
description: Successful daily summary response for 7 days
content:
application/json:
schema:
$ref: '#/components/schemas/DailySummaryResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/pws/history/all:
get:
operationId: getHistoryAllForDate
summary: Get all historical observations for a specific date
description: 'Returns all raw observation records for a specified Personal Weather Station on a given historical date. Provides the full granularity of data uploaded by the station for that date.
'
tags:
- Historical
parameters:
- $ref: '#/components/parameters/stationId'
- $ref: '#/components/parameters/format'
- $ref: '#/components/parameters/units'
- $ref: '#/components/parameters/numericPrecision'
- name: date
in: query
required: true
description: Date for historical observations in YYYYMMDD format
schema:
type: string
pattern: ^\d{8}$
example: '20240115'
responses:
'200':
description: Successful historical all-observations response
content:
application/json:
schema:
$ref: '#/components/schemas/ObservationsListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/pws/history/daily:
get:
operationId: getHistoryDaily
summary: Get daily historical observations for a date range
description: 'Returns daily summary historical records for a specified Personal Weather Station within a date range. Supports up to approximately one month of daily summaries per request.
'
tags:
- Historical
parameters:
- $ref: '#/components/parameters/stationId'
- $ref: '#/components/parameters/format'
- $ref: '#/components/parameters/units'
- $ref: '#/components/parameters/numericPrecision'
- name: startDate
in: query
required: true
description: Start date of the range in YYYYMMDD format
schema:
type: string
pattern: ^\d{8}$
example: '20240101'
- name: endDate
in: query
required: true
description: End date of the range in YYYYMMDD format
schema:
type: string
pattern: ^\d{8}$
example: '20240131'
responses:
'200':
description: Successful daily historical observations response
content:
application/json:
schema:
$ref: '#/components/schemas/DailySummaryResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
schemas:
DailySummaryResponse:
type: object
description: Response containing daily summary PWS observations
properties:
summaries:
type: array
items:
$ref: '#/components/schemas/DailySummary'
description: Array of daily summary records
ObservationsListResponse:
type: object
description: Response containing a list of PWS observations over a time period
properties:
observations:
type: array
items:
$ref: '#/components/schemas/Observation'
description: Array of observation records ordered by time
Observation:
type: object
description: A single weather observation record from a PWS station
properties:
stationID:
type: string
description: Unique identifier of the PWS station
example: KCASARAT1
obsTimeUtc:
type: string
format: date-time
description: Observation timestamp in UTC
example: '2024-01-15T18:32:00Z'
obsTimeLocal:
type: string
description: Observation timestamp in local station time
example: '2024-01-15 10:32:00'
neighborhood:
type: string
description: Neighborhood or location name for the station
example: Downtown
softwareType:
type: string
description: Software used to upload data to the network
example: WeatherBridge
country:
type: string
description: ISO 3166-1 alpha-2 country code of the station
example: US
solarRadiation:
type: number
description: Solar radiation intensity in W/m²
example: 320.5
lon:
type: number
format: double
description: Station longitude in decimal degrees
example: -122.419
lat:
type: number
format: double
description: Station latitude in decimal degrees
example: 37.774
uv:
type: number
description: UV index value
example: 3.0
winddir:
type: integer
description: Wind direction in degrees (0–360)
example: 270
windDirectionCardinal:
type: string
description: Wind direction as a compass cardinal or intercardinal point
example: W
humidity:
type: integer
description: Relative humidity percentage
example: 68
epoch:
type: integer
description: Unix timestamp of the observation
example: 1705343520
qcStatus:
type: integer
description: Quality control status flag (1 = passed QC)
example: 1
realtimeFrequency:
type: integer
nullable: true
description: Realtime upload frequency in seconds, if applicable
example: null
imperial:
$ref: '#/components/schemas/UnitMeasurements'
metric:
$ref: '#/components/schemas/UnitMeasurements'
uk_hybrid:
$ref: '#/components/schemas/UnitMeasurements'
metric_si:
$ref: '#/components/schemas/UnitMeasurements'
UnitMeasurements:
type: object
description: 'Measurement values scoped to the requested unit system. The property name matches the units parameter value (e.g., "imperial", "metric", "uk_hybrid", or "metric_si").
'
properties:
temp:
type: number
description: Air temperature
example: 55.0
heatIndex:
type: number
description: Apparent temperature accounting for humidity
example: 55.0
dewpt:
type: number
description: Dew point temperature
example: 44.0
windChill:
type: number
description: Wind chill temperature
example: 55.0
windSpeed:
type: number
description: Average wind speed
example: 8.0
windGust:
type: number
description: Peak wind gust speed
example: 12.0
pressure:
type: number
description: Atmospheric pressure (inHg for imperial, mbar for metric)
example: 30.05
precipRate:
type: number
description: Current precipitation rate per hour
example: 0.0
precipTotal:
type: number
description: Accumulated daily precipitation total
example: 0.12
elev:
type: number
description: Station elevation above sea level
example: 52.0
ErrorResponse:
type: object
description: Error response from the API
properties:
errors:
type: array
items:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Error code
example: NOT-AUTHORIZED
message:
type: string
description: Human-readable error message
example: Not Authorized
DailySummaryMeasurements:
type: object
description: Daily summary measurements in the requested unit system
properties:
tempHigh:
type: number
description: Maximum temperature of the day
example: 62.0
tempLow:
type: number
description: Minimum temperature of the day
example: 48.0
tempAvg:
type: number
description: Average temperature of the day
example: 55.0
windspeedHigh:
type: number
description: Maximum wind speed of the day
example: 18.0
windspeedLow:
type: number
description: Minimum wind speed of the day
example: 0.0
windspeedAvg:
type: number
description: Average wind speed of the day
example: 7.5
windgustHigh:
type: number
description: Maximum wind gust of the day
example: 22.0
windgustLow:
type: number
description: Minimum wind gust of the day
example: 0.0
windgustAvg:
type: number
description: Average wind gust of the day
example: 10.0
dewptHigh:
type: number
description: Maximum dew point of the day
example: 52.0
dewptLow:
type: number
description: Minimum dew point of the day
example: 39.0
dewptAvg:
type: number
description: Average dew point of the day
example: 46.0
windchillHigh:
type: number
description: Maximum wind chill of the day
example: 62.0
windchillLow:
type: number
description: Minimum wind chill of the day
example: 44.0
windchillAvg:
type: number
description: Average wind chill of the day
example: 53.0
heatindexHigh:
type: number
description: Maximum heat index of the day
example: 62.0
heatindexLow:
type: number
description: Minimum heat index of the day
example: 48.0
heatindexAvg:
type: number
description: Average heat index of the day
example: 55.0
pressureMax:
type: number
description: Maximum atmospheric pressure of the day
example: 30.12
pressureMin:
type: number
description: Minimum atmospheric pressure of the day
example: 29.98
pressureTrend:
type: number
description: Pressure trend over the day
example: -0.05
precipRate:
type: number
description: Maximum precipitation rate of the day
example: 0.25
precipTotal:
type: number
description: Total accumulated precipitation for the day
example: 0.48
DailySummary:
type: object
description: 'A daily summary record aggregating all observations from a single calendar day for a PWS station.
'
properties:
stationID:
type: string
description: Unique identifier of the PWS station
example: KCASARAT1
tz:
type: string
description: IANA timezone name of the station
example: America/Los_Angeles
obsTimeLocal:
type: string
description: Local date of the daily summary
example: '2024-01-15 00:00:00'
obsTimeUtc:
type: string
format: date-time
description: UTC date of the daily summary
example: '2024-01-15T08:00:00Z'
epoch:
type: integer
description: Unix timestamp for the summary period
example: 1705296000
lat:
type: number
format: double
description: Station latitude in decimal degrees
example: 37.774
lon:
type: number
format: double
description: Station longitude in decimal degrees
example: -122.419
humidity:
type: object
description: Humidity summary statistics
properties:
min:
type: integer
description: Minimum humidity percentage for the day
example: 45
max:
type: integer
description: Maximum humidity percentage for the day
example: 92
avg:
type: integer
description: Average humidity percentage for the day
example: 68
imperial:
$ref: '#/components/schemas/DailySummaryMeasurements'
metric:
$ref: '#/components/schemas/DailySummaryMeasurements'
parameters:
format:
name: format
in: query
required: false
description: Response format. Only JSON is currently supported.
schema:
type: string
enum:
- json
default: json
numericPrecision:
name: numericPrecision
in: query
required: false
description: 'When set to "decimal", numeric values are returned with decimal precision instead of rounded integers.
'
schema:
type: string
enum:
- decimal
example: decimal
units:
name: units
in: query
required: false
description: 'Unit system for measurement values. e = Imperial (English), m = Metric, s = SI (metric with Pa pressure), h = Hybrid (UK)
'
schema:
type: string
enum:
- e
- m
- s
- h
default: m
example: e
stationId:
name: stationId
in: query
required: true
description: 'The PWS station identifier (e.g., KCASARAT1). Station IDs are assigned upon registration with Weather Underground''s PWS network.
'
schema:
type: string
example: KCASARAT1
responses:
Unauthorized:
description: 'Authentication failed. The API key is missing, invalid, or not authorized for the requested station or endpoint.
'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
NotFound:
description: 'The requested station ID was not found or has no data for the specified date range.
'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
securitySchemes:
apiKey:
type: apiKey
in: query
name: apiKey
description: 'API key issued to registered PWS contributors via https://www.wunderground.com/member/api-keys
'