> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rivi.software/llms.txt
> Use this file to discover all available pages before exploring further.

# Get weather

> Read normalized weather for configured station coverage areas. Check each snapshot's freshness before display. current may be null and forecast arrays may be empty. This endpoint requires an available station resource and redistribution entitlement.



## OpenAPI

````yaml /radiotools/openapi.json get /api/v1/stations/{stationSlug}/weather
openapi: 3.1.0
info:
  title: RadioTools API
  version: 1.0.0
  description: >-
    RadioTools APIs for listener websites and apps, published media, and
    now-playing metadata ingestion.
servers:
  - url: https://radiotools.rivi.software
    description: radiotools API
security: []
tags:
  - name: Public listener
    description: >-
      Tenant-token published delivery (listener:read; push:register for device
      changes). Published media remains anonymous. OPTIONS allows every origin;
      JSON is no-store with a strong ETag for conditional polling.
  - name: Ingest
    description: >-
      Automation credentials. The credential resolves the station; payloads
      cannot change it.
paths:
  /api/v1/stations/{stationSlug}/weather:
    get:
      tags:
        - Public listener
      summary: Public weather when redistribution entitlement is recorded
      description: >-
        Read normalized weather for configured station coverage areas. Check
        each snapshot's freshness before display. current may be null and
        forecast arrays may be empty. This endpoint requires an available
        station resource and redistribution entitlement.
      parameters:
        - schema:
            type: string
            minLength: 3
            maxLength: 63
          required: true
          name: stationSlug
          in: path
          description: >-
            Public station slug from the station settings; distinct from the
            internal station ID.
          example: radio-rivier
      responses:
        '200':
          description: Normalized weather; no-store so revocation applies on the next read
          content:
            application/json:
              schema:
                type: object
                properties:
                  contractVersion:
                    type: number
                    enum:
                      - 1
                    description: >-
                      Public JSON contract version. The current version is 1;
                      tolerate additional fields within this version.
                    example: 1
                  stationId:
                    type: string
                    description: Station identifier associated with this response.
                    example: station-rivier
                  timezone:
                    type: string
                    minLength: 1
                    maxLength: 100
                    description: >-
                      IANA timezone used to interpret station calendar dates,
                      for example Europe/Amsterdam.
                    example: Europe/Amsterdam
                  snapshots:
                    type: array
                    items:
                      type: object
                      properties:
                        source:
                          type: string
                          enum:
                            - open-meteo
                          description: Source provider for this normalized observation.
                          example: open-meteo
                        coverage:
                          type: object
                          properties:
                            id:
                              type: string
                              pattern: ^[a-z]{2}:[a-z0-9][a-z0-9_-]{0,62}$
                              description: >-
                                Identifier of this resource. Use the value
                                returned by the API for subsequent lookups.
                              example: nl:noordwest
                            name:
                              type: string
                              description: Human-readable display name.
                              example: Noordwest
                            countryCode:
                              type: string
                              pattern: ^[a-z]{2}$
                              description: >-
                                Lowercase country code of the coverage area, for
                                example nl.
                              example: nl
                            countryName:
                              type: string
                              description: Country display name.
                              example: Netherlands
                            latitude:
                              type: number
                              description: Latitude in decimal degrees.
                              example: 52.65
                            longitude:
                              type: number
                              description: Longitude in decimal degrees.
                              example: 4.75
                            timezone:
                              type: string
                              minLength: 1
                              maxLength: 100
                              description: >-
                                IANA timezone used to interpret station calendar
                                dates, for example Europe/Amsterdam.
                              example: Europe/Amsterdam
                          required:
                            - id
                            - name
                            - countryCode
                            - countryName
                            - latitude
                            - longitude
                            - timezone
                          additionalProperties: false
                          description: Geographic location of this weather snapshot.
                          example:
                            id: nl:noordwest
                            name: Noordwest
                            countryCode: nl
                            countryName: Netherlands
                            latitude: 52.65
                            longitude: 4.75
                            timezone: Europe/Amsterdam
                        freshness:
                          type: object
                          properties:
                            status:
                              type: string
                              enum:
                                - fresh
                                - stale
                                - unavailable
                                - empty
                              description: >-
                                Freshness classification of the source data.
                                Handle stale, empty, or unavailable data
                                explicitly.
                              example: fresh
                            thresholdSeconds:
                              type: integer
                              exclusiveMinimum: 0
                              description: >-
                                Age threshold in seconds used to classify an
                                observation as stale.
                              example: 900
                            ageSeconds:
                              type:
                                - integer
                                - 'null'
                              minimum: 0
                              description: >-
                                Observation age in seconds; null when no
                                observation is available.
                              example: 30
                            fetchedAt:
                              type:
                                - string
                                - 'null'
                              format: date-time
                              description: >-
                                Timestamp of the provider fetch; null when
                                unavailable.
                              example: '2026-10-05T08:00:01.000Z'
                            observedAt:
                              type:
                                - string
                                - 'null'
                              format: date-time
                              description: >-
                                Timestamp when the source observation occurred.
                                Listener responses use ISO 8601 timestamps.
                              example: '2026-10-05T08:00:00.000Z'
                            lastError:
                              type:
                                - string
                                - 'null'
                              description: >-
                                Latest provider error summary, or null when no
                                error is recorded.
                              example: null
                          required:
                            - status
                            - thresholdSeconds
                            - ageSeconds
                            - fetchedAt
                            - observedAt
                            - lastError
                          additionalProperties: false
                          description: >-
                            Age and freshness of the source observation. A
                            successful HTTP read does not guarantee fresh data.
                          example:
                            status: fresh
                            thresholdSeconds: 900
                            ageSeconds: 30
                            fetchedAt: '2026-10-05T08:00:01.000Z'
                            observedAt: '2026-10-05T08:00:00.000Z'
                            lastError: null
                        current:
                          type:
                            - object
                            - 'null'
                          properties:
                            asOf:
                              type: string
                              format: date-time
                              description: >-
                                Timestamp at which this projection or reading
                                applies.
                              example: '2026-10-05T08:00:00.000Z'
                            conditionCode:
                              type: string
                              enum:
                                - Clear
                                - MostlyClear
                                - PartlyCloudy
                                - Cloudy
                                - Fog
                                - Drizzle
                                - FreezingDrizzle
                                - Rain
                                - HeavyRain
                                - FreezingRain
                                - Snow
                                - HeavySnow
                                - Flurries
                                - Showers
                                - SnowShowers
                                - Thunderstorm
                                - SevereThunderstorm
                              description: >-
                                Normalized weather condition; use the listed
                                enum values for icons and labels.
                              example: PartlyCloudy
                            daylight:
                              type: boolean
                              description: Whether this reading is during daylight.
                              example: true
                            precipitation:
                              type: number
                              description: >-
                                Precipitation amount for the reading, in
                                millimeters.
                              example: 0
                            temperature:
                              type: number
                              description: Air temperature in degrees Celsius.
                              example: 16.5
                            temperatureApparent:
                              type: number
                              description: Feels-like temperature in degrees Celsius.
                              example: 15.8
                            uvIndex:
                              type: number
                              description: UV index for the reading or forecast period.
                              example: 2
                            windDirection:
                              type: number
                              description: Wind direction in degrees.
                              example: 225
                            windGust:
                              type: number
                              description: Wind gust speed in kilometers per hour.
                              example: 24
                            windSpeed:
                              type: number
                              description: Wind speed in kilometers per hour.
                              example: 14
                          required:
                            - asOf
                            - conditionCode
                            - daylight
                            - precipitation
                            - temperature
                            - temperatureApparent
                            - uvIndex
                            - windDirection
                            - windGust
                            - windSpeed
                          additionalProperties: false
                          description: Current weather reading, or null when unavailable.
                          example:
                            asOf: '2026-10-05T08:00:00.000Z'
                            conditionCode: PartlyCloudy
                            daylight: true
                            precipitation: 0
                            temperature: 16.5
                            temperatureApparent: 15.8
                            uvIndex: 2
                            windDirection: 225
                            windGust: 24
                            windSpeed: 14
                        hourly:
                          type: array
                          items:
                            type: object
                            properties:
                              forecastStart:
                                type: string
                                format: date-time
                                description: Start timestamp of this forecast period.
                                example: '2026-10-05T09:00:00.000Z'
                              conditionCode:
                                type: string
                                enum:
                                  - Clear
                                  - MostlyClear
                                  - PartlyCloudy
                                  - Cloudy
                                  - Fog
                                  - Drizzle
                                  - FreezingDrizzle
                                  - Rain
                                  - HeavyRain
                                  - FreezingRain
                                  - Snow
                                  - HeavySnow
                                  - Flurries
                                  - Showers
                                  - SnowShowers
                                  - Thunderstorm
                                  - SevereThunderstorm
                                description: >-
                                  Normalized weather condition; use the listed
                                  enum values for icons and labels.
                                example: PartlyCloudy
                              daylight:
                                type: boolean
                                description: Whether this reading is during daylight.
                                example: true
                              precipitation:
                                type: number
                                description: >-
                                  Precipitation amount for the reading, in
                                  millimeters.
                                example: 0
                              precipitationChance:
                                type: number
                                minimum: 0
                                maximum: 1
                                description: >-
                                  Forecast precipitation probability from 0 to
                                  1; multiply by 100 to display a percentage.
                                example: 0.1
                              temperature:
                                type: number
                                description: Air temperature in degrees Celsius.
                                example: 17
                              temperatureApparent:
                                type: number
                                description: Feels-like temperature in degrees Celsius.
                                example: 16
                              windDirection:
                                type: number
                                description: Wind direction in degrees.
                                example: 225
                              windGust:
                                type: number
                                description: Wind gust speed in kilometers per hour.
                                example: 24
                              windSpeed:
                                type: number
                                description: Wind speed in kilometers per hour.
                                example: 14
                            required:
                              - forecastStart
                              - conditionCode
                              - daylight
                              - precipitation
                              - precipitationChance
                              - temperature
                              - temperatureApparent
                              - windDirection
                              - windGust
                              - windSpeed
                            additionalProperties: false
                            example:
                              forecastStart: '2026-10-05T09:00:00.000Z'
                              conditionCode: PartlyCloudy
                              daylight: true
                              precipitation: 0
                              precipitationChance: 0.1
                              temperature: 17
                              temperatureApparent: 16
                              windDirection: 225
                              windGust: 24
                              windSpeed: 14
                          description: >-
                            Hourly forecast readings; may be empty when
                            unavailable.
                          example:
                            - forecastStart: '2026-10-05T09:00:00.000Z'
                              conditionCode: PartlyCloudy
                              daylight: true
                              precipitation: 0
                              precipitationChance: 0.1
                              temperature: 17
                              temperatureApparent: 16
                              windDirection: 225
                              windGust: 24
                              windSpeed: 14
                        daily:
                          type: array
                          items:
                            type: object
                            properties:
                              forecastStart:
                                type: string
                                format: date-time
                                description: Start timestamp of this forecast period.
                                example: '2026-10-04T22:00:00.000Z'
                              conditionCode:
                                type: string
                                enum:
                                  - Clear
                                  - MostlyClear
                                  - PartlyCloudy
                                  - Cloudy
                                  - Fog
                                  - Drizzle
                                  - FreezingDrizzle
                                  - Rain
                                  - HeavyRain
                                  - FreezingRain
                                  - Snow
                                  - HeavySnow
                                  - Flurries
                                  - Showers
                                  - SnowShowers
                                  - Thunderstorm
                                  - SevereThunderstorm
                                description: >-
                                  Normalized weather condition; use the listed
                                  enum values for icons and labels.
                                example: PartlyCloudy
                              precipitationAmount:
                                type: number
                                description: Total forecast precipitation, in millimeters.
                                example: 0.2
                              precipitationChance:
                                type: number
                                minimum: 0
                                maximum: 1
                                description: >-
                                  Forecast precipitation probability from 0 to
                                  1; multiply by 100 to display a percentage.
                                example: 0.2
                              sunriseTime:
                                type: string
                                format: date-time
                                description: Sunrise timestamp for this forecast day.
                                example: '2026-10-05T05:48:00.000Z'
                              sunsetTime:
                                type: string
                                format: date-time
                                description: Sunset timestamp for this forecast day.
                                example: '2026-10-05T17:08:00.000Z'
                              temperatureMax:
                                type: number
                                description: >-
                                  Maximum forecast temperature in degrees
                                  Celsius.
                                example: 18
                              temperatureMin:
                                type: number
                                description: >-
                                  Minimum forecast temperature in degrees
                                  Celsius.
                                example: 11
                              uvIndex:
                                type: number
                                description: UV index for the reading or forecast period.
                                example: 2
                              windDirection:
                                type: number
                                description: Wind direction in degrees.
                                example: 225
                              windGust:
                                type: number
                                description: Wind gust speed in kilometers per hour.
                                example: 24
                              windSpeed:
                                type: number
                                description: Wind speed in kilometers per hour.
                                example: 14
                            required:
                              - forecastStart
                              - conditionCode
                              - precipitationAmount
                              - precipitationChance
                              - sunriseTime
                              - sunsetTime
                              - temperatureMax
                              - temperatureMin
                              - uvIndex
                              - windDirection
                              - windGust
                              - windSpeed
                            additionalProperties: false
                            example:
                              forecastStart: '2026-10-04T22:00:00.000Z'
                              conditionCode: PartlyCloudy
                              precipitationAmount: 0.2
                              precipitationChance: 0.2
                              sunriseTime: '2026-10-05T05:48:00.000Z'
                              sunsetTime: '2026-10-05T17:08:00.000Z'
                              temperatureMax: 18
                              temperatureMin: 11
                              uvIndex: 2
                              windDirection: 225
                              windGust: 24
                              windSpeed: 14
                          description: >-
                            Daily forecast readings; may be empty when
                            unavailable.
                          example:
                            - forecastStart: '2026-10-04T22:00:00.000Z'
                              conditionCode: PartlyCloudy
                              precipitationAmount: 0.2
                              precipitationChance: 0.2
                              sunriseTime: '2026-10-05T05:48:00.000Z'
                              sunsetTime: '2026-10-05T17:08:00.000Z'
                              temperatureMax: 18
                              temperatureMin: 11
                              uvIndex: 2
                              windDirection: 225
                              windGust: 24
                              windSpeed: 14
                      required:
                        - source
                        - coverage
                        - freshness
                        - current
                        - hourly
                        - daily
                      additionalProperties: false
                      example:
                        source: open-meteo
                        coverage:
                          id: nl:noordwest
                          name: Noordwest
                          countryCode: nl
                          countryName: Netherlands
                          latitude: 52.65
                          longitude: 4.75
                          timezone: Europe/Amsterdam
                        freshness:
                          status: fresh
                          thresholdSeconds: 900
                          ageSeconds: 30
                          fetchedAt: '2026-10-05T08:00:01.000Z'
                          observedAt: '2026-10-05T08:00:00.000Z'
                          lastError: null
                        current:
                          asOf: '2026-10-05T08:00:00.000Z'
                          conditionCode: PartlyCloudy
                          daylight: true
                          precipitation: 0
                          temperature: 16.5
                          temperatureApparent: 15.8
                          uvIndex: 2
                          windDirection: 225
                          windGust: 24
                          windSpeed: 14
                        hourly:
                          - forecastStart: '2026-10-05T09:00:00.000Z'
                            conditionCode: PartlyCloudy
                            daylight: true
                            precipitation: 0
                            precipitationChance: 0.1
                            temperature: 17
                            temperatureApparent: 16
                            windDirection: 225
                            windGust: 24
                            windSpeed: 14
                        daily:
                          - forecastStart: '2026-10-04T22:00:00.000Z'
                            conditionCode: PartlyCloudy
                            precipitationAmount: 0.2
                            precipitationChance: 0.2
                            sunriseTime: '2026-10-05T05:48:00.000Z'
                            sunsetTime: '2026-10-05T17:08:00.000Z'
                            temperatureMax: 18
                            temperatureMin: 11
                            uvIndex: 2
                            windDirection: 225
                            windGust: 24
                            windSpeed: 14
                    description: >-
                      Weather snapshots for the station's configured coverage
                      areas.
                    example:
                      - source: open-meteo
                        coverage:
                          id: nl:noordwest
                          name: Noordwest
                          countryCode: nl
                          countryName: Netherlands
                          latitude: 52.65
                          longitude: 4.75
                          timezone: Europe/Amsterdam
                        freshness:
                          status: fresh
                          thresholdSeconds: 900
                          ageSeconds: 30
                          fetchedAt: '2026-10-05T08:00:01.000Z'
                          observedAt: '2026-10-05T08:00:00.000Z'
                          lastError: null
                        current:
                          asOf: '2026-10-05T08:00:00.000Z'
                          conditionCode: PartlyCloudy
                          daylight: true
                          precipitation: 0
                          temperature: 16.5
                          temperatureApparent: 15.8
                          uvIndex: 2
                          windDirection: 225
                          windGust: 24
                          windSpeed: 14
                        hourly:
                          - forecastStart: '2026-10-05T09:00:00.000Z'
                            conditionCode: PartlyCloudy
                            daylight: true
                            precipitation: 0
                            precipitationChance: 0.1
                            temperature: 17
                            temperatureApparent: 16
                            windDirection: 225
                            windGust: 24
                            windSpeed: 14
                        daily:
                          - forecastStart: '2026-10-04T22:00:00.000Z'
                            conditionCode: PartlyCloudy
                            precipitationAmount: 0.2
                            precipitationChance: 0.2
                            sunriseTime: '2026-10-05T05:48:00.000Z'
                            sunsetTime: '2026-10-05T17:08:00.000Z'
                            temperatureMax: 18
                            temperatureMin: 11
                            uvIndex: 2
                            windDirection: 225
                            windGust: 24
                            windSpeed: 14
                required:
                  - contractVersion
                  - stationId
                  - timezone
                  - snapshots
                additionalProperties: false
                example:
                  contractVersion: 1
                  stationId: station-rivier
                  timezone: Europe/Amsterdam
                  snapshots:
                    - source: open-meteo
                      coverage:
                        id: nl:noordwest
                        name: Noordwest
                        countryCode: nl
                        countryName: Netherlands
                        latitude: 52.65
                        longitude: 4.75
                        timezone: Europe/Amsterdam
                      freshness:
                        status: fresh
                        thresholdSeconds: 900
                        ageSeconds: 30
                        fetchedAt: '2026-10-05T08:00:01.000Z'
                        observedAt: '2026-10-05T08:00:00.000Z'
                        lastError: null
                      current:
                        asOf: '2026-10-05T08:00:00.000Z'
                        conditionCode: PartlyCloudy
                        daylight: true
                        precipitation: 0
                        temperature: 16.5
                        temperatureApparent: 15.8
                        uvIndex: 2
                        windDirection: 225
                        windGust: 24
                        windSpeed: 14
                      hourly:
                        - forecastStart: '2026-10-05T09:00:00.000Z'
                          conditionCode: PartlyCloudy
                          daylight: true
                          precipitation: 0
                          precipitationChance: 0.1
                          temperature: 17
                          temperatureApparent: 16
                          windDirection: 225
                          windGust: 24
                          windSpeed: 14
                      daily:
                        - forecastStart: '2026-10-04T22:00:00.000Z'
                          conditionCode: PartlyCloudy
                          precipitationAmount: 0.2
                          precipitationChance: 0.2
                          sunriseTime: '2026-10-05T05:48:00.000Z'
                          sunsetTime: '2026-10-05T17:08:00.000Z'
                          temperatureMax: 18
                          temperatureMin: 11
                          uvIndex: 2
                          windDirection: 225
                          windGust: 24
                          windSpeed: 14
              examples:
                weather:
                  summary: Current weather and forecasts
                  description: >-
                    Illustrative response using fictional station data. Replace
                    identifiers with values returned by your station.
                  value:
                    contractVersion: 1
                    stationId: station-rivier
                    timezone: Europe/Amsterdam
                    snapshots:
                      - source: open-meteo
                        coverage:
                          id: nl:noordwest
                          name: Noordwest
                          countryCode: nl
                          countryName: Netherlands
                          latitude: 52.65
                          longitude: 4.75
                          timezone: Europe/Amsterdam
                        freshness:
                          status: fresh
                          thresholdSeconds: 900
                          ageSeconds: 30
                          fetchedAt: '2026-10-05T08:00:01.000Z'
                          observedAt: '2026-10-05T08:00:00.000Z'
                          lastError: null
                        current:
                          asOf: '2026-10-05T08:00:00.000Z'
                          conditionCode: PartlyCloudy
                          daylight: true
                          precipitation: 0
                          temperature: 16.5
                          temperatureApparent: 15.8
                          uvIndex: 2
                          windDirection: 225
                          windGust: 24
                          windSpeed: 14
                        hourly:
                          - forecastStart: '2026-10-05T09:00:00.000Z'
                            conditionCode: PartlyCloudy
                            daylight: true
                            precipitation: 0
                            precipitationChance: 0.1
                            temperature: 17
                            temperatureApparent: 16
                            windDirection: 225
                            windGust: 24
                            windSpeed: 14
                        daily:
                          - forecastStart: '2026-10-04T22:00:00.000Z'
                            conditionCode: PartlyCloudy
                            precipitationAmount: 0.2
                            precipitationChance: 0.2
                            sunriseTime: '2026-10-05T05:48:00.000Z'
                            sunsetTime: '2026-10-05T17:08:00.000Z'
                            temperatureMax: 18
                            temperatureMin: 11
                            uvIndex: 2
                            windDirection: 225
                            windGust: 24
                            windSpeed: 14
                unavailable:
                  summary: Provider unavailable, no current reading
                  description: >-
                    Illustrative response using fictional station data. Replace
                    identifiers with values returned by your station.
                  value:
                    contractVersion: 1
                    stationId: station-rivier
                    timezone: Europe/Amsterdam
                    snapshots:
                      - source: open-meteo
                        coverage:
                          id: nl:noordwest
                          name: Noordwest
                          countryCode: nl
                          countryName: Netherlands
                          latitude: 52.65
                          longitude: 4.75
                          timezone: Europe/Amsterdam
                        freshness:
                          status: unavailable
                          thresholdSeconds: 900
                          ageSeconds: null
                          fetchedAt: null
                          observedAt: null
                          lastError: Weather provider temporarily unavailable
                        current: null
                        hourly: []
                        daily: []
        '400':
          description: The request contains invalid parameters or input.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - UNAUTHENTICATED
                          - FORBIDDEN
                          - VALIDATION_ERROR
                          - NOT_FOUND
                          - MODULE_DISABLED
                          - METHOD_NOT_ALLOWED
                          - REVISION_CONFLICT
                          - IDEMPOTENCY_CONFLICT
                          - RATE_LIMITED
                          - PROVIDER_UNAVAILABLE
                          - INTERNAL_ERROR
                        description: >-
                          Machine-readable code. Error codes are stable; road
                          codes identify the watched road.
                        example: VALIDATION_ERROR
                      message:
                        type: string
                        description: >-
                          Human-readable explanation; branch on the stable error
                          code instead of this text.
                        example: The request contains invalid parameters or input.
                      requestId:
                        type: string
                        format: uuid
                        description: >-
                          Request trace identifier. Include this value or the
                          x-request-id header when reporting an issue.
                        example: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                              description: Path of the input field that failed validation.
                              example: query
                            message:
                              type: string
                              description: >-
                                Human-readable explanation; branch on the stable
                                error code instead of this text.
                              example: >-
                                Check the parameter types and bounds documented
                                for this operation.
                            code:
                              type: string
                              maxLength: 64
                              description: >-
                                Machine-readable code. Error codes are stable;
                                road codes identify the watched road.
                            suggestion:
                              type: string
                              maxLength: 200
                              description: Short suggested fix you can show to the user.
                            retryAfter:
                              type: integer
                              minimum: 1
                              maximum: 86400
                              description: >-
                                Seconds to wait before retrying, when the issue
                                is temporary.
                          required:
                            - path
                            - message
                          example:
                            path: query
                            message: >-
                              Check the parameter types and bounds documented
                              for this operation.
                        description: Optional field validation details.
                        example:
                          - path: query
                            message: >-
                              Check the parameter types and bounds documented
                              for this operation.
                    required:
                      - code
                      - message
                      - requestId
                    description: >-
                      Error details. Listener errors are structured; playback
                      ingest uses a legacy error string.
                    example:
                      code: VALIDATION_ERROR
                      message: The request contains invalid parameters or input.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                      issues:
                        - path: query
                          message: >-
                            Check the parameter types and bounds documented for
                            this operation.
                required:
                  - error
                example:
                  error:
                    code: VALIDATION_ERROR
                    message: The request contains invalid parameters or input.
                    requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                    issues:
                      - path: query
                        message: >-
                          Check the parameter types and bounds documented for
                          this operation.
              examples:
                error:
                  summary: 400 VALIDATION_ERROR
                  value:
                    error:
                      code: VALIDATION_ERROR
                      message: The request contains invalid parameters or input.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                      issues:
                        - path: query
                          message: >-
                            Check the parameter types and bounds documented for
                            this operation.
        '401':
          description: A valid station credential with the required scope is needed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - UNAUTHENTICATED
                          - FORBIDDEN
                          - VALIDATION_ERROR
                          - NOT_FOUND
                          - MODULE_DISABLED
                          - METHOD_NOT_ALLOWED
                          - REVISION_CONFLICT
                          - IDEMPOTENCY_CONFLICT
                          - RATE_LIMITED
                          - PROVIDER_UNAVAILABLE
                          - INTERNAL_ERROR
                        description: >-
                          Machine-readable code. Error codes are stable; road
                          codes identify the watched road.
                        example: UNAUTHENTICATED
                      message:
                        type: string
                        description: >-
                          Human-readable explanation; branch on the stable error
                          code instead of this text.
                        example: >-
                          A valid station credential with the required scope is
                          needed.
                      requestId:
                        type: string
                        format: uuid
                        description: >-
                          Request trace identifier. Include this value or the
                          x-request-id header when reporting an issue.
                        example: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                              description: Path of the input field that failed validation.
                            message:
                              type: string
                              description: >-
                                Human-readable explanation; branch on the stable
                                error code instead of this text.
                            code:
                              type: string
                              maxLength: 64
                              description: >-
                                Machine-readable code. Error codes are stable;
                                road codes identify the watched road.
                            suggestion:
                              type: string
                              maxLength: 200
                              description: Short suggested fix you can show to the user.
                            retryAfter:
                              type: integer
                              minimum: 1
                              maximum: 86400
                              description: >-
                                Seconds to wait before retrying, when the issue
                                is temporary.
                          required:
                            - path
                            - message
                        description: Optional field validation details.
                    required:
                      - code
                      - message
                      - requestId
                    description: >-
                      Error details. Listener errors are structured; playback
                      ingest uses a legacy error string.
                    example:
                      code: UNAUTHENTICATED
                      message: >-
                        A valid station credential with the required scope is
                        needed.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                required:
                  - error
                example:
                  error:
                    code: UNAUTHENTICATED
                    message: >-
                      A valid station credential with the required scope is
                      needed.
                    requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
              examples:
                error:
                  summary: 401 UNAUTHENTICATED
                  value:
                    error:
                      code: UNAUTHENTICATED
                      message: >-
                        A valid station credential with the required scope is
                        needed.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
        '403':
          description: The credential does not permit this operation.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - UNAUTHENTICATED
                          - FORBIDDEN
                          - VALIDATION_ERROR
                          - NOT_FOUND
                          - MODULE_DISABLED
                          - METHOD_NOT_ALLOWED
                          - REVISION_CONFLICT
                          - IDEMPOTENCY_CONFLICT
                          - RATE_LIMITED
                          - PROVIDER_UNAVAILABLE
                          - INTERNAL_ERROR
                        description: >-
                          Machine-readable code. Error codes are stable; road
                          codes identify the watched road.
                        example: FORBIDDEN
                      message:
                        type: string
                        description: >-
                          Human-readable explanation; branch on the stable error
                          code instead of this text.
                        example: The credential does not permit this operation.
                      requestId:
                        type: string
                        format: uuid
                        description: >-
                          Request trace identifier. Include this value or the
                          x-request-id header when reporting an issue.
                        example: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                              description: Path of the input field that failed validation.
                            message:
                              type: string
                              description: >-
                                Human-readable explanation; branch on the stable
                                error code instead of this text.
                            code:
                              type: string
                              maxLength: 64
                              description: >-
                                Machine-readable code. Error codes are stable;
                                road codes identify the watched road.
                            suggestion:
                              type: string
                              maxLength: 200
                              description: Short suggested fix you can show to the user.
                            retryAfter:
                              type: integer
                              minimum: 1
                              maximum: 86400
                              description: >-
                                Seconds to wait before retrying, when the issue
                                is temporary.
                          required:
                            - path
                            - message
                        description: Optional field validation details.
                    required:
                      - code
                      - message
                      - requestId
                    description: >-
                      Error details. Listener errors are structured; playback
                      ingest uses a legacy error string.
                    example:
                      code: FORBIDDEN
                      message: The credential does not permit this operation.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                required:
                  - error
                example:
                  error:
                    code: FORBIDDEN
                    message: The credential does not permit this operation.
                    requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
              examples:
                error:
                  summary: 403 FORBIDDEN
                  value:
                    error:
                      code: FORBIDDEN
                      message: The credential does not permit this operation.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
        '404':
          description: >-
            The resource is missing, unpublished, disabled, or unavailable for
            this station. A switched-off station module returns MODULE_DISABLED.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - UNAUTHENTICATED
                          - FORBIDDEN
                          - VALIDATION_ERROR
                          - NOT_FOUND
                          - MODULE_DISABLED
                          - METHOD_NOT_ALLOWED
                          - REVISION_CONFLICT
                          - IDEMPOTENCY_CONFLICT
                          - RATE_LIMITED
                          - PROVIDER_UNAVAILABLE
                          - INTERNAL_ERROR
                        description: >-
                          Machine-readable code. Error codes are stable; road
                          codes identify the watched road.
                        example: NOT_FOUND
                      message:
                        type: string
                        description: >-
                          Human-readable explanation; branch on the stable error
                          code instead of this text.
                        example: >-
                          The resource is missing, unpublished, disabled, or
                          unavailable for this station. A switched-off station
                          module returns MODULE_DISABLED.
                      requestId:
                        type: string
                        format: uuid
                        description: >-
                          Request trace identifier. Include this value or the
                          x-request-id header when reporting an issue.
                        example: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                              description: Path of the input field that failed validation.
                            message:
                              type: string
                              description: >-
                                Human-readable explanation; branch on the stable
                                error code instead of this text.
                            code:
                              type: string
                              maxLength: 64
                              description: >-
                                Machine-readable code. Error codes are stable;
                                road codes identify the watched road.
                            suggestion:
                              type: string
                              maxLength: 200
                              description: Short suggested fix you can show to the user.
                            retryAfter:
                              type: integer
                              minimum: 1
                              maximum: 86400
                              description: >-
                                Seconds to wait before retrying, when the issue
                                is temporary.
                          required:
                            - path
                            - message
                        description: Optional field validation details.
                    required:
                      - code
                      - message
                      - requestId
                    description: >-
                      Error details. Listener errors are structured; playback
                      ingest uses a legacy error string.
                    example:
                      code: NOT_FOUND
                      message: >-
                        The resource is missing, unpublished, disabled, or
                        unavailable for this station. A switched-off station
                        module returns MODULE_DISABLED.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                required:
                  - error
                example:
                  error:
                    code: NOT_FOUND
                    message: >-
                      The resource is missing, unpublished, disabled, or
                      unavailable for this station. A switched-off station
                      module returns MODULE_DISABLED.
                    requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
              examples:
                error:
                  summary: 404 NOT_FOUND
                  value:
                    error:
                      code: NOT_FOUND
                      message: >-
                        The resource is missing, unpublished, disabled, or
                        unavailable for this station. A switched-off station
                        module returns MODULE_DISABLED.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
        '409':
          description: The request conflicts with the current resource revision.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - UNAUTHENTICATED
                          - FORBIDDEN
                          - VALIDATION_ERROR
                          - NOT_FOUND
                          - MODULE_DISABLED
                          - METHOD_NOT_ALLOWED
                          - REVISION_CONFLICT
                          - IDEMPOTENCY_CONFLICT
                          - RATE_LIMITED
                          - PROVIDER_UNAVAILABLE
                          - INTERNAL_ERROR
                        description: >-
                          Machine-readable code. Error codes are stable; road
                          codes identify the watched road.
                        example: REVISION_CONFLICT
                      message:
                        type: string
                        description: >-
                          Human-readable explanation; branch on the stable error
                          code instead of this text.
                        example: >-
                          The request conflicts with the current resource
                          revision.
                      requestId:
                        type: string
                        format: uuid
                        description: >-
                          Request trace identifier. Include this value or the
                          x-request-id header when reporting an issue.
                        example: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                              description: Path of the input field that failed validation.
                            message:
                              type: string
                              description: >-
                                Human-readable explanation; branch on the stable
                                error code instead of this text.
                            code:
                              type: string
                              maxLength: 64
                              description: >-
                                Machine-readable code. Error codes are stable;
                                road codes identify the watched road.
                            suggestion:
                              type: string
                              maxLength: 200
                              description: Short suggested fix you can show to the user.
                            retryAfter:
                              type: integer
                              minimum: 1
                              maximum: 86400
                              description: >-
                                Seconds to wait before retrying, when the issue
                                is temporary.
                          required:
                            - path
                            - message
                        description: Optional field validation details.
                    required:
                      - code
                      - message
                      - requestId
                    description: >-
                      Error details. Listener errors are structured; playback
                      ingest uses a legacy error string.
                    example:
                      code: REVISION_CONFLICT
                      message: >-
                        The request conflicts with the current resource
                        revision.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                required:
                  - error
                example:
                  error:
                    code: REVISION_CONFLICT
                    message: The request conflicts with the current resource revision.
                    requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
              examples:
                error:
                  summary: 409 REVISION_CONFLICT
                  value:
                    error:
                      code: REVISION_CONFLICT
                      message: >-
                        The request conflicts with the current resource
                        revision.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
        '429':
          description: Too many requests. Reduce the request frequency.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - UNAUTHENTICATED
                          - FORBIDDEN
                          - VALIDATION_ERROR
                          - NOT_FOUND
                          - MODULE_DISABLED
                          - METHOD_NOT_ALLOWED
                          - REVISION_CONFLICT
                          - IDEMPOTENCY_CONFLICT
                          - RATE_LIMITED
                          - PROVIDER_UNAVAILABLE
                          - INTERNAL_ERROR
                        description: >-
                          Machine-readable code. Error codes are stable; road
                          codes identify the watched road.
                        example: RATE_LIMITED
                      message:
                        type: string
                        description: >-
                          Human-readable explanation; branch on the stable error
                          code instead of this text.
                        example: Too many requests. Reduce the request frequency.
                      requestId:
                        type: string
                        format: uuid
                        description: >-
                          Request trace identifier. Include this value or the
                          x-request-id header when reporting an issue.
                        example: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                              description: Path of the input field that failed validation.
                            message:
                              type: string
                              description: >-
                                Human-readable explanation; branch on the stable
                                error code instead of this text.
                            code:
                              type: string
                              maxLength: 64
                              description: >-
                                Machine-readable code. Error codes are stable;
                                road codes identify the watched road.
                            suggestion:
                              type: string
                              maxLength: 200
                              description: Short suggested fix you can show to the user.
                            retryAfter:
                              type: integer
                              minimum: 1
                              maximum: 86400
                              description: >-
                                Seconds to wait before retrying, when the issue
                                is temporary.
                          required:
                            - path
                            - message
                        description: Optional field validation details.
                    required:
                      - code
                      - message
                      - requestId
                    description: >-
                      Error details. Listener errors are structured; playback
                      ingest uses a legacy error string.
                    example:
                      code: RATE_LIMITED
                      message: Too many requests. Reduce the request frequency.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                required:
                  - error
                example:
                  error:
                    code: RATE_LIMITED
                    message: Too many requests. Reduce the request frequency.
                    requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
              examples:
                error:
                  summary: 429 RATE_LIMITED
                  value:
                    error:
                      code: RATE_LIMITED
                      message: Too many requests. Reduce the request frequency.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
        '503':
          description: An upstream service is temporarily unavailable.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - UNAUTHENTICATED
                          - FORBIDDEN
                          - VALIDATION_ERROR
                          - NOT_FOUND
                          - MODULE_DISABLED
                          - METHOD_NOT_ALLOWED
                          - REVISION_CONFLICT
                          - IDEMPOTENCY_CONFLICT
                          - RATE_LIMITED
                          - PROVIDER_UNAVAILABLE
                          - INTERNAL_ERROR
                        description: >-
                          Machine-readable code. Error codes are stable; road
                          codes identify the watched road.
                        example: PROVIDER_UNAVAILABLE
                      message:
                        type: string
                        description: >-
                          Human-readable explanation; branch on the stable error
                          code instead of this text.
                        example: An upstream service is temporarily unavailable.
                      requestId:
                        type: string
                        format: uuid
                        description: >-
                          Request trace identifier. Include this value or the
                          x-request-id header when reporting an issue.
                        example: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                              description: Path of the input field that failed validation.
                            message:
                              type: string
                              description: >-
                                Human-readable explanation; branch on the stable
                                error code instead of this text.
                            code:
                              type: string
                              maxLength: 64
                              description: >-
                                Machine-readable code. Error codes are stable;
                                road codes identify the watched road.
                            suggestion:
                              type: string
                              maxLength: 200
                              description: Short suggested fix you can show to the user.
                            retryAfter:
                              type: integer
                              minimum: 1
                              maximum: 86400
                              description: >-
                                Seconds to wait before retrying, when the issue
                                is temporary.
                          required:
                            - path
                            - message
                        description: Optional field validation details.
                    required:
                      - code
                      - message
                      - requestId
                    description: >-
                      Error details. Listener errors are structured; playback
                      ingest uses a legacy error string.
                    example:
                      code: PROVIDER_UNAVAILABLE
                      message: An upstream service is temporarily unavailable.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
                required:
                  - error
                example:
                  error:
                    code: PROVIDER_UNAVAILABLE
                    message: An upstream service is temporarily unavailable.
                    requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
              examples:
                error:
                  summary: 503 PROVIDER_UNAVAILABLE
                  value:
                    error:
                      code: PROVIDER_UNAVAILABLE
                      message: An upstream service is temporarily unavailable.
                      requestId: 28e5d867-1f87-4ca7-bca9-4ebc09b36ba3
      security:
        - machineToken: []
components:
  securitySchemes:
    machineToken:
      type: http
      scheme: bearer
      bearerFormat: rtm_…
      description: >-
        Station-scoped listener credential. Send Authorization: Bearer
        `<token>`, for example Bearer rtm_…. Sending the rtm_ token alone
        without Bearer returns 401 UNAUTHENTICATED. In the interactive
        playground, enter only the raw rtm_ token; the playground adds the
        prefix. Listener REST and GraphQL: listener:read. Listener devices:
        push:register.

````

## Related topics

- [GraphQL schema reference](/radiotools/api-reference/graphql-reference.md)
- [Other languages](/radiotools/api-reference/sdks/other-languages.md)
- [Framework bindings](/radiotools/api-reference/sdks/frameworks.md)
- [API overview](/radiotools/api-reference/overview.md)
- [TypeScript SDK](/radiotools/api-reference/sdks/typescript.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.