@mind-your-now/myn 0.8.1 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,63 +2,79 @@
2
2
 
3
3
  Agent memory for storing and retrieving contextual information about users.
4
4
 
5
- ## Base Path
6
-
7
- `/api/v1/customers/memories`
8
-
9
5
  ## Endpoints
10
6
 
11
7
  ### Remember (Store Memory)
12
8
 
13
9
  ```
14
- POST /api/v1/customers/memories
10
+ POST /api/v1/agent/memories
15
11
  ```
16
12
 
17
13
  **Body:**
18
14
 
19
15
  | Field | Type | Required | Description |
20
16
  |-------|------|----------|-------------|
21
- | `content` | string | Yes | Memory content to store |
22
- | `category` | string | No | `user_preference`, `work_context`, `personal_info`, `decision`, `insight`, `routine` |
23
- | `tags` | string[] | No | Tags for categorization |
24
- | `importance` | string | No | `low`, `medium`, `high`, `critical` |
25
- | `expiresAt` | datetime | No | Optional expiration date (ISO 8601) |
26
-
27
- **Response:** `{ memoryId, stored, createdAt }`
17
+ | `content` | string | Yes | Memory content to store (max 500 chars) |
18
+ | `type` | string | No | `PREFERENCE`, `PATTERN`, `STYLE`, `MYN_BEHAVIOR`, `PERSONAL`, `RELATIONSHIP` |
19
+
20
+ **Note:** The tool accepts `category` as the input parameter name, but sends it as the `type` field in the request body.
21
+
22
+ **Response:**
23
+
24
+ ```json
25
+ {
26
+ "id": "uuid",
27
+ "type": "PREFERENCE",
28
+ "content": "User prefers morning meetings before 10am",
29
+ "confidence": 0.95,
30
+ "duplicate": false,
31
+ "message": "Memory stored successfully"
32
+ }
33
+ ```
28
34
 
29
35
  ```bash
30
- curl -X POST "$MYN_API_URL/api/v1/customers/memories" \
36
+ curl -X POST "$MYN_API_URL/api/v1/agent/memories" \
31
37
  -H "X-API-KEY: $MYN_API_KEY" \
32
38
  -H "Content-Type: application/json" \
33
39
  -d '{
34
40
  "content": "User prefers morning meetings before 10am",
35
- "category": "user_preference",
36
- "tags": ["meetings", "preferences"],
37
- "importance": "medium"
41
+ "type": "PREFERENCE"
38
42
  }'
39
43
  ```
40
44
 
41
45
  ### Recall (Get Memories)
42
46
 
43
47
  ```
44
- GET /api/v1/customers/memories
45
- GET /api/v1/customers/memories/{memoryId}
48
+ GET /api/v1/customers/memories?limit=50
46
49
  ```
47
50
 
48
- Get recent memories (default limit 10) or a specific memory by ID.
51
+ Returns all memories (up to 50). Optionally filter client-side by `memoryId`.
49
52
 
50
- **Response (specific):** `{ memoryId, content, category, tags[], importance, createdAt, accessedAt, accessCount, expiresAt? }`
53
+ **Query Parameters:**
51
54
 
52
- **Response (list):** `{ memories[{ memoryId, content, category, tags[], importance, createdAt, accessedAt? }] }`
55
+ | Parameter | Type | Description |
56
+ |-----------|------|-------------|
57
+ | `limit` | number | Max results (default: 50) |
58
+
59
+ **Response:** Array of memory objects:
60
+
61
+ ```json
62
+ [
63
+ {
64
+ "memoryId": "uuid",
65
+ "content": "User prefers morning meetings",
66
+ "category": "PREFERENCE",
67
+ "tags": [],
68
+ "importance": "medium",
69
+ "createdAt": "2026-03-01T00:00:00Z",
70
+ "accessedAt": "2026-03-09T10:00:00Z"
71
+ }
72
+ ]
73
+ ```
53
74
 
54
75
  ```bash
55
- # Get recent memories
56
- curl -H "X-API-KEY: $MYN_API_KEY" \
57
- "$MYN_API_URL/api/v1/customers/memories?limit=10"
58
-
59
- # Get specific memory
60
76
  curl -H "X-API-KEY: $MYN_API_KEY" \
61
- "$MYN_API_URL/api/v1/customers/memories/aabb0000-0000-0000-0000-000000000001"
77
+ "$MYN_API_URL/api/v1/customers/memories?limit=50"
62
78
  ```
63
79
 
64
80
  ### Forget (Delete Memory)
@@ -68,28 +84,44 @@ DELETE /api/v1/customers/memories/{memoryId}
68
84
  ```
69
85
 
70
86
  ```bash
71
- curl -X DELETE "$MYN_API_URL/api/v1/customers/memories/aabb0000-0000-0000-0000-000000000001" \
87
+ curl -X DELETE "$MYN_API_URL/api/v1/customers/memories/MEMORY_ID" \
72
88
  -H "X-API-KEY: $MYN_API_KEY"
73
89
  ```
74
90
 
75
91
  ### Search Memories
76
92
 
77
93
  ```
78
- GET /api/v1/customers/memories/search
94
+ GET /api/v1/agent/memories/search
79
95
  ```
80
96
 
97
+ Semantic search across agent memories.
98
+
81
99
  **Query Parameters:**
82
100
 
83
101
  | Parameter | Type | Description |
84
102
  |-----------|------|-------------|
85
- | `q` | string | Search query |
86
- | `category` | string | Filter by category |
87
- | `tag` | string | Filter by tag (repeatable for multiple tags) |
103
+ | `query` | string | **Required.** Search query |
88
104
  | `limit` | number | Max results (default: 10) |
89
105
 
90
- **Response:** `{ results[{ memoryId, content, category, tags[], importance, relevance, createdAt }], total }`
106
+ **Response:**
107
+
108
+ ```json
109
+ {
110
+ "results": [
111
+ {
112
+ "id": "uuid",
113
+ "type": "PREFERENCE",
114
+ "content": "User prefers morning meetings",
115
+ "confidence": 0.95,
116
+ "createdAt": "2026-03-01T00:00:00Z",
117
+ "topics": ["meetings", "scheduling"]
118
+ }
119
+ ],
120
+ "total": 1
121
+ }
122
+ ```
91
123
 
92
124
  ```bash
93
125
  curl -H "X-API-KEY: $MYN_API_KEY" \
94
- "$MYN_API_URL/api/v1/customers/memories/search?q=meeting+preference&category=user_preference&limit=5"
126
+ "$MYN_API_URL/api/v1/agent/memories/search?query=meeting+preference&limit=5"
95
127
  ```
@@ -4,188 +4,91 @@ AI-powered planning, auto-scheduling, and rescheduling.
4
4
 
5
5
  ## Base Path
6
6
 
7
- `/api/schedules`
7
+ `/planning`
8
+
9
+ ## Actions
10
+
11
+ The `myn_planning` tool supports these actions: `plan`, `schedule_all`, `reschedule`.
8
12
 
9
13
  ## Endpoints
10
14
 
11
- ### Create Plan
15
+ ### Plan (Trigger AI Planning)
12
16
 
13
17
  ```
14
- POST /api/schedules/plan
18
+ GET /planning/plan
15
19
  ```
16
20
 
17
- Generate an AI plan for a goal or set of tasks.
18
-
19
- **Body:**
20
-
21
- | Field | Type | Required | Description |
22
- |-------|------|----------|-------------|
23
- | `goal` | string | Yes* | What you want to accomplish |
24
- | `tasks` | array | Yes* | Tasks to plan (alternative to goal) |
25
- | `tasks[].title` | string | Yes | Task title |
26
- | `tasks[].estimatedDuration` | number | No | Duration in minutes |
27
- | `tasks[].dependsOn` | string[] | No | Task titles this depends on |
28
- | `tasks[].fixedTime` | datetime | No | Fixed time slot |
29
- | `constraints` | object | No | Planning constraints |
30
- | `constraints.availableHours` | number | No | Available hours |
31
- | `constraints.preferredTimes` | string[] | No | Preferred time slots |
32
- | `constraints.avoidTimes` | string[] | No | Times to avoid |
33
- | `constraints.deadline` | datetime | No | Hard deadline |
34
- | `constraints.priority` | string | No | `CRITICAL`, `OPPORTUNITY_NOW`, `OVER_THE_HORIZON` |
35
-
36
- *At least one of `goal` or `tasks` is required.
37
-
38
- **Response:**
39
-
40
- ```json
41
- {
42
- "planId": "uuid",
43
- "goal": "Complete Q1 planning",
44
- "estimatedDuration": 240,
45
- "schedule": [
46
- {
47
- "step": 1,
48
- "title": "Review last quarter metrics",
49
- "description": "Pull Q4 data and analyze trends",
50
- "estimatedMinutes": 60,
51
- "suggestedTimeSlot": {
52
- "start": "2026-03-01T09:00:00Z",
53
- "end": "2026-03-01T10:00:00Z"
54
- },
55
- "dependencies": []
56
- }
57
- ],
58
- "conflicts": [
59
- {
60
- "taskTitle": "Team standup",
61
- "reason": "Overlaps with suggested time slot",
62
- "suggestion": "Move to 10:30 AM"
63
- }
64
- ],
65
- "suggestions": ["Consider breaking the budget review into two sessions"],
66
- "createdAt": "2026-03-01T08:00:00Z"
67
- }
68
- ```
21
+ Triggers the AI planning engine to plan/schedule tasks for the current user. The backend handles this automatically based on the authenticated user's tasks -- no request body is needed.
22
+
23
+ **Tool Parameters (accepted but not sent to backend):**
24
+
25
+ | Parameter | Type | Description |
26
+ |-----------|------|-------------|
27
+ | `goal` | string | What you want to accomplish |
28
+ | `constraints` | object | Planning constraints |
29
+ | `constraints.availableHours` | number | Available hours |
30
+ | `constraints.preferredTimes` | string[] | Preferred time slots |
31
+ | `constraints.avoidTimes` | string[] | Times to avoid |
32
+ | `constraints.deadline` | datetime | Hard deadline |
33
+ | `constraints.priority` | string | `CRITICAL`, `OPPORTUNITY_NOW`, `OVER_THE_HORIZON` |
34
+ | `tasks` | array | Tasks to plan |
35
+
36
+ **Response:** String result from the planning engine.
69
37
 
70
38
  ```bash
71
- curl -X POST "$MYN_API_URL/api/schedules/plan" \
72
- -H "X-API-KEY: $MYN_API_KEY" \
73
- -H "Content-Type: application/json" \
74
- -d '{
75
- "goal": "Complete Q1 planning",
76
- "constraints": {
77
- "availableHours": 4,
78
- "deadline": "2026-03-05T17:00:00Z",
79
- "priority": "CRITICAL"
80
- }
81
- }'
39
+ curl -H "X-API-KEY: $MYN_API_KEY" \
40
+ "$MYN_API_URL/planning/plan"
82
41
  ```
83
42
 
84
- ### Auto-Schedule Day
43
+ ### Schedule All
85
44
 
86
45
  ```
87
- POST /api/schedules/auto
46
+ POST /planning/scheduleAll
88
47
  ```
89
48
 
90
- Automatically schedule all unscheduled tasks for a day.
91
-
92
- **Body:**
93
-
94
- | Field | Type | Required | Description |
95
- |-------|------|----------|-------------|
96
- | `date` | date | No | Date to schedule (default: today) |
97
- | `respectExisting` | boolean | No | Keep existing calendar items (default: true) |
98
- | `bufferMinutes` | number | No | Buffer between tasks (default: 15) |
99
-
100
- **Response:**
101
-
102
- ```json
103
- {
104
- "date": "2026-03-01",
105
- "scheduled": [
106
- {
107
- "taskId": "uuid",
108
- "title": "Prepare report",
109
- "scheduledStart": "2026-03-01T09:00:00Z",
110
- "scheduledEnd": "2026-03-01T11:00:00Z",
111
- "priority": "CRITICAL"
112
- }
113
- ],
114
- "unscheduled": [
115
- {
116
- "taskId": "uuid",
117
- "title": "Research competitors",
118
- "reason": "Not enough available time"
119
- }
120
- ],
121
- "conflicts": [
122
- {
123
- "type": "overlap",
124
- "description": "Two critical tasks competing for morning slot",
125
- "tasksInvolved": ["uuid1", "uuid2"]
126
- }
127
- ],
128
- "stats": {
129
- "totalScheduled": 5,
130
- "totalMinutes": 300,
131
- "byPriority": { "CRITICAL": 2, "OPPORTUNITY_NOW": 3 }
132
- }
133
- }
134
- ```
49
+ Auto-schedules all eligible tasks (today or past start date, not completed, not OVER_THE_HORIZON/PARKING_LOT) for the authenticated user, then triggers planning. No request body needed.
50
+
51
+ **Note (MIN-740):** Changed from GET to POST.
135
52
 
136
53
  ```bash
137
- curl -X POST "$MYN_API_URL/api/schedules/auto" \
54
+ curl -X POST "$MYN_API_URL/planning/scheduleAll" \
138
55
  -H "X-API-KEY: $MYN_API_KEY" \
139
56
  -H "Content-Type: application/json" \
140
- -d '{"date": "2026-03-01", "bufferMinutes": 15}'
57
+ -d '{}'
141
58
  ```
142
59
 
143
- ### Reschedule Tasks
60
+ ### Reschedule (Kick the Can)
144
61
 
145
62
  ```
146
- POST /api/schedules/reschedule
63
+ POST /planning/kickTheCan?rebalance={true|false}
147
64
  ```
148
65
 
149
- Move tasks to a different date.
150
-
151
- **Body:**
152
-
153
- | Field | Type | Required | Description |
154
- |-------|------|----------|-------------|
155
- | `taskIds` | UUID[] | Yes | Tasks to reschedule |
156
- | `reason` | string | No | Why rescheduling |
157
- | `targetDate` | date | No | New target date |
158
- | `spreadOverDays` | number | No | Spread across N days (default: 1) |
159
-
160
- **Response:**
161
-
162
- ```json
163
- {
164
- "rescheduled": [
165
- {
166
- "taskId": "uuid",
167
- "title": "Budget review",
168
- "oldDate": "2026-03-01",
169
- "newDate": "2026-03-03"
170
- }
171
- ],
172
- "failed": [
173
- {
174
- "taskId": "uuid",
175
- "reason": "Task is already completed"
176
- }
177
- ],
178
- "suggestions": ["Consider spreading over 2 days to avoid overload"]
179
- }
180
- ```
66
+ Reschedules overdue/today tasks into the future based on priority. Optionally redistributes all uncompleted tasks evenly.
67
+
68
+ **Note (MIN-740):** Changed from GET to POST.
69
+
70
+ **Query Parameters:**
71
+
72
+ | Parameter | Type | Description |
73
+ |-----------|------|-------------|
74
+ | `rebalance` | boolean | If `true`, redistribute all uncompleted tasks evenly (default: false) |
75
+
76
+ **Tool Parameters:**
77
+
78
+ | Parameter | Type | Description |
79
+ |-----------|------|-------------|
80
+ | `spreadOverDays` | number | If > 1, sets `rebalance=true` (default: 1) |
181
81
 
182
82
  ```bash
183
- curl -X POST "$MYN_API_URL/api/schedules/reschedule" \
83
+ # Basic reschedule — defer overdue tasks
84
+ curl -X POST "$MYN_API_URL/planning/kickTheCan?rebalance=false" \
85
+ -H "X-API-KEY: $MYN_API_KEY" \
86
+ -H "Content-Type: application/json" \
87
+ -d '{}'
88
+
89
+ # Rebalance — spread all uncompleted tasks evenly
90
+ curl -X POST "$MYN_API_URL/planning/kickTheCan?rebalance=true" \
184
91
  -H "X-API-KEY: $MYN_API_KEY" \
185
92
  -H "Content-Type: application/json" \
186
- -d '{
187
- "taskIds": ["uuid1", "uuid2"],
188
- "targetDate": "2026-03-05",
189
- "reason": "Meeting overran, no time today"
190
- }'
93
+ -d '{}'
191
94
  ```
@@ -6,12 +6,16 @@ User information, goals, and preferences.
6
6
 
7
7
  `/api/v1/customers`
8
8
 
9
+ ## Actions
10
+
11
+ The `myn_profile` tool supports these actions: `get_info`, `get_goals`, `update_goals`, `preferences`.
12
+
9
13
  ## Endpoints
10
14
 
11
15
  ### Get User Info
12
16
 
13
17
  ```
14
- GET /api/v1/customers/me
18
+ GET /api/v1/customers
15
19
  ```
16
20
 
17
21
  **Response:**
@@ -40,7 +44,7 @@ GET /api/v1/customers/me
40
44
  ```
41
45
 
42
46
  ```bash
43
- curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/v1/customers/me"
47
+ curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/v1/customers"
44
48
  ```
45
49
 
46
50
  ### Get Goals
@@ -49,100 +53,89 @@ curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/v1/customers/me"
49
53
  GET /api/v1/customers/goals
50
54
  ```
51
55
 
52
- **Response:** `{ goals[{ id, title, description?, targetDate?, priority, status, progress, createdAt, updatedAt, relatedTasks?[] }], activeCount, completedCount }`
56
+ **Response:** `{ goalsAndAmbitions: string | null, stateHash: string }`
53
57
 
54
- - `priority`: `low`, `medium`, `high`
55
- - `status`: `active`, `completed`, `paused`, `abandoned`
56
- - `progress`: 0–100
58
+ Goals are stored as a single markdown text field. The response includes a `stateHash` for use in the read-before-write protocol (MIN-740).
57
59
 
58
60
  ```bash
59
61
  curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/v1/customers/goals"
60
62
  ```
61
63
 
62
- ### Create Goals
64
+ ### Update Goals
63
65
 
64
66
  ```
65
- POST /api/v1/customers/goals
67
+ PUT /api/v1/customers/goals
66
68
  ```
67
69
 
68
- **Body:**
70
+ **Uses read-before-write guard** (MIN-740). Reads goals first to get `stateHash`, retries on 409.
71
+
72
+ The tool formats structured goal objects into markdown before sending:
73
+
74
+ **Tool Parameters (goals array):**
75
+
76
+ | Field | Type | Description |
77
+ |-------|------|-------------|
78
+ | `title` | string | **Required.** Goal title |
79
+ | `description` | string | Goal description |
80
+ | `targetDate` | date | Target date (YYYY-MM-DD) |
81
+ | `priority` | string | `low`, `medium`, `high` |
82
+ | `status` | string | `active`, `completed`, `paused`, `abandoned` |
83
+
84
+ **Request Body (sent to backend):**
69
85
 
70
86
  ```json
71
87
  {
72
- "goals": [
73
- {
74
- "title": "Run a marathon",
75
- "description": "Complete a full marathon by end of year",
76
- "targetDate": "2026-12-31",
77
- "priority": "high"
78
- }
79
- ]
88
+ "goalsAndAmbitions": "- **Run a marathon** [active] (high priority)\n Complete a full marathon by end of year\n Target: 2026-12-31"
80
89
  }
81
90
  ```
82
91
 
83
- **Response:** `{ created[{ goalId, title }] }`
92
+ **Response:** `{ status: "success", message: "Goals and ambitions updated successfully" }`
84
93
 
85
94
  ```bash
86
- curl -X POST "$MYN_API_URL/api/v1/customers/goals" \
95
+ HASH=$(curl -s -H "X-API-KEY: $MYN_API_KEY" \
96
+ "$MYN_API_URL/api/v1/customers/goals" | jq -r .stateHash)
97
+
98
+ curl -X PUT "$MYN_API_URL/api/v1/customers/goals" \
87
99
  -H "X-API-KEY: $MYN_API_KEY" \
100
+ -H "X-MYN-State-Hash: $HASH" \
88
101
  -H "Content-Type: application/json" \
89
- -d '{"goals": [{"title": "Read 24 books this year", "priority": "medium"}]}'
102
+ -d '{"goalsAndAmbitions": "- **Read 24 books this year** [active] (medium priority)"}'
90
103
  ```
91
104
 
92
- ### Update Goal
105
+ ### Preferences
93
106
 
94
- ```
95
- PUT /api/v1/customers/goals/{goalId}
96
- ```
97
-
98
- **Body:** `{ title?, description?, targetDate?, priority?, status? }`
107
+ Preferences are managed via dedicated endpoints, not a generic preferences store.
99
108
 
100
- **Response:** `{ goalId, updated }`
109
+ **Valid preference keys:**
101
110
 
102
- ```bash
103
- curl -X PUT "$MYN_API_URL/api/v1/customers/goals/aabb0000-0000-0000-0000-000000000001" \
104
- -H "X-API-KEY: $MYN_API_KEY" \
105
- -H "Content-Type: application/json" \
106
- -d '{"status": "completed"}'
107
- ```
111
+ | Key | Endpoint |
112
+ |-----|----------|
113
+ | `notification-preferences` | `GET/PUT /api/v1/customers/notification-preferences` |
114
+ | `coaching-intensity` | `GET/PUT /api/v1/customers/coaching-intensity` |
115
+ | `theme-preference` | `GET/PUT /api/v1/customers/theme-preference` |
108
116
 
109
- ### Get Preferences
117
+ **Tool Behavior:**
110
118
 
111
- ```
112
- GET /api/v1/customers/preferences
113
- GET /api/v1/customers/preferences/{key}
114
- ```
119
+ - With `preferenceKey` + `preferenceValue`: PUTs the value to the corresponding endpoint
120
+ - With `preferenceKey` only: GETs from the corresponding endpoint
121
+ - Without `preferenceKey`: GETs all preferences by fetching each endpoint
115
122
 
116
- **Query Parameters:**
123
+ **Tool Parameters:**
117
124
 
118
125
  | Parameter | Type | Description |
119
126
  |-----------|------|-------------|
120
- | `category` | string | Filter: `notifications`, `display`, `ai`, `privacy`, `integrations` |
121
-
122
- **Response (all):** `{ preferences: { key: value, ... }, categories[] }`
123
- **Response (specific):** `{ key, value, category, updatedAt }`
127
+ | `preferenceKey` | string | One of: `notification-preferences`, `coaching-intensity`, `theme-preference` |
128
+ | `preferenceValue` | any | Value to set (triggers PUT) |
124
129
 
125
130
  ```bash
126
131
  # Get all preferences
127
- curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/v1/customers/preferences"
128
-
129
- # Get AI preferences only
130
- curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/v1/customers/preferences?category=ai"
131
- ```
132
-
133
- ### Set Preference
132
+ curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/v1/customers/notification-preferences"
133
+ curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/v1/customers/coaching-intensity"
134
+ curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/v1/customers/theme-preference"
134
135
 
135
- ```
136
- PUT /api/v1/customers/preferences
137
- ```
138
-
139
- **Body:** `{ key, value, category? }`
140
-
141
- **Response:** `{ key, updated }`
142
-
143
- ```bash
144
- curl -X PUT "$MYN_API_URL/api/v1/customers/preferences" \
136
+ # Update theme
137
+ curl -X PUT "$MYN_API_URL/api/v1/customers/theme-preference" \
145
138
  -H "X-API-KEY: $MYN_API_KEY" \
146
139
  -H "Content-Type: application/json" \
147
- -d '{"key": "ai.tone", "value": "friendly", "category": "ai"}'
140
+ -d '{"theme": "dark"}'
148
141
  ```
@@ -6,12 +6,16 @@ Project and category management for organizing tasks.
6
6
 
7
7
  `/api/project`
8
8
 
9
+ ## Actions
10
+
11
+ The `myn_projects` tool supports these actions: `list`, `get`, `create`, `move_task`.
12
+
9
13
  ## Endpoints
10
14
 
11
15
  ### List Projects
12
16
 
13
17
  ```
14
- GET /api/project
18
+ GET /api/project/defaults
15
19
  ```
16
20
 
17
21
  **Query Parameters:**
@@ -45,7 +49,7 @@ GET /api/project
45
49
  ```
46
50
 
47
51
  ```bash
48
- curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/project?includeStats=true"
52
+ curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/project/defaults?includeStats=true"
49
53
  ```
50
54
 
51
55
  ### Get Project
@@ -87,14 +91,14 @@ curl -H "X-API-KEY: $MYN_API_KEY" "$MYN_API_URL/api/project/PROJECT_ID"
87
91
  ### Create Project
88
92
 
89
93
  ```
90
- POST /api/project
94
+ POST /api/project/create
91
95
  ```
92
96
 
93
97
  **Body:**
94
98
 
95
99
  | Field | Type | Required | Description |
96
100
  |-------|------|----------|-------------|
97
- | `name` | string | Yes | Project name (1100 chars) |
101
+ | `name` | string | Yes | Project name (1-100 chars) |
98
102
  | `description` | string | No | Description (max 500 chars) |
99
103
  | `color` | string | No | Hex color (`#3B82F6`) |
100
104
  | `icon` | string | No | Icon identifier |
@@ -103,7 +107,7 @@ POST /api/project
103
107
  **Response:** `{ id, name, created }`
104
108
 
105
109
  ```bash
106
- curl -X POST "$MYN_API_URL/api/project" \
110
+ curl -X POST "$MYN_API_URL/api/project/create" \
107
111
  -H "X-API-KEY: $MYN_API_KEY" \
108
112
  -H "Content-Type: application/json" \
109
113
  -d '{"name": "Home Renovation", "color": "#10B981", "icon": "home"}'
@@ -112,16 +116,14 @@ curl -X POST "$MYN_API_URL/api/project" \
112
116
  ### Move Task to Project
113
117
 
114
118
  ```
115
- PUT /api/v2/unified-tasks/{taskId}/project
119
+ PUT /api/project/{targetProjectId}/moveTaskToProject/{taskId}
116
120
  ```
117
121
 
118
- **Body:** `{ projectId: "target-project-uuid" }`
122
+ Moves a task to a different project. No request body needed.
119
123
 
120
124
  **Response:** `{ taskId, previousProjectId?, newProjectId, moved }`
121
125
 
122
126
  ```bash
123
- curl -X PUT "$MYN_API_URL/api/v2/unified-tasks/TASK_ID/project" \
124
- -H "X-API-KEY: $MYN_API_KEY" \
125
- -H "Content-Type: application/json" \
126
- -d '{"projectId": "TARGET_PROJECT_ID"}'
127
+ curl -X PUT "$MYN_API_URL/api/project/TARGET_PROJECT_ID/moveTaskToProject/TASK_ID" \
128
+ -H "X-API-KEY: $MYN_API_KEY"
127
129
  ```