Documentación

Referencia de la API

Cada endpoint está limitado a la cuenta autenticada, y la API REST se autentica con la cookie de sesión que establece la app web. Los scripts y los agentes de IA usan el endpoint MCP.

Todas las solicitudes y respuestas son JSON. Cada ruta /api/* se autentica con la cookie de sesión que establece 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 token MCP no autentica la API REST. Un encabezado Authorization: Bearer <mcp-token> se acepta en una sola ruta — GET /api/events, para que un agente de IA pueda suscribirse a los cambios con la credencial que ya tiene. Cualquier otra ruta /api/* responde a un token bearer con un 401.

No es un descuido, es a propósito: así un token MCP filtrado no puede controlar toda la superficie REST de la cuenta. Los scripts y los agentes de IA deben usar POST /mcp, que es para lo que existe el token.

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

Autenticación y cuenta

POST/api/auth/signup
Crea una cuenta (correo + contraseña, más un código de referido `ref` opcional).
GET/api/referrals
Tu enlace de referido, quién se unió con él y tu avance hacia la próxima recompensa.
POST/api/auth/login
Inicia una sesión; establece una cookie. Con 2FA activado, devuelve un desafío — termina en /api/auth/2fa/verify.
POST/api/auth/magic-link
Envía por correo un enlace de inicio de sesión de un solo uso a una dirección.
POST/api/auth/magic-link/verify
Canjea un token de enlace mágico por una sesión real. No requiere contraseña.
POST/api/auth/2fa/verify
Paso 2 de un inicio de sesión con 2FA: canjea el desafío y un código por una sesión real. No requiere sesión.
POST/api/auth/logout
Cierra la sesión actual.
GET/api/auth/me
El usuario actual (incluido si el correo está confirmado) y si existe un token MCP.
GET/api/bootstrap
El usuario actual más todas las listas (tareas, proyectos, metas, dependencias, etiquetas, tarea↔etiquetas) en una sola solicitud — el sondeo del cliente web.
PATCH/api/auth/profile
Actualiza el perfil — nombre, zona horaria, avatar.
POST/api/auth/password/verify
Verifica la contraseña actual (paso 1 para cambiarla).
POST/api/auth/password
Establece una contraseña nueva — requiere un /password/verify reciente en esta sesión (paso 2).
POST/api/auth/forgot-password
Solicita un correo para restablecer la contraseña.
POST/api/auth/reset-password
Completa el restablecimiento con el token enviado por correo.
POST/api/auth/verify-email
Confirma una dirección con el token enviado por correo. No requiere sesión.
POST/api/auth/resend-verification
Reenvía el correo de confirmación a la cuenta con sesión iniciada.
POST/api/auth/mcp-token
Genera (o regenera) el token MCP de acceso completo de la cuenta.
DELETE/api/auth/mcp-token
Revoca el token MCP de acceso completo.
GET/api/mcp-tokens
Lista los tokens MCP de la cuenta (completo, solo lectura, de un solo proyecto).
POST/api/mcp-tokens
Emite un token MCP con alcance limitado (solo lectura o un proyecto).
DELETE/api/mcp-tokens/:id
Revoca un token MCP con alcance limitado.
GET/api/auth/2fa
Si la autenticación de dos factores está activada y cuántos códigos de recuperación quedan.
POST/api/auth/2fa/setup
Inicia el registro de TOTP — devuelve el secreto y la URI otpauth:// que codifica el QR. No activa la 2FA.
POST/api/auth/2fa/enable
Confirma el registro con un código vigente. Devuelve los códigos de recuperación — la única vez que existen en texto plano.
DELETE/api/auth/2fa
Desactiva la autenticación de dos factores.
POST/api/auth/2fa/recovery-codes
Emite un nuevo juego de códigos de recuperación e invalida los anteriores.
GET/api/auth/connections
Lista los clientes OAuth a los que les diste acceso.
DELETE/api/auth/connections/:clientId
Revoca el acceso de un cliente OAuth.
DELETE/api/auth/account
Elimina la cuenta y todo lo que contiene. Requiere la contraseña actual.

Tareas

GET/api/tasks
Lista tareas — filtra por estado, prioridad, proyecto, tarea principal; busca en título/notas.
POST/api/tasks
Crea una tarea.
POST/api/tasks/quick
Crea una tarea a partir de un texto de captura rápida sin procesar.
POST/api/tasks/import
Importa un CSV exportado de Todoist, TickTick, Asana, Trello o Notion (o un CSV genérico).
GET/api/tasks/:id
Obtiene una tarea.
PATCH/api/tasks/:id
Actualiza una tarea.
DELETE/api/tasks/:id
Elimina una tarea (en cascada a sus subtareas) — la mueve a la Papelera, no la borra definitivamente.
POST/api/tasks/bulk-assign
Asigna un conjunto de ids de tareas (hasta 200) a un usuario o a un agente de IA.
POST/api/tasks/bulk-delete
Mueve un conjunto de ids de tareas a la Papelera en una sola llamada.
POST/api/tasks/bulk-move
Mueve un conjunto de ids de tareas a un proyecto (o fuera de uno) en una sola llamada.
POST/api/tasks/:id/decompose
Divide una tarea en subtareas a partir de una lista de títulos.
POST/api/tasks/:id/approve
Aprueba una finalización que propuso un agente de IA (pending_approval → done).
POST/api/tasks/:id/reject
Rechaza una tarea en pending_approval, con comentarios opcionales (→ in_progress).
POST/api/tasks/:id/approve-plan
Aprueba un plan propuesto (plan_proposed → in_progress).
POST/api/tasks/:id/reject-plan
Rechaza un plan propuesto, con comentarios opcionales.
GET/api/tasks/:id/evidence
Lo que una aprobación te pide confiar: avance de los criterios, gasto frente al presupuesto, comprobantes, entregables y enlaces de trazas.
GET/api/tasks/:id/runs
Las ejecuciones de agentes registradas en una tarea.
GET/api/tasks/:id/decisions
Las preguntas que un agente de IA dejó pendientes en esta tarea.
POST/api/tasks/:id/pause
Detiene a todos los agentes que trabajan en esta tarea hasta que se reanude.
POST/api/tasks/:id/resume
Reanuda una tarea pausada. Solo para personas: no hay equivalente en MCP.
POST/api/resurface
Saca de espera las tareas cuya fecha para volver a mostrarse ya llegó.

Papelera

GET/api/trash
Lista las tareas eliminadas, de la más reciente a la más antigua.
POST/api/tasks/:id/restore
Restaura una tarea eliminada (y las subtareas que se eliminaron con ella).
DELETE/api/trash/:id
Elimina definitivamente una tarea de la papelera.
DELETE/api/trash
Vacía la papelera.

Etiquetas

GET/api/tags
Lista las etiquetas.
POST/api/tags
Crea una etiqueta.
DELETE/api/tags/:id
Elimina una etiqueta (se quita de todas las tareas que la tenían).
GET/api/task-tags
Lista todas las asociaciones tarea↔etiqueta de la cuenta.
POST/api/tasks/:id/tags
Aplica una etiqueta a una tarea.
DELETE/api/tasks/:id/tags/:tagId
Quita una etiqueta de una tarea.

Dependencias

GET/api/dependencies
Lista todas las relaciones de bloqueo de la cuenta.
GET/api/tasks/:id/dependencies
Lista lo que bloquea a una tarea.
POST/api/tasks/:id/dependencies
Agrega un bloqueo (con verificación de ciclos).
DELETE/api/tasks/:id/dependencies/:blockerId
Quita un bloqueo.

Actividad

GET/api/tasks/:id/comments
Lista el historial de actividad de una tarea (comentarios + historial de estados).
POST/api/tasks/:id/comments
Agrega un comentario, escrito por ti o por un agente de IA.
GET/api/activity
El panel de actividad de todo el tablero — lo que pasó en cada tarea que puedes ver, lo más reciente primero. ?limit= lo acota.
GET/api/claude-shipped
El feed del trabajo de los agentes: lo que Claude realmente entregó. ?days=1|7|30 define el periodo.

Resumen y revisión

GET/api/digest
Tareas vencidas, para hoy, estancadas y completadas recientemente.
GET/api/review
El resumen de la revisión semanal.
GET/api/stats
Tendencia de finalización, racha y desglose de tareas abiertas por prioridad/proyecto.

Metas

GET/api/goals
Lista las metas.
POST/api/goals
Crea una meta.
PATCH/api/goals/:id
Actualiza una meta.
DELETE/api/goals/:id
Elimina una meta.
POST/api/goals/:id/breakdown
Crea bajo la meta una tarea de desglose asignada a Claude — la acción “Proponer pasos”.

Bandeja de captura

GET/api/capture
Tareas propuestas por agentes que esperan clasificación, más las cifras de aceptadas/descartadas. ?state=pending|accepted|dismissed|all.
POST/api/capture/sweep
Revisa el calendario en busca de cosas que valga la pena sugerir y las registra como sugerencias.
POST/api/capture/:id/accept
Convierte una sugerencia en una tarea real. La tarea siempre empieza con aprobación requerida (agent_ok: false).
POST/api/capture/:id/dismiss
Descarta una sugerencia sin crear nada.

Depuración

GET/api/grooming
La revisión de pendientes estancados — trabajo abierto que quedó inactivo, con la evidencia para decidir qué hacer. ?days= define el umbral, ?limit= lo acota.
GET/api/grooming/proposals
Propuestas de depuración agrupadas. ?state=open|resolved|all.
POST/api/grooming/items/:id/approve
Aplica la disposición propuesta para un elemento.
POST/api/grooming/items/:id/dismiss
Rechaza un elemento y deja la tarea como está.

Autonomía y agentes

GET/api/autonomy
El registro de autonomía — dónde se ganó agent_ok, por proyecto y clase de etiqueta. Solo lectura; no otorga nada.
POST/api/autonomy/revoke
Retira el permiso de una clase y vuelve a poner sus tareas detrás de la aprobación.
GET/api/agents
La lista de agentes — lo que hizo cada agente con nombre. ?days= define el periodo. Solo conteos y marcas de tiempo.
GET/api/fleet
Estado en vivo de la flota: quién está trabajando en qué ahora mismo.
GET/api/projects/:id/rejections
Rechazos recientes en un proyecto — el registro del que se alimenta la pérdida de autonomía.
GET/api/decisions
Todas las decisiones abiertas que esperan los agentes, en todo el tablero.
POST/api/decisions/:id/answer
Responde una decisión pendiente y desbloquea su tarea.

Disparadores

GET/api/triggers
Cada solicitud abierta para que un agente de IA empiece ya — de un clic en Ejecutar ahora o una mención a @claude — que sigue esperando una conexión.
DELETE/api/triggers/:id
Retira un disparador mientras nadie lo haya tomado.
GET/api/trigger-webhook
Si hay un webhook saliente configurado para trigger.created, y sus resultados de entrega recientes.
PUT/api/trigger-webhook
Establece o reemplaza la URL del webhook. Devuelve el secreto de firma una sola vez, al crearlo.
DELETE/api/trigger-webhook
Elimina el webhook.

Rutina y presupuesto

GET/api/routine
Los límites en los que se detiene una rutina programada.
PATCH/api/routine
Actualiza esos límites.
GET/api/routine/night
Gasto frente al presupuesto de esta noche. ?since= reemplaza el periodo predeterminado de 12 horas.

Proyectos

GET/api/projects
Lista los proyectos.
POST/api/projects
Crea un proyecto.
PATCH/api/projects/:id
Actualiza un proyecto.
DELETE/api/projects/:id
Elimina un proyecto.

Espacios de trabajo y uso compartido

GET/api/workspaces
Lista los espacios de trabajo a los que perteneces.
POST/api/workspaces/:id/pause
Detiene un tablero — ningún agente de IA recibe trabajo de él hasta que se reanude.
POST/api/workspaces/:id/resume
Reanuda un tablero detenido. Solo para personas: no hay equivalente en MCP.
GET/api/workspaces/:id/members
Lista los miembros de un espacio de trabajo.
DELETE/api/workspaces/:id/members/:memberId
Quita a un miembro de un espacio de trabajo.
POST/api/invites
Crea una invitación a un espacio de trabajo o a un solo proyecto.
POST/api/invites/accept
Canjea un token de invitación para unirte.

Ejecuciones de agentes

GET/api/runs
Ejecuciones recientes de agentes, más estadísticas agregadas de estado/llamadas a herramientas/tokens.

Calendario y sincronización con Google

GET/api/calendar
Configuración de calendario/programación y el token del feed ICS.
PUT/api/calendar
Actualiza la configuración del calendario y de la ventana de programación.
POST/api/calendar/token
Genera el token del feed ICS al que puedes suscribirte.
DELETE/api/calendar/token
Revoca el token del feed ICS.
POST/api/calendar/oauth/start
Empieza a conectar un Google Calendar — devuelve la URL de consentimiento a la que debes enviar el navegador.
GET/api/calendar/writeback
Si Planear mi día escribe bloques de enfoque en un calendario propiedad de Done, y en cuál.
POST/api/calendar/writeback/sync
Sincroniza ahora el calendario de escritura, sin esperar la revisión nocturna.
DELETE/api/calendar/writeback
Desactiva la escritura en el calendario y deja de modificar ese calendario.
GET/api/google/accounts
Lista las cuentas de Google Calendar conectadas.
POST/api/google/sync
Sincroniza los horarios ocupados desde Google Calendar.
DELETE/api/google/accounts/:id
Desconecta una cuenta de Google.
GET/api/calendar/events
Lista los eventos de calendario en caché (títulos, personas) en un rango de fechas.
GET/api/calendar/matches
Coincidencias sugeridas tarea↔evento, por tarea, por evento o por rango de fechas.
GET/api/tasks/:id/calendar-links
Lista los eventos de calendario vinculados a una tarea.
POST/api/tasks/:id/calendar-links
Vincula una tarea con el evento de calendario del que trata.
DELETE/api/tasks/:id/calendar-links/:eventId
Desvincula una tarea de un evento de calendario.

Notificaciones y tiempo real

GET/api/notifications
Obtiene las preferencias de notificación (resumen por correo).
PUT/api/notifications
Actualiza las preferencias de notificación.
GET/api/events
Flujo server-sent de cambios en tareas y actividad.
GET/api/export
Exporta tareas como CSV o Markdown.
PUT/api/view-prefs
Guarda las preferencias de vista (orden, agrupación, qué paneles están abiertos).
PUT/api/saved-views
Reemplaza las vistas guardadas de la cuenta.
GET/api/widget
Una instantánea compacta del tablero para el widget de la pantalla de inicio. ?limit=, ?days= y un encabezado X-Client-Date para la fecha de hoy del propio dispositivo.

MCP

POST/mcp
El endpoint MCP remoto — JSON-RPC sobre Streamable HTTP. Consulta la configuración de MCP.