@lunch-money/v2-api-spec 2.11.0-preview.1 → 2.11.0-preview.3

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.
@@ -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 documentation for the "next version" of the Lunch Money v2 API.This documentation includes proposed updates to the API design that have not yet been released.<p>
6
- This documentation is for the **v2.11.0** release of the API.<p>
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
- A working version of this API is now available through these docs, or directly at:
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>This is in alpha launch of a major API update. It is still subject to change during this alpha review
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
- If you are new to the v2 API, you may wish to review the [v2 API Overview of Changes](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/changelog).
17
+ **Static Mock Server**
26
18
 
27
- ### Static Mock Server
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
- You may also use these docs to explore the API using a static mock server endpoint.<p>
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
- ### Migrating from V1
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
- The v2 API is NOT backwards compatible with the v1 API. We encourage developers to review the [Migration Guide](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/migration-guide) to understand the changes and plan their migration.
25
+ **Migrating from v1**
37
26
 
38
- ### Acknowledgments
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
- If you have provided feedback on the API during our ongoing design process, **THANK YOU**. We are thrilled that you can finally interact with the working API we built based on your feedback.
41
-
42
- ### Useful links:
43
- - [Getting Started](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/getting-started)
44
- - [v2 API Changelog](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/changelog)
45
- - [Migration Guide](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/migration-guide)
46
- - [Rate Limits](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/rate-limits)
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
- description: Balance converted to the user's primary currency
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 ISO 8601
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
- description: Balance converted to the user's primary currency
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 last updated in
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:
@@ -2495,8 +2511,6 @@ components:
2495
2511
  Any transaction notes set by the user or by
2496
2512
  a matched recurring item. This will match the value
2497
2513
  displayed in notes field on the transactions page in the Lunch Money app.
2498
- minLength: 0
2499
- maxLength: 350
2500
2514
  status:
2501
2515
  type: string
2502
2516
  # description: >
@@ -2732,8 +2746,6 @@ components:
2732
2746
  Any transaction notes set by the user or by
2733
2747
  a matched recurring item. This will match the value
2734
2748
  displayed in notes field on the transactions page in the Lunch Money app.
2735
- minLength: 0
2736
- maxLength: 350
2737
2749
  status:
2738
2750
  type: string
2739
2751
  description: >
@@ -2978,8 +2990,6 @@ components:
2978
2990
  Any transaction notes set by the user or by
2979
2991
  a matched recurring item. This will match the value
2980
2992
  displayed in notes field on the transactions page in the Lunch Money app.
2981
- minLength: 0
2982
- maxLength: 350
2983
2993
  manual_account_id:
2984
2994
  type: integer
2985
2995
  format: int32
@@ -3117,8 +3127,6 @@ components:
3117
3127
  description: >
3118
3128
  New notes for the transaction. Set this to an empty string to clear
3119
3129
  the existing notes.
3120
- minLength: 0
3121
- maxLength: 350
3122
3130
  x-updatable: true
3123
3131
  manual_account_id:
3124
3132
  type: integer
@@ -3301,6 +3309,7 @@ components:
3301
3309
  amount.
3302
3310
  payee:
3303
3311
  type: string
3312
+ minLength: 0
3304
3313
  description: The payee for the child transaction. Will inherit the
3305
3314
  original payee from the parent if not defined.
3306
3315
  date:
@@ -3323,7 +3332,6 @@ components:
3323
3332
  format: int32
3324
3333
  notes:
3325
3334
  type: string
3326
- maxLength: 350
3327
3335
  description: Will inherit notes from parent if not defined.
3328
3336
  required:
3329
3337
  - amount
@@ -4114,6 +4122,7 @@ components:
4114
4122
  # - `cad`: Canadian Dollar
4115
4123
  # - `cdf`: Congolese Franc
4116
4124
  # - `chf`: Swiss Franc
4125
+ # - `clf`: Chilean Unit of Account (UF)
4117
4126
  # - `clp`: Chilean Peso
4118
4127
  # - `cny`: Chinese Yuan
4119
4128
  # - `cop`: Colombian Peso
@@ -4129,6 +4138,7 @@ components:
4129
4138
  # - `egp`: Egyptian Pound
4130
4139
  # - `ern`: Eritrean Nakfa
4131
4140
  # - `etb`: Ethiopian Birr
4141
+ # - `eth`: Ethereum
4132
4142
  # - `eur`: Euro
4133
4143
  # - `fjd`: Fijian Dollar
4134
4144
  # - `fkp`: Falkland Islands Pound
@@ -4236,10 +4246,13 @@ components:
4236
4246
  # - `uyu`: Uruguayan Peso
4237
4247
  # - `uzs`: Uzbekistan Som
4238
4248
  # - `vef`: Venezuelan Bolívar
4249
+ # - `ves`: Venezuelan Bolívar Sotiemas
4239
4250
  # - `vnd`: Vietnamese Dong
4240
4251
  # - `vuv`: Vanuatu Vatu
4241
4252
  # - `wst`: Samoan Tala
4242
4253
  # - `xaf`: CFA Franc BEAC
4254
+ # - `xag`: Silver (troy ounce)
4255
+ # - `xau`: Gold (troy ounce)
4243
4256
  # - `xcd`: East Caribbean Dollar
4244
4257
  # - `xof`: CFA Franc BCEAO
4245
4258
  # - `xpf`: CFP Franc
@@ -4277,6 +4290,7 @@ components:
4277
4290
  - cad
4278
4291
  - cdf
4279
4292
  - chf
4293
+ - clf
4280
4294
  - clp
4281
4295
  - cny
4282
4296
  - cop
@@ -4292,6 +4306,7 @@ components:
4292
4306
  - egp
4293
4307
  - ern
4294
4308
  - etb
4309
+ - eth
4295
4310
  - eur
4296
4311
  - fjd
4297
4312
  - fkp
@@ -4399,10 +4414,13 @@ components:
4399
4414
  - uyu
4400
4415
  - uzs
4401
4416
  - vef
4417
+ - ves
4402
4418
  - vnd
4403
4419
  - vuv
4404
4420
  - wst
4405
4421
  - xaf
4422
+ - xag
4423
+ - xau
4406
4424
  - xcd
4407
4425
  - xof
4408
4426
  - xpf
@@ -5901,6 +5919,7 @@ paths:
5901
5919
  coingecko_id: bitcoin
5902
5920
  to_base: 53124.72
5903
5921
  balance_as_of: "2026-02-25T14:22:10.000Z"
5922
+ exchange_rate_as_of: "2026-02-25T14:10:00.000Z"
5904
5923
  created_by_name: User 1
5905
5924
  created_at: "2025-11-12T20:14:32.000Z"
5906
5925
  updated_at: "2026-02-25T14:22:10.000Z"
@@ -5958,6 +5977,7 @@ paths:
5958
5977
  coingecko_id: ethereum
5959
5978
  to_base: 28998.44
5960
5979
  balance_as_of: "2026-03-01T09:20:41.000Z"
5980
+ exchange_rate_as_of: "2026-03-01T09:15:00.000Z"
5961
5981
  created_by_name: User 1
5962
5982
  created_at: "2026-03-01T09:20:41.000Z"
5963
5983
  updated_at: "2026-03-01T09:20:41.000Z"
@@ -6025,6 +6045,7 @@ paths:
6025
6045
  coingecko_id: bitcoin
6026
6046
  to_base: 53124.72
6027
6047
  balance_as_of: "2026-02-25T14:22:10.000Z"
6048
+ exchange_rate_as_of: "2026-02-25T14:10:00.000Z"
6028
6049
  created_by_name: User 1
6029
6050
  created_at: "2025-11-12T20:14:32.000Z"
6030
6051
  updated_at: "2026-02-25T14:22:10.000Z"
@@ -6102,6 +6123,7 @@ paths:
6102
6123
  coingecko_id: bitcoin
6103
6124
  to_base: 56011.12
6104
6125
  balance_as_of: "2026-03-01T09:41:18.000Z"
6126
+ exchange_rate_as_of: "2026-03-01T09:35:00.000Z"
6105
6127
  created_by_name: User 1
6106
6128
  created_at: "2025-11-12T20:14:32.000Z"
6107
6129
  updated_at: "2026-02-25T14:22:10.000Z"
@@ -6122,6 +6144,7 @@ paths:
6122
6144
  coingecko_id: bitcoin
6123
6145
  to_base: 56011.12
6124
6146
  balance_as_of: "2026-03-01T09:41:18.000Z"
6147
+ exchange_rate_as_of: "2026-03-01T09:35:00.000Z"
6125
6148
  created_by_name: User 1
6126
6149
  created_at: "2025-11-12T20:14:32.000Z"
6127
6150
  updated_at: "2026-03-01T09:41:18.000Z"
@@ -6251,6 +6274,7 @@ paths:
6251
6274
  coingecko_id: ethereum
6252
6275
  to_base: 28998.44
6253
6276
  balance_as_of: "2026-02-25T14:25:00.000Z"
6277
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6254
6278
  updated_at: "2026-02-25T14:25:01.000Z"
6255
6279
  - name: BTC
6256
6280
  balance: "0.100020003000400050"
@@ -6258,6 +6282,7 @@ paths:
6258
6282
  coingecko_id: bitcoin
6259
6283
  to_base: 6231.28
6260
6284
  balance_as_of: "2026-02-25T14:25:00.000Z"
6285
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6261
6286
  updated_at: "2026-02-25T14:25:01.000Z"
6262
6287
  - id: 33005
6263
6288
  provider: kraken
@@ -6273,6 +6298,7 @@ paths:
6273
6298
  coingecko_id: ripple
6274
6299
  to_base: 1287.50
6275
6300
  balance_as_of: "2026-02-26T07:22:30.000Z"
6301
+ exchange_rate_as_of: "2026-02-26T07:10:00.000Z"
6276
6302
  updated_at: "2026-02-26T07:22:30.000Z"
6277
6303
  "401":
6278
6304
  $ref: "#/components/responses/unauthorizedToken"
@@ -6325,6 +6351,7 @@ paths:
6325
6351
  coingecko_id: ethereum
6326
6352
  to_base: 28998.44
6327
6353
  balance_as_of: "2026-02-25T14:25:00.000Z"
6354
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6328
6355
  updated_at: "2026-02-25T14:25:01.000Z"
6329
6356
  - name: BTC
6330
6357
  balance: "0.100020003000400050"
@@ -6332,6 +6359,7 @@ paths:
6332
6359
  coingecko_id: bitcoin
6333
6360
  to_base: 6231.28
6334
6361
  balance_as_of: "2026-02-25T14:25:00.000Z"
6362
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6335
6363
  updated_at: "2026-02-25T14:25:01.000Z"
6336
6364
  "400":
6337
6365
  description: Bad Request
@@ -6397,6 +6425,7 @@ paths:
6397
6425
  coingecko_id: ethereum
6398
6426
  to_base: 28998.44
6399
6427
  balance_as_of: "2026-02-25T14:25:00.000Z"
6428
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6400
6429
  updated_at: "2026-02-25T14:25:01.000Z"
6401
6430
  "400":
6402
6431
  description: Bad Request
@@ -6482,6 +6511,7 @@ paths:
6482
6511
  coingecko_id: ethereum
6483
6512
  to_base: 28998.44
6484
6513
  balance_as_of: "2026-02-25T14:25:00.000Z"
6514
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6485
6515
  updated_at: "2026-02-25T14:25:01.000Z"
6486
6516
  - name: BTC
6487
6517
  balance: "0.100020003000400050"
@@ -6489,6 +6519,7 @@ paths:
6489
6519
  coingecko_id: bitcoin
6490
6520
  to_base: 6231.28
6491
6521
  balance_as_of: "2026-02-25T14:25:00.000Z"
6522
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6492
6523
  updated_at: "2026-02-25T14:25:01.000Z"
6493
6524
  "401":
6494
6525
  $ref: "#/components/responses/unauthorizedToken"
@@ -10190,7 +10221,7 @@ paths:
10190
10221
  description: |
10191
10222
  The payee for the new grouped transaction.
10192
10223
  minLength: 0
10193
- maxLength: 1000
10224
+
10194
10225
  category_id:
10195
10226
  type: integer
10196
10227
  format: int64
@@ -10205,8 +10236,6 @@ paths:
10205
10236
  nullable: true
10206
10237
  description: |
10207
10238
  Notes for the grouped transaction.
10208
- minLength: 0
10209
- maxLength: 350
10210
10239
  status:
10211
10240
  type: string
10212
10241
  description: If set, must be either `reviewed` or
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunch-money/v2-api-spec",
3
- "version": "2.11.0-preview.1",
3
+ "version": "2.11.0-preview.3",
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": [
@@ -24,8 +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
+
31
+ ## v2.9.3 - Apr 27, 2026
32
+ - Add `xag` and `xau` to the supported currency codes.
33
+
27
34
  ## v2.9.2 - Apr 22, 2026
28
- - Increase allowable length for a transaction `payee`
35
+ - Increase allowable length for a transaction `payee`.
29
36
 
30
37
  ## v2.9.1 - Apr 22, 2026
31
38
  - You may now set `archived_at` when modifying a category or tag via the `PUT /categories` or `PUT /tags` endpoints.