Weather Underground Forecast API

Weather forecasts based on PWS location

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/wunderground-forecast-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

wunderground-forecast-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Weather Underground PWS Forecast 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: Forecast
  description: Weather forecasts based on PWS location
paths:
  /v3/wx/forecast/daily/5day:
    get:
      operationId: get5DayForecast
      summary: Get 5-day daily weather forecast
      description: 'Returns a 5-day daily weather forecast for a location specified by geocode (latitude and longitude). Typically used in conjunction with PWS station coordinates obtained from the observations endpoint.

        '
      tags:
      - Forecast
      parameters:
      - name: geocode
        in: query
        required: true
        description: 'Latitude and longitude as a comma-separated pair (e.g., 37.774,-122.419)

          '
        schema:
          type: string
          example: 37.774,-122.419
      - $ref: '#/components/parameters/format'
      - $ref: '#/components/parameters/units'
      - name: language
        in: query
        required: false
        description: 'Language code for forecast text (e.g., en-US, fr-FR)

          '
        schema:
          type: string
          default: en-US
          example: en-US
      responses:
        '200':
          description: Successful 5-day forecast response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForecastResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  parameters:
    format:
      name: format
      in: query
      required: false
      description: Response format. Only JSON is currently supported.
      schema:
        type: string
        enum:
        - json
        default: json
    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
  schemas:
    ForecastResponse:
      type: object
      description: 5-day daily weather forecast response
      properties:
        calendarDayTemperatureMax:
          type: array
          items:
            type: integer
            nullable: true
          description: Maximum calendar day temperatures for each day
          example:
          - 62
          - 58
          - 65
          - 60
          - 55
        calendarDayTemperatureMin:
          type: array
          items:
            type: integer
            nullable: true
          description: Minimum calendar day temperatures for each day
          example:
          - 48
          - 45
          - 50
          - 47
          - 42
        dayOfWeek:
          type: array
          items:
            type: string
          description: Day of week names for each forecast day
          example:
          - Monday
          - Tuesday
          - Wednesday
          - Thursday
          - Friday
        expirationTimeUtc:
          type: array
          items:
            type: integer
          description: Unix timestamps when each day's forecast expires
        moonPhase:
          type: array
          items:
            type: string
          description: Moon phase description for each day
          example:
          - Waxing Gibbous
        moonriseTimeLocal:
          type: array
          items:
            type: string
            nullable: true
          description: Local moonrise time for each day
        moonsetTimeLocal:
          type: array
          items:
            type: string
            nullable: true
          description: Local moonset time for each day
        narrative:
          type: array
          items:
            type: string
          description: Overall narrative forecast text for each day
          example:
          - Mostly cloudy. Highs in the low 60s.
        qpf:
          type: array
          items:
            type: number
            nullable: true
          description: Quantitative precipitation forecast for each day
          example:
          - 0.1
          - 0.0
          - 0.25
          - 0.05
          - 0.0
        qpfSnow:
          type: array
          items:
            type: number
            nullable: true
          description: Quantitative snow precipitation forecast for each day
          example:
          - 0.0
          - 0.0
          - 0.0
          - 0.0
          - 0.0
        sunriseTimeLocal:
          type: array
          items:
            type: string
            nullable: true
          description: Local sunrise time for each day
          example:
          - 2024-01-15T07:23:00-0800
        sunsetTimeLocal:
          type: array
          items:
            type: string
            nullable: true
          description: Local sunset time for each day
          example:
          - 2024-01-15T17:12:00-0800
        temperatureMax:
          type: array
          items:
            type: integer
            nullable: true
          description: Maximum temperature for each forecast day
          example:
          - 62
          - 58
          - 65
          - 60
          - 55
        temperatureMin:
          type: array
          items:
            type: integer
            nullable: true
          description: Minimum temperature for each forecast day
          example:
          - 48
          - 45
          - 50
          - 47
          - 42
        validTimeLocal:
          type: array
          items:
            type: string
          description: Local valid time for each forecast day
          example:
          - 2024-01-15T07:00:00-0800
        validTimeUtc:
          type: array
          items:
            type: integer
          description: Unix timestamps for valid time of each forecast day
          example:
          - 1705327200
        daypart:
          type: array
          items:
            $ref: '#/components/schemas/ForecastDaypart'
          description: Detailed forecast data for each day part (day/night pairs)
    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
    ForecastDaypart:
      type: object
      description: Forecast data for a specific day part (day or night)
      properties:
        cloudCover:
          type: array
          items:
            type: integer
            nullable: true
          description: Cloud cover percentage for each day part
          example:
          - 40
          - 20
          - 55
          - 30
        iconCode:
          type: array
          items:
            type: integer
            nullable: true
          description: Weather icon code for each day part
          example:
          - 28
          - 31
          - 26
          - 33
        iconCodeExtend:
          type: array
          items:
            type: integer
            nullable: true
          description: Extended icon code for each day part
        narrative:
          type: array
          items:
            type: string
            nullable: true
          description: Text narrative forecast for each day part
          example:
          - Mostly cloudy. High 62F.
          - Clear. Low 48F.
        precipChance:
          type: array
          items:
            type: integer
            nullable: true
          description: Probability of precipitation percentage for each day part
          example:
          - 20
          - 10
          - 40
          - 15
        precipType:
          type: array
          items:
            type: string
            nullable: true
          description: Type of precipitation expected for each day part
          example:
          - rain
          - none
        temperature:
          type: array
          items:
            type: integer
            nullable: true
          description: Temperature for each day part
          example:
          - 62
          - 48
          - 58
          - 45
        windDirection:
          type: array
          items:
            type: integer
            nullable: true
          description: Wind direction in degrees for each day part
          example:
          - 270
          - 250
        windDirectionCardinal:
          type: array
          items:
            type: string
            nullable: true
          description: Cardinal wind direction for each day part
          example:
          - W
          - WSW
        windPhrase:
          type: array
          items:
            type: string
            nullable: true
          description: Text description of wind conditions for each day part
          example:
          - Winds W at 10 to 15 mph.
        windSpeed:
          type: array
          items:
            type: integer
            nullable: true
          description: Wind speed for each day part
          example:
          - 12
          - 8
  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

        '