Fluss
API-Dokumentation
← Zum Board

Fluss REST-API

Alle Board-, Spalten- und Karten-Funktionen sind über eine JSON-REST-API erreichbar — per Session-Cookie (UI) oder per API-Token (externe Clients).

Basis

Authentifizierung

Erzeuge ein Token unter Einstellungen → Sicherheit → API-Tokens. Jedes Token ist auf ausgewählte Boards beschränkt und wird nur einmalig im Klartext angezeigt.

Authorization: Bearer flz_dein_token

Token-Anfragen brauchen kein CSRF-Token. Session-Anfragen aus dem Browser brauchen bei schreibenden Aktionen den Header X-CSRF-Token (via GET /api/csrf).

Rechte eines Tokens

Endpunkte

Boards

GET/api/boards

Liste der Boards (Token: nur freigegebene).

GET/api/boards/{id}

Board inkl. Spalten und Karten (verschachtelt), plus default_column_id.

POST/api/boardsnur Session

Board anlegen. Body: { "title": "…" }. Legt 3 Standard-Spalten an.

PATCH/api/boards/{id}

Umbenennen und/oder Standard-Spalte setzen. Body: { "title"?: "…", "default_column_id"?: 12 }.

DELETE/api/boards/{id}

Board löschen (Soft-Delete).

Spalten

POST/api/columns

Spalte am Ende anlegen. Body: { "board_id": 4, "title": "Review" }.

PATCH/api/columns/{id}

Umbenennen, verschieben, Farbe und/oder Bemerkung setzen. Body: { "title"?: "…", "position"?: 1, "color"?: "#ff8800", "note"?: "…" }. color = Hex #rrggbb oder ""/null (automatisch). note = Text (≤2000) oder ""/null. Spalten im Board-View enthalten color und note.

DELETE/api/columns/{id}

Spalte löschen (inkl. enthaltener Karten).

Karten

GET/api/cards/{id}

Einzelne Karte mit allen Eigenschaften: id, board_id, column_id, title, description, assignee, position, priority, due_date, created_at, updated_at, tags[], links[], comment_count und den vollständigen comments[] (im Board-View /api/boards/{id} nur comment_count, nicht die Kommentare).

POST/api/cards

Karte anlegen. Body: { "column_id"?: 8, "board_id"?: 4, "title": "…", "priority"?: "hoch", "due_date"?: "2026-07-10", "description"?: "…", "assignee"?: "Name", "tags"?: ["Bug","Technik"], "links"?: [{"url":"https://…","label":"Doku"}] }. Ohne column_id landet die Karte in der Standard-Spalte des Boards. tags akzeptiert Array oder Komma-String; links nur http(s).

PATCH/api/cards/{id}

Ändern und/oder verschieben. Body: { "title"?, "description"?, "assignee"?, "tags"?, "links"?, "priority"?, "due_date"?, "column_id"?, "position"? }. tags und links ersetzen die jeweilige Menge komplett ([] löscht), assignee: "" entfernt Zuständigkeit.

DELETE/api/cards/{id}

Karte löschen (Soft-Delete).

Kommentare

GET/api/cards/{id}/comments

Kommentare einer Karte: [{ id, author, author_type, body, created_at }]. author_type = user (E-Mail) oder token (Token-Name).

POST/api/cards/{id}/comments

Kommentar anlegen. Body: { "body": "…" }. Autor wird automatisch aus dem Zugang abgeleitet (Session → E-Mail, Token → Token-Name).

DELETE/api/comments/{id}

Kommentar löschen.

Suche

GET/api/search?q=…

Volltextsuche über die Karten des Nutzers (Token: nur Scope-Boards) in Titel, Beschreibung, Zuständig und Tags. → { "query": "…", "results": [ { id, board_id, board_title, column_id, title, description, assignee, priority, due_date } ] } (max 50, neueste zuerst). Leeres q → leere Liste.

Batch

POST/api/batch

Mehrere Operationen in einem Request. Body: { "operations": [ { "method": "POST|PATCH|DELETE|GET", "path": "/api/…", "body": {…} } ] } (max 50). Jede Op wird intern wie ein Einzel-Request behandelt (Auth, Board-Scope, Validierung gelten pro Op). Antwort: { "results": [ { "status": 201, "body": {…} } ] } in Eingabe-Reihenfolge. Nicht transaktional — Ops laufen sequenziell, Fehler einzelner Ops brechen den Batch nicht ab. CSRF nur einmal für den Batch (Token: keins). /api/batch selbst ist als Sub-Op nicht erlaubt.

Werte

Beispiele

Karte in die Standard-Spalte eines Boards schreiben:

curl -X POST https://work.seolizer.de/api/cards \
  -H "Authorization: Bearer flz_dein_token" \
  -H "Content-Type: application/json" \
  -d '{"board_id": 4, "title": "Neue Aufgabe", "priority": "hoch", "due_date": "2026-07-10"}'

Board mit Spalten und Karten auslesen:

curl https://work.seolizer.de/api/boards/4 \
  -H "Authorization: Bearer flz_dein_token"

Karte in eine andere Spalte verschieben (an Position 0):

curl -X PATCH https://work.seolizer.de/api/cards/42 \
  -H "Authorization: Bearer flz_dein_token" \
  -H "Content-Type: application/json" \
  -d '{"column_id": 9, "position": 0}'