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

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/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
+ 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).
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,20 @@ 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
8
+ ## v2.11.3 - TBD
9
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
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
11
  - Added a new `403` `insufficient_scope` response
12
12
  - Document the OAuth 2.0 authorization-code flow used to obtain access tokens
13
13
  - Add `include_files` query parameter to `GET /transactions/{id}`
14
14
 
15
- ## v2.11.1 - TBD
15
+ ## v2.11.2 - Nov 7, 2026
16
+ - Allow `balance_as_of` to be `null` in manual account responses
17
+
18
+ ## v2.11.1 - Sep 28, 2026
16
19
  - Add `GET /me/account/settings` and `PUT /me/account/settings` for account-level settings
17
20
  - 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
21
+ - Add `GET /me/user/account/settings` and `PUT /me/user/account/settings` for settings specific to a user and budget account
19
22
  - Add `include_pending_in_totals` to `GET /me/account/settings` and `PUT /me/account/settings`
20
23
  - Add `default_manual_account_id` to `GET /me/user/account/settings` and `PUT /me/user/account/settings`
21
24
  - Document `GET /budgets/settings` response schema publicly; change `budget_period_quantity` to integer
@@ -1,6 +1,6 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="1120" height="960" viewBox="0 0 1120 960" role="img" aria-labelledby="title desc">
2
2
  <title id="title">Lunch Money OAuth authorization-code flow</title>
3
- <desc id="desc">A sequence diagram with three actors: your application, the Lunch Money user, and Lunch Money. The application redirects the user's browser to Lunch Money. When necessary, Lunch Money presents its sign-in screen and the user signs in directly with Lunch Money. Lunch Money then presents the budgeting-account selector and requested permissions, the user selects an account and approves access, Lunch Money returns an authorization code, and the application exchanges it for tokens. The application calls GET /v2/me, saves the identified connection, and calls the API for that account.</desc>
3
+ <desc id="desc">A sequence diagram with three actors: your application, the Lunch Money user, and Lunch Money. The application redirects the user's browser to Lunch Money. When necessary, Lunch Money presents its sign-in screen and the user signs in directly with Lunch Money. Lunch Money then presents the budget-account selector and requested scopes, the user selects an account and approves access, Lunch Money returns an authorization code, and the application exchanges it for tokens. The application calls GET /v2/me, saves the identified connection, and calls the API for that account.</desc>
4
4
  <defs>
5
5
  <marker id="app-arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto"><path d="M0,0 L0,6 L9,3 z" fill="#b45309"/></marker>
6
6
  <marker id="user-arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto"><path d="M0,0 L0,6 L9,3 z" fill="#9a6700"/></marker>
@@ -23,8 +23,8 @@
23
23
  <path class="flow user-flow" d="M560 200 H940"/><rect class="step-bg" x="652" y="178" width="196" height="28" rx="6"/><text class="step" x="750" y="197" text-anchor="middle">2. Request authorization</text>
24
24
  <path class="flow lm-flow" d="M950 260 H570"/><rect class="step-bg" x="640" y="238" width="240" height="28" rx="6"/><text class="step" x="760" y="257" text-anchor="middle">3. Show sign-in, when needed</text>
25
25
  <path class="flow user-flow" d="M560 320 H940"/><rect class="step-bg" x="605" y="298" width="290" height="28" rx="6"/><text class="step" x="750" y="317" text-anchor="middle">4. Sign in directly with Lunch Money</text>
26
- <path class="flow lm-flow" d="M950 380 H570"/><rect class="step-bg" x="545" y="358" width="430" height="28" rx="6"/><text class="step" x="760" y="377" text-anchor="middle">5. Present budgeting-account selector and permissions</text>
27
- <path class="flow user-flow" d="M560 440 H940"/><rect class="step-bg" x="585" y="418" width="330" height="28" rx="6"/><text class="step" x="750" y="437" text-anchor="middle">6. Select budgeting account and approve</text>
26
+ <path class="flow lm-flow" d="M950 380 H570"/><rect class="step-bg" x="545" y="358" width="430" height="28" rx="6"/><text class="step" x="760" y="377" text-anchor="middle">5. Present budget-account selector and scopes</text>
27
+ <path class="flow user-flow" d="M560 440 H940"/><rect class="step-bg" x="585" y="418" width="330" height="28" rx="6"/><text class="step" x="750" y="437" text-anchor="middle">6. Select budget account and approve</text>
28
28
  <path class="flow lm-flow" d="M950 500 H180"/><rect class="step-bg" x="385" y="478" width="360" height="28" rx="6"/><text class="step" x="565" y="497" text-anchor="middle">7. Redirect to callback with authorization code</text>
29
29
  <path class="flow app-flow" d="M170 580 H940"/><rect class="step-bg" x="335" y="558" width="460" height="28" rx="6"/><text class="step" x="565" y="577" text-anchor="middle">8. Exchange code with PKCE (+ client secret for confidential client)</text>
30
30
  <path class="flow lm-flow" d="M950 640 H180"/><rect class="step-bg" x="385" y="618" width="360" height="28" rx="6"/><text class="step" x="565" y="637" text-anchor="middle">9. Return access token + optional refresh token</text>
@@ -4,9 +4,9 @@ info:
4
4
  description: >-
5
5
  ### Introduction
6
6
 
7
- Welcome to the Lunch Money v2 API reference. This is the **v2.11.2** spec.
7
+ Welcome to the Lunch Money v2 API reference. This is the **v2.11.3** spec.
8
8
 
9
- The API is available at `https://api.lunchmoney.dev/v2`. Use a personal access token from the [Lunch Money Developers page](https://my.lunchmoney.app/developers) for API exploration or work with your own budgeting account. Applications built for other Lunch Money users should use an [OAuth access token issued after the user authorizes the application](https://lunchmoney.dev/oauth).
9
+ The API is available at `https://api.lunchmoney.dev/v2`. Use a personal access token from the [Lunch Money Developers page](https://my.lunchmoney.app/developers) for API exploration or work with your own budget account. Applications built for other Lunch Money users should use an [OAuth access token issued after the user authorizes the application](https://lunchmoney.dev/oauth).
10
10
 
11
11
 
12
12
  **Try it from these docs**
@@ -43,7 +43,7 @@ info:
43
43
  license:
44
44
  name: Apache 2.0
45
45
  url: http://www.apache.org/licenses/LICENSE-2.0.html
46
- version: 2.11.2
46
+ version: 2.11.3
47
47
 
48
48
  servers:
49
49
  - url: https://api.lunchmoney.dev/v2
@@ -53,7 +53,7 @@ servers:
53
53
 
54
54
  tags:
55
55
  - name: me
56
- description: View details and settings for the current user and account.<p> Use [/me/user/settings](#tag/me/GET/me/user/settings) for user-wide preferences, [/me/account/settings](#tag/me/GET/me/account/settings) for account-wide preferences, and [/me/user/account/settings](#tag/me/GET/me/user/account/settings) for preferences specific to the current user and budgeting account.
56
+ description: View details and settings for the current user and account.<p> Use [/me/user/settings](#tag/me/GET/me/user/settings) for user-wide preferences, [/me/account/settings](#tag/me/GET/me/account/settings) for account-wide preferences, and [/me/user/account/settings](#tag/me/GET/me/user/account/settings) for preferences specific to the current user and budget account.
57
57
  - name: categories
58
58
  description: Work with categories
59
59
  externalDocs:
@@ -145,12 +145,12 @@ components:
145
145
  account_id:
146
146
  type: integer
147
147
  format: int64
148
- description: Unique ID for the current budgeting account
148
+ description: Unique ID for the current budget account
149
149
  budget_name:
150
150
  type: string
151
- description: Name of the current budgeting account.<p> Also available as `display_name` on [/me/account/settings](#tag/me/GET/me/account/settings), which is the preferred endpoint for reading and updating account settings.
151
+ description: Name of the current budget account.<p> Also available as `display_name` on [/me/account/settings](#tag/me/GET/me/account/settings), which is the preferred endpoint for reading and updating account settings.
152
152
  primary_currency:
153
- description: Primary currency for the current budgeting account.<p> Also available on [/me/account/settings](#tag/me/GET/me/account/settings), which is the preferred endpoint for reading and updating account settings.
153
+ description: Primary currency for the current budget account.<p> Also available on [/me/account/settings](#tag/me/GET/me/account/settings), which is the preferred endpoint for reading and updating account settings.
154
154
  allOf:
155
155
  - $ref: "#/components/schemas/currencyEnum"
156
156
  api_key_label:
@@ -400,7 +400,7 @@ components:
400
400
  children:
401
401
  type: array
402
402
  nullable: false
403
- description: List of categories to include in the new category group. This field should only be set if `is_group` is also set to true.<br> You may provide existing category objects, existing category IDs, or names for new categories to add to the group. Categories or IDs must already exist and cannot be category groups. Categories that already belong to another group will be moved. If strings are provided, they will be used as names for new categories added to the group. The request will fail if any provided name already exists.<br> You may mix category objects, IDs, and new category names in the same request.
403
+ description: Categories to include in the new category group. Set only when `is_group` is `true`.<br> You may provide existing category objects, existing category IDs, or names for new categories. IDs and objects must refer to existing categories and cannot refer to category groups. Existing categories are added to the new group; categories that already belong to another group are moved. Each string is used as the name of a new category, and the request fails if that name already exists.<br> You may mix category objects, IDs, and new category names in the same request. Adding or moving an existing category updates it, so OAuth clients that include at least one existing category ID or object in `children` must have both `categories:create` and `categories:update`; without both scopes, the request returns a `403` `insufficient_scope` error. If every child is specified by name, `categories:create` alone is sufficient.
404
404
  items:
405
405
  oneOf:
406
406
  - type: integer
@@ -476,7 +476,7 @@ components:
476
476
  children:
477
477
  type: array
478
478
  nullable: false
479
- description: List of existing category objects, existing category IDs, or names of new categories to add to the category group. This attribute should only be set when modifying an existing category group.<br> Categories or IDs must already exist and must not already belong to a category group. Categories that already belong to another category group will be moved. If strings are specified, they will be used as names for new categories added to the group. The request will fail if any provided name matches an existing category name.<br> You may mix full category objects, IDs, and new category names in the same request. OAuth clients that include one or more strings in `children` must have both `categories:update` and `categories:create`; otherwise the request returns a `403` `insufficient_scope` error.
479
+ description: List of existing category objects, existing category IDs, or names of new categories to add to the category group. This attribute should only be set when modifying an existing category group.<br> Categories or IDs must already exist and cannot refer to category groups. Categories that already belong to another category group will be moved. If strings are specified, they will be used as names for new categories added to the group. The request will fail if any provided name matches an existing category name.<br> You may mix full category objects, IDs, and new category names in the same request. OAuth clients that include one or more strings in `children` must have both `categories:update` and `categories:create`; otherwise the request returns a `403` `insufficient_scope` error.
480
480
  x-updatable: true
481
481
  items:
482
482
  oneOf:
@@ -1029,7 +1029,9 @@ components:
1029
1029
  balance_as_of:
1030
1030
  type: string
1031
1031
  format: date-time
1032
- description: Date balance was last updated in ISO 8601 extended format, can be in date or date-time format
1032
+ nullable: true
1033
+ description: Date/time the balance was last updated in ISO 8601
1034
+ extended format. `null` when no balance date is available.
1033
1035
  status:
1034
1036
  type: string
1035
1037
  description: The status of the account
@@ -1108,7 +1110,7 @@ components:
1108
1110
  display_name:
1109
1111
  type: string
1110
1112
  nullable: true
1111
- description: Display name of the manual account. If omitted or `null`, it is derived from `institution_name` and `name`. An explicitly set display name must be unique for the budgeting account.
1113
+ description: Display name of the manual account. If omitted or `null`, it is derived from `institution_name` and `name`. An explicitly set display name must be unique for the budget account.
1112
1114
  example: Savings
1113
1115
  type:
1114
1116
  description: The type of manual account
@@ -3157,7 +3159,7 @@ components:
3157
3159
  type: object
3158
3160
  title: budget settings object
3159
3161
  additionalProperties: false
3160
- description: Budget period and display settings for the current budgeting account.
3162
+ description: Budget period and display settings for the current budget account.
3161
3163
  properties:
3162
3164
  budget_period_granularity:
3163
3165
  type: string
@@ -3434,7 +3436,7 @@ components:
3434
3436
  type: object
3435
3437
  title: account settings object
3436
3438
  additionalProperties: false
3437
- description: Account-level settings for the budgeting account associated with the authorized API token.
3439
+ description: Account-level settings for the budget account associated with the authorized API token.
3438
3440
  properties:
3439
3441
  primary_currency:
3440
3442
  description: Primary currency for the account.
@@ -3448,7 +3450,7 @@ components:
3448
3450
  display_name:
3449
3451
  type: string
3450
3452
  nullable: true
3451
- description: Display name of the budgeting account in the Lunch Money app.
3453
+ description: Display name of the budget account in the Lunch Money app.
3452
3454
  locale:
3453
3455
  allOf:
3454
3456
  - $ref: "#/components/schemas/localeEnum"
@@ -3496,7 +3498,7 @@ components:
3496
3498
  display_name:
3497
3499
  type: string
3498
3500
  nullable: true
3499
- description: If set, updates the display name of the budgeting account.
3501
+ description: If set, updates the display name of the budget account.
3500
3502
  x-updatable: true
3501
3503
  locale:
3502
3504
  allOf:
@@ -3521,7 +3523,7 @@ components:
3521
3523
  type: object
3522
3524
  title: user account settings object
3523
3525
  additionalProperties: false
3524
- description: Settings specific to the authorized user within the current budgeting account.
3526
+ description: Settings specific to the authorized user within the current budget account.
3525
3527
  properties:
3526
3528
  auto_review_transaction_on_update:
3527
3529
  type: boolean
@@ -3534,7 +3536,7 @@ components:
3534
3536
  default_manual_account_id:
3535
3537
  type: integer
3536
3538
  nullable: true
3537
- description: Manual account selected by default when the user creates a manual transaction in the current budgeting account. Must identify a manual account returned by [GET /manual_accounts](#tag/manual_accounts/GET/manual_accounts) for the current budgeting account. Set to `null` to clear the selection.
3539
+ description: Manual account selected by default when the user creates a manual transaction in the current budget account. Must identify a manual account returned by [GET /manual_accounts](#tag/manual_accounts/GET/manual_accounts) for the current budget account. Set to `null` to clear the selection.
3538
3540
  required:
3539
3541
  - auto_review_transaction_on_update
3540
3542
  - auto_review_transaction_on_creation
@@ -3545,7 +3547,7 @@ components:
3545
3547
  type: object
3546
3548
  additionalProperties: false
3547
3549
  minProperties: 1
3548
- description: Request body for updating settings specific to the authorized user within the current budgeting account. Include at least one property to update.
3550
+ description: Request body for updating settings specific to the authorized user within the current budget account. Include at least one property to update.
3549
3551
  properties:
3550
3552
  auto_review_transaction_on_update:
3551
3553
  type: boolean
@@ -3558,7 +3560,7 @@ components:
3558
3560
  default_manual_account_id:
3559
3561
  type: integer
3560
3562
  nullable: true
3561
- description: If set, updates the manual account selected by default when the user creates a manual transaction in the current budgeting account. Must identify a manual account returned by [GET /manual_accounts](#tag/manual_accounts/GET/manual_accounts) for the current budgeting account. Set to `null` to clear the selection.
3563
+ description: If set, updates the manual account selected by default when the user creates a manual transaction in the current budget account. Must identify a manual account returned by [GET /manual_accounts](#tag/manual_accounts/GET/manual_accounts) for the current budget account. Set to `null` to clear the selection.
3562
3564
  x-updatable: true
3563
3565
 
3564
3566
  userSettingsObject:
@@ -4444,7 +4446,7 @@ paths:
4444
4446
  - me
4445
4447
  summary: Get current user
4446
4448
  description: >-
4447
- Get details about the user associated with the supplied authorization token.<p> Use [/me/user/settings](#tag/me/GET/me/user/settings) for user-wide preferences, [/me/account/settings](#tag/me/GET/me/account/settings) for account-wide preferences, and [/me/user/account/settings](#tag/me/GET/me/user/account/settings) for preferences specific to the current user and budgeting account. Properties such as `primary_currency` and `budget_name` remain on this response for backwards compatibility.
4449
+ Get details about the user associated with the supplied authorization token.<p> Use [/me/user/settings](#tag/me/GET/me/user/settings) for user-wide preferences, [/me/account/settings](#tag/me/GET/me/account/settings) for account-wide preferences, and [/me/user/account/settings](#tag/me/GET/me/user/account/settings) for preferences specific to the current user and budget account. Properties such as `primary_currency` and `budget_name` remain on this response for backwards compatibility.
4448
4450
  operationId: getMe
4449
4451
  security:
4450
4452
  - bearerSecurity: []
@@ -4478,7 +4480,7 @@ paths:
4478
4480
  - me
4479
4481
  summary: Get account settings
4480
4482
  description: >-
4481
- Returns settings for the current budgeting account. These settings apply regardless of which user is accessing the account.
4483
+ Returns settings for the current budget account. These settings apply regardless of which user is accessing the account.
4482
4484
  operationId: getAccountSettings
4483
4485
  security:
4484
4486
  - bearerSecurity: []
@@ -4486,7 +4488,7 @@ paths:
4486
4488
  - me:read
4487
4489
  responses:
4488
4490
  "200":
4489
- description: Account settings for the current budgeting account
4491
+ description: Account settings for the current budget account
4490
4492
  content:
4491
4493
  application/json:
4492
4494
  schema:
@@ -4513,7 +4515,7 @@ paths:
4513
4515
  - me
4514
4516
  summary: Update account settings
4515
4517
  description: >-
4516
- Updates account-level settings for the budgeting account associated with the authorized API token. Submit the full response from `GET /me/account/settings` with one or more properties changed, or provide only the properties to update. The request body must include at least one property.
4518
+ Updates account-level settings for the budget account associated with the authorized API token. Submit the full response from `GET /me/account/settings` with one or more properties changed, or provide only the properties to update. The request body must include at least one property.
4517
4519
  operationId: updateAccountSettings
4518
4520
  security:
4519
4521
  - bearerSecurity: []
@@ -4558,7 +4560,7 @@ paths:
4558
4560
  - me
4559
4561
  summary: Get user settings
4560
4562
  description: >-
4561
- Returns display and formatting preferences for the authorized user. These settings apply across every budgeting account the user owns or collaborates on.
4563
+ Returns display and formatting preferences for the authorized user. These settings apply across every budget account the user owns or collaborates on.
4562
4564
  operationId: getUserSettings
4563
4565
  security:
4564
4566
  - bearerSecurity: []
@@ -4639,7 +4641,7 @@ paths:
4639
4641
  - me
4640
4642
  summary: Get user account settings
4641
4643
  description: >-
4642
- Returns settings specific to the authorized user within the current budgeting account. These settings do not affect other users or the authorized user's settings in other budgeting accounts.
4644
+ Returns settings specific to the authorized user within the current budget account. These settings do not affect other users or the authorized user's settings in other budget accounts.
4643
4645
  operationId: getUserAccountSettings
4644
4646
  security:
4645
4647
  - bearerSecurity: []
@@ -4647,7 +4649,7 @@ paths:
4647
4649
  - me:read
4648
4650
  responses:
4649
4651
  "200":
4650
- description: Settings for the authorized user in the current budgeting account
4652
+ description: Settings for the authorized user in the current budget account
4651
4653
  content:
4652
4654
  application/json:
4653
4655
  schema:
@@ -4667,7 +4669,7 @@ paths:
4667
4669
  - me
4668
4670
  summary: Update user account settings
4669
4671
  description: >-
4670
- Updates settings specific to the authorized user within the current budgeting account. Submit the full response from `GET /me/user/account/settings` with one or more properties changed, or provide only the properties to update. The request body must include at least one property.
4672
+ Updates settings specific to the authorized user within the current budget account. Submit the full response from `GET /me/user/account/settings` with one or more properties changed, or provide only the properties to update. The request body must include at least one property.
4671
4673
  operationId: updateUserAccountSettings
4672
4674
  security:
4673
4675
  - bearerSecurity: []
@@ -5456,12 +5458,15 @@ paths:
5456
5458
  tags:
5457
5459
  - categories
5458
5460
  summary: Create a new category or category group
5459
- description: Creates a new category with the given name.<br> If the `is_group` attribute is set to true, a category group is created. In this case, the `children` attribute may be set to an array of category IDs to add to the newly created category group.
5461
+ description: Creates a new category with the given name.<br> If `is_group` is `true`, creates a category group; use `children` to add categories to it. OAuth clients that set `children` may also need `categories:update`; see the `children` property for the exact requirement.
5460
5462
  operationId: createCategory
5461
5463
  security:
5462
5464
  - bearerSecurity: []
5463
5465
  - oauth2Security:
5464
5466
  - categories:create
5467
+ - oauth2Security:
5468
+ - categories:create
5469
+ - categories:update
5465
5470
  requestBody:
5466
5471
  required: true
5467
5472
  content:
@@ -5554,6 +5559,8 @@ paths:
5554
5559
  - errMsg: Cannot specify a 'group_id' in request body if 'is_group' is also true
5555
5560
  "401":
5556
5561
  $ref: "#/components/responses/unauthorizedToken"
5562
+ "403":
5563
+ $ref: "#/components/responses/insufficientScope"
5557
5564
  "429":
5558
5565
  $ref: "#/components/responses/rateLimited"
5559
5566
  "500":
@@ -8785,15 +8792,21 @@ paths:
8785
8792
  minimum: 1
8786
8793
  maximum: 2000
8787
8794
  default: 1000
8788
- description: Sets the maximum number of transactions to return. If more match the filter criteria, the response will include a `has_more` attribute set to `true`. See [Pagination](https://lunchmoney.dev/v2/pagination)
8795
+ description: Sets the maximum number of transactions to return.
8796
+ Defaults to `1000`. When more transactions match, `has_more` is
8797
+ `true`. See [Pagination](https://lunchmoney.dev/pagination)
8789
8798
  - name: offset
8790
8799
  in: query
8791
8800
  schema:
8792
8801
  type: integer
8793
- description: Sets the offset for the records returned. This is typically set automatically in the header. See [Pagination](https://lunchmoney.dev/v2/pagination)
8802
+ description: Sets the number of matching transactions to skip before
8803
+ returning results. Increase this query parameter for each page. See
8804
+ [Pagination](https://lunchmoney.dev/pagination)
8794
8805
  responses:
8795
8806
  "200":
8796
- description: Returns an array of transactions. <br><br>The `has_more` property is set to `true` if more transactions are available. See [Pagination](https://lunchmoney.dev/v2/pagination)
8807
+ description: Returns an array of transactions. <br><br>The `has_more`
8808
+ property is set to `true` if more transactions are available. See
8809
+ [Pagination](https://lunchmoney.dev/pagination)
8797
8810
  content:
8798
8811
  application/json:
8799
8812
  schema:
@@ -11867,7 +11880,7 @@ paths:
11867
11880
  - budgets:read
11868
11881
  responses:
11869
11882
  "200":
11870
- description: Budget period settings for the current budget
11883
+ description: Budget period settings for the current budget account
11871
11884
  content:
11872
11885
  application/json:
11873
11886
  schema: