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
- Basis-URL
https://work.seolizer.de - Format
application/json - Fehler
{ "error": "code", "message": "…" }mit HTTP-Statuscode
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
- Boards lesen · umbenennen · Standard-Spalte setzen · löschen — nur freigegebene Boards
- Spalten anlegen · umbenennen · verschieben · löschen
- Karten lesen · anlegen · ändern · verschieben · löschen
- Neue Boards anlegen, Tokens verwalten — nur mit Login (Session)
Endpunkte
Boards
/api/boardsListe der Boards (Token: nur freigegebene).
/api/boards/{id}Board inkl. Spalten und Karten (verschachtelt), plus default_column_id.
/api/boardsnur SessionBoard anlegen. Body: { "title": "…" }. Legt 3 Standard-Spalten an.
/api/boards/{id}Umbenennen und/oder Standard-Spalte setzen. Body: { "title"?: "…", "default_column_id"?: 12 }.
/api/boards/{id}Board löschen (Soft-Delete).
Spalten
/api/columnsSpalte am Ende anlegen. Body: { "board_id": 4, "title": "Review" }.
/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.
/api/columns/{id}Spalte löschen (inkl. enthaltener Karten).
Karten
/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).
/api/cardsKarte 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).
/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.
/api/cards/{id}Karte löschen (Soft-Delete).
Kommentare
/api/cards/{id}/commentsKommentare einer Karte: [{ id, author, author_type, body, created_at }]. author_type = user (E-Mail) oder token (Token-Name).
/api/cards/{id}/commentsKommentar anlegen. Body: { "body": "…" }. Autor wird automatisch aus dem Zugang abgeleitet (Session → E-Mail, Token → Token-Name).
/api/comments/{id}Kommentar löschen.
Suche
/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
/api/batchMehrere 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
- priority
"niedrig" | "mittel" | "hoch"(oder0 | 1 | 2) - due_date
"JJJJ-MM-TT"odernull - position0-basierter Index in der Zielspalte/-liste
- assigneeFreitext-Name ≤80 Zeichen oder
null - tagsArray von Labels (≤40 Zeichen, max 12, case-insensitiv unique)
- linksArray von
{url, label?}— nur http(s), URL ≤2048, max 20 (Referenzen)
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}'