@lunch-money/developer-docs 2.11.0-preview.9 → 2.11.1-docs.1

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.
@@ -4,13 +4,23 @@ info:
4
4
  description: |-
5
5
  ### Introduction
6
6
 
7
+ Welcome to the Lunch Money v2 API reference. This is the **v2.11.1** spec.
8
+
7
9
  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).
8
10
 
9
- <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>
11
+
12
+ **Try it from these docs**
10
13
 
11
- **Static Mock Server**
14
+ These docs are interactive — use **Test request** on any endpoint to call the API from this page.
15
+ Choose a LIVE or MOCK service from the Server dropdown.
16
+ Requests sent to `https://api.lunchmoney.dev/v2` can <span class="red-text"><strong>change or delete</strong></span> your data and are <span class="red-text"><strong>permanent</strong></span>.
17
+ See the [Getting Started Guide](https://lunchmoney.dev/v2/getting-started) before using the live API.
18
+
19
+ **Static mock server**
12
20
 
13
- 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.
21
+ Explore without risk to real data. Select `http://mock.lunchmoney.dev/v2` in the Server dropdown to work with static mock data.
22
+ POST, PUT, and DELETE requests will return realistic responses, but do not change the mock data.
23
+
14
24
 
15
25
  **Client Libraries & SDKs**
16
26
 
@@ -18,33 +28,36 @@ info:
18
28
 
19
29
  **Migrating from v1**
20
30
 
21
- The v2 API is not backwards compatible with v1. See the [Migration Guide](https://alpha.lunchmoney.dev/v2/migration-guide) for details.
31
+ The v2 API is not backwards compatible with v1. See the [Migration Guide](https://lunchmoney.dev/v2/migration-guide) for details.
22
32
 
23
33
  **Useful links**
24
- - [Developer Portal](https://alpha.lunchmoney.dev/v2/introduction)
25
- - [Getting Started Guide](https://alpha.lunchmoney.dev/v2/getting-started)
26
- - [v2 API Overview](https://alpha.lunchmoney.dev/v2/overview)
27
- - [Version History](https://alpha.lunchmoney.dev/v2/version-history)
28
- - [Migration Guide](https://alpha.lunchmoney.dev/v2/migration-guide)
29
- - [Rate Limits](https://alpha.lunchmoney.dev/v2/rate-limits)
34
+ - [Getting Started Guide](https://lunchmoney.dev/v2/getting-started)
35
+ - [v2 API Overview](https://lunchmoney.dev/v2/overview)
36
+ - [Version History](https://lunchmoney.dev/v2/version-history)
37
+ - [Migration Guide](https://lunchmoney.dev/v2/migration-guide)
38
+ - [Rate Limits](https://lunchmoney.dev/v2/rate-limits)
30
39
  termsOfService: https://lunchmoney.dev/#current-status
31
40
  contact:
32
41
  email: devsupport@lunchmoney.app
33
42
  license:
34
43
  name: Apache 2.0
35
44
  url: http://www.apache.org/licenses/LICENSE-2.0.html
36
- version: 2.11.0
45
+ version: 2.11.1
37
46
 
38
47
  servers:
39
48
  - url: https://api.lunchmoney.dev/v2
40
- description: v2 Lunch Money API Server - changes will affect real data!
41
- # - url: https://mock.lunchmoney.dev/v2
42
- - url: https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/
43
- description: Static mock version of the v2 Lunch Money API Server
49
+ description: ⚠ LIVE — changes real Lunch Money data
50
+ - url: http://mock.lunchmoney.dev/v2
51
+ description: MOCK — static demo data, no API key required
44
52
 
45
53
  tags:
46
54
  - name: me
47
- description: View details and settings for the current user and account
55
+ description: View details and settings for the current user and account.<p>
56
+ Use [/me/user/settings](#tag/me/GET/me/user/settings) for user-wide
57
+ preferences, [/me/account/settings](#tag/me/GET/me/account/settings) for
58
+ account-wide preferences, and
59
+ [/me/user/account/settings](#tag/me/GET/me/user/account/settings) for
60
+ preferences specific to the current user and budget account.
48
61
  - name: categories
49
62
  description: Work with categories
50
63
  externalDocs:
@@ -71,7 +84,11 @@ tags:
71
84
  description: Learn more about crypto assets
72
85
  url: https://support.lunchmoney.app/setup/crypto
73
86
  - name: balance_history
74
- description: View and update historical account balances. Balance history is what drives the [Net Worth](https://my.lunchmoney.app/net-worth) views in the Lunch Money app. Balance history is generated for each account's balance on the first day of each month and can be edited in the Lunch Money app or via the API.
87
+ description: >-
88
+ View and update monthly account balances used by the
89
+ [Net Worth](https://my.lunchmoney.app/net-worth) views in the Lunch Money app.
90
+ History is monthly. The current month may be calculated on demand when
91
+ requested.
75
92
  - name: recurring_items
76
93
  description: Work with recurring items
77
94
  externalDocs:
@@ -138,12 +155,18 @@ components:
138
155
  account_id:
139
156
  type: integer
140
157
  format: int64
141
- description: Unique ID for the current budgeting account
158
+ description: Unique ID for the current budget account
142
159
  budget_name:
143
160
  type: string
144
- description: Name of the current budgeting account
161
+ description: Name of the current budget account.<p> Also available
162
+ as `display_name` on
163
+ [/me/account/settings](#tag/me/GET/me/account/settings), which is
164
+ the preferred endpoint for reading and updating account settings.
145
165
  primary_currency:
146
- description: Primary currency for the current budgeting account
166
+ description: Primary currency for the current budget account.<p>
167
+ Also available on [/me/account/settings](#tag/me/GET/me/account/settings),
168
+ which is the preferred endpoint for reading and updating account
169
+ settings.
147
170
  allOf:
148
171
  - $ref: "#/components/schemas/currencyEnum"
149
172
  api_key_label:
@@ -979,16 +1002,19 @@ components:
979
1002
  example: Cold Wallet BTC
980
1003
  display_name:
981
1004
  type: string
1005
+ nullable: true
982
1006
  minLength: 1
983
1007
  maxLength: 45
984
- description: Optional display name for the manual crypto asset. If
985
- omitted, clients may derive one from `institution_name` + `name`.
1008
+ description: Display name for the manual crypto asset. If omitted or
1009
+ `null`, clients may derive one from `institution_name` + `name`.
986
1010
  example: Cold Storage
987
1011
  institution_name:
988
1012
  type: string
1013
+ nullable: true
989
1014
  minLength: 1
990
1015
  maxLength: 50
991
- description: Optional institution or wallet provider display name
1016
+ description: Institution or wallet provider display name. If omitted
1017
+ or `null`, no institution name is set.
992
1018
  example: Ledger
993
1019
  balance:
994
1020
  oneOf:
@@ -1244,15 +1270,19 @@ components:
1244
1270
  example: My Savings Account
1245
1271
  institution_name:
1246
1272
  type: string
1273
+ nullable: true
1247
1274
  example: Bank of the West
1248
- description: Name of institution holding the manual account
1275
+ description: Name of the institution holding the manual account. If
1276
+ omitted or `null`, no institution name is set.
1249
1277
  minLength: 1
1250
1278
  maxLength: 50
1251
1279
  display_name:
1252
1280
  type: string
1253
- description: Display name of the manual account as set by user or
1254
- derived from the `institution_name` and `name` if not explicitly
1255
- set.<br> This must be unique for the budgeting account.
1281
+ nullable: true
1282
+ description: Display name of the manual account. If omitted or
1283
+ `null`, it is derived from `institution_name` and `name`. An
1284
+ explicitly set display name must be unique for the budget
1285
+ account.
1256
1286
  example: Savings
1257
1287
  type:
1258
1288
  description: The type of manual account
@@ -1260,8 +1290,10 @@ components:
1260
1290
  - $ref: "#/components/schemas/accountTypeEnum"
1261
1291
  subtype:
1262
1292
  type: string
1263
- description: An optional manual account subtype. Examples include<br>
1264
- - retirement - checking - savings - prepaid credit card
1293
+ nullable: true
1294
+ description: Manual account subtype. If omitted or `null`, no subtype
1295
+ is set. Examples include retirement, checking, savings, and prepaid
1296
+ credit card.
1265
1297
  minLength: 1
1266
1298
  maxLength: 100
1267
1299
  example: prepaid credit card
@@ -1635,7 +1667,7 @@ components:
1635
1667
  type:
1636
1668
  type: string
1637
1669
  enum: [manual]
1638
- description: Identifies this entry as belonging to a manually-managed account.
1670
+ description: Identifies this entry as belonging to a manual account.
1639
1671
  manual_account_id:
1640
1672
  type: integer
1641
1673
  format: int32
@@ -1664,14 +1696,14 @@ components:
1664
1696
 
1665
1697
  balanceHistorySourceCryptoManual:
1666
1698
  type: object
1667
- description: Source information for a manually-tracked cryptocurrency balance history entry.
1699
+ description: Source information for a manual cryptocurrency balance history entry.
1668
1700
  additionalProperties: false
1669
1701
  x-internal: true
1670
1702
  properties:
1671
1703
  type:
1672
1704
  type: string
1673
1705
  enum: [crypto_manual]
1674
- description: Identifies this entry as belonging to a manually-tracked crypto account.
1706
+ description: Identifies this entry as belonging to a manual crypto account.
1675
1707
  crypto_manual_id:
1676
1708
  type: integer
1677
1709
  format: int32
@@ -1714,10 +1746,11 @@ components:
1714
1746
  type: object
1715
1747
  x-internal: true
1716
1748
  description: >
1717
- Source information for a balance history entry whose account has since been deleted.
1749
+ Source information for balance history whose account has since been deleted.
1718
1750
  Historical balances are preserved when a user chooses to keep history on account deletion.
1719
1751
  This object contains details that can be used to display the deleted account in the UI.
1720
- The `deleted_account_id` can be passed to `PUT /v2/balance_history/deleted/{account_id}/details`
1752
+ The `deleted_account_id` can be passed to
1753
+ [PUT /balance_history/deleted/{account_id}/details](#tag/balance-history/PUT/balance_history/deleted/{account_id}/details)
1721
1754
  to update the archived source metadata.
1722
1755
  additionalProperties: false
1723
1756
  properties:
@@ -1748,11 +1781,11 @@ components:
1748
1781
  subtype:
1749
1782
  type: string
1750
1783
  nullable: true
1751
- description: Archived `subtype`` of the deleted account source
1784
+ description: Archived `subtype` of the deleted account source
1752
1785
  mask:
1753
1786
  type: string
1754
1787
  nullable: true
1755
- description: Archived account `mask` for a deleted plaid account source
1788
+ description: Archived account `mask` for a deleted Plaid account source
1756
1789
  symbol:
1757
1790
  type: string
1758
1791
  nullable: true
@@ -1774,12 +1807,14 @@ components:
1774
1807
  type: object
1775
1808
  title: balance history for an account object
1776
1809
  additionalProperties: false
1777
- description: Historical balance entries grouped under a single account source.
1810
+ description: Monthly balance entries grouped under a single account source.
1778
1811
  properties:
1779
1812
  source:
1780
1813
  description: >
1781
- Identifies the account this balance entry belongs to. The shape varies by
1782
- `source.type`. Use `source.type` to determine which account id field is present.
1814
+ Identifies the account these balance entries belong to. The shape varies by
1815
+ `source.type`. Each source type exposes a type-specific account id field
1816
+ (`manual_account_id`, `plaid_account_id`, `crypto_manual_id`,
1817
+ `crypto_synced_id`, or `deleted_account_id`).
1783
1818
  oneOf:
1784
1819
  - $ref: "#/components/schemas/balanceHistorySourceManual"
1785
1820
  - $ref: "#/components/schemas/balanceHistorySourcePlaid"
@@ -1797,38 +1832,48 @@ components:
1797
1832
  balances:
1798
1833
  type: array
1799
1834
  description: >
1800
- Monthly balance history entries for the source account. On GET responses,
1801
- this includes all entries in the requested range. On PUT upsert responses,
1802
- this includes only the entries modified by that request.
1835
+ Monthly balance entries for this account source. A `historical` entry is
1836
+ a stored snapshot of a past month and includes an `id`. A `current` entry
1837
+ is an ephemeral snapshot based on the account's current balances and has
1838
+ no balance-entry `id`. On PUT upsert responses, this array includes only
1839
+ the `type: historical` entries modified by that request.
1803
1840
  items:
1804
- $ref: "#/components/schemas/balanceHistoryObject"
1841
+ $ref: "#/components/schemas/balanceHistoryEntry"
1805
1842
  required:
1806
1843
  - source
1807
1844
  - balances
1808
1845
 
1809
- balanceHistoryObject:
1846
+ historicalBalanceHistoryEntry:
1810
1847
  type: object
1811
- title: balance history entry object
1848
+ title: historical balance history entry
1812
1849
  additionalProperties: false
1813
1850
  x-internal: true
1814
- description: A historical balance entry for a single account on a single date.
1851
+ description: >
1852
+ A stored monthly balance for a past month. The `id` may be used with
1853
+ balance history entry endpoints. The balance represents the account
1854
+ balance at or around the end of `month`.
1815
1855
  properties:
1856
+ type:
1857
+ type: string
1858
+ enum: [historical]
1859
+ description: Identifies this entry as a stored snapshot of a past month.
1816
1860
  id:
1817
1861
  type: integer
1818
1862
  format: int32
1819
- description: Unique identifier of this historical balance entry.
1820
- date:
1863
+ description: Unique identifier for this historical balance entry.
1864
+ month:
1821
1865
  type: string
1822
- format: date
1823
- description: Date of this historical balance entry in YYYY-MM-DD format. This is always the first day of a month.
1866
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
1867
+ description: Calendar month for this entry in YYYY-MM format.
1868
+ example: "2026-06"
1824
1869
  balance:
1825
1870
  type: string
1826
1871
  pattern: ^-?\d+(\.\d{1,4})?$
1827
- 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.
1872
+ description: Historical balance 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.
1828
1873
  currency:
1829
1874
  allOf:
1830
1875
  - $ref: "#/components/schemas/currencyEnum"
1831
- description: Currency of the stored `balance`. For crypto entries this is the user's primary currency.
1876
+ description: Currency of `balance`. For crypto entries this is the user's primary currency.
1832
1877
  to_base:
1833
1878
  type: number
1834
1879
  format: double
@@ -1837,19 +1882,82 @@ components:
1837
1882
  type: string
1838
1883
  nullable: true
1839
1884
  pattern: ^-?\d+(\.\d{1,18})?$
1840
- description: Crypto quantity stored for this balance entry, when available. This may be present for crypto or deleted-account entries and is `null` otherwise.
1885
+ description: Crypto quantity for this balance entry, when available. This may be present for crypto or deleted-account entries and is `null` otherwise.
1841
1886
  required:
1887
+ - type
1842
1888
  - id
1843
- - date
1889
+ - month
1890
+ - balance
1891
+ - currency
1892
+ - to_base
1893
+ - crypto_balance
1894
+
1895
+ currentBalanceHistoryEntry:
1896
+ type: object
1897
+ title: current balance history entry
1898
+ additionalProperties: false
1899
+ x-internal: true
1900
+ description: >
1901
+ An ephemeral snapshot based on the account's current balances. It may
1902
+ change between requests.
1903
+ properties:
1904
+ type:
1905
+ type: string
1906
+ enum: [current]
1907
+ description: Identifies this entry as an ephemeral current-month snapshot.
1908
+ month:
1909
+ type: string
1910
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
1911
+ description: Calendar month for this entry in YYYY-MM format. For current entries this is the current month.
1912
+ example: "2026-07"
1913
+ balance:
1914
+ type: string
1915
+ pattern: ^-?\d+(\.\d{1,4})?$
1916
+ description: Calculated balance for the current month, 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.
1917
+ currency:
1918
+ allOf:
1919
+ - $ref: "#/components/schemas/currencyEnum"
1920
+ description: Currency of the calculated `balance`. For crypto entries this is the user's primary currency.
1921
+ to_base:
1922
+ type: number
1923
+ format: double
1924
+ description: Calculated balance converted to the user's primary currency. When the entry currency is the user's primary currency, this is the numeric value of `balance`.
1925
+ crypto_balance:
1926
+ type: string
1927
+ nullable: true
1928
+ pattern: ^-?\d+(\.\d{1,18})?$
1929
+ description: Crypto quantity for this calculated entry, when available. This may be present for crypto entries and is `null` otherwise.
1930
+ required:
1931
+ - type
1932
+ - month
1844
1933
  - balance
1845
1934
  - currency
1846
1935
  - to_base
1847
1936
  - crypto_balance
1848
1937
 
1938
+ balanceHistoryEntry:
1939
+ title: balance history entry
1940
+ x-internal: true
1941
+ description: >
1942
+ A monthly balance history entry. Discriminated by `type`. `historical`
1943
+ entries are stored snapshots of past months with an `id`. `current`
1944
+ entries are ephemeral snapshots with no balance-entry `id`.
1945
+ oneOf:
1946
+ - $ref: "#/components/schemas/historicalBalanceHistoryEntry"
1947
+ - $ref: "#/components/schemas/currentBalanceHistoryEntry"
1948
+ discriminator:
1949
+ propertyName: type
1950
+ mapping:
1951
+ historical: "#/components/schemas/historicalBalanceHistoryEntry"
1952
+ current: "#/components/schemas/currentBalanceHistoryEntry"
1953
+
1849
1954
  balanceHistoryListResponseObject:
1850
1955
  type: object
1851
1956
  additionalProperties: false
1852
1957
  x-internal: true
1958
+ description: >
1959
+ List response for balance history GET endpoints. Entries are grouped by
1960
+ account source under `balance_history`.
1853
1961
  properties:
1854
1962
  balance_history:
1855
1963
  type: array
@@ -1862,31 +1970,39 @@ components:
1862
1970
  type: object
1863
1971
  x-internal: true
1864
1972
  additionalProperties: false
1973
+ description: >
1974
+ A single monthly balance entry to upsert. Request bodies use this shape.
1975
+ Responses return `type: historical` entries instead.
1865
1976
  properties:
1866
1977
  id:
1867
1978
  type: integer
1868
1979
  format: int32
1869
1980
  description: System-defined balance history entry id. Ignored if set.
1870
1981
  x-updatable: false
1871
- date:
1982
+ month:
1872
1983
  type: string
1873
- format: date
1874
- 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.
1984
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
1985
+ description: >
1986
+ Calendar month to upsert, in YYYY-MM format. Must be a past month.
1987
+ The current month cannot be written through PUT endpoints.
1988
+ example: "2026-06"
1875
1989
  balance:
1876
1990
  oneOf:
1877
1991
  - type: number
1878
1992
  format: double
1879
1993
  - type: string
1880
1994
  pattern: ^-?\d+(\.\d{1,4})?$
1881
- description: Numeric value of the historical balance, up to four decimal places, as a number or string. For manual and Plaid accounts this is typically in the account currency. For crypto and deleted accounts this is typically in the user's primary currency. Do not include any special characters aside from a decimal point.
1995
+ description: Numeric value of the historical balance, up to four decimal places, as a number or string. For manual and Plaid accounts this is in the account currency. For crypto and deleted accounts this is in the user's primary currency. Do not include any special characters aside from a decimal point.
1882
1996
  symbol:
1883
1997
  type: string
1884
1998
  nullable: true
1885
1999
  minLength: 1
1886
2000
  maxLength: 25
1887
- description: Optional for crypto balances, but if set it must match the account's symbol.
1888
- Tolerated for deleted-account balances. Do not provide this for manual or Plaid balances.
1889
- If provided when using the synced crypto path-based endpoint, this must match the symbol in the path.
2001
+ description: >
2002
+ Optional for crypto balances. If set, it must match the account's
2003
+ symbol. Tolerated for deleted-account balances. Do not provide this
2004
+ for manual or Plaid balances. On the synced crypto path endpoint, if
2005
+ provided it must match the `symbol` path parameter.
1890
2006
  x-updatable: true
1891
2007
  crypto_balance:
1892
2008
  type: string
@@ -1902,10 +2018,10 @@ components:
1902
2018
  to_base:
1903
2019
  type: number
1904
2020
  format: double
1905
- description: System-defined historical balance converted to the user's primary currency. Ignored if set. Use `balance` to update the stored historical balance.
2021
+ description: System-defined historical balance converted to the user's primary currency. Ignored if set. Use `balance` to update the historical balance.
1906
2022
  x-updatable: false
1907
2023
  required:
1908
- - date
2024
+ - month
1909
2025
  - balance
1910
2026
 
1911
2027
  upsertBalanceHistoryRequestObject:
@@ -1916,7 +2032,11 @@ components:
1916
2032
  balances:
1917
2033
  type: array
1918
2034
  minItems: 1
1919
- description: One or more monthly balance history entries to upsert
2035
+ description: >
2036
+ One or more monthly balance history entries to upsert. Each entry uses
2037
+ `month` (YYYY-MM) and `balance`. Do not include response-only fields such
2038
+ as `type`. PUT responses return only the `type: historical` entries
2039
+ modified by the request.
1920
2040
  items:
1921
2041
  $ref: "#/components/schemas/balanceHistoryUpdateItemObject"
1922
2042
  required:
@@ -1931,51 +2051,58 @@ components:
1931
2051
  name:
1932
2052
  type: string
1933
2053
  nullable: true
1934
- description: New archived account name for the deleted account source.
2054
+ description: New archived account name for the deleted account source
1935
2055
  institution_name:
1936
2056
  type: string
1937
2057
  nullable: true
1938
- description: New archived institution name for the deleted account source.
2058
+ description: New archived institution name for the deleted account source
1939
2059
  display_name:
1940
2060
  type: string
1941
2061
  nullable: true
1942
- description: New display name for the deleted account source.
2062
+ description: New display name for the deleted account source
1943
2063
  account_type:
1944
2064
  type: string
1945
2065
  nullable: true
1946
- description: New archived account type for the deleted account source.
2066
+ description: New archived account type for the deleted account source
1947
2067
  subtype:
1948
2068
  type: string
1949
2069
  nullable: true
1950
- description: New archived subtype for the deleted account source.
2070
+ description: New archived subtype for the deleted account source
1951
2071
  mask:
1952
2072
  type: string
1953
2073
  nullable: true
1954
- description: New archived account mask for the deleted account source.
2074
+ description: New archived account mask for the deleted account source
1955
2075
 
1956
2076
  updateBalanceHistoryDetailsResponseObject:
1957
2077
  type: object
1958
2078
  x-internal: true
1959
2079
  additionalProperties: false
2080
+ description: Updated archived metadata for a deleted balance history source
1960
2081
  properties:
1961
2082
  name:
1962
2083
  type: string
1963
2084
  nullable: true
2085
+ description: Archived account name for the deleted account source
1964
2086
  institution_name:
1965
2087
  type: string
1966
2088
  nullable: true
2089
+ description: Archived institution name for the deleted account source
1967
2090
  display_name:
1968
2091
  type: string
1969
2092
  nullable: true
2093
+ description: Archived display name for the deleted account source
1970
2094
  account_type:
1971
2095
  type: string
1972
2096
  nullable: true
2097
+ description: Archived account type for the deleted account source
1973
2098
  subtype:
1974
2099
  type: string
1975
2100
  nullable: true
2101
+ description: Archived subtype for the deleted account source
1976
2102
  mask:
1977
2103
  type: string
1978
2104
  nullable: true
2105
+ description: Archived account mask for the deleted account source
1979
2106
  required:
1980
2107
  - name
1981
2108
  - institution_name
@@ -2931,7 +3058,7 @@ components:
2931
3058
  currency:
2932
3059
  description: Three-letter lowercase currency code of the transaction
2933
3060
  in ISO 4217 format. Must match one of the [supported
2934
- currencies](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/currencies). If not set
3061
+ currencies](https://lunchmoney.dev/v2/currencies). If not set
2935
3062
  defaults to the user account's primary currency.
2936
3063
  allOf:
2937
3064
  - $ref: "#/components/schemas/currencyEnum"
@@ -3076,6 +3203,7 @@ components:
3076
3203
  description: |
3077
3204
  The new payee for the transaction.
3078
3205
  minLength: 0
3206
+ x-updatable: true
3079
3207
  original_name:
3080
3208
  type: string
3081
3209
  nullable: true
@@ -3287,9 +3415,10 @@ components:
3287
3415
  category_id:
3288
3416
  type: integer
3289
3417
  format: int32
3290
- description: Unique identifier for associated category_id. Category
3291
- must already exist for the account. Will inherit category from the
3292
- parent if not defined.
3418
+ nullable: true
3419
+ description: Category ID for the child transaction. The category must
3420
+ already exist for the account. If omitted, the child inherits the
3421
+ parent category. If `null`, the child has no category.
3293
3422
  tag_ids:
3294
3423
  type: array
3295
3424
  description: The IDs of any tags to apply to this split child
@@ -3299,7 +3428,10 @@ components:
3299
3428
  format: int32
3300
3429
  notes:
3301
3430
  type: string
3302
- description: Will inherit notes from parent if not defined.
3431
+ nullable: true
3432
+ description: Notes for the child transaction. If omitted, the child
3433
+ inherits the parent notes. If `null` or an empty string, the child
3434
+ has no notes.
3303
3435
  required:
3304
3436
  - amount
3305
3437
 
@@ -3611,7 +3743,7 @@ components:
3611
3743
  type: object
3612
3744
  title: budget settings object
3613
3745
  additionalProperties: false
3614
- description: Budget period and display settings for the current budgeting
3746
+ description: Budget period and display settings for the current budget
3615
3747
  account.
3616
3748
  properties:
3617
3749
  budget_period_granularity:
@@ -3667,6 +3799,530 @@ components:
3667
3799
  - budget_income_option
3668
3800
  - budget_rollover_left_to_budget
3669
3801
 
3802
+ weekStartsOnEnum:
3803
+ x-internal: true
3804
+ type: string
3805
+ title: week starts on enum
3806
+ enum:
3807
+ - sunday
3808
+ - monday
3809
+ description: The day on which a calendar week begins.
3810
+
3811
+ monthYearFormatEnum:
3812
+ x-internal: true
3813
+ type: string
3814
+ title: month and year format enum
3815
+ description: Format string for displaying month and year values
3816
+ in the Lunch Money app.
3817
+ enum:
3818
+ - "MMMM YYYY"
3819
+ - "MMM YYYY"
3820
+ - "YYYY MMM"
3821
+ - "MM YYYY"
3822
+ - "MM-YYYY"
3823
+ - "MM.YYYY"
3824
+ - "MM/YYYY"
3825
+ - "M YYYY"
3826
+ - "M-YYYY"
3827
+ - "M.YYYY"
3828
+ - "M/YYYY"
3829
+ - "YYYY M"
3830
+ - "YYYY-M"
3831
+ - "YYYY.M"
3832
+ - "YYYY/M"
3833
+ - "YYYY MM"
3834
+ - "YYYY-MM"
3835
+ - "YYYY.MM"
3836
+ - "YYYY/MM"
3837
+
3838
+ monthDayYearFormatEnum:
3839
+ x-internal: true
3840
+ type: string
3841
+ title: month, day and year format enum
3842
+ description: Format string for displaying full dates in the
3843
+ Lunch Money app.
3844
+ enum:
3845
+ - "MMM D, YYYY"
3846
+ - "D MMM YYYY"
3847
+ - "YYYY MM DD"
3848
+ - "YYYY-MM-DD"
3849
+ - "YYYY.MM.DD"
3850
+ - "YYYY/MM/DD"
3851
+ - "YYYY M DD"
3852
+ - "YYYY-M-DD"
3853
+ - "YYYY.M.DD"
3854
+ - "YYYY/M/DD"
3855
+ - "YYYY MM D"
3856
+ - "YYYY-MM-D"
3857
+ - "YYYY.MM.D"
3858
+ - "YYYY/MM/D"
3859
+ - "YYYY M D"
3860
+ - "YYYY-M-D"
3861
+ - "YYYY.M.D"
3862
+ - "YYYY/M/D"
3863
+ - "DD MM YYYY"
3864
+ - "DD-MM-YYYY"
3865
+ - "DD.MM.YYYY"
3866
+ - "DD/MM/YYYY"
3867
+ - "DD M YYYY"
3868
+ - "DD-M-YYYY"
3869
+ - "DD.M.YYYY"
3870
+ - "DD/M/YYYY"
3871
+ - "D MM YYYY"
3872
+ - "D-MM-YYYY"
3873
+ - "D.MM.YYYY"
3874
+ - "D/MM/YYYY"
3875
+ - "D M YYYY"
3876
+ - "D-M-YYYY"
3877
+ - "D.M.YYYY"
3878
+ - "D/M/YYYY"
3879
+ - "M D YYYY"
3880
+ - "M-D-YYYY"
3881
+ - "M.D.YYYY"
3882
+ - "M/D/YYYY"
3883
+ - "MM D YYYY"
3884
+ - "MM-D-YYYY"
3885
+ - "MM.D.YYYY"
3886
+ - "MM/D/YYYY"
3887
+ - "MM DD YYYY"
3888
+ - "MM-DD-YYYY"
3889
+ - "MM.DD.YYYY"
3890
+ - "MM/DD/YYYY"
3891
+ - "M DD YYYY"
3892
+ - "M-DD-YYYY"
3893
+ - "M.DD.YYYY"
3894
+ - "M/DD/YYYY"
3895
+
3896
+ monthDayFormatEnum:
3897
+ x-internal: true
3898
+ type: string
3899
+ title: month and day format enum
3900
+ description: Format string for displaying month and day values
3901
+ without a year.
3902
+ enum:
3903
+ - "MMM D"
3904
+ - "MMM DD"
3905
+ - "D MMM"
3906
+ - "DD MMM"
3907
+ - "MM D"
3908
+ - "MM-D"
3909
+ - "MM.D"
3910
+ - "MM/D"
3911
+ - "MM DD"
3912
+ - "MM-DD"
3913
+ - "MM.DD"
3914
+ - "MM/DD"
3915
+ - "M D"
3916
+ - "M-D"
3917
+ - "M.D"
3918
+ - "M/D"
3919
+ - "M DD"
3920
+ - "M-DD"
3921
+ - "M.DD"
3922
+ - "M/DD"
3923
+ - "D MM"
3924
+ - "D-MM"
3925
+ - "D.MM"
3926
+ - "D/MM"
3927
+ - "DD MM"
3928
+ - "DD-MM"
3929
+ - "DD.MM"
3930
+ - "DD/MM"
3931
+ - "D M"
3932
+ - "D-M"
3933
+ - "D.M"
3934
+ - "D/M"
3935
+ - "DD M"
3936
+ - "DD-M"
3937
+ - "DD.M"
3938
+ - "DD/M"
3939
+
3940
+ localeEnum:
3941
+ type: string
3942
+ title: locale enum
3943
+ description: Locale used for formatting numbers and currency amounts in
3944
+ the Lunch Money app.
3945
+ example: en-US
3946
+ enum:
3947
+ - sq-AL # Albanian (Albania)
3948
+ - be-BY # Belarusian (Belarus)
3949
+ - bg-BG # Bulgarian (Bulgaria)
3950
+ - ca-ES # Catalan (Spain)
3951
+ - zh-CN # Chinese (Simplified) (China)
3952
+ - zh-HK # Chinese (Traditional) (Hong Kong)
3953
+ - zh-TW # Chinese (Traditional) (Taiwan)
3954
+ - hr-HR # Croatian (Croatia)
3955
+ - cs-CZ # Czech (Czech Republic)
3956
+ - da-DK # Danish (Denmark)
3957
+ - nl-BE # Dutch (Belgium)
3958
+ - nl-NL # Dutch (Netherlands)
3959
+ - en-AU # English (Australia)
3960
+ - en-CA # English (Canada)
3961
+ - en-IN # English (India)
3962
+ - en-IE # English (Ireland)
3963
+ - en-MT # English (Malta)
3964
+ - en-NZ # English (New Zealand)
3965
+ - en-PH # English (Philippines)
3966
+ - en-SG # English (Singapore)
3967
+ - en-ZA # English (South Africa)
3968
+ - en-GB # English (United Kingdom)
3969
+ - en-US # English (United States)
3970
+ - et-EE # Estonian (Estonia)
3971
+ - fi-FI # Finnish (Finland)
3972
+ - fr-BE # French (Belgium)
3973
+ - fr-CA # French (Canada)
3974
+ - fr-FR # French (France)
3975
+ - fr-LU # French (Luxembourg)
3976
+ - fr-CH # French (Switzerland)
3977
+ - de-AT # German (Austria)
3978
+ - de-DE # German (Germany)
3979
+ - de-LU # German (Luxembourg)
3980
+ - de-CH # German (Switzerland)
3981
+ - el-CY # Greek (Cyprus)
3982
+ - el-GR # Greek (Greece)
3983
+ - iw-IL # Hebrew (Israel); modern replacement: he-IL
3984
+ - hi-IN # Hindi (India)
3985
+ - hu-HU # Hungarian (Hungary)
3986
+ - is-IS # Icelandic (Iceland)
3987
+ - in-ID # Indonesian (Indonesia); modern replacement: id-ID
3988
+ - ga-IE # Irish (Ireland)
3989
+ - it-IT # Italian (Italy)
3990
+ - it-CH # Italian (Switzerland)
3991
+ - ja-JP # Japanese (Japan)
3992
+ - ko-KR # Korean (South Korea)
3993
+ - lv-LV # Latvian (Latvia)
3994
+ - lt-LT # Lithuanian (Lithuania)
3995
+ - mk-MK # Macedonian (Macedonia)
3996
+ - ms-MY # Malay (Malaysia)
3997
+ - mt-MT # Maltese (Malta)
3998
+ - no-NO # Norwegian (Norway)
3999
+ - pl-PL # Polish (Poland)
4000
+ - pt-BR # Portuguese (Brazil)
4001
+ - pt-PT # Portuguese (Portugal)
4002
+ - ro-RO # Romanian (Romania)
4003
+ - ru-RU # Russian (Russia)
4004
+ - sk-SK # Slovak (Slovakia)
4005
+ - sl-SI # Slovenian (Slovenia)
4006
+ - es-AR # Spanish (Argentina)
4007
+ - es-BO # Spanish (Bolivia)
4008
+ - es-CL # Spanish (Chile)
4009
+ - es-CO # Spanish (Colombia)
4010
+ - es-CR # Spanish (Costa Rica)
4011
+ - es-DO # Spanish (Dominican Republic)
4012
+ - es-EC # Spanish (Ecuador)
4013
+ - es-SV # Spanish (El Salvador)
4014
+ - es-GT # Spanish (Guatemala)
4015
+ - es-HN # Spanish (Honduras)
4016
+ - es-MX # Spanish (Mexico)
4017
+ - es-NI # Spanish (Nicaragua)
4018
+ - es-PA # Spanish (Panama)
4019
+ - es-PY # Spanish (Paraguay)
4020
+ - es-PE # Spanish (Peru)
4021
+ - es-PR # Spanish (Puerto Rico)
4022
+ - es-ES # Spanish (Spain)
4023
+ - es-US # Spanish (United States)
4024
+ - es-UY # Spanish (Uruguay)
4025
+ - es-VE # Spanish (Venezuela)
4026
+ - sv-SE # Swedish (Sweden)
4027
+ - th-TH # Thai (Thailand)
4028
+ - tr-TR # Turkish (Turkey)
4029
+ - uk-UA # Ukrainian (Ukraine)
4030
+ - vi-VN # Vietnamese (Vietnam)
4031
+
4032
+ accountSettingsObject:
4033
+ type: object
4034
+ title: account settings object
4035
+ additionalProperties: false
4036
+ description: Account-level settings for the budget account
4037
+ associated with the authorized API token.
4038
+ properties:
4039
+ primary_currency:
4040
+ description: Primary currency for the account.
4041
+ allOf:
4042
+ - $ref: "#/components/schemas/currencyEnum"
4043
+ supported_currencies:
4044
+ type: array
4045
+ items:
4046
+ $ref: "#/components/schemas/currencyEnum"
4047
+ description: Currencies available when creating or editing transactions,
4048
+ balances, and other amounts in the Lunch Money app.
4049
+ display_name:
4050
+ type: string
4051
+ nullable: true
4052
+ description: Display name of the budget account in the Lunch Money
4053
+ app.
4054
+ locale:
4055
+ allOf:
4056
+ - $ref: "#/components/schemas/localeEnum"
4057
+ example: en-US
4058
+ description: Locale used for formatting numbers and currency amounts
4059
+ in the Lunch Money app (for example, `en-US`). See
4060
+ [Supported Locales](https://lunchmoney.dev/v2/locales) for accepted
4061
+ values. Date presentation is configured separately through
4062
+ [GET /me/user/settings](#tag/me/GET/me/user/settings) and
4063
+ [PUT /me/user/settings](#tag/me/PUT/me/user/settings). When no
4064
+ locale is explicitly stored for the account, the effective locale
4065
+ is derived from the `default_locale` associated with
4066
+ `primary_currency` in the currencies table (for example, `usd` →
4067
+ `en-US`, `cad` → `en-CA`, `gbp` → `en-GB`).
4068
+ auto_create_category_rules:
4069
+ type: boolean
4070
+ default: true
4071
+ description: If `true`, category rules are created automatically when
4072
+ categorizing transactions.
4073
+ auto_create_suggested_transaction_rules:
4074
+ type: boolean
4075
+ default: true
4076
+ description: If `true`, suggested transaction rules are created
4077
+ automatically.
4078
+ include_pending_in_totals:
4079
+ type: boolean
4080
+ default: true
4081
+ description: If `true`, pending transactions are included in account
4082
+ totals.
4083
+ required:
4084
+ - primary_currency
4085
+ - supported_currencies
4086
+ - display_name
4087
+ - locale
4088
+ - auto_create_category_rules
4089
+ - auto_create_suggested_transaction_rules
4090
+ - include_pending_in_totals
4091
+
4092
+ updateAccountSettingsRequestObject:
4093
+ x-internal: true
4094
+ type: object
4095
+ additionalProperties: false
4096
+ minProperties: 1
4097
+ description: Request body for updating account settings. Include at least
4098
+ one property to update.
4099
+ properties:
4100
+ primary_currency:
4101
+ allOf:
4102
+ - $ref: "#/components/schemas/currencyEnum"
4103
+ description: If set, updates the account's primary currency.
4104
+ x-updatable: true
4105
+ supported_currencies:
4106
+ type: array
4107
+ items:
4108
+ $ref: "#/components/schemas/currencyEnum"
4109
+ description: If set, replaces the list of supported currencies for the
4110
+ account.
4111
+ x-updatable: true
4112
+ display_name:
4113
+ type: string
4114
+ nullable: true
4115
+ description: If set, updates the display name of the budget account.
4116
+ x-updatable: true
4117
+ locale:
4118
+ allOf:
4119
+ - $ref: "#/components/schemas/localeEnum"
4120
+ example: en-US
4121
+ description: If set, updates the locale used for formatting numbers
4122
+ and currency amounts in the Lunch Money app. See
4123
+ [Supported Locales](https://lunchmoney.dev/v2/locales) for accepted
4124
+ values. Date presentation is configured separately through
4125
+ [GET /me/user/settings](#tag/me/GET/me/user/settings) and
4126
+ [PUT /me/user/settings](#tag/me/PUT/me/user/settings).
4127
+ x-updatable: true
4128
+ auto_create_category_rules:
4129
+ type: boolean
4130
+ description: If set, updates whether category rules are created
4131
+ automatically.
4132
+ x-updatable: true
4133
+ auto_create_suggested_transaction_rules:
4134
+ type: boolean
4135
+ description: If set, updates whether suggested transaction rules are
4136
+ created automatically.
4137
+ x-updatable: true
4138
+ include_pending_in_totals:
4139
+ type: boolean
4140
+ description: If set, updates whether pending transactions are included
4141
+ in account totals.
4142
+ x-updatable: true
4143
+
4144
+ userAccountSettingsObject:
4145
+ type: object
4146
+ title: user account settings object
4147
+ additionalProperties: false
4148
+ description: Settings specific to the authorized user within the current
4149
+ budget account.
4150
+ properties:
4151
+ auto_review_transaction_on_update:
4152
+ type: boolean
4153
+ default: true
4154
+ description: If `true`, transactions are marked as reviewed when their
4155
+ date, category, payee, amount, account, or notes are changed.
4156
+ auto_review_transaction_on_creation:
4157
+ type: boolean
4158
+ default: true
4159
+ description: If `true`, new manual transactions start as reviewed. If
4160
+ `false`, they start as unreviewed.
4161
+ default_manual_account_id:
4162
+ type: integer
4163
+ nullable: true
4164
+ description: Manual account selected by default when the user creates a
4165
+ manual transaction in the current budget account. Must identify a
4166
+ manual account returned by
4167
+ [GET /manual_accounts](#tag/manual_accounts/GET/manual_accounts) for
4168
+ the current budget account. Set to `null` to clear the selection.
4169
+ required:
4170
+ - auto_review_transaction_on_update
4171
+ - auto_review_transaction_on_creation
4172
+ - default_manual_account_id
4173
+
4174
+ updateUserAccountSettingsRequestObject:
4175
+ x-internal: true
4176
+ type: object
4177
+ additionalProperties: false
4178
+ minProperties: 1
4179
+ description: Request body for updating settings specific to the authorized
4180
+ user within the current budget account. Include at least one property
4181
+ to update.
4182
+ properties:
4183
+ auto_review_transaction_on_update:
4184
+ type: boolean
4185
+ description: If set, updates whether transactions are marked as reviewed
4186
+ when their date, category, payee, amount, account, or notes are
4187
+ changed.
4188
+ x-updatable: true
4189
+ auto_review_transaction_on_creation:
4190
+ type: boolean
4191
+ description: If set, updates whether new manual transactions start as
4192
+ reviewed or unreviewed.
4193
+ x-updatable: true
4194
+ default_manual_account_id:
4195
+ type: integer
4196
+ nullable: true
4197
+ description: If set, updates the manual account selected by default when
4198
+ the user creates a manual transaction in the current budget
4199
+ account. Must identify a manual account returned by
4200
+ [GET /manual_accounts](#tag/manual_accounts/GET/manual_accounts) for
4201
+ the current budget account. Set to `null` to clear the selection.
4202
+ x-updatable: true
4203
+
4204
+ userSettingsObject:
4205
+ type: object
4206
+ title: user settings object
4207
+ additionalProperties: false
4208
+ description: User-level display and formatting preferences for the user
4209
+ associated with the authorized API token.
4210
+ properties:
4211
+ show_debits_as_negative:
4212
+ type: boolean
4213
+ default: true
4214
+ description: Display preference for how amounts are shown in the Lunch
4215
+ Money app. When `true`, debits are shown as negative values and
4216
+ credits as positive values.<p> This setting does **not** change
4217
+ amount sign conventions in API responses. Amount fields such as
4218
+ `amount` and `to_base` on transaction objects always use positive
4219
+ values for debits and negative values for credits.
4220
+ auto_suggest_payee:
4221
+ type: boolean
4222
+ default: true
4223
+ description: If `true`, payee suggestions are shown when entering
4224
+ transactions in the Lunch Money app.
4225
+ month_year_format:
4226
+ allOf:
4227
+ - $ref: "#/components/schemas/monthYearFormatEnum"
4228
+ default: "MMM YYYY"
4229
+ description: Format string used when displaying month and year values.
4230
+ month_day_year_format:
4231
+ allOf:
4232
+ - $ref: "#/components/schemas/monthDayYearFormatEnum"
4233
+ default: "MMM D, YYYY"
4234
+ description: Format string used when displaying full dates (month, day,
4235
+ and year).
4236
+ month_day_format:
4237
+ allOf:
4238
+ - $ref: "#/components/schemas/monthDayFormatEnum"
4239
+ default: "MMM D"
4240
+ description: Format string used when displaying month and day values
4241
+ without a year.
4242
+ show_am_pm:
4243
+ type: boolean
4244
+ default: true
4245
+ description: If `true`, times are displayed using a 12-hour clock with
4246
+ AM/PM. If `false`, times are displayed using a 24-hour clock.
4247
+ week_starts_on:
4248
+ allOf:
4249
+ - $ref: "#/components/schemas/weekStartsOnEnum"
4250
+ default: sunday
4251
+ description: The day on which a calendar week begins.
4252
+ always_display_year:
4253
+ type: boolean
4254
+ default: false
4255
+ description: If `true`, dates always include the year and
4256
+ `month_day_format` is not used.
4257
+ always_display_weekday:
4258
+ type: boolean
4259
+ default: true
4260
+ description: If `true`, weekday names are included when displaying
4261
+ dates.
4262
+ required:
4263
+ - show_debits_as_negative
4264
+ - auto_suggest_payee
4265
+ - month_year_format
4266
+ - month_day_year_format
4267
+ - month_day_format
4268
+ - show_am_pm
4269
+ - week_starts_on
4270
+ - always_display_year
4271
+ - always_display_weekday
4272
+
4273
+ updateUserSettingsRequestObject:
4274
+ x-internal: true
4275
+ type: object
4276
+ additionalProperties: false
4277
+ minProperties: 1
4278
+ description: Request body for updating user settings. Include at least one
4279
+ property to update.
4280
+ properties:
4281
+ show_debits_as_negative:
4282
+ type: boolean
4283
+ description: If set, updates the display preference for amount signs in
4284
+ the Lunch Money app. Does not affect amount sign conventions in API
4285
+ responses.
4286
+ x-updatable: true
4287
+ auto_suggest_payee:
4288
+ type: boolean
4289
+ description: If set, updates whether payee suggestions are shown.
4290
+ x-updatable: true
4291
+ month_year_format:
4292
+ allOf:
4293
+ - $ref: "#/components/schemas/monthYearFormatEnum"
4294
+ description: If set, updates the month and year display format.
4295
+ x-updatable: true
4296
+ month_day_year_format:
4297
+ allOf:
4298
+ - $ref: "#/components/schemas/monthDayYearFormatEnum"
4299
+ description: If set, updates the full date display format.
4300
+ x-updatable: true
4301
+ month_day_format:
4302
+ allOf:
4303
+ - $ref: "#/components/schemas/monthDayFormatEnum"
4304
+ description: If set, updates the month and day display format.
4305
+ x-updatable: true
4306
+ show_am_pm:
4307
+ type: boolean
4308
+ description: If set, updates whether times use a 12-hour (AM/PM) or
4309
+ 24-hour clock.
4310
+ x-updatable: true
4311
+ week_starts_on:
4312
+ allOf:
4313
+ - $ref: "#/components/schemas/weekStartsOnEnum"
4314
+ description: If set, updates the day on which a calendar week begins.
4315
+ x-updatable: true
4316
+ always_display_year:
4317
+ type: boolean
4318
+ description: If set, updates whether dates always include the year.
4319
+ x-updatable: true
4320
+ always_display_weekday:
4321
+ type: boolean
4322
+ description: If set, updates whether weekday names are shown when
4323
+ displaying dates.
4324
+ x-updatable: true
4325
+
3670
4326
  # Summary endpoint response schemas
3671
4327
  summaryResponseObject:
3672
4328
  type: object
@@ -4442,22 +5098,10 @@ components:
4442
5098
  securitySchemes:
4443
5099
  bearerSecurity:
4444
5100
  type: http
4445
- # TODO Make this shorter?
4446
- # description: The Lunch Money API uses API keys to authenticate requests. To use
4447
- # the v1 API you can view and manage your API keys on the [developers page
4448
- # in the Lunch Money app](https://my.lunchmoney.app/developers). <p> To
4449
- # interact with the Static Mock Server simply enter an API key of 11
4450
- # characters or more. <p> To interact with the v2 service implemented on
4451
- # top of the v1 API paste in a real API token associated with a Lunch
4452
- # Money Budget.
4453
- description: To interact with the Static Mock Server simply enter an API
4454
- key of 11 characters or more.
5101
+ description: >-
5102
+ Required for the LIVE server. Optional for MOCK.
4455
5103
  scheme: bearer
4456
5104
  bearerFormat: JWT
4457
- cookieAuth:
4458
- type: apiKey
4459
- in: cookie
4460
- name: _lm_access_token
4461
5105
 
4462
5106
  paths:
4463
5107
  /me:
@@ -4465,8 +5109,16 @@ paths:
4465
5109
  tags:
4466
5110
  - me
4467
5111
  summary: Get current user
4468
- description: Get details about the user associated with the supplied
4469
- authorization token.
5112
+ description: |-
5113
+ Get details about the user associated with the supplied authorization
5114
+ token.<p> Use [/me/user/settings](#tag/me/GET/me/user/settings) for
5115
+ user-wide preferences,
5116
+ [/me/account/settings](#tag/me/GET/me/account/settings) for account-wide
5117
+ preferences, and
5118
+ [/me/user/account/settings](#tag/me/GET/me/user/account/settings) for
5119
+ preferences specific to the current user and budget account.
5120
+ Properties such as `primary_currency` and `budget_name` remain on this
5121
+ response for backwards compatibility.
4470
5122
  operationId: getMe
4471
5123
  parameters: []
4472
5124
  responses:
@@ -4490,6 +5142,247 @@ paths:
4490
5142
  $ref: "#/components/responses/rateLimited"
4491
5143
  "500":
4492
5144
  $ref: "#/components/responses/serverError"
5145
+ /me/account/settings:
5146
+ get:
5147
+ tags:
5148
+ - me
5149
+ summary: Get account settings
5150
+ description: >-
5151
+ Returns settings for the current budget account. These settings apply
5152
+ regardless of which user is accessing the account.
5153
+ operationId: getAccountSettings
5154
+ responses:
5155
+ "200":
5156
+ description: Account settings for the current budget account
5157
+ content:
5158
+ application/json:
5159
+ schema:
5160
+ $ref: "#/components/schemas/accountSettingsObject"
5161
+ example:
5162
+ primary_currency: usd
5163
+ supported_currencies:
5164
+ - usd
5165
+ - cad
5166
+ - jpy
5167
+ display_name: "\U0001F3E0 Family budget"
5168
+ locale: en-US
5169
+ auto_create_category_rules: true
5170
+ auto_create_suggested_transaction_rules: true
5171
+ include_pending_in_totals: true
5172
+ "401":
5173
+ $ref: "#/components/responses/unauthorizedToken"
5174
+ "429":
5175
+ $ref: "#/components/responses/rateLimited"
5176
+ "500":
5177
+ $ref: "#/components/responses/serverError"
5178
+ put:
5179
+ tags:
5180
+ - me
5181
+ summary: Update account settings
5182
+ description: |-
5183
+ Updates account-level settings for the budget account
5184
+ associated with the authorized API token. Submit the full response from
5185
+ `GET /me/account/settings` with one or more properties changed, or
5186
+ provide only the properties to update. The request body must include at
5187
+ least one property.
5188
+ operationId: updateAccountSettings
5189
+ requestBody:
5190
+ required: true
5191
+ content:
5192
+ application/json:
5193
+ schema:
5194
+ $ref: "#/components/schemas/updateAccountSettingsRequestObject"
5195
+ examples:
5196
+ Update display name:
5197
+ value:
5198
+ display_name: "Travel budget"
5199
+ Update automation preferences:
5200
+ value:
5201
+ auto_create_category_rules: false
5202
+ include_pending_in_totals: false
5203
+ responses:
5204
+ "200":
5205
+ description: Account settings updated successfully
5206
+ content:
5207
+ application/json:
5208
+ schema:
5209
+ $ref: "#/components/schemas/accountSettingsObject"
5210
+ "400":
5211
+ description: Invalid request body
5212
+ content:
5213
+ application/json:
5214
+ schema:
5215
+ $ref: "#/components/schemas/errorResponseObject"
5216
+ "401":
5217
+ $ref: "#/components/responses/unauthorizedToken"
5218
+ "429":
5219
+ $ref: "#/components/responses/rateLimited"
5220
+ "500":
5221
+ $ref: "#/components/responses/serverError"
5222
+ /me/user/settings:
5223
+ get:
5224
+ tags:
5225
+ - me
5226
+ summary: Get user settings
5227
+ description: >-
5228
+ Returns display and formatting preferences for the authorized user.
5229
+ These settings apply across every budget account the user owns or
5230
+ collaborates on.
5231
+ operationId: getUserSettings
5232
+ responses:
5233
+ "200":
5234
+ description: User settings for the authorized user
5235
+ content:
5236
+ application/json:
5237
+ schema:
5238
+ $ref: "#/components/schemas/userSettingsObject"
5239
+ example:
5240
+ show_debits_as_negative: true
5241
+ auto_suggest_payee: true
5242
+ month_year_format: "MMM YYYY"
5243
+ month_day_year_format: "MMM D, YYYY"
5244
+ month_day_format: "MMM D"
5245
+ show_am_pm: true
5246
+ week_starts_on: sunday
5247
+ always_display_year: false
5248
+ always_display_weekday: true
5249
+ "401":
5250
+ $ref: "#/components/responses/unauthorizedToken"
5251
+ "429":
5252
+ $ref: "#/components/responses/rateLimited"
5253
+ "500":
5254
+ $ref: "#/components/responses/serverError"
5255
+ put:
5256
+ tags:
5257
+ - me
5258
+ summary: Update user settings
5259
+ description: |-
5260
+ Updates user-level display and formatting preferences for the user
5261
+ associated with the authorized API token. Submit the full response from
5262
+ `GET /me/user/settings` with one or more properties changed, or provide
5263
+ only the properties to update. The request body must include at least
5264
+ one property.<p> Updating
5265
+ `show_debits_as_negative` affects display in the Lunch Money app only.
5266
+ Amount fields in API responses always use positive values for debits and
5267
+ negative values for credits.
5268
+ operationId: updateUserSettings
5269
+ requestBody:
5270
+ required: true
5271
+ content:
5272
+ application/json:
5273
+ schema:
5274
+ $ref: "#/components/schemas/updateUserSettingsRequestObject"
5275
+ examples:
5276
+ Update date formats:
5277
+ value:
5278
+ month_year_format: "YYYY-MM"
5279
+ month_day_year_format: "YYYY-MM-DD"
5280
+ month_day_format: "MM-DD"
5281
+ Use 24-hour time and Monday week start:
5282
+ value:
5283
+ show_am_pm: false
5284
+ week_starts_on: monday
5285
+ responses:
5286
+ "200":
5287
+ description: User settings updated successfully
5288
+ content:
5289
+ application/json:
5290
+ schema:
5291
+ $ref: "#/components/schemas/userSettingsObject"
5292
+ "400":
5293
+ description: Invalid request body
5294
+ content:
5295
+ application/json:
5296
+ schema:
5297
+ $ref: "#/components/schemas/errorResponseObject"
5298
+ "401":
5299
+ $ref: "#/components/responses/unauthorizedToken"
5300
+ "429":
5301
+ $ref: "#/components/responses/rateLimited"
5302
+ "500":
5303
+ $ref: "#/components/responses/serverError"
5304
+ /me/user/account/settings:
5305
+ get:
5306
+ tags:
5307
+ - me
5308
+ summary: Get user account settings
5309
+ description: >-
5310
+ Returns settings specific to the authorized user within the current
5311
+ budget account. These settings do not affect other users or the
5312
+ authorized user's settings in other budget accounts.
5313
+ operationId: getUserAccountSettings
5314
+ responses:
5315
+ "200":
5316
+ description: Settings for the authorized user in the current budget
5317
+ account
5318
+ content:
5319
+ application/json:
5320
+ schema:
5321
+ $ref: "#/components/schemas/userAccountSettingsObject"
5322
+ example:
5323
+ auto_review_transaction_on_update: true
5324
+ auto_review_transaction_on_creation: true
5325
+ default_manual_account_id: null
5326
+ "401":
5327
+ $ref: "#/components/responses/unauthorizedToken"
5328
+ "429":
5329
+ $ref: "#/components/responses/rateLimited"
5330
+ "500":
5331
+ $ref: "#/components/responses/serverError"
5332
+ put:
5333
+ tags:
5334
+ - me
5335
+ summary: Update user account settings
5336
+ description: |-
5337
+ Updates settings specific to the authorized user within the current
5338
+ budget account. Submit the full response from
5339
+ `GET /me/user/account/settings` with one or more properties changed, or
5340
+ provide only the properties to update. The request body must include at
5341
+ least one property.
5342
+ operationId: updateUserAccountSettings
5343
+ requestBody:
5344
+ required: true
5345
+ content:
5346
+ application/json:
5347
+ schema:
5348
+ $ref: "#/components/schemas/updateUserAccountSettingsRequestObject"
5349
+ examples:
5350
+ Update review preference:
5351
+ value:
5352
+ auto_review_transaction_on_creation: false
5353
+ Clear default manual account:
5354
+ value:
5355
+ default_manual_account_id: null
5356
+ responses:
5357
+ "200":
5358
+ description: User account settings updated successfully
5359
+ content:
5360
+ application/json:
5361
+ schema:
5362
+ $ref: "#/components/schemas/userAccountSettingsObject"
5363
+ examples:
5364
+ Update review preference:
5365
+ value:
5366
+ auto_review_transaction_on_update: true
5367
+ auto_review_transaction_on_creation: false
5368
+ default_manual_account_id: null
5369
+ Clear default manual account:
5370
+ value:
5371
+ auto_review_transaction_on_update: true
5372
+ auto_review_transaction_on_creation: true
5373
+ default_manual_account_id: null
5374
+ "400":
5375
+ description: Invalid request body
5376
+ content:
5377
+ application/json:
5378
+ schema:
5379
+ $ref: "#/components/schemas/errorResponseObject"
5380
+ "401":
5381
+ $ref: "#/components/responses/unauthorizedToken"
5382
+ "429":
5383
+ $ref: "#/components/responses/rateLimited"
5384
+ "500":
5385
+ $ref: "#/components/responses/serverError"
4493
5386
  /summary:
4494
5387
  get:
4495
5388
  tags:
@@ -5737,12 +6630,9 @@ paths:
5737
6630
  tags:
5738
6631
  - crypto-manual
5739
6632
  summary: Get all supported cryptocurrencies
5740
- description: >
6633
+ description: |-
5741
6634
  Retrieve the list of cryptocurrencies currently supported for manual tracking.<p>
5742
-
5743
- When creating a new manual crypto balance via `POST /crypto/manual`, the
5744
- `symbol` you specify must match the `symbol` of one of the entries
5745
- returned by this endpoint.
6635
+ When creating a new manual crypto balance via `POST /crypto/manual`, the `symbol` you specify must match the `symbol` of one of the entries returned by this endpoint.
5746
6636
  operationId: getAllCryptocurrencies
5747
6637
  responses:
5748
6638
  "200":
@@ -5780,16 +6670,9 @@ paths:
5780
6670
  - crypto-manual
5781
6671
  summary: Add a new supported cryptocurrency
5782
6672
  operationId: createCryptocurrency
5783
- description: >-
6673
+ description: |-
5784
6674
  Adds a new cryptocurrency to the supported manual-crypto list.<br><br>
5785
-
5786
- Lunch Money uses [CoinGecko](https://www.coingecko.com/us/coins/ethereum)
5787
- to convert crypto balances to the user's primary currency. Users add a
5788
- new supported cryptocurrency by submitting a CoinGecko coin-page URL.
5789
- The server validates the URL, extracts the id from `/coins/{id}`,
5790
- checks for an existing supported `coingecko_id`, validates the id
5791
- against CoinGecko, then confirms the resolved symbol is not already
5792
- supported before creating the new entry.
6675
+ Lunch Money uses [CoinGecko](https://www.coingecko.com/us/coins/ethereum) to convert crypto balances to the user's primary currency. Users add a new supported cryptocurrency by submitting a CoinGecko coin-page URL. The server validates the URL, extracts the id from `/coins/{id}`, checks for an existing supported `coingecko_id`, validates the id against CoinGecko, then confirms the resolved symbol is not already supported before creating the new entry.
5793
6676
  requestBody:
5794
6677
  required: true
5795
6678
  content:
@@ -5868,8 +6751,8 @@ paths:
5868
6751
  tags:
5869
6752
  - crypto-manual
5870
6753
  summary: Get all manual crypto balances
5871
- description: Retrieve all manually managed crypto balances associated with
5872
- the user's account.
6754
+ description: |-
6755
+ Retrieve all manually managed crypto balances associated with the user's account.
5873
6756
  operationId: getAllCryptoManual
5874
6757
  responses:
5875
6758
  "200":
@@ -5903,11 +6786,9 @@ paths:
5903
6786
  tags:
5904
6787
  - crypto-manual
5905
6788
  summary: Create a manual crypto balance
5906
- description: >-
6789
+ description: |-
5907
6790
  Create a manually managed crypto asset.<br><br>
5908
-
5909
- If `display_name` is `null`, clients may derive one from
5910
- `institution_name` + `name`.
6791
+ If `display_name` is `null`, clients may derive one from `institution_name` + `name`.
5911
6792
  operationId: createCryptoManual
5912
6793
  requestBody:
5913
6794
  required: true
@@ -5992,7 +6873,8 @@ paths:
5992
6873
  tags:
5993
6874
  - crypto-manual
5994
6875
  summary: Get a single manual crypto balance
5995
- description: Retrieve a single manually managed crypto balance by ID.
6876
+ description: |-
6877
+ Retrieve a single manually managed crypto balance by ID.
5996
6878
  operationId: getCryptoManualById
5997
6879
  parameters:
5998
6880
  - name: id
@@ -6060,11 +6942,9 @@ paths:
6060
6942
  tags:
6061
6943
  - crypto-manual
6062
6944
  summary: Update a manual crypto balance
6063
- description: >-
6945
+ description: |-
6064
6946
  Modify a manually managed crypto balance.<br><br>
6065
-
6066
- You may submit the response from `GET /crypto/manual/{id}` as the request body. System-defined properties
6067
- are accepted according to the `x-updatable` metadata in the update schema.
6947
+ You may submit the response from `GET /crypto/manual/{id}` as the request body. System-defined properties are accepted according to the `x-updatable` metadata in the update schema.
6068
6948
  operationId: updateCryptoManual
6069
6949
  parameters:
6070
6950
  - name: id
@@ -6161,10 +7041,8 @@ paths:
6161
7041
  tags:
6162
7042
  - crypto-manual
6163
7043
  summary: Delete a manual crypto balance
6164
- description: Delete a single manually managed crypto asset by ID.<p> If
6165
- this crypto asset has a balance history, and you do not explicitly set
6166
- the query parameter`keep_history`, a 422 response will be returned
6167
- requesting you to explicitly set `keep_history` to `true` or `false`.
7044
+ description: |-
7045
+ Delete a single manually managed crypto asset by ID.<p> If this crypto asset has a balance history, and you do not explicitly set the query parameter`keep_history`, a 422 response will be returned requesting you to explicitly set `keep_history` to `true` or `false`.
6168
7046
  operationId: deleteCryptoManual
6169
7047
  parameters:
6170
7048
  - name: id
@@ -6229,8 +7107,8 @@ paths:
6229
7107
  tags:
6230
7108
  - crypto-synced
6231
7109
  summary: Get all synced crypto accounts
6232
- description: Retrieves all synced crypto accounts
6233
- associated with the user's account.
7110
+ description: |-
7111
+ Retrieves all synced crypto accounts associated with the user's account.
6234
7112
  operationId: getAllCryptoSynced
6235
7113
  responses:
6236
7114
  "200":
@@ -6292,8 +7170,8 @@ paths:
6292
7170
  tags:
6293
7171
  - crypto-synced
6294
7172
  summary: Get a single synced crypto account
6295
- description: Retrieves the synced crypto account and all nested balances
6296
- for the specified synced crypto account ID.
7173
+ description: |-
7174
+ Retrieves the synced crypto account and all nested balances for the specified synced crypto account ID.
6297
7175
  operationId: getCryptoSyncedById
6298
7176
  parameters:
6299
7177
  - name: id
@@ -6373,8 +7251,8 @@ paths:
6373
7251
  tags:
6374
7252
  - crypto-synced
6375
7253
  summary: Get a synced crypto balance by symbol
6376
- description: Retrieves a single balance from the specified synced crypto
6377
- account using the crypto symbol.
7254
+ description: |-
7255
+ Retrieves a single balance from the specified synced crypto account using the crypto symbol.
6378
7256
  operationId: getCryptoSyncedBalanceBySymbol
6379
7257
  parameters:
6380
7258
  - name: id
@@ -6453,8 +7331,8 @@ paths:
6453
7331
  tags:
6454
7332
  - crypto-synced
6455
7333
  summary: Refresh balances for a synced crypto account
6456
- description: Trigger a balance refresh for the specified synced crypto
6457
- account. Returns the refreshed synced crypto account.
7334
+ description: |-
7335
+ Trigger a balance refresh for the specified synced crypto account. Returns the refreshed synced crypto account.
6458
7336
  operationId: refreshCryptoSynced
6459
7337
  parameters:
6460
7338
  - name: id
@@ -6523,51 +7401,55 @@ paths:
6523
7401
  tags:
6524
7402
  - balance_history
6525
7403
  summary: Get balance history
6526
- description: >-
6527
- Retrieve historical balance entries.<br><br>
6528
-
6529
- Balance history is monthly. When `start_date` and `end_date` are both provided,
6530
- they must be first-of-month dates. `start_date` must not be in the future,
6531
- while `end_date` may be in the future. If one of `start_date` or `end_date`
6532
- is provided, the other is required. If neither is provided, all available
6533
- balance history is returned.<br><br>
6534
-
6535
- The response groups entries by source account. Each item in
6536
- `balance_history` contains a `source` object plus a `balances` array
6537
- containing one balance entry per month in the requested range, or all
6538
- stored entries when no range is provided.<br><br>
6539
-
6540
- Historical entries for accounts that have been deleted may still
6541
- be returned. These entries use `source.type: deleted` and include
6542
- `deleted_account_id`, archived display fields, and account metadata on the
6543
- `source` object.
7404
+ description: |-
7405
+ Retrieve monthly balance history for all account sources.<br><br>
7406
+ Balance history is monthly. Each entry represents the account balance at or around the end of the specified month. System-generated entries are generally captured near the boundary between months.<br><br>
7407
+ Query with optional `start_month` and `end_month` in YYYY-MM format. The range is inclusive. If either parameter is provided, both are required. `start_month` must not be in the future. `end_month` may not be earlier than `start_month` and must not be in the future. Values must be valid calendar months in exact YYYY-MM format. A full date such as `2026-06-01` is invalid. If neither is provided, all available balance history is returned, including an ephemeral `current` entry for the current month when applicable.<br><br>
7408
+ The response groups entries by source account. Each item in `balance_history` contains a `source` object plus a `balances` array. Within a requested range (or across all history when no range is provided), the array includes only months that have data — months with no data are omitted. A `current` entry is also included when the requested range includes the current month.<br><br>
7409
+ Each balance entry has a `type`:<br>
7410
+ - `historical`: stored snapshot of a past month for an active or deleted account. Includes an `id` that can be used with balance history entry endpoints<br>
7411
+ - `current`: snapshot based on the account's current balances. It is ephemeral and may change between requests. To inspect the underlying account, use the type-specific source id for the `source.type` values:<br>
7412
+ &nbsp;&nbsp;&nbsp;&nbsp;- `manual`: `source.manual_account_id` with [GET /manual_accounts/{id}](#tag/manual-accounts/GET/manual_accounts/{id})<br>
7413
+ &nbsp;&nbsp;&nbsp;&nbsp;- `plaid`: `source.plaid_account_id` with [GET /plaid_accounts/{id}](#tag/plaid-accounts/GET/plaid_accounts/{id})<br>
7414
+ &nbsp;&nbsp;&nbsp;&nbsp;- `crypto_manual`: `source.crypto_manual_id` with [GET /crypto/manual/{id}](#tag/crypto-manual/GET/crypto/manual/{id})<br>
7415
+ &nbsp;&nbsp;&nbsp;&nbsp;- `crypto_synced`: `source.crypto_synced_id` and `source.symbol` with [GET /crypto/synced/{id}/{symbol}](#tag/crypto-synced/GET/crypto/synced/{id}/{symbol})
6544
7416
  operationId: getBalanceHistory
6545
7417
  parameters:
6546
- - name: start_date
7418
+ - name: start_month
6547
7419
  in: query
6548
- description: Optional start date for the requested history range in YYYY-MM-DD format. If set, `end_date` is also required. This must be the first day of a month and must not be in the future.
7420
+ description: >-
7421
+ Optional start of the requested history range as a calendar month in
7422
+ YYYY-MM format (for example `2026-06`). If set, `end_month` is also
7423
+ required. The range is inclusive. `start_month` must not be in the
7424
+ future. A full date such as `2026-06-01` is invalid.
6549
7425
  required: false
6550
7426
  schema:
6551
7427
  type: string
6552
- format: date
7428
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
6553
7429
  examples:
6554
7430
  range start:
6555
- summary: Start date
6556
- value: "2026-01-01"
6557
- - name: end_date
7431
+ summary: Start month
7432
+ value: "2026-01"
7433
+ - name: end_month
6558
7434
  in: query
6559
- description: Optional end date for the requested history range in YYYY-MM-DD format. If set, `start_date` is also required. This must be the first day of a month. For a single month, set this to the same first-of-month date as `start_date`.
7435
+ description: >-
7436
+ Optional end of the requested history range as a calendar month in
7437
+ YYYY-MM format (for example `2026-06`). If set, `start_month` is also
7438
+ required. The range is inclusive. `end_month` may not be earlier than
7439
+ `start_month` and must not be in the future. A full date such as
7440
+ `2026-06-01` is invalid. For a single month, set this to the same
7441
+ value as `start_month`.
6560
7442
  required: false
6561
7443
  schema:
6562
7444
  type: string
6563
- format: date
7445
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
6564
7446
  examples:
6565
7447
  range end:
6566
- summary: End date
6567
- value: "2026-03-01"
7448
+ summary: End month
7449
+ value: "2026-03"
6568
7450
  responses:
6569
7451
  "200":
6570
- description: Historical balance entries for the requested date range
7452
+ description: Monthly balance history for the requested month range
6571
7453
  content:
6572
7454
  application/json:
6573
7455
  schema:
@@ -6580,14 +7462,16 @@ paths:
6580
7462
  type: manual
6581
7463
  manual_account_id: 119807
6582
7464
  balances:
6583
- - id: 101
6584
- date: "2026-01-01"
7465
+ - type: historical
7466
+ id: 101
7467
+ month: "2026-01"
6585
7468
  balance: "41000.0000"
6586
7469
  currency: usd
6587
7470
  to_base: 41000
6588
7471
  crypto_balance: null
6589
- - id: 102
6590
- date: "2026-02-01"
7472
+ - type: historical
7473
+ id: 102
7474
+ month: "2026-02"
6591
7475
  balance: "41211.8000"
6592
7476
  currency: usd
6593
7477
  to_base: 41211.8
@@ -6596,8 +7480,9 @@ paths:
6596
7480
  type: plaid
6597
7481
  plaid_account_id: 119808
6598
7482
  balances:
6599
- - id: 103
6600
- date: "2026-01-01"
7483
+ - type: historical
7484
+ id: 103
7485
+ month: "2026-01"
6601
7486
  balance: "5498.2800"
6602
7487
  currency: usd
6603
7488
  to_base: 5498.28
@@ -6607,8 +7492,9 @@ paths:
6607
7492
  crypto_manual_id: 22001
6608
7493
  symbol: btc
6609
7494
  balances:
6610
- - id: 104
6611
- date: "2026-01-01"
7495
+ - type: historical
7496
+ id: 104
7497
+ month: "2026-01"
6612
7498
  balance: "53124.7200"
6613
7499
  currency: usd
6614
7500
  to_base: 53124.72
@@ -6618,8 +7504,9 @@ paths:
6618
7504
  crypto_synced_id: 33004
6619
7505
  symbol: btc
6620
7506
  balances:
6621
- - id: 105
6622
- date: "2026-01-01"
7507
+ - type: historical
7508
+ id: 105
7509
+ month: "2026-01"
6623
7510
  balance: "6231.2800"
6624
7511
  currency: usd
6625
7512
  to_base: 6231.28
@@ -6635,12 +7522,34 @@ paths:
6635
7522
  mask: "1234"
6636
7523
  symbol: null
6637
7524
  balances:
6638
- - id: 106
6639
- date: "2026-01-01"
7525
+ - type: historical
7526
+ id: 106
7527
+ month: "2026-01"
6640
7528
  balance: "1250.0000"
6641
7529
  currency: usd
6642
7530
  to_base: 1250
6643
7531
  crypto_balance: null
7532
+ historical and current:
7533
+ summary: Historical month plus ephemeral current month
7534
+ value:
7535
+ balance_history:
7536
+ - source:
7537
+ type: manual
7538
+ manual_account_id: 162003
7539
+ balances:
7540
+ - type: historical
7541
+ id: 7437356
7542
+ month: "2026-06"
7543
+ balance: "62.8"
7544
+ currency: usd
7545
+ to_base: 62.8
7546
+ crypto_balance: null
7547
+ - type: current
7548
+ month: "2026-07"
7549
+ balance: "71.2"
7550
+ currency: usd
7551
+ to_base: 71.2
7552
+ crypto_balance: null
6644
7553
  manual account history:
6645
7554
  value:
6646
7555
  balance_history:
@@ -6648,14 +7557,16 @@ paths:
6648
7557
  type: manual
6649
7558
  manual_account_id: 119807
6650
7559
  balances:
6651
- - id: 201
6652
- date: "2026-01-01"
7560
+ - type: historical
7561
+ id: 201
7562
+ month: "2026-01"
6653
7563
  balance: "41000.0000"
6654
7564
  currency: usd
6655
7565
  to_base: 41000
6656
7566
  crypto_balance: null
6657
- - id: 202
6658
- date: "2026-02-01"
7567
+ - type: historical
7568
+ id: 202
7569
+ month: "2026-02"
6659
7570
  balance: "41211.8000"
6660
7571
  currency: usd
6661
7572
  to_base: 41211.8
@@ -6667,8 +7578,9 @@ paths:
6667
7578
  type: plaid
6668
7579
  plaid_account_id: 119808
6669
7580
  balances:
6670
- - id: 301
6671
- date: "2026-02-01"
7581
+ - type: historical
7582
+ id: 301
7583
+ month: "2026-02"
6672
7584
  balance: "5498.2800"
6673
7585
  currency: usd
6674
7586
  to_base: 5498.28
@@ -6681,8 +7593,9 @@ paths:
6681
7593
  crypto_synced_id: 33004
6682
7594
  symbol: btc
6683
7595
  balances:
6684
- - id: 401
6685
- date: "2026-02-01"
7596
+ - type: historical
7597
+ id: 401
7598
+ month: "2026-02"
6686
7599
  balance: "6231.2800"
6687
7600
  currency: usd
6688
7601
  to_base: 6231.28
@@ -6701,8 +7614,9 @@ paths:
6701
7614
  mask: "1234"
6702
7615
  symbol: null
6703
7616
  balances:
6704
- - id: 501
6705
- date: "2026-01-01"
7617
+ - type: historical
7618
+ id: 501
7619
+ month: "2026-01"
6706
7620
  balance: "1250.0000"
6707
7621
  currency: usd
6708
7622
  to_base: 1250
@@ -6714,26 +7628,31 @@ paths:
6714
7628
  schema:
6715
7629
  $ref: "#/components/schemas/errorResponseObject"
6716
7630
  examples:
6717
- missing paired date:
7631
+ missing paired month:
6718
7632
  value:
6719
7633
  message: Request Validation Failure
6720
7634
  errors:
6721
- - errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
7635
+ - errMsg: "`start_month` and `end_month` must either both be provided or both be omitted."
6722
7636
  invalid range:
6723
7637
  value:
6724
7638
  message: Request Validation Failure
6725
7639
  errors:
6726
- - errMsg: "`start_date` must be before or equal to `end_date`."
6727
- not first of month:
7640
+ - errMsg: "`end_month` may not be earlier than `start_month`."
7641
+ invalid month format:
7642
+ value:
7643
+ message: Invalid Request Parameters
7644
+ errors:
7645
+ - errMsg: "Invalid value for parameter: 'start_month'. '2026-06-01' is not a valid month in YYYY-MM format."
7646
+ future start month:
6728
7647
  value:
6729
7648
  message: Request Validation Failure
6730
7649
  errors:
6731
- - errMsg: "`start_date` and `end_date` must both be the first day of a month."
6732
- future start date:
7650
+ - errMsg: "`start_month` must not be in the future."
7651
+ future end month:
6733
7652
  value:
6734
7653
  message: Request Validation Failure
6735
7654
  errors:
6736
- - errMsg: "`start_date` must not be in the future."
7655
+ - errMsg: "`end_month` must not be in the future."
6737
7656
  "401":
6738
7657
  $ref: "#/components/responses/unauthorizedToken"
6739
7658
  "429":
@@ -6745,23 +7664,16 @@ paths:
6745
7664
  tags:
6746
7665
  - balance_history
6747
7666
  summary: Get balance history for an account
6748
- description: >-
6749
- Retrieve historical balance entries for one manual, Plaid, manual crypto,
6750
- or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
6751
-
6752
- The `account_type` path parameter identifies the type of account and the
6753
- `account_id` path parameter identifies the specific id for that account type.<br><br>
6754
-
6755
- When `start_date` and `end_date` are both provided, they must be first-of-month
6756
- dates. `start_date` must not be in the future, while `end_date` may be in the future.
6757
- If one of `start_date` or `end_date` is provided, the other is required. If neither is
6758
- provided, all available history for the source is returned.
7667
+ description: |-
7668
+ Retrieve monthly balance history for one manual, Plaid, manual crypto, or deleted account. For synced crypto symbol streams, use [GET /balance_history/crypto_synced/{account_id}/{symbol}](#tag/balance-history/GET/balance_history/crypto_synced/{account_id}/{symbol}).<br><br>
7669
+ The `account_type` path parameter identifies the account family (`manual`, `plaid`, `crypto_manual`, or `deleted`) and `account_id` identifies the account within that family.<br><br>
7670
+ `start_month`, `end_month`, and current-month entries behave as described in [GET /balance_history](#tag/balance-history/GET/balance_history).
6759
7671
  operationId: getBalanceHistoryForAccount
6760
7672
  parameters:
6761
7673
  - name: account_type
6762
7674
  in: path
6763
7675
  required: true
6764
- description: Source family to retrieve. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
7676
+ description: Account family to retrieve. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
6765
7677
  schema:
6766
7678
  type: string
6767
7679
  enum: [manual, plaid, crypto_manual, deleted]
@@ -6772,23 +7684,27 @@ paths:
6772
7684
  schema:
6773
7685
  type: integer
6774
7686
  format: int32
6775
- - name: start_date
7687
+ - name: start_month
6776
7688
  in: query
6777
- description: Optional start date for the requested history range in YYYY-MM-DD format. If set, `end_date` is also required. This must be the first day of a month and must not be in the future.
7689
+ description: >-
7690
+ Optional. Same format and constraints as `start_month` on
7691
+ [GET /balance_history](#tag/balance-history/GET/balance_history).
6778
7692
  required: false
6779
7693
  schema:
6780
7694
  type: string
6781
- format: date
6782
- - name: end_date
7695
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
7696
+ - name: end_month
6783
7697
  in: query
6784
- description: Optional end date for the requested history range in YYYY-MM-DD format. If set, `start_date` is also required. This must be the first day of a month.
7698
+ description: >-
7699
+ Optional. Same format and constraints as `end_month` on
7700
+ [GET /balance_history](#tag/balance-history/GET/balance_history).
6785
7701
  required: false
6786
7702
  schema:
6787
7703
  type: string
6788
- format: date
7704
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
6789
7705
  responses:
6790
7706
  "200":
6791
- description: Historical balance entries for the requested source
7707
+ description: Monthly balance history for the requested source
6792
7708
  content:
6793
7709
  application/json:
6794
7710
  schema:
@@ -6801,14 +7717,16 @@ paths:
6801
7717
  type: manual
6802
7718
  manual_account_id: 119807
6803
7719
  balances:
6804
- - id: 201
6805
- date: "2026-01-01"
7720
+ - type: historical
7721
+ id: 201
7722
+ month: "2026-01"
6806
7723
  balance: "41000.0000"
6807
7724
  currency: usd
6808
7725
  to_base: 41000
6809
7726
  crypto_balance: null
6810
- - id: 202
6811
- date: "2026-02-01"
7727
+ - type: historical
7728
+ id: 202
7729
+ month: "2026-02"
6812
7730
  balance: "41211.8000"
6813
7731
  currency: usd
6814
7732
  to_base: 41211.8
@@ -6827,8 +7745,9 @@ paths:
6827
7745
  mask: "1234"
6828
7746
  symbol: null
6829
7747
  balances:
6830
- - id: 501
6831
- date: "2026-01-01"
7748
+ - type: historical
7749
+ id: 501
7750
+ month: "2026-01"
6832
7751
  balance: "1250.0000"
6833
7752
  currency: usd
6834
7753
  to_base: 1250
@@ -6840,16 +7759,16 @@ paths:
6840
7759
  schema:
6841
7760
  $ref: "#/components/schemas/errorResponseObject"
6842
7761
  examples:
6843
- missing paired date:
7762
+ missing paired month:
6844
7763
  value:
6845
7764
  message: Request Validation Failure
6846
7765
  errors:
6847
- - errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
6848
- invalid range:
7766
+ - errMsg: "`start_month` and `end_month` must either both be provided or both be omitted."
7767
+ invalid month format:
6849
7768
  value:
6850
- message: Request Validation Failure
7769
+ message: Invalid Request Parameters
6851
7770
  errors:
6852
- - errMsg: "`start_date` must be before or equal to `end_date`."
7771
+ - errMsg: "Invalid value for parameter: 'start_month'. '2026-06-01' is not a valid month in YYYY-MM format."
6853
7772
  "401":
6854
7773
  $ref: "#/components/responses/unauthorizedToken"
6855
7774
  "404":
@@ -6877,37 +7796,20 @@ paths:
6877
7796
  tags:
6878
7797
  - balance_history
6879
7798
  summary: Upsert balance history for an account
6880
- description: >-
6881
- Upsert one or more historical balance entries for a single manual, Plaid,
6882
- manual crypto, or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
6883
-
6884
- The `account_type` path parameter identifies the type of account and the
6885
- `account_id` path parameter identifies the specific id for that account type.<br><br>
6886
-
6887
- Submit one or more entries in the `balances` array. Each entry must specify
6888
- a `date` and `balance` value.<br><br>
6889
-
6890
- Balance history is monthly. Each entry's `date` must be the first day of
6891
- a month and must be in a past month.<br><br>
6892
-
6893
- `currency` may be provided for any balance entry. If omitted, it defaults
6894
- to the account currency for manual/Plaid accounts, or the user's primary
6895
- currency for crypto/deleted accounts.<br><br>
6896
-
6897
- `symbol` may only be set when `account_type` is `crypto_manual` or
6898
- `crypto_synced`. It is optional for `crypto_manual` accounts and tolerated
6899
- for `deleted` accounts.<br><br>
6900
-
6901
- `crypto_balance` may be provided for `crypto_manual`, `crypto_synced`, and
6902
- `deleted` accounts, and is invalid for `manual` or `plaid` accounts.<br><br>
6903
-
6904
- The response contains only the balance entries that were submitted in this request.
7799
+ description: |-
7800
+ Upsert one or more historical balance entries for a single manual, Plaid, manual crypto, or deleted account. For synced crypto symbol streams, use [PUT /balance_history/crypto_synced/{account_id}/{symbol}](#tag/balance-history/PUT/balance_history/crypto_synced/{account_id}/{symbol}).<br><br>
7801
+ The `account_type` path parameter identifies the account family (`manual`, `plaid`, `crypto_manual`, or `deleted`) and `account_id` identifies the account within that family.<br><br>
7802
+ Submit one or more entries in the `balances` array. Each entry must specify a `month` (YYYY-MM) and `balance` value. `month` must be a past calendar month. The current month cannot be written through this endpoint.<br><br>
7803
+ `currency` may be provided for any balance entry. If omitted, it defaults to the account currency for manual/Plaid accounts, or the user's primary currency for crypto/deleted accounts.<br><br>
7804
+ `symbol` may be set for `crypto_manual` (optional) and `deleted` (tolerated) accounts. Do not provide it for `manual` or `plaid` accounts.<br><br>
7805
+ `crypto_balance` may be provided for `crypto_manual` and `deleted` accounts. It is invalid for `manual` or `plaid` accounts.<br><br>
7806
+ The response contains only the `type: historical` balance entries that were submitted in this request.
6905
7807
  operationId: upsertBalanceHistoryForAccount
6906
7808
  parameters:
6907
7809
  - name: account_type
6908
7810
  in: path
6909
7811
  required: true
6910
- description: Source family to update. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
7812
+ description: Account family to update. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
6911
7813
  schema:
6912
7814
  type: string
6913
7815
  enum: [manual, plaid, crypto_manual, deleted]
@@ -6928,21 +7830,21 @@ paths:
6928
7830
  manual account bulk upsert:
6929
7831
  value:
6930
7832
  balances:
6931
- - date: "2026-03-01"
7833
+ - month: "2026-03"
6932
7834
  balance: "41500.0000"
6933
- - date: "2026-04-01"
7835
+ - month: "2026-04"
6934
7836
  balance: "41625.5000"
6935
7837
  crypto manual balance with symbol:
6936
7838
  value:
6937
7839
  balances:
6938
- - date: "2026-03-01"
7840
+ - month: "2026-03"
6939
7841
  balance: "56011.1200"
6940
7842
  symbol: btc
6941
7843
  crypto_balance: "0.852341920145782301"
6942
7844
  deleted account bulk upsert:
6943
7845
  value:
6944
7846
  balances:
6945
- - date: "2026-03-01"
7847
+ - month: "2026-03"
6946
7848
  symbol: btc
6947
7849
  crypto_balance: "0.020000000000000000"
6948
7850
  currency: usd
@@ -6951,55 +7853,59 @@ paths:
6951
7853
  value:
6952
7854
  balances:
6953
7855
  - id: 601
6954
- date: "2026-03-01"
7856
+ month: "2026-03"
6955
7857
  balance: "41500.0000"
6956
7858
  currency: usd
6957
7859
  to_base: 41500
6958
7860
  crypto_balance: null
6959
7861
  responses:
6960
7862
  "200":
6961
- description: Returns the modified balance entries only. Other historical
6962
- entries for the account are omitted from `balances`.
7863
+ description: >-
7864
+ Returns only the `type: historical` entries modified by this request.
7865
+ Other historical entries for the account are omitted from `balances`.
6963
7866
  content:
6964
7867
  application/json:
6965
7868
  schema:
6966
7869
  $ref: "#/components/schemas/balanceHistoryAccountObject"
6967
7870
  examples:
6968
7871
  manual account bulk upsert:
6969
- summary: Two upserted rows returned (not full account history)
7872
+ summary: Two upserted entries returned (not full account history)
6970
7873
  value:
6971
7874
  source:
6972
7875
  type: manual
6973
7876
  manual_account_id: 119807
6974
7877
  balances:
6975
- - id: 601
6976
- date: "2026-03-01"
7878
+ - type: historical
7879
+ id: 601
7880
+ month: "2026-03"
6977
7881
  balance: "41500.0000"
6978
7882
  currency: usd
6979
7883
  to_base: 41500
6980
7884
  crypto_balance: null
6981
- - id: 602
6982
- date: "2026-04-01"
7885
+ - type: historical
7886
+ id: 602
7887
+ month: "2026-04"
6983
7888
  balance: "41625.5000"
6984
7889
  currency: usd
6985
7890
  to_base: 41625.5
6986
7891
  crypto_balance: null
6987
7892
  crypto manual balance with symbol:
6988
- summary: Single upserted row returned
7893
+ summary: Single upserted entry returned
6989
7894
  value:
6990
7895
  source:
6991
7896
  type: crypto_manual
6992
7897
  crypto_manual_id: 22001
6993
7898
  symbol: btc
6994
7899
  balances:
6995
- - id: 603
6996
- date: "2026-03-01"
7900
+ - type: historical
7901
+ id: 603
7902
+ month: "2026-03"
6997
7903
  balance: "56011.1200"
6998
7904
  currency: usd
6999
7905
  to_base: 56011.12
7000
7906
  crypto_balance: "0.852341920145782301"
7001
7907
  deleted account bulk upsert:
7002
- summary: Single upserted row returned
7908
+ summary: Single upserted entry returned
7003
7909
  value:
7004
7910
  source:
7005
7911
  type: deleted
@@ -7012,15 +7918,17 @@ paths:
7012
7918
  mask: "1234"
7013
7919
  symbol: btc
7014
7920
  balances:
7015
- - id: 504
7016
- date: "2026-03-01"
7921
+ - type: historical
7922
+ id: 504
7923
+ month: "2026-03"
7017
7924
  balance: "1255"
7018
7925
  currency: usd
7019
7926
  to_base: 1255
7020
7927
  crypto_balance: "0.020000000000000000"
7021
7928
  "400":
7022
- description: Bad Request. The entire request is rejected if any row in
7023
- `balances` fails validation; no rows are updated.
7929
+ description: >-
7930
+ Bad Request. If any entry in `balances` fails validation, the entire
7931
+ request is rejected and no entries are updated.
7024
7932
  content:
7025
7933
  application/json:
7026
7934
  schema:
@@ -7041,30 +7949,34 @@ paths:
7041
7949
  message: Invalid Request Body
7042
7950
  errors:
7043
7951
  - errMsg: "Invalid property 'foo' in request body."
7044
- invalid date:
7952
+ invalid month format:
7953
+ value:
7954
+ message: Invalid Request Body
7955
+ errors:
7956
+ - errMsg: "Invalid value for property 'balances.0.month'. '2026-06-01' is not a valid month in YYYY-MM format."
7957
+ current month:
7045
7958
  value:
7046
7959
  message: Request Validation Failure
7047
7960
  errors:
7048
- - errMsg: "`date` must be the first day of a month."
7961
+ - errMsg: "`month` must not be the current month."
7049
7962
  request_balances_index: 0
7050
- code: VALIDATION_ERROR
7051
- future date:
7963
+ future month:
7052
7964
  value:
7053
7965
  message: Request Validation Failure
7054
7966
  errors:
7055
- - errMsg: "`date` must be in a past month."
7967
+ - errMsg: "`month` must not be in the future."
7056
7968
  request_balances_index: 1
7057
7969
  crypto balance not allowed:
7058
7970
  value:
7059
7971
  message: Request Validation Failure
7060
7972
  errors:
7061
- - errMsg: "`crypto_balance` may only be set when `account_type` is `crypto_manual`, `crypto_synced`, or `deleted`."
7973
+ - errMsg: "`crypto_balance` may only be set when `account_type` is `crypto_manual` or `deleted`."
7062
7974
  request_balances_index: 0
7063
- invalid row in bulk request:
7975
+ invalid entry in bulk request:
7064
7976
  value:
7065
7977
  message: Request Validation Failure
7066
7978
  errors:
7067
- - errMsg: "`symbol` may only be set when `account_type` is `crypto_manual` or `crypto_synced`."
7979
+ - errMsg: "`symbol` may only be set when `account_type` is `crypto_manual` or `deleted`."
7068
7980
  request_balances_index: 1
7069
7981
  "401":
7070
7982
  $ref: "#/components/responses/unauthorizedToken"
@@ -7086,15 +7998,14 @@ paths:
7086
7998
  tags:
7087
7999
  - balance_history
7088
8000
  summary: Delete all balance history for an account
7089
- description: >-
7090
- Delete all historical balance entries for a single manual, Plaid,
7091
- manual crypto, or deleted account. Crypto synced accounts require an additional `symbol` path parameter.
8001
+ description: |-
8002
+ Delete all historical balance entries for a single manual, Plaid, manual crypto, or deleted account. For synced crypto symbol streams, use [DELETE /balance_history/crypto_synced/{account_id}/{symbol}](#tag/balance-history/DELETE/balance_history/crypto_synced/{account_id}/{symbol}).
7092
8003
  operationId: deleteBalanceHistoryForAccount
7093
8004
  parameters:
7094
8005
  - name: account_type
7095
8006
  in: path
7096
8007
  required: true
7097
- description: Source family to delete. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
8008
+ description: Account family to delete. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
7098
8009
  schema:
7099
8010
  type: string
7100
8011
  enum: [manual, plaid, crypto_manual, deleted]
@@ -7131,16 +8042,10 @@ paths:
7131
8042
  tags:
7132
8043
  - balance_history
7133
8044
  summary: Get balance history for a synced crypto symbol
7134
- description: >-
7135
- Retrieve historical balance entries for a single synced crypto symbol stream.<br><br>
7136
-
7137
- Use the `crypto_synced` account id together with a `symbol` path parameter
7138
- to select one balance stream within that synced crypto account.<br><br>
7139
-
7140
- When `start_date` and `end_date` are both provided, they must be first-of-month
7141
- dates. `start_date` must not be in the future, while `end_date` may be in the future.
7142
- If one of `start_date` or `end_date` is provided, the other is required. If neither is
7143
- provided, all available history for the symbol stream is returned.
8045
+ description: |-
8046
+ Retrieve monthly balance history for a single synced crypto symbol stream.<br><br>
8047
+ The path selects one balance stream with a synced crypto account id and `symbol`.<br><br>
8048
+ `start_month`, `end_month`, and current-month entries behave as described in [GET /balance_history](#tag/balance-history/GET/balance_history).
7144
8049
  operationId: getBalanceHistoryForCryptoSynced
7145
8050
  parameters:
7146
8051
  - name: account_id
@@ -7158,23 +8063,27 @@ paths:
7158
8063
  type: string
7159
8064
  minLength: 1
7160
8065
  maxLength: 25
7161
- - name: start_date
8066
+ - name: start_month
7162
8067
  in: query
7163
- description: Optional start date for the requested history range in YYYY-MM-DD format. If set, `end_date` is also required. This must be the first day of a month and must not be in the future.
8068
+ description: >-
8069
+ Optional. Same format and constraints as `start_month` on
8070
+ [GET /balance_history](#tag/balance-history/GET/balance_history).
7164
8071
  required: false
7165
8072
  schema:
7166
8073
  type: string
7167
- format: date
7168
- - name: end_date
8074
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
8075
+ - name: end_month
7169
8076
  in: query
7170
- description: Optional end date for the requested history range in YYYY-MM-DD format. If set, `start_date` is also required. This must be the first day of a month.
8077
+ description: >-
8078
+ Optional. Same format and constraints as `end_month` on
8079
+ [GET /balance_history](#tag/balance-history/GET/balance_history).
7171
8080
  required: false
7172
8081
  schema:
7173
8082
  type: string
7174
- format: date
8083
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
7175
8084
  responses:
7176
8085
  "200":
7177
- description: Historical balance entries for the synced crypto symbol stream
8086
+ description: Monthly balance history for the synced crypto symbol stream
7178
8087
  content:
7179
8088
  application/json:
7180
8089
  schema:
@@ -7186,8 +8095,9 @@ paths:
7186
8095
  crypto_synced_id: 33004
7187
8096
  symbol: btc
7188
8097
  balances:
7189
- - id: 401
7190
- date: "2026-02-01"
8098
+ - type: historical
8099
+ id: 401
8100
+ month: "2026-02"
7191
8101
  balance: "6231.2800"
7192
8102
  currency: usd
7193
8103
  to_base: 6231.28
@@ -7199,16 +8109,16 @@ paths:
7199
8109
  schema:
7200
8110
  $ref: "#/components/schemas/errorResponseObject"
7201
8111
  examples:
7202
- missing paired date:
8112
+ missing paired month:
7203
8113
  value:
7204
8114
  message: Request Validation Failure
7205
8115
  errors:
7206
- - errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
7207
- invalid range:
8116
+ - errMsg: "`start_month` and `end_month` must either both be provided or both be omitted."
8117
+ invalid month format:
7208
8118
  value:
7209
- message: Request Validation Failure
8119
+ message: Invalid Request Parameters
7210
8120
  errors:
7211
- - errMsg: "`start_date` must be before or equal to `end_date`."
8121
+ - errMsg: "Invalid value for parameter: 'start_month'. '2026-06-01' is not a valid month in YYYY-MM format."
7212
8122
  "401":
7213
8123
  $ref: "#/components/responses/unauthorizedToken"
7214
8124
  "404":
@@ -7236,28 +8146,14 @@ paths:
7236
8146
  tags:
7237
8147
  - balance_history
7238
8148
  summary: Upsert balance history for a synced crypto symbol
7239
- description: >-
7240
- Upsert one or more historical balance entries for a single synced crypto
7241
- symbol stream.<br><br>
7242
-
8149
+ description: |-
8150
+ Upsert one or more historical balance entries for a single synced crypto symbol stream.<br><br>
7243
8151
  The path identifies both the synced crypto account and the symbol being updated.<br><br>
7244
-
7245
- Submit one or more entries in the `balances` array. Each entry must specify
7246
- a `date` and `balance` value.<br><br>
7247
-
7248
- Balance history is monthly. Each entry's `date` must be the first day of
7249
- a month and must be in a past month.<br><br>
7250
-
7251
- The request body may include an optional `symbol` on each balance entry. If
7252
- provided, it must match the `symbol` path parameter. Omit `symbol` to use
7253
- the path value.<br><br>
7254
-
7255
- `currency` may be provided for any balance entry. If omitted, it defaults
7256
- to the user's primary currency for synced crypto balances.<br><br>
7257
-
8152
+ Submit one or more entries in the `balances` array. Each entry must specify a `month` (YYYY-MM) and `balance` value. `month` must be a past calendar month. The current month cannot be written through this endpoint.<br><br>
8153
+ The request body may include an optional `symbol` on each balance entry. If provided, it must match the `symbol` path parameter. Omit `symbol` to use the path value.<br><br>
8154
+ `currency` may be provided for any balance entry. If omitted, it defaults to the user's primary currency for synced crypto balances.<br><br>
7258
8155
  `crypto_balance` may be provided for synced crypto balances.<br><br>
7259
-
7260
- The response contains only the balance entries that were submitted in this request.
8156
+ The response contains only the `type: historical` balance entries that were submitted in this request.
7261
8157
  operationId: upsertBalanceHistoryForCryptoSynced
7262
8158
  parameters:
7263
8159
  - name: account_id
@@ -7285,44 +8181,49 @@ paths:
7285
8181
  synced crypto bulk upsert:
7286
8182
  value:
7287
8183
  balances:
7288
- - date: "2026-03-01"
8184
+ - month: "2026-03"
7289
8185
  balance: "6400.0000"
7290
8186
  crypto_balance: "0.100020003000400050"
7291
- - date: "2026-04-01"
8187
+ - month: "2026-04"
7292
8188
  balance: "6500.0000"
7293
8189
  crypto_balance: "0.100020003000400050"
7294
8190
  responses:
7295
8191
  "200":
7296
- description: Returns the modified balance entries only. Other historical
7297
- entries for the symbol stream are omitted from `balances`.
8192
+ description: >-
8193
+ Returns only the `type: historical` entries modified by this request.
8194
+ Other historical entries for the symbol stream are omitted from
8195
+ `balances`.
7298
8196
  content:
7299
8197
  application/json:
7300
8198
  schema:
7301
8199
  $ref: "#/components/schemas/balanceHistoryAccountObject"
7302
8200
  examples:
7303
8201
  synced crypto bulk upsert:
7304
- summary: Two upserted rows returned (not full symbol history)
8202
+ summary: Two upserted entries returned (not full symbol history)
7305
8203
  value:
7306
8204
  source:
7307
8205
  type: crypto_synced
7308
8206
  crypto_synced_id: 33004
7309
8207
  symbol: btc
7310
8208
  balances:
7311
- - id: 604
7312
- date: "2026-03-01"
8209
+ - type: historical
8210
+ id: 604
8211
+ month: "2026-03"
7313
8212
  balance: "6400.0000"
7314
8213
  currency: usd
7315
8214
  to_base: 6400
7316
8215
  crypto_balance: "0.100020003000400050"
7317
- - id: 605
7318
- date: "2026-04-01"
8216
+ - type: historical
8217
+ id: 605
8218
+ month: "2026-04"
7319
8219
  balance: "6500.0000"
7320
8220
  currency: usd
7321
8221
  to_base: 6500
7322
8222
  crypto_balance: "0.100020003000400050"
7323
8223
  "400":
7324
- description: Bad Request. The entire request is rejected if any row in
7325
- `balances` fails validation; no rows are updated.
8224
+ description: >-
8225
+ Bad Request. If any entry in `balances` fails validation, the entire
8226
+ request is rejected and no entries are updated.
7326
8227
  content:
7327
8228
  application/json:
7328
8229
  schema:
@@ -7338,17 +8239,22 @@ paths:
7338
8239
  message: Invalid Request Body
7339
8240
  errors:
7340
8241
  - errMsg: "Invalid value for property 'balances'. Array must contain at least 1 element(s)"
7341
- invalid date:
8242
+ invalid month format:
8243
+ value:
8244
+ message: Invalid Request Body
8245
+ errors:
8246
+ - errMsg: "Invalid value for property 'balances.0.month'. '2026-06-01' is not a valid month in YYYY-MM format."
8247
+ current month:
7342
8248
  value:
7343
8249
  message: Request Validation Failure
7344
8250
  errors:
7345
- - errMsg: "`date` must be the first day of a month."
8251
+ - errMsg: "`month` must not be the current month."
7346
8252
  request_balances_index: 0
7347
- future date:
8253
+ future month:
7348
8254
  value:
7349
8255
  message: Request Validation Failure
7350
8256
  errors:
7351
- - errMsg: "`date` must be in a past month."
8257
+ - errMsg: "`month` must not be in the future."
7352
8258
  request_balances_index: 1
7353
8259
  symbol mismatch:
7354
8260
  value:
@@ -7356,9 +8262,9 @@ paths:
7356
8262
  errors:
7357
8263
  - errMsg: "`symbol` in request body (doge) does not match the path symbol (eth)."
7358
8264
  request_balances_index: 0
7359
- invalid row in bulk request:
8265
+ invalid entry in bulk request:
7360
8266
  value:
7361
- message: Request Validation Failure
8267
+ message: Invalid Request Body
7362
8268
  errors:
7363
8269
  - errMsg: "`balance` must be a valid numeric string or number."
7364
8270
  request_balances_index: 1
@@ -7389,11 +8295,9 @@ paths:
7389
8295
  tags:
7390
8296
  - balance_history
7391
8297
  summary: Delete all balance history for a synced crypto symbol
7392
- description: >-
8298
+ description: |-
7393
8299
  Delete all historical balance entries for a single synced crypto symbol stream.<br><br>
7394
-
7395
- The path identifies both the synced crypto account and the symbol whose
7396
- history should be deleted.
8300
+ The path identifies both the synced crypto account and the symbol whose history should be deleted.
7397
8301
  operationId: deleteBalanceHistoryForCryptoSynced
7398
8302
  parameters:
7399
8303
  - name: account_id
@@ -7435,14 +8339,14 @@ paths:
7435
8339
  tags:
7436
8340
  - balance_history
7437
8341
  summary: Delete a balance history entry
7438
- description: >-
7439
- Delete a single monthly balance history entry by its id.
8342
+ description: |-
8343
+ Delete a single stored (`type: historical`) monthly balance history entry by its id. Ephemeral `current` entries cannot be deleted this way.
7440
8344
  operationId: deleteBalanceHistoryEntry
7441
8345
  parameters:
7442
8346
  - name: id
7443
8347
  in: path
7444
8348
  required: true
7445
- description: Balance history row identifier to delete.
8349
+ description: Historical balance entry identifier to delete.
7446
8350
  schema:
7447
8351
  type: integer
7448
8352
  format: int32
@@ -7456,7 +8360,7 @@ paths:
7456
8360
  schema:
7457
8361
  $ref: "#/components/schemas/errorResponseObject"
7458
8362
  example:
7459
- message: Request Validation Failure
8363
+ message: Invalid Path Parameters
7460
8364
  errors:
7461
8365
  - errMsg: "Invalid value type for path parameter: 'id'. Expected 'number', received 'string'."
7462
8366
  "401":
@@ -7480,12 +8384,9 @@ paths:
7480
8384
  tags:
7481
8385
  - balance_history
7482
8386
  summary: Update details for a deleted account
7483
- description: >-
8387
+ description: |-
7484
8388
  Update archived metadata for a deleted balance history source.<br><br>
7485
-
7486
- Pass the `deleted` source id returned on `source.deleted_account_id`.
7487
- This endpoint updates the stored deleted-source metadata used for all
7488
- historical entries associated with that deleted source.
8389
+ Pass the `deleted_account_id` from a `source.type: deleted` entry. The update applies to all historical entries associated with that deleted source.
7489
8390
  operationId: updateBalanceHistoryDetails
7490
8391
  parameters:
7491
8392
  - name: account_id
@@ -8559,19 +9460,19 @@ paths:
8559
9460
  description: Sets the maximum number of transactions to return. If
8560
9461
  more match the filter criteria, the response will include a
8561
9462
  `has_more` attribute set to `true`. See
8562
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
9463
+ [Pagination](https://lunchmoney.dev/v2/pagination)
8563
9464
  - name: offset
8564
9465
  in: query
8565
9466
  schema:
8566
9467
  type: integer
8567
9468
  description: Sets the offset for the records returned. This is
8568
9469
  typically set automatically in the header. See
8569
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
9470
+ [Pagination](https://lunchmoney.dev/v2/pagination)
8570
9471
  responses:
8571
9472
  "200":
8572
9473
  description: Returns an array of transactions. <br><br>The `has_more`
8573
9474
  property is set to `true` if more transactions are available. See
8574
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
9475
+ [Pagination](https://lunchmoney.dev/v2/pagination)
8575
9476
  content:
8576
9477
  application/json:
8577
9478
  schema:
@@ -10795,9 +11696,8 @@ paths:
10795
11696
  - transactions (files)
10796
11697
  summary: Attach a file to a transaction
10797
11698
  operationId: attachFileToTransaction
10798
- description: >-
10799
- Attaches a file to a transaction. The file must be less than 10MB in size.<br><br>
10800
- The file will be attached to the transaction and can be downloaded from the link returned by a `GET /transactions/attachments/{file_id}` request.
11699
+ description: |-
11700
+ Attaches a file to a transaction. The file must be less than 10MB in size.<br><br> The file will be attached to the transaction and can be downloaded from the link returned by a `GET /transactions/attachments/{file_id}` request.
10801
11701
  parameters:
10802
11702
  - name: transaction_id
10803
11703
  in: path
@@ -10880,8 +11780,8 @@ paths:
10880
11780
  /transactions/attachments/{file_id}:
10881
11781
  get:
10882
11782
  summary: Get a url to download a file attachment
10883
- description: Returns a signed url that can be used to download the file
10884
- attachment.
11783
+ description: |-
11784
+ Returns a signed url that can be used to download the file attachment.
10885
11785
  operationId: getTransactionAttachmentUrl
10886
11786
  tags:
10887
11787
  - transactions (files)
@@ -11618,7 +12518,9 @@ paths:
11618
12518
  description: |-
11619
12519
  Returns budget period and display settings for the budget
11620
12520
  associated with this API token.<p> These control how budget **periods** are calculated
11621
- (granularity, anchor date, rollover, and related options).
12521
+ (granularity, anchor date, rollover, and related options). For general
12522
+ budget preferences such as currency and locale, see
12523
+ [/me/account/settings](#tag/me/GET/me/account/settings).
11622
12524
  operationId: getBudgetSettings
11623
12525
  responses:
11624
12526
  "200":
@@ -11774,4 +12676,3 @@ paths:
11774
12676
 
11775
12677
  security:
11776
12678
  - bearerSecurity: []
11777
- - cookieAuth: []