Roku Query API

Device, media, and TV state queries

Documentation

Specifications

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/external-control-protocol-active-app-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/external-control-protocol-app-list-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/external-control-protocol-app-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/external-control-protocol-device-info-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/external-control-protocol-media-player-schema.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-structure/external-control-protocol-device-info-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-structure/external-control-protocol-app-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-structure/external-control-protocol-app-list-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-structure/external-control-protocol-active-app-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-structure/external-control-protocol-media-player-structure.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/pay-web-services-transaction-validation-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/pay-web-services-refund-validation-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/pay-web-services-cancel-subscription-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/pay-web-services-refund-subscription-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/pay-web-services-update-bill-cycle-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/pay-web-services-issue-credit-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-schema/pay-web-services-subscription-result-schema.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-structure/pay-web-services-transaction-validation-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-structure/pay-web-services-refund-validation-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/json-structure/pay-web-services-subscription-result-structure.json

Other Resources

OpenAPI Specification

roku-query-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Roku External Control Protocol (ECP) Apps Query API
  version: '1.0'
  description: 'The External Control Protocol (ECP) is an HTTP-based API exposed on port 8060 of every Roku

    streaming device on the local network. It enables third-party applications, mobile remote-control

    apps, automated testing systems, and home-automation hubs to discover Roku devices via SSDP,

    inject simulated remote-control key presses, launch installed apps with deep-link parameters,

    query device state, and retrieve diagnostic information.


    The protocol is plain HTTP/1.1 (no TLS) and is intended for trusted local-network use only.

    Most control operations require the user to enable "Control by mobile apps" on the device.

    Additional diagnostic endpoints (chanperf, sgnodes, registry, etc.) are gated behind Roku

    Developer Mode.

    '
  contact:
    name: Roku Developer Program
    url: https://developer.roku.com
  x-generated-from: documentation
  x-source-url: https://developer.roku.com/docs/developer-program/dev-tools/external-control-api.md
servers:
- url: http://{rokuDeviceIp}:8060
  description: A Roku device on the local network
  variables:
    rokuDeviceIp:
      default: 192.168.1.100
      description: The IPv4 address of the Roku device, discovered via SSDP
tags:
- name: Query
  description: Device, media, and TV state queries
paths:
  /query/device-info:
    get:
      operationId: queryDeviceInfo
      summary: Roku Query Device Info
      description: Returns metadata about the Roku device including model, serial number, software version, network status, supported features, and user account state.
      tags:
      - Query
      responses:
        '200':
          description: Device info XML
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/DeviceInfo'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /query/apps:
    get:
      operationId: queryApps
      summary: Roku Query Installed Apps
      description: Returns the list of channels (apps) installed on the device with their app ID, name, version, and type.
      tags:
      - Query
      responses:
        '200':
          description: Apps XML list
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/AppList'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /query/active-app:
    get:
      operationId: queryActiveApp
      summary: Roku Query Active App
      description: Returns the currently running app (or Roku home if no channel is active).
      tags:
      - Query
      responses:
        '200':
          description: Active app XML
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ActiveApp'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /query/icon/{appId}:
    get:
      operationId: queryAppIcon
      summary: Roku Query App Icon
      description: Returns the binary icon image for the given installed app.
      tags:
      - Query
      parameters:
      - name: appId
        in: path
        required: true
        description: The Roku channel/app identifier
        schema:
          type: string
      responses:
        '200':
          description: Icon image
          content:
            image/png:
              schema:
                type: string
                format: binary
            image/jpeg:
              schema:
                type: string
                format: binary
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /query/media-player:
    get:
      operationId: queryMediaPlayer
      summary: Roku Query Media Player
      description: Returns the playback state, stream URI, current position, duration, and buffering metrics for the active video player.
      tags:
      - Query
      responses:
        '200':
          description: Media player state XML
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/MediaPlayer'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /query/tv-channels:
    get:
      operationId: queryTvChannels
      summary: Roku Query TV Channels
      description: Returns the list of antenna or TV-input channels tuned on a Roku TV device.
      tags:
      - Query
      responses:
        '200':
          description: TV channel list XML
          content:
            application/xml:
              schema:
                type: string
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /query/tv-active-channel:
    get:
      operationId: queryTvActiveChannel
      summary: Roku Query Active TV Channel
      description: Returns the currently tuned TV channel and signal information on a Roku TV device.
      tags:
      - Query
      responses:
        '200':
          description: Active TV channel XML
          content:
            application/xml:
              schema:
                type: string
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /query/app-state/{appId}:
    get:
      operationId: queryAppState
      summary: Roku Query App State
      description: Returns whether the specified channel is currently active, in the background, or inactive.
      tags:
      - Query
      parameters:
      - name: appId
        in: path
        required: true
        description: The Roku channel identifier
        schema:
          type: string
      responses:
        '200':
          description: App state XML
          content:
            application/xml:
              schema:
                type: string
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    ActiveApp:
      type: object
      description: Currently active app or screensaver/home if none.
      x-schema-source: documentation
      properties:
        app:
          $ref: '#/components/schemas/App'
        screensaver:
          $ref: '#/components/schemas/App'
    AppList:
      type: object
      description: Container for the list of installed channels.
      x-schema-source: documentation
      properties:
        apps:
          type: array
          items:
            $ref: '#/components/schemas/App'
    App:
      type: object
      description: An installed Roku channel.
      x-schema-source: documentation
      properties:
        id:
          type: string
          description: The Roku channel/app identifier.
          example: '12'
        type:
          type: string
          enum:
          - appl
          - menu
          - tvin
          description: appl = installed channel, menu = system menu, tvin = TV input.
        version:
          type: string
        subtype:
          type: string
        name:
          type: string
          description: Human-readable channel name.
    DeviceInfo:
      type: object
      description: Roku device metadata returned as XML.
      x-schema-source: documentation
      properties:
        udn:
          type: string
          description: Unique Device Name (UUID).
        serialNumber:
          type: string
          description: Hardware serial number.
        deviceId:
          type: string
        modelNumber:
          type: string
          description: Hardware model number (e.g., 4660X).
        modelName:
          type: string
          description: Marketing model name (e.g., Roku Ultra).
        friendlyDeviceName:
          type: string
        softwareVersion:
          type: string
          example: 12.5.0
        softwareBuild:
          type: string
        userDeviceName:
          type: string
        wifiMac:
          type: string
        ethernetMac:
          type: string
        networkType:
          type: string
          enum:
          - wifi
          - ethernet
        countryCode:
          type: string
        language:
          type: string
        timeZone:
          type: string
        powerMode:
          type: string
          enum:
          - PowerOn
          - DisplayOff
          - Headless
          - Ready
        supportsEcsTextedit:
          type: boolean
        supportsEcsMicrophone:
          type: boolean
        supportsWakeOnWlan:
          type: boolean
        developerEnabled:
          type: boolean
    MediaPlayer:
      type: object
      description: State of the active video player.
      x-schema-source: documentation
      properties:
        state:
          type: string
          enum:
          - none
          - buffer
          - play
          - pause
          - stop
          - error
          - finished
          - startup
          - open
        error:
          type: boolean
        plugin:
          type: object
          properties:
            id:
              type: string
            name:
              type: string
        format:
          type: object
          properties:
            audio:
              type: string
            captions:
              type: string
            container:
              type: string
            drm:
              type: string
            video:
              type: string
            videoRes:
              type: string
        position:
          type: integer
          description: Current playback position in milliseconds.
        duration:
          type: integer
          description: Total stream duration in milliseconds.
        is_live:
          type: boolean
        runtime:
          type: integer
        buffering:
          type: object
          properties:
            current:
              type: integer
            max:
              type: integer
            target:
              type: integer
        new_stream:
          type: object
          properties:
            speed:
              type: integer
        stream_segment:
          type: object
          properties:
            bitrate:
              type: integer
            media_sequence:
              type: integer
            segment_type:
              type: string
            time:
              type: integer