> ## 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 station

> Fails closed (404) for unknown, inactive or public-offline stations. Per-API switches can null individual resource hrefs; disabled APIs return the same NOT_FOUND body as public-offline. `resources.weather` and `resources.traffic` stay null without redistribution entitlement even when their switches are on. Poll no faster than `delivery.pollIntervalSeconds` and send If-None-Match.



## OpenAPI

````yaml /radiotools/openapi.json get /api/v1/stations/{stationSlug}
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}:
    get:
      tags:
        - Public listener
      summary: >-
        Public station identity, timezone, publishing language and resource
        links
      description: >-
        Fails closed (404) for unknown, inactive or public-offline stations.
        Per-API switches can null individual resource hrefs; disabled APIs
        return the same NOT_FOUND body as public-offline. `resources.weather`
        and `resources.traffic` stay null without redistribution entitlement
        even when their switches are on. Poll no faster than
        `delivery.pollIntervalSeconds` and send If-None-Match.
      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: Delivery-safe station projection
          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
                  id:
                    type: string
                    minLength: 1
                    maxLength: 80
                    description: >-
                      Identifier of this resource. Use the value returned by the
                      API for subsequent lookups.
                    example: station-rivier
                  slug:
                    type: string
                    minLength: 3
                    maxLength: 63
                    description: Public URL slug of the station.
                    example: radio-rivier
                  name:
                    type: string
                    minLength: 1
                    maxLength: 120
                    description: Human-readable display name.
                    example: Radio Rivier
                  timezone:
                    type: string
                    minLength: 1
                    maxLength: 100
                    description: >-
                      IANA timezone used to interpret station calendar dates,
                      for example Europe/Amsterdam.
                    example: Europe/Amsterdam
                  publishingLanguage:
                    type: string
                    minLength: 2
                    maxLength: 35
                    description: Station publishing language code, for example nl or en.
                    example: nl
                  profile:
                    type: object
                    properties:
                      tagline:
                        type:
                          - string
                          - 'null'
                        maxLength: 160
                        description: Short station slogan.
                        example: The sound of the river
                      description:
                        type:
                          - string
                          - 'null'
                        maxLength: 2000
                        description: Longer public description of the station.
                        example: Local news, music, and events for the riverside towns.
                      frequencyLabel:
                        type:
                          - string
                          - 'null'
                        maxLength: 80
                        description: >-
                          Frequency or channel as shown to listeners, for
                          example FM 104.3.
                        example: FM 104.3
                      websiteUrl:
                        type:
                          - string
                          - 'null'
                        maxLength: 500
                        format: uri
                        description: Station website URL.
                        example: https://www.example.com
                      streamUrl:
                        type:
                          - string
                          - 'null'
                        maxLength: 500
                        format: uri
                        description: Public audio stream URL.
                        example: https://stream.example.com/radio-rivier.mp3
                      contactEmail:
                        type:
                          - string
                          - 'null'
                        maxLength: 254
                        format: email
                        description: Public contact email address.
                        example: studio@example.com
                      phone:
                        type:
                          - string
                          - 'null'
                        maxLength: 40
                        description: Public phone number.
                        example: +31 20 123 4567
                      address:
                        type:
                          - object
                          - 'null'
                        properties:
                          street:
                            type:
                              - string
                              - 'null'
                            maxLength: 120
                            description: Street and house number.
                            example: Kade 12
                          postalCode:
                            type:
                              - string
                              - 'null'
                            maxLength: 20
                            description: Postal code.
                            example: 1011 AB
                          city:
                            type:
                              - string
                              - 'null'
                            maxLength: 120
                            description: City.
                            example: Amsterdam
                          country:
                            type:
                              - string
                              - 'null'
                            maxLength: 120
                            description: Country.
                            example: Netherlands
                        required:
                          - street
                          - postalCode
                          - city
                          - country
                        additionalProperties: false
                        description: Public postal address.
                        example:
                          street: Kade 12
                          postalCode: 1011 AB
                          city: Amsterdam
                          country: Netherlands
                      social:
                        type: array
                        items:
                          type: object
                          properties:
                            network:
                              type: string
                              enum:
                                - facebook
                                - instagram
                                - x
                                - tiktok
                                - youtube
                                - linkedin
                                - mastodon
                                - bluesky
                                - whatsapp
                                - other
                              description: Social network of this profile.
                              example: instagram
                            url:
                              type: string
                              maxLength: 500
                              format: uri
                              description: Profile URL on the social network.
                              example: https://instagram.com/example
                          required:
                            - network
                            - url
                          additionalProperties: false
                          example:
                            network: instagram
                            url: https://instagram.com/example
                        maxItems: 12
                        description: Social media profiles of the station.
                        example:
                          - network: instagram
                            url: https://instagram.com/example
                    required:
                      - tagline
                      - description
                      - frequencyLabel
                      - websiteUrl
                      - streamUrl
                      - contactEmail
                      - phone
                      - address
                      - social
                    additionalProperties: false
                    description: >-
                      Public station profile for an about or contact page. Each
                      value is null when the station has not set it.
                    example:
                      tagline: The sound of the river
                      description: Local news, music, and events for the riverside towns.
                      frequencyLabel: FM 104.3
                      websiteUrl: https://www.example.com
                      streamUrl: https://stream.example.com/radio-rivier.mp3
                      contactEmail: studio@example.com
                      phone: +31 20 123 4567
                      address:
                        street: Kade 12
                        postalCode: 1011 AB
                        city: Amsterdam
                        country: Netherlands
                      social:
                        - network: instagram
                          url: https://instagram.com/example
                  resources:
                    type: object
                    properties:
                      schemas:
                        type: string
                        description: >-
                          Discovery link for schemas; follow the returned URL.
                          Nullable links are null when disabled or unavailable.
                        example: /api/v1/stations/radio-rivier/schemas
                      content:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Discovery link for content; follow the returned URL.
                          Nullable links are null when disabled or unavailable.
                        example: /api/v1/stations/radio-rivier/content
                      schedule:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Discovery link for schedule; follow the returned URL.
                          Nullable links are null when disabled or unavailable.
                        example: /api/v1/stations/radio-rivier/schedule
                      programs:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Discovery link for programs; follow the returned URL.
                          Nullable links are null when disabled or unavailable.
                        example: /api/v1/stations/radio-rivier/programs
                      broadcast:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Discovery link for broadcast; follow the returned URL.
                          Nullable links are null when disabled or unavailable.
                        example: /api/v1/stations/radio-rivier/broadcast/current
                      nowPlaying:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Discovery link for nowPlaying; follow the returned
                          URL. Nullable links are null when disabled or
                          unavailable.
                        example: /api/v1/stations/radio-rivier/now-playing
                      trackHistory:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Discovery link for trackHistory; follow the returned
                          URL. Nullable links are null when disabled or
                          unavailable.
                        example: /api/v1/stations/radio-rivier/track-history
                      realtime:
                        type:
                          - object
                          - 'null'
                        properties:
                          url:
                            type: string
                            format: uri
                            description: >-
                              Secure WebSocket (wss:) URL of the feed. Connect
                              without a token.
                            example: >-
                              wss://radiotools.rivi.software/api/v1/realtime/stations/station-rivier/feed
                          channel:
                            type: string
                            minLength: 1
                            description: >-
                              Channel name carried by feed events. Ignore events
                              for other channels.
                            example: databases.public.tables.public_station_feed.rows
                        required:
                          - url
                          - channel
                        description: >-
                          The station's public realtime feed: a WebSocket url
                          and the channel its events use. No token is needed.
                          Null when the feed is switched off.
                        example:
                          url: >-
                            wss://radiotools.rivi.software/api/v1/realtime/stations/station-rivier/feed
                          channel: databases.public.tables.public_station_feed.rows
                      weather:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Discovery link for weather; follow the returned URL.
                          Nullable links are null when disabled or unavailable.
                        example: null
                      traffic:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Discovery link for traffic; follow the returned URL.
                          Nullable links are null when disabled or unavailable.
                        example: null
                      media:
                        type: string
                        description: >-
                          Discovery link for media; follow the returned URL.
                          Nullable links are null when disabled or unavailable.
                        example: /api/media/public/station-rivier
                    required:
                      - schemas
                      - content
                      - schedule
                      - programs
                      - broadcast
                      - nowPlaying
                      - trackHistory
                      - realtime
                      - weather
                      - traffic
                      - media
                    description: >-
                      Discovery links for this station. A null link means the
                      resource is disabled or unavailable.
                    example:
                      schemas: /api/v1/stations/radio-rivier/schemas
                      content: /api/v1/stations/radio-rivier/content
                      schedule: /api/v1/stations/radio-rivier/schedule
                      programs: /api/v1/stations/radio-rivier/programs
                      broadcast: /api/v1/stations/radio-rivier/broadcast/current
                      nowPlaying: /api/v1/stations/radio-rivier/now-playing
                      trackHistory: /api/v1/stations/radio-rivier/track-history
                      realtime:
                        url: >-
                          wss://radiotools.rivi.software/api/v1/realtime/stations/station-rivier/feed
                        channel: databases.public.tables.public_station_feed.rows
                      weather: null
                      traffic: null
                      media: /api/media/public/station-rivier
                  delivery:
                    type: object
                    properties:
                      cache:
                        type: string
                        enum:
                          - no-store
                        description: >-
                          Listener responses must not be stored in shared
                          caches.
                        example: no-store
                      conditional:
                        type: string
                        enum:
                          - etag
                        description: >-
                          Use the response ETag in If-None-Match on your next
                          read.
                        example: etag
                      pollIntervalSeconds:
                        type: integer
                        exclusiveMinimum: 0
                        description: Minimum interval between polls, in seconds.
                        example: 30
                    required:
                      - cache
                      - conditional
                      - pollIntervalSeconds
                    description: >-
                      Delivery policy for listener reads. Respect the advertised
                      polling interval.
                    example:
                      cache: no-store
                      conditional: etag
                      pollIntervalSeconds: 30
                required:
                  - contractVersion
                  - id
                  - slug
                  - name
                  - timezone
                  - publishingLanguage
                  - resources
                  - delivery
                example:
                  contractVersion: 1
                  id: station-rivier
                  slug: radio-rivier
                  name: Radio Rivier
                  timezone: Europe/Amsterdam
                  publishingLanguage: nl
                  resources:
                    schemas: /api/v1/stations/radio-rivier/schemas
                    content: /api/v1/stations/radio-rivier/content
                    schedule: /api/v1/stations/radio-rivier/schedule
                    programs: /api/v1/stations/radio-rivier/programs
                    broadcast: /api/v1/stations/radio-rivier/broadcast/current
                    nowPlaying: /api/v1/stations/radio-rivier/now-playing
                    trackHistory: /api/v1/stations/radio-rivier/track-history
                    realtime:
                      url: >-
                        wss://radiotools.rivi.software/api/v1/realtime/stations/station-rivier/feed
                      channel: databases.public.tables.public_station_feed.rows
                    weather: null
                    traffic: null
                    media: /api/media/public/station-rivier
                  delivery:
                    cache: no-store
                    conditional: etag
                    pollIntervalSeconds: 30
                  profile:
                    tagline: The sound of the river
                    description: Local news, music, and events for the riverside towns.
                    frequencyLabel: FM 104.3
                    websiteUrl: https://www.example.com
                    streamUrl: https://stream.example.com/radio-rivier.mp3
                    contactEmail: studio@example.com
                    phone: +31 20 123 4567
                    address:
                      street: Kade 12
                      postalCode: 1011 AB
                      city: Amsterdam
                      country: Netherlands
                    social:
                      - network: instagram
                        url: https://instagram.com/example
              examples:
                station:
                  summary: Station discovery
                  description: >-
                    Weather and traffic links are null in this example because
                    those resources are unavailable. Follow the links returned
                    by your own station.
                  value:
                    contractVersion: 1
                    id: station-rivier
                    slug: radio-rivier
                    name: Radio Rivier
                    timezone: Europe/Amsterdam
                    publishingLanguage: nl
                    resources:
                      schemas: /api/v1/stations/radio-rivier/schemas
                      content: /api/v1/stations/radio-rivier/content
                      schedule: /api/v1/stations/radio-rivier/schedule
                      programs: /api/v1/stations/radio-rivier/programs
                      broadcast: /api/v1/stations/radio-rivier/broadcast/current
                      nowPlaying: /api/v1/stations/radio-rivier/now-playing
                      trackHistory: /api/v1/stations/radio-rivier/track-history
                      realtime:
                        url: >-
                          wss://radiotools.rivi.software/api/v1/realtime/stations/station-rivier/feed
                        channel: databases.public.tables.public_station_feed.rows
                      weather: null
                      traffic: null
                      media: /api/media/public/station-rivier
                    delivery:
                      cache: no-store
                      conditional: etag
                      pollIntervalSeconds: 30
                    profile:
                      tagline: The sound of the river
                      description: Local news, music, and events for the riverside towns.
                      frequencyLabel: FM 104.3
                      websiteUrl: https://www.example.com
                      streamUrl: https://stream.example.com/radio-rivier.mp3
                      contactEmail: studio@example.com
                      phone: +31 20 123 4567
                      address:
                        street: Kade 12
                        postalCode: 1011 AB
                        city: Amsterdam
                        country: Netherlands
                      social:
                        - network: instagram
                          url: https://instagram.com/example
        '304':
          description: >-
            Not modified: your authenticated conditional request matched the
            current ETag. No response body; reuse your previous representation.
        '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

- [Other languages](/radiotools/api-reference/sdks/other-languages.md)
- [TypeScript SDK](/radiotools/api-reference/sdks/typescript.md)
- [API overview](/radiotools/api-reference/overview.md)
- [Framework bindings](/radiotools/api-reference/sdks/frameworks.md)
- [Get started](/radiotools/getting-started.md)


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