openapi: 3.0.0
info:
  title: Wsdot Weather Readings API
  version: 1.0.0
  description: Wsdot Weather Readings API - Washington State Department of Transportation APIs
servers:
  - url: https://www.wsdot.wa.gov/traffic/api/api
    description: Production server
components:
  schemas:
    RoadwayLocation:
      type: object
      properties:
        Description:
          type: string
          nullable: true
          description: Human-readable description of the roadway location, such as interchange names or cross streets.
        Direction:
          type: string
          nullable: true
          description: 'Traffic direction designation: N, S, B, NB, or SB, indicating which side of the highway is affected.'
        Latitude:
          type: number
          description: Latitude of the roadway location in decimal degrees.
        Longitude:
          type: number
          description: Longitude of the roadway location in decimal degrees.
        MilePost:
          type: number
          description: Milepost marker along the highway corridor, with 0 indicating route terminus.
        RoadName:
          type: string
          nullable: true
          description: Highway or route designation code, such as '005' for I-5 or '090' for I-90.
      required:
        - Description
        - Direction
        - Latitude
        - Longitude
        - MilePost
        - RoadName
      description: Roadway location information including route, milepost, coordinates, and direction.
  parameters: {}
paths:
  /Scanweb:
    get:
      summary: List comprehensive weather readings from all weather stations.
      operationId: fetchWeatherReadings
      tags:
        - weather-readings
      x-codeSamples:
        - lang: JavaScript
          source: |-
            import { fetchWeatherReadings } from 'ws-dottie/wsdot-weather-readings/core';

            const data = await fetchWeatherReadings({
              fetchMode: 'native',
              validate: true
            });

            console.log(data);
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    StationId:
                      type: string
                      description: National Weather Service assigned station identifier code.
                    StationName:
                      type: string
                      description: Display name of the weather station.
                    Latitude:
                      type: number
                      description: Latitude of the weather station in decimal degrees.
                    Longitude:
                      type: number
                      description: Longitude of the weather station in decimal degrees.
                    Elevation:
                      type: integer
                      description: Elevation of the weather station above sea level in meters.
                    ReadingTime:
                      type: string
                      nullable: true
                      description: UTC datetime when the comprehensive weather reading was taken (ISO-8601 format).
                      format: date-time
                    AirTemperature:
                      type: number
                      nullable: true
                      description: Current air temperature in degrees Celsius.
                    RelativeHumidty:
                      type: integer
                      nullable: true
                      description: Relative humidity as a percentage (0-100).
                    AverageWindSpeed:
                      type: integer
                      nullable: true
                      description: Average wind speed during evaluation cycle in kilometers per hour.
                    AverageWindDirection:
                      type: integer
                      nullable: true
                      description: Average wind direction in degrees clockwise from north (0-359).
                    WindGust:
                      type: integer
                      nullable: true
                      description: Maximum wind gust speed during evaluation cycle in kilometers per hour.
                    Visibility:
                      type: integer
                      nullable: true
                      description: Average visibility distance in meters (computed every 3 minutes).
                    PrecipitationIntensity:
                      type: integer
                      nullable: true
                      description: Precipitation intensity derived from precipitation rate (intensity units).
                    PrecipitationType:
                      type: integer
                      nullable: true
                      description: 'Code indicating precipitation type: 0 = none, 1 = rain, 2 = snow.'
                    PrecipitationPast1Hour:
                      type: number
                      nullable: true
                      description: Precipitation amount (liquid equivalent) for previous 1 hour in millimeters.
                    PrecipitationPast3Hours:
                      type: number
                      nullable: true
                      description: Precipitation amount (liquid equivalent) for previous 3 hours in millimeters.
                    PrecipitationPast6Hours:
                      type: number
                      nullable: true
                      description: Precipitation amount (liquid equivalent) for previous 6 hours in millimeters.
                    PrecipitationPast12Hours:
                      type: number
                      nullable: true
                      description: Precipitation amount (liquid equivalent) for previous 12 hours in millimeters.
                    PrecipitationPast24Hours:
                      type: number
                      nullable: true
                      description: Precipitation amount (liquid equivalent) for previous 24 hours in millimeters.
                    PrecipitationAccumulation:
                      type: number
                      nullable: true
                      description: Precipitation amount (liquid equivalent) from midnight GMT to current time in millimeters.
                    BarometricPressure:
                      type: integer
                      nullable: true
                      description: Atmospheric pressure in millibars (not adjusted for elevation).
                    SnowDepth:
                      type: integer
                      nullable: true
                      description: Snow depth on representative areas excluding highway pavement in centimeters.
                    SurfaceMeasurements:
                      type: array
                      nullable: true
                      items:
                        type: object
                        properties:
                          SensorId:
                            type: integer
                            description: Numeric ID of the surface sensor.
                          SurfaceTemperature:
                            type: number
                            nullable: true
                            description: Current pavement surface temperature in degrees Celsius.
                          RoadFreezingTemperature:
                            type: number
                            nullable: true
                            description: Freezing point of moisture on pavement based on chemical treatment in degrees Celsius.
                          RoadSurfaceCondition:
                            type: number
                            nullable: true
                            description: 'Code indicating road surface condition: 101 = Dry, 102 = Wet, 103 = Moist, 104 = Ice, 105 = Snow.'
                        required:
                          - SensorId
                          - SurfaceTemperature
                          - RoadFreezingTemperature
                          - RoadSurfaceCondition
                      description: Array of surface sensor measurements including pavement temperature, freezing temperature, and condition codes.
                    SubSurfaceMeasurements:
                      type: array
                      nullable: true
                      items:
                        type: object
                        properties:
                          SensorId:
                            type: integer
                            description: Numeric ID of the subsurface sensor.
                          SubSurfaceTemperature:
                            type: number
                            nullable: true
                            description: Temperature from sensor embedded 12-18 inches below road pavement in degrees Celsius.
                        required:
                          - SensorId
                          - SubSurfaceTemperature
                      description: Array of subsurface sensor measurements including ground temperature from sensors embedded below pavement.
                  required:
                    - StationId
                    - StationName
                    - Latitude
                    - Longitude
                    - Elevation
                    - ReadingTime
                    - AirTemperature
                    - RelativeHumidty
                    - AverageWindSpeed
                    - AverageWindDirection
                    - WindGust
                    - Visibility
                    - PrecipitationIntensity
                    - PrecipitationType
                    - PrecipitationPast1Hour
                    - PrecipitationPast3Hours
                    - PrecipitationPast6Hours
                    - PrecipitationPast12Hours
                    - PrecipitationPast24Hours
                    - PrecipitationAccumulation
                    - BarometricPressure
                    - SnowDepth
                    - SurfaceMeasurements
                    - SubSurfaceMeasurements
                  description: Comprehensive weather reading from a WSDOT weather station, including atmospheric conditions, precipitation across multiple time periods, and surface/subsurface sensor measurements.
              examples:
                sampleResponse:
                  summary: Sample response
                  description: Example of a successful response from the API (showing first item of 131 total)
                  value:
                    - StationId: TALPE
                      StationName: 090ws05226 - Alpental
                      Latitude: 47.427
                      Longitude: -121.418
                      Elevation: 876
                      ReadingTime: '2025-11-16T01:38:33.000Z'
                      AirTemperature: 8.2
                      RelativeHumidty: 100
                      AverageWindSpeed: 3
                      AverageWindDirection: 355
                      WindGust: 7
                      Visibility: 828
                      PrecipitationIntensity: 0
                      PrecipitationType: 0
                      PrecipitationPast1Hour: 0.1
                      PrecipitationPast3Hours: 0.8
                      PrecipitationPast6Hours: 2.7
                      PrecipitationPast12Hours: 6.6
                      PrecipitationPast24Hours: 20.9
                      PrecipitationAccumulation: null
                      BarometricPressure: null
                      SnowDepth: null
                      SurfaceMeasurements:
                        - SensorId: 0
                          SurfaceTemperature: 10
                          RoadFreezingTemperature: null
                          RoadSurfaceCondition: 104
                        - SensorId: 1
                          SurfaceTemperature: 8.7
                          RoadFreezingTemperature: null
                          RoadSurfaceCondition: 105
                      SubSurfaceMeasurements:
                        - SensorId: 0
                          SubSurfaceTemperature: 6.8
  /Scanweb/SurfaceMeasurements:
    get:
      summary: List surface measurements from all weather stations.
      operationId: fetchSurfaceMeasurements
      tags:
        - surface-measurements
      x-codeSamples:
        - lang: JavaScript
          source: |-
            import { fetchSurfaceMeasurements } from 'ws-dottie/wsdot-weather-readings/core';

            const data = await fetchSurfaceMeasurements({
              fetchMode: 'native',
              validate: true
            });

            console.log(data);
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    SensorId:
                      type: number
                      description: Numeric ID of the surface sensor.
                    SurfaceTemperature:
                      type: number
                      description: Current pavement surface temperature in degrees Celsius.
                    RoadFreezingTemperature:
                      type: number
                      description: Freezing point of moisture on pavement based on chemical treatment in degrees Celsius.
                    RoadSurfaceCondition:
                      type: number
                      description: 'Code indicating road surface condition: 101 = Dry, 102 = Wet, 103 = Moist, 104 = Ice, 105 = Snow, 108 = Unknown/Other.'
                  description: Surface sensor measurements including pavement temperature, road freezing temperature, and surface condition code from sensors embedded in or mounted on road surfaces.
              examples:
                sampleResponse:
                  summary: Sample response
                  description: Example of a successful response from the API (showing first item of 131 total)
                  value:
                    - {}
  /Scanweb/SubSurfaceMeasurements:
    get:
      summary: List subsurface measurements from all weather stations statewide.
      operationId: fetchSubSurfaceMeasurements
      tags:
        - surface-measurements
      x-codeSamples:
        - lang: JavaScript
          source: |-
            import { fetchSubSurfaceMeasurements } from 'ws-dottie/wsdot-weather-readings/core';

            const data = await fetchSubSurfaceMeasurements({
              fetchMode: 'native',
              validate: true
            });

            console.log(data);
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    SensorId:
                      type: number
                      description: Numeric ID of the subsurface sensor.
                    SubSurfaceTemperature:
                      type: number
                      description: Temperature from sensor embedded 12-18 inches below road pavement in degrees Celsius.
                  description: Subsurface sensor measurements including ground temperature from sensors embedded below road pavement.
              examples:
                sampleResponse:
                  summary: Sample response
                  description: Example of a successful response from the API (showing first item of 131 total)
                  value:
                    - {}
tags:
  - name: weather-readings
    description: Comprehensive weather readings from all WSDOT weather stations statewide.
    x-description: Complete weather data including air temperature, humidity, wind conditions, visibility, precipitation across multiple time periods, barometric pressure, snow depth, and surface/subsurface sensor measurements.
    x-cacheStrategy: FREQUENT
    x-useCases:
      - Access complete weather station data for comprehensive analysis.
      - Monitor atmospheric and surface conditions for transportation operations.
      - Track precipitation across multiple time periods (1h, 3h, 6h, 12h, 24h).
    x-updateFrequency: 5m
  - name: surface-measurements
    description: Surface sensor measurements from WSDOT weather stations statewide.
    x-description: Pavement surface temperature, road freezing temperature, and road surface condition codes from sensors embedded in or mounted on road surfaces.
    x-cacheStrategy: FREQUENT
    x-useCases:
      - Monitor road surface conditions for winter maintenance operations.
      - Assess pavement temperature and freezing risk.
      - Evaluate travel safety based on surface condition codes.
    x-updateFrequency: 5m
  - name: sub-surface-measurements
    description: Subsurface temperature measurements from sensors embedded below road pavement.
    x-description: Ground temperature data from sensors embedded 12-18 inches below road pavement surfaces for monitoring ground temperature conditions.
    x-cacheStrategy: FREQUENT
    x-useCases:
      - Monitor ground temperature conditions for winter maintenance operations.
      - Predict road surface conditions based on subsurface temperature trends.
      - Assess travel safety by understanding ground temperature patterns.
    x-updateFrequency: 5m
