@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.
@@ -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.