Документация

Справочник API

Каждый эндпоинт ограничен авторизованным аккаунтом, а REST API авторизуется по сессионной cookie, которую устанавливает веб-приложение. Скриптам и агентам лучше использовать MCP-эндпоинт.

Все запросы и ответы — в формате JSON. Каждый маршрут /api/* авторизуется по сессионной cookie, которую устанавливает 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

MCP-токен не авторизует запросы к REST API. Заголовок Authorization: Bearer <mcp-token> принимается ровно на одном маршруте — GET /api/events, чтобы агент мог подписаться на изменения с теми учётными данными, которые у него уже есть. Любой другой маршрут /api/* отвечает на bearer-токен кодом 401.

Это сделано намеренно, а не по недосмотру: утёкший MCP-токен не даст управлять всем REST API аккаунта. Скриптам и агентам следует обращаться к POST /mcp — для этого токен и предназначен.

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

Аутентификация и аккаунт

POST/api/auth/signup
Создать аккаунт (почта и пароль, плюс необязательный реферальный код `ref`).
GET/api/referrals
Ваша реферальная ссылка, кто по ней зарегистрировался и прогресс до следующей награды.
POST/api/auth/login
Начать сессию; устанавливает cookie. Если включена 2FA, вместо этого возвращает challenge — завершите вход через /api/auth/2fa/verify.
POST/api/auth/magic-link
Отправить на адрес письмо с одноразовой ссылкой для входа.
POST/api/auth/magic-link/verify
Обменять токен из ссылки для входа на настоящую сессию. Пароль не нужен.
POST/api/auth/2fa/verify
Шаг 2 входа с 2FA: обменять challenge и код на настоящую сессию. Сессия не требуется.
POST/api/auth/logout
Завершить текущую сессию.
GET/api/auth/me
Текущий пользователь (включая то, подтверждена ли почта) и наличие MCP-токена.
GET/api/bootstrap
Текущий пользователь и все списки (задачи, проекты, цели, зависимости, теги, связи задача↔тег) одним запросом — его опрашивает веб-клиент.
PATCH/api/auth/profile
Обновить профиль — имя, часовой пояс, аватар.
POST/api/auth/password/verify
Проверить текущий пароль (шаг 1 смены пароля).
POST/api/auth/password
Задать новый пароль — требует недавнего вызова /password/verify в этой сессии (шаг 2).
POST/api/auth/forgot-password
Запросить письмо для сброса пароля.
POST/api/auth/reset-password
Завершить сброс с токеном из письма.
POST/api/auth/verify-email
Подтвердить адрес с токеном из письма. Сессия не требуется.
POST/api/auth/resend-verification
Повторно отправить письмо с подтверждением на адрес текущего аккаунта.
POST/api/auth/mcp-token
Создать (или перевыпустить) MCP-токен аккаунта с полным доступом.
DELETE/api/auth/mcp-token
Отозвать MCP-токен с полным доступом.
GET/api/mcp-tokens
Список MCP-токенов аккаунта (полный доступ, только чтение, один проект).
POST/api/mcp-tokens
Выпустить ограниченный MCP-токен (только чтение или один проект).
DELETE/api/mcp-tokens/:id
Отозвать один ограниченный MCP-токен.
GET/api/auth/2fa
Включена ли двухфакторная аутентификация и сколько осталось кодов восстановления.
POST/api/auth/2fa/setup
Начать настройку TOTP — возвращает секрет и URI otpauth://, зашифрованный в QR-коде. Саму 2FA не включает.
POST/api/auth/2fa/enable
Подтвердить настройку действующим кодом. Возвращает коды восстановления — единственный раз, когда они существуют в открытом виде.
DELETE/api/auth/2fa
Отключить двухфакторную аутентификацию.
POST/api/auth/2fa/recovery-codes
Выпустить новый набор кодов восстановления; старые перестают действовать.
GET/api/auth/connections
Список OAuth-клиентов, которым вы дали доступ.
DELETE/api/auth/connections/:clientId
Отозвать доступ одного OAuth-клиента.
DELETE/api/auth/account
Удалить аккаунт и всё, что в нём есть. Требует текущий пароль.

Задачи

GET/api/tasks
Список задач — фильтр по статусу, приоритету, проекту, родителю; поиск по названию и заметкам.
POST/api/tasks
Создать задачу.
POST/api/tasks/quick
Создать задачу из необработанной строки быстрого ввода.
POST/api/tasks/import
Импортировать CSV-экспорт из Todoist, TickTick, Asana, Trello или Notion (или обычный CSV).
GET/api/tasks/:id
Получить одну задачу.
PATCH/api/tasks/:id
Обновить задачу.
DELETE/api/tasks/:id
Удалить задачу (вместе с подзадачами) — она перемещается в Корзину, а не удаляется безвозвратно.
POST/api/tasks/bulk-assign
Назначить набор задач по id (до 200) пользователю или ИИ-агенту.
POST/api/tasks/bulk-delete
Переместить набор задач по id в Корзину одним вызовом.
POST/api/tasks/bulk-move
Переместить набор задач по id в проект (или убрать из проекта) одним вызовом.
POST/api/tasks/:id/decompose
Разбить задачу на подзадачи по списку названий.
POST/api/tasks/:id/approve
Одобрить завершение, предложенное агентом (pending_approval → done).
POST/api/tasks/:id/reject
Отклонить задачу в статусе pending_approval, при желании с комментарием (→ in_progress).
POST/api/tasks/:id/approve-plan
Одобрить предложенный план (plan_proposed → in_progress).
POST/api/tasks/:id/reject-plan
Отклонить предложенный план, при желании с комментарием.
GET/api/tasks/:id/evidence
То, чему предлагается доверять при одобрении: прогресс по критериям, расход относительно бюджета, квитанции, результаты и ссылки на трассировки.
GET/api/tasks/:id/runs
Запуски агентов, записанные для одной задачи.
GET/api/tasks/:id/decisions
Вопросы, которые агент оставил в этой задаче.
POST/api/tasks/:id/pause
Остановить всех агентов, работающих с этой задачей, пока её не возобновят.
POST/api/tasks/:id/resume
Возобновить приостановленную задачу. Только для человека: аналога в MCP нет.
POST/api/resurface
Вернуть в работу отложенные задачи, у которых наступила дата возврата.

Корзина

GET/api/trash
Список удалённых задач, начиная с последних.
POST/api/tasks/:id/restore
Восстановить удалённую задачу (и подзадачи, удалённые вместе с ней).
DELETE/api/trash/:id
Безвозвратно удалить одну задачу из Корзины.
DELETE/api/trash
Очистить Корзину.

Теги

GET/api/tags
Список тегов.
POST/api/tags
Создать тег.
DELETE/api/tags/:id
Удалить тег (он снимается со всех задач, где был).
GET/api/task-tags
Список всех связей задача↔тег в аккаунте.
POST/api/tasks/:id/tags
Добавить тег к задаче.
DELETE/api/tasks/:id/tags/:tagId
Снять тег с задачи.

Зависимости

GET/api/dependencies
Список всех связей «заблокирована задачей» в аккаунте.
GET/api/tasks/:id/dependencies
Список задач, блокирующих данную.
POST/api/tasks/:id/dependencies
Добавить блокирующую задачу (с проверкой на циклы).
DELETE/api/tasks/:id/dependencies/:blockerId
Убрать блокирующую задачу.

Активность

GET/api/tasks/:id/comments
Лента активности задачи (комментарии и история статусов).
POST/api/tasks/:id/comments
Добавить комментарий от вашего имени или от имени ИИ-агента.
GET/api/activity
Лента активности всей доски — что происходило во всех доступных вам задачах, начиная с последнего. ?limit= ограничивает число записей.
GET/api/claude-shipped
Лента работы агентов: что Claude действительно сделал. ?days=1|7|30 задаёт период.

Сводка и обзор

GET/api/digest
Просроченные, со сроком сегодня, застрявшие и недавно выполненные задачи.
GET/api/review
Сводные данные еженедельного обзора.
GET/api/stats
Динамика выполнения, серия и разбивка открытых задач по приоритету и проекту.

Цели

GET/api/goals
Список целей.
POST/api/goals
Создать цель.
PATCH/api/goals/:id
Обновить цель.
DELETE/api/goals/:id
Удалить цель.
POST/api/goals/:id/breakdown
Создать под целью задачу на разбивку, назначенную Claude, — действие «Предложить шаги».

Входящие предложения

GET/api/capture
Задачи, предложенные агентами и ожидающие разбора, плюс показатели принятых и отклонённых. ?state=pending|accepted|dismissed|all.
POST/api/capture/sweep
Просмотреть календарь в поисках того, что стоит предложить, и сохранить это как предложения.
POST/api/capture/:id/accept
Превратить предложение в настоящую задачу. Задача всегда создаётся с обязательным одобрением (agent_ok: false).
POST/api/capture/:id/dismiss
Отклонить предложение, ничего не создавая.

Наведение порядка

GET/api/grooming
Поиск залежавшегося — открытая работа, по которой давно нет движения, с данными, чтобы решить, что с ней делать. ?days= задаёт порог, ?limit= ограничивает число записей.
GET/api/grooming/proposals
Сгруппированные предложения по наведению порядка. ?state=open|resolved|all.
POST/api/grooming/items/:id/approve
Применить предложенное решение по одному пункту.
POST/api/grooming/items/:id/dismiss
Отклонить один пункт, оставив задачу как есть.

Автономность и агенты

GET/api/autonomy
Журнал автономности — где заслужен agent_ok, по проектам и классам тегов. Только чтение; ничего не выдаёт.
POST/api/autonomy/revoke
Отозвать разрешение у класса — его задачи снова будут требовать одобрения.
GET/api/agents
Список агентов — что сделал каждый именованный агент. ?days= задаёт период. Только счётчики и отметки времени.
GET/api/fleet
Состояние агентов в реальном времени: кто над чем работает прямо сейчас.
GET/api/projects/:id/rejections
Недавние отклонения в одном проекте — записи, на которые опирается снижение автономности.
GET/api/decisions
Все открытые решения, которых ждут агенты, по всей доске.
POST/api/decisions/:id/answer
Ответить на отложенный вопрос и разблокировать задачу.

Триггеры

GET/api/triggers
Все открытые запросы на немедленный запуск агента — по нажатию «Запустить сейчас» или упоминанию @claude, — которые ещё ждут подключения.
DELETE/api/triggers/:id
Отозвать триггер, пока его никто не взял.
GET/api/trigger-webhook
Настроен ли исходящий вебхук для trigger.created, результаты последних доставок и needs_rotation — true для вебхука, зарегистрированного до того, как доставки стали подписываться самим секретом; его следует заменить, чтобы получить новый секрет.
PUT/api/trigger-webhook
Задать или заменить URL вебхука. Секрет для подписи возвращается один раз, при создании. Каждая доставка содержит X-Done-Signature: HMAC-SHA256 в hex с этим секретом в качестве ключа от значения X-Done-Timestamp, точки и необработанного тела.
DELETE/api/trigger-webhook
Удалить вебхук.

Рутина и бюджет

GET/api/routine
Лимиты, на которых останавливается рутина по расписанию.
PATCH/api/routine
Обновить эти лимиты.
GET/api/routine/night
Расход относительно бюджета на эту ночь. ?since= переопределяет окно по умолчанию в 12 часов.

Проекты

GET/api/projects
Список проектов.
POST/api/projects
Создать проект.
PATCH/api/projects/:id
Обновить проект.
DELETE/api/projects/:id
Удалить проект.

Рабочие пространства и общий доступ

GET/api/workspaces
Список рабочих пространств, в которых вы состоите.
POST/api/workspaces/:id/pause
Остановить доску — агенты не получают с неё работу, пока её не возобновят.
POST/api/workspaces/:id/resume
Возобновить остановленную доску. Только для человека: аналога в MCP нет.
GET/api/workspaces/:id/members
Список участников рабочего пространства.
DELETE/api/workspaces/:id/members/:memberId
Удалить участника из рабочего пространства.
POST/api/invites
Пригласить человека в рабочее пространство или отдельный проект — ему придёт письмо со ссылкой. Требуется его адрес.
POST/api/invites/accept
Использовать токен приглашения, чтобы присоединиться.

Запуски агентов

GET/api/runs
Недавние запуски агентов и сводная статистика по статусам, вызовам инструментов и токенам.

Календарь и синхронизация с Google

GET/api/calendar
Настройки календаря и планирования и токен ICS-ленты.
PUT/api/calendar
Обновить настройки календаря и окна планирования.
POST/api/calendar/token
Создать токен ICS-ленты для подписки.
DELETE/api/calendar/token
Отозвать токен ICS-ленты.
POST/api/calendar/oauth/start
Начать подключение Google Calendar — возвращает URL страницы согласия, на которую нужно отправить браузер.
GET/api/calendar/writeback
Записывает ли «Спланировать день» блоки фокусной работы в календарь, который ведёт Done, и в какой именно.
POST/api/calendar/writeback/sync
Сверить календарь обратной записи сейчас, не дожидаясь ночной сверки.
DELETE/api/calendar/writeback
Отключить обратную запись и больше не трогать этот календарь.
GET/api/google/accounts
Список подключённых аккаунтов Google Calendar.
POST/api/google/sync
Синхронизировать занятое время из Google Calendar.
DELETE/api/google/accounts/:id
Отключить аккаунт Google.
GET/api/calendar/events
Список кешированных событий календаря (названия, участники) за период.
GET/api/calendar/matches
Предлагаемые соответствия задача↔событие — по задаче, по событию или за период.
GET/api/tasks/:id/calendar-links
Список событий календаря, связанных с задачей.
POST/api/tasks/:id/calendar-links
Связать задачу с событием календаря, к которому она относится.
DELETE/api/tasks/:id/calendar-links/:eventId
Отвязать задачу от события календаря.

Уведомления и обновления в реальном времени

GET/api/notifications
Получить настройки уведомлений (сводка на почту).
PUT/api/notifications
Обновить настройки уведомлений.
GET/api/events
Поток server-sent events с изменениями задач и активности. Переподключайтесь с id последнего кадра (Last-Event-ID или ?cursor=), чтобы получить пропущенные изменения задач и активность.
GET/api/export
Экспортировать задачи в CSV или Markdown.
PUT/api/view-prefs
Сохранить настройки отображения (сортировка, группировка, открытые панели).
PUT/api/saved-views
Заменить сохранённые виды аккаунта.
GET/api/widget
Компактный снимок доски для виджета на домашнем экране. ?limit=, ?days= и заголовок X-Client-Date с «сегодня» по часам устройства.

MCP

POST/mcp
Удалённый MCP-эндпоинт — JSON-RPC поверх Streamable HTTP. См. «Настройка MCP».