@lunch-money/developer-docs 2.11.3-preview.1 → 2.11.3-preview.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`
@@ -1,9 +1,8 @@
1
- **Beta Preview Portal** — This developer portal previews planned changes including:
2
- - Beta versions of new [v2 API](/v2/docs) endpoints:
3
- - [GET /me/account/settings](v2/docs#tag/me/GET/me/account/settings)
4
- - [PUT /me/account/settings](v2/docs#tag/me/PUT/me/account/settings)
5
- - [GET /me/user/settings](v2/docs#tag/me/GET/me/user/settings)
6
- - [PUT /me/user/settings](v2/docs#tag/me/PUT/me/user/settings)
1
+ **Beta Preview Portal** — This developer portal previews planned changes to [`GET /summary`](/v2/docs#tag/summary/GET/summary):
7
2
 
3
+ - Category objects now describe their rollover behavior with `rollover_option` and `rollover_start_date`.
4
+ - Totals for categories using same-category rollover now include `rollover_balance`.
5
+
6
+ These changes are available in the mock API for feedback, but are not yet available in the live API.
8
7
 
9
8
  Feedback is welcome. [Email dev-support@lunchmoney.app](mailto:dev-support@lunchmoney.app) or join us in the [developers channel](https://discord.com/channels/842337014556262411/1134594318414389258) on the [Lunch Money Discord](https://lunchmoney.app/discord).
@@ -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.
@@ -5,12 +5,12 @@ Welcome to the Lunch Money developer API! This API has enabled the Lunch Money u
5
5
  Most users interact with their Lunch Money data using the official web or mobile app. Making API calls is another way to interact with your Lunch Money data. You can make API calls that **get** your data for you, allowing you to do other things with it, like generating your own charts or simply archiving your data. You can also make API calls that **change** or **delete** your data. Any changes you make are permanent, just like they would be if you made changes using the web or mobile app.
6
6
 
7
7
  > [!WARNING]
8
- > Changes made via the API are permanent and cannot be undone. Always use a test budget account when getting started.
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
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 budget account</a> in your existing Lunch Money account. As you start using the API, you can interact with this test budget 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
 
@@ -18,48 +18,46 @@ Since changes to your data made by the API are permanent, the best way to begin
18
18
  Click on the green circle in the upper right hand corner in the Lunch Money Web App
19
19
  ![Green Budgets Icon](/images/green_budget.png)
20
20
 
21
- @tab 2. Create a New Budget Account
22
- Click on the "Create a New Budget Account" link and give your new budget account a name like "API Test Budget"
21
+ @tab 2. Create a New Budget
22
+ Click on the "Create a New Budget Account" link and give your new budget a name like "API Test Budget"
23
23
  ![Create New Budget](/images/new_budget.png)
24
24
 
25
25
  @tab 3. Add Test Data
26
- Choose the option to "Set up Demo". This will add categories, accounts, tags and several months worth of transactions to your new budget account.
26
+ Choose the option to "Set up Demo". This will add categories, accounts, tags and several months worth of transactions to your new budget.
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 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.
33
-
34
- This guide uses a personal access token so you can explore the API with your own budget 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 budget account that you just created. If you aren't sure which budget 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 your budget accounts. Select the test budget 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 account.
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
 
@@ -83,12 +81,10 @@ Scroll down to the section called "Get Current User" and hit the "Test Request"
83
81
  ![TestRequest.png](/images/TestRequest.png)
84
82
  :::
85
83
 
86
- This will pop up a dialog box that you can use to send an API request. This is a simple endpoint, so just hit the "Send" button. You should see a response that includes your name and the name of your test budget account.
84
+ This will pop up a dialog box that you can use to send an API request. This is a simple endpoint, so just hit the "Send" button. You should see a response that includes your name and the name of your test budget.
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,13 +10,13 @@ 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 budget 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
17
17
  ```
18
18
 
19
- See the [Getting started guide](/getting-started) for a full walkthrough, including how to create a test budget account and make your first request.
19
+ See the [Getting started guide](/getting-started) for a full walkthrough, including how to create a test budget and make your first request.
20
20
 
21
21
  ## Trying the API without real data
22
22
 
@@ -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)
@@ -12,12 +12,6 @@ If you exceed this limit, you will receive a `429 Too Many Requests` response.
12
12
  > [!NOTE] Rate limit scope
13
13
  > Rate limiting is applied per IP address. Requests from the same IP address share the same rate limit quotas.
14
14
 
15
- ## OAuth token requests
16
-
17
- Requests to `/oauth/token`, including refresh requests, use a separate per-IP OAuth limit shared with `/oauth/introspect`. The default is 300 requests per window, and the default window is one minute. These requests do not count against the API limit applied to `/v1/` and `/v2/` resource requests.
18
-
19
- Because this limit is keyed by IP address, unrelated users behind the same office, mobile-carrier, or other network address translation (NAT) gateway can share it. If the token endpoint returns `429 Too Many Requests`, respect `Retry-After` and back off with jitter instead of repeatedly sending the token request.
20
-
21
15
  ## Rate limit response
22
16
 
23
17
  When you exceed a rate limit, the API returns a `429 Too Many Requests` response:
@@ -75,7 +75,7 @@ const token = process.env.LUNCH_MONEY_ACCESS_TOKEN;
75
75
 
76
76
  ## Best practices
77
77
 
78
- 1. **Start with a test budget account** — API changes are permanent. Use a test budget account while you're learning so your real data stays safe. See the [Getting Started guide](/getting-started) for instructions.
78
+ 1. **Start with a test budget** — API changes are permanent. Use a test budget while you're learning so your real data stays safe. See the [Getting Started guide](/getting-started) for instructions.
79
79
 
80
80
  2. **Prefer read-only workflows** — A workflow that only reads data is lower risk than one that can create, update, or delete records.
81
81
 
@@ -95,7 +95,7 @@ If you want to experiment, here are a few low-risk starting points:
95
95
  4. Ask for patterns in merchant names that might deserve new rules or categories.
96
96
  5. Build a reusable "money questions" notebook with prompts you revisit each month.
97
97
 
98
- Start small, and use a test budget account while you're learning.
98
+ Start small, and use a test budget while you're learning.
99
99
 
100
100
  ## Need help?
101
101
 
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": "Scopes", "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.3-preview.1",
3
+ "version": "2.11.3-preview.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": [
@@ -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 budget 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
 
@@ -6,11 +6,9 @@ The Lunch Money API spec uses a modified version of SEMVER for its versioning me
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
8
  ## v2.11.3 - 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}`
9
+ - Add `rollover_option` and `rollover_start_date` to category objects in `GET /summary` responses.
10
+ - Add `rollover_balance` to category totals in aligned `GET /summary` responses for budgets that roll over within the same category.
11
+ - Rename the public rollover option value `available funds` to `general pool`.
14
12
 
15
13
  ## v2.11.2 - Nov 7, 2026
16
14
  - Allow `balance_as_of` to be `null` in manual account responses
@@ -34,7 +32,7 @@ The Lunch Money API spec uses a modified version of SEMVER for its versioning me
34
32
  - `DELETE /balance_history/{account_type}/{account_id}`
35
33
  - `DELETE /balance_history/crypto_synced/{account_id}/{symbol}`
36
34
  - `PUT /balance_history/deleted/{account_id}/details`
37
- - Remove `rollover_pool` from category objects in the `GET /summary` response
35
+ - Correct the `GET /summary` schema by removing `rollover_pool` from category objects. The server returned `rollover_pool` only at the top level.
38
36
  - Allow setting `external_id` on Plaid-account transactions
39
37
  - Allow `null` for `category_id` and `notes` on split children to clear those values instead of inheriting from the parent
40
38
 
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.