# Programm und Speaker

Programmpunkte, Sprecher, öffentliche Programmseite und persönliche Agenda.

## Hinweise für KI-Agenten

- API-Basisadresse: `https://api.eventwerk.eu/api/v1`
- OpenAPI 3.1: `https://api.eventwerk.eu/openapi.json` und `/api/v1/openapi.json`. Daraus lassen sich Clients und Typprüfungen generieren.
- Anmeldung: `Authorization: Bearer ew_...`
- Schlüssel: Einstellungen unter `/dashboard/einstellungen`, nur mit Eventwerk Plus und nur für Eigentümer. Der volle Schlüssel wird nur einmal angezeigt. Name und Zeitpunkt der letzten Nutzung werden geführt und ausgegeben.
- Zeiten: Alle Zeitpunkte kommen in UTC mit Suffix `Z`. Die Zeitzone des Events steht getrennt in `timezone` als IANA-Name, Standard `Europe/Vienna`. Clients rechnen selbst um.
- Paginierung: Die Event- und Anmeldelisten liefern `{items, has_more, next_cursor}` mit `limit` (Standard 50, höchstens 200), `cursor` und `updated_since`.
- Grenzen: 200 Anfragen pro Minute je Schlüssel. Der Zähler liegt im Speicher je Instanz, ist hinter mehreren Instanzen ein Vielfaches und beginnt nach einem Deploy neu. Bei Überschreitung antwortet die API mit 429, `rate_limited` und `Retry-After`.
- Gastgrenzen: Anmelde-Link 20 je Stunde je IP-Adresse, Anmeldung 60 je Stunde je IP-Adresse und 3 je Stunde je E-Mail-Adresse und Event.
- Fehler: JSON mit `code` und `message`, optional mit `details`.

Das Programm besteht aus Programmpunkten und Sprechern. Beide gehören zu einem Event und erscheinen auf der öffentlichen Programmseite, sobald das Event veröffentlicht ist.

## Programmpunkte

| Feld | Bedeutung |
| --- | --- |
| title | Titel, höchstens 200 Zeichen. |
| description | Beschreibung, höchstens 20.000 Zeichen. |
| start_at | Beginn als RFC-3339-Zeitpunkt. |
| end_at | Optionales Ende. Muss nach dem Beginn liegen. |
| location_name | Raum oder Ort, höchstens 200 Zeichen. |
| track | Track oder Strang, höchstens 200 Zeichen. |
| capacity | Optionale Kapazität, nicht negativ. |
| sort_order | Reihenfolge bei gleichem Beginn. |

Programmpunkte werden nach Beginn, dann nach Reihenfolge sortiert. Einem Programmpunkt lassen sich mehrere Sprecher zuordnen.

## Sprecher

| Feld | Bedeutung |
| --- | --- |
| name | Name, höchstens 200 Zeichen. Pflichtfeld. |
| title | Funktion, höchstens 200 Zeichen. |
| company | Unternehmen, höchstens 200 Zeichen. |
| bio | Biografie, höchstens 20.000 Zeichen. |
| photo_url | Bildadresse, höchstens 2.000 Zeichen. |
| website_url | Webadresse, höchstens 2.000 Zeichen. |
| sort_order | Reihenfolge in der Sprecherliste. |

Auf der öffentlichen Programmseite erscheinen nur Sprecher, die mindestens einem Programmpunkt zugeordnet sind. Die Zuordnung ersetzen Sie über die Sitzungsansicht im Dashboard.

## Öffentliche Programmseite

Die Seite `/e/<slug>/programm` zeigt alle Programmpunkte mit Zeit, Ort, Track und Sprechern. Bei mehrtägigen Events werden Tagesüberschriften ergänzt. Nicht veröffentlichte Events liefern `event_not_found`.

## Persönliche Agenda

Angemeldete Gäste öffnen ihre Agenda über `/agenda/<token>`. Dort können sie Programmpunkte als Favoriten markieren und die Auswahl getrennt von der vollständigen Liste sehen.

- Favoriten werden zur Anmeldung gespeichert.
- Stornierte und abgelehnte Anmeldungen können keine Favoriten ändern.
- Ein unbekannter oder fehlender Programmpunkt ergibt `session_not_found`.

> **Warnung:** Eine Zoom-Anbindung ist angekündigt, aber noch nicht gebaut. Programmpunkte haben derzeit kein eigenes Online-Ziel.
