Yodeck Workspaces API

Programmatically create, configure, and control workspaces - separate environments with their own users, permissions, and content - for agencies and multi-location deployments. Endpoints modeled from Yodeck's documented resource set.

OpenAPI Specification

yodeck-signage-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Yodeck REST API (Modeled)
  description: >-
    Programmatic management of a Yodeck digital signage account - media, playlists,
    layouts, screens (monitors), schedules, shows, and workspaces. Yodeck publishes
    a REST API whose interactive reference lives at https://app.yodeck.com/api-docs/
    and is available to Premium and Enterprise plans. Access uses a named,
    role-scoped API token generated under Account Settings > Advanced Settings >
    API Tokens; the token acts as a user and inherits the permissions of the role
    assigned to it.


    IMPORTANT: The live Yodeck API reference is behind an account login, so this
    document is MODELED from Yodeck's publicly documented resource set and product
    pages, not copied from an official machine-readable spec. Base path, exact
    field names, pagination, and the precise Authorization header format should be
    confirmed against the live reference at app.yodeck.com/api-docs before relying
    on this specification. Endpoints here are illustrative of the documented
    capabilities (CRUD over media, playlists, layouts, screens, schedules, shows,
    workspaces) rather than verbatim.
  version: '1.0'
  contact:
    name: Yodeck
    url: https://www.yodeck.com
    email: support@yodeck.com
  x-modeled: true
  x-modeled-note: >-
    Endpoints and schemas modeled from Yodeck's documented resource set; the
    authoritative reference is login-gated at https://app.yodeck.com/api-docs/.
servers:
  - url: https://app.yodeck.com/api/v1
    description: Yodeck REST API (base path modeled; confirm against live reference)
security:
  - tokenAuth: []
tags:
  - name: Media
    description: Images, videos, documents, web pages, and app content assets.
  - name: Playlists
    description: Ordered sequences of media with per-item duration and transitions.
  - name: Layouts
    description: Multi-zone screen layouts that split a display into regions.
  - name: Screens
    description: Screens (monitors/players), their status, and remote control.
  - name: Schedules
    description: Time-based rules controlling what plays where and when.
  - name: Shows
    description: Reusable groupings of media, playlists, and layouts.
  - name: Workspaces
    description: Separate environments with their own users, permissions, and content.
paths:
  /media/:
    get:
      operationId: listMedia
      tags: [Media]
      summary: List media assets
      description: Lists media assets in the account or workspace.
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
      responses:
        '200':
          description: A paginated list of media assets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MediaList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createMedia
      tags: [Media]
      summary: Create or upload a media asset
      description: >-
        Creates a media asset. Media can be uploaded directly or ingested from an
        external URL for automated sync.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MediaInput'
      responses:
        '201':
          description: Media asset created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Media'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /media/{id}/:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getMedia
      tags: [Media]
      summary: Retrieve a media asset
      responses:
        '200':
          description: A media asset.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Media'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateMedia
      tags: [Media]
      summary: Update a media asset
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MediaInput'
      responses:
        '200':
          description: Media asset updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Media'
    delete:
      operationId: deleteMedia
      tags: [Media]
      summary: Delete a media asset
      responses:
        '204':
          description: Media asset deleted.
  /playlists/:
    get:
      operationId: listPlaylists
      tags: [Playlists]
      summary: List playlists
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
      responses:
        '200':
          description: A paginated list of playlists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistList'
    post:
      operationId: createPlaylist
      tags: [Playlists]
      summary: Create a playlist
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlaylistInput'
      responses:
        '201':
          description: Playlist created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Playlist'
  /playlists/{id}/:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getPlaylist
      tags: [Playlists]
      summary: Retrieve a playlist
      responses:
        '200':
          description: A playlist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Playlist'
    patch:
      operationId: updatePlaylist
      tags: [Playlists]
      summary: Update a playlist
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlaylistInput'
      responses:
        '200':
          description: Playlist updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Playlist'
    delete:
      operationId: deletePlaylist
      tags: [Playlists]
      summary: Delete a playlist
      responses:
        '204':
          description: Playlist deleted.
  /layouts/:
    get:
      operationId: listLayouts
      tags: [Layouts]
      summary: List layouts
      responses:
        '200':
          description: A paginated list of layouts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LayoutList'
    post:
      operationId: createLayout
      tags: [Layouts]
      summary: Create a layout
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LayoutInput'
      responses:
        '201':
          description: Layout created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Layout'
  /layouts/{id}/:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getLayout
      tags: [Layouts]
      summary: Retrieve a layout
      responses:
        '200':
          description: A layout.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Layout'
    patch:
      operationId: updateLayout
      tags: [Layouts]
      summary: Update a layout
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LayoutInput'
      responses:
        '200':
          description: Layout updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Layout'
    delete:
      operationId: deleteLayout
      tags: [Layouts]
      summary: Delete a layout
      responses:
        '204':
          description: Layout deleted.
  /monitors/:
    get:
      operationId: listScreens
      tags: [Screens]
      summary: List screens (monitors)
      description: Lists screens. Yodeck refers to a screen/player as a monitor.
      responses:
        '200':
          description: A paginated list of screens.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenList'
    post:
      operationId: createScreen
      tags: [Screens]
      summary: Register a screen
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenInput'
      responses:
        '201':
          description: Screen registered.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Screen'
  /monitors/{id}/:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getScreen
      tags: [Screens]
      summary: Retrieve a screen
      responses:
        '200':
          description: A screen with status and assigned content.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Screen'
    patch:
      operationId: updateScreen
      tags: [Screens]
      summary: Update a screen
      description: Update screen settings or the content (media, playlist, layout, or show) assigned to it.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenInput'
      responses:
        '200':
          description: Screen updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Screen'
    delete:
      operationId: deleteScreen
      tags: [Screens]
      summary: Delete a screen
      responses:
        '204':
          description: Screen deleted.
  /monitors/{id}/reboot/:
    parameters:
      - $ref: '#/components/parameters/Id'
    post:
      operationId: rebootScreen
      tags: [Screens]
      summary: Reboot a screen (modeled action)
      description: >-
        Triggers a remote reboot of the player. Modeled from Yodeck's documented
        remote screen control and monitoring capability; confirm the exact action
        path against the live reference.
      responses:
        '202':
          description: Reboot requested.
  /schedules/:
    get:
      operationId: listSchedules
      tags: [Schedules]
      summary: List schedules
      responses:
        '200':
          description: A paginated list of schedules.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScheduleList'
    post:
      operationId: createSchedule
      tags: [Schedules]
      summary: Create a schedule
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScheduleInput'
      responses:
        '201':
          description: Schedule created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Schedule'
  /schedules/{id}/:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getSchedule
      tags: [Schedules]
      summary: Retrieve a schedule
      responses:
        '200':
          description: A schedule.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Schedule'
    patch:
      operationId: updateSchedule
      tags: [Schedules]
      summary: Update a schedule
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScheduleInput'
      responses:
        '200':
          description: Schedule updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Schedule'
    delete:
      operationId: deleteSchedule
      tags: [Schedules]
      summary: Delete a schedule
      responses:
        '204':
          description: Schedule deleted.
  /shows/:
    get:
      operationId: listShows
      tags: [Shows]
      summary: List shows
      responses:
        '200':
          description: A paginated list of shows.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShowList'
    post:
      operationId: createShow
      tags: [Shows]
      summary: Create a show
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShowInput'
      responses:
        '201':
          description: Show created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Show'
  /shows/{id}/:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getShow
      tags: [Shows]
      summary: Retrieve a show
      responses:
        '200':
          description: A show.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Show'
    patch:
      operationId: updateShow
      tags: [Shows]
      summary: Update a show
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShowInput'
      responses:
        '200':
          description: Show updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Show'
    delete:
      operationId: deleteShow
      tags: [Shows]
      summary: Delete a show
      responses:
        '204':
          description: Show deleted.
  /workspaces/:
    get:
      operationId: listWorkspaces
      tags: [Workspaces]
      summary: List workspaces
      responses:
        '200':
          description: A paginated list of workspaces.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceList'
    post:
      operationId: createWorkspace
      tags: [Workspaces]
      summary: Create a workspace
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkspaceInput'
      responses:
        '201':
          description: Workspace created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workspace'
  /workspaces/{id}/:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getWorkspace
      tags: [Workspaces]
      summary: Retrieve a workspace
      responses:
        '200':
          description: A workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workspace'
    patch:
      operationId: updateWorkspace
      tags: [Workspaces]
      summary: Update a workspace
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkspaceInput'
      responses:
        '200':
          description: Workspace updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workspace'
    delete:
      operationId: deleteWorkspace
      tags: [Workspaces]
      summary: Delete a workspace
      responses:
        '204':
          description: Workspace deleted.
components:
  securitySchemes:
    tokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Named, role-scoped API token generated in the Yodeck console (Account
        Settings > Advanced Settings > API Tokens). The token acts as a user with
        the permissions of its assigned role. Send it in the Authorization header.
        The exact header value format (for example "Token name:secret") is
        documented in the login-gated reference and should be confirmed there.
  parameters:
    Id:
      name: id
      in: path
      required: true
      description: The numeric identifier of the resource.
      schema:
        type: integer
    Page:
      name: page
      in: query
      required: false
      description: Page number for paginated results (modeled).
      schema:
        type: integer
    PageSize:
      name: page_size
      in: query
      required: false
      description: Number of results per page (modeled).
      schema:
        type: integer
  responses:
    Unauthorized:
      description: Missing or invalid API token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        detail:
          type: string
    MediaList:
      type: object
      properties:
        count:
          type: integer
        next:
          type: string
          nullable: true
        previous:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Media'
    Media:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        media_type:
          type: string
          description: Type of media (image, video, document, webpage, app, etc.).
        source_url:
          type: string
          description: External URL for media ingested by URL sync.
        duration:
          type: integer
          description: Default display duration in seconds.
        created_at:
          type: string
          format: date-time
    MediaInput:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        media_type:
          type: string
        source_url:
          type: string
        duration:
          type: integer
    PlaylistList:
      type: object
      properties:
        count:
          type: integer
        results:
          type: array
          items:
            $ref: '#/components/schemas/Playlist'
    Playlist:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        items:
          type: array
          description: Ordered media items with durations and transitions.
          items:
            type: object
            properties:
              media_id:
                type: integer
              duration:
                type: integer
              order:
                type: integer
    PlaylistInput:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        items:
          type: array
          items:
            type: object
            properties:
              media_id:
                type: integer
              duration:
                type: integer
              order:
                type: integer
    LayoutList:
      type: object
      properties:
        count:
          type: integer
        results:
          type: array
          items:
            $ref: '#/components/schemas/Layout'
    Layout:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        zones:
          type: array
          description: Regions of the screen, each with its own content.
          items:
            type: object
            properties:
              name:
                type: string
              x:
                type: number
              y:
                type: number
              width:
                type: number
              height:
                type: number
              content_type:
                type: string
              content_id:
                type: integer
    LayoutInput:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        zones:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              x:
                type: number
              y:
                type: number
              width:
                type: number
              height:
                type: number
              content_type:
                type: string
              content_id:
                type: integer
    ScreenList:
      type: object
      properties:
        count:
          type: integer
        results:
          type: array
          items:
            $ref: '#/components/schemas/Screen'
    Screen:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        status:
          type: string
          description: Player connectivity/health status.
        default_show:
          type: integer
          nullable: true
        content_type:
          type: string
          description: Type of content assigned (media, playlist, layout, or show).
        content_id:
          type: integer
          nullable: true
        last_seen:
          type: string
          format: date-time
    ScreenInput:
      type: object
      properties:
        name:
          type: string
        content_type:
          type: string
        content_id:
          type: integer
    ScheduleList:
      type: object
      properties:
        count:
          type: integer
        results:
          type: array
          items:
            $ref: '#/components/schemas/Schedule'
    Schedule:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        rules:
          type: array
          description: Recurring dayparting or date-range rules.
          items:
            type: object
            properties:
              start:
                type: string
              end:
                type: string
              days_of_week:
                type: array
                items:
                  type: string
              content_type:
                type: string
              content_id:
                type: integer
    ScheduleInput:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        rules:
          type: array
          items:
            type: object
            properties:
              start:
                type: string
              end:
                type: string
              days_of_week:
                type: array
                items:
                  type: string
              content_type:
                type: string
              content_id:
                type: integer
    ShowList:
      type: object
      properties:
        count:
          type: integer
        results:
          type: array
          items:
            $ref: '#/components/schemas/Show'
    Show:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        items:
          type: array
          description: Grouped media, playlists, and layouts.
          items:
            type: object
            properties:
              content_type:
                type: string
              content_id:
                type: integer
              order:
                type: integer
    ShowInput:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        items:
          type: array
          items:
            type: object
            properties:
              content_type:
                type: string
              content_id:
                type: integer
              order:
                type: integer
    WorkspaceList:
      type: object
      properties:
        count:
          type: integer
        results:
          type: array
          items:
            $ref: '#/components/schemas/Workspace'
    Workspace:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        description:
          type: string
    WorkspaceInput:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        description:
          type: string