Skip to content

API-Referenz

Interaktive Dokumentation

Clavis stellt zwei interaktive API-Dokumentationen bereit:

URLBeschreibung
/api/docsSwagger UI — interaktive API-Explorer
/api/redocReDoc — lesbare, zweispaltige Ansicht

Beide sind aus der OpenAPI-Spezifikation generiert und spiegeln die tatsächlich vorhandenen Endpunkte wider.

Authentifizierung

JWT-Bearer (interne Nutzer)

Für angemeldete Nutzer (Koordinatoren, Ersteller, Admins):

Authorization: Bearer <access_token>

Das Token wird beim Login (POST /api/auth/login) zurückgegeben.

Für Gäste und Teilnehmer werden Session-Cookies verwendet (gesetzt beim Join-Flow). Kein manueller Header erforderlich.

WebSocket-Token

Für WebSocket-Verbindungen muss zunächst ein kurzlebiges WS-Token abgerufen werden:

GET /api/auth/ws-token
Authorization: Bearer <access_token>

Das WS-Token wird als Query-Parameter übergeben.

WebSocket-Endpunkte

EndpunktBeschreibung
GET /api/orgs/{slug}/runs/{run_id}/wsKoordinator-Stream: Run-State-Updates, Team-Events, Feed
GET /api/orgs/{slug}/runs/{run_id}/teams/{team_id}/wsTeam-Stream: Submissions, Chat, Feed, Run-State

Verbindungsaufbau

javascript
const wsToken = await fetch('/api/auth/ws-token', {
  headers: { Authorization: `Bearer ${accessToken}` }
}).then(r => r.json()).then(d => d.token);

const ws = new WebSocket(
  `wss://app.clavis-rallye.com/api/orgs/${slug}/runs/${runId}/ws?token=${wsToken}`
);

Wichtige Endpunkte (Übersicht)

MethodePfadBeschreibung
POST/api/auth/loginLogin; gibt JWT zurück
POST/api/auth/refreshToken erneuern
GET/api/auth/ws-tokenWS-Token für WebSocket-Auth
GET/api/healthGesundheitsstatus der Dienste
GET/api/orgs/{slug}/rallyesRallye-Liste
POST/api/orgs/{slug}/runsNeuen Lauf erstellen
POST/api/orgs/{slug}/runs/{run_id}/joinGast-Join-Flow
POST/api/orgs/{slug}/runs/{run_id}/teams/{team_id}/submissionsEinreichung erstellen

Die vollständige Endpunktliste mit Parametern und Antwortformaten ist unter /api/docs verfügbar.

Mandantenisolation

Alle Endpunkte sind durch den {slug} der Organisation isoliert. Ein Nutzer kann nur auf Ressourcen seiner eigenen Organisation zugreifen. Cross-Tenant-Zugriff wird serverseitig abgelehnt.