docs.apiCtaBanner.title
docs.apiCtaBanner.description
API-Endpunkte-Referenz
Vollständige Dokumentation für alle verfügbaren REST API-Endpunkte.
Organisation & Introspektion
Erhalten Sie Informationen über Ihren aktuellen API-Kontext und Ihre Organisation.
Aktuellen Kontext abrufen
GET /api/v1/me
Gibt Informationen über Ihren API-Schlüssel, Organisation, Rate Limits und verfügbare Funktionen zurück. Dieser Endpunkt zählt nicht gegen Ihr Rate Limit.
Beispielanfrage:
curl -X GET "https://www.screenzzie.com/api/v1/me" \
-H "Authorization: Bearer sk_live_xxx"
Beispielantwort:
{
"success": true,
"data": {
"apiKey": {
"id": "uuid",
"name": "Mein API-Schlüssel",
"keyPrefix": "sk_live_abc123",
"scopes": ["screens:read", "screens:write", "playlists:read"],
"expiresAt": null,
"lastUsedAt": "2024-01-15T10:30:00Z"
},
"organization": {
"id": "uuid",
"name": "Meine Firma",
"planId": "growth",
"subscriptionStatus": "active",
"trialEndsAt": null,
"maxScreensAllowed": 50,
"activeScreensCount": 12
},
"rateLimits": {
"limit": 100000,
"used": 45,
"remaining": 99955,
"resetAtMs": 1704153600000
},
"features": {
"sequences": true,
"schedules": true,
"api": true
}
}
}
Organisationen auflisten
GET /api/v1/organizations
Gibt die Organisationen zurück, die mit Ihrem API-Schlüssel zugänglich sind. Derzeit gehört jeder API-Schlüssel zu genau einer Organisation.
Query-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
page | number | Seitennummer (Standard: 1) |
limit | number | Elemente pro Seite (Standard: 20, max: 100) |
Beispielanfrage:
curl -X GET "https://www.screenzzie.com/api/v1/organizations" \
-H "Authorization: Bearer sk_live_xxx"
Beispielantwort:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Meine Firma",
"planId": "growth",
"subscriptionStatus": "active",
"maxScreensAllowed": 50,
"activeScreensCount": 12,
"createdAt": "2024-01-01T00:00:00Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1,
"totalPages": 1,
"hasMore": false
}
}
}
Bildschirme
Verwalten Sie Ihre Digital Signage-Bildschirme.
Bildschirme auflisten
GET /api/v1/screens
Query-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
page | number | Seitennummer (Standard: 1) |
limit | number | Elemente pro Seite (Standard: 20, max: 100) |
isActive | boolean | Nach Aktivstatus filtern |
isOnline | boolean | Nach Online-Status filtern |
screenGroupId | uuid | Nach Bildschirmgruppe filtern |
workspaceId | uuid | Nach Arbeitsbereich filtern |
Beispielanfrage:
curl -X GET "https://www.screenzzie.com/api/v1/screens?isOnline=true&limit=10" \
-H "Authorization: Bearer sk_live_xxx"
Beispielantwort:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Lobby-Display",
"description": "Haupteingangs-Bildschirm",
"isActive": true,
"isOnline": true,
"lastSeenAt": "2024-01-01T12:00:00Z",
"orientation": "landscape",
"rotation": "0",
"timezone": "Europe/Berlin",
"location": "Gebäude A, Erdgeschoss",
"cityName": "Frankfurt",
"latitude": 50.1109,
"longitude": 8.6821,
"workspaceId": "uuid",
"screenGroupId": null,
"currentPlaylistId": "uuid",
"currentSequenceId": null,
"defaultPlaylistId": "uuid",
"defaultSequenceId": null,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T12:00:00Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 25,
"totalPages": 3,
"hasMore": true
}
}
}
Bildschirm abrufen
GET /api/v1/screens/:screenId
Pfad-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
screenId | uuid | Die Bildschirm-ID |
Beispielantwort:
Gibt ein einzelnes Bildschirmobjekt mit der gleichen Struktur wie die Listenantwort zurück.
Bildschirm erstellen
POST /api/v1/screens
Request Body:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Bildschirmname (max. 100 Zeichen) |
description | string | Nein | Bildschirmbeschreibung (max. 500 Zeichen) |
orientation | string | Nein | landscape oder portrait (Standard: landscape) |
rotation | string | Nein | 0, 90, 180 oder 270 (Standard: 0) |
timezone | string | Nein | IANA-Zeitzone (z.B. Europe/Berlin) |
location | string | Nein | Physischer Standort (max. 200 Zeichen) |
screenGroupId | uuid | Nein | Bildschirmgruppen-Mitgliedschaft |
workspaceId | uuid | Nein | Arbeitsbereich-Zuweisung |
Playlist- und Sequenz-Zuweisungen können bei der Erstellung nicht festgelegt werden. Verwenden Sie den Bildschirm-Aktualisieren-Endpunkt, um Inhalte nach der Erstellung zuzuweisen.
Beispielanfrage:
curl -X POST "https://www.screenzzie.com/api/v1/screens" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Konferenzraum A",
"orientation": "landscape",
"rotation": "0",
"timezone": "Europe/Berlin",
"location": "Gebäude B, Raum 101"
}'
Beispielantwort:
{
"success": true,
"data": {
"id": "uuid",
"name": "Konferenzraum A",
"description": null,
"isActive": true,
"isOnline": false,
"lastSeenAt": null,
"orientation": "landscape",
"rotation": "0",
"timezone": "Europe/Berlin",
"location": "Gebäude B, Raum 101",
"cityName": null,
"latitude": null,
"longitude": null,
"workspaceId": null,
"screenGroupId": null,
"currentPlaylistId": null,
"currentSequenceId": null,
"defaultPlaylistId": null,
"defaultSequenceId": null,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
}
}
Bildschirm aktualisieren
PATCH /api/v1/screens/:screenId
Alle Felder sind optional. Nur Felder einschließen, die Sie aktualisieren möchten.
Request Body:
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Neuer Bildschirmname (max. 100 Zeichen) |
description | string | Neue Beschreibung (null zum Löschen) |
orientation | string | landscape oder portrait |
rotation | string | 0, 90, 180 oder 270 |
timezone | string | IANA-Zeitzone |
location | string | Physischer Standort (null zum Löschen) |
workspaceId | uuid | Arbeitsbereich-ID (null zum Entfernen) |
screenGroupId | uuid | Bildschirmgruppen-ID (null zum Entfernen) |
currentPlaylistId | uuid | Aktuelle Playlist (null zum Entfernen) |
currentSequenceId | uuid | Aktuelle Sequenz (null zum Entfernen) |
defaultPlaylistId | uuid | Standard-Playlist (null zum Entfernen) |
defaultSequenceId | uuid | Standard-Sequenz (null zum Entfernen) |
Beispielanfrage:
curl -X PATCH "https://www.screenzzie.com/api/v1/screens/abc123" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Aktualisierter Display-Name",
"currentPlaylistId": "playlist-uuid"
}'
Playlists
Verwalten Sie Inhalts-Playlists für Ihre Bildschirme.
Playlists auflisten
GET /api/v1/playlists
Query-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
page | number | Seitennummer (Standard: 1) |
limit | number | Elemente pro Seite (Standard: 20, max: 100) |
workspaceId | uuid | Nach Arbeitsbereich filtern |
Beispielantwort:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Hauptinhalt",
"description": "Primäre Playlist für Lobby-Bildschirme",
"itemCount": 5,
"totalDuration": 120,
"workspaceId": null,
"createdBy": "user-uuid",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T12:00:00Z"
}
],
"pagination": { ... }
}
}
Playlist abrufen
GET /api/v1/playlists/:playlistId
Gibt die Playlist mit ihren Elementen zurück. Elemente sind immer in der Antwort enthalten.
Pfad-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
playlistId | uuid | Die Playlist-ID |
Beispielantwort:
{
"success": true,
"data": {
"id": "uuid",
"name": "Hauptinhalt",
"description": "Primäre Playlist für Lobby-Bildschirme",
"itemCount": 2,
"totalDuration": 45,
"workspaceId": null,
"createdBy": "user-uuid",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T12:00:00Z",
"items": [
{
"id": "item-uuid-1",
"position": 0,
"duration": 15,
"itemType": "media",
"mediaId": "media-uuid",
"config": null,
"createdAt": "2024-01-01T00:00:00Z"
},
{
"id": "item-uuid-2",
"position": 1,
"duration": 30,
"itemType": "website",
"mediaId": null,
"config": { "url": "https://example.com" },
"createdAt": "2024-01-01T00:00:00Z"
}
]
}
}
Playlist erstellen
POST /api/v1/playlists
Request Body:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Playlistname (max. 100 Zeichen) |
description | string | Nein | Playlistbeschreibung (max. 500 Zeichen) |
workspaceId | uuid | Nein | Arbeitsbereich-Zuweisung |
Beispielanfrage:
curl -X POST "https://www.screenzzie.com/api/v1/playlists" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Weihnachtsaktionen",
"description": "Saisonale Inhalte für Dezember"
}'
Playlist aktualisieren
PATCH /api/v1/playlists/:playlistId
Request Body:
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Neuer Playlistname |
description | string | Neue Beschreibung (null zum Löschen) |
workspaceId | uuid | Arbeitsbereich-ID (null zum Entfernen) |
Playlist löschen
DELETE /api/v1/playlists/:playlistId
Gibt 204 No Content bei Erfolg zurück.
Medien
Zugriff auf Mediendateien in Ihrer Bibliothek und Registrierung neuer Medien.
Medien auflisten
GET /api/v1/media
Query-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
page | number | Seitennummer (Standard: 1) |
limit | number | Elemente pro Seite (Standard: 20, max: 100) |
type | string | Nach Typ filtern: image oder video |
folderId | uuid | Nach Ordner filtern |
workspaceId | uuid | Nach Arbeitsbereich filtern |
Beispielantwort:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "promo-video.mp4",
"type": "video",
"fileUrl": "https://...",
"thumbnailUrl": "https://...",
"fileSize": 15728640,
"duration": 30,
"folderId": null,
"workspaceId": null,
"uploadedBy": "user-uuid",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
}
],
"pagination": { ... }
}
}
Medium abrufen
GET /api/v1/media/:mediaId
Gibt ein einzelnes Medienobjekt mit der gleichen Struktur wie die Listenantwort zurück.
Medium registrieren
POST /api/v1/media
Registriert eine Mediendatei, die bereits in den Speicher hochgeladen wurde. Dieser Endpunkt verarbeitet keine Datei-Uploads direkt - verwenden Sie das Web-Dashboard für Datei-Uploads.
Request Body:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Medienname (max. 200 Zeichen) |
type | string | Ja | image oder video |
fileUrl | string | Ja | URL der hochgeladenen Datei |
thumbnailUrl | string | Nein | URL des Thumbnails |
fileSize | number | Nein | Dateigröße in Bytes |
duration | number | Nein | Dauer in Sekunden (für Videos) |
folderId | uuid | Nein | Ordner-Zuweisung |
workspaceId | uuid | Nein | Arbeitsbereich-Zuweisung |
Beispielanfrage:
curl -X POST "https://www.screenzzie.com/api/v1/media" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Firmenlogo",
"type": "image",
"fileUrl": "https://ihr-speicher.com/logo.png",
"thumbnailUrl": "https://ihr-speicher.com/logo-thumb.png",
"fileSize": 102400
}'
Direkter Datei-Upload ist über die REST API nicht verfügbar. Laden Sie Dateien über das Web-Dashboard hoch, oder laden Sie in Ihren eigenen Speicher hoch und registrieren Sie die URL mit diesem Endpunkt.
Medium löschen
DELETE /api/v1/media/:mediaId
Gibt 204 No Content bei Erfolg zurück.
Zeitpläne
Zeitpläne sind nur im Growth-Plan und höher verfügbar.
Planen Sie Inhalte für bestimmte Zeiten.
Zeitpläne auflisten
GET /api/v1/schedules
Query-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
page | number | Seitennummer (Standard: 1) |
limit | number | Elemente pro Seite (Standard: 20, max: 100) |
workspaceId | uuid | Nach Arbeitsbereich filtern |
screenId | uuid | Nach Bildschirm filtern |
isActive | boolean | Nach Aktivstatus filtern |
Beispielantwort:
{
"success": true,
"data": {
"items": [
{
"id": "uuid",
"name": "Wochenendaktionen",
"playlistId": "playlist-uuid",
"sequenceId": null,
"screenId": null,
"screenGroupId": null,
"targetType": "all_screens",
"dayOfWeek": [0, 6],
"startTime": "09:00",
"endTime": "21:00",
"startDate": null,
"endDate": null,
"priority": 10,
"isActive": true,
"color": "#3B82F6",
"workspaceId": null,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
}
],
"pagination": { ... }
}
}
Zeitplan abrufen
GET /api/v1/schedules/:scheduleId
Gibt ein einzelnes Zeitplanobjekt mit der gleichen Struktur wie die Listenantwort zurück.
Zeitplan erstellen
POST /api/v1/schedules
Request Body:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Nein | Zeitplanname (max. 100 Zeichen) |
playlistId | uuid | Nein* | Zu planende Playlist |
sequenceId | uuid | Nein* | Zu planende Sequenz |
targetType | string | Ja | screen, screen_group, all_screens oder multiple_screens |
screenId | uuid | Bedingt | Erforderlich wenn targetType = screen |
screenGroupId | uuid | Bedingt | Erforderlich wenn targetType = screen_group |
dayOfWeek | number[] | Nein | Wochentage (0=So, 6=Sa) |
startTime | string | Nein | Startzeit im HH:MM-Format |
endTime | string | Nein | Endzeit im HH:MM-Format |
startDate | string | Nein | Startdatum im ISO-Format |
endDate | string | Nein | Enddatum im ISO-Format |
priority | number | Nein | Priorität 0-100 (Standard: 0) |
isActive | boolean | Nein | Ob aktiv (Standard: true) |
color | string | Nein | Anzeigefarbe (z.B. #3B82F6) |
workspaceId | uuid | Nein | Arbeitsbereich-Zuweisung |
*Entweder playlistId oder sequenceId sollte angegeben werden, um Inhalte zu planen.
Bedingte Anforderungen für Zieltyp:
| targetType | Erforderliche Felder |
|---|---|
screen | screenId |
screen_group | screenGroupId |
all_screens | Keine |
multiple_screens | Keine (separaten Endpunkt zum Hinzufügen von Bildschirmen verwenden) |
Beispielanfrage:
curl -X POST "https://www.screenzzie.com/api/v1/schedules" \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Wochenendaktionen",
"playlistId": "abc123",
"targetType": "all_screens",
"dayOfWeek": [0, 6],
"startTime": "09:00",
"endTime": "21:00",
"priority": 10,
"color": "#3B82F6"
}'
Zeitplan aktualisieren
PATCH /api/v1/schedules/:scheduleId
Alle Felder sind optional. Verwendet die gleichen Felddefinitionen wie Zeitplan erstellen.
Zeitplan löschen
DELETE /api/v1/schedules/:scheduleId
Gibt 204 No Content bei Erfolg zurück.
HTTP-Statuscodes
| Code | Beschreibung |
|---|---|
200 | Erfolg |
201 | Erstellt |
204 | Kein Inhalt (erfolgreiches Löschen) |
400 | Ungültige Anfrage (Validierungsfehler) |
401 | Nicht autorisiert (ungültiger API-Schlüssel) |
403 | Verboten (unzureichende Berechtigungen oder Plan) |
404 | Nicht gefunden |
429 | Zu viele Anfragen (Rate-Limit überschritten) |
500 | Interner Serverfehler |