Doku

API-Referenz

Jeder Endpunkt ist auf das angemeldete Konto beschränkt, und die REST-API authentifiziert sich mit dem Sitzungscookie, das die Web-App setzt. Skripte und Agenten nutzen stattdessen den MCP-Endpunkt.

Alle Anfragen und Antworten sind JSON. Jede Route unter /api/* authentifiziert sich mit dem Sitzungscookie, das POST /api/auth/login setzt:

curl -X POST https://trydone.app/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"..."}' \
  -c cookies.txt

curl -X GET https://trydone.app/api/tasks -b cookies.txt

Ein MCP-Token authentifiziert nicht gegenüber der REST-API. Ein Header Authorization: Bearer <mcp-token> wird auf genau einer Route akzeptiert, nämlich GET /api/events, damit ein Agent Änderungen mit dem Zugang abonnieren kann, den er schon hat. Jede andere Route unter /api/* beantwortet ein Bearer-Token mit 401.

Das ist Absicht und kein Versehen: So kann ein durchgesickertes MCP-Token nicht die gesamte REST-Oberfläche des Kontos steuern. Skripte und Agenten sollten stattdessen mit POST /mcp sprechen, denn dafür ist das Token da.

curl -X GET https://trydone.app/api/events \
  -H "Authorization: Bearer <your-generated-mcp-token>"

Anmeldung & Konto

POST/api/auth/signup
Ein Konto erstellen (E-Mail + Passwort, dazu optional ein Empfehlungscode `ref`).
GET/api/referrals
Dein Empfehlungslink, wer darüber beigetreten ist und der Fortschritt bis zur nächsten Prämie.
POST/api/auth/login
Eine Sitzung starten; setzt ein Cookie. Bei aktivierter 2FA kommt stattdessen eine Challenge zurück, die unter /api/auth/2fa/verify abgeschlossen wird.
POST/api/auth/magic-link
Einen einmaligen Anmeldelink per E-Mail an eine Adresse senden.
POST/api/auth/magic-link/verify
Ein Magic-Link-Token gegen eine echte Sitzung tauschen. Kein Passwort nötig.
POST/api/auth/2fa/verify
Schritt 2 einer 2FA-Anmeldung: die Challenge und einen Code gegen eine echte Sitzung tauschen. Keine Sitzung nötig.
POST/api/auth/logout
Die aktuelle Sitzung beenden.
GET/api/auth/me
Der aktuelle Nutzer (auch, ob die E-Mail-Adresse bestätigt ist) und ob ein MCP-Token existiert.
GET/api/bootstrap
Der aktuelle Nutzer und alle Listen (Aufgaben, Projekte, Ziele, Abhängigkeiten, Tags, Aufgabe↔Tags) in einer Anfrage. Das ist der Poll des Web-Clients.
PATCH/api/auth/profile
Das Profil ändern: Name, Zeitzone, Avatar.
POST/api/auth/password/verify
Das aktuelle Passwort prüfen (Schritt 1 beim Ändern).
POST/api/auth/password
Ein neues Passwort setzen. Setzt ein kürzliches /password/verify in dieser Sitzung voraus (Schritt 2).
POST/api/auth/forgot-password
Eine E-Mail zum Zurücksetzen des Passworts anfordern.
POST/api/auth/reset-password
Das Zurücksetzen mit dem per E-Mail geschickten Token abschließen.
POST/api/auth/verify-email
Eine Adresse mit dem per E-Mail geschickten Token bestätigen. Keine Sitzung nötig.
POST/api/auth/resend-verification
Die Bestätigungs-E-Mail erneut an das angemeldete Konto senden.
POST/api/auth/mcp-token
Das MCP-Token des Kontos mit Vollzugriff erzeugen (oder neu erzeugen).
DELETE/api/auth/mcp-token
Das MCP-Token mit Vollzugriff widerrufen.
GET/api/mcp-tokens
Die MCP-Tokens des Kontos auflisten (Vollzugriff, nur lesen, einzelnes Projekt).
POST/api/mcp-tokens
Ein eingeschränktes MCP-Token ausstellen (nur lesen oder ein Projekt).
DELETE/api/mcp-tokens/:id
Ein eingeschränktes MCP-Token widerrufen.
GET/api/auth/2fa
Ob die Zwei-Faktor-Authentifizierung eingeschaltet ist und wie viele Wiederherstellungscodes übrig sind.
POST/api/auth/2fa/setup
Die TOTP-Einrichtung beginnen. Liefert das Secret und die otpauth://-URI, die der QR-Code enthält. Schaltet 2FA noch nicht ein.
POST/api/auth/2fa/enable
Die Einrichtung mit einem gültigen Code bestätigen. Liefert die Wiederherstellungscodes, das einzige Mal, dass sie im Klartext existieren.
DELETE/api/auth/2fa
Die Zwei-Faktor-Authentifizierung ausschalten.
POST/api/auth/2fa/recovery-codes
Einen neuen Satz Wiederherstellungscodes ausstellen und die alten ungültig machen.
GET/api/auth/connections
Die OAuth-Clients auflisten, denen du Zugriff gegeben hast.
DELETE/api/auth/connections/:clientId
Den Zugriff eines OAuth-Clients widerrufen.
DELETE/api/auth/account
Das Konto und alles darin löschen. Erfordert das aktuelle Passwort.

Aufgaben

GET/api/tasks
Aufgaben auflisten. Filter nach status, priority, project, parent; Suche in Titel und Notizen.
POST/api/tasks
Eine Aufgabe erstellen.
POST/api/tasks/quick
Eine Aufgabe aus einer rohen Schnellerfassungs-Zeichenkette erstellen.
POST/api/tasks/import
Einen CSV-Export aus Todoist, TickTick, Asana, Trello oder Notion importieren (oder eine allgemeine CSV-Datei).
GET/api/tasks/:id
Eine Aufgabe abrufen.
PATCH/api/tasks/:id
Eine Aufgabe ändern.
DELETE/api/tasks/:id
Eine Aufgabe löschen (samt Unteraufgaben). Sie wandert in den Papierkorb und wird nicht endgültig gelöscht.
POST/api/tasks/bulk-assign
Eine Menge von Aufgaben-IDs (bis zu 200) einem Nutzer oder einem KI-Agenten zuweisen.
POST/api/tasks/bulk-delete
Eine Menge von Aufgaben-IDs in einem Aufruf in den Papierkorb verschieben.
POST/api/tasks/bulk-move
Eine Menge von Aufgaben-IDs in einem Aufruf in ein Projekt verschieben (oder aus einem heraus).
POST/api/tasks/:id/decompose
Eine Aufgabe anhand einer Liste von Titeln in Unteraufgaben aufteilen.
POST/api/tasks/:id/approve
Einen Abschluss freigeben, den ein Agent vorgeschlagen hat (pending_approval → done).
POST/api/tasks/:id/reject
Eine Aufgabe im Status pending_approval ablehnen, optional mit Feedback (→ in_progress).
POST/api/tasks/:id/approve-plan
Einen vorgeschlagenen Plan freigeben (plan_proposed → in_progress).
POST/api/tasks/:id/reject-plan
Einen vorgeschlagenen Plan ablehnen, optional mit Feedback.
GET/api/tasks/:id/evidence
Worauf eine Freigabe vertrauen soll: Fortschritt bei den Kriterien, Verbrauch gegenüber dem Budget, Belege, Ergebnisse und Trace-Links.
GET/api/tasks/:id/runs
Die Agentenläufe, die für eine Aufgabe aufgezeichnet wurden.
GET/api/tasks/:id/decisions
Die Fragen, die ein Agent an dieser Aufgabe hinterlegt hat.
POST/api/tasks/:id/pause
Jeden Agenten stoppen, der diese eine Aufgabe anfasst, bis sie fortgesetzt wird.
POST/api/tasks/:id/resume
Eine pausierte Aufgabe wieder starten. Nur für Menschen: Es gibt kein MCP-Gegenstück.
POST/api/resurface
Das Warten für Aufgaben beenden, deren Wiedervorlagedatum erreicht ist.

Papierkorb

GET/api/trash
Gelöschte Aufgaben auflisten, die neuesten zuerst.
POST/api/tasks/:id/restore
Eine gelöschte Aufgabe wiederherstellen (samt den Unteraufgaben, die mit ihr gelöscht wurden).
DELETE/api/trash/:id
Eine Aufgabe im Papierkorb endgültig löschen.
DELETE/api/trash
Den Papierkorb leeren.

Tags

GET/api/tags
Tags auflisten.
POST/api/tags
Ein Tag erstellen.
DELETE/api/tags/:id
Ein Tag löschen (es wird von jeder Aufgabe entfernt, die es hatte).
GET/api/task-tags
Alle Zuordnungen Aufgabe↔Tag des Kontos auflisten.
POST/api/tasks/:id/tags
Ein Tag an eine Aufgabe hängen.
DELETE/api/tasks/:id/tags/:tagId
Ein Tag von einer Aufgabe entfernen.

Abhängigkeiten

GET/api/dependencies
Alle Blockiert-durch-Beziehungen des Kontos auflisten.
GET/api/tasks/:id/dependencies
Die Blocker einer Aufgabe auflisten.
POST/api/tasks/:id/dependencies
Einen Blocker hinzufügen (mit Zyklusprüfung).
DELETE/api/tasks/:id/dependencies/:blockerId
Einen Blocker entfernen.

Verlauf

GET/api/tasks/:id/comments
Den Verlauf einer Aufgabe auflisten (Kommentare + Statushistorie).
POST/api/tasks/:id/comments
Einen Kommentar hinzufügen, verfasst von dir oder einem KI-Agenten.
GET/api/activity
Die Verlaufsleiste des ganzen Boards: was in allen Aufgaben passiert ist, die du sehen kannst, das Neueste zuerst. ?limit= begrenzt die Anzahl.
GET/api/claude-shipped
Der Feed der Agentenarbeit: was Claude tatsächlich geliefert hat. ?days=1|7|30 legt den Zeitraum fest.

Zusammenfassung & Rückblick

GET/api/digest
Überfällige, heute fällige, stockende und kürzlich erledigte Aufgaben.
GET/api/review
Die Zusammenfassung für den Wochenrückblick.
GET/api/stats
Erledigungstrend, Serie und offene Aufgaben nach Priorität und Projekt.

Ziele

GET/api/goals
Ziele auflisten.
POST/api/goals
Ein Ziel erstellen.
PATCH/api/goals/:id
Ein Ziel ändern.
DELETE/api/goals/:id
Ein Ziel löschen.
POST/api/goals/:id/breakdown
Unter dem Ziel eine Claude zugewiesene Aufgabe zum Aufteilen anlegen. Das ist die Aktion „Schritte vorschlagen“.

Erfassungseingang

GET/api/capture
Von Agenten vorgeschlagene Aufgaben, die noch gesichtet werden müssen, dazu die Kennzahlen zu Annahme und Ablehnung. ?state=pending|accepted|dismissed|all.
POST/api/capture/sweep
Den Kalender nach Dingen durchsuchen, die einen Vorschlag wert sind, und sie als Vorschläge ablegen.
POST/api/capture/:id/accept
Einen Vorschlag in eine echte Aufgabe verwandeln. Die Aufgabe beginnt immer mit Freigabepflicht (agent_ok: false).
POST/api/capture/:id/dismiss
Einen Vorschlag verwerfen, ohne etwas zu erstellen.

Aufräumen

GET/api/grooming
Der Durchgang nach Liegengebliebenem: offene Arbeit, um die es still geworden ist, samt den Belegen für eine Entscheidung. ?days= legt die Schwelle fest, ?limit= begrenzt die Anzahl.
GET/api/grooming/proposals
Gebündelte Aufräumvorschläge. ?state=open|resolved|all.
POST/api/grooming/items/:id/approve
Das vorgeschlagene Vorgehen für einen Eintrag anwenden.
POST/api/grooming/items/:id/dismiss
Einen Eintrag ablehnen und die Aufgabe lassen, wie sie ist.

Autonomie & Agenten

GET/api/autonomy
Das Autonomie-Register: wo agent_ok verdient wurde, je Projekt und Tag-Klasse. Nur lesend, es gewährt nichts.
POST/api/autonomy/revoke
Einer Klasse die Gewährung wieder entziehen, sodass ihre Aufgaben erneut hinter die Freigabeschranke kommen.
GET/api/agents
Die Agentenliste: was jeder benannte Agent getan hat. ?days= legt den Zeitraum fest. Nur Zahlen und Zeitstempel.
GET/api/fleet
Der Live-Status der Flotte: wer gerade woran arbeitet.
GET/api/projects/:id/rejections
Die jüngsten Ablehnungen in einem Projekt. Aus diesen Daten liest der Autonomie-Abbau.
GET/api/decisions
Jede offene Entscheidung, auf die ein Agent wartet, über das ganze Board.
POST/api/decisions/:id/answer
Eine hinterlegte Entscheidung beantworten und ihre Aufgabe freigeben.

Auslöser

GET/api/triggers
Jede offene Anforderung, dass ein Agent jetzt starten soll, ob durch einen Klick auf „Jetzt ausführen“ oder eine @claude-Erwähnung, die noch auf eine Verbindung wartet.
DELETE/api/triggers/:id
Einen Auslöser zurücknehmen, solange ihn noch niemand übernommen hat.
GET/api/trigger-webhook
Ob für trigger.created ein ausgehender Webhook gesetzt ist, seine jüngsten Zustellergebnisse und needs_rotation: true bei einem Webhook, der registriert wurde, bevor Zustellungen mit dem Secret selbst signiert wurden. Er sollte ersetzt werden, um ein neues Secret zu bekommen.
PUT/api/trigger-webhook
Die Webhook-URL setzen oder ersetzen. Liefert das Signatur-Secret einmalig bei der Erstellung. Jede Zustellung trägt X-Done-Signature: den hexadezimalen HMAC-SHA256, mit diesem Secret als Schlüssel, über den Wert von X-Done-Timestamp, einen Punkt und den rohen Body.
DELETE/api/trigger-webhook
Den Webhook entfernen.

Routine & Budget

GET/api/routine
Die Limits, bei denen eine geplante Routine anhält.
PATCH/api/routine
Diese Limits ändern.
GET/api/routine/night
Der Verbrauch gegenüber dem Budget für heute Nacht. ?since= überschreibt das Standardfenster von 12 Stunden.

Projekte

GET/api/projects
Projekte auflisten.
POST/api/projects
Ein Projekt erstellen.
PATCH/api/projects/:id
Ein Projekt ändern.
DELETE/api/projects/:id
Ein Projekt löschen.

Arbeitsbereiche & Teilen

GET/api/workspaces
Die Arbeitsbereiche auflisten, zu denen du gehörst.
POST/api/workspaces/:id/pause
Ein Board stoppen. Kein Agent bekommt daraus Arbeit, bis es fortgesetzt wird.
POST/api/workspaces/:id/resume
Ein gestopptes Board wieder starten. Nur für Menschen: Es gibt kein MCP-Gegenstück.
GET/api/workspaces/:id/members
Die Mitglieder eines Arbeitsbereichs auflisten.
DELETE/api/workspaces/:id/members/:memberId
Ein Mitglied aus einem Arbeitsbereich entfernen.
POST/api/invites
Jemanden in einen Arbeitsbereich oder ein einzelnes Projekt einladen. Der Link wird per E-Mail geschickt. Erfordert die Adresse der Person.
POST/api/invites/accept
Ein Einladungs-Token einlösen, um beizutreten.

Agentenläufe

GET/api/runs
Die jüngsten Agentenläufe, dazu aggregierte Statistiken zu Status, Tool-Aufrufen und Tokens.

Kalender & Google-Synchronisierung

GET/api/calendar
Kalender- und Planungseinstellungen und das Token des ICS-Feeds.
PUT/api/calendar
Die Einstellungen für Kalender und Planungsfenster ändern.
POST/api/calendar/token
Das Token für den abonnierbaren ICS-Feed erzeugen.
DELETE/api/calendar/token
Das Token des ICS-Feeds widerrufen.
POST/api/calendar/oauth/start
Das Verbinden eines Google-Kalenders beginnen. Liefert die Zustimmungs-URL, zu der der Browser geschickt wird.
GET/api/calendar/writeback
Ob „Meinen Tag planen“ Fokusblöcke in einen Kalender zurückschreibt, der Done gehört, und in welchen.
POST/api/calendar/writeback/sync
Den Kalender fürs Zurückschreiben jetzt abgleichen, statt auf den nächtlichen Durchgang zu warten.
DELETE/api/calendar/writeback
Das Zurückschreiben ausschalten und diesen Kalender nicht mehr anfassen.
GET/api/google/accounts
Die verbundenen Google-Kalender-Konten auflisten.
POST/api/google/sync
Belegte Zeiten aus Google Kalender synchronisieren.
DELETE/api/google/accounts/:id
Ein Google-Konto trennen.
GET/api/calendar/events
Zwischengespeicherte Kalendertermine (Titel, Personen) in einem Datumsbereich auflisten.
GET/api/calendar/matches
Vorgeschlagene Zuordnungen Aufgabe↔Termin, nach Aufgabe, nach Termin oder nach Datumsbereich.
GET/api/tasks/:id/calendar-links
Die Kalendertermine auflisten, die mit einer Aufgabe verknüpft sind.
POST/api/tasks/:id/calendar-links
Eine Aufgabe mit dem Kalendertermin verknüpfen, um den es geht.
DELETE/api/tasks/:id/calendar-links/:eventId
Die Verknüpfung einer Aufgabe mit einem Kalendertermin lösen.

Benachrichtigungen & Live

GET/api/notifications
Die Benachrichtigungseinstellungen abrufen (E-Mail-Zusammenfassung).
PUT/api/notifications
Die Benachrichtigungseinstellungen ändern.
GET/api/events
Vom Server gesendeter Stream der Änderungen an Aufgaben und Verlauf. Verbinde dich mit der ID des letzten Frames neu (Last-Event-ID oder ?cursor=), um verpasste Aufgabenänderungen und Verlaufseinträge nachzuholen.
GET/api/export
Aufgaben als CSV oder Markdown exportieren.
PUT/api/view-prefs
Ansichtseinstellungen speichern (Sortierung, Gruppierung, welche Leisten offen sind).
PUT/api/saved-views
Die gespeicherten Ansichten des Kontos ersetzen.
GET/api/widget
Ein kompakter Schnappschuss des Boards für das Home-Bildschirm-Widget. ?limit=, ?days= und ein Header X-Client-Date für das Heute des Geräts.

MCP

POST/mcp
Der Remote-MCP-Endpunkt: JSON-RPC über Streamable HTTP. Siehe „MCP einrichten“.