Documentation

Référence de l’API

Chaque point d’accès est limité au compte authentifié, et l’API REST s’authentifie avec le cookie de session posé par l’application web. Les scripts et les agents utilisent plutôt le point d’accès MCP.

Toutes les requêtes et les réponses sont en JSON. Chaque route /api/* s’authentifie avec le cookie de session posé par POST /api/auth/login :

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

Un jeton MCP n’authentifie pas l’API REST. Un en-tête Authorization: Bearer <mcp-token> est accepté sur une seule route, GET /api/events, pour qu’un agent puisse s’abonner aux changements avec l’identifiant qu’il possède déjà. Toutes les autres routes /api/* répondent 401 à un jeton bearer.

C’est un choix délibéré, pas un oubli : un jeton MCP qui fuite ne peut ainsi pas piloter toute la surface REST du compte. Les scripts et les agents doivent plutôt s’adresser à POST /mcp, ce pour quoi le jeton est fait.

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

Authentification et compte

POST/api/auth/signup
Crée un compte (e-mail + mot de passe, plus un code de parrainage `ref` facultatif).
GET/api/referrals
Votre lien de parrainage, les personnes inscrites grâce à lui et la progression vers la prochaine récompense.
POST/api/auth/login
Ouvre une session et pose un cookie. Avec la 2FA activée, renvoie à la place un défi, à terminer sur /api/auth/2fa/verify.
POST/api/auth/magic-link
Envoie par e-mail un lien de connexion à usage unique.
POST/api/auth/magic-link/verify
Échange le jeton d’un lien magique contre une vraie session. Aucun mot de passe requis.
POST/api/auth/2fa/verify
Étape 2 d’une connexion 2FA : échange le défi et un code contre une vraie session. Aucune session requise.
POST/api/auth/logout
Ferme la session en cours.
GET/api/auth/me
L’utilisateur actuel (y compris si l’adresse e-mail est confirmée) et l’existence ou non d’un jeton MCP.
GET/api/bootstrap
L’utilisateur actuel et toutes les listes (tâches, projets, objectifs, dépendances, étiquettes, tâche↔étiquettes) en une seule requête : c’est ce qu’interroge le client web.
PATCH/api/auth/profile
Met à jour le profil : nom, fuseau horaire, avatar.
POST/api/auth/password/verify
Vérifie le mot de passe actuel (étape 1 du changement).
POST/api/auth/password
Définit un nouveau mot de passe. Exige un /password/verify récent sur cette session (étape 2).
POST/api/auth/forgot-password
Demande un e-mail de réinitialisation du mot de passe.
POST/api/auth/reset-password
Termine une réinitialisation avec le jeton reçu par e-mail.
POST/api/auth/verify-email
Confirme une adresse avec le jeton reçu par e-mail. Aucune session requise.
POST/api/auth/resend-verification
Renvoie l’e-mail de confirmation au compte connecté.
POST/api/auth/mcp-token
Génère (ou régénère) le jeton MCP à accès complet du compte.
DELETE/api/auth/mcp-token
Révoque le jeton MCP à accès complet.
GET/api/mcp-tokens
Liste les jetons MCP du compte (accès complet, lecture seule, projet unique).
POST/api/mcp-tokens
Crée un jeton MCP à portée limitée (lecture seule ou un seul projet).
DELETE/api/mcp-tokens/:id
Révoque un jeton MCP à portée limitée.
GET/api/auth/2fa
Indique si l’authentification à deux facteurs est activée et combien de codes de récupération il reste.
POST/api/auth/2fa/setup
Lance l’inscription TOTP : renvoie le secret et l’URI otpauth:// encodée dans le QR code. N’active pas la 2FA.
POST/api/auth/2fa/enable
Confirme l’inscription avec un code valide. Renvoie les codes de récupération, la seule fois où ils existent en clair.
DELETE/api/auth/2fa
Désactive l’authentification à deux facteurs.
POST/api/auth/2fa/recovery-codes
Émet un nouveau jeu de codes de récupération et invalide les anciens.
GET/api/auth/connections
Liste les clients OAuth auxquels vous avez accordé un accès.
DELETE/api/auth/connections/:clientId
Révoque l’accès d’un client OAuth.
DELETE/api/auth/account
Supprime le compte et tout son contenu. Exige le mot de passe actuel.

Tâches

GET/api/tasks
Liste les tâches. Filtres : status, priority, project, parent. Recherche dans le titre et les notes.
POST/api/tasks
Crée une tâche.
POST/api/tasks/quick
Crée une tâche à partir d’une chaîne brute de saisie rapide.
POST/api/tasks/import
Importe un export CSV de Todoist, TickTick, Asana, Trello ou Notion (ou un CSV générique).
GET/api/tasks/:id
Récupère une tâche.
PATCH/api/tasks/:id
Met à jour une tâche.
DELETE/api/tasks/:id
Supprime une tâche (et ses sous-tâches en cascade). Elle part à la corbeille, ce n’est pas une suppression définitive.
POST/api/tasks/bulk-assign
Attribue un ensemble d’identifiants de tâches (200 au maximum) à un utilisateur ou à un agent IA.
POST/api/tasks/bulk-delete
Met un ensemble d’identifiants de tâches à la corbeille en un seul appel.
POST/api/tasks/bulk-move
Déplace un ensemble d’identifiants de tâches vers un projet (ou hors d’un projet) en un seul appel.
POST/api/tasks/:id/decompose
Découpe une tâche en sous-tâches à partir d’une liste de titres.
POST/api/tasks/:id/approve
Approuve une clôture proposée par un agent (pending_approval → done).
POST/api/tasks/:id/reject
Refuse une tâche en pending_approval, avec des remarques facultatives (→ in_progress).
POST/api/tasks/:id/approve-plan
Approuve un plan proposé (plan_proposed → in_progress).
POST/api/tasks/:id/reject-plan
Refuse un plan proposé, avec des remarques facultatives.
GET/api/tasks/:id/evidence
Ce sur quoi repose une demande de validation : progression des critères, dépenses par rapport au budget, justificatifs, livrables et liens de trace.
GET/api/tasks/:id/runs
Les exécutions d’agents enregistrées pour une tâche.
GET/api/tasks/:id/decisions
Les questions qu’un agent a mises en attente sur cette tâche.
POST/api/tasks/:id/pause
Arrête tous les agents qui touchent à cette tâche jusqu’à sa reprise.
POST/api/tasks/:id/resume
Relance une tâche en pause. Réservé aux humains : il n’existe pas d’équivalent MCP.
POST/api/resurface
Réactive les tâches en attente dont la date de retour est arrivée.

Corbeille

GET/api/trash
Liste les tâches supprimées, des plus récentes aux plus anciennes.
POST/api/tasks/:id/restore
Restaure une tâche supprimée (et les sous-tâches supprimées avec elle).
DELETE/api/trash/:id
Supprime définitivement une tâche de la corbeille.
DELETE/api/trash
Vide la corbeille.

Étiquettes

GET/api/tags
Liste les étiquettes.
POST/api/tags
Crée une étiquette.
DELETE/api/tags/:id
Supprime une étiquette (elle est retirée de toutes les tâches qui la portaient).
GET/api/task-tags
Liste toutes les associations tâche↔étiquette du compte.
POST/api/tasks/:id/tags
Applique une étiquette à une tâche.
DELETE/api/tasks/:id/tags/:tagId
Retire une étiquette d’une tâche.

Dépendances

GET/api/dependencies
Liste toutes les relations « bloquée par » du compte.
GET/api/tasks/:id/dependencies
Liste ce qui bloque une tâche.
POST/api/tasks/:id/dependencies
Ajoute une tâche bloquante (avec détection des cycles).
DELETE/api/tasks/:id/dependencies/:blockerId
Retire une tâche bloquante.

Activité

GET/api/tasks/:id/comments
Liste le fil d’activité d’une tâche (commentaires + historique des statuts).
POST/api/tasks/:id/comments
Ajoute un commentaire, rédigé par vous ou par un agent IA.
GET/api/activity
Le fil d’activité de tout le tableau : ce qui s’est passé sur toutes les tâches que vous pouvez voir, du plus récent au plus ancien. ?limit= le plafonne.
GET/api/claude-shipped
Le fil du travail des agents : ce que Claude a réellement livré. ?days=1|7|30 fixe la période.

Résumé et bilan

GET/api/digest
Les tâches en retard, à échéance aujourd’hui, bloquées et récemment terminées.
GET/api/review
La synthèse du bilan hebdomadaire.
GET/api/stats
Tendance des tâches terminées, série en cours et répartition des tâches ouvertes par priorité et par projet.

Objectifs

GET/api/goals
Liste les objectifs.
POST/api/goals
Crée un objectif.
PATCH/api/goals/:id
Met à jour un objectif.
DELETE/api/goals/:id
Supprime un objectif.
POST/api/goals/:id/breakdown
Crée sous l’objectif une tâche de découpage confiée à Claude : c’est l’action « Proposer des étapes ».

Boîte de saisie

GET/api/capture
Les tâches proposées par les agents en attente de tri, avec les chiffres d’acceptation et de rejet. ?state=pending|accepted|dismissed|all.
POST/api/capture/sweep
Parcourt le calendrier à la recherche d’éléments à suggérer et les enregistre comme suggestions.
POST/api/capture/:id/accept
Transforme une suggestion en vraie tâche. La tâche démarre toujours avec validation (agent_ok: false).
POST/api/capture/:id/dismiss
Écarte une suggestion sans rien créer.

Nettoyage

GET/api/grooming
Le passage en revue des tâches oubliées : le travail ouvert resté sans nouvelles, avec les éléments pour décider. ?days= fixe le seuil, ?limit= le plafonne.
GET/api/grooming/proposals
Les propositions de nettoyage regroupées. ?state=open|resolved|all.
POST/api/grooming/items/:id/approve
Applique le sort proposé pour un élément.
POST/api/grooming/items/:id/dismiss
Refuse un élément et laisse la tâche telle quelle.

Autonomie et agents

GET/api/autonomy
Le registre d’autonomie : là où agent_ok a été mérité, par projet et par classe d’étiquette. Une lecture seule, qui n’accorde rien.
POST/api/autonomy/revoke
Reprend l’autorisation d’une classe et remet ses tâches derrière la validation.
GET/api/agents
La liste des agents : ce que chaque agent nommé a fait. ?days= fixe la période. Uniquement des compteurs et des horodatages.
GET/api/fleet
État de la flotte en direct : qui travaille sur quoi en ce moment.
GET/api/projects/:id/rejections
Les refus récents dans un projet : l’historique sur lequel s’appuie la baisse d’autonomie.
GET/api/decisions
Toutes les décisions ouvertes qu’un agent attend, sur l’ensemble du tableau.
POST/api/decisions/:id/answer
Répond à une décision en attente et débloque sa tâche.

Déclencheurs

GET/api/triggers
Toutes les demandes ouvertes de démarrage immédiat d’un agent (un clic sur Lancer maintenant ou une mention @claude) qui attendent encore une connexion.
DELETE/api/triggers/:id
Retire un déclencheur tant que personne ne l’a pris.
GET/api/trigger-webhook
Indique si un webhook sortant est défini pour trigger.created, ses derniers résultats de livraison et needs_rotation : true pour un webhook enregistré avant que les livraisons soient signées avec le secret lui-même, et qu’il faut remplacer pour obtenir un nouveau secret.
PUT/api/trigger-webhook
Définit ou remplace l’URL du webhook. Renvoie le secret de signature une seule fois, à la création. Chaque livraison porte X-Done-Signature : le HMAC-SHA256 en hexadécimal, calculé avec ce secret, de la valeur de X-Done-Timestamp, d’un point et du corps brut.
DELETE/api/trigger-webhook
Supprime le webhook.

Routine et budget

GET/api/routine
Les plafonds auxquels s’arrête une routine programmée.
PATCH/api/routine
Met à jour ces plafonds.
GET/api/routine/night
Les dépenses par rapport au budget de cette nuit. ?since= remplace la fenêtre de 12 heures par défaut.

Projets

GET/api/projects
Liste les projets.
POST/api/projects
Crée un projet.
PATCH/api/projects/:id
Met à jour un projet.
DELETE/api/projects/:id
Supprime un projet.

Espaces de travail et partage

GET/api/workspaces
Liste les espaces de travail dont vous faites partie.
POST/api/workspaces/:id/pause
Arrête un tableau : aucun agent n’y reçoit de travail jusqu’à sa reprise.
POST/api/workspaces/:id/resume
Relance un tableau arrêté. Réservé aux humains : il n’existe pas d’équivalent MCP.
GET/api/workspaces/:id/members
Liste les membres d’un espace de travail.
DELETE/api/workspaces/:id/members/:memberId
Retire un membre d’un espace de travail.
POST/api/invites
Invite quelqu’un dans un espace de travail ou dans un seul projet et lui envoie le lien par e-mail. Son adresse est requise.
POST/api/invites/accept
Utilise un jeton d’invitation pour rejoindre.

Exécutions des agents

GET/api/runs
Les exécutions d’agents récentes, avec les statistiques agrégées de statut, d’appels d’outils et de tokens.

Calendrier et synchronisation Google

GET/api/calendar
Les réglages de calendrier et de planification, et le jeton du flux ICS.
PUT/api/calendar
Met à jour les réglages de calendrier et de plages de planification.
POST/api/calendar/token
Génère le jeton du flux ICS auquel s’abonner.
DELETE/api/calendar/token
Révoque le jeton du flux ICS.
POST/api/calendar/oauth/start
Lance la connexion d’un Google Calendar : renvoie l’URL de consentement vers laquelle diriger le navigateur.
GET/api/calendar/writeback
Indique si Planifier ma journée écrit des blocs de concentration dans un calendrier appartenant à Done, et lequel.
POST/api/calendar/writeback/sync
Resynchronise tout de suite le calendrier d’écriture, sans attendre le passage nocturne.
DELETE/api/calendar/writeback
Désactive l’écriture et cesse de toucher à ce calendrier.
GET/api/google/accounts
Liste les comptes Google Calendar connectés.
POST/api/google/sync
Synchronise les créneaux occupés depuis Google Calendar.
DELETE/api/google/accounts/:id
Déconnecte un compte Google.
GET/api/calendar/events
Liste les événements de calendrier en cache (titres, participants) sur une période.
GET/api/calendar/matches
Les correspondances tâche↔événement suggérées, par tâche, par événement ou par période.
GET/api/tasks/:id/calendar-links
Liste les événements de calendrier liés à une tâche.
POST/api/tasks/:id/calendar-links
Lie une tâche à l’événement de calendrier qu’elle concerne.
DELETE/api/tasks/:id/calendar-links/:eventId
Supprime le lien entre une tâche et un événement de calendrier.

Notifications et temps réel

GET/api/notifications
Récupère les préférences de notification (résumé par e-mail).
PUT/api/notifications
Met à jour les préférences de notification.
GET/api/events
Flux d’événements envoyés par le serveur pour les changements de tâches et d’activité. Reconnectez-vous avec l’id de la dernière trame (Last-Event-ID ou ?cursor=) pour rejouer les changements de tâches et l’activité manqués.
GET/api/export
Exporte les tâches en CSV ou en Markdown.
PUT/api/view-prefs
Enregistre les préférences d’affichage (tri, regroupement, panneaux ouverts).
PUT/api/saved-views
Remplace les vues enregistrées du compte.
GET/api/widget
Un aperçu compact du tableau pour le widget de l’écran d’accueil. ?limit=, ?days= et un en-tête X-Client-Date pour la date du jour de l’appareil.

MCP

POST/mcp
Le point d’accès MCP distant : JSON-RPC sur Streamable HTTP. Voir Configuration MCP.