@mind-your-now/myn 0.8.2 → 0.8.4
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.
- package/README.md +105 -6
- package/dist/index.js +1 -1
- package/dist/src/tools/debrief.js +2 -2
- package/dist/src/tools/debrief.js.map +1 -1
- package/dist/src/tools/habits.js +2 -2
- package/dist/src/tools/habits.js.map +1 -1
- package/dist/src/tools/household.js +3 -3
- package/dist/src/tools/household.js.map +1 -1
- package/dist/src/tools/lists.js +2 -2
- package/dist/src/tools/lists.js.map +1 -1
- package/dist/src/tools/memory.js +1 -1
- package/dist/src/tools/memory.js.map +1 -1
- package/dist/src/tools/planning.js +1 -1
- package/dist/src/tools/planning.js.map +1 -1
- package/dist/src/tools/projects.js +4 -4
- package/dist/src/tools/projects.js.map +1 -1
- package/dist/src/tools/tasks.js +2 -2
- package/dist/src/tools/tasks.js.map +1 -1
- package/dist/src/tools/timers.js +1 -1
- package/dist/src/tools/timers.js.map +1 -1
- package/dist/src/validation.d.ts.map +1 -1
- package/dist/src/validation.js +3 -2
- package/dist/src/validation.js.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/skills/myn/SKILL.md +12 -10
- package/skills/myn/references/briefing-api.md +11 -183
- package/skills/myn/references/calendar-api.md +177 -55
- package/skills/myn/references/debrief-api.md +182 -0
- package/skills/myn/references/habits-api.md +37 -55
- package/skills/myn/references/household-api.md +37 -14
- package/skills/myn/references/lists-api.md +80 -46
- package/skills/myn/references/memory-api.md +66 -34
- package/skills/myn/references/planning-api.md +58 -155
- package/skills/myn/references/profile-api.md +54 -61
- package/skills/myn/references/projects-api.md +13 -11
- package/skills/myn/references/search-api.md +20 -48
- package/skills/myn/references/tasks-api.md +47 -40
- package/skills/myn/references/timers-api.md +113 -52
- package/skills/myn/references/ynab-api.md +323 -0
|
@@ -6,6 +6,10 @@ Countdown timers, alarms, and Pomodoro sessions.
|
|
|
6
6
|
|
|
7
7
|
`/api/v2/timers`
|
|
8
8
|
|
|
9
|
+
## Actions
|
|
10
|
+
|
|
11
|
+
The `myn_timers` tool supports these actions: `create_countdown`, `create_alarm`, `list`, `cancel`, `snooze`, `pomodoro`.
|
|
12
|
+
|
|
9
13
|
## Endpoints
|
|
10
14
|
|
|
11
15
|
### List Active Timers
|
|
@@ -24,7 +28,7 @@ Returns all active timers for the current user.
|
|
|
24
28
|
| `timers[].timerId` | UUID | Timer identifier |
|
|
25
29
|
| `timers[].type` | string | `COUNTDOWN`, `ALARM`, or `POMODORO` |
|
|
26
30
|
| `timers[].label` | string | User-defined label (nullable) |
|
|
27
|
-
| `timers[].status` | string | Current status
|
|
31
|
+
| `timers[].status` | string | Current status |
|
|
28
32
|
| `timers[].duration` | number | Total duration in seconds (COUNTDOWN/POMODORO) |
|
|
29
33
|
| `timers[].remaining` | number | Seconds remaining (COUNTDOWN/POMODORO) |
|
|
30
34
|
| `timers[].endTime` | datetime | When the timer will fire (COUNTDOWN) |
|
|
@@ -40,15 +44,13 @@ curl -H "X-API-KEY: $MYN_API_KEY" \
|
|
|
40
44
|
"$MYN_API_URL/api/v2/timers"
|
|
41
45
|
```
|
|
42
46
|
|
|
43
|
-
### Create Timer
|
|
47
|
+
### Create Countdown Timer
|
|
44
48
|
|
|
45
49
|
```
|
|
46
|
-
POST /api/v2/timers
|
|
50
|
+
POST /api/v2/timers/countdown
|
|
47
51
|
```
|
|
48
52
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
#### Countdown Timer
|
|
53
|
+
**Body Parameters:**
|
|
52
54
|
|
|
53
55
|
| Field | Type | Description |
|
|
54
56
|
|-------|------|-------------|
|
|
@@ -56,9 +58,30 @@ Creates a new timer. The request body varies by timer type.
|
|
|
56
58
|
| `duration` | number | **Required.** Duration in seconds |
|
|
57
59
|
| `label` | string | Optional label |
|
|
58
60
|
|
|
61
|
+
**Tool Parameters:**
|
|
62
|
+
|
|
63
|
+
| Parameter | Type | Description |
|
|
64
|
+
|-----------|------|-------------|
|
|
65
|
+
| `duration` | number | Duration in seconds |
|
|
66
|
+
| `durationMinutes` | number | Duration in minutes (converted to seconds automatically) |
|
|
67
|
+
| `label` | string | Timer label/description |
|
|
68
|
+
|
|
69
|
+
One of `duration` or `durationMinutes` is required.
|
|
70
|
+
|
|
71
|
+
**Response Fields:**
|
|
72
|
+
|
|
73
|
+
| Field | Type | Description |
|
|
74
|
+
|-------|------|-------------|
|
|
75
|
+
| `timerId` | UUID | Timer identifier |
|
|
76
|
+
| `type` | string | `"COUNTDOWN"` |
|
|
77
|
+
| `duration` | number | Duration in seconds |
|
|
78
|
+
| `endTime` | datetime | When the timer will fire |
|
|
79
|
+
| `label` | string | Timer label (nullable) |
|
|
80
|
+
| `status` | string | `ACTIVE`, `PAUSED`, or `COMPLETED` |
|
|
81
|
+
|
|
59
82
|
```bash
|
|
60
83
|
# 25-minute countdown
|
|
61
|
-
curl -X POST "$MYN_API_URL/api/v2/timers" \
|
|
84
|
+
curl -X POST "$MYN_API_URL/api/v2/timers/countdown" \
|
|
62
85
|
-H "X-API-KEY: $MYN_API_KEY" \
|
|
63
86
|
-H "Content-Type: application/json" \
|
|
64
87
|
-d '{
|
|
@@ -68,76 +91,67 @@ curl -X POST "$MYN_API_URL/api/v2/timers" \
|
|
|
68
91
|
}'
|
|
69
92
|
```
|
|
70
93
|
|
|
71
|
-
|
|
94
|
+
### Create Alarm
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
POST /api/v2/timers/alarm
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Body Parameters:**
|
|
72
101
|
|
|
73
102
|
| Field | Type | Description |
|
|
74
103
|
|-------|------|-------------|
|
|
75
|
-
| `
|
|
104
|
+
| `name` | string | Alarm name (defaults to "Alarm" from label) |
|
|
76
105
|
| `alarmTime` | datetime | **Required.** When the alarm should fire (ISO 8601) |
|
|
77
|
-
| `
|
|
78
|
-
| `
|
|
79
|
-
|
|
106
|
+
| `recurrence` | string | Optional recurrence pattern (e.g., "daily", "weekdays") |
|
|
107
|
+
| `completionSound` | string | Optional alarm sound name |
|
|
108
|
+
|
|
109
|
+
**Response Fields:**
|
|
110
|
+
|
|
111
|
+
| Field | Type | Description |
|
|
112
|
+
|-------|------|-------------|
|
|
113
|
+
| `timerId` | UUID | Timer identifier |
|
|
114
|
+
| `type` | string | `"ALARM"` |
|
|
115
|
+
| `alarmTime` | datetime | When the alarm will fire |
|
|
116
|
+
| `label` | string | Alarm label (nullable) |
|
|
117
|
+
| `recurrence` | string | Recurrence pattern (nullable) |
|
|
118
|
+
| `status` | string | `ACTIVE`, `TRIGGERED`, or `SNOOZED` |
|
|
80
119
|
|
|
81
120
|
```bash
|
|
82
121
|
# One-time alarm
|
|
83
|
-
curl -X POST "$MYN_API_URL/api/v2/timers" \
|
|
122
|
+
curl -X POST "$MYN_API_URL/api/v2/timers/alarm" \
|
|
84
123
|
-H "X-API-KEY: $MYN_API_KEY" \
|
|
85
124
|
-H "Content-Type: application/json" \
|
|
86
125
|
-d '{
|
|
87
|
-
"
|
|
88
|
-
"alarmTime": "2026-03-02T07:00:00Z"
|
|
89
|
-
"label": "Morning wake-up"
|
|
126
|
+
"name": "Morning wake-up",
|
|
127
|
+
"alarmTime": "2026-03-02T07:00:00Z"
|
|
90
128
|
}'
|
|
91
129
|
|
|
92
130
|
# Recurring weekday alarm
|
|
93
|
-
curl -X POST "$MYN_API_URL/api/v2/timers" \
|
|
131
|
+
curl -X POST "$MYN_API_URL/api/v2/timers/alarm" \
|
|
94
132
|
-H "X-API-KEY: $MYN_API_KEY" \
|
|
95
133
|
-H "Content-Type: application/json" \
|
|
96
134
|
-d '{
|
|
97
|
-
"
|
|
135
|
+
"name": "Standup reminder",
|
|
98
136
|
"alarmTime": "2026-03-02T08:30:00Z",
|
|
99
|
-
"label": "Standup reminder",
|
|
100
137
|
"recurrence": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"
|
|
101
138
|
}'
|
|
102
139
|
```
|
|
103
140
|
|
|
104
|
-
#### Pomodoro Timer
|
|
105
|
-
|
|
106
|
-
| Field | Type | Description |
|
|
107
|
-
|-------|------|-------------|
|
|
108
|
-
| `type` | string | **Required.** `"POMODORO"` |
|
|
109
|
-
| `workDuration` | number | **Required.** Work phase duration in seconds |
|
|
110
|
-
| `breakDuration` | number | **Required.** Short break duration in seconds |
|
|
111
|
-
| `longBreakDuration` | number | **Required.** Long break duration in seconds (after all sessions) |
|
|
112
|
-
| `sessions` | number | Number of work sessions before long break (default: 4) |
|
|
113
|
-
| `autoStart` | boolean | Auto-start next phase (default: false) |
|
|
114
|
-
| `label` | string | Optional label |
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
# Standard Pomodoro: 25min work, 5min break, 15min long break, 4 sessions
|
|
118
|
-
curl -X POST "$MYN_API_URL/api/v2/timers" \
|
|
119
|
-
-H "X-API-KEY: $MYN_API_KEY" \
|
|
120
|
-
-H "Content-Type: application/json" \
|
|
121
|
-
-d '{
|
|
122
|
-
"type": "POMODORO",
|
|
123
|
-
"workDuration": 1500,
|
|
124
|
-
"breakDuration": 300,
|
|
125
|
-
"longBreakDuration": 900,
|
|
126
|
-
"sessions": 4,
|
|
127
|
-
"autoStart": true,
|
|
128
|
-
"label": "Deep work block"
|
|
129
|
-
}'
|
|
130
|
-
```
|
|
131
|
-
|
|
132
141
|
### Cancel Timer
|
|
133
142
|
|
|
134
143
|
```
|
|
135
|
-
|
|
144
|
+
POST /api/v2/timers/{timerId}/cancel
|
|
136
145
|
```
|
|
137
146
|
|
|
147
|
+
**Uses read-before-write guard** -- reads timer state hash before cancelling.
|
|
148
|
+
|
|
149
|
+
**Response:** `{ timerId, status }`
|
|
150
|
+
|
|
138
151
|
```bash
|
|
139
|
-
curl -X
|
|
140
|
-
-H "X-API-KEY: $MYN_API_KEY"
|
|
152
|
+
curl -X POST "$MYN_API_URL/api/v2/timers/TIMER_ID/cancel" \
|
|
153
|
+
-H "X-API-KEY: $MYN_API_KEY" \
|
|
154
|
+
-H "X-MYN-State-Hash: abc123"
|
|
141
155
|
```
|
|
142
156
|
|
|
143
157
|
### Snooze Timer
|
|
@@ -148,6 +162,8 @@ POST /api/v2/timers/{timerId}/snooze
|
|
|
148
162
|
|
|
149
163
|
Snoozes a ringing alarm or timer.
|
|
150
164
|
|
|
165
|
+
**Uses read-before-write guard** -- reads timer state hash before snoozing.
|
|
166
|
+
|
|
151
167
|
**Body Parameters:**
|
|
152
168
|
|
|
153
169
|
| Field | Type | Description |
|
|
@@ -163,9 +179,54 @@ Snoozes a ringing alarm or timer.
|
|
|
163
179
|
| `status` | string | `"SNOOZED"` |
|
|
164
180
|
|
|
165
181
|
```bash
|
|
166
|
-
|
|
167
|
-
curl -X POST "$MYN_API_URL/api/v2/timers/550e8400-e29b-41d4-a716-446655440000/snooze" \
|
|
182
|
+
curl -X POST "$MYN_API_URL/api/v2/timers/TIMER_ID/snooze" \
|
|
168
183
|
-H "X-API-KEY: $MYN_API_KEY" \
|
|
184
|
+
-H "X-MYN-State-Hash: abc123" \
|
|
169
185
|
-H "Content-Type: application/json" \
|
|
170
186
|
-d '{"snoozeMinutes": 10}'
|
|
171
187
|
```
|
|
188
|
+
|
|
189
|
+
### Create Pomodoro Timer
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
POST /api/v2/timers/countdown
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Creates a Pomodoro timer (uses the countdown endpoint with `type: "POMODORO"`).
|
|
196
|
+
|
|
197
|
+
**Body Parameters:**
|
|
198
|
+
|
|
199
|
+
| Field | Type | Description |
|
|
200
|
+
|-------|------|-------------|
|
|
201
|
+
| `type` | string | **Required.** `"POMODORO"` |
|
|
202
|
+
| `workDuration` | number | Work phase in seconds (tool accepts minutes, auto-converts) |
|
|
203
|
+
| `breakDuration` | number | Short break in seconds (tool accepts minutes, auto-converts) |
|
|
204
|
+
| `longBreakDuration` | number | Long break in seconds (tool accepts minutes, auto-converts) |
|
|
205
|
+
| `sessions` | number | Number of work sessions (default: 4) |
|
|
206
|
+
| `autoStart` | boolean | Auto-start next phase (default: false) |
|
|
207
|
+
| `label` | string | Optional label |
|
|
208
|
+
|
|
209
|
+
**Tool Parameters (in minutes):**
|
|
210
|
+
|
|
211
|
+
| Parameter | Type | Default | Description |
|
|
212
|
+
|-----------|------|---------|-------------|
|
|
213
|
+
| `workDuration` | number | 25 | Work duration in minutes |
|
|
214
|
+
| `breakDuration` | number | 5 | Break duration in minutes |
|
|
215
|
+
| `longBreakDuration` | number | 15 | Long break duration in minutes |
|
|
216
|
+
| `sessions` | number | 4 | Number of pomodoro sessions |
|
|
217
|
+
| `autoStart` | boolean | false | Auto-start next phase |
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
curl -X POST "$MYN_API_URL/api/v2/timers/countdown" \
|
|
221
|
+
-H "X-API-KEY: $MYN_API_KEY" \
|
|
222
|
+
-H "Content-Type: application/json" \
|
|
223
|
+
-d '{
|
|
224
|
+
"type": "POMODORO",
|
|
225
|
+
"workDuration": 1500,
|
|
226
|
+
"breakDuration": 300,
|
|
227
|
+
"longBreakDuration": 900,
|
|
228
|
+
"sessions": 4,
|
|
229
|
+
"autoStart": true,
|
|
230
|
+
"label": "Deep work block"
|
|
231
|
+
}'
|
|
232
|
+
```
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
# YNAB API
|
|
2
|
+
|
|
3
|
+
YNAB (You Need A Budget) integration for budget management, transactions, scheduled transactions, analytics, and category management.
|
|
4
|
+
|
|
5
|
+
## Base Path
|
|
6
|
+
|
|
7
|
+
`/api/v1/ynab`
|
|
8
|
+
|
|
9
|
+
## Endpoints
|
|
10
|
+
|
|
11
|
+
### Budget & Accounts
|
|
12
|
+
|
|
13
|
+
#### Budget Overview
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
GET /api/v1/ynab/budget/overview
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Returns the overall budget summary including ready-to-assign amount, total income, total budgeted, and total activity.
|
|
20
|
+
|
|
21
|
+
#### List Categories
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
GET /api/v1/ynab/budget/categories
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Returns all category groups and their categories with balances, budgeted amounts, and goal information.
|
|
28
|
+
|
|
29
|
+
#### Category Balance (Search)
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
GET /api/v1/ynab/budget/categories/search?query={categoryName}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Fuzzy-searches for a category by name and returns its balance and details.
|
|
36
|
+
|
|
37
|
+
#### Account Balances
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
GET /api/v1/ynab/budget/accounts
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Returns all accounts grouped by type (checking, savings, creditCards, loans) with balances and transfer payee IDs.
|
|
44
|
+
|
|
45
|
+
#### Set Budget Amount
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
PATCH /api/v1/ynab/budget/categories/{categoryId}/budget
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Body:**
|
|
52
|
+
|
|
53
|
+
| Field | Type | Description |
|
|
54
|
+
|-------|------|-------------|
|
|
55
|
+
| `budgetedDollars` | number | Amount in dollars to budget for the category |
|
|
56
|
+
| `month` | string | Budget month in YYYY-MM format (defaults to current month) |
|
|
57
|
+
|
|
58
|
+
#### Set Category Goal
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
PATCH /api/v1/ynab/budget/categories/{categoryId}/goal
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Body:**
|
|
65
|
+
|
|
66
|
+
| Field | Type | Description |
|
|
67
|
+
|-------|------|-------------|
|
|
68
|
+
| `goalType` | string | Goal type: `TB`, `TBD`, `MF`, `NEED` |
|
|
69
|
+
| `goalTargetDollars` | number | Goal target in dollars |
|
|
70
|
+
| `goalTargetMonth` | string | Target month YYYY-MM (for TBD goals, appends `-01` automatically) |
|
|
71
|
+
|
|
72
|
+
#### Goal Progress
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
GET /api/v1/ynab/budget/categories
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Same as list_categories; goal progress fields are included in category data.
|
|
79
|
+
|
|
80
|
+
#### Budget Months
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
GET /api/v1/ynab/budget/months
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Returns available budget months with summary data.
|
|
87
|
+
|
|
88
|
+
#### Search Payees
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
GET /api/v1/ynab/budget/payees/search?query={payeeName}
|
|
92
|
+
GET /api/v1/ynab/budget/payees
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Search for payees by name (fuzzy match), or list all payees if no query is provided.
|
|
96
|
+
|
|
97
|
+
### Transactions
|
|
98
|
+
|
|
99
|
+
#### Create Transaction
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
POST /api/v1/ynab/transactions
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Body:**
|
|
106
|
+
|
|
107
|
+
| Field | Type | Description |
|
|
108
|
+
|-------|------|-------------|
|
|
109
|
+
| `accountId` | string | **Required.** YNAB account ID |
|
|
110
|
+
| `amountMilliunits` | number | **Required.** Amount in milliunits (dollars * 1000, negative for expenses) |
|
|
111
|
+
| `date` | string | **Required.** Date YYYY-MM-DD (defaults to today) |
|
|
112
|
+
| `payeeName` | string | Payee name (required if no payeeId) |
|
|
113
|
+
| `payeeId` | string | Payee ID (for transfers, use target account's transferPayeeId) |
|
|
114
|
+
| `categoryId` | string | Category ID (resolved from categoryName by the tool) |
|
|
115
|
+
| `memo` | string | Optional memo |
|
|
116
|
+
| `cleared` | string | `cleared`, `uncleared`, or `reconciled` |
|
|
117
|
+
|
|
118
|
+
The tool automatically performs duplicate detection by checking for existing transactions with the same amount and date.
|
|
119
|
+
|
|
120
|
+
#### Create Transactions Bulk
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
POST /api/v1/ynab/transactions/bulk
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Body:** `{ transactions: [{ accountId, payeeName, amount, date, categoryId, memo? }] }`
|
|
127
|
+
|
|
128
|
+
Amounts are in milliunits. Bypasses the single-transaction duplicate check.
|
|
129
|
+
|
|
130
|
+
#### List Transactions
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
GET /api/v1/ynab/transactions
|
|
134
|
+
GET /api/v1/ynab/transactions?sinceDate={YYYY-MM-DD}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Returns transactions, optionally filtered by date.
|
|
138
|
+
|
|
139
|
+
#### Update Transaction
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
PUT /api/v1/ynab/transactions/{transactionId}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Body:** Any combination of `accountId`, `payeeName`, `payeeId`, `amountMilliunits`, `date`, `memo`, `cleared`, `flagColor`, `categoryId`.
|
|
146
|
+
|
|
147
|
+
#### Delete Transaction
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
DELETE /api/v1/ynab/transactions/{transactionId}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### Split Transaction
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
PUT /api/v1/ynab/transactions/{transactionId}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Updates a transaction with `subtransactions` to split it across multiple categories. The tool validates that split amounts sum to the original transaction amount.
|
|
160
|
+
|
|
161
|
+
**Body:** `{ subtransactions: [{ amount, categoryId, memo? }] }`
|
|
162
|
+
|
|
163
|
+
### Scheduled Transactions & Subscriptions
|
|
164
|
+
|
|
165
|
+
#### List Scheduled Transactions
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
GET /api/v1/ynab/scheduled-transactions
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### Create Scheduled Transaction
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
POST /api/v1/ynab/scheduled-transactions
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Body:**
|
|
178
|
+
|
|
179
|
+
| Field | Type | Description |
|
|
180
|
+
|-------|------|-------------|
|
|
181
|
+
| `accountId` | string | **Required.** YNAB account ID |
|
|
182
|
+
| `payeeName` | string | **Required.** Payee name |
|
|
183
|
+
| `amountMilliunits` | number | **Required.** Amount in milliunits |
|
|
184
|
+
| `dateFirst` | string | **Required.** First occurrence date YYYY-MM-DD |
|
|
185
|
+
| `dateNext` | string | Next occurrence date (defaults to dateFirst) |
|
|
186
|
+
| `frequency` | string | **Required.** Recurrence: `never`, `daily`, `weekly`, `everyOtherWeek`, `twiceAMonth`, `every4Weeks`, `monthly`, `everyOtherMonth`, `every3Months`, `every4Months`, `twiceAYear`, `yearly`, `everyOtherYear` |
|
|
187
|
+
| `categoryId` | string | Category ID |
|
|
188
|
+
| `memo` | string | Optional memo |
|
|
189
|
+
|
|
190
|
+
#### Update Scheduled Transaction
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
PUT /api/v1/ynab/scheduled-transactions/{transactionId}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Body:** Any combination of `payeeName`, `amountMilliunits`, `dateNext`, `frequency`, `memo`, `categoryId`.
|
|
197
|
+
|
|
198
|
+
#### Delete Scheduled Transaction
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
DELETE /api/v1/ynab/scheduled-transactions/{transactionId}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
#### Subscriptions View
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
GET /api/v1/ynab/subscriptions
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Returns a view of recurring scheduled transactions categorized as subscriptions.
|
|
211
|
+
|
|
212
|
+
#### Upcoming Bills
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
GET /api/v1/ynab/scheduled?days={days}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Returns scheduled transactions due within the specified number of days (default: 7).
|
|
219
|
+
|
|
220
|
+
### Analytics
|
|
221
|
+
|
|
222
|
+
#### Spending Insights
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
GET /api/v1/ynab/analytics/spending?months={months}&category={categoryName}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Returns spending breakdown by category. Optional category filter for drilling into a specific category.
|
|
229
|
+
|
|
230
|
+
#### Payee Analysis
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
GET /api/v1/ynab/analytics/payees?months={months}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Returns spending analysis by payee.
|
|
237
|
+
|
|
238
|
+
#### Spending Trends
|
|
239
|
+
|
|
240
|
+
```
|
|
241
|
+
GET /api/v1/ynab/analytics/trends?months={months}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Returns month-over-month spending trends.
|
|
245
|
+
|
|
246
|
+
#### Net Worth
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
GET /api/v1/ynab/analytics/net-worth
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Returns net worth calculation across all accounts.
|
|
253
|
+
|
|
254
|
+
#### Debt Tracking
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
GET /api/v1/ynab/analytics/debt
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Returns debt tracking information for loan and credit card accounts.
|
|
261
|
+
|
|
262
|
+
### Category Management
|
|
263
|
+
|
|
264
|
+
#### Create Category Group
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
POST /api/v1/ynab/budget/category-groups
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Body:** `{ name: "Group Name" }`
|
|
271
|
+
|
|
272
|
+
#### Create Category
|
|
273
|
+
|
|
274
|
+
```
|
|
275
|
+
POST /api/v1/ynab/budget/categories
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Body:** `{ name: "Category Name", categoryGroupId: "group-id", note?: "optional note" }`
|
|
279
|
+
|
|
280
|
+
The `categoryGroupId` can be resolved from `groupName` by fuzzy match against existing groups.
|
|
281
|
+
|
|
282
|
+
#### Rename Category
|
|
283
|
+
|
|
284
|
+
```
|
|
285
|
+
PATCH /api/v1/ynab/budget/categories/{categoryId}/details
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Body:** `{ name: "New Name" }`
|
|
289
|
+
|
|
290
|
+
#### Move Category
|
|
291
|
+
|
|
292
|
+
```
|
|
293
|
+
PATCH /api/v1/ynab/budget/categories/{categoryId}/details
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
**Body:** `{ categoryGroupId: "target-group-id" }`
|
|
297
|
+
|
|
298
|
+
Moves a category to a different category group.
|
|
299
|
+
|
|
300
|
+
#### Rename Category Group
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
PATCH /api/v1/ynab/budget/category-groups/{groupId}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
**Body:** `{ name: "New Group Name" }`
|
|
307
|
+
|
|
308
|
+
### Connection
|
|
309
|
+
|
|
310
|
+
#### Connection Status
|
|
311
|
+
|
|
312
|
+
```
|
|
313
|
+
GET /api/v1/ynab/status
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Returns YNAB connection status.
|
|
317
|
+
|
|
318
|
+
## Notes
|
|
319
|
+
|
|
320
|
+
- All monetary amounts from the YNAB API are in milliunits (divide by 1000 for dollars). The tool automatically converts these to formatted dollar strings in responses.
|
|
321
|
+
- The tool accepts amounts in dollars (e.g., `-45.50` for a $45.50 expense) and converts them to milliunits internally.
|
|
322
|
+
- Category names are resolved via fuzzy search against existing categories. Always use `list_categories` first to find the correct name.
|
|
323
|
+
- `categoryName` is required for all non-transfer transactions to prevent uncategorized entries in YNAB.
|