@lunch-money/v2-api-spec 2.9.0 → 2.9.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/README.md.backup CHANGED
@@ -66,18 +66,6 @@ The OpenAPI spec is the authoritative source for:
66
66
  - Authentication requirements
67
67
  - Status codes and error formats
68
68
 
69
- ##### Versioning
70
-
71
- The Lunch Money API spec uses a modified version of SEMVER for its versioning methodology as follows
72
- - The major version is the API version. This will always be 2 in this repo
73
- - The minor version represents the number of main endpoints (or OpenAPI tags) 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
74
- - 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.
75
-
76
- Details of each version can be found in [./version-history.md](./version-history.md)
77
-
78
- Changes to the spec that modify existing or add new API endpoints should update the version number in the spec and in the package.json accordingly.
79
-
80
-
81
69
  ### Documentation Guides (`v2/docs/*.md`)
82
70
  - **Purpose**: Human-readable guides and tutorials
83
71
  - **Format**: Markdown with custom extensions
@@ -42,7 +42,7 @@ info:
42
42
  license:
43
43
  name: Apache 2.0
44
44
  url: http://www.apache.org/licenses/LICENSE-2.0.html
45
- version: 2.9.0
45
+ version: 2.9.1
46
46
 
47
47
  servers:
48
48
  - url: https://api.lunchmoney.dev/v2
@@ -561,10 +561,11 @@ components:
561
561
  x-updatable: false
562
562
  archived_at:
563
563
  type: string
564
+ format: date-time
564
565
  nullable: true
565
- description: System set date and time of when the category was last archived (in
566
- the ISO 8601 extended format). Ignored if set.
567
- x-updatable: false
566
+ description: If set, updates the archived timestamp for the category.
567
+ Provide an ISO 8601 extended datetime or `null` to clear it.
568
+ x-updatable: true
568
569
  updated_at:
569
570
  type: string
570
571
  format: date-time
@@ -1458,8 +1459,9 @@ components:
1458
1459
  type: string
1459
1460
  format: date-time
1460
1461
  nullable: true
1461
- description: System-set time the tag was archived. Ignored if set.
1462
- x-updatable: false
1462
+ description: If set, updates the archived timestamp for the tag.
1463
+ Provide an ISO 8601 extended datetime or `null` to clear it.
1464
+ x-updatable: true
1463
1465
 
1464
1466
  # The object returned when a DELETE /tag/:id request
1465
1467
  # has an id for a tag that has dependencies
@@ -4461,7 +4463,7 @@ paths:
4461
4463
  example:
4462
4464
  message: Not Found
4463
4465
  errors:
4464
- - errMsg: There is no category with the id:'543210'`
4466
+ - errMsg: "There is no category with the id: 543210."
4465
4467
  "429":
4466
4468
  $ref: "#/components/responses/rateLimited"
4467
4469
  "500":
@@ -4475,7 +4477,7 @@ paths:
4475
4477
 
4476
4478
  You may submit the response from a `GET /categories/{id}` as the request body; however, only certain
4477
4479
  properties can be updated using this API. The following properties are
4478
- accepted in the request body but their values will be ignored: `id`, `is_group`,`archived_at`, `updated_at`, `created_at`, and `order`.<br><br>
4480
+ accepted in the request body but their values will be ignored: `id`, `is_group`, `updated_at`, `created_at`, and `order`.<br><br>
4479
4481
 
4480
4482
  It is also possible to provide only the properties to be updated in the
4481
4483
  request body, as long as the request includes at least one of the
@@ -4621,7 +4623,7 @@ paths:
4621
4623
  example:
4622
4624
  message: Not Found
4623
4625
  errors:
4624
- - errMsg: There is no category with the id:'543210'`
4626
+ - errMsg: "There is no category with the id: 543210."
4625
4627
  "429":
4626
4628
  $ref: "#/components/responses/rateLimited"
4627
4629
  "500":
@@ -4676,7 +4678,7 @@ paths:
4676
4678
  example:
4677
4679
  message: Not Found
4678
4680
  errors:
4679
- - errMsg: There is no category with the id:'543210'`
4681
+ - errMsg: "There is no category with the id: 543210."
4680
4682
  "422":
4681
4683
  description: Unprocessable Entity
4682
4684
  content:
@@ -5139,7 +5141,7 @@ paths:
5139
5141
  example:
5140
5142
  message: Not Found
5141
5143
  errors:
5142
- - errMsg: There is no manual account with the id:'543210'`
5144
+ - errMsg: "There is no manual account with the id: 543210."
5143
5145
  "429":
5144
5146
  $ref: "#/components/responses/rateLimited"
5145
5147
  "500":
@@ -5196,7 +5198,7 @@ paths:
5196
5198
  example:
5197
5199
  message: Not Found
5198
5200
  errors:
5199
- - errMsg: There is no manual account with the id:'543210'`
5201
+ - errMsg: "There is no manual account with the id: 543210."
5200
5202
  "429":
5201
5203
  $ref: "#/components/responses/rateLimited"
5202
5204
  "500":
@@ -6358,7 +6360,7 @@ paths:
6358
6360
  examples:
6359
6361
  invalid ids in new transactions:
6360
6362
  value:
6361
- message: Invalid Request Body
6363
+ message: Request Validation Failure
6362
6364
  errors:
6363
6365
  - errMsg: "transactions[0] manual account ID does not exist: 9999999"
6364
6366
  transaction_index: 0
@@ -6377,7 +6379,7 @@ paths:
6377
6379
  recurring_id: 88888888
6378
6380
  duplicate external_ids within request:
6379
6381
  value:
6380
- message: Invalid Request Body
6382
+ message: Request Validation Failure
6381
6383
  errors:
6382
6384
  - errMsg: Duplicate External IDs found in the request body
6383
6385
  error: Duplicate External ID
@@ -6653,7 +6655,7 @@ paths:
6653
6655
  examples:
6654
6656
  invalid ids in id list:
6655
6657
  value:
6656
- message: Invalid Request Body
6658
+ message: Request Validation Failure
6657
6659
  errors:
6658
6660
  - errMsg: "transactions[0] manual account ID does not exist: 999999999"
6659
6661
  transaction_index: 0
@@ -6672,7 +6674,7 @@ paths:
6672
6674
  recurring_id: 888888888
6673
6675
  update with errors:
6674
6676
  value:
6675
- message: Invalid Request Body
6677
+ message: Request Validation Failure
6676
6678
  errors:
6677
6679
  - errMsg: "There is no transaction with the id: 9999999"
6678
6680
  error: Invalid Transaction ID
@@ -6730,7 +6732,7 @@ paths:
6730
6732
  locked_property: amount
6731
6733
  duplicate external_ids within request:
6732
6734
  value:
6733
- message: Invalid Request Body
6735
+ message: Request Validation Failure
6734
6736
  errors:
6735
6737
  - errMsg: Duplicate External IDs found in the request body
6736
6738
  error: Duplicate External ID
@@ -6748,7 +6750,7 @@ paths:
6748
6750
  - 3
6749
6751
  invalid ids:
6750
6752
  value:
6751
- message: Invalid Request Body
6753
+ message: Request Validation Failure
6752
6754
  errors:
6753
6755
  - errMsg: "There is no transaction with the id: 1"
6754
6756
  error: Invalid Transaction ID
@@ -7117,7 +7119,7 @@ paths:
7117
7119
  example:
7118
7120
  message: Not Found
7119
7121
  errors:
7120
- - errMsg: There is no transaction with the id:'543210'`
7122
+ - errMsg: "There is no transaction with the id: 543210."
7121
7123
  "429":
7122
7124
  $ref: "#/components/responses/rateLimited"
7123
7125
  "500":
@@ -7256,7 +7258,7 @@ paths:
7256
7258
  example:
7257
7259
  message: Not Found
7258
7260
  errors:
7259
- - errMsg: There is no transaction with the id:'543210'`
7261
+ - errMsg: "There is no transaction with the id: 543210."
7260
7262
  "429":
7261
7263
  $ref: "#/components/responses/rateLimited"
7262
7264
  "500":
@@ -7309,7 +7311,7 @@ paths:
7309
7311
  example:
7310
7312
  message: Not Found
7311
7313
  errors:
7312
- - errMsg: There is no transaction with the id:'543210'`
7314
+ - errMsg: "There is no transaction with the id: 543210."
7313
7315
  "429":
7314
7316
  $ref: "#/components/responses/rateLimited"
7315
7317
  "500":
@@ -7830,30 +7832,30 @@ paths:
7830
7832
  examples:
7831
7833
  bad math:
7832
7834
  value:
7833
- message: Invalid Request Body
7835
+ message: Request Validation Failure
7834
7836
  errors:
7835
- - errMsg: Sums of split transactions do not add up to the original transaction
7836
- amount!
7837
+ - errMsg: Sum of split transactions do not add up to the original transaction amount.
7837
7838
  split recurring:
7838
7839
  value:
7839
- message: Invalid Request Body
7840
+ message: Request Validation Failure
7840
7841
  errors:
7841
- - errMsg: You cannot split a recurring transaction!
7842
+ - errMsg: You cannot split a recurring transaction.
7843
+ id: 2112150655
7842
7844
  split group:
7843
7845
  value:
7844
- message: Invalid Request Body
7846
+ message: Request Validation Failure
7845
7847
  errors:
7846
- - errMsg: You cannot split a grouped transaction!
7848
+ - errMsg: You cannot split a group transaction. Ungroup it before splitting.
7847
7849
  split split:
7848
7850
  value:
7849
- message: Invalid Request Body
7851
+ message: Request Validation Failure
7850
7852
  errors:
7851
- - errMsg: You cannot split an already split transaction!"
7853
+ - errMsg: You cannot split an already split transaction. Unsplit it before splitting again.
7852
7854
  missing amount in child transaction:
7853
7855
  value:
7854
7856
  message: Invalid Request Body
7855
7857
  errors:
7856
- - errMsg: "child_transactions[0] amount is required."
7858
+ - errMsg: "child_transactions[0] is missing required property 'amount' in request body."
7857
7859
  child_transactions_index: 0
7858
7860
  error: Missing required property
7859
7861
  invalid_property: amount
@@ -8327,7 +8329,7 @@ paths:
8327
8329
 
8328
8330
  You may submit the response from a `GET /tags/{id}` as the request body, however only certain
8329
8331
  properties can be updated using this API. The following system set properties are
8330
- accepted in the request body but their values will be ignored: `id`, `updated_at`, `created_at`, and `archived_at`.<br><br>
8332
+ accepted in the request body but their values will be ignored: `id`, `updated_at`, and `created_at`.<br><br>
8331
8333
 
8332
8334
  It is also possible to provide only the properties to be updated in the
8333
8335
  request body, as long as the request includes at least one of the
@@ -8407,9 +8409,9 @@ paths:
8407
8409
  schema:
8408
8410
  $ref: "#/components/schemas/errorResponseObject"
8409
8411
  example:
8410
- message: Invalid Request Body
8412
+ message: Request Validation Failure
8411
8413
  errors:
8412
- - errMsg: "A request to update a tag must include at least one of the following properties: name, description, archived"
8414
+ - errMsg: "A request to update a tag must include at least one of the following properties: name, description, archived."
8413
8415
  "401":
8414
8416
  $ref: "#/components/responses/unauthorizedToken"
8415
8417
  "404":
@@ -8421,7 +8423,7 @@ paths:
8421
8423
  example:
8422
8424
  message: Not Found
8423
8425
  errors:
8424
- - errMsg: There is no tag with the id:'543210'`
8426
+ - errMsg: "There is no tag with the id: 543210."
8425
8427
  "429":
8426
8428
  $ref: "#/components/responses/rateLimited"
8427
8429
  "500":
@@ -8476,7 +8478,7 @@ paths:
8476
8478
  example:
8477
8479
  message: Not Found
8478
8480
  errors:
8479
- - errMsg: There is no tag with the id:'543210'`
8481
+ - errMsg: "There is no tag with the id: 543210."
8480
8482
  "422":
8481
8483
  description: Unprocessable Entity
8482
8484
  content:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunch-money/v2-api-spec",
3
- "version": "2.9.0",
3
+ "version": "2.9.1",
4
4
  "description": "OpenAPI specification and version history for the Lunch Money v2 API",
5
5
  "main": "lunch-money-api-v2.yaml",
6
6
  "files": [
@@ -5,6 +5,9 @@ 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.9.1 - Apr 22, 2026
9
+ - You may now set `archived_at` when modifying a category or tag via the `PUT /categories` or `PUT /tags` endpoints.
10
+
8
11
  ## v2.9.0 - Feb 26, 2026
9
12
  - Add initial `/budgets` endpoint support:
10
13
  - `GET /budgets/settings` for account budget settings
@@ -146,7 +149,7 @@ The Lunch Money API spec uses a modified version of SEMVER for its versioning me
146
149
  - It is also now permissible to include strings in the `children` property. These will be used as the names of new child categories that will be created.
147
150
  - This release also updates the following schemas:
148
151
  - Correctly specifies that all properties of the manualAccountObject are required
149
- - Updates the updateManualAccountRequestObject and updatePlaidManualAccountRequest object to allow the `balance` property to be either a string or a number.
152
+ - Updates the updateManualAccountObject and updatePlaidManualAccountObject to allow the `balance` property to be either a string or a number.
150
153
  - Updates the userObject to include the `debits_as_negative` property. The documentation for Transaction Objects returned by GET requests have been updated to reflect how/if this setting affects the `amount` property of the transaction.
151
154
  - Updates the childCategoryObject to restore the `exclude_from_budget`, `exclude_from_totals` and `is_income` properties. These properties are inherited from the Category Group and not settable but are provided for convenience.
152
155