@lunch-money/v2-api-spec 2.9.0 → 2.9.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.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.2
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
@@ -1529,14 +1531,10 @@ components:
1529
1531
  Name of payee set by the user, the financial institution, or by
1530
1532
  a matched recurring item. This will match the value
1531
1533
  displayed in payee field on the transactions page in the GUI.
1532
- minLength: 0
1533
- maxLength: 140
1534
1534
  original_name:
1535
1535
  type: string
1536
1536
  nullable: true
1537
1537
  description: Original payee name from the source (financial institution, CSV, etc.). For Plaid transactions, this is the raw name before normalization. For manual/API transactions, this typically matches `payee`. May be null for older transactions.
1538
- minLength: 0
1539
- maxLength: 140
1540
1538
  category_id:
1541
1539
  type: integer
1542
1540
  format: int32
@@ -1803,14 +1801,10 @@ components:
1803
1801
  Name of payee set by the user, the financial institution, or by
1804
1802
  a matched recurring item. This will match the value
1805
1803
  displayed in payee field on the transactions page in the GUI.
1806
- minLength: 0
1807
- maxLength: 140
1808
1804
  original_name:
1809
1805
  type: string
1810
1806
  nullable: true
1811
1807
  description: Original payee name from the source (financial institution, CSV, etc.). For Plaid transactions, this is the raw name before normalization. For manual/API transactions, this typically matches `payee`. May be null for older transactions.
1812
- minLength: 0
1813
- maxLength: 140
1814
1808
  category_id:
1815
1809
  type: integer
1816
1810
  format: int32
@@ -2048,14 +2042,10 @@ components:
2048
2042
  payee:
2049
2043
  type: string
2050
2044
  description: Name of payee for the transaction
2051
- minLength: 0
2052
- maxLength: 140
2053
2045
  original_name:
2054
2046
  type: string
2055
2047
  nullable: true
2056
2048
  description: Original payee name. If not provided, defaults to `payee` value.
2057
- minLength: 0
2058
- maxLength: 140
2059
2049
  category_id:
2060
2050
  type: integer
2061
2051
  format: int32
@@ -2188,15 +2178,11 @@ components:
2188
2178
  type: string
2189
2179
  description: |
2190
2180
  The new payee for the transaction.
2191
- minLength: 0
2192
- maxLength: 140
2193
2181
  x-updatable: true
2194
2182
  original_name:
2195
2183
  type: string
2196
2184
  nullable: true
2197
2185
  description: Original payee name. Cannot be changed. Ignored if set.
2198
- minLength: 0
2199
- maxLength: 140
2200
2186
  x-updatable: false
2201
2187
  category_id:
2202
2188
  type: integer
@@ -4461,7 +4447,7 @@ paths:
4461
4447
  example:
4462
4448
  message: Not Found
4463
4449
  errors:
4464
- - errMsg: There is no category with the id:'543210'`
4450
+ - errMsg: "There is no category with the id: 543210."
4465
4451
  "429":
4466
4452
  $ref: "#/components/responses/rateLimited"
4467
4453
  "500":
@@ -4475,7 +4461,7 @@ paths:
4475
4461
 
4476
4462
  You may submit the response from a `GET /categories/{id}` as the request body; however, only certain
4477
4463
  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>
4464
+ accepted in the request body but their values will be ignored: `id`, `is_group`, `updated_at`, `created_at`, and `order`.<br><br>
4479
4465
 
4480
4466
  It is also possible to provide only the properties to be updated in the
4481
4467
  request body, as long as the request includes at least one of the
@@ -4621,7 +4607,7 @@ paths:
4621
4607
  example:
4622
4608
  message: Not Found
4623
4609
  errors:
4624
- - errMsg: There is no category with the id:'543210'`
4610
+ - errMsg: "There is no category with the id: 543210."
4625
4611
  "429":
4626
4612
  $ref: "#/components/responses/rateLimited"
4627
4613
  "500":
@@ -4676,7 +4662,7 @@ paths:
4676
4662
  example:
4677
4663
  message: Not Found
4678
4664
  errors:
4679
- - errMsg: There is no category with the id:'543210'`
4665
+ - errMsg: "There is no category with the id: 543210."
4680
4666
  "422":
4681
4667
  description: Unprocessable Entity
4682
4668
  content:
@@ -5139,7 +5125,7 @@ paths:
5139
5125
  example:
5140
5126
  message: Not Found
5141
5127
  errors:
5142
- - errMsg: There is no manual account with the id:'543210'`
5128
+ - errMsg: "There is no manual account with the id: 543210."
5143
5129
  "429":
5144
5130
  $ref: "#/components/responses/rateLimited"
5145
5131
  "500":
@@ -5196,7 +5182,7 @@ paths:
5196
5182
  example:
5197
5183
  message: Not Found
5198
5184
  errors:
5199
- - errMsg: There is no manual account with the id:'543210'`
5185
+ - errMsg: "There is no manual account with the id: 543210."
5200
5186
  "429":
5201
5187
  $ref: "#/components/responses/rateLimited"
5202
5188
  "500":
@@ -6358,7 +6344,7 @@ paths:
6358
6344
  examples:
6359
6345
  invalid ids in new transactions:
6360
6346
  value:
6361
- message: Invalid Request Body
6347
+ message: Request Validation Failure
6362
6348
  errors:
6363
6349
  - errMsg: "transactions[0] manual account ID does not exist: 9999999"
6364
6350
  transaction_index: 0
@@ -6377,7 +6363,7 @@ paths:
6377
6363
  recurring_id: 88888888
6378
6364
  duplicate external_ids within request:
6379
6365
  value:
6380
- message: Invalid Request Body
6366
+ message: Request Validation Failure
6381
6367
  errors:
6382
6368
  - errMsg: Duplicate External IDs found in the request body
6383
6369
  error: Duplicate External ID
@@ -6653,7 +6639,7 @@ paths:
6653
6639
  examples:
6654
6640
  invalid ids in id list:
6655
6641
  value:
6656
- message: Invalid Request Body
6642
+ message: Request Validation Failure
6657
6643
  errors:
6658
6644
  - errMsg: "transactions[0] manual account ID does not exist: 999999999"
6659
6645
  transaction_index: 0
@@ -6672,7 +6658,7 @@ paths:
6672
6658
  recurring_id: 888888888
6673
6659
  update with errors:
6674
6660
  value:
6675
- message: Invalid Request Body
6661
+ message: Request Validation Failure
6676
6662
  errors:
6677
6663
  - errMsg: "There is no transaction with the id: 9999999"
6678
6664
  error: Invalid Transaction ID
@@ -6730,7 +6716,7 @@ paths:
6730
6716
  locked_property: amount
6731
6717
  duplicate external_ids within request:
6732
6718
  value:
6733
- message: Invalid Request Body
6719
+ message: Request Validation Failure
6734
6720
  errors:
6735
6721
  - errMsg: Duplicate External IDs found in the request body
6736
6722
  error: Duplicate External ID
@@ -6748,7 +6734,7 @@ paths:
6748
6734
  - 3
6749
6735
  invalid ids:
6750
6736
  value:
6751
- message: Invalid Request Body
6737
+ message: Request Validation Failure
6752
6738
  errors:
6753
6739
  - errMsg: "There is no transaction with the id: 1"
6754
6740
  error: Invalid Transaction ID
@@ -7117,7 +7103,7 @@ paths:
7117
7103
  example:
7118
7104
  message: Not Found
7119
7105
  errors:
7120
- - errMsg: There is no transaction with the id:'543210'`
7106
+ - errMsg: "There is no transaction with the id: 543210."
7121
7107
  "429":
7122
7108
  $ref: "#/components/responses/rateLimited"
7123
7109
  "500":
@@ -7256,7 +7242,7 @@ paths:
7256
7242
  example:
7257
7243
  message: Not Found
7258
7244
  errors:
7259
- - errMsg: There is no transaction with the id:'543210'`
7245
+ - errMsg: "There is no transaction with the id: 543210."
7260
7246
  "429":
7261
7247
  $ref: "#/components/responses/rateLimited"
7262
7248
  "500":
@@ -7309,7 +7295,7 @@ paths:
7309
7295
  example:
7310
7296
  message: Not Found
7311
7297
  errors:
7312
- - errMsg: There is no transaction with the id:'543210'`
7298
+ - errMsg: "There is no transaction with the id: 543210."
7313
7299
  "429":
7314
7300
  $ref: "#/components/responses/rateLimited"
7315
7301
  "500":
@@ -7830,30 +7816,30 @@ paths:
7830
7816
  examples:
7831
7817
  bad math:
7832
7818
  value:
7833
- message: Invalid Request Body
7819
+ message: Request Validation Failure
7834
7820
  errors:
7835
- - errMsg: Sums of split transactions do not add up to the original transaction
7836
- amount!
7821
+ - errMsg: Sum of split transactions do not add up to the original transaction amount.
7837
7822
  split recurring:
7838
7823
  value:
7839
- message: Invalid Request Body
7824
+ message: Request Validation Failure
7840
7825
  errors:
7841
- - errMsg: You cannot split a recurring transaction!
7826
+ - errMsg: You cannot split a recurring transaction.
7827
+ id: 2112150655
7842
7828
  split group:
7843
7829
  value:
7844
- message: Invalid Request Body
7830
+ message: Request Validation Failure
7845
7831
  errors:
7846
- - errMsg: You cannot split a grouped transaction!
7832
+ - errMsg: You cannot split a group transaction. Ungroup it before splitting.
7847
7833
  split split:
7848
7834
  value:
7849
- message: Invalid Request Body
7835
+ message: Request Validation Failure
7850
7836
  errors:
7851
- - errMsg: You cannot split an already split transaction!"
7837
+ - errMsg: You cannot split an already split transaction. Unsplit it before splitting again.
7852
7838
  missing amount in child transaction:
7853
7839
  value:
7854
7840
  message: Invalid Request Body
7855
7841
  errors:
7856
- - errMsg: "child_transactions[0] amount is required."
7842
+ - errMsg: "child_transactions[0] is missing required property 'amount' in request body."
7857
7843
  child_transactions_index: 0
7858
7844
  error: Missing required property
7859
7845
  invalid_property: amount
@@ -8327,7 +8313,7 @@ paths:
8327
8313
 
8328
8314
  You may submit the response from a `GET /tags/{id}` as the request body, however only certain
8329
8315
  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>
8316
+ accepted in the request body but their values will be ignored: `id`, `updated_at`, and `created_at`.<br><br>
8331
8317
 
8332
8318
  It is also possible to provide only the properties to be updated in the
8333
8319
  request body, as long as the request includes at least one of the
@@ -8407,9 +8393,9 @@ paths:
8407
8393
  schema:
8408
8394
  $ref: "#/components/schemas/errorResponseObject"
8409
8395
  example:
8410
- message: Invalid Request Body
8396
+ message: Request Validation Failure
8411
8397
  errors:
8412
- - errMsg: "A request to update a tag must include at least one of the following properties: name, description, archived"
8398
+ - errMsg: "A request to update a tag must include at least one of the following properties: name, description, archived."
8413
8399
  "401":
8414
8400
  $ref: "#/components/responses/unauthorizedToken"
8415
8401
  "404":
@@ -8421,7 +8407,7 @@ paths:
8421
8407
  example:
8422
8408
  message: Not Found
8423
8409
  errors:
8424
- - errMsg: There is no tag with the id:'543210'`
8410
+ - errMsg: "There is no tag with the id: 543210."
8425
8411
  "429":
8426
8412
  $ref: "#/components/responses/rateLimited"
8427
8413
  "500":
@@ -8476,7 +8462,7 @@ paths:
8476
8462
  example:
8477
8463
  message: Not Found
8478
8464
  errors:
8479
- - errMsg: There is no tag with the id:'543210'`
8465
+ - errMsg: "There is no tag with the id: 543210."
8480
8466
  "422":
8481
8467
  description: Unprocessable Entity
8482
8468
  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.2",
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,12 @@ 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.2 - Apr 22, 2026
9
+ - Increase allowable length for a transaction `payee`
10
+
11
+ ## v2.9.1 - Apr 22, 2026
12
+ - You may now set `archived_at` when modifying a category or tag via the `PUT /categories` or `PUT /tags` endpoints.
13
+
8
14
  ## v2.9.0 - Feb 26, 2026
9
15
  - Add initial `/budgets` endpoint support:
10
16
  - `GET /budgets/settings` for account budget settings
@@ -146,7 +152,7 @@ The Lunch Money API spec uses a modified version of SEMVER for its versioning me
146
152
  - 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
153
  - This release also updates the following schemas:
148
154
  - 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.
155
+ - Updates the updateManualAccountObject and updatePlaidManualAccountObject to allow the `balance` property to be either a string or a number.
150
156
  - 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
157
  - 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
158
 
@@ -346,4 +352,3 @@ This is the initial branch using the versioning described above
346
352
  - It is the v2 version of the API - hence the major version 2.
347
353
  - The API Spec currently supports 3 endpoints /me, /categories, and /transactions. hence the minor version 3.
348
354
  - This version of the spec contains minor modifications to the previously published spec and therefore has a revision number 1
349
-