@lunch-money/developer-docs 2.11.2-preview.9 → 2.11.2

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 CHANGED
@@ -45,22 +45,10 @@ const intro = fs.readFileSync(path.join(docsRoot, 'docs/getting-started.md'), 'u
45
45
  }
46
46
  ],
47
47
  "redirects": [ /* { from, to, status } */ ],
48
- "sidebar": {
49
- "docs": [
50
- {
51
- "section": "OAUTH",
52
- "collapsed": true, // optional; initially collapse this section
53
- "items": [ /* { label, path, external? } */ ]
54
- }
55
- ],
56
- "v1": [ /* … */ ]
57
- }
48
+ "sidebar": { "docs": [ /* … */ ], "v1": [ /* … */ ] }
58
49
  }
59
50
  ```
60
51
 
61
- Sidebar sections initially appear expanded unless their optional `collapsed`
62
- property is `true`.
63
-
64
52
  ## Versioning
65
53
 
66
54
  The package version tracks the newest API version this content documents (e.g. `2.11.x`
@@ -20,6 +20,10 @@ history entries.
20
20
  legal company name is required.
21
21
  - Use “Developer Portal,” “Developers page,” and “API reference” consistently.
22
22
  Preserve different capitalization only for an exact UI label.
23
+ - Use “budget account” for the Lunch Money data container that holds a budget,
24
+ transactions, categories, and financial accounts. Use “account” only when the
25
+ context is unambiguous, and preserve exact UI labels such as “Create a New
26
+ Budget Account.”
23
27
  - Write “v1” and “v2” in prose. Use “V2 API” only where it is an established
24
28
  proper label, such as the rendered reference title.
25
29
  - Distinguish authentication from authorization, personal access tokens from
@@ -45,7 +45,7 @@ A few common, low-friction ways to brand an integration:
45
45
 
46
46
  1. **README or docs** — a short "Built with Lunch Money" line plus the Powered by badge linking to <a href="https://lunchmoney.app/" target="_blank" rel="noopener noreferrer">lunchmoney.app</a>
47
47
  2. **App footer or about screen** — the Powered by badge next to your own branding
48
- 3. **Onboarding or connect flow** — official logo when asking users to connect their Lunch Money account through OAuth. Applications intended for other users should not ask them to paste a personal access token; see the [OAuth overview](/oauth)
48
+ 3. **Onboarding or connect flow** — official logo when prompting users to authorize or paste an access token
49
49
  4. **Community listings** — consistent naming ("My Tool for Lunch Money") so users can find and trust your project
50
50
 
51
51
  Keep your own product name primary. Lunch Money branding should signal the connection, not compete with your identity.
@@ -8,9 +8,9 @@ Most users interact with their Lunch Money data using the official web or mobile
8
8
  > Changes made via the API are permanent and cannot be undone. Always use a test budget when getting started.
9
9
 
10
10
 
11
- ## Create a test budgeting account
11
+ ## Create a test budget account
12
12
 
13
- Since changes to your data made by the API are permanent, the best way to begin interacting with the API is to <a href="https://support.lunchmoney.app/miscellaneous/unlimited-budgeting-accounts" target="_blank" rel="noopener noreferrer">create a new test budgeting account</a> in your existing Lunch Money account. As you start using the API, you can interact with this test account and ensure that your real data is not modified.
13
+ Since changes to your data made by the API are permanent, the best way to begin interacting with the API is to <a href="https://support.lunchmoney.app/miscellaneous/unlimited-budgeting-accounts" target="_blank" rel="noopener noreferrer">create a new test budget account</a> in your existing Lunch Money account. As you start using the API, you can interact with this test account and ensure that your real data is not modified.
14
14
 
15
15
  :::tabs
16
16
 
@@ -27,39 +27,37 @@ Choose the option to "Set up Demo". This will add categories, accounts, tags and
27
27
  ![Add Demo Data](/images/DemoData.png)
28
28
  :::
29
29
 
30
- ## Getting a personal access token
30
+ ## Getting an access token
31
31
 
32
- Lunch Money API requests are authenticated using the Bearer Token authentication method. In plain English, this means that you will pass a personal access token associated with your budgeting account to Lunch Money. This is so we know which account to operate on and that the request came from someone who can access that account.
33
-
34
- This guide uses a personal access token so you can explore the API with your own budgeting account. If you are building an application that other people will connect to Lunch Money, start with the [OAuth overview](/oauth) instead.
32
+ Lunch Money API requests are authenticated using the Bearer Token authentication method. In plain English, this means that you will pass a token associated with your budget account to Lunch Money. This is so we know which account to operate on and that the request came from someone who can access that account.
35
33
 
36
34
  :::tabs
37
35
 
38
36
  @tab 1. Go to the Developers Page
39
37
 
40
- Navigate to <a href="https://my.lunchmoney.app/developers" target="_blank" rel="noopener noreferrer">the developers page in the Lunch Money web app</a>. Look at the green circle in the upper right hand corner and make sure that it is showing the test account that you just created. If you aren't sure which account is active, you can click on the green circle to bring up the "Switch Accounts" dialog. This will show you the full names of all the accounts associated with your account. Select the test budgeting account you created.
38
+ Navigate to <a href="https://my.lunchmoney.app/developers" target="_blank" rel="noopener noreferrer">the developers page in the Lunch Money web app</a>. Look at the green circle in the upper right hand corner and make sure that it is showing the test account that you just created. If you aren't sure which account is active, you can click on the green circle to bring up the "Switch Accounts" dialog. This will show you the full names of all the accounts associated with your account. Select the test budget account you created.
41
39
  ![Green Budgets Icon](/images/green_budget.png)
42
40
 
43
41
  @tab 2. Request Access Token
44
- In the upper right hand corner of the page, give your personal access token a label and specify what you are using it for. When you're done, hit the "Request Access Token" button.
42
+ In the upper right hand corner of the page, give your access token a label and specify what you are using it for. When you're done, hit the "Request Access Token" button.
45
43
  ![Request Token](/images/RequestAccessToken.png)
46
44
 
47
45
  @tab 3. Save Access Token
48
- After you do this, the web page will show you a long alphanumeric string. This is your personal access token. Hit the copy button and save this token somewhere safe. It is only shown to you when you create it.
46
+ After you do this, the web page will show you a long alphanumeric string. This is your access token. Hit the copy button and save this token somewhere safe. It is only shown to you when you create it.
49
47
  :::
50
48
 
51
- Congratulations! You've got a personal access token and are ready to make an API request! Later, when you are more comfortable with the API, you can repeat this process to create a new personal access token associated with your real budget.
49
+ Congratulations! You've got an access token and are ready to make an API request! Later, when you are more comfortable with the API, you can repeat this process to create a new access token associated with your real budget.
52
50
 
53
51
  > [!WARNING]
54
- > Treat your personal access tokens like passwords. Don't share them with anyone you don't trust.
52
+ > Treat your access tokens like passwords. Don't share them with anyone you don't trust.
55
53
 
56
- If you ever worry that your personal access token has been compromised, you can always come back to the Developers page and hit the Revoke button.
54
+ If you ever worry that your access token has been compromised, you can always come back to the Developers page and hit the Revoke button.
57
55
 
58
56
  > [!NOTE]
59
- > Give your personal access tokens descriptive names so you can easily identify and revoke them later if needed.
57
+ > Give your access tokens descriptive names so you can easily identify and revoke them later if needed.
60
58
 
61
59
 
62
- ## Using your personal access token
60
+ ## Using your access token
63
61
 
64
62
  When you start to write code that makes API calls, you will need to include this token in each request using an Authorization header. Here is an example curl request:
65
63
 
@@ -70,7 +68,7 @@ curl --location 'https://api.lunchmoney.dev/v2/me' \
70
68
 
71
69
  If this doesn't make sense yet, that's OK!
72
70
 
73
- There is an easier way to use your personal access token to make requests. Head over to the [API Reference Documentation](/v2/docs).
71
+ There is an easier way to use your access token to make requests. Head over to the [API Reference Documentation](/v2/docs).
74
72
 
75
73
  :::tabs
76
74
 
@@ -87,8 +85,6 @@ This will pop up a dialog box that you can use to send an API request. This is a
87
85
 
88
86
  From here, you can explore the rest of the Lunch Money API and start thinking about what you might do with it.
89
87
 
90
- When you are ready to build an application that other Lunch Money users can connect to, [learn how OAuth grants access without asking users to share personal access tokens](/oauth).
91
-
92
88
  ## What can you build?
93
89
 
94
90
  The Lunch Money community has already built a wide variety of tools — automations, importers, dashboards, and more. Check out the <a href="https://lunchmoney.app/developers#community-projects" target="_blank" rel="noopener noreferrer">Developer Tools & Community Projects</a> list for inspiration, or drop by the <a href="https://discord.com/channels/842337014556262411/1134597088504729780" target="_blank" rel="noopener noreferrer">Show and Tell channel</a> on Discord to see what others are sharing.
@@ -10,7 +10,7 @@ The v2 API is available at:
10
10
  https://api.lunchmoney.dev/v2
11
11
  ```
12
12
 
13
- To explore the API or work with your own budgeting account, create a personal access token on the <a href="https://my.lunchmoney.app/developers" target="_blank" rel="noopener noreferrer">Developers page</a>. If you are building an application for other Lunch Money users, [use OAuth](/oauth) instead. Both kinds of access token are sent as a Bearer token with each request:
13
+ Get your access token from the <a href="https://my.lunchmoney.app/developers" target="_blank" rel="noopener noreferrer">Lunch Money app developers page</a> and include it as a Bearer token in every request:
14
14
 
15
15
  ```http
16
16
  Authorization: Bearer YOUR_ACCESS_TOKEN
@@ -59,6 +59,5 @@ Join the conversation in the <a href="https://lunchmoney.app/discord" target="_b
59
59
  **Useful links:**
60
60
  - <a href="/v2/docs">Interactive API Reference</a>
61
61
  - [Getting started guide](/getting-started)
62
- - [OAuth overview](/oauth)
63
62
  - <a href="https://github.com/lunch-money/awesome-lunchmoney" target="_blank" rel="noopener noreferrer">Awesome Lunch Money Projects</a>
64
63
  - [Contact: devsupport@lunchmoney.app](mailto:devsupport@lunchmoney.app)
package/manifest.json CHANGED
@@ -73,102 +73,6 @@
73
73
  "type": "markdown",
74
74
  "aliases": ["/v2/branding-your-app"]
75
75
  },
76
- {
77
- "path": "/oauth",
78
- "file": "docs/oauth/index.md",
79
- "title": "OAuth Overview",
80
- "section": "OAUTH",
81
- "type": "markdown",
82
- "aliases": ["/v2/oauth", "/v2/oauth/"]
83
- },
84
- {
85
- "path": "/oauth/concepts",
86
- "file": "docs/oauth/concepts.md",
87
- "title": "OAuth Concepts",
88
- "section": "OAUTH",
89
- "type": "markdown",
90
- "aliases": ["/v2/oauth/concepts"]
91
- },
92
- {
93
- "path": "/oauth/register-client",
94
- "file": "docs/oauth/register-client.md",
95
- "title": "Register an OAuth Client",
96
- "section": "OAUTH",
97
- "type": "markdown",
98
- "aliases": ["/v2/oauth/register-client"]
99
- },
100
- {
101
- "path": "/oauth/authorization-code",
102
- "file": "docs/oauth/authorization-code.md",
103
- "title": "Implement Authorization",
104
- "section": "OAUTH",
105
- "type": "markdown",
106
- "aliases": ["/v2/oauth/authorization-code"]
107
- },
108
- {
109
- "path": "/oauth/sample-applications",
110
- "file": "docs/oauth/sample-applications.md",
111
- "title": "OAuth Sample Applications",
112
- "section": "OAUTH",
113
- "type": "markdown",
114
- "aliases": ["/v2/oauth/sample-applications"]
115
- },
116
- {
117
- "path": "/oauth/development",
118
- "file": "docs/oauth/development.md",
119
- "title": "Develop and Test",
120
- "section": "OAUTH",
121
- "type": "markdown",
122
- "aliases": ["/v2/oauth/development"]
123
- },
124
- {
125
- "path": "/oauth/tokens",
126
- "file": "docs/oauth/tokens.md",
127
- "title": "Token Lifecycle",
128
- "section": "OAUTH",
129
- "type": "markdown",
130
- "aliases": ["/v2/oauth/tokens"]
131
- },
132
- {
133
- "path": "/oauth/security",
134
- "file": "docs/oauth/security.md",
135
- "title": "OAuth Security",
136
- "section": "OAUTH",
137
- "type": "markdown",
138
- "aliases": ["/v2/oauth/security"]
139
- },
140
- {
141
- "path": "/oauth/troubleshooting",
142
- "file": "docs/oauth/troubleshooting.md",
143
- "title": "Troubleshoot OAuth",
144
- "section": "OAUTH",
145
- "type": "markdown",
146
- "aliases": ["/v2/oauth/troubleshooting"]
147
- },
148
- {
149
- "path": "/oauth/review-and-approval",
150
- "file": "docs/oauth/review-and-approval.md",
151
- "title": "OAuth Client Review and Approval",
152
- "section": "OAUTH",
153
- "type": "markdown",
154
- "aliases": ["/v2/oauth/review-and-approval"]
155
- },
156
- {
157
- "path": "/oauth/native-apps",
158
- "file": "docs/oauth/native-apps.md",
159
- "title": "Native Apps",
160
- "section": "OAUTH",
161
- "type": "markdown",
162
- "aliases": ["/v2/oauth/native-apps"]
163
- },
164
- {
165
- "path": "/oauth/scopes",
166
- "file": "docs/oauth/scopes.md",
167
- "title": "OAuth Scopes",
168
- "section": "OAUTH",
169
- "type": "markdown",
170
- "aliases": ["/v2/oauth/scopes"]
171
- },
172
76
  {
173
77
  "path": "/v2/overview",
174
78
  "file": "v2/docs/intro-to-v2.md",
@@ -307,20 +211,6 @@
307
211
  { "label": "Using the API with AI", "path": "/using-with-ai" },
308
212
  { "label": "Branding your App", "path": "/branding-your-app" }
309
213
  ]},
310
- { "section": "OAUTH", "collapsed": true, "items": [
311
- { "label": "OAuth Overview", "path": "/oauth" },
312
- { "label": "Concepts", "path": "/oauth/concepts" },
313
- { "label": "Register a Client", "path": "/oauth/register-client" },
314
- { "label": "Implement Authorization", "path": "/oauth/authorization-code" },
315
- { "label": "Sample Applications", "path": "/oauth/sample-applications" },
316
- { "label": "Develop and Test", "path": "/oauth/development" },
317
- { "label": "Token Lifecycle", "path": "/oauth/tokens" },
318
- { "label": "Security", "path": "/oauth/security" },
319
- { "label": "Troubleshooting", "path": "/oauth/troubleshooting" },
320
- { "label": "Review and Approval", "path": "/oauth/review-and-approval" },
321
- { "label": "Native Apps", "path": "/oauth/native-apps" },
322
- { "label": "Scope Catalog", "path": "/oauth/scopes" }
323
- ]},
324
214
  { "section": "REFERENCE", "items": [
325
215
  { "label": "v2 API Overview", "path": "/v2/overview" },
326
216
  { "label": "v2 API Reference", "path": "/v2/docs", "external": true },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunch-money/developer-docs",
3
- "version": "2.11.2-preview.9",
3
+ "version": "2.11.2",
4
4
  "description": "Developer documentation content for Lunch Money APIs",
5
5
  "exports": {
6
6
  ".": "./package.json",
@@ -18,8 +18,8 @@
18
18
  "access": "public"
19
19
  },
20
20
  "scripts": {
21
- "validate:manifest": "node ../../scripts/generate-oauth-scope-catalog.js --check && node scripts/validate-manifest.js",
22
- "prepack": "node ../../scripts/generate-oauth-scope-catalog.js --check && node scripts/validate-manifest.js && node scripts/prepack.js",
21
+ "validate:manifest": "node scripts/validate-manifest.js",
22
+ "prepack": "node scripts/validate-manifest.js && node scripts/prepack.js",
23
23
  "postpack": "node scripts/postpack.js"
24
24
  },
25
25
  "keywords": [
package/v1/_user.md CHANGED
@@ -11,8 +11,8 @@ This API (v1) will not progress to a generally available state. For new projects
11
11
  | user_id | number | false | Unique identifier for user |
12
12
  | user_name | string | false | User's name |
13
13
  | user_email | string | false | User's email |
14
- | account_id | number | false | Unique identifier for the associated budgeting account |
15
- | budget_name | string | false | Name of the associated budgeting account |
14
+ | account_id | number | false | Unique identifier for the associated budget account |
15
+ | budget_name | string | false | Name of the associated budget account |
16
16
  | primary_currency|string | false | Primary currency from user's settings |
17
17
  | api_key_label | string | true | User-defined label of the developer API key used. Returns null if nothing has been set. |
18
18
 
@@ -10,7 +10,7 @@ All API requests require a Bearer token in the `Authorization` header:
10
10
  Authorization: Bearer YOUR_ACCESS_TOKEN
11
11
  ```
12
12
 
13
- Use a personal access token for API exploration or work with your own budgeting account. The [Getting started guide](/getting-started) walks through creating one on the <a href="https://my.lunchmoney.app/developers" target="_blank" rel="noopener noreferrer">Lunch Money Developers page</a> and making your first request. Applications built for other Lunch Money users should use an [OAuth access token issued after the user authorizes the application](/oauth).
13
+ Get your access token from the <a href="https://my.lunchmoney.app/developers" target="_blank" rel="noopener noreferrer">Lunch Money Developers page</a>. See the [Getting started guide](/getting-started) for a step-by-step walkthrough including how to create a test budget.
14
14
 
15
15
  ## Base URL
16
16
 
@@ -317,10 +317,10 @@ GET /v2/plaid_accounts/123
317
317
  GET /v2/tags/1
318
318
  ```
319
319
 
320
- **Migration Strategy**:
320
+ **Migration Strategy**:
321
321
  - Maintain a local cache of categories, accounts, and tags
322
- - Update your code to use IDs and fetch related objects separately when needed
323
- - Consider batching requests or using the bulk endpoints to reduce API calls
322
+ - Fetch `GET /manual_accounts` and `GET /plaid_accounts` once and build an ID-to-account map. To filter transactions by account name, resolve the name to its account type and ID, then use `manual_account_id` or `plaid_account_id` with `GET /transactions`
323
+ - Refresh cached related objects when their metadata changes instead of fetching them once per transaction
324
324
 
325
325
  #### Removed Properties
326
326
 
@@ -415,14 +415,17 @@ See the [Amounts & balances guide](/amounts-and-balances) for the full sign conv
415
415
  #### Split and Grouped Transactions
416
416
 
417
417
  **Split Transactions**:
418
- - Parents of split transactions (`is_parent: true`) are not returned by default in `GET /transactions`
418
+ - Parents of split transactions (`is_split_parent: true`) are not returned by default in `GET /transactions`
419
419
  - Split transactions include `split_parent_id` pointing to the parent
420
420
  - Use `GET /transactions/:id` to get parent with full `children` array
421
421
  - Use `GET /transactions` with query param `include_split_parents=true` to include parents in list
422
422
 
423
+ > [!WARNING] Prevent duplicate split processing
424
+ > A v1 integration may see split children returned by v2 as new transactions because their parent is omitted by default. Before treating a transaction as new or attempting to split it, check `split_parent_id`. A non-null value identifies an existing split child and points to its parent transaction.
425
+
423
426
  **Grouped Transactions**:
424
427
  - Transactions that have been grouped are not returned by default
425
- - Only the group transaction (`is_group: true`) is returned
428
+ - Only the group transaction (`is_group_parent: true`) is returned
426
429
  - Use `GET /transactions/:id` to get details of grouped transactions in the transaction group's `children` array.
427
430
 
428
431
 
@@ -5,17 +5,13 @@ The Lunch Money API spec uses a modified version of SEMVER for its versioning me
5
5
  - The minor version represents the number of main endpoints the current version of the spec supports. For example, a version of the API that supports the /me, /categories, and /transactions endpoints would have a minor version of 3.
6
6
  - The revision number represents the number of updates since the last endpoint was added. For example, each time changes are made to one of the existing three APIs as described above, the revision number will be bumped.
7
7
 
8
- ## v2.11.2 - TBD
9
- - Add OAuth 2.0 bearer-token authentication to the v2 API, allowing applications to access Lunch Money on behalf of users who authorize them
10
- - Document and enforce required OAuth scopes for every v2 operation and publish the scope and scope-group catalog mapped to V2 `operationId` values.
11
- - Added a new `403` `insufficient_scope` response
12
- - Document the OAuth 2.0 authorization-code flow used to obtain access tokens
13
- - Add `include_files` query parameter to `GET /transactions/{id}`
14
-
15
- ## v2.11.1 - TBD
8
+ ## v2.11.2 - Nov 7, 2026
9
+ - Allow `balance_as_of` to be `null` in manual account responses
10
+
11
+ ## v2.11.1 - Sep 28, 2026
16
12
  - Add `GET /me/account/settings` and `PUT /me/account/settings` for account-level settings
17
13
  - Add `GET /me/user/settings` and `PUT /me/user/settings` for user-level display and formatting preferences
18
- - Add `GET /me/user/account/settings` and `PUT /me/user/account/settings` for settings specific to a user and budgeting account
14
+ - Add `GET /me/user/account/settings` and `PUT /me/user/account/settings` for settings specific to a user and budget account
19
15
  - Add `include_pending_in_totals` to `GET /me/account/settings` and `PUT /me/account/settings`
20
16
  - Add `default_manual_account_id` to `GET /me/user/account/settings` and `PUT /me/user/account/settings`
21
17
  - Document `GET /budgets/settings` response schema publicly; change `budget_period_quantity` to integer
package/v2/spec/AGENTS.md CHANGED
@@ -41,12 +41,6 @@ Follow these rules whenever editing `v2/spec/lunch-money-api-v2.yaml`:
41
41
  - Add links when they materially help consumers discover a related endpoint or relevant guide.
42
42
  - Do not add links that merely restate obvious navigation.
43
43
 
44
- ### YAML formatting
45
-
46
- - Write each description paragraph as a single line. Never hard-wrap prose to a column: inside a folded scalar a line break becomes a space, so a wrap landing beside punctuation or markup silently corrupts the rendered text.
47
- - Use a folded block (`>-`) only when a description has more than one paragraph, separated by a blank line. A single-paragraph description stays on the key line.
48
- - Never use a literal block (`|`, `|-`) for prose — newlines become significant, so reflowing later changes the output.
49
-
50
44
  ### Examples
51
45
 
52
46
  Examples are selective documentation aids, not a required artifact for every spec change.