ScreenCloud
ScreenCloud is a cloud digital signage platform that turns any screen into a managed display for content, dashboards, and apps. Its developer surface is the ScreenCloud Studio API - a single public GraphQL endpoint (bearer-token authenticated, region-specific, copied from the DEVELOPER tab in Studio) that lets you automate anything you can do in Studio by hand - pairing and managing screens, building playlists and channels, uploading media and files, casting content, installing and configuring signage apps, and exporting playback logs and QR metrics. ScreenCloud also runs a Developer Platform / App framework for building custom HTML/JavaScript signage apps that can be published (with approval) to the App Store. There is no documented public WebSocket API - the Studio API is request/response GraphQL over HTTPS.
6 APIs
0 Features
Digital SignageScreensContent ManagementGraphQLMediaPlaylistsDisplays
GraphQL operations for managing screens - pair and depair devices (pairScreen, depairScreen), list and search screens (allScreens, screen, screenByDeviceId, searchScreen), organ...
GraphQL operations for building and maintaining playlists - the ordered sequences of content shown on screens. Create, update, and delete playlists (createPlaylist, updatePlayli...
GraphQL operations for uploading and organizing the media library - images, videos, and documents. Create and manage files (createFile, updateFileById, deleteFileById) and folde...
GraphQL operations for channels - the multi-zone layouts that compose playlists, apps, and media into a single screen experience - and for casting. Create, update, publish, and ...
GraphQL operations for signage apps and their instances - list the app catalog and categories (allApps, allAppCategories, appBySlug), create and configure app instances (createA...
GraphQL operations for proof-of-play and engagement reporting - fetch and export what played on which screen and when (getPlaybackLogs, exportPlaybackLogs), query logs and scree...
opencollection: 1.0.0
info:
name: ScreenCloud Studio API (GraphQL)
version: '1.0'
description: GraphQL operations for the ScreenCloud Studio API. Set graphqlEndpoint to the region-specific endpoint from
Studio > Account Settings > DEVELOPER, and bearerToken to a token created on that same tab. All requests are HTTP POST
with a GraphQL body.
request:
auth:
type: bearer
token: '{{bearerToken}}'
variables:
- name: graphqlEndpoint
value: https://studio.screencloud.com
description: Region-specific Studio GraphQL endpoint copied from the DEVELOPER tab.
- name: bearerToken
value: ''
description: Studio API token (Account Settings > DEVELOPER > New Token).
items:
- info:
name: Session
type: folder
items:
- info:
name: Connectivity test (currentOrgId)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"query { currentOrgId }"}'
docs: Simplest query to confirm the endpoint and token work.
- info:
name: Current org and user
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"query { currentOrg { id name } currentUser { id email } }"}'
docs: Returns the org and user the token is scoped to.
- info:
name: Screens
type: folder
items:
- info:
name: List screens (allScreens)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"query { allScreens { id name deviceId } }"}'
docs: Lists screens in the account.
- info:
name: Pair a screen (pairScreen)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($code: String!, $name: String, $spaceId: UUID) { pairScreen(pairingCode: $code, name: $name,
spaceId: $spaceId) { id name deviceId } }","variables":{"code":"","name":"Lobby","spaceId":null}}'
docs: Pairs a device using the pairing code shown on the screen.
- info:
name: Depair a screen (depairScreen)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($id: UUID!) { depairScreen(id: $id) { id } }","variables":{"id":""}}'
docs: Unpairs a screen, freeing its license.
- info:
name: Assign playlist to screen (setScreenContentByPlaylistId)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($screenId: UUID!, $playlistId: UUID!) { setScreenContentByPlaylistId(screenId: $screenId,
playlistId: $playlistId) { id } }","variables":{"screenId":"","playlistId":""}}'
docs: Sets a screen to play a playlist.
- info:
name: Refresh screen (refreshScreen)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($id: UUID!) { refreshScreen(id: $id) { id } }","variables":{"id":""}}'
docs: Forces a screen to reload its content.
- info:
name: Playlists
type: folder
items:
- info:
name: List playlists (allPlaylists)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"query { allPlaylists { id name isPublished } }"}'
docs: Lists playlists in the account.
- info:
name: Create playlist (createPlaylist)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($name: String!, $spaceId: UUID!) { createPlaylist(name: $name, spaceId: $spaceId) { id name
} }","variables":{"name":"New Playlist","spaceId":""}}'
docs: Creates a playlist in a space.
- info:
name: Add file to playlist (addFileToPlaylist)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($playlistId: UUID!, $fileId: UUID!, $durationMs: Int) { addFileToPlaylist(playlistId: $playlistId,
fileId: $fileId, durationMs: $durationMs) { id } }","variables":{"playlistId":"","fileId":"","durationMs":10000}}'
docs: Adds a media file to a playlist with a display duration.
- info:
name: Media & Files
type: folder
items:
- info:
name: List files (allFiles)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"query { allFiles { id name mimeType fileSize } }"}'
docs: Lists media files in the library.
- info:
name: Create folder (createFolder)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($name: String!, $parentId: UUID) { createFolder(name: $name, parentId: $parentId) { id name
} }","variables":{"name":"Campaign Assets","parentId":null}}'
docs: Creates a folder to organize media.
- info:
name: Channels & Casts
type: folder
items:
- info:
name: List channels (allChannels)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"query { allChannels { id name isPublished } }"}'
docs: Lists channels in the account.
- info:
name: Create channel (createChannel)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($name: String!, $spaceId: UUID!) { createChannel(name: $name, spaceId: $spaceId) { id name
} }","variables":{"name":"Lobby Channel","spaceId":""}}'
docs: Creates a multi-zone channel.
- info:
name: Start cast (castStart)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($screenId: UUID!, $contentType: String!, $contentId: UUID!) { castStart(screenId: $screenId,
contentType: $contentType, contentId: $contentId) { id startedAt } }","variables":{"screenId":"","contentType":"PLAYLIST","contentId":""}}'
docs: Temporarily casts content to a screen.
- info:
name: Apps
type: folder
items:
- info:
name: List apps (allApps)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"query { allApps { id name slug } }"}'
docs: Lists the signage app catalog available to the org.
- info:
name: Create app instance (createAppInstance)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"mutation($appId: UUID!, $name: String!, $spaceId: UUID!, $config: JSON) { createAppInstance(appId:
$appId, name: $name, spaceId: $spaceId, config: $config) { id name status } }","variables":{"appId":"","name":"Weather
NYC","spaceId":"","config":{}}}'
docs: Creates a configured instance of an app to place in playlists/channels.
- info:
name: Playback Logs
type: folder
items:
- info:
name: Get playback logs (getPlaybackLogs)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"query($screenId: UUID, $from: Datetime, $to: Datetime) { getPlaybackLogs(screenId: $screenId, from:
$from, to: $to) { screenId contentType contentId startedAt endedAt durationMs } }","variables":{"screenId":null,"from":null,"to":null}}'
docs: 'Proof-of-play: what played on which screen and when.'
- info:
name: Export playback logs (exportPlaybackLogs)
type: http
http:
method: POST
url: '{{graphqlEndpoint}}'
body:
type: json
data: '{"query":"query($from: Datetime, $to: Datetime) { exportPlaybackLogs(from: $from, to: $to) }","variables":{"from":null,"to":null}}'
docs: Returns an export (e.g. a download URL) of playback logs for a period.