@lunch-money/v2-api-spec 2.11.0-preview.2 → 2.11.0-preview.4
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/lunch-money-api-v2.yaml +138 -178
- package/package.json +1 -1
- package/version-history.md +5 -1
package/lunch-money-api-v2.yaml
CHANGED
|
@@ -2,50 +2,37 @@ openapi: 3.0.2
|
|
|
2
2
|
info:
|
|
3
3
|
title: Lunch Money API - v2
|
|
4
4
|
description: |-
|
|
5
|
-
Welcome to the
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
See the [version history](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/version-history) for what is new in this release.
|
|
9
|
-
New functionality may only be available in the Mock Service until the release is finalized. <br><br>
|
|
10
|
-
|
|
11
|
-
The latest complete implementation of the spec is for the **v2.8.5** release and can be found [here](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/). <br><br>
|
|
12
|
-
Feedback on any of the API design is welcome, but we are particularly interested in getting feedback on most recent changes in the [version history](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/version-history).
|
|
5
|
+
Welcome to the Lunch Money v2 API reference. This is the **v2.11.0** spec. It includes previews of the proposed `/crypto` and `/balance_history` endpoints. Only the mock service works with these endpoints.<br><br>
|
|
6
|
+
The most recent stable version of the API is v2.9.4 and is available at:
|
|
7
|
+
`https://api.lunchmoney.dev/v2`
|
|
13
8
|
|
|
14
9
|
------------------------------------------------------------------------------------------------
|
|
15
|
-
Welcome to the Lunch Money v2 API.
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+
### Introduction
|
|
18
12
|
|
|
19
|
-
`https://api.lunchmoney.dev/v2
|
|
13
|
+
The API is available at `https://api.lunchmoney.dev/v2`. Get your access token from the [Lunch Money developers page](https://my.lunchmoney.app/developers).
|
|
20
14
|
|
|
21
|
-
<span class="red-text"><strong>
|
|
22
|
-
period and bugs may still exist. We strongly encourage users to use the mock service or create a test budget with sample data as the first step to interacting with the v2 API.</strong></span>
|
|
23
|
-
See the [Getting Started Guide](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/getting-started) for more information on using a test budget.<p>
|
|
15
|
+
<span class="red-text"><strong>The v2 API is in open alpha and is still subject to change. Use the mock server or a test budget when getting started.</strong></span>
|
|
24
16
|
|
|
25
|
-
|
|
17
|
+
**Static Mock Server**
|
|
26
18
|
|
|
27
|
-
|
|
19
|
+
Explore the API without an access token or risk to real data. Select **"Static Mock v2 Lunch Money API Server"** from the Server dropdown, then set your Bearer token to any string with 11 or more characters.
|
|
28
20
|
|
|
29
|
-
|
|
30
|
-
This will allow you to become familiar with the API without having to create an access token, and eliminates the possibility of changing real data. <p>
|
|
31
|
-
To access this endpoint, select the second endpoint in the "Server" dropdown to the right. When selected, you should see "Static Mock v2 Lunch Money API Server".<br>
|
|
32
|
-
When using this server, set your Bearer token to any string with 11 or more characters.
|
|
21
|
+
**Client Libraries & SDKs**
|
|
33
22
|
|
|
34
|
-
|
|
23
|
+
An official TypeScript SDK is available on [NPM](https://www.npmjs.com/package/@lunch-money/v2-api-spec) and [GitHub](https://github.com/lunch-money/lunch-money-js-v2). For Python or other languages, see [lunchmoney-clients](https://github.com/juftin/lunchmoney-clients) or generate a client from this OpenAPI spec.
|
|
35
24
|
|
|
36
|
-
|
|
25
|
+
**Migrating from v1**
|
|
37
26
|
|
|
38
|
-
|
|
27
|
+
The v2 API is not backwards compatible with v1. See the [Migration Guide](https://alpha.lunchmoney.dev/v2/migration-guide) for details.
|
|
39
28
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- [
|
|
44
|
-
- [
|
|
45
|
-
- [Migration Guide](https://
|
|
46
|
-
- [Rate Limits](https://
|
|
47
|
-
- [Current v1 Lunch Money API Documentation](https://lunchmoney.dev)
|
|
48
|
-
- [Awesome Lunch Money Projects](https://github.com/lunch-money/awesome-lunchmoney?tab=readme-ov-file)
|
|
29
|
+
**Useful links**
|
|
30
|
+
- [Developer Portal](https://alpha.lunchmoney.dev/v2/introduction)
|
|
31
|
+
- [Getting Started Guide](https://alpha.lunchmoney.dev/v2/getting-started)
|
|
32
|
+
- [v2 API Overview](https://alpha.lunchmoney.dev/v2/overview)
|
|
33
|
+
- [Version History](https://alpha.lunchmoney.dev/v2/version-history)
|
|
34
|
+
- [Migration Guide](https://alpha.lunchmoney.dev/v2/migration-guide)
|
|
35
|
+
- [Rate Limits](https://alpha.lunchmoney.dev/v2/rate-limits)
|
|
49
36
|
termsOfService: https://lunchmoney.dev/#current-status
|
|
50
37
|
contact:
|
|
51
38
|
email: devsupport@lunchmoney.app
|
|
@@ -679,7 +666,6 @@ components:
|
|
|
679
666
|
cryptoManualObject:
|
|
680
667
|
type: object
|
|
681
668
|
title: manual crypto object
|
|
682
|
-
x-internal: true
|
|
683
669
|
additionalProperties: false
|
|
684
670
|
properties:
|
|
685
671
|
id:
|
|
@@ -719,13 +705,22 @@ components:
|
|
|
719
705
|
description: CoinGecko identifier associated with this balance
|
|
720
706
|
to_base:
|
|
721
707
|
type: number
|
|
722
|
-
|
|
708
|
+
nullable: true
|
|
709
|
+
description: Balance converted to the user's primary currency. May be null if no conversion was available.
|
|
723
710
|
balance_as_of:
|
|
724
711
|
type: string
|
|
725
712
|
format: date-time
|
|
726
713
|
nullable: true
|
|
727
|
-
description: Date/time the balance was last updated in
|
|
728
|
-
extended format
|
|
714
|
+
description: Date/time the manual balance record was last updated in
|
|
715
|
+
ISO 8601 extended format. This is currently based on the manual
|
|
716
|
+
crypto record's updated_at timestamp.
|
|
717
|
+
exchange_rate_as_of:
|
|
718
|
+
type: string
|
|
719
|
+
format: date-time
|
|
720
|
+
nullable: true
|
|
721
|
+
description: Date/time the exchange rate used to calculate to_base was
|
|
722
|
+
last updated in ISO 8601 extended format. Null when no exchange rate was
|
|
723
|
+
used or no conversion was available.
|
|
729
724
|
created_by_name:
|
|
730
725
|
type: string
|
|
731
726
|
nullable: true
|
|
@@ -750,6 +745,7 @@ components:
|
|
|
750
745
|
- coingecko_id
|
|
751
746
|
- to_base
|
|
752
747
|
- balance_as_of
|
|
748
|
+
- exchange_rate_as_of
|
|
753
749
|
- created_by_name
|
|
754
750
|
- created_at
|
|
755
751
|
- updated_at
|
|
@@ -758,7 +754,6 @@ components:
|
|
|
758
754
|
cryptoSyncedBalance:
|
|
759
755
|
type: object
|
|
760
756
|
title: synced crypto balance object
|
|
761
|
-
x-internal: true
|
|
762
757
|
additionalProperties: false
|
|
763
758
|
properties:
|
|
764
759
|
name:
|
|
@@ -783,13 +778,21 @@ components:
|
|
|
783
778
|
description: CoinGecko identifier associated with this balance
|
|
784
779
|
to_base:
|
|
785
780
|
type: number
|
|
786
|
-
|
|
781
|
+
nullable: true
|
|
782
|
+
description: Balance converted to the user's primary currency. May be null if no conversion was available.
|
|
787
783
|
balance_as_of:
|
|
788
784
|
type: string
|
|
789
785
|
format: date-time
|
|
790
786
|
nullable: true
|
|
791
787
|
description: Date/time the balance was last updated in ISO 8601
|
|
792
|
-
extended format
|
|
788
|
+
extended format.
|
|
789
|
+
exchange_rate_as_of:
|
|
790
|
+
type: string
|
|
791
|
+
format: date-time
|
|
792
|
+
nullable: true
|
|
793
|
+
description: Date/time the exchange rate used to calculate to_base was
|
|
794
|
+
last updated in ISO 8601 extended format. Null when no exchange rate was
|
|
795
|
+
used or no conversion was available.
|
|
793
796
|
updated_at:
|
|
794
797
|
type: string
|
|
795
798
|
format: date-time
|
|
@@ -802,12 +805,12 @@ components:
|
|
|
802
805
|
- coingecko_id
|
|
803
806
|
- to_base
|
|
804
807
|
- balance_as_of
|
|
808
|
+
- exchange_rate_as_of
|
|
805
809
|
- updated_at
|
|
806
810
|
|
|
807
811
|
syncedCryptoAccount:
|
|
808
812
|
type: object
|
|
809
813
|
title: synced crypto account
|
|
810
|
-
x-internal: true
|
|
811
814
|
additionalProperties: false
|
|
812
815
|
properties:
|
|
813
816
|
id:
|
|
@@ -1072,8 +1075,16 @@ components:
|
|
|
1072
1075
|
type: string
|
|
1073
1076
|
format: date-time
|
|
1074
1077
|
nullable: true
|
|
1075
|
-
description: System defined date/time the balance was
|
|
1076
|
-
ISO 8601 extended format. Ignored if set
|
|
1078
|
+
description: System defined date/time the manual balance record was
|
|
1079
|
+
last updated in ISO 8601 extended format. Ignored if set
|
|
1080
|
+
x-updatable: false
|
|
1081
|
+
exchange_rate_as_of:
|
|
1082
|
+
type: string
|
|
1083
|
+
format: date-time
|
|
1084
|
+
nullable: true
|
|
1085
|
+
description: System defined date/time the exchange rate used to
|
|
1086
|
+
calculate to_base was observed in ISO 8601 extended format. Ignored
|
|
1087
|
+
if set
|
|
1077
1088
|
x-updatable: false
|
|
1078
1089
|
created_by_name:
|
|
1079
1090
|
type: string
|
|
@@ -1614,6 +1625,7 @@ components:
|
|
|
1614
1625
|
type: object
|
|
1615
1626
|
description: Source information for a manual account balance history entry.
|
|
1616
1627
|
additionalProperties: false
|
|
1628
|
+
x-internal: true
|
|
1617
1629
|
properties:
|
|
1618
1630
|
type:
|
|
1619
1631
|
type: string
|
|
@@ -1631,6 +1643,7 @@ components:
|
|
|
1631
1643
|
type: object
|
|
1632
1644
|
description: Source information for a Plaid-synced account balance history entry.
|
|
1633
1645
|
additionalProperties: false
|
|
1646
|
+
x-internal: true
|
|
1634
1647
|
properties:
|
|
1635
1648
|
type:
|
|
1636
1649
|
type: string
|
|
@@ -1648,6 +1661,7 @@ components:
|
|
|
1648
1661
|
type: object
|
|
1649
1662
|
description: Source information for a manually-tracked cryptocurrency balance history entry.
|
|
1650
1663
|
additionalProperties: false
|
|
1664
|
+
x-internal: true
|
|
1651
1665
|
properties:
|
|
1652
1666
|
type:
|
|
1653
1667
|
type: string
|
|
@@ -1750,9 +1764,10 @@ components:
|
|
|
1750
1764
|
- subtype
|
|
1751
1765
|
- mask
|
|
1752
1766
|
- symbol
|
|
1767
|
+
|
|
1753
1768
|
balanceHistoryAccountObject:
|
|
1754
1769
|
type: object
|
|
1755
|
-
title: balance history account object
|
|
1770
|
+
title: balance history for an account object
|
|
1756
1771
|
additionalProperties: false
|
|
1757
1772
|
description: Historical balance entries grouped under a single account source.
|
|
1758
1773
|
properties:
|
|
@@ -1787,6 +1802,7 @@ components:
|
|
|
1787
1802
|
type: object
|
|
1788
1803
|
title: balance history entry object
|
|
1789
1804
|
additionalProperties: false
|
|
1805
|
+
x-internal: true
|
|
1790
1806
|
description: A historical balance entry for a single account on a single date.
|
|
1791
1807
|
properties:
|
|
1792
1808
|
id:
|
|
@@ -1898,37 +1914,6 @@ components:
|
|
|
1898
1914
|
required:
|
|
1899
1915
|
- balances
|
|
1900
1916
|
|
|
1901
|
-
balanceHistoryUpdateErrorObject:
|
|
1902
|
-
type: object
|
|
1903
|
-
x-internal: true
|
|
1904
|
-
additionalProperties: true
|
|
1905
|
-
properties:
|
|
1906
|
-
request_balances_index:
|
|
1907
|
-
type: integer
|
|
1908
|
-
format: int32
|
|
1909
|
-
description: Zero-based index into the `balances` request array
|
|
1910
|
-
message:
|
|
1911
|
-
type: string
|
|
1912
|
-
description: Error message describing why the row could not be updated
|
|
1913
|
-
required:
|
|
1914
|
-
- request_balances_index
|
|
1915
|
-
- message
|
|
1916
|
-
|
|
1917
|
-
upsertBalanceHistoryResponseObject:
|
|
1918
|
-
type: object
|
|
1919
|
-
x-internal: true
|
|
1920
|
-
additionalProperties: false
|
|
1921
|
-
properties:
|
|
1922
|
-
updated_balance_history:
|
|
1923
|
-
$ref: "#/components/schemas/balanceHistoryAccountObject"
|
|
1924
|
-
errors:
|
|
1925
|
-
type: array
|
|
1926
|
-
items:
|
|
1927
|
-
$ref: "#/components/schemas/balanceHistoryUpdateErrorObject"
|
|
1928
|
-
required:
|
|
1929
|
-
- updated_balance_history
|
|
1930
|
-
- errors
|
|
1931
|
-
|
|
1932
1917
|
updateBalanceHistoryDetailsRequestObject:
|
|
1933
1918
|
type: object
|
|
1934
1919
|
x-internal: true
|
|
@@ -2495,8 +2480,6 @@ components:
|
|
|
2495
2480
|
Any transaction notes set by the user or by
|
|
2496
2481
|
a matched recurring item. This will match the value
|
|
2497
2482
|
displayed in notes field on the transactions page in the Lunch Money app.
|
|
2498
|
-
minLength: 0
|
|
2499
|
-
maxLength: 350
|
|
2500
2483
|
status:
|
|
2501
2484
|
type: string
|
|
2502
2485
|
# description: >
|
|
@@ -2732,8 +2715,6 @@ components:
|
|
|
2732
2715
|
Any transaction notes set by the user or by
|
|
2733
2716
|
a matched recurring item. This will match the value
|
|
2734
2717
|
displayed in notes field on the transactions page in the Lunch Money app.
|
|
2735
|
-
minLength: 0
|
|
2736
|
-
maxLength: 350
|
|
2737
2718
|
status:
|
|
2738
2719
|
type: string
|
|
2739
2720
|
description: >
|
|
@@ -2978,8 +2959,6 @@ components:
|
|
|
2978
2959
|
Any transaction notes set by the user or by
|
|
2979
2960
|
a matched recurring item. This will match the value
|
|
2980
2961
|
displayed in notes field on the transactions page in the Lunch Money app.
|
|
2981
|
-
minLength: 0
|
|
2982
|
-
maxLength: 350
|
|
2983
2962
|
manual_account_id:
|
|
2984
2963
|
type: integer
|
|
2985
2964
|
format: int32
|
|
@@ -3117,8 +3096,6 @@ components:
|
|
|
3117
3096
|
description: >
|
|
3118
3097
|
New notes for the transaction. Set this to an empty string to clear
|
|
3119
3098
|
the existing notes.
|
|
3120
|
-
minLength: 0
|
|
3121
|
-
maxLength: 350
|
|
3122
3099
|
x-updatable: true
|
|
3123
3100
|
manual_account_id:
|
|
3124
3101
|
type: integer
|
|
@@ -3301,6 +3278,7 @@ components:
|
|
|
3301
3278
|
amount.
|
|
3302
3279
|
payee:
|
|
3303
3280
|
type: string
|
|
3281
|
+
minLength: 0
|
|
3304
3282
|
description: The payee for the child transaction. Will inherit the
|
|
3305
3283
|
original payee from the parent if not defined.
|
|
3306
3284
|
date:
|
|
@@ -3323,7 +3301,6 @@ components:
|
|
|
3323
3301
|
format: int32
|
|
3324
3302
|
notes:
|
|
3325
3303
|
type: string
|
|
3326
|
-
maxLength: 350
|
|
3327
3304
|
description: Will inherit notes from parent if not defined.
|
|
3328
3305
|
required:
|
|
3329
3306
|
- amount
|
|
@@ -4114,6 +4091,7 @@ components:
|
|
|
4114
4091
|
# - `cad`: Canadian Dollar
|
|
4115
4092
|
# - `cdf`: Congolese Franc
|
|
4116
4093
|
# - `chf`: Swiss Franc
|
|
4094
|
+
# - `clf`: Chilean Unit of Account (UF)
|
|
4117
4095
|
# - `clp`: Chilean Peso
|
|
4118
4096
|
# - `cny`: Chinese Yuan
|
|
4119
4097
|
# - `cop`: Colombian Peso
|
|
@@ -4129,6 +4107,7 @@ components:
|
|
|
4129
4107
|
# - `egp`: Egyptian Pound
|
|
4130
4108
|
# - `ern`: Eritrean Nakfa
|
|
4131
4109
|
# - `etb`: Ethiopian Birr
|
|
4110
|
+
# - `eth`: Ethereum
|
|
4132
4111
|
# - `eur`: Euro
|
|
4133
4112
|
# - `fjd`: Fijian Dollar
|
|
4134
4113
|
# - `fkp`: Falkland Islands Pound
|
|
@@ -4236,6 +4215,7 @@ components:
|
|
|
4236
4215
|
# - `uyu`: Uruguayan Peso
|
|
4237
4216
|
# - `uzs`: Uzbekistan Som
|
|
4238
4217
|
# - `vef`: Venezuelan Bolívar
|
|
4218
|
+
# - `ves`: Venezuelan Bolívar Sotiemas
|
|
4239
4219
|
# - `vnd`: Vietnamese Dong
|
|
4240
4220
|
# - `vuv`: Vanuatu Vatu
|
|
4241
4221
|
# - `wst`: Samoan Tala
|
|
@@ -4279,6 +4259,7 @@ components:
|
|
|
4279
4259
|
- cad
|
|
4280
4260
|
- cdf
|
|
4281
4261
|
- chf
|
|
4262
|
+
- clf
|
|
4282
4263
|
- clp
|
|
4283
4264
|
- cny
|
|
4284
4265
|
- cop
|
|
@@ -4294,6 +4275,7 @@ components:
|
|
|
4294
4275
|
- egp
|
|
4295
4276
|
- ern
|
|
4296
4277
|
- etb
|
|
4278
|
+
- eth
|
|
4297
4279
|
- eur
|
|
4298
4280
|
- fjd
|
|
4299
4281
|
- fkp
|
|
@@ -4401,6 +4383,7 @@ components:
|
|
|
4401
4383
|
- uyu
|
|
4402
4384
|
- uzs
|
|
4403
4385
|
- vef
|
|
4386
|
+
- ves
|
|
4404
4387
|
- vnd
|
|
4405
4388
|
- vuv
|
|
4406
4389
|
- wst
|
|
@@ -5905,6 +5888,7 @@ paths:
|
|
|
5905
5888
|
coingecko_id: bitcoin
|
|
5906
5889
|
to_base: 53124.72
|
|
5907
5890
|
balance_as_of: "2026-02-25T14:22:10.000Z"
|
|
5891
|
+
exchange_rate_as_of: "2026-02-25T14:10:00.000Z"
|
|
5908
5892
|
created_by_name: User 1
|
|
5909
5893
|
created_at: "2025-11-12T20:14:32.000Z"
|
|
5910
5894
|
updated_at: "2026-02-25T14:22:10.000Z"
|
|
@@ -5962,6 +5946,7 @@ paths:
|
|
|
5962
5946
|
coingecko_id: ethereum
|
|
5963
5947
|
to_base: 28998.44
|
|
5964
5948
|
balance_as_of: "2026-03-01T09:20:41.000Z"
|
|
5949
|
+
exchange_rate_as_of: "2026-03-01T09:15:00.000Z"
|
|
5965
5950
|
created_by_name: User 1
|
|
5966
5951
|
created_at: "2026-03-01T09:20:41.000Z"
|
|
5967
5952
|
updated_at: "2026-03-01T09:20:41.000Z"
|
|
@@ -6029,6 +6014,7 @@ paths:
|
|
|
6029
6014
|
coingecko_id: bitcoin
|
|
6030
6015
|
to_base: 53124.72
|
|
6031
6016
|
balance_as_of: "2026-02-25T14:22:10.000Z"
|
|
6017
|
+
exchange_rate_as_of: "2026-02-25T14:10:00.000Z"
|
|
6032
6018
|
created_by_name: User 1
|
|
6033
6019
|
created_at: "2025-11-12T20:14:32.000Z"
|
|
6034
6020
|
updated_at: "2026-02-25T14:22:10.000Z"
|
|
@@ -6106,6 +6092,7 @@ paths:
|
|
|
6106
6092
|
coingecko_id: bitcoin
|
|
6107
6093
|
to_base: 56011.12
|
|
6108
6094
|
balance_as_of: "2026-03-01T09:41:18.000Z"
|
|
6095
|
+
exchange_rate_as_of: "2026-03-01T09:35:00.000Z"
|
|
6109
6096
|
created_by_name: User 1
|
|
6110
6097
|
created_at: "2025-11-12T20:14:32.000Z"
|
|
6111
6098
|
updated_at: "2026-02-25T14:22:10.000Z"
|
|
@@ -6126,6 +6113,7 @@ paths:
|
|
|
6126
6113
|
coingecko_id: bitcoin
|
|
6127
6114
|
to_base: 56011.12
|
|
6128
6115
|
balance_as_of: "2026-03-01T09:41:18.000Z"
|
|
6116
|
+
exchange_rate_as_of: "2026-03-01T09:35:00.000Z"
|
|
6129
6117
|
created_by_name: User 1
|
|
6130
6118
|
created_at: "2025-11-12T20:14:32.000Z"
|
|
6131
6119
|
updated_at: "2026-03-01T09:41:18.000Z"
|
|
@@ -6255,6 +6243,7 @@ paths:
|
|
|
6255
6243
|
coingecko_id: ethereum
|
|
6256
6244
|
to_base: 28998.44
|
|
6257
6245
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6246
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6258
6247
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6259
6248
|
- name: BTC
|
|
6260
6249
|
balance: "0.100020003000400050"
|
|
@@ -6262,6 +6251,7 @@ paths:
|
|
|
6262
6251
|
coingecko_id: bitcoin
|
|
6263
6252
|
to_base: 6231.28
|
|
6264
6253
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6254
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6265
6255
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6266
6256
|
- id: 33005
|
|
6267
6257
|
provider: kraken
|
|
@@ -6277,6 +6267,7 @@ paths:
|
|
|
6277
6267
|
coingecko_id: ripple
|
|
6278
6268
|
to_base: 1287.50
|
|
6279
6269
|
balance_as_of: "2026-02-26T07:22:30.000Z"
|
|
6270
|
+
exchange_rate_as_of: "2026-02-26T07:10:00.000Z"
|
|
6280
6271
|
updated_at: "2026-02-26T07:22:30.000Z"
|
|
6281
6272
|
"401":
|
|
6282
6273
|
$ref: "#/components/responses/unauthorizedToken"
|
|
@@ -6329,6 +6320,7 @@ paths:
|
|
|
6329
6320
|
coingecko_id: ethereum
|
|
6330
6321
|
to_base: 28998.44
|
|
6331
6322
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6323
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6332
6324
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6333
6325
|
- name: BTC
|
|
6334
6326
|
balance: "0.100020003000400050"
|
|
@@ -6336,6 +6328,7 @@ paths:
|
|
|
6336
6328
|
coingecko_id: bitcoin
|
|
6337
6329
|
to_base: 6231.28
|
|
6338
6330
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6331
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6339
6332
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6340
6333
|
"400":
|
|
6341
6334
|
description: Bad Request
|
|
@@ -6401,6 +6394,7 @@ paths:
|
|
|
6401
6394
|
coingecko_id: ethereum
|
|
6402
6395
|
to_base: 28998.44
|
|
6403
6396
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6397
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6404
6398
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6405
6399
|
"400":
|
|
6406
6400
|
description: Bad Request
|
|
@@ -6486,6 +6480,7 @@ paths:
|
|
|
6486
6480
|
coingecko_id: ethereum
|
|
6487
6481
|
to_base: 28998.44
|
|
6488
6482
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6483
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6489
6484
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6490
6485
|
- name: BTC
|
|
6491
6486
|
balance: "0.100020003000400050"
|
|
@@ -6493,6 +6488,7 @@ paths:
|
|
|
6493
6488
|
coingecko_id: bitcoin
|
|
6494
6489
|
to_base: 6231.28
|
|
6495
6490
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6491
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6496
6492
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6497
6493
|
"401":
|
|
6498
6494
|
$ref: "#/components/responses/unauthorizedToken"
|
|
@@ -6948,60 +6944,35 @@ paths:
|
|
|
6948
6944
|
currency: usd
|
|
6949
6945
|
to_base: 41500
|
|
6950
6946
|
crypto_balance: null
|
|
6951
|
-
partial success request:
|
|
6952
|
-
value:
|
|
6953
|
-
balances:
|
|
6954
|
-
- date: "2026-03-01"
|
|
6955
|
-
balance: "41500.0000"
|
|
6956
|
-
- date: "2026-04-01"
|
|
6957
|
-
balance: "41625.5000"
|
|
6958
|
-
symbol: btc
|
|
6959
6947
|
responses:
|
|
6960
6948
|
"200":
|
|
6961
|
-
description:
|
|
6949
|
+
description: All balance history entries were upserted successfully
|
|
6962
6950
|
content:
|
|
6963
6951
|
application/json:
|
|
6964
6952
|
schema:
|
|
6965
|
-
$ref: "#/components/schemas/
|
|
6953
|
+
$ref: "#/components/schemas/balanceHistoryAccountObject"
|
|
6966
6954
|
examples:
|
|
6967
6955
|
balances updated:
|
|
6968
6956
|
value:
|
|
6969
|
-
|
|
6970
|
-
|
|
6971
|
-
|
|
6972
|
-
|
|
6973
|
-
|
|
6974
|
-
|
|
6975
|
-
|
|
6976
|
-
|
|
6977
|
-
|
|
6978
|
-
|
|
6979
|
-
|
|
6980
|
-
|
|
6981
|
-
|
|
6982
|
-
|
|
6983
|
-
|
|
6984
|
-
|
|
6985
|
-
crypto_balance: null
|
|
6986
|
-
errors: []
|
|
6987
|
-
partial success:
|
|
6988
|
-
value:
|
|
6989
|
-
updated_balance_history:
|
|
6990
|
-
source:
|
|
6991
|
-
type: manual
|
|
6992
|
-
manual_account_id: 119807
|
|
6993
|
-
balances:
|
|
6994
|
-
- id: 601
|
|
6995
|
-
date: "2026-03-01"
|
|
6996
|
-
balance: "41500.0000"
|
|
6997
|
-
currency: usd
|
|
6998
|
-
to_base: 41500
|
|
6999
|
-
crypto_balance: null
|
|
7000
|
-
errors:
|
|
7001
|
-
- request_balances_index: 1
|
|
7002
|
-
message: "`symbol` may not be set when `account_type` is `manual` or `plaid`."
|
|
6957
|
+
source:
|
|
6958
|
+
type: manual
|
|
6959
|
+
manual_account_id: 119807
|
|
6960
|
+
balances:
|
|
6961
|
+
- id: 601
|
|
6962
|
+
date: "2026-03-01"
|
|
6963
|
+
balance: "41500.0000"
|
|
6964
|
+
currency: usd
|
|
6965
|
+
to_base: 41500
|
|
6966
|
+
crypto_balance: null
|
|
6967
|
+
- id: 602
|
|
6968
|
+
date: "2026-04-01"
|
|
6969
|
+
balance: "41625.5000"
|
|
6970
|
+
currency: usd
|
|
6971
|
+
to_base: 41625.5
|
|
6972
|
+
crypto_balance: null
|
|
7003
6973
|
"400":
|
|
7004
|
-
description: Bad Request
|
|
6974
|
+
description: Bad Request. The entire request is rejected if any row in
|
|
6975
|
+
`balances` fails validation; no rows are updated.
|
|
7005
6976
|
content:
|
|
7006
6977
|
application/json:
|
|
7007
6978
|
schema:
|
|
@@ -7022,16 +6993,25 @@ paths:
|
|
|
7022
6993
|
message: Request Validation Failure
|
|
7023
6994
|
errors:
|
|
7024
6995
|
- errMsg: "`date` must be the first day of a month."
|
|
6996
|
+
request_balances_index: 0
|
|
7025
6997
|
future date:
|
|
7026
6998
|
value:
|
|
7027
6999
|
message: Request Validation Failure
|
|
7028
7000
|
errors:
|
|
7029
7001
|
- errMsg: "`date` must not be in the future."
|
|
7002
|
+
request_balances_index: 1
|
|
7030
7003
|
crypto balance not allowed:
|
|
7031
7004
|
value:
|
|
7032
7005
|
message: Request Validation Failure
|
|
7033
7006
|
errors:
|
|
7034
7007
|
- errMsg: "`crypto_balance` may only be set when `account_type` is `crypto_manual` or `deleted`."
|
|
7008
|
+
request_balances_index: 0
|
|
7009
|
+
invalid row in bulk request:
|
|
7010
|
+
value:
|
|
7011
|
+
message: Request Validation Failure
|
|
7012
|
+
errors:
|
|
7013
|
+
- errMsg: "`symbol` may not be set when `account_type` is `manual` or `plaid`."
|
|
7014
|
+
request_balances_index: 1
|
|
7035
7015
|
"401":
|
|
7036
7016
|
$ref: "#/components/responses/unauthorizedToken"
|
|
7037
7017
|
"404":
|
|
@@ -7253,62 +7233,36 @@ paths:
|
|
|
7253
7233
|
- date: "2026-04-01"
|
|
7254
7234
|
balance: "6500.0000"
|
|
7255
7235
|
crypto_balance: "0.100020003000400050"
|
|
7256
|
-
partial success request:
|
|
7257
|
-
value:
|
|
7258
|
-
balances:
|
|
7259
|
-
- date: "2026-03-01"
|
|
7260
|
-
balance: "6400.0000"
|
|
7261
|
-
crypto_balance: "0.100020003000400050"
|
|
7262
|
-
- date: "2026-04-01"
|
|
7263
|
-
balance: "not-a-number"
|
|
7264
7236
|
responses:
|
|
7265
7237
|
"200":
|
|
7266
|
-
description:
|
|
7238
|
+
description: All balance history entries were upserted successfully
|
|
7267
7239
|
content:
|
|
7268
7240
|
application/json:
|
|
7269
7241
|
schema:
|
|
7270
|
-
$ref: "#/components/schemas/
|
|
7242
|
+
$ref: "#/components/schemas/balanceHistoryAccountObject"
|
|
7271
7243
|
examples:
|
|
7272
7244
|
balances updated:
|
|
7273
7245
|
value:
|
|
7274
|
-
|
|
7275
|
-
|
|
7276
|
-
|
|
7277
|
-
|
|
7278
|
-
|
|
7279
|
-
|
|
7280
|
-
|
|
7281
|
-
|
|
7282
|
-
|
|
7283
|
-
|
|
7284
|
-
|
|
7285
|
-
|
|
7286
|
-
|
|
7287
|
-
|
|
7288
|
-
|
|
7289
|
-
|
|
7290
|
-
|
|
7291
|
-
crypto_balance: "0.100020003000400050"
|
|
7292
|
-
errors: []
|
|
7293
|
-
partial success:
|
|
7294
|
-
value:
|
|
7295
|
-
updated_balance_history:
|
|
7296
|
-
source:
|
|
7297
|
-
type: crypto_synced
|
|
7298
|
-
crypto_synced_id: 33004
|
|
7299
|
-
symbol: btc
|
|
7300
|
-
balances:
|
|
7301
|
-
- id: 604
|
|
7302
|
-
date: "2026-03-01"
|
|
7303
|
-
balance: "6400.0000"
|
|
7304
|
-
currency: usd
|
|
7305
|
-
to_base: 6400
|
|
7306
|
-
crypto_balance: "0.100020003000400050"
|
|
7307
|
-
errors:
|
|
7308
|
-
- request_balances_index: 1
|
|
7309
|
-
message: "`balance` must be a valid numeric string or number."
|
|
7246
|
+
source:
|
|
7247
|
+
type: crypto_synced
|
|
7248
|
+
crypto_synced_id: 33004
|
|
7249
|
+
symbol: btc
|
|
7250
|
+
balances:
|
|
7251
|
+
- id: 604
|
|
7252
|
+
date: "2026-03-01"
|
|
7253
|
+
balance: "6400.0000"
|
|
7254
|
+
currency: usd
|
|
7255
|
+
to_base: 6400
|
|
7256
|
+
crypto_balance: "0.100020003000400050"
|
|
7257
|
+
- id: 605
|
|
7258
|
+
date: "2026-04-01"
|
|
7259
|
+
balance: "6500.0000"
|
|
7260
|
+
currency: usd
|
|
7261
|
+
to_base: 6500
|
|
7262
|
+
crypto_balance: "0.100020003000400050"
|
|
7310
7263
|
"400":
|
|
7311
|
-
description: Bad Request
|
|
7264
|
+
description: Bad Request. The entire request is rejected if any row in
|
|
7265
|
+
`balances` fails validation; no rows are updated.
|
|
7312
7266
|
content:
|
|
7313
7267
|
application/json:
|
|
7314
7268
|
schema:
|
|
@@ -7324,11 +7278,19 @@ paths:
|
|
|
7324
7278
|
message: Request Validation Failure
|
|
7325
7279
|
errors:
|
|
7326
7280
|
- errMsg: "`date` must be the first day of a month."
|
|
7281
|
+
request_balances_index: 0
|
|
7327
7282
|
future date:
|
|
7328
7283
|
value:
|
|
7329
7284
|
message: Request Validation Failure
|
|
7330
7285
|
errors:
|
|
7331
7286
|
- errMsg: "`date` must not be in the future."
|
|
7287
|
+
request_balances_index: 1
|
|
7288
|
+
invalid row in bulk request:
|
|
7289
|
+
value:
|
|
7290
|
+
message: Request Validation Failure
|
|
7291
|
+
errors:
|
|
7292
|
+
- errMsg: "`balance` must be a valid numeric string or number."
|
|
7293
|
+
request_balances_index: 1
|
|
7332
7294
|
"401":
|
|
7333
7295
|
$ref: "#/components/responses/unauthorizedToken"
|
|
7334
7296
|
"404":
|
|
@@ -10194,7 +10156,7 @@ paths:
|
|
|
10194
10156
|
description: |
|
|
10195
10157
|
The payee for the new grouped transaction.
|
|
10196
10158
|
minLength: 0
|
|
10197
|
-
|
|
10159
|
+
|
|
10198
10160
|
category_id:
|
|
10199
10161
|
type: integer
|
|
10200
10162
|
format: int64
|
|
@@ -10209,8 +10171,6 @@ paths:
|
|
|
10209
10171
|
nullable: true
|
|
10210
10172
|
description: |
|
|
10211
10173
|
Notes for the grouped transaction.
|
|
10212
|
-
minLength: 0
|
|
10213
|
-
maxLength: 350
|
|
10214
10174
|
status:
|
|
10215
10175
|
type: string
|
|
10216
10176
|
description: If set, must be either `reviewed` or
|
package/package.json
CHANGED
package/version-history.md
CHANGED
|
@@ -24,11 +24,15 @@ The Lunch Money API spec uses a modified version of SEMVER for its versioning me
|
|
|
24
24
|
- Viewing the balances for currencies associated with both manually managed crypto assets and those that are synced via a synced crypto account (ie: coinbase, kraken, ethereum wallet)
|
|
25
25
|
- Refreshing synced crypto account balances
|
|
26
26
|
|
|
27
|
+
## v2.9.4 - May 23, 2026
|
|
28
|
+
- Increase allowable length for transaction `notes`.
|
|
29
|
+
- Add `clf`, `eth`, and `ves` to the supported currency codes.
|
|
30
|
+
|
|
27
31
|
## v2.9.3 - Apr 27, 2026
|
|
28
32
|
- Add `xag` and `xau` to the supported currency codes.
|
|
29
33
|
|
|
30
34
|
## v2.9.2 - Apr 22, 2026
|
|
31
|
-
- Increase allowable length for a transaction `payee
|
|
35
|
+
- Increase allowable length for a transaction `payee`.
|
|
32
36
|
|
|
33
37
|
## v2.9.1 - Apr 22, 2026
|
|
34
38
|
- You may now set `archived_at` when modifying a category or tag via the `PUT /categories` or `PUT /tags` endpoints.
|