Die ScreenWay-Studio-REST-API nutzen.
Die öffentliche API ist um Konto-API-Keys und /api/v1-REST-Endpoints organisiert. Damit automatisieren Sie Screens, Medien, Programme, Apps, Designer-Projekte, Notifications und Analytics.
Authentifizierung
Legen Sie einen API-Key in Studio unter Einstellungen → API Keys an. Keys beginnen mit swk_, werden nur einmal angezeigt und lassen sich auf das Konto, Spaces, Gruppen oder einzelne Screens beschränken. Senden Sie jeden Request mit dem Header Authorization: Bearer swk_….
curl https://studio.screenway.com/api/v1/screens \
-H "Authorization: Bearer swk_your_api_key_here"Key-Scopes
Jeder Key trägt eine Liste von targets. Target-bewusste Endpoints (z. B. Notifications) respektieren diese: Ein Request, dessen Targets außerhalb des Key-Scope liegen, wird mit 403 abgelehnt. Alle Endpoints sind an das Konto gebunden, ein Key kann niemals Daten in einem anderen Konto lesen oder verändern.
Target-Typen
workspacescopespacescopegroupscopescreenscopeKeys sicher aufbewahren
Fehler
Alle Fehler liefern einen JSON-Body mit einem einzigen error-String und einem passenden HTTP-Status. Validierungsmeldungen sind menschenlesbar und benennen das Problem.
{
"error": "Invalid command type. Allowed: content:program, content:media, system:restart, system:reload, playback:jump"
}Kontofremde Lookups liefern 404
Pagination & Antworten
List-Endpoints liefern data plus meta. Pagination nutzt limit (Default 50, maximal 200) und offset (Default 0). Single-Resource-Endpoints liefern ein einzelnes data-Objekt ohne meta.
GET /api/v1/screens?limit=100&offset=200
{
"data": [ ... ],
"meta": { "total": 412, "limit": 100, "offset": 200 }
}Gemeinsame Query-Parameter
limitintegeroffsetintegerspace_iduuidRate Limits & Retries
Die v1-API erzwingt heute keine harten Rate Limits, das darunterliegende Supabase und der Storage können missbräuchlichen Traffic aber drosseln. Behandeln Sie 500-Antworten als retry-fähig mit exponentiellem Backoff. Media-Uploads (POST /media, /from-url, /from-data) sind am teuersten; Parallelität gering halten.
Idempotente Reads
Mutationen
Bulk-Operationen
/programs/{id}/assign, Notifications oder App-Instances bevorzugen, statt Einzelaufrufe zu schleifen.Endpoint-Übersicht
Screens
/api/v1/screensScreens im Konto listen, sortiert nach Anlagedatum.
Query-Parameter
space_iduuidstatusstringlimitintegeroffsetinteger{
"data": [
{
"id": "9e6e…",
"name": "Lobby Display",
"status": "online",
"space_id": "a3b1…",
"space_name": "Berlin HQ",
"device_id": "dev_…",
"is_paired": true,
"paired_at": "2026-04-12T08:14:22Z",
"last_seen_at": "2026-05-13T09:02:11Z",
"player_version": "1.42.0",
"os_version": "Android 13",
"resolution": "1920x1080",
"location": {
"street_address": "Friedrichstr. 1",
"postal_code": "10117",
"city": "Berlin",
"country": "DE"
},
"rotation": 0,
"created_at": "2026-03-01T11:00:00Z",
"updated_at": "2026-05-13T09:02:11Z"
}
],
"meta": { "total": 1, "limit": 50, "offset": 0 }
}/api/v1/screens/{id}/commandsBefehl an einen einzelnen Screen senden. Der Befehl wird in screen_commands persistiert und via Supabase Realtime gebroadcastet.
Body
typerequiredstringcontent:program, content:media, system:restart, system:reload, playback:jump.payload.programIduuidtype=content:program.payload.mediaIduuidtype=content:media.{
"type": "content:program",
"payload": { "programId": "prog_…" }
}{
"data": {
"id": "cmd_…",
"screen_id": "9e6e…",
"type": "content:program",
"status": "sent",
"created_at": "2026-05-13T09:14:55Z"
}
}Medien & Ordner
/api/v1/mediaMedien im Konto listen, neueste zuerst.
Query-Parameter
space_iduuidtypestringfolder_iduuid | "__root__"__root__ für Medien ohne Ordner.limit / offsetinteger/api/v1/media/from-urlBild oder Video von einer öffentlichen HTTP(S)-URL importieren. Localhost und private IP-Bereiche werden abgelehnt.
Body
space_idrequireduuidurlrequiredstringnamestringfolder_iduuidfolder_namestringparent_folder_iduuid{
"space_id": "a3b1…",
"url": "https://example.com/poster.png",
"name": "Frühlings-Poster",
"folder_name": "Poster"
}/api/v1/media/from-dataData-URL oder Base64-Payload hochladen. Nützlich für KI-generierte Assets oder QR-Codes.
Body
space_idrequireduuiddata_urlstringdata_url oder base64_data ist Pflicht.base64_datastringmime_typestringfile_namestring{
"space_id": "a3b1…",
"data_url": "data:image/png;base64,iVBORw0KGgo...",
"file_name": "qr.png"
}Programme
/api/v1/programsProgramme im Konto listen.
Query-Parameter
space_iduuidlimit / offsetinteger/api/v1/programs/{id}/assignProgramm einem oder mehreren Screens zuweisen. Speichert die Zuweisung und sendet in einem Aufruf einen content:program-Befehl.
Body
screen_idsrequireduuid[]{
"screen_ids": ["9e6e…", "12b3…"]
}Die Antwort teilt die Eingabe in assigned_screen_ids und skipped_screen_ids auf. Ungültige oder fremde IDs werden stillschweigend übersprungen.
Apps & App-Instanzen
/api/v1/appsAktive ScreenWay-Apps listen. Mit slug eine bestimmte App finden.
Query-Parameter
slugstringcategorystringsearchstringlimit / offsetinteger/api/v1/app-instancesKonfigurierte App-Instanz in einem Space anlegen.
Body
app_idrequireduuidspace_idrequireduuidnamerequiredstringconfigobject | stringtransparent_backgroundbooleanDesigner-Projekte
/api/v1/designer-projects/{id}/renderDas exportierte HTML eines Designer-Projekts in eine Bild-Data-URL rendern. Optional das Ergebnis als Projekt-Thumbnail zurückschreiben.
Body
format"png" | "jpeg"width / heightintegerqualityinteger (0-100)wait_msintegerupdate_thumbnailbooleanbase_urlstring{
"format": "png",
"width": 1920,
"height": 1080,
"update_thumbnail": false
}Render setzt exported_html voraus
exported_html antworten mit 400. Projekt einmal im Designer speichern, damit es generiert wird.Notifications
/api/v1/notificationsNotification-Overlay an Screens broadcasten. Ohne explizites targets wird die im API-Key konfigurierte Zielmenge verwendet.
Body
titlerequiredstringmessagerequiredstringcategoryrequiredenumpriorityrequiredenumiconstringaction_urlstringaction_labelstringduration_secondsnumbertargetsTarget[]{
"title": "Service Desk",
"message": "Schalter 4 ist jetzt geöffnet",
"category": "INFO",
"priority": "NORMAL",
"duration_seconds": 30,
"action_url": "https://studio.screenway.com/dashboard",
"action_label": "Dashboard öffnen"
}{
"data": {
"id": "0a7e…",
"screens_notified": 4,
"targets": [{ "type": "workspace", "id": "ws_…" }],
"resolved_screen_ids": ["9e6e…", "12b3…", "44dd…", "8f1c…"]
}
}Analytics
/api/v1/analyticsKontoweiter Analytics-Rollup. Default sind die letzten 7 Tage.
Query-Parameter
fromDatum (YYYY-MM-DD)toDatum (YYYY-MM-DD)space_iduuidDie Antwort enthält Screen-Zählungen (total / online / offline), Durchschnitts-Uptime, Gesamt-Items, eine Pro-Screen-Aufschlüsselung sowie die Top-10 abgespielten Inhalte.
Typische Workflows
Medien automatisieren
/media/from-url importieren, in Ordner sortieren und per /screens/{id}/commands (type=content:media) auf Screens schieben.Playback steuern
/programs/{id}/assign aufrufen, um viele Screens gleichzeitig umschalten statt einzelne Commands.Designer-Pipeline
update_thumbnail=true PNG rendern und dem Projekt in einem Programm-Slot zuweisen.Notifications
targets feiner skopen.Reporting
/analytics regelmäßig in Ihr BI-Tool ziehen, pro Space mit space_id gruppieren.Key-Hygiene
Konto-Scoping
workspace_id manuell zu übergeben ist weder nötig noch möglich.Designer + Apps
/app-instances und /designer-projects kombinieren, um geschichtete, geplante Inhalte ohne Studio-Klick zusammenzubauen.