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

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,33 @@ 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).
13
-
14
- ------------------------------------------------------------------------------------------------
15
- Welcome to the Lunch Money v2 API.
5
+ Welcome to the Lunch Money v2 API reference. This is the **v2.11.0** spec.
16
6
 
17
- A working version of this API is now available through these docs, or directly at:
7
+ ### Introduction
18
8
 
19
- `https://api.lunchmoney.dev/v2`
9
+ The API is available at `https://lunchmoney.dev/v2`. Get your access token from the [Lunch Money developers page](https://my.lunchmoney.app/developers).
20
10
 
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>
11
+ API calls can <span class="red-text"><strong>change or delete</strong></span> your data. Any changes you make are <span class="red-text"><strong>permanent</strong></span>, just like they would be if you made changes using the web or mobile app. Please refer to the [Getting Started Guide](https://lunchmoney.dev/v2/getting-started) before using the API.
24
12
 
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).
13
+ **Static Mock Server**
26
14
 
27
- ### Static Mock Server
15
+ 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
16
 
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.
17
+ **Client Libraries & SDKs**
33
18
 
34
- ### Migrating from V1
19
+ 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](/v2/openapi).
35
20
 
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.
21
+ **Migrating from v1**
37
22
 
38
- ### Acknowledgments
23
+ The v2 API is not backwards compatible with v1. See the [Migration Guide](https://lunchmoney.dev/v2/migration-guide) for details.
39
24
 
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)
25
+ **Useful links**
26
+ - [Developer Portal](https://lunchmoney.dev/v2/introduction)
27
+ - [Getting Started Guide](https://lunchmoney.dev/v2/getting-started)
28
+ - [v2 API Overview](https://lunchmoney.dev/v2/overview)
29
+ - [Version History](https://lunchmoney.dev/v2/version-history)
30
+ - [Migration Guide](https://lunchmoney.dev/v2/migration-guide)
31
+ - [Rate Limits](https://lunchmoney.dev/v2/rate-limits)
49
32
  termsOfService: https://lunchmoney.dev/#current-status
50
33
  contact:
51
34
  email: devsupport@lunchmoney.app
@@ -57,8 +40,8 @@ info:
57
40
  servers:
58
41
  - url: https://api.lunchmoney.dev/v2
59
42
  description: v2 Lunch Money API Server - changes will affect real data!
60
- # - url: https://mock.lunchmoney.dev/v2
61
- - url: https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/
43
+ # - url: https://lunchmoney.dev/v2
44
+ - url: https://lunchmoney.dev/v2
62
45
  description: Static mock version of the v2 Lunch Money API Server
63
46
 
64
47
  tags:
@@ -126,8 +109,10 @@ tags:
126
109
  description: Learn more about transactions
127
110
  url: https://support.lunchmoney.app/finances/transactions
128
111
  - name: budgets
129
- description: View settings and modify budget amounts.<p> Use the
130
- [/summary](#tag/summary) endpoint to view the budget details performance.
112
+ description: View settings and modify budget amounts.<p> Use
113
+ [/budgets/settings](#tag/budgets/GET/budgets/settings) to view budget
114
+ period settings.<p> Use the [/summary](#tag/summary) endpoint to view
115
+ the budget details performance.
131
116
  externalDocs:
132
117
  description: Learn more about budgets
133
118
  url: https://support.lunchmoney.app/finances/budgets
@@ -155,12 +140,12 @@ components:
155
140
  account_id:
156
141
  type: integer
157
142
  format: int64
158
- description: Unique ID for the linked budgeting account
143
+ description: Unique ID for the current budgeting account
159
144
  budget_name:
160
145
  type: string
161
- description: Name of the linked budgeting account
146
+ description: Name of the current budgeting account
162
147
  primary_currency:
163
- description: Primary currency set in the user's settings
148
+ description: Primary currency for the current budgeting account
164
149
  allOf:
165
150
  - $ref: "#/components/schemas/currencyEnum"
166
151
  api_key_label:
@@ -679,7 +664,6 @@ components:
679
664
  cryptoManualObject:
680
665
  type: object
681
666
  title: manual crypto object
682
- x-internal: true
683
667
  additionalProperties: false
684
668
  properties:
685
669
  id:
@@ -719,13 +703,22 @@ components:
719
703
  description: CoinGecko identifier associated with this balance
720
704
  to_base:
721
705
  type: number
722
- description: Balance converted to the user's primary currency
706
+ nullable: true
707
+ description: Balance converted to the user's primary currency. May be null if no conversion was available.
723
708
  balance_as_of:
724
709
  type: string
725
710
  format: date-time
726
711
  nullable: true
727
- description: Date/time the balance was last updated in ISO 8601
728
- extended format
712
+ description: Date/time the manual balance record was last updated in
713
+ ISO 8601 extended format. This is currently based on the manual
714
+ crypto record's updated_at timestamp.
715
+ exchange_rate_as_of:
716
+ type: string
717
+ format: date-time
718
+ nullable: true
719
+ description: Date/time the exchange rate used to calculate to_base was
720
+ last updated in ISO 8601 extended format. Null when no exchange rate was
721
+ used or no conversion was available.
729
722
  created_by_name:
730
723
  type: string
731
724
  nullable: true
@@ -750,6 +743,7 @@ components:
750
743
  - coingecko_id
751
744
  - to_base
752
745
  - balance_as_of
746
+ - exchange_rate_as_of
753
747
  - created_by_name
754
748
  - created_at
755
749
  - updated_at
@@ -758,14 +752,18 @@ components:
758
752
  cryptoSyncedBalance:
759
753
  type: object
760
754
  title: synced crypto balance object
761
- x-internal: true
762
755
  additionalProperties: false
763
756
  properties:
764
757
  name:
765
758
  type: string
766
759
  minLength: 1
767
760
  maxLength: 45
768
- description: The name of the crypto asset
761
+ description: The asset name for this balance, typically the uppercased currency symbol (e.g. ETH).
762
+ display_name:
763
+ type: string
764
+ nullable: true
765
+ description: Optional display name for the synced crypto asset as set by the user. If `null`,
766
+ clients may derive a display name from syncedCryptoAccount's `provider` + `name`.
769
767
  balance:
770
768
  type: string
771
769
  pattern: ^-?\d+(\.\d{1,18})?$
@@ -783,13 +781,21 @@ components:
783
781
  description: CoinGecko identifier associated with this balance
784
782
  to_base:
785
783
  type: number
786
- description: Balance converted to the user's primary currency
784
+ nullable: true
785
+ description: Balance converted to the user's primary currency. May be null if no conversion was available.
787
786
  balance_as_of:
788
787
  type: string
789
788
  format: date-time
790
789
  nullable: true
791
790
  description: Date/time the balance was last updated in ISO 8601
792
- extended format
791
+ extended format.
792
+ exchange_rate_as_of:
793
+ type: string
794
+ format: date-time
795
+ nullable: true
796
+ description: Date/time the exchange rate used to calculate to_base was
797
+ last updated in ISO 8601 extended format. Null when no exchange rate was
798
+ used or no conversion was available.
793
799
  updated_at:
794
800
  type: string
795
801
  format: date-time
@@ -797,17 +803,18 @@ components:
797
803
  extended format
798
804
  required:
799
805
  - name
806
+ - display_name
800
807
  - balance
801
808
  - symbol
802
809
  - coingecko_id
803
810
  - to_base
804
811
  - balance_as_of
812
+ - exchange_rate_as_of
805
813
  - updated_at
806
814
 
807
815
  syncedCryptoAccount:
808
816
  type: object
809
817
  title: synced crypto account
810
- x-internal: true
811
818
  additionalProperties: false
812
819
  properties:
813
820
  id:
@@ -1072,8 +1079,16 @@ components:
1072
1079
  type: string
1073
1080
  format: date-time
1074
1081
  nullable: true
1075
- description: System defined date/time the balance was last updated in
1076
- ISO 8601 extended format. Ignored if set
1082
+ description: System defined date/time the manual balance record was
1083
+ last updated in ISO 8601 extended format. Ignored if set
1084
+ x-updatable: false
1085
+ exchange_rate_as_of:
1086
+ type: string
1087
+ format: date-time
1088
+ nullable: true
1089
+ description: System defined date/time the exchange rate used to
1090
+ calculate to_base was observed in ISO 8601 extended format. Ignored
1091
+ if set
1077
1092
  x-updatable: false
1078
1093
  created_by_name:
1079
1094
  type: string
@@ -1353,10 +1368,13 @@ components:
1353
1368
  - $ref: "#/components/schemas/accountTypeEnum"
1354
1369
  subtype:
1355
1370
  type: string
1356
- description: If set, an optional account subtype. Examples include<br>
1371
+ nullable: true
1372
+ description: If set, an optional account subtype. Set to `null` to clear it.
1373
+ Examples include<br>
1357
1374
  - retirement - checking - savings - prepaid credit card
1358
1375
  minLength: 1
1359
1376
  maxLength: 100
1377
+ example: prepaid credit card
1360
1378
  x-updatable: true
1361
1379
  balance:
1362
1380
  oneOf:
@@ -1614,6 +1632,7 @@ components:
1614
1632
  type: object
1615
1633
  description: Source information for a manual account balance history entry.
1616
1634
  additionalProperties: false
1635
+ x-internal: true
1617
1636
  properties:
1618
1637
  type:
1619
1638
  type: string
@@ -1631,6 +1650,7 @@ components:
1631
1650
  type: object
1632
1651
  description: Source information for a Plaid-synced account balance history entry.
1633
1652
  additionalProperties: false
1653
+ x-internal: true
1634
1654
  properties:
1635
1655
  type:
1636
1656
  type: string
@@ -1648,6 +1668,7 @@ components:
1648
1668
  type: object
1649
1669
  description: Source information for a manually-tracked cryptocurrency balance history entry.
1650
1670
  additionalProperties: false
1671
+ x-internal: true
1651
1672
  properties:
1652
1673
  type:
1653
1674
  type: string
@@ -1750,9 +1771,10 @@ components:
1750
1771
  - subtype
1751
1772
  - mask
1752
1773
  - symbol
1774
+
1753
1775
  balanceHistoryAccountObject:
1754
1776
  type: object
1755
- title: balance history account object
1777
+ title: balance history for an account object
1756
1778
  additionalProperties: false
1757
1779
  description: Historical balance entries grouped under a single account source.
1758
1780
  properties:
@@ -1776,7 +1798,10 @@ components:
1776
1798
  deleted: "#/components/schemas/balanceHistorySourceDeleted"
1777
1799
  balances:
1778
1800
  type: array
1779
- description: One or more monthly balance history entries for the source account.
1801
+ description: >
1802
+ Monthly balance history entries for the source account. On GET responses,
1803
+ this includes all entries in the requested range. On PUT upsert responses,
1804
+ this includes only the entries modified by that request.
1780
1805
  items:
1781
1806
  $ref: "#/components/schemas/balanceHistoryObject"
1782
1807
  required:
@@ -1787,6 +1812,7 @@ components:
1787
1812
  type: object
1788
1813
  title: balance history entry object
1789
1814
  additionalProperties: false
1815
+ x-internal: true
1790
1816
  description: A historical balance entry for a single account on a single date.
1791
1817
  properties:
1792
1818
  id:
@@ -1800,7 +1826,7 @@ components:
1800
1826
  balance:
1801
1827
  type: string
1802
1828
  pattern: ^-?\d+(\.\d{1,4})?$
1803
- description: Historical balance stored for this entry. For manual and Plaid accounts this is in the account currency. For crypto accounts this is in the user's primary currency.
1829
+ description: Historical balance stored for this entry, as a numeric string with up to four decimal places. Trailing zeros and decimal places are not guaranteed in responses. For manual and Plaid accounts this is in the account currency. For crypto accounts this is in the user's primary currency.
1804
1830
  currency:
1805
1831
  allOf:
1806
1832
  - $ref: "#/components/schemas/currencyEnum"
@@ -1847,7 +1873,7 @@ components:
1847
1873
  date:
1848
1874
  type: string
1849
1875
  format: date
1850
- description: Month to update, in YYYY-MM-DD format. This must be the first day of a month and must not be in the future.
1876
+ description: Month to update, in YYYY-MM-DD format. This must be the first day of a month and must be in a past month.
1851
1877
  balance:
1852
1878
  oneOf:
1853
1879
  - type: number
@@ -1898,37 +1924,6 @@ components:
1898
1924
  required:
1899
1925
  - balances
1900
1926
 
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
1927
  updateBalanceHistoryDetailsRequestObject:
1933
1928
  type: object
1934
1929
  x-internal: true
@@ -2467,14 +2462,9 @@ components:
2467
2462
  external_id:
2468
2463
  type: string
2469
2464
  nullable: true
2470
- description: A user-defined external ID for any transaction that was
2471
- added via csv import, `POST /transactions` API call, or manually
2472
- added via the Lunch Money app. No external ID exists for
2473
- transactions associated with synced accounts, and they cannot be
2474
- added. For transactions associated with manual accounts, the
2475
- external ID must be unique as attempts to add a subsequent
2476
- transaction with the same external_id and manual_account_id will be
2477
- flagged as duplicates and fail.
2465
+ description: A user-defined external ID associated with the transaction.
2466
+ For transactions belonging to manual accounts, the
2467
+ external ID must be unique for each transaction associated with the account.
2478
2468
  minLength: 0
2479
2469
  maxLength: 75
2480
2470
  tag_ids:
@@ -2495,8 +2485,6 @@ components:
2495
2485
  Any transaction notes set by the user or by
2496
2486
  a matched recurring item. This will match the value
2497
2487
  displayed in notes field on the transactions page in the Lunch Money app.
2498
- minLength: 0
2499
- maxLength: 350
2500
2488
  status:
2501
2489
  type: string
2502
2490
  # description: >
@@ -2732,8 +2720,6 @@ components:
2732
2720
  Any transaction notes set by the user or by
2733
2721
  a matched recurring item. This will match the value
2734
2722
  displayed in notes field on the transactions page in the Lunch Money app.
2735
- minLength: 0
2736
- maxLength: 350
2737
2723
  status:
2738
2724
  type: string
2739
2725
  description: >
@@ -2875,14 +2861,9 @@ components:
2875
2861
  external_id:
2876
2862
  type: string
2877
2863
  nullable: true
2878
- description: A user-defined external ID for any transaction that was
2879
- added via csv import, `POST /transactions` API call, or manually
2880
- added via the Lunch Money app. No external ID exists for
2881
- transactions associated with synced accounts, and they cannot be
2882
- added. For transactions associated with manual accounts, the
2883
- external ID must be unique as attempts to add a subsequent
2884
- transaction with the same external_id and manual_account_id will be
2885
- flagged as duplicates and fail.
2864
+ description: A user-defined external ID associated with the transaction.
2865
+ For transactions belonging to manual accounts, the
2866
+ external ID must be unique for each transaction associated with the account.
2886
2867
  minLength: 0
2887
2868
  maxLength: 75
2888
2869
  plaid_metadata:
@@ -2952,7 +2933,7 @@ components:
2952
2933
  currency:
2953
2934
  description: Three-letter lowercase currency code of the transaction
2954
2935
  in ISO 4217 format. Must match one of the [supported
2955
- currencies](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/currencies). If not set
2936
+ currencies](https://lunchmoney.dev/v2/currencies). If not set
2956
2937
  defaults to the user account's primary currency.
2957
2938
  allOf:
2958
2939
  - $ref: "#/components/schemas/currencyEnum"
@@ -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
@@ -3633,10 +3610,11 @@ components:
3633
3610
 
3634
3611
  # Response body for GET /budgets/settings (200)
3635
3612
  budgetSettingsResponseObject:
3636
- x-internal: true
3637
3613
  type: object
3614
+ title: budget settings object
3638
3615
  additionalProperties: false
3639
- description: Budget period and display settings
3616
+ description: Budget period and display settings for the current budgeting
3617
+ account.
3640
3618
  properties:
3641
3619
  budget_period_granularity:
3642
3620
  type: string
@@ -3648,8 +3626,8 @@ components:
3648
3626
  - twice a month
3649
3627
  description: Budget period granularity
3650
3628
  budget_period_quantity:
3651
- type: number
3652
- format: double
3629
+ type: integer
3630
+ format: int32
3653
3631
  description: The number of `granularity` units that make up a single
3654
3632
  budgeting period.
3655
3633
  budget_period_anchor_date:
@@ -4005,7 +3983,9 @@ components:
4005
3983
  while processing the request.<br> If multiple errors were
4006
3984
  encountered, the list will contain multiple objects.<br> Each
4007
3985
  `error` object is guaranteed to have an `errMsg`, but it may also
4008
- contain other error specific properties.
3986
+ contain other error-specific properties such as `code` (for example
3987
+ `VALIDATION_ERROR`), or other properties that are useful to map
3988
+ the error to the relevant part of the request.
4009
3989
  type: array
4010
3990
  items:
4011
3991
  type: object
@@ -4114,6 +4094,7 @@ components:
4114
4094
  # - `cad`: Canadian Dollar
4115
4095
  # - `cdf`: Congolese Franc
4116
4096
  # - `chf`: Swiss Franc
4097
+ # - `clf`: Chilean Unit of Account (UF)
4117
4098
  # - `clp`: Chilean Peso
4118
4099
  # - `cny`: Chinese Yuan
4119
4100
  # - `cop`: Colombian Peso
@@ -4129,6 +4110,7 @@ components:
4129
4110
  # - `egp`: Egyptian Pound
4130
4111
  # - `ern`: Eritrean Nakfa
4131
4112
  # - `etb`: Ethiopian Birr
4113
+ # - `eth`: Ethereum
4132
4114
  # - `eur`: Euro
4133
4115
  # - `fjd`: Fijian Dollar
4134
4116
  # - `fkp`: Falkland Islands Pound
@@ -4236,10 +4218,13 @@ components:
4236
4218
  # - `uyu`: Uruguayan Peso
4237
4219
  # - `uzs`: Uzbekistan Som
4238
4220
  # - `vef`: Venezuelan Bolívar
4221
+ # - `ves`: Venezuelan Bolívar Sotiemas
4239
4222
  # - `vnd`: Vietnamese Dong
4240
4223
  # - `vuv`: Vanuatu Vatu
4241
4224
  # - `wst`: Samoan Tala
4242
4225
  # - `xaf`: CFA Franc BEAC
4226
+ # - `xag`: Silver (troy ounce)
4227
+ # - `xau`: Gold (troy ounce)
4243
4228
  # - `xcd`: East Caribbean Dollar
4244
4229
  # - `xof`: CFA Franc BCEAO
4245
4230
  # - `xpf`: CFP Franc
@@ -4277,6 +4262,7 @@ components:
4277
4262
  - cad
4278
4263
  - cdf
4279
4264
  - chf
4265
+ - clf
4280
4266
  - clp
4281
4267
  - cny
4282
4268
  - cop
@@ -4292,6 +4278,7 @@ components:
4292
4278
  - egp
4293
4279
  - ern
4294
4280
  - etb
4281
+ - eth
4295
4282
  - eur
4296
4283
  - fjd
4297
4284
  - fkp
@@ -4399,10 +4386,13 @@ components:
4399
4386
  - uyu
4400
4387
  - uzs
4401
4388
  - vef
4389
+ - ves
4402
4390
  - vnd
4403
4391
  - vuv
4404
4392
  - wst
4405
4393
  - xaf
4394
+ - xag
4395
+ - xau
4406
4396
  - xcd
4407
4397
  - xof
4408
4398
  - xpf
@@ -5901,6 +5891,7 @@ paths:
5901
5891
  coingecko_id: bitcoin
5902
5892
  to_base: 53124.72
5903
5893
  balance_as_of: "2026-02-25T14:22:10.000Z"
5894
+ exchange_rate_as_of: "2026-02-25T14:10:00.000Z"
5904
5895
  created_by_name: User 1
5905
5896
  created_at: "2025-11-12T20:14:32.000Z"
5906
5897
  updated_at: "2026-02-25T14:22:10.000Z"
@@ -5958,6 +5949,7 @@ paths:
5958
5949
  coingecko_id: ethereum
5959
5950
  to_base: 28998.44
5960
5951
  balance_as_of: "2026-03-01T09:20:41.000Z"
5952
+ exchange_rate_as_of: "2026-03-01T09:15:00.000Z"
5961
5953
  created_by_name: User 1
5962
5954
  created_at: "2026-03-01T09:20:41.000Z"
5963
5955
  updated_at: "2026-03-01T09:20:41.000Z"
@@ -5970,11 +5962,22 @@ paths:
5970
5962
  examples:
5971
5963
  missing required properties:
5972
5964
  value:
5973
- message: Request Validation Failure
5965
+ message: Invalid Request Body
5974
5966
  errors:
5975
5967
  - errMsg: "Missing required property 'name' in request body."
5976
5968
  - errMsg: "Missing required property 'balance' in request body."
5977
5969
  - errMsg: "Missing required property 'symbol' in request body."
5970
+ invalid balance:
5971
+ value:
5972
+ message: Invalid Request Body
5973
+ errors:
5974
+ - errMsg: "Invalid value for property 'balance'. 'abc' cannot be converted to a number"
5975
+ - errMsg: "Invalid value for property 'balance'. Invalid input"
5976
+ invalid property:
5977
+ value:
5978
+ message: Invalid Request Body
5979
+ errors:
5980
+ - errMsg: "Invalid property 'coingecko_id' in request body."
5978
5981
  unsupported symbol:
5979
5982
  value:
5980
5983
  message: Request Validation Failure
@@ -6025,6 +6028,7 @@ paths:
6025
6028
  coingecko_id: bitcoin
6026
6029
  to_base: 53124.72
6027
6030
  balance_as_of: "2026-02-25T14:22:10.000Z"
6031
+ exchange_rate_as_of: "2026-02-25T14:10:00.000Z"
6028
6032
  created_by_name: User 1
6029
6033
  created_at: "2025-11-12T20:14:32.000Z"
6030
6034
  updated_at: "2026-02-25T14:22:10.000Z"
@@ -6102,6 +6106,7 @@ paths:
6102
6106
  coingecko_id: bitcoin
6103
6107
  to_base: 56011.12
6104
6108
  balance_as_of: "2026-03-01T09:41:18.000Z"
6109
+ exchange_rate_as_of: "2026-03-01T09:35:00.000Z"
6105
6110
  created_by_name: User 1
6106
6111
  created_at: "2025-11-12T20:14:32.000Z"
6107
6112
  updated_at: "2026-02-25T14:22:10.000Z"
@@ -6122,6 +6127,7 @@ paths:
6122
6127
  coingecko_id: bitcoin
6123
6128
  to_base: 56011.12
6124
6129
  balance_as_of: "2026-03-01T09:41:18.000Z"
6130
+ exchange_rate_as_of: "2026-03-01T09:35:00.000Z"
6125
6131
  created_by_name: User 1
6126
6132
  created_at: "2025-11-12T20:14:32.000Z"
6127
6133
  updated_at: "2026-03-01T09:41:18.000Z"
@@ -6251,6 +6257,7 @@ paths:
6251
6257
  coingecko_id: ethereum
6252
6258
  to_base: 28998.44
6253
6259
  balance_as_of: "2026-02-25T14:25:00.000Z"
6260
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6254
6261
  updated_at: "2026-02-25T14:25:01.000Z"
6255
6262
  - name: BTC
6256
6263
  balance: "0.100020003000400050"
@@ -6258,6 +6265,7 @@ paths:
6258
6265
  coingecko_id: bitcoin
6259
6266
  to_base: 6231.28
6260
6267
  balance_as_of: "2026-02-25T14:25:00.000Z"
6268
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6261
6269
  updated_at: "2026-02-25T14:25:01.000Z"
6262
6270
  - id: 33005
6263
6271
  provider: kraken
@@ -6273,6 +6281,7 @@ paths:
6273
6281
  coingecko_id: ripple
6274
6282
  to_base: 1287.50
6275
6283
  balance_as_of: "2026-02-26T07:22:30.000Z"
6284
+ exchange_rate_as_of: "2026-02-26T07:10:00.000Z"
6276
6285
  updated_at: "2026-02-26T07:22:30.000Z"
6277
6286
  "401":
6278
6287
  $ref: "#/components/responses/unauthorizedToken"
@@ -6325,6 +6334,7 @@ paths:
6325
6334
  coingecko_id: ethereum
6326
6335
  to_base: 28998.44
6327
6336
  balance_as_of: "2026-02-25T14:25:00.000Z"
6337
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6328
6338
  updated_at: "2026-02-25T14:25:01.000Z"
6329
6339
  - name: BTC
6330
6340
  balance: "0.100020003000400050"
@@ -6332,6 +6342,7 @@ paths:
6332
6342
  coingecko_id: bitcoin
6333
6343
  to_base: 6231.28
6334
6344
  balance_as_of: "2026-02-25T14:25:00.000Z"
6345
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6335
6346
  updated_at: "2026-02-25T14:25:01.000Z"
6336
6347
  "400":
6337
6348
  description: Bad Request
@@ -6397,6 +6408,7 @@ paths:
6397
6408
  coingecko_id: ethereum
6398
6409
  to_base: 28998.44
6399
6410
  balance_as_of: "2026-02-25T14:25:00.000Z"
6411
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6400
6412
  updated_at: "2026-02-25T14:25:01.000Z"
6401
6413
  "400":
6402
6414
  description: Bad Request
@@ -6482,6 +6494,7 @@ paths:
6482
6494
  coingecko_id: ethereum
6483
6495
  to_base: 28998.44
6484
6496
  balance_as_of: "2026-02-25T14:25:00.000Z"
6497
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6485
6498
  updated_at: "2026-02-25T14:25:01.000Z"
6486
6499
  - name: BTC
6487
6500
  balance: "0.100020003000400050"
@@ -6489,6 +6502,7 @@ paths:
6489
6502
  coingecko_id: bitcoin
6490
6503
  to_base: 6231.28
6491
6504
  balance_as_of: "2026-02-25T14:25:00.000Z"
6505
+ exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
6492
6506
  updated_at: "2026-02-25T14:25:01.000Z"
6493
6507
  "401":
6494
6508
  $ref: "#/components/responses/unauthorizedToken"
@@ -6711,7 +6725,7 @@ paths:
6711
6725
  value:
6712
6726
  message: Request Validation Failure
6713
6727
  errors:
6714
- - errMsg: "`start_date` must be less than or equal to `end_date`."
6728
+ - errMsg: "`start_date` must be before or equal to `end_date`."
6715
6729
  not first of month:
6716
6730
  value:
6717
6731
  message: Request Validation Failure
@@ -6837,7 +6851,7 @@ paths:
6837
6851
  value:
6838
6852
  message: Request Validation Failure
6839
6853
  errors:
6840
- - errMsg: "`start_date` must be less than or equal to `end_date`."
6854
+ - errMsg: "`start_date` must be before or equal to `end_date`."
6841
6855
  "401":
6842
6856
  $ref: "#/components/responses/unauthorizedToken"
6843
6857
  "404":
@@ -6856,7 +6870,7 @@ paths:
6856
6870
  value:
6857
6871
  message: Not Found
6858
6872
  errors:
6859
- - errMsg: "There is no deleted balance history source with the id: 99999999."
6873
+ - errMsg: "Deleted balance history source 99999999 was not found."
6860
6874
  "429":
6861
6875
  $ref: "#/components/responses/rateLimited"
6862
6876
  "500":
@@ -6867,29 +6881,29 @@ paths:
6867
6881
  summary: Upsert balance history for an account
6868
6882
  description: >-
6869
6883
  Upsert one or more historical balance entries for a single manual, Plaid,
6870
- manual crypto, or deleted acount. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
6884
+ manual crypto, or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
6871
6885
 
6872
- The `account_type` path parameter identifies the the type of account and the
6886
+ The `account_type` path parameter identifies the type of account and the
6873
6887
  `account_id` path parameter identifies the specific id for that account type.<br><br>
6874
6888
 
6875
6889
  Submit one or more entries in the `balances` array. Each entry must specify
6876
6890
  a `date` and `balance` value.<br><br>
6877
6891
 
6878
6892
  Balance history is monthly. Each entry's `date` must be the first day of
6879
- a month and must not be in the future.<br><br>
6893
+ a month and must be in a past month.<br><br>
6880
6894
 
6881
6895
  `currency` may be provided for any balance entry. If omitted, it defaults
6882
6896
  to the account currency for manual/Plaid accounts, or the user's primary
6883
6897
  currency for crypto/deleted accounts.<br><br>
6884
6898
 
6885
- `symbol` is optional for `crypto_manual` accounts, tolerated for `deleted`
6886
- accounts, and invalid for `manual` or `plaid` accounts.<br><br>
6899
+ `symbol` may only be set when `account_type` is `crypto_manual` or
6900
+ `crypto_synced`. It is optional for `crypto_manual` accounts and tolerated
6901
+ for `deleted` accounts.<br><br>
6887
6902
 
6888
- `crypto_balance` may be provided for `crypto_manual` and `deleted` accounts,
6889
- and is invalid for `manual` or `plaid` accounts.<br><br>
6903
+ `crypto_balance` may be provided for `crypto_manual`, `crypto_synced`, and
6904
+ `deleted` accounts, and is invalid for `manual` or `plaid` accounts.<br><br>
6890
6905
 
6891
- Use `PUT /v2/balance_history/deleted/{account_id}/details` to update
6892
- deleted-source metadata.
6906
+ The response contains only the balance entries that were submitted in this request.
6893
6907
  operationId: upsertBalanceHistoryForAccount
6894
6908
  parameters:
6895
6909
  - name: account_type
@@ -6934,7 +6948,7 @@ paths:
6934
6948
  symbol: btc
6935
6949
  crypto_balance: "0.020000000000000000"
6936
6950
  currency: usd
6937
- balance: "1255.0000"
6951
+ balance: "1255"
6938
6952
  get-shaped balance entry input:
6939
6953
  value:
6940
6954
  balances:
@@ -6944,60 +6958,71 @@ paths:
6944
6958
  currency: usd
6945
6959
  to_base: 41500
6946
6960
  crypto_balance: null
6947
- partial success request:
6948
- value:
6949
- balances:
6950
- - date: "2026-03-01"
6951
- balance: "41500.0000"
6952
- - date: "2026-04-01"
6953
- balance: "41625.5000"
6954
- symbol: btc
6955
6961
  responses:
6956
6962
  "200":
6957
- description: One or more balance history entries were processed
6963
+ description: Returns the modified balance entries only. Other historical
6964
+ entries for the account are omitted from `balances`.
6958
6965
  content:
6959
6966
  application/json:
6960
6967
  schema:
6961
- $ref: "#/components/schemas/upsertBalanceHistoryResponseObject"
6968
+ $ref: "#/components/schemas/balanceHistoryAccountObject"
6962
6969
  examples:
6963
- balances updated:
6970
+ manual account bulk upsert:
6971
+ summary: Two upserted rows returned (not full account history)
6964
6972
  value:
6965
- updated_balance_history:
6966
- source:
6967
- type: manual
6968
- manual_account_id: 119807
6969
- balances:
6970
- - id: 601
6971
- date: "2026-03-01"
6972
- balance: "41500.0000"
6973
- currency: usd
6974
- to_base: 41500
6975
- crypto_balance: null
6976
- - id: 602
6977
- date: "2026-04-01"
6978
- balance: "41625.5000"
6979
- currency: usd
6980
- to_base: 41625.5
6981
- crypto_balance: null
6982
- errors: []
6983
- partial success:
6984
- value:
6985
- updated_balance_history:
6986
- source:
6987
- type: manual
6988
- manual_account_id: 119807
6989
- balances:
6990
- - id: 601
6991
- date: "2026-03-01"
6992
- balance: "41500.0000"
6993
- currency: usd
6994
- to_base: 41500
6995
- crypto_balance: null
6996
- errors:
6997
- - request_balances_index: 1
6998
- message: "`symbol` may not be set when `account_type` is `manual` or `plaid`."
6973
+ source:
6974
+ type: manual
6975
+ manual_account_id: 119807
6976
+ balances:
6977
+ - id: 601
6978
+ date: "2026-03-01"
6979
+ balance: "41500.0000"
6980
+ currency: usd
6981
+ to_base: 41500
6982
+ crypto_balance: null
6983
+ - id: 602
6984
+ date: "2026-04-01"
6985
+ balance: "41625.5000"
6986
+ currency: usd
6987
+ to_base: 41625.5
6988
+ crypto_balance: null
6989
+ crypto manual balance with symbol:
6990
+ summary: Single upserted row returned
6991
+ value:
6992
+ source:
6993
+ type: crypto_manual
6994
+ crypto_manual_id: 22001
6995
+ symbol: btc
6996
+ balances:
6997
+ - id: 603
6998
+ date: "2026-03-01"
6999
+ balance: "56011.1200"
7000
+ currency: usd
7001
+ to_base: 56011.12
7002
+ crypto_balance: "0.852341920145782301"
7003
+ deleted account bulk upsert:
7004
+ summary: Single upserted row returned
7005
+ value:
7006
+ source:
7007
+ type: deleted
7008
+ deleted_account_id: 91
7009
+ name: Savings
7010
+ institution_name: Old Bank
7011
+ display_name: Closed Savings
7012
+ account_type: savings
7013
+ subtype: savings
7014
+ mask: "1234"
7015
+ symbol: btc
7016
+ balances:
7017
+ - id: 504
7018
+ date: "2026-03-01"
7019
+ balance: "1255"
7020
+ currency: usd
7021
+ to_base: 1255
7022
+ crypto_balance: "0.020000000000000000"
6999
7023
  "400":
7000
- description: Bad Request
7024
+ description: Bad Request. The entire request is rejected if any row in
7025
+ `balances` fails validation; no rows are updated.
7001
7026
  content:
7002
7027
  application/json:
7003
7028
  schema:
@@ -7008,6 +7033,11 @@ paths:
7008
7033
  message: Invalid Request Body
7009
7034
  errors:
7010
7035
  - errMsg: "Missing required property 'balances' in request body."
7036
+ empty balances array:
7037
+ value:
7038
+ message: Invalid Request Body
7039
+ errors:
7040
+ - errMsg: "Invalid value for property 'balances'. Array must contain at least 1 element(s)"
7011
7041
  invalid property:
7012
7042
  value:
7013
7043
  message: Invalid Request Body
@@ -7018,16 +7048,26 @@ paths:
7018
7048
  message: Request Validation Failure
7019
7049
  errors:
7020
7050
  - errMsg: "`date` must be the first day of a month."
7051
+ request_balances_index: 0
7052
+ code: VALIDATION_ERROR
7021
7053
  future date:
7022
7054
  value:
7023
7055
  message: Request Validation Failure
7024
7056
  errors:
7025
- - errMsg: "`date` must not be in the future."
7057
+ - errMsg: "`date` must be in a past month."
7058
+ request_balances_index: 1
7026
7059
  crypto balance not allowed:
7027
7060
  value:
7028
7061
  message: Request Validation Failure
7029
7062
  errors:
7030
- - errMsg: "`crypto_balance` may only be set when `account_type` is `crypto_manual` or `deleted`."
7063
+ - errMsg: "`crypto_balance` may only be set when `account_type` is `crypto_manual`, `crypto_synced`, or `deleted`."
7064
+ request_balances_index: 0
7065
+ invalid row in bulk request:
7066
+ value:
7067
+ message: Request Validation Failure
7068
+ errors:
7069
+ - errMsg: "`symbol` may only be set when `account_type` is `crypto_manual` or `crypto_synced`."
7070
+ request_balances_index: 1
7031
7071
  "401":
7032
7072
  $ref: "#/components/responses/unauthorizedToken"
7033
7073
  "404":
@@ -7170,7 +7210,7 @@ paths:
7170
7210
  value:
7171
7211
  message: Request Validation Failure
7172
7212
  errors:
7173
- - errMsg: "`start_date` must be less than or equal to `end_date`."
7213
+ - errMsg: "`start_date` must be before or equal to `end_date`."
7174
7214
  "401":
7175
7215
  $ref: "#/components/responses/unauthorizedToken"
7176
7216
  "404":
@@ -7189,7 +7229,7 @@ paths:
7189
7229
  value:
7190
7230
  message: Not Found
7191
7231
  errors:
7192
- - errMsg: "There is no synced crypto balance history stream for symbol 'doge' on account id: 33004."
7232
+ - errMsg: "There is no balance history for symbol 'doge' on this account."
7193
7233
  "429":
7194
7234
  $ref: "#/components/responses/rateLimited"
7195
7235
  "500":
@@ -7208,14 +7248,18 @@ paths:
7208
7248
  a `date` and `balance` value.<br><br>
7209
7249
 
7210
7250
  Balance history is monthly. Each entry's `date` must be the first day of
7211
- a month and must not be in the future.<br><br>
7251
+ a month and must be in a past month.<br><br>
7212
7252
 
7213
- The request body must not include `symbol`; the symbol is supplied by the path.<br><br>
7253
+ The request body may include an optional `symbol` on each balance entry. If
7254
+ provided, it must match the `symbol` path parameter. Omit `symbol` to use
7255
+ the path value.<br><br>
7214
7256
 
7215
7257
  `currency` may be provided for any balance entry. If omitted, it defaults
7216
7258
  to the user's primary currency for synced crypto balances.<br><br>
7217
7259
 
7218
- `crypto_balance` may be provided for synced crypto balances.
7260
+ `crypto_balance` may be provided for synced crypto balances.<br><br>
7261
+
7262
+ The response contains only the balance entries that were submitted in this request.
7219
7263
  operationId: upsertBalanceHistoryForCryptoSynced
7220
7264
  parameters:
7221
7265
  - name: account_id
@@ -7249,62 +7293,38 @@ paths:
7249
7293
  - date: "2026-04-01"
7250
7294
  balance: "6500.0000"
7251
7295
  crypto_balance: "0.100020003000400050"
7252
- partial success request:
7253
- value:
7254
- balances:
7255
- - date: "2026-03-01"
7256
- balance: "6400.0000"
7257
- crypto_balance: "0.100020003000400050"
7258
- - date: "2026-04-01"
7259
- balance: "not-a-number"
7260
7296
  responses:
7261
7297
  "200":
7262
- description: One or more balance history entries were processed
7298
+ description: Returns the modified balance entries only. Other historical
7299
+ entries for the symbol stream are omitted from `balances`.
7263
7300
  content:
7264
7301
  application/json:
7265
7302
  schema:
7266
- $ref: "#/components/schemas/upsertBalanceHistoryResponseObject"
7303
+ $ref: "#/components/schemas/balanceHistoryAccountObject"
7267
7304
  examples:
7268
- balances updated:
7305
+ synced crypto bulk upsert:
7306
+ summary: Two upserted rows returned (not full symbol history)
7269
7307
  value:
7270
- updated_balance_history:
7271
- source:
7272
- type: crypto_synced
7273
- crypto_synced_id: 33004
7274
- symbol: btc
7275
- balances:
7276
- - id: 604
7277
- date: "2026-03-01"
7278
- balance: "6400.0000"
7279
- currency: usd
7280
- to_base: 6400
7281
- crypto_balance: "0.100020003000400050"
7282
- - id: 605
7283
- date: "2026-04-01"
7284
- balance: "6500.0000"
7285
- currency: usd
7286
- to_base: 6500
7287
- crypto_balance: "0.100020003000400050"
7288
- errors: []
7289
- partial success:
7290
- value:
7291
- updated_balance_history:
7292
- source:
7293
- type: crypto_synced
7294
- crypto_synced_id: 33004
7295
- symbol: btc
7296
- balances:
7297
- - id: 604
7298
- date: "2026-03-01"
7299
- balance: "6400.0000"
7300
- currency: usd
7301
- to_base: 6400
7302
- crypto_balance: "0.100020003000400050"
7303
- errors:
7304
- - request_balances_index: 1
7305
- message: "`balance` must be a valid numeric string or number."
7308
+ source:
7309
+ type: crypto_synced
7310
+ crypto_synced_id: 33004
7311
+ symbol: btc
7312
+ balances:
7313
+ - id: 604
7314
+ date: "2026-03-01"
7315
+ balance: "6400.0000"
7316
+ currency: usd
7317
+ to_base: 6400
7318
+ crypto_balance: "0.100020003000400050"
7319
+ - id: 605
7320
+ date: "2026-04-01"
7321
+ balance: "6500.0000"
7322
+ currency: usd
7323
+ to_base: 6500
7324
+ crypto_balance: "0.100020003000400050"
7306
7325
  "400":
7307
- description: Bad Request
7326
+ description: Bad Request. The entire request is rejected if any row in
7327
+ `balances` fails validation; no rows are updated.
7308
7328
  content:
7309
7329
  application/json:
7310
7330
  schema:
@@ -7315,16 +7335,35 @@ paths:
7315
7335
  message: Invalid Request Body
7316
7336
  errors:
7317
7337
  - errMsg: "Missing required property 'balances' in request body."
7338
+ empty balances array:
7339
+ value:
7340
+ message: Invalid Request Body
7341
+ errors:
7342
+ - errMsg: "Invalid value for property 'balances'. Array must contain at least 1 element(s)"
7318
7343
  invalid date:
7319
7344
  value:
7320
7345
  message: Request Validation Failure
7321
7346
  errors:
7322
7347
  - errMsg: "`date` must be the first day of a month."
7348
+ request_balances_index: 0
7323
7349
  future date:
7324
7350
  value:
7325
7351
  message: Request Validation Failure
7326
7352
  errors:
7327
- - errMsg: "`date` must not be in the future."
7353
+ - errMsg: "`date` must be in a past month."
7354
+ request_balances_index: 1
7355
+ symbol mismatch:
7356
+ value:
7357
+ message: Request Validation Failure
7358
+ errors:
7359
+ - errMsg: "`symbol` in request body (doge) does not match the path symbol (eth)."
7360
+ request_balances_index: 0
7361
+ invalid row in bulk request:
7362
+ value:
7363
+ message: Request Validation Failure
7364
+ errors:
7365
+ - errMsg: "`balance` must be a valid numeric string or number."
7366
+ request_balances_index: 1
7328
7367
  "401":
7329
7368
  $ref: "#/components/responses/unauthorizedToken"
7330
7369
  "404":
@@ -7343,7 +7382,7 @@ paths:
7343
7382
  value:
7344
7383
  message: Not Found
7345
7384
  errors:
7346
- - errMsg: "There is no synced crypto balance history stream for symbol 'doge' on account id: 33004."
7385
+ - errMsg: "There is no balance history for symbol 'doge' on this account."
7347
7386
  "429":
7348
7387
  $ref: "#/components/responses/rateLimited"
7349
7388
  "500":
@@ -7388,7 +7427,7 @@ paths:
7388
7427
  example:
7389
7428
  message: Not Found
7390
7429
  errors:
7391
- - errMsg: "There is no synced crypto balance history stream for symbol 'doge' on account id: 33004."
7430
+ - errMsg: "There is no balance history for symbol 'doge' on this account."
7392
7431
  "429":
7393
7432
  $ref: "#/components/responses/rateLimited"
7394
7433
  "500":
@@ -7412,6 +7451,16 @@ paths:
7412
7451
  responses:
7413
7452
  "204":
7414
7453
  description: The balance history entry was deleted
7454
+ "400":
7455
+ description: Bad Request
7456
+ content:
7457
+ application/json:
7458
+ schema:
7459
+ $ref: "#/components/schemas/errorResponseObject"
7460
+ example:
7461
+ message: Request Validation Failure
7462
+ errors:
7463
+ - errMsg: "Invalid value type for path parameter: 'id'. Expected 'number', received 'string'."
7415
7464
  "401":
7416
7465
  $ref: "#/components/responses/unauthorizedToken"
7417
7466
  "404":
@@ -7486,7 +7535,7 @@ paths:
7486
7535
  example:
7487
7536
  message: Invalid Request Body
7488
7537
  errors:
7489
- - errMsg: "Request body must include at least one of: name, institution_name, display_name, account_type, subtype, mask."
7538
+ - errMsg: "At least one property must be provided: name, institution_name, display_name, account_type, subtype, mask."
7490
7539
  "401":
7491
7540
  $ref: "#/components/responses/unauthorizedToken"
7492
7541
  "404":
@@ -7498,7 +7547,7 @@ paths:
7498
7547
  example:
7499
7548
  message: Not Found
7500
7549
  errors:
7501
- - errMsg: "There is no deleted balance history source with the id: 99999999."
7550
+ - errMsg: "Deleted balance history source 99999999 was not found."
7502
7551
  "429":
7503
7552
  $ref: "#/components/responses/rateLimited"
7504
7553
  "500":
@@ -8512,19 +8561,19 @@ paths:
8512
8561
  description: Sets the maximum number of transactions to return. If
8513
8562
  more match the filter criteria, the response will include a
8514
8563
  `has_more` attribute set to `true`. See
8515
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
8564
+ [Pagination](https://lunchmoney.dev/v2/pagination)
8516
8565
  - name: offset
8517
8566
  in: query
8518
8567
  schema:
8519
8568
  type: integer
8520
8569
  description: Sets the offset for the records returned. This is
8521
8570
  typically set automatically in the header. See
8522
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
8571
+ [Pagination](https://lunchmoney.dev/v2/pagination)
8523
8572
  responses:
8524
8573
  "200":
8525
8574
  description: Returns an array of transactions. <br><br>The `has_more`
8526
8575
  property is set to `true` if more transactions are available. See
8527
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
8576
+ [Pagination](https://lunchmoney.dev/v2/pagination)
8528
8577
  content:
8529
8578
  application/json:
8530
8579
  schema:
@@ -10190,7 +10239,7 @@ paths:
10190
10239
  description: |
10191
10240
  The payee for the new grouped transaction.
10192
10241
  minLength: 0
10193
- maxLength: 1000
10242
+
10194
10243
  category_id:
10195
10244
  type: integer
10196
10245
  format: int64
@@ -10205,8 +10254,6 @@ paths:
10205
10254
  nullable: true
10206
10255
  description: |
10207
10256
  Notes for the grouped transaction.
10208
- minLength: 0
10209
- maxLength: 350
10210
10257
  status:
10211
10258
  type: string
10212
10259
  description: If set, must be either `reviewed` or
@@ -11569,12 +11616,15 @@ paths:
11569
11616
  get:
11570
11617
  tags:
11571
11618
  - budgets
11572
- summary: Get budget settings
11573
- description: Returns the budget-related settings for the user's account.
11619
+ summary: Get budget period settings
11620
+ description: |-
11621
+ Returns budget period and display settings for the budget
11622
+ associated with this API token.<p> These control how budget **periods** are calculated
11623
+ (granularity, anchor date, rollover, and related options).
11574
11624
  operationId: getBudgetSettings
11575
11625
  responses:
11576
11626
  "200":
11577
- description: Budget settings for the account
11627
+ description: Budget period settings for the current budget
11578
11628
  content:
11579
11629
  application/json:
11580
11630
  schema:
@@ -11597,7 +11647,7 @@ paths:
11597
11647
  Note that `start_date` **must** be a valid budget period start for the account (based on the account's
11598
11648
  budget period settings). If an invalid `start_date` is provided, the request will fail with an error that indicates what the previous and next valid start dates are.<p>
11599
11649
 
11600
- Use the [budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view the account's budget settings.<br>
11650
+ Use the [/budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view the budget period settings for the account.<br>
11601
11651
  To view details for existing budgets, use the [summary](#tag/summary) endpoint.
11602
11652
  operationId: upsertBudget
11603
11653
  requestBody:
@@ -11668,7 +11718,7 @@ paths:
11668
11718
  period settings). If an invalid `start_date` is provided, the request
11669
11719
  will fail with an error that indicates what the previous and next valid
11670
11720
  start dates are.<p> Use the
11671
- [budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view
11721
+ [/budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view
11672
11722
  the account's budget settings.<br> To view details for existing budgets,
11673
11723
  use the [summary](#tag/summary) endpoint.
11674
11724
  operationId: deleteBudget