문서
API 레퍼런스
모든 엔드포인트는 인증된 계정 범위로 제한되며, REST API는 웹 앱이 설정하는 세션 쿠키로 인증해요. 스크립트와 에이전트는 대신 MCP 엔드포인트를 사용해요.
모든 요청과 응답은 JSON이에요. 모든 /api/* 경로는 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.txtMCP 토큰으로는 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세션을 시작하고 쿠키를 설정해요. 2FA가 켜져 있으면 대신 챌린지를 반환하며, /api/auth/2fa/verify에서 마무리해요.
POST
/api/auth/magic-link지정한 주소로 일회용 로그인 링크를 이메일로 보내요.
POST
/api/auth/magic-link/verify매직 링크 토큰을 실제 세션으로 교환해요. 비밀번호는 필요 없어요.
POST
/api/auth/2fa/verify2FA 로그인의 2단계: 챌린지와 코드를 실제 세션으로 교환해요. 세션은 필요 없어요.
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/2fa2단계 인증 사용 여부와 남은 복구 코드 수.
POST
/api/auth/2fa/setupTOTP 등록을 시작해요. 시크릿과 QR에 담기는 otpauth:// URI를 반환해요. 2FA를 켜지는 않아요.
POST
/api/auth/2fa/enable실제 코드로 등록을 확정해요. 복구 코드를 반환하며, 평문으로 볼 수 있는 유일한 순간이에요.
DELETE
/api/auth/2fa2단계 인증을 꺼요.
POST
/api/auth/2fa/recovery-codes복구 코드를 새로 발급하고 기존 코드는 무효화해요.
GET
/api/auth/connections액세스를 허용한 OAuth 클라이언트 목록을 가져와요.
DELETE
/api/auth/connections/:clientIdOAuth 클라이언트 하나의 액세스를 폐기해요.
DELETE
/api/auth/account계정과 그 안의 모든 것을 삭제해요. 현재 비밀번호가 필요해요.
작업
GET
/api/tasks작업 목록을 가져와요. status, priority, project, parent로 필터링하고 제목/메모를 검색할 수 있어요.
POST
/api/tasks작업을 만들어요.
POST
/api/tasks/quick빠른 추가 문자열 그대로 작업을 만들어요.
POST
/api/tasks/importTodoist, TickTick, Asana, Trello, Notion에서 내보낸 CSV(또는 일반 CSV)를 가져와요.
GET
/api/tasks/:id작업 하나를 가져와요.
PATCH
/api/tasks/:id작업을 수정해요.
DELETE
/api/tasks/:id작업을 삭제해요(하위 작업도 함께). 영구 삭제가 아니라 휴지통으로 이동해요.
POST
/api/tasks/bulk-assign여러 작업 id(최대 200개)를 사용자 또는 AI 에이전트에게 배정해요.
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/rejectpending_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나 또는 AI 에이전트 명의로 댓글을 추가해요.
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-webhooktrigger.created용 아웃바운드 웹훅 설정 여부, 최근 전송 결과, needs_rotation을 반환해요. needs_rotation은 전송을 시크릿 자체로 서명하기 전에 등록된 웹훅이면 true이며, 새 시크릿을 받으려면 웹훅을 교체해야 해요.
PUT
/api/trigger-webhook웹훅 URL을 설정하거나 교체해요. 서명 시크릿은 생성 시 한 번만 반환돼요. 각 전송에는 X-Done-Signature가 포함돼요. X-Done-Timestamp 값, 마침표, 원본 본문을 이어 붙인 값을 해당 시크릿으로 HMAC-SHA256 처리한 16진수 값이에요.
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/tokenICS 피드 토큰을 폐기해요.
POST
/api/calendar/oauth/startGoogle 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/syncGoogle Calendar에서 일정이 있는 시간대를 동기화해요.
DELETE
/api/google/accounts/:idGoogle 계정 연결을 해제해요.
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작업 및 활동 변경 사항을 전달하는 서버 전송 스트림이에요. 마지막 프레임의 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 엔드포인트예요. Streamable HTTP 기반 JSON-RPC를 사용해요. MCP 설정을 참고하세요.