Beta documentation

Quickstart

Time to first live screen should be under ten minutes. If it is not, tell us.

  1. Download the latest DisplayOps image from the portal under Displays → Pair a display.
  2. Write it to a microSD card with Raspberry Pi Imager. In the advanced options you may preload Wi-Fi; Ethernet needs nothing.
  3. Insert the card, connect HDMI and power. After about 40 seconds the screen shows a six-character pairing code and a QR code.
  4. In the portal choose Pair a display, enter the code, and name the screen.
  5. Assign content. The screen updates within a few seconds.

Content types

  • Website: a URL, an optional refresh interval, and optional basic-auth credentials in the URL.
  • Image: PNG, JPEG, or WebP. Uploaded once, cached on every device that shows it.
  • Video: MP4 (H.264). Loops by default. Cached on the device for offline playback.
  • Slideshow: an ordered list of websites and images with a per-item duration.
  • Message: large text with foreground and background colours. Useful for overrides and emergencies.

API

Base URL https://app.simpledisplayops.com/api/v1. Authenticate with an API key from Developers in the portal, sent as Authorization: Bearer sdo_…. Everything the portal does, the API does.

# List displays
curl https://app.simpledisplayops.com/api/v1/displays -H "Authorization: Bearer $SDO_KEY"

# Point a display at a URL
curl -X POST https://app.simpledisplayops.com/api/v1/displays/DISPLAY_ID/content \
  -H "Authorization: Bearer $SDO_KEY" -H "Content-Type: application/json" \
  -d '{"type":"website","url":"https://status.example.com"}'

# Send a command: refresh | restart_player | reboot | screenshot
curl -X POST https://app.simpledisplayops.com/api/v1/displays/DISPLAY_ID/commands \
  -H "Authorization: Bearer $SDO_KEY" -H "Content-Type: application/json" \
  -d '{"type":"refresh"}'

Webhooks

Register a URL under Developers. Events are signed with an HMAC-SHA256 header X-DisplayOps-Signature.

  • display.online, display.offline
  • display.health (temperature, storage, under-voltage, browser restarts)
  • display.command.completed
  • display.screenshot

Security model

  • Each device receives a unique key pair at pairing time. There is no fleet-wide credential.
  • Commands are authenticated, authorised, timestamped, and replay-resistant.
  • TLS everywhere. Session secrets for dashboards are encrypted at rest.
  • Agent updates are signed and roll back automatically if the new version does not check in.
  • No general remote shell. Support diagnostics are delivered as a downloadable bundle.