🚀 Jetzt neu: FlowAI! Ein revolutionärer Chat mit personalisierten AI-Agenten. 🌟

FlowTasks API - für moderne Projektmanagement-Tools

Eine vollständige REST API für FlowTasks mit Boards, Listen und Kommentaren. Perfekt für Projektmanagement-Tools, Aufgaben-Tracker und Automatisierungen.

🚀 Schnellstart

Basis-URL: https://creativeskyline.de/api/todos https://creativeskyline.de/api/todos/boards
IDs als Strings senden
Die Felder list_id, board_id, assigned_to, list_uuid und user_uuid werden serverseitig als String validiert. Senden Sie IDs deshalb immer als UUID-String oder als numerischen String (z. B. "123") - ein roher JSON-Integer (123 ohne Anführungszeichen) scheitert an der Validierung.

1. API-Zugangsdaten abrufen

Bevor Sie die Todo-API nutzen können, benötigen Sie Ihre persönlichen Zugangsdaten: Melden Sie sich an, navigieren Sie zu Profil → API-Zugang und kopieren Sie Ihren persönlichen API-Key (pk_...).

2. Typischer Workflow

Um ein Todo in einem Board zu erstellen, folgen Sie diesen Schritten: 1. Boards abrufen (GET /api/todos/boards - liefert die Boards inklusive verschachtelter Listen), 2. das gewünschte Board mit seinen Listen abrufen (GET /api/todos/boards/{uuid}), 3. Todo erstellen (POST /api/todos).

✅ Todo-Verwaltung

Persönliche und Board-Todos
Lassen Sie list_id und board_id leer, um ein persönliches Todo zu erstellen. Geben Sie nur board_id an, um das Todo in der ersten Liste des Boards einzusortieren.

Todos auflisten

GET /api/todos

Ruft die Todos Ihres Teams cursor-paginiert ab. Ohne board_id werden nur Ihre eigenen persönlichen Todos zurückgegeben; mit board_id werden die Todos des Boards (optional weiter auf list_id eingegrenzt) zurückgegeben.

Query-Parameter:

type string Filter innerhalb der Ergebnismenge nach Typ: assigned (mir zugewiesen), completed (erledigt) oder created (von mir erstellt)
completed boolean Filter nach Status: true oder false
priority string Filter nach Priorität: low, medium, high
board_id string Board-UUID; grenzt die Ergebnisse auf Todos dieses Boards ein (erfordert Board-Zugriff)
list_id string Listen-UUID; nur in Kombination mit board_id, grenzt weiter auf eine Liste ein
cursor string Cursor aus dem meta-Objekt der vorherigen Antwort für die nächste/vorherige Seite
per_page integer Ergebnisse pro Seite, 1-100 (Default 50)
GET /api/todos/search

Durchsucht Titel und Beschreibung aller Todos, auf die Sie Zugriff haben (eigene persönliche Todos plus Todos aus Boards mit Ihrem Zugriff).

Query-Parameter:

search string * Suchbegriff (1-100 Zeichen). Zeichen wie % und _ werden literal gesucht, nicht als Platzhalter
cursor string Cursor aus dem meta-Objekt der vorherigen Antwort für die nächste/vorherige Seite
per_page integer Ergebnisse pro Seite, 1-100 (Default 50)

Modul-Kontext abrufen

GET /api/todos/context

Liefert die schreibbaren Felder je Datensatzart mit ihren Regeln, die erlaubten Prioritäten, die Intervalle für Serienaufgaben, die Label-Farben und die Board-Rollen. Damit muss ein Client keine Maximallängen und Wertelisten fest verdrahten. Zusätzlich steht unter rights.manage_labels, ob der Schlüssel Labels verwalten darf.

Todo abrufen

GET /api/todos/{todoUuid}

Ruft ein einzelnes Todo mit all seinen Details ab (inkl. Kommentare, Checklisten und Labels).

Todo erstellen

POST /api/todos

Erstellt ein neues Todo. Kann persönlich (ohne list_id/board_id) oder in einem Board erstellt werden. Mit recurring_interval entsteht eine Serie, also ein Todo, das sich nach jedem Erledigen selbst auf den nächsten Termin setzt. Eine Serie erfordert ein due_date, sonst antwortet der Endpoint mit HTTP 422.

Request Body:

title string * Titel des Todos (max. 255 Zeichen)
description string Beschreibung (max. 65.535 Zeichen)
due_date string Fälligkeitsdatum (ISO 8601)
priority string Priorität: low, medium, high
list_id string UUID der Ziel-Liste
board_id string UUID des Ziel-Boards (ohne list_id wird die erste Liste des Boards verwendet)
recurring_interval string Wiederholungsintervall: daily, every_2_days, weekly, every_2_weeks, monthly, every_2_months, quarterly, half_yearly, yearly. Erfordert due_date
assigned_to string UUID des zugewiesenen Benutzers (wird ignoriert, wenn assigned_to_ids gesetzt ist)
assigned_to_ids array Array von Benutzer-UUIDs für Mehrfach-Zuweisung; hat Vorrang vor assigned_to
card_settings array Card-Darstellung; erlaubte Keys: color (max. 32 Zeichen), labels (max. 50 Strings)

Todo aktualisieren

PUT /api/todos/{todoUuid}

Aktualisiert ein bestehendes Todo. Alle Felder sind optional, nur gesendete Felder werden geändert. list_id:null ist nicht zulässig; zum expliziten Lösen vom Board dient der Detach-Endpoint. Validierungsfehler liefern HTTP 422 mit message und errors. Bei einer Serie (Todo mit recurring_interval) erledigt completed:true nur die aktuelle Wiederholung: Das Todo bleibt offen, sein due_date rückt um ein Intervall vor, und die erledigte Wiederholung wird als eigenes, erledigtes Todo abgelegt. data ist immer das adressierte Todo, bei einer Serie also weiterhin mit completed:false und dem neuen due_date. Die erledigte Wiederholung steht daneben im Antwortfeld completed_occurrence; in allen anderen Fällen ist es null. Wieder öffnen (completed:false) wirkt auf einfache Todos und auf erledigte Wiederholungen, die Serie selbst ist nie erledigt. Das due_date einer Serie lässt sich nicht direkt ändern (HTTP 422). Ein wiederholter Aufruf würde auch die nächste Wiederholung erledigen: Wer expected_due_date mitsendet, erhält stattdessen HTTP 409 mit dem aktuellen Termin in current_due_date, sobald die Serie bereits weitergerückt ist.

Request Body:

title string Titel (falls gesendet: required, max. 255 Zeichen)
description string Beschreibung (max. 65.535 Zeichen)
due_date string Fälligkeitsdatum
priority string Priorität: low, medium, high
list_id string UUID der neuen Ziel-Liste (verschiebt das Todo)
assigned_to string UUID des zugewiesenen Benutzers (wird ignoriert, wenn assigned_to_ids gesendet ist)
assigned_to_ids array Array von Benutzer-UUIDs; ersetzt die komplette Zuweisungsliste
completed boolean true erledigt das Todo, false öffnet es wieder. Bei einer Serie erledigt true nur die aktuelle Wiederholung
recurring_interval string Wiederholungsintervall: daily, every_2_days, weekly, every_2_weeks, monthly, every_2_months, quarterly, half_yearly, yearly. Erfordert ein due_date; null beendet die Serie
expected_due_date string Nur beim Erledigen einer Serie: der Termin (JJJJ-MM-TT), den der Aufrufer gerade sieht. Weicht er vom aktuellen due_date ab, antwortet der Endpoint mit HTTP 409 und erledigt nichts
card_settings array Card-Darstellung; erlaubte Keys: color (max. 32 Zeichen), labels (max. 50 Strings)

Todo löschen

DELETE /api/todos/{todoUuid}

Löscht ein Todo unwiderruflich.

Todo duplizieren

POST /api/todos/{todoUuid}/duplicate

Erstellt eine Kopie eines Todos. Checklisten, Labels und Zuweisungen werden standardmäßig mitkopiert; über die Body-Parameter abschaltbar.

Request Body:

include_checklists boolean Checklisten mitkopieren (Default true)
include_labels boolean Labels mitkopieren (Default true)
include_assignments boolean Zugewiesene Benutzer mitkopieren (Default true)

Todo verschieben

PUT /api/todos/{todoUuid}/move

Verschiebt ein Todo in eine andere Board-Liste. Erfordert Zugriff auf das Board der Ziel-Liste.

Request Body:

list_uuid string * UUID der Ziel-Liste
sort_order integer Expliziter Sortier-Index in der Ziel-Liste (sonst automatisch ans Ende gesetzt)

Todo vom Board lösen

POST /api/todos/{todoUuid}/detach

Löst ein Board-Todo explizit und mit Audit-Log vom Board und überführt es in die persönliche Todo-Liste des Board-Owners. Nur der aktuelle Board-Owner darf diese Aktion ausführen; sichtbare Ressourcen mit unzureichender Rolle liefern HTTP 403, nicht zugängliche Ressourcen HTTP 404.

📋 Boards

Rollenmodell: Owner, Admin, Member
Jedes Board hat genau einen Owner (der Ersteller, automatisch bei der Erstellung gesetzt) sowie beliebig viele Admin- und Member-Nutzer. Owner und Admin dürfen Mitglieder einladen/entfernen; nur der Owner darf das Board löschen, Rollen ändern oder die Ownership übertragen. Ein nicht berechtigter Aufruf liefert HTTP 403 mit {"success": false, "error": "You do not have permission to perform this action on this board."}.

Boards auflisten

GET /api/todos/boards

Ruft die Boards ab, auf die der authentifizierte Benutzer Zugriff hat (nicht alle Boards des Teams), inklusive verschachtelter Listen. Cursor-paginiert.

Query-Parameter:

cursor string Cursor aus dem meta-Objekt der vorherigen Antwort für die nächste/vorherige Seite
per_page integer Ergebnisse pro Seite, 1-100 (Default 50)

Board abrufen

GET /api/todos/boards/{uuid}

Ruft ein einzelnes Board mit dem vollständigen Baum ab: Listen -> Todos -> zugewiesene Benutzer + Labels, inklusive Statistiken (total_todos, completed_todos, progress_percentage) und der Liste der Benutzer mit Zugriff.

Board erstellen

POST /api/todos/boards

Erstellt ein neues Board. Der erstellende Benutzer wird automatisch als Owner eingetragen.

Request Body:

name string * Name des Boards (max. 255 Zeichen)
description string Beschreibung (max. 65.535 Zeichen)
background_settings array Hintergrund/Darstellung; erlaubte Keys: color (max. 32 Zeichen), image (max. 2.048 Zeichen)
project_id string UUID eines FlowCRM-Projekts, mit dem das Board verknüpft werden soll

Board aktualisieren

PUT /api/todos/boards/{uuid}

Aktualisiert Name, Beschreibung oder Hintergrund-Einstellungen eines Boards. Alle Felder sind optional, nur gesendete Felder werden geändert.

Request Body:

name string Name (falls gesendet: required, max. 255 Zeichen)
description string Beschreibung (max. 65.535 Zeichen)
background_settings array Hintergrund/Darstellung; erlaubte Keys: color (max. 32 Zeichen), image (max. 2.048 Zeichen)

Board löschen

DELETE /api/todos/boards/{uuid}

Löscht ein Board unwiderruflich, kaskadierend über Listen, Todos, Zugriffsrechte und externe Freigaben. Owner-exklusiv: nur der Owner des Boards darf löschen; Admin und Member erhalten HTTP 403 ("You do not have permission to perform this action on this board.").

Board archivieren/entarchivieren

PUT /api/todos/boards/{uuid}/archive

Schaltet den Archiv-Status eines Boards um (archiviert -> aktiv oder umgekehrt). Erfordert lediglich Board-Zugriff, kein Rollen-Gate.

Board-Mitglieder auflisten

GET /api/todos/boards/{uuid}/users

Ruft alle Benutzer mit Zugriff auf ein Board ab.

Board-Zugriff gewähren

POST /api/todos/boards/{uuid}/users

Gewährt einem Team-Mitglied Zugriff auf ein Board. Neue oder wiederhergestellte Grants liefern HTTP 201; ein bereits aktiver, idempotenter Grant liefert HTTP 200. Neue Grants erhalten immer die Rolle Member; Rollenänderungen erfolgen ausschließlich über den role-Endpoint. Nur Owner oder Admin dürfen Zugriff gewähren; Member erhalten HTTP 403.

Request Body:

user_uuid string * UUID des Team-Mitglieds, dem Zugriff gewährt werden soll

Board-Zugriff entziehen

DELETE /api/todos/boards/{uuid}/users/{userUuid}

Entzieht einem Benutzer den Zugriff auf ein Board. Nur Owner oder Admin dürfen den Zugriff eines ANDEREN Mitglieds entziehen (sonst HTTP 403 "You do not have permission to perform this action on this board."); jedes Mitglied darf jedoch seinen EIGENEN Zugriff entziehen (Selbst-Entfernung). Ausnahme: der Owner kann sich nicht selbst entfernen und muss die Ownership zuerst übertragen (HTTP 403 "The board Owner cannot remove their own access. Transfer ownership first."); ebenso kann der Owner niemals über diesen Endpoint durch andere entfernt werden.

Board-Rolle ändern / Ownership übertragen

PUT /api/todos/boards/{uuid}/users/{userUuid}/role

Owner-exklusive Aktion: nur der Owner des Boards darf Rollen ändern oder die Ownership übertragen - Admin und Member erhalten HTTP 403 ("You do not have permission to perform this action on this board."). role=admin oder role=member ändert die Rolle des Zielbenutzers ("User role updated successfully."). role=owner überträgt die Ownership atomar: der Zielbenutzer wird Owner, der bisherige Owner wird automatisch zu Admin herabgestuft ("Board ownership transferred successfully."). Fehlerfälle: HTTP 404 wenn Board oder Zielbenutzer nicht gefunden werden, HTTP 422 wenn der Zielbenutzer keinen aktiven Board-Zugriff hat, HTTP 422 wenn der Owner versucht sich selbst die Ownership zu übertragen ("You are already the Owner of this board."), HTTP 422 wenn versucht wird den Owner direkt via role=admin/member herabzustufen (stattdessen role=owner auf einen anderen Zielbenutzer nutzen, um die Ownership zu übertragen), sowie HTTP 409 wenn die Ownership-Übertragung durch eine gleichzeitige Änderung der Berechtigungen des aufrufenden Owners blockiert wurde ("Ownership changed concurrently. Please retry." - Retry empfohlen).

Request Body:

role string * Neue Rolle: admin, member oder owner (owner löst eine Ownership-Übertragung aus)

📑 Listen

Liste erstellen

POST /api/todos/boards/{uuid}/lists

Erstellt eine neue Liste in einem Board. Erfordert Board-Zugriff.

Request Body:

name string * Name der Liste (max. 255 Zeichen)
list_settings array Listen-Darstellung; erlaubte Keys: color (max. 32 Zeichen), label (max. 255 Zeichen)

Liste abrufen

GET /api/todos/boards/{uuid}/lists/{listUuid}

Ruft eine einzelne Liste mit ihren Todos (inklusive zugewiesener Benutzer und Labels) ab. Dies ist der reale Endpoint zum Abrufen einer einzelnen Liste - es existiert kein Endpoint zum Auflisten aller Listen eines Boards separat vom Board selbst (dafür GET /api/todos/boards/{uuid}, das Board inklusive aller Listen liefert).

Liste aktualisieren

PUT /api/todos/boards/{uuid}/lists/{listUuid}

Aktualisiert Name oder list_settings einer Liste. Alle Felder sind optional, nur gesendete Felder werden geändert.

Request Body:

name string Name (falls gesendet: required, max. 255 Zeichen)
list_settings array Listen-Darstellung; erlaubte Keys: color (max. 32 Zeichen), label (max. 255 Zeichen)

Liste löschen

DELETE /api/todos/boards/{uuid}/lists/{listUuid}

Löscht eine Liste unwiderruflich; kaskadiert auf alle Todos der Liste.

Listen eines Boards auflisten

GET /api/todos/boards/{uuid}/lists

Ruft die Listen eines Boards seitenweise ab, jeweils mit der Anzahl ihrer Todos. Anders als der Board-Baum liefert diese Route nur die Spalten und bleibt damit auch bei tausenden Karten nutzbar.

Query-Parameter:

archived boolean Grenzt auf archivierte (true) oder aktive (false) Listen ein
page integer Seitenzahl, ab 1
per_page integer Einträge pro Seite, 1-200 (Standard 50)

Todos einer Liste neu anordnen

PUT /api/todos/lists/{listUuid}/todos/reorder

Ordnet die Todos einer Liste anhand der übergebenen UUID-Reihenfolge neu an. Das Array muss jedes Todo der Liste genau einmal enthalten; fehlende oder fremde UUIDs liefern HTTP 422 mit skipped und verändern keine Sortierung.

Request Body:

todo_uuids array * Array aller Todo-UUIDs der Liste in der gewünschten Reihenfolge

Listen neu anordnen

PUT /api/todos/boards/{uuid}/lists/reorder

Ordnet alle Listen eines Boards atomar und kollisionsfrei anhand der übergebenen UUID-Reihenfolge neu an. Das Array muss jede Board-Liste genau einmal enthalten; fehlende oder fremde UUIDs liefern HTTP 422 mit skipped und verändern keine Sortierung.

Request Body:

list_uuids array * Array aller Listen-UUIDs des Boards in der gewünschten Reihenfolge

Liste archivieren/entarchivieren

PUT /api/todos/boards/{uuid}/lists/{listUuid}/archive

Schaltet den Archiv-Status einer Liste um (archiviert -> aktiv oder umgekehrt).

👥 Zuweisungen

Zuweisungen auflisten

GET /api/todos/{todoUuid}/assignments

Ruft alle Benutzer ab, die einem Todo aktuell zugewiesen sind.

Benutzer zuweisen

POST /api/todos/{todoUuid}/assignments

Weist einem Todo einen weiteren Benutzer zu (additiv, bestehende Zuweisungen bleiben erhalten). Der Benutzer muss Mitglied des Teams sein.

Request Body:

user_uuid string * UUID des zuzuweisenden Team-Mitglieds

Zuweisung entfernen

DELETE /api/todos/{todoUuid}/assignments/{userUuid}

Entfernt die Zuweisung eines Benutzers von einem Todo.

💬 Kommentare

Kommentare auflisten

GET /api/todos/{todoUuid}/comments

Ruft alle Kommentare eines Todos ab, chronologisch aufsteigend sortiert.

Kommentar hinzufügen

POST /api/todos/{todoUuid}/comments

Fügt einem Todo einen neuen Kommentar hinzu.

Request Body:

comment string * Kommentartext (max. 1000 Zeichen)

Kommentar bearbeiten

PUT /api/todos/{todoUuid}/comments/{commentUuid}

Bearbeitet einen Kommentar. Nur der ursprüngliche Autor darf seinen eigenen Kommentar bearbeiten - andernfalls antwortet die API mit HTTP 403 "You can only edit your own comments."

Request Body:

comment string * Neuer Kommentartext (max. 1000 Zeichen)

Kommentar löschen

DELETE /api/todos/{todoUuid}/comments/{commentUuid}

Löscht einen Kommentar unwiderruflich. Nur der ursprüngliche Autor darf seinen eigenen Kommentar löschen - andernfalls antwortet die API mit HTTP 403 "You can only delete your own comments."

🏷️ Labels

Team-weite Labels
Labels gehören dem gesamten Team (nicht einem einzelnen Board oder Todo) und werden über POST /api/todos/labels angelegt. Ein Label wird erst über POST /api/todos/{todoUuid}/labels an einzelne Todos angehängt.

Labels auflisten

GET /api/todos/labels

Ruft alle Labels des Teams cursor-paginiert ab, sortiert nach sort_order.

Query-Parameter:

cursor string Cursor aus dem meta-Objekt der vorherigen Antwort für die nächste/vorherige Seite
per_page integer Ergebnisse pro Seite, 1-100 (Default 50)

Label abrufen

GET /api/todos/labels/{labelUuid}

Ruft ein einzelnes Label des Teams ab, inklusive der Anzahl der Todos, die es tragen.

Label erstellen

POST /api/todos/labels

Erstellt ein neues, team-weites Label.

Request Body:

name string * Name des Labels (max. 255 Zeichen)
color string * Farbe des Labels. Erlaubte Werte: zinc, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose.

Label aktualisieren

PUT /api/todos/labels/{labelUuid}

Aktualisiert Name oder Farbe eines Labels. Alle Felder sind optional, nur gesendete Felder werden geändert.

Request Body:

name string Name (falls gesendet: required, max. 255 Zeichen)
color string Farbe (falls gesendet: required). Erlaubte Werte: zinc, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose.

Label löschen

DELETE /api/todos/labels/{labelUuid}

Löscht ein Label (Soft-Delete). Ein Model-Boot-Event hängt das Label vorher von allen Todos ab.

Labels eines Todos auflisten

GET /api/todos/{todoUuid}/labels

Ruft alle Labels ab, die an ein bestimmtes Todo angehängt sind.

Labels an Todo anhängen

POST /api/todos/{todoUuid}/labels

Hängt ein oder mehrere Labels additiv an ein Todo an und liefert bei Erfolg HTTP 201. Wenn sich eine UUID nicht auf ein Team-Label auflösen lässt, antwortet der Endpoint mit HTTP 422 und skipped; es werden dann keine Labels angehängt.

Request Body:

label_uuids array * Array von Label-UUIDs (mindestens 1 Eintrag)

Label von Todo entfernen

DELETE /api/todos/{todoUuid}/labels/{labelUuid}

Entfernt ein einzelnes Label von einem Todo (das Label selbst bleibt für das Team bestehen).

☑️ Checklisten

Checklisten auflisten

GET /api/todos/{todoUuid}/checklists

Ruft alle Checklisten eines Todos inklusive ihrer Items und Fortschritt (progress_percentage, total_items_count, completed_items_count) ab.

Checkliste abrufen

GET /api/todos/{todoUuid}/checklists/{checklistUuid}

Ruft eine einzelne Checkliste eines Todos mit allen Zeilen und dem Fortschritt ab.

Checklisten neu anordnen

PUT /api/todos/{todoUuid}/checklists/reorder

Ordnet die Checklisten eines Todos anhand der übergebenen UUID-Reihenfolge neu an. Das Array muss jede Checkliste des Todos genau einmal enthalten; fehlende oder fremde UUIDs liefern HTTP 422 mit skipped und verändern keine Sortierung.

Request Body:

checklist_uuids array * Array aller Checklisten-UUIDs des Todos in der gewünschten Reihenfolge

Checklisten-Items auflisten

GET /api/todos/{todoUuid}/checklists/{checklistUuid}/items

Ruft die Zeilen einer Checkliste seitenweise ab, optional nur die erledigten oder nur die offenen.

Query-Parameter:

completed boolean Grenzt auf erledigte (true) oder offene (false) Zeilen ein
page integer Seitenzahl, ab 1
per_page integer Einträge pro Seite, 1-200 (Standard 50)

Checklisten-Items neu anordnen

PUT /api/todos/checklists/{checklistUuid}/items/reorder

Ordnet die Zeilen einer Checkliste anhand der übergebenen UUID-Reihenfolge neu an. Das Array muss jede Zeile der Checkliste genau einmal enthalten; fehlende oder fremde UUIDs liefern HTTP 422 mit skipped und verändern keine Sortierung.

Request Body:

item_uuids array * Array aller Item-UUIDs der Checkliste in der gewünschten Reihenfolge

Checkliste erstellen

POST /api/todos/{todoUuid}/checklists

Erstellt eine neue Checkliste auf einem Todo.

Request Body:

name string * Name der Checkliste (max. 255 Zeichen)

Checkliste aktualisieren

PUT /api/todos/{todoUuid}/checklists/{checklistUuid}

Aktualisiert Name oder sort_order einer Checkliste. Alle Felder sind optional, nur gesendete Felder werden geändert.

Request Body:

name string Name (falls gesendet: required, max. 255 Zeichen)
sort_order integer Expliziter Sortier-Index

Checkliste löschen

DELETE /api/todos/{todoUuid}/checklists/{checklistUuid}

Löscht eine Checkliste unwiderruflich, inklusive aller ihrer Items.

Checklisten-Item erstellen

POST /api/todos/{todoUuid}/checklists/{checklistUuid}/items

Fügt einer Checkliste ein neues Item hinzu. Wird assigned_to gesendet, muss die UUID einem Team-Mitglied entsprechen - andernfalls antwortet die API mit HTTP 404 "Assigned user not found or not a team member."

Request Body:

content string * Text des Items (max. 500 Zeichen)
assigned_to string UUID des zugewiesenen Team-Mitglieds

Checklisten-Item aktualisieren

PUT /api/todos/{todoUuid}/checklists/{checklistUuid}/items/{itemUuid}

Aktualisiert Text oder Zuweisung eines Checklisten-Items. Alle Felder sind optional, nur gesendete Felder werden geändert; assigned_to=null entfernt eine bestehende Zuweisung.

Request Body:

content string Text (falls gesendet: required, max. 500 Zeichen)
assigned_to string UUID des zugewiesenen Team-Mitglieds, oder null um die Zuweisung zu entfernen

Checklisten-Item löschen

DELETE /api/todos/{todoUuid}/checklists/{checklistUuid}/items/{itemUuid}

Löscht ein Checklisten-Item unwiderruflich.

Checklisten-Item umschalten

PUT /api/todos/{todoUuid}/checklists/{checklistUuid}/items/{itemUuid}/toggle

Schaltet den Erledigt-Status eines Checklisten-Items um (nicht erledigt -> erledigt oder umgekehrt). Die Message unterscheidet sich je nach neuem Status: "Checklist item marked complete." bzw. "Checklist item marked incomplete."

🔗 Board-Freigaben und Eigentum

Nur Board-Administration
Freigabe-Link, Gäste-Einladungen und Eigentümerwechsel setzen eine Board-Rolle voraus: Freigaben und Einladungen erfordern owner oder admin, der Eigentümerwechsel ausschließlich owner. Ohne die Rolle antwortet die Schnittstelle mit HTTP 403; ein Board, auf das der Schlüssel keinen Zugriff hat, antwortet mit HTTP 404.
Freigabe-Link niemals im Klartext für Mitglieder
Die Adresse des öffentlichen Boards erscheint ausschließlich für Konten mit Administrationsrechten. Ein einfaches Mitglied sieht unter share_url den Wert null, auch wenn die Freigabe aktiv ist.

Zugriffe eines Boards abrufen

GET /api/todos/boards/{uuid}/access

Liefert die Mitglieder des Boards mit ihren Rollen, die eigene Rolle, den Zustand der externen Freigabe und, für Konten mit Administrationsrechten, die eingeladenen Gäste samt Freigabe-Adresse.

Externe Freigabe aktivieren

POST /api/todos/boards/{uuid}/sharing/enable

Schaltet die externe Freigabe des Boards ein und erzeugt dabei eine Freigabe-Adresse. Ein bereits freigegebenes Board behält seine Adresse.

Externe Freigabe deaktivieren

POST /api/todos/boards/{uuid}/sharing/disable

Schaltet die externe Freigabe ab und verwirft die Freigabe-Adresse. Bereits eingeladene Gäste erreichen das Board danach nicht mehr.

Freigabe-Adresse erneuern

POST /api/todos/boards/{uuid}/sharing/rotate

Ersetzt die Freigabe-Adresse durch eine neue. Jede zuvor verteilte Adresse wird damit ungültig; die Gäste bleiben eingetragen und erhalten über eine neue Einladung wieder Zugang.

Gast einladen

POST /api/todos/boards/{uuid}/external-invites

Lädt eine Person ohne Konto zum Board ein und schickt ihr eine Einladung mit einem zeitlich begrenzten Zugangslink. Ist die externe Freigabe noch nicht aktiv, wird sie dabei eingeschaltet, weil die Einladung sonst ins Leere liefe.

Request Body:

email string * Mailadresse des Gastes
name string * Anzeigename des Gastes (max. 255 Zeichen)

Gästezugang entziehen

DELETE /api/todos/boards/{uuid}/external-invites/{inviteUuid}

Entzieht einem Gast den Zugang zu diesem Board. Die Freigabe-Adresse des Boards bleibt unverändert.

Eigentum übertragen

POST /api/todos/boards/{uuid}/transfer-ownership

Übergibt das Board an ein anderes Mitglied; der bisherige Eigentümer wird Administrator. Die Zielperson muss bereits Zugriff auf das Board haben, sonst antwortet die Schnittstelle mit HTTP 422.

Request Body:

user_uuid string * UUID des neuen Eigentümers; muss ein Mitglied des Teams und des Boards sein

📎 Dateien

Nur Multipart-Upload
Eine Datei wird ausschließlich als multipart/form-data im Feld file übergeben. Die Schnittstelle lädt niemals eine vom Aufrufer genannte Adresse. Erlaubt sind bis zu 50 MB in den Formaten jpeg, jpg, png, gif, webp, mp4, mov, pdf, zip, doc, docx, xls, xlsx, ppt und pptx.

Dateien eines Todos auflisten

GET /api/todos/{todoUuid}/files

Ruft die Anhänge eines Todos seitenweise ab, neueste zuerst. Anhänge, die ein Gast über ein freigegebenes Board hochgeladen hat, sind an uploaded_by_external erkennbar.

Query-Parameter:

page integer Seitenzahl, ab 1
per_page integer Einträge pro Seite, 1-200 (Standard 50)

Datei an ein Todo anhängen

POST /api/todos/{todoUuid}/files

Hängt eine hochgeladene Datei an ein Todo. Der Aufruf erfolgt als multipart/form-data mit dem Feld file.

Request Body:

file file * Die hochzuladende Datei, höchstens 50 MB, in einem der erlaubten Formate

Datei herunterladen

GET /api/todos/{todoUuid}/files/{fileUuid}/download BINARY

Liefert die Datei selbst als Download aus. Die Antwort ist kein JSON, sondern der Dateiinhalt mit passendem Inhaltstyp. Fehlt die gespeicherte Datei, antwortet die Schnittstelle mit HTTP 404 und dem Fehler file_missing.

Text einer Datei lesen

GET /api/todos/{todoUuid}/files/{fileUuid}/text

Liest den Text einer angehängten Datei über dieselbe Extraktion, die auch für Chat-Anhänge greift. Formate ohne Leseverfahren antworten mit extraction_available=false statt mit einem Fehler. Lange Texte werden in Abschnitten von 20.000 Zeichen geliefert; next_offset nennt die Fortsetzung.

Query-Parameter:

offset integer Zeichenversatz für die Fortsetzung eines langen Textes (Standard 0)