Roku Nabu Cloud

Nabu Cloud is Roku's developer cloud platform for managing remote test devices, snapshots, builds, projects, organisations, groups, and personal access tokens. It provides REST APIs (and an AsyncAPI streaming endpoint) for orchestrating remote Roku test devices and CI/CD workflows. The OpenAPI specification is published in the Roku dev-doc repository.

OpenAPI Specification

roku-nabu-cloud.yaml Raw ↑
openapi: 3.1.0
info:
  title: Roku Nabu Cloud
  contact:
    name: DevX Tools Team
    email: [email protected]
  version: 1.3.29
  description: Nabu Cloud is Roku's developer cloud platform for managing test devices, snapshots, builds, projects, organisations, groups, and personal access tokens. It provides REST APIs for 
    orchestrating remote Roku test devices and CI/CD workflows.
  x-generated-from: rokudev/dev-doc
  x-source-url: https://github.com/rokudev/dev-doc/blob/v2.0/reference/openapi.json
paths:
  /api/v1/-/livez:
    get:
      tags:
      - healthz
      summary: Roku Healthz
      operationId: healthz-healthz
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
                title: Response Healthz-Healthz
  /api/v1/-/readyz:
    get:
      tags:
      - healthz
      summary: Roku Readyz
      operationId: healthz-readyz
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                type: object
                title: Response Healthz-Readyz
  /api/v1/users/me:
    get:
      tags:
      - users
      summary: Roku Get Me
      operationId: users-get_me
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserOut'
      security:
      - Nabu Cloud: []
  /api/v1/users/me/organisations:
    get:
      tags:
      - users
      summary: Roku Get My Organisation
      description: Currently only returns a single item, the roku organisation
      operationId: users-get_my_organisation
      security:
      - Nabu Cloud: []
      parameters:
      - name: items
        in: query
        required: false
        schema:
          type: integer
          maximum: 1000000
          description: The number of items per page. Use 0 for no limit.
          default: 100
          title: Items
        description: The number of items per page. Use 0 for no limit.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          description: The page number. Use 0 for the first page.
          default: 0
          title: Page
        description: The page number. Use 0 for the first page.
      - name: slug
        in: query
        required: false
        schema:
          type: string
          minLength: 3
          maxLength: 255
          pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
          description: Slug of the organisation, used in URLs
          title: Slug
        description: Slug of the organisation, used in URLs
      - name: name
        in: query
        required: false
        schema:
          type: string
          title: Name
      - name: max_devices
        in: query
        required: false
        schema:
          type: integer
          exclusiveMinimum: 0
          description: Maximum number of devices in the organisation
          title: Max Devices
        description: Maximum number of devices in the organisation
      - name: max_snapshots
        in: query
        required: false
        schema:
          type: integer
          exclusiveMinimum: 0
          description: Maximum number of snapshots in the organisation
          title: Max Snapshots
        description: Maximum number of snapshots in the organisation
      - name: max_project_devices
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Maximum number of devices in the organisation per project, 0 for Organisation max
          title: Max Project Devices
        description: Maximum number of devices in the organisation per project, 0 for Organisation max
      - name: max_project_snapshots
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Maximum number of snapshots in the organisation per project, 0 for Organisation max
          title: Max Project Snapshots
        description: Maximum number of snapshots in the organisation per project, 0 for Organisation max
      - name: max_project_runtime
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Maximum runtime of a device in the organisation per project, 0 for Organisation max
          title: Max Project Runtime
        description: Maximum runtime of a device in the organisation per project, 0 for Organisation max
      - name: created_at
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          description: The creation day of the organisation
          title: Created At
        description: The creation day of the organisation
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OrganisationOut'
                title: Response Users-Get My Organisation
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/users/me/projects:
    get:
      tags:
      - users
      summary: Roku Get My Projects
      operationId: users-get_my_projects
      security:
      - Nabu Cloud: []
      parameters:
      - name: items
        in: query
        required: false
        schema:
          type: integer
          maximum: 1000000
          description: The number of items per page. Use 0 for no limit.
          default: 100
          title: Items
        description: The number of items per page. Use 0 for no limit.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          description: The page number. Use 0 for the first page.
          default: 0
          title: Page
        description: The page number. Use 0 for the first page.
      - name: slug
        in: query
        required: false
        schema:
          type: string
          minLength: 3
          maxLength: 255
          pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
          description: The slug of the project, used in URLs
          title: Slug
        description: The slug of the project, used in URLs
      - name: name
        in: query
        required: false
        schema:
          type: string
          minLength: 3
          maxLength: 255
          description: The name of the Project
          title: Name
        description: The name of the Project
      - name: description
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            minLength: 0
            maxLength: 4096
          - type: 'null'
          description: The description of the Project
          title: Description
        description: The description of the Project
      - name: billing_entity
        in: query
        required: false
        schema:
          type: string
          minLength: 3
          maxLength: 255
          description: The billing entity of the Project
          title: Billing Entity
        description: The billing entity of the Project
      - name: max_devices
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Maximum number of devices in the project, 0 for organisation max
          title: Max Devices
        description: Maximum number of devices in the project, 0 for organisation max
      - name: max_snapshots
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Maximum number of snapshots in the project, 0 for organisation max
          title: Max Snapshots
        description: Maximum number of snapshots in the project, 0 for organisation max
      - name: max_runtime
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Maximum runtime of a device in the project, 0 for organisation max
          title: Max Runtime
        description: Maximum runtime of a device in the project, 0 for organisation max
      - name: created_at
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          description: The creation day of the project
          title: Created At
        description: The creation day of the project
      - name: include_personal_project
        in: query
        required: false
        schema:
          type: boolean
          description: Show private projects
          default: true
          title: Include Personal Project
        description: Show private projects
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectOut'
                title: Response Users-Get My Projects
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/users/me/groups:
    get:
      tags:
      - users
      summary: Roku Get My Group
      operationId: users-get_my_group
      security:
      - Nabu Cloud: []
      parameters:
      - name: items
        in: query
        required: false
        schema:
          type: integer
          maximum: 1000000
          description: The number of items per page. Use 0 for no limit.
          default: 100
          title: Items
        description: The number of items per page. Use 0 for no limit.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          description: The page number. Use 0 for the first page.
          default: 0
          title: Page
        description: The page number. Use 0 for the first page.
      - name: project_id
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
          - type: 'null'
          title: Project Id
      - name: name
        in: query
        required: false
        schema:
          type: string
          minLength: 3
          maxLength: 255
          description: The name of the group. Unique in the organisation
          title: Name
        description: The name of the group. Unique in the organisation
      - name: description
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            minLength: 0
            maxLength: 4096
          - type: 'null'
          description: Description of the Group.
          title: Description
        description: Description of the Group.
      - name: created_at
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          description: The day the group was created
          title: Created At
        description: The day the group was created
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GroupOut'
                title: Response Users-Get My Group
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/users/me/personal_access_tokens:
    get:
      tags:
      - personal-access-tokens
      summary: Roku List Personal Access Tokens
      description: List all personal access tokens for the authenticated user with their associated scopes.
      operationId: personal-access-tokens-list_personal_access_tokens
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PersonalAccessTokenOut'
                type: array
                title: Response Personal-Access-Tokens-List Personal Access Tokens
      security:
      - Nabu Cloud: []
    post:
      tags:
      - personal-access-tokens
      summary: Roku Create Personal Access Token
      description: Create a new personal access token for the authenticated user. The token will be returned only once and cannot be retrieved again. Maximum of 20 tokens per user.
      operationId: personal-access-tokens-create_personal_access_token
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonalAccessTokenCreate'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonalAccessTokenCreated'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Nabu Cloud: []
  /api/v1/users/me/personal_access_tokens/{token_id}:
    delete:
      tags:
      - personal-access-tokens
      summary: Roku Revoke Personal Access Token
      description: Revoke a specific personal access token for the authenticated user by token ID.
      operationId: personal-access-tokens-revoke_personal_access_token
      security:
      - Nabu Cloud: []
      parameters:
      - name: token_id
        in: path
        required: true
        schema:
          type: integer
          title: Token Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/users/me/personal_access_tokens/scopes:
    get:
      tags:
      - personal-access-tokens
      summary: Roku Get Personal Access Token Scopes
      description: Get all available scopes for personal access tokens that the authenticated user can use. Admin scope is only available to superusers.
      operationId: personal-access-tokens-get_personal_access_token_scopes
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ScopeOut'
                type: array
                title: Response Personal-Access-Tokens-Get Personal Access Token Scopes
      security:
      - Nabu Cloud: []
  /api/v1/users/me/personal_access_tokens/{token_id}/refresh:
    patch:
      tags:
      - personal-access-tokens
      summary: Roku Refresh Personal Access Token
      description: Refresh a personal access token by updating its expiration date.
      operationId: personal-access-tokens-refresh_personal_access_token
      security:
      - Nabu Cloud: []
      parameters:
      - name: token_id
        in: path
        required: true
        schema:
          type: integer
          title: Token Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonalAccessTokenRefresh'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonalAccessTokenOut'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/builds:
    get:
      tags:
      - builds
      summary: Roku List All Builds
      operationId: builds-list_builds
      security:
      - Nabu Cloud: []
      parameters:
      - name: items
        in: query
        required: false
        schema:
          type: integer
          maximum: 1000000
          description: The number of items per page. Use 0 for no limit.
          default: 100
          title: Items
        description: The number of items per page. Use 0 for no limit.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          description: The page number. Use 0 for the first page.
          default: 0
          title: Page
        description: The page number. Use 0 for the first page.
      - name: artifactory_path
        in: query
        required: false
        schema:
          type: string
          minLength: 3
          maxLength: 255
          pattern: ^[a-zA-Z0-9_-]*(\/[a-zA-Z0-9._-]+)*(\:[a-zA-Z0-9._-]+)?$
          description: The path of the build in artifactory.
          title: Artifactory Path
        description: The path of the build in artifactory.
      - name: public
        in: query
        required: false
        schema:
          type: boolean
          description: Whether the build is public
          title: Public
        description: Whether the build is public
      - name: source
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/BuildSource'
          description: The source of the build
          examples:
          - official
          - premergeci
        description: The source of the build
      - name: device_type
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/DeviceType'
          description: The type of the Device.
          examples:
          - tv
        description: The type of the Device.
      - name: asan
        in: query
        required: false
        schema:
          type: boolean
          description: Whether the build is ASAN
          title: Asan
        description: Whether the build is ASAN
      - name: only_artifactory_path
        in: query
        required: false
        schema:
          anyOf:
          - type: boolean
          - type: 'null'
          description: Only return the artifactory path of the build
          title: Only Artifactory Path
        description: Only return the artifactory path of the build
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                anyOf:
                - type: array
                  items:
                    $ref: '#/components/schemas/BuildOut'
                - type: array
                  items:
                    type: string
                title: Response Builds-List Builds
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/builds/{build_id}:
    get:
      tags:
      - builds
      summary: Roku Get Build
      operationId: builds-get_build
      security:
      - Nabu Cloud: []
      parameters:
      - name: build_id
        in: path
        required: true
        schema:
          type: integer
          title: Build Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuildOut'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/organisation-roles:
    get:
      tags:
      - organisation-roles
      summary: Roku List Organisation Roles
      operationId: organisation-roles-list_organisation_roles
      security:
      - Nabu Cloud: []
      parameters:
      - name: items
        in: query
        required: false
        schema:
          type: integer
          maximum: 1000000
          description: The number of items per page. Use 0 for no limit.
          default: 100
          title: Items
        description: The number of items per page. Use 0 for no limit.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          description: The page number. Use 0 for the first page.
          default: 0
          title: Page
        description: The page number. Use 0 for the first page.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OrganisationRoleOut'
                title: Response Organisation-Roles-List Organisation Roles
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/organisation-roles/{role_id}:
    get:
      tags:
      - organisation-roles
      summary: Roku Get Organisation Role
      operationId: organisation-roles-get_organisation_role
      security:
      - Nabu Cloud: []
      parameters:
      - name: role_id
        in: path
        required: true
        schema:
          type: integer
          title: Role Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganisationRoleOut'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/organisations:
    get:
      tags:
      - organisations
      summary: Roku List Organisations
      operationId: organisations-list_organisations
      security:
      - Nabu Cloud: []
      parameters:
      - name: items
        in: query
        required: false
        schema:
          type: integer
          maximum: 1000000
          description: The number of items per page. Use 0 for no limit.
          default: 100
          title: Items
        description: The number of items per page. Use 0 for no limit.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          description: The page number. Use 0 for the first page.
          default: 0
          title: Page
        description: The page number. Use 0 for the first page.
      - name: slug
        in: query
        required: false
        schema:
          type: string
          minLength: 3
          maxLength: 255
          pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
          description: Slug of the organisation, used in URLs
          title: Slug
        description: Slug of the organisation, used in URLs
      - name: name
        in: query
        required: false
        schema:
          type: string
          title: Name
      - name: max_devices
        in: query
        required: false
        schema:
          type: integer
          exclusiveMinimum: 0
          description: Maximum number of devices in the organisation
          title: Max Devices
        description: Maximum number of devices in the organisation
      - name: max_snapshots
        in: query
        required: false
        schema:
          type: integer
          exclusiveMinimum: 0
          description: Maximum number of snapshots in the organisation
          title: Max Snapshots
        description: Maximum number of snapshots in the organisation
      - name: max_project_devices
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Maximum number of devices in the organisation per project, 0 for Organisation max
          title: Max Project Devices
        description: Maximum number of devices in the organisation per project, 0 for Organisation max
      - name: max_project_snapshots
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Maximum number of snapshots in the organisation per project, 0 for Organisation max
          title: Max Project Snapshots
        description: Maximum number of snapshots in the organisation per project, 0 for Organisation max
      - name: max_project_runtime
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Maximum runtime of a device in the organisation per project, 0 for Organisation max
          title: Max Project Runtime
        description: Maximum runtime of a device in the organisation per project, 0 for Organisation max
      - name: created_at
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          description: The creation day of the organisation
          title: Created At
        description: The creation day of the organisation
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OrganisationOut'
                title: Response Organisations-List Organisations
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/organisations/{organisation_id}:
    get:
      tags:
      - organisations
      summary: Roku Get Organisation
      description: Set Organisation_id to 1. Currently not in use as there is only Roku, but kept for future use.
      operationId: organisations-get_organisation
      security:
      - Nabu Cloud: []
      parameters:
      - name: organisation_id
        in: path
        required: true
        schema:
          type: integer
          title: Organisation Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganisationOut'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/organisations/{organisation_id}/members:
    get:
      tags:
      - organisations
      summary: Roku List Organisation Members
      operationId: organisations-list_organisation_members
      security:
      - Nabu Cloud: []
      parameters:
      - name: organisation_id
        in: path
        required: true
        schema:
          type: integer
          title: Organisation Id
      - name: items
        in: query
        required: false
        schema:
          type: integer
          maximum: 1000000
          description: The number of items per page. Use 0 for no limit.
          default: 100
          title: Items
        description: The number of items per page. Use 0 for no limit.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          description: The page number. Use 0 for the first page.
          default: 0
          title: Page
        description: The page number. Use 0 for the first page.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OrganisationMemberOut'
                title: Response Organisations-List Organisation Members
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/organisations/{organisation_id}/members/{user_id}:
    get:
      tags:
      - organisations
      summary: Roku Get Organisation Member
      operationId: organisations-get_organisation_member
      security:
      - Nabu Cloud: []
      parameters:
      - name: user_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: User Id
      - name: organisation_id
        in: path
        required: true
        schema:
          type: integer
          title: Organisation Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganisationMemberOut'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/organisations/{organisation_id}/regions:
    get:
      tags:
      - organisations
      summary: Roku List Organisation Regions
      description: Set Organisation_id to 1. Currently not in use as there is only Roku, but kept for future use.
      operationId: organisations-list_organisation_regions
      security:
      - Nabu Cloud: []
      parameters:
      - name: organisation_id
        in: path
        required: true
        schema:
          type: integer
          title: Organisation Id
      - name: items
        in: query
        required: false
        schema:
          type: integer
          maximum: 1000000
          description: The number of items per page. Use 0 for no limit.
          default: 100
          title: Items
        description: The number of items per page. Use 0 for no limit.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          description: The page number. Use 0 for the first page.
          default: 0
          title: Page
        description: The page number. Use 0 for the first page.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OrganisationRegionOut'
                title: Response Organisations-List Organisation Regions
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/organisations/{organisation_id}/regions/{region_id}:
    get:
      tags:
      - organisations
      summary: Roku Get Organisation Region
      operationId: organisations-get_organisation_region
      security:
      - Nabu Cloud: []
      parameters:
      - name: region_id
        in: path
        required: true
        schema:
          type: integer
          title: Region Id
      - name: organisation_id
        in: path
        required: true
        schema:
          type: integer
          title: Organisation Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganisationRegionOut'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/organisations/{organisation_id}/roles/projects:
    get:
      tags:
      - organisations
      summary: Roku List Project Roles
      operationId: organisations-list_project_roles
      security:
      - Nabu Cloud: []
      parameters:
      - name: organisation_id
        in: path
        required: true
        schema:
          type: integer
          title: Organisation Id
      - name: items
        in: query
     

# --- truncated at 32 KB (139 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/roku/refs/heads/main/openapi/roku-nabu-cloud.yaml