{"ok":true,"data":{"name":"dclub-tasks v2 API","version":"1.0.0","description":"FreeLang SSR 할 일 관리 — Claude Code-friendly JSON API","schema_url":"/api/schema","endpoints":[{"method":"GET","path":"/api","desc":"API 인덱스 (이 응답)"},{"method":"GET","path":"/api/health","desc":"헬스체크"},{"method":"GET","path":"/api/schema","desc":"Task JSON 스키마"},{"method":"GET","path":"/api/tasks","desc":"목록 (?status=, ?q=, ?tag=, ?worker=, ?limit=, ?offset=)"},{"method":"GET","path":"/api/mine?worker=X","desc":"내가 잡은 active task (done 제외)"},{"method":"POST","path":"/api/tasks","desc":"생성 (JSON body)"},{"method":"GET","path":"/api/tasks/:id","desc":"단일 조회"},{"method":"PATCH","path":"/api/tasks/:id","desc":"부분 수정 (JSON body)"},{"method":"DELETE","path":"/api/tasks/:id","desc":"삭제"},{"method":"GET","path":"/api/stats","desc":"통계 (status별 카운트)"},{"method":"GET","path":"/api/upcoming?days=7","desc":"다가오는 마감"},{"method":"GET","path":"/api/overdue","desc":"마감 지남"},{"method":"GET","path":"/api/recent?n=5","desc":"최근 추가"},{"method":"POST","path":"/api/tasks/bulk","desc":"여러 개 한 번에 생성"},{"method":"POST","path":"/api/plan","desc":"자연어 plan → tasks (Claude Code용)"},{"method":"GET","path":"/api/queue/next","desc":"다음 작업할 todo (priority 정렬)"},{"method":"PATCH","path":"/api/tasks/:id/start","desc":"시작 (status: doing)"},{"method":"PATCH","path":"/api/tasks/:id/done","desc":"완료 (status: done)"},{"method":"POST","path":"/api/queue/claim","desc":"원자적 클레임 (다중 클로드용) ?worker=claude-1"},{"method":"POST","path":"/api/tasks/:id/log","desc":"진행 로그 추가 {worker,message,files}"},{"method":"PATCH","path":"/api/tasks/:id/handoff","desc":"인계 {worker, next_action, artifacts, message, to_worker?, purpose?, tried?, done?} — purpose/tried/done은 v13 최소 상태 벡터"},{"method":"GET","path":"/api/tasks/:id/context","desc":"task + 모든 logs + handoff 정보 (이어받기용)"},{"method":"POST","path":"/api/tasks/:id/claim","desc":"특정 task 직접 claim (Lazy 패턴 — digest 본 후 1개씩)"},{"method":"GET","path":"/api/projects/:id/digest","desc":"프로젝트 요약 (logs 미포함, Avalanche 방어)"},{"method":"GET","path":"/api/rooms","desc":"전체 방(클로드별 task 그룹) 조회"},{"method":"GET","path":"/api/rooms/:worker","desc":"특정 클로드 방 (mine + incoming transfer)"},{"method":"POST","path":"/api/tasks/:id/transfer/reject","desc":"받기로 지정된 인계 거절 (free로 풀어줌)"},{"method":"POST","path":"/api/projects","desc":"프로젝트 생성"},{"method":"PATCH","path":"/api/projects/:id/complete","desc":"프로젝트 완료 + 모든 task 일괄 숨김"},{"method":"PATCH","path":"/api/projects/:id/handoff","desc":"프로젝트 전체 일괄 인계 (모든 active task transfer_to=대상)"},{"method":"PATCH","path":"/api/projects/:id/handoff/reject","desc":"프로젝트 전체 인계 거절 (대상만)"}],"response_format":{"success":{"ok":true,"data":"...","meta":"optional"},"error":{"ok":false,"error":{"code":"...","message":"..."}}},"examples":{"create":"curl -X POST https://tasks.dclub.kr/api/tasks -H 'Content-Type: application/json' -d '{\"title\":\"...\"}'","list":"curl https://tasks.dclub.kr/api/tasks?status=todo&limit=10","update":"curl -X PATCH https://tasks.dclub.kr/api/tasks/:id -H 'Content-Type: application/json' -d '{\"status\":\"done\"}'"}}}