# API Quick Reference

Schnelle Übersicht aller HTTP-Endpoints nach Zweck sortiert.

---

## Agent-Integration

**Beim Player-Startup:**
```http
POST /api/v1/screens/register
```
Automatische Selbstregistrierung des Screens im Default-Tenant "morz".

**Beim Playlist-Sync (alle ~30s):**
```http
GET /api/v1/screens/{screenId}/playlist
```
Abruf der aktuellen Playlist zum Abspielen.

**Status-Reporting (alle ~30s):**
```http
POST /api/v1/player/status
```
Übermittlung des Laufzeitstatus zum Server.

---

## Admin-Dashboard

**Übersicht aller Screens:**
```http
GET /admin
```
Web-UI mit Screen-Liste, Status, Provisioning-Formulare.

**Screen-Verwaltung:**
```http
POST /admin/screens
POST /admin/screens/{screenId}/delete
```

**Provisioning neuer Screens:**
```http
POST /admin/screens/provision
```

**Diagnose:**
```http
GET /status
GET /status/{screenId}
GET /api/v1/screens/status
GET /api/v1/screens/{screenId}/status
```

---

## Tenant-Playlist-Management

**Manage-UI öffnen:**
```http
GET /manage/{screenSlug}
```
Web-UI für Playlist-Bearbeitung, Uploads, Item-Verwaltung.

**Inhalte hinzufügen:**
```http
POST /manage/{screenSlug}/upload        (Datei-Upload)
POST /manage/{screenSlug}/items         (Item zur Playlist)
POST /manage/{screenSlug}/media/{mediaId}/delete
```

**Inhalte bearbeiten:**
```http
POST /manage/{screenSlug}/items/{itemId}
POST /manage/{screenSlug}/items/{itemId}/delete
POST /manage/{screenSlug}/reorder
```

---

## Media Management (JSON API)

**Media-Assets auflisten:**
```http
GET /api/v1/tenants/{tenantSlug}/media
```

**Neue Medien hinzufügen:**
```http
POST /api/v1/tenants/{tenantSlug}/media
```
(Datei-Upload oder externe URL)

**Media löschen:**
```http
DELETE /api/v1/media/{id}
```

---

## Playlist Management (JSON API)

**Playlist abrufen (Admin):**
```http
GET /api/v1/playlists/{screenId}
```

**Playlist abrufen (Player):**
```http
GET /api/v1/screens/{screenId}/playlist
```
(Gibt nur aktive Items zurück)

**Items verwalten:**
```http
POST   /api/v1/playlists/{playlistId}/items
PATCH  /api/v1/items/{itemId}
DELETE /api/v1/items/{itemId}
```

**Playlist konfigurieren:**
```http
PUT   /api/v1/playlists/{playlistId}/order
PATCH /api/v1/playlists/{playlistId}/duration
```

---

## Screen Management (JSON API)

**Self-Registration (Agent):**
```http
POST /api/v1/screens/register
```

**Screens eines Tenants auflisten:**
```http
GET /api/v1/tenants/{tenantSlug}/screens
```

**Screen erstellen (Admin):**
```http
POST /api/v1/tenants/{tenantSlug}/screens
```

---

## System & Health

**Health-Check:**
```http
GET /healthz
```

**API-Entrypoint:**
```http
GET /api/v1
```

**Metainformationen:**
```http
GET /api/v1/meta
```

---

## Player Local UI (auf dem Gerät)

**Player-Seite öffnen:**
```http
GET /player
```

**Aktuelle Playlist für lokale Anzeige:**
```http
GET /api/now-playing
```

**Systeminformationen anzeigen:**
```http
GET /api/sysinfo
```

---

## Status-Diagnose (Detailed)

Siehe `PLAYER-STATUS-HTTP.md` für vollständige Dokumentation der Status-Endpoints:

```http
POST   /api/v1/player/status        (Status vom Agent)
GET    /api/v1/screens/status       (Alle Status)
GET    /api/v1/screens/{screenId}/status
DELETE /api/v1/screens/{screenId}/status
```

Query-Parameter für Filterung:
- `q` — Screen-ID Substring
- `derived_state` — online|degraded|offline
- `server_connectivity` — online|degraded|offline|unknown
- `stale` — true|false
- `updated_since` — RFC3339-Zeitstempel
- `limit` — Anzahl Items

---

## Typische Workflows

### 1. Neuen Screen provisioning

```
1. POST /admin/screens (oder /api/v1/tenants/morz/screens)
   → Neuen Screen-Record anlegen

2. POST /admin/screens/provision
   → Provisionierungs-Job starten

3. GET /admin (oder /status)
   → Status überwachen
```

### 2. Neue Inhalte hochladen und einbinden

```
1. POST /manage/{screenSlug}/upload
   → Datei hochladen, Media-Asset erstellen

2. POST /manage/{screenSlug}/items
   → Item zur Playlist hinzufügen (mit media_asset_id)

3. GET /manage/{screenSlug}
   → Playlist-Verwaltung
```

### 4. Playlist bearbeiten

```
1. GET /api/v1/playlists/{screenId}
   → Aktuelle Playlist abrufen

2. PATCH /api/v1/items/{itemId}
   → Dauer, Zeitfenster, Titel ändern

3. PUT /api/v1/playlists/{playlistId}/order
   → Items reordnen

4. GET /api/v1/screens/{screenId}/playlist
   → Player holt neue Version beim Sync ab
```

### 5. Status überwachen

```
1. GET /status (Browser)
   oder
   GET /api/v1/screens/status (JSON)
   → Aktuelle Status aller Screens

2. GET /status/{screenId}
   oder
   GET /api/v1/screens/{screenId}/status
   → Detailstatus für einen Screen
```

---

## Fehlerbehandlung

HTTP-Status-Codes:
- `200` — OK (Read erfolgreich)
- `201` — Created (Ressource erstellt)
- `204` — No Content (Write erfolgreich, kein Response-Body)
- `400` — Bad Request (Eingabe-Validierungsfehler)
- `404` — Not Found (Ressource nicht vorhanden)
- `500` — Internal Server Error (Server-Fehler)

Alle Fehler folgen dem Modell:
```json
{
  "error": {
    "code": "error_code",
    "message": "Beschreibung",
    "details": null
  }
}
```

---

## Vollständige Dokumentation

Siehe `API-ENDPOINTS.md` für:
- Detaillierte Request/Response-Beispiele für jeden Endpoint
- Query-Parameter und Validierung
- Zeitstempel-Formate (RFC3339)
- Serverseitige Logik (z.B. Stale-Detection, Derived-State)
