@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 +0 -12
- package/lunch-money-api-v2.yaml +38 -52
- package/package.json +1 -1
- package/version-history.md +7 -2
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
|
package/lunch-money-api-v2.yaml
CHANGED
|
@@ -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.
|
|
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:
|
|
566
|
-
|
|
567
|
-
x-updatable:
|
|
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:
|
|
1462
|
-
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
7819
|
+
message: Request Validation Failure
|
|
7834
7820
|
errors:
|
|
7835
|
-
- errMsg:
|
|
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:
|
|
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:
|
|
7830
|
+
message: Request Validation Failure
|
|
7845
7831
|
errors:
|
|
7846
|
-
- errMsg: You cannot split a
|
|
7832
|
+
- errMsg: You cannot split a group transaction. Ungroup it before splitting.
|
|
7847
7833
|
split split:
|
|
7848
7834
|
value:
|
|
7849
|
-
message:
|
|
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
|
|
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`,
|
|
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:
|
|
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:
|
|
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:
|
|
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
package/version-history.md
CHANGED
|
@@ -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
|
|
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
|
-
|