Quickstart

Two tracks to go from zero to live in under fifteen minutes.

Track 1 takes you from a fresh account to your first API call. Track 2 takes you from the official app skeleton to a published app on a screen. Pick whichever matches your project.

Track 1: First API call

~5 minutes. Create a key, set an env var, list your screens and push a test notification.Start track 1

Track 2: First published app

~10 minutes. Start from the official skeleton, rename it, test locally, build a ZIP, upload in Studio.Start track 2

What you need

A ScreenWay account

Sign up at studio.screenway.com. Owner or account member role works for both tracks.

A shell with curl

macOS, Linux, or WSL. Track 1 also accepts JavaScript (Node 18+) or Python 3.10+ with requests.

Track 1 · First API call

Goal: make a successful GET /api/v1/screens request and send a notification to all screens the key can reach.

1. Create an API key

  1. Open Settings → API Keys in Studio.
  2. Click "Create API key", give it a clear name and a scope.
  3. Copy the swk_… token immediately. It is shown once.

Treat keys like passwords

Studio only stores a bcrypt hash plus the first 12 characters. There is no way to recover the original token after the dialog closes.

2. Set the env var

Keeping the token out of your shell history (and out of git) starts here.

shell
# Paste the key shown once after creation
export SCREENWAY_API_KEY=swk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3. Make your first call

Pick the language you already use. All three examples hit the same endpoint and print a short summary of your account.

GET /api/v1/screens
curl https://studio.screenway.com/api/v1/screens \
  -H "Authorization: Bearer $SCREENWAY_API_KEY"

Expected response shape

A 200 response contains a data array of screens and a meta object with pagination. Empty accounts return an empty array, which is normal.

4. Send a notification

Notifications are the safest write to start with: no permanent state, immediate visible feedback on any screen that is online.

POST /api/v1/notifications
curl -X POST https://studio.screenway.com/api/v1/notifications \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $SCREENWAY_API_KEY" \
  -d '{
    "title": "Hello from the API",
    "message": "First request worked.",
    "category": "INFO",
    "priority": "NORMAL",
    "duration_seconds": 15
  }'
  • Notifications without an explicit targets array use the API key scope
  • A 403 means your targets are outside the key scope. Narrow the request or widen the key
  • A 404 with "No screens found" means the key has no online screens to reach
  • You can include action_url and action_label for a tap-through CTA on touch kiosks

Track 2 · Publish an app

Goal: take the official skeleton, give it your branding, test locally, package it, upload it as a new app in Studio.

1. Download the skeleton

The skeleton already ships the universal app scaler, a postMessage-wired config.html, German and English locales, and a safe-default boot pattern. Use it; it removes hours of plumbing work.

unpack
# In a fresh folder
unzip ~/Downloads/app-skeleton.zip -d my-first-app
cd my-first-app

2. Rename and configure

Edit app.json: pick a stable slug, set version to 1.0.0, and decide on the config fields users will edit in Studio.

app.json
{
  "name": "Lobby Welcome",
  "slug": "lobby-welcome",
  "version": "1.0.0",
  "category": "utility",
  "is_free": true,
  "config_schema": {
    "fields": [
      { "key": "title", "type": "text", "default": "Welcome", "required": true }
    ]
  }
}

Move every visible string into locales/de.json. German is the universal fallback; every other locale falls back to it for missing keys.

locales/de.json
{
  "description": "Friendly welcome screen for lobbies.",
  "featured": {
    "title": "A warm hello on every display",
    "description": "Editable title, transparent overlay, ready in minutes."
  },
  "config_schema": {
    "fields": {
      "title": { "label": "Headline" }
    }
  },
  "runtime": {
    "fallback": { "title": "Welcome", "subtitle": "Configure in app settings." }
  }
}

Slug is permanent

The slug becomes the storage path and the API identifier. Choose it once, stick to it.

3. Test locally

Start any static file server in the app folder. With no Studio iframe around it, the skeleton uses its inline defaults, and your URL parameters override them.

serve
python3 -m http.server 8000
# Open http://localhost:8000/ for the runtime
# Open http://localhost:8000/config.html for the settings form
# URL params override defaults: ?title=Hi&fontSize=180
  • index.html renders the runtime UI
  • config.html renders the settings form (Studio normally wraps it in an iframe)
  • URL params change config without rebuilding
  • window.APP_CONFIG is undefined in standalone mode (the intended path)

4. Package and submit

Bump version in app.json, place your banner.png (1200×400) and featured.png (1920×1080) at the bundle root, then pack a flat ZIP from inside the app folder.

package
# From inside the app folder. build.sh ships with the skeleton
cd my-first-app
./build.sh --bump-patch
# → my-first-app-v1.0.1.zip in the current directory

Submit the ZIP to apps@screenway.com with your app slug, target locales, and a one-line summary. The ScreenWay team validates the bundle, uploads it to the catalogue, and replies with the live link.

Self-service uploads are on the roadmap

A Studio flow for managing your own apps end-to-end is in planning. Until it ships, submissions go through the team so a reviewer can sanity-check the bundle, the locales, and the store assets.

Where to go next

API reference

Full endpoint map, error codes, pagination, and per-endpoint params. /developer/api →

App reference

Bundle layout, runtime config contract, postMessage handshake, build flow. /developer/apps →

AI + MCP

Connect Codex, Claude Desktop, Cursor, or any other MCP client to the same API. /developer/ai →

Send notifications

Push overlays to screens, spaces, groups, or account targets, optionally with a CTA.

Automate Designer

Render Designer projects to PNG/JPEG and update thumbnails through the API.

Key hygiene

One key per integration. Scope each to the screens that integration is allowed to touch.