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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,37 +2,40 @@ openapi: 3.0.2
2
2
  info:
3
3
  title: Lunch Money API - v2
4
4
  description: |-
5
- Welcome to the Lunch Money v2 API reference. This is the **v2.11.0** spec. It includes previews of the proposed `/crypto` and `/balance_history` endpoints. Only the mock service works with these endpoints.<br><br>
6
- The most recent stable version of the API is v2.9.4 and is available at:
7
- `https://api.lunchmoney.dev/v2`
8
-
9
- ------------------------------------------------------------------------------------------------
10
-
11
5
  ### Introduction
12
6
 
7
+ Welcome to the Lunch Money v2 API reference. This is the **v2.11.0** spec.
8
+
13
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).
14
10
 
15
- <span class="red-text"><strong>The v2 API is in open alpha and is still subject to change. Use the mock server or a test budget when getting started.</strong></span>
11
+
12
+ **Try it from these docs**
16
13
 
17
- **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**
18
20
 
19
- Explore the API without an access token or risk to real data. Select **"Static Mock v2 Lunch Money API Server"** from the Server dropdown, then set your Bearer token to any string with 11 or more characters.
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
+
20
24
 
21
25
  **Client Libraries & SDKs**
22
26
 
23
- An official TypeScript SDK is available on [NPM](https://www.npmjs.com/package/@lunch-money/v2-api-spec) and [GitHub](https://github.com/lunch-money/lunch-money-js-v2). For Python or other languages, see [lunchmoney-clients](https://github.com/juftin/lunchmoney-clients) or generate a client from this OpenAPI spec.
27
+ An official TypeScript SDK is available on [NPM](https://www.npmjs.com/package/@lunch-money/v2-api-spec) and [GitHub](https://github.com/lunch-money/lunch-money-js-v2). For Python or other languages, see [lunchmoney-clients](https://github.com/juftin/lunchmoney-clients) or generate a client from [this OpenAPI spec](/v2/openapi).
24
28
 
25
29
  **Migrating from v1**
26
30
 
27
- 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.
28
32
 
29
33
  **Useful links**
30
- - [Developer Portal](https://alpha.lunchmoney.dev/v2/introduction)
31
- - [Getting Started Guide](https://alpha.lunchmoney.dev/v2/getting-started)
32
- - [v2 API Overview](https://alpha.lunchmoney.dev/v2/overview)
33
- - [Version History](https://alpha.lunchmoney.dev/v2/version-history)
34
- - [Migration Guide](https://alpha.lunchmoney.dev/v2/migration-guide)
35
- - [Rate Limits](https://alpha.lunchmoney.dev/v2/rate-limits)
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)
36
39
  termsOfService: https://lunchmoney.dev/#current-status
37
40
  contact:
38
41
  email: devsupport@lunchmoney.app
@@ -43,10 +46,9 @@ info:
43
46
 
44
47
  servers:
45
48
  - url: https://api.lunchmoney.dev/v2
46
- description: v2 Lunch Money API Server - changes will affect real data!
47
- # - url: https://mock.lunchmoney.dev/v2
48
- - url: https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/
49
- 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
50
52
 
51
53
  tags:
52
54
  - name: me
@@ -77,7 +79,11 @@ tags:
77
79
  description: Learn more about crypto assets
78
80
  url: https://support.lunchmoney.app/setup/crypto
79
81
  - name: balance_history
80
- 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.
82
+ description: >-
83
+ View and update monthly account balances used by the
84
+ [Net Worth](https://my.lunchmoney.app/net-worth) views in the Lunch Money app.
85
+ History is monthly. The current month may be calculated on demand when
86
+ requested.
81
87
  - name: recurring_items
82
88
  description: Work with recurring items
83
89
  externalDocs:
@@ -113,8 +119,10 @@ tags:
113
119
  description: Learn more about transactions
114
120
  url: https://support.lunchmoney.app/finances/transactions
115
121
  - name: budgets
116
- description: View settings and modify budget amounts.<p> Use the
117
- [/summary](#tag/summary) endpoint to view the budget details performance.
122
+ description: View settings and modify budget amounts.<p> Use
123
+ [/budgets/settings](#tag/budgets/GET/budgets/settings) to view budget
124
+ period settings.<p> Use the [/summary](#tag/summary) endpoint to view
125
+ the budget details performance.
118
126
  externalDocs:
119
127
  description: Learn more about budgets
120
128
  url: https://support.lunchmoney.app/finances/budgets
@@ -142,12 +150,12 @@ components:
142
150
  account_id:
143
151
  type: integer
144
152
  format: int64
145
- description: Unique ID for the linked budgeting account
153
+ description: Unique ID for the current budgeting account
146
154
  budget_name:
147
155
  type: string
148
- description: Name of the linked budgeting account
156
+ description: Name of the current budgeting account
149
157
  primary_currency:
150
- description: Primary currency set in the user's settings
158
+ description: Primary currency for the current budgeting account
151
159
  allOf:
152
160
  - $ref: "#/components/schemas/currencyEnum"
153
161
  api_key_label:
@@ -983,16 +991,19 @@ components:
983
991
  example: Cold Wallet BTC
984
992
  display_name:
985
993
  type: string
994
+ nullable: true
986
995
  minLength: 1
987
996
  maxLength: 45
988
- description: Optional display name for the manual crypto asset. If
989
- omitted, clients may derive one from `institution_name` + `name`.
997
+ description: Display name for the manual crypto asset. If omitted or
998
+ `null`, clients may derive one from `institution_name` + `name`.
990
999
  example: Cold Storage
991
1000
  institution_name:
992
1001
  type: string
1002
+ nullable: true
993
1003
  minLength: 1
994
1004
  maxLength: 50
995
- description: Optional institution or wallet provider display name
1005
+ description: Institution or wallet provider display name. If omitted
1006
+ or `null`, no institution name is set.
996
1007
  example: Ledger
997
1008
  balance:
998
1009
  oneOf:
@@ -1248,15 +1259,19 @@ components:
1248
1259
  example: My Savings Account
1249
1260
  institution_name:
1250
1261
  type: string
1262
+ nullable: true
1251
1263
  example: Bank of the West
1252
- description: Name of institution holding the manual account
1264
+ description: Name of the institution holding the manual account. If
1265
+ omitted or `null`, no institution name is set.
1253
1266
  minLength: 1
1254
1267
  maxLength: 50
1255
1268
  display_name:
1256
1269
  type: string
1257
- description: Display name of the manual account as set by user or
1258
- derived from the `institution_name` and `name` if not explicitly
1259
- set.<br> This must be unique for the budgeting account.
1270
+ nullable: true
1271
+ description: Display name of the manual account. If omitted or
1272
+ `null`, it is derived from `institution_name` and `name`. An
1273
+ explicitly set display name must be unique for the budgeting
1274
+ account.
1260
1275
  example: Savings
1261
1276
  type:
1262
1277
  description: The type of manual account
@@ -1264,8 +1279,10 @@ components:
1264
1279
  - $ref: "#/components/schemas/accountTypeEnum"
1265
1280
  subtype:
1266
1281
  type: string
1267
- description: An optional manual account subtype. Examples include<br>
1268
- - retirement - checking - savings - prepaid credit card
1282
+ nullable: true
1283
+ description: Manual account subtype. If omitted or `null`, no subtype
1284
+ is set. Examples include retirement, checking, savings, and prepaid
1285
+ credit card.
1269
1286
  minLength: 1
1270
1287
  maxLength: 100
1271
1288
  example: prepaid credit card
@@ -1639,7 +1656,7 @@ components:
1639
1656
  type:
1640
1657
  type: string
1641
1658
  enum: [manual]
1642
- description: Identifies this entry as belonging to a manually-managed account.
1659
+ description: Identifies this entry as belonging to a manual account.
1643
1660
  manual_account_id:
1644
1661
  type: integer
1645
1662
  format: int32
@@ -1668,14 +1685,14 @@ components:
1668
1685
 
1669
1686
  balanceHistorySourceCryptoManual:
1670
1687
  type: object
1671
- description: Source information for a manually-tracked cryptocurrency balance history entry.
1688
+ description: Source information for a manual cryptocurrency balance history entry.
1672
1689
  additionalProperties: false
1673
1690
  x-internal: true
1674
1691
  properties:
1675
1692
  type:
1676
1693
  type: string
1677
1694
  enum: [crypto_manual]
1678
- description: Identifies this entry as belonging to a manually-tracked crypto account.
1695
+ description: Identifies this entry as belonging to a manual crypto account.
1679
1696
  crypto_manual_id:
1680
1697
  type: integer
1681
1698
  format: int32
@@ -1718,10 +1735,11 @@ components:
1718
1735
  type: object
1719
1736
  x-internal: true
1720
1737
  description: >
1721
- Source information for a balance history entry whose account has since been deleted.
1738
+ Source information for balance history whose account has since been deleted.
1722
1739
  Historical balances are preserved when a user chooses to keep history on account deletion.
1723
1740
  This object contains details that can be used to display the deleted account in the UI.
1724
- The `deleted_account_id` can be passed to `PUT /v2/balance_history/deleted/{account_id}/details`
1741
+ The `deleted_account_id` can be passed to
1742
+ [PUT /balance_history/deleted/{account_id}/details](#tag/balance-history/PUT/balance_history/deleted/{account_id}/details)
1725
1743
  to update the archived source metadata.
1726
1744
  additionalProperties: false
1727
1745
  properties:
@@ -1752,11 +1770,11 @@ components:
1752
1770
  subtype:
1753
1771
  type: string
1754
1772
  nullable: true
1755
- description: Archived `subtype`` of the deleted account source
1773
+ description: Archived `subtype` of the deleted account source
1756
1774
  mask:
1757
1775
  type: string
1758
1776
  nullable: true
1759
- description: Archived account `mask` for a deleted plaid account source
1777
+ description: Archived account `mask` for a deleted Plaid account source
1760
1778
  symbol:
1761
1779
  type: string
1762
1780
  nullable: true
@@ -1778,12 +1796,14 @@ components:
1778
1796
  type: object
1779
1797
  title: balance history for an account object
1780
1798
  additionalProperties: false
1781
- description: Historical balance entries grouped under a single account source.
1799
+ description: Monthly balance entries grouped under a single account source.
1782
1800
  properties:
1783
1801
  source:
1784
1802
  description: >
1785
- Identifies the account this balance entry belongs to. The shape varies by
1786
- `source.type`. Use `source.type` to determine which account id field is present.
1803
+ Identifies the account these balance entries belong to. The shape varies by
1804
+ `source.type`. Each source type exposes a type-specific account id field
1805
+ (`manual_account_id`, `plaid_account_id`, `crypto_manual_id`,
1806
+ `crypto_synced_id`, or `deleted_account_id`).
1787
1807
  oneOf:
1788
1808
  - $ref: "#/components/schemas/balanceHistorySourceManual"
1789
1809
  - $ref: "#/components/schemas/balanceHistorySourcePlaid"
@@ -1801,38 +1821,48 @@ components:
1801
1821
  balances:
1802
1822
  type: array
1803
1823
  description: >
1804
- Monthly balance history entries for the source account. On GET responses,
1805
- this includes all entries in the requested range. On PUT upsert responses,
1806
- this includes only the entries modified by that request.
1824
+ Monthly balance entries for this account source. A `historical` entry is
1825
+ a stored snapshot of a past month and includes an `id`. A `current` entry
1826
+ is an ephemeral snapshot based on the account's current balances and has
1827
+ no balance-entry `id`. On PUT upsert responses, this array includes only
1828
+ the `type: historical` entries modified by that request.
1807
1829
  items:
1808
- $ref: "#/components/schemas/balanceHistoryObject"
1830
+ $ref: "#/components/schemas/balanceHistoryEntry"
1809
1831
  required:
1810
1832
  - source
1811
1833
  - balances
1812
1834
 
1813
- balanceHistoryObject:
1835
+ historicalBalanceHistoryEntry:
1814
1836
  type: object
1815
- title: balance history entry object
1837
+ title: historical balance history entry
1816
1838
  additionalProperties: false
1817
1839
  x-internal: true
1818
- description: A historical balance entry for a single account on a single date.
1840
+ description: >
1841
+ A stored monthly balance for a past month. The `id` may be used with
1842
+ balance history entry endpoints. The balance represents the account
1843
+ balance at or around the end of `month`.
1819
1844
  properties:
1845
+ type:
1846
+ type: string
1847
+ enum: [historical]
1848
+ description: Identifies this entry as a stored snapshot of a past month.
1820
1849
  id:
1821
1850
  type: integer
1822
1851
  format: int32
1823
- description: Unique identifier of this historical balance entry.
1824
- date:
1852
+ description: Unique identifier for this historical balance entry.
1853
+ month:
1825
1854
  type: string
1826
- format: date
1827
- description: Date of this historical balance entry in YYYY-MM-DD format. This is always the first day of a month.
1855
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
1856
+ description: Calendar month for this entry in YYYY-MM format.
1857
+ example: "2026-06"
1828
1858
  balance:
1829
1859
  type: string
1830
1860
  pattern: ^-?\d+(\.\d{1,4})?$
1831
- 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.
1861
+ 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.
1832
1862
  currency:
1833
1863
  allOf:
1834
1864
  - $ref: "#/components/schemas/currencyEnum"
1835
- description: Currency of the stored `balance`. For crypto entries this is the user's primary currency.
1865
+ description: Currency of `balance`. For crypto entries this is the user's primary currency.
1836
1866
  to_base:
1837
1867
  type: number
1838
1868
  format: double
@@ -1841,19 +1871,82 @@ components:
1841
1871
  type: string
1842
1872
  nullable: true
1843
1873
  pattern: ^-?\d+(\.\d{1,18})?$
1844
- description: Crypto quantity stored for this balance entry, when available. This may be present for crypto or deleted-account entries and is `null` otherwise.
1874
+ description: Crypto quantity for this balance entry, when available. This may be present for crypto or deleted-account entries and is `null` otherwise.
1845
1875
  required:
1876
+ - type
1846
1877
  - id
1847
- - date
1878
+ - month
1879
+ - balance
1880
+ - currency
1881
+ - to_base
1882
+ - crypto_balance
1883
+
1884
+ currentBalanceHistoryEntry:
1885
+ type: object
1886
+ title: current balance history entry
1887
+ additionalProperties: false
1888
+ x-internal: true
1889
+ description: >
1890
+ An ephemeral snapshot based on the account's current balances. It may
1891
+ change between requests.
1892
+ properties:
1893
+ type:
1894
+ type: string
1895
+ enum: [current]
1896
+ description: Identifies this entry as an ephemeral current-month snapshot.
1897
+ month:
1898
+ type: string
1899
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
1900
+ description: Calendar month for this entry in YYYY-MM format. For current entries this is the current month.
1901
+ example: "2026-07"
1902
+ balance:
1903
+ type: string
1904
+ pattern: ^-?\d+(\.\d{1,4})?$
1905
+ 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.
1906
+ currency:
1907
+ allOf:
1908
+ - $ref: "#/components/schemas/currencyEnum"
1909
+ description: Currency of the calculated `balance`. For crypto entries this is the user's primary currency.
1910
+ to_base:
1911
+ type: number
1912
+ format: double
1913
+ 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`.
1914
+ crypto_balance:
1915
+ type: string
1916
+ nullable: true
1917
+ pattern: ^-?\d+(\.\d{1,18})?$
1918
+ description: Crypto quantity for this calculated entry, when available. This may be present for crypto entries and is `null` otherwise.
1919
+ required:
1920
+ - type
1921
+ - month
1848
1922
  - balance
1849
1923
  - currency
1850
1924
  - to_base
1851
1925
  - crypto_balance
1852
1926
 
1927
+ balanceHistoryEntry:
1928
+ title: balance history entry
1929
+ x-internal: true
1930
+ description: >
1931
+ A monthly balance history entry. Discriminated by `type`. `historical`
1932
+ entries are stored snapshots of past months with an `id`. `current`
1933
+ entries are ephemeral snapshots with no balance-entry `id`.
1934
+ oneOf:
1935
+ - $ref: "#/components/schemas/historicalBalanceHistoryEntry"
1936
+ - $ref: "#/components/schemas/currentBalanceHistoryEntry"
1937
+ discriminator:
1938
+ propertyName: type
1939
+ mapping:
1940
+ historical: "#/components/schemas/historicalBalanceHistoryEntry"
1941
+ current: "#/components/schemas/currentBalanceHistoryEntry"
1942
+
1853
1943
  balanceHistoryListResponseObject:
1854
1944
  type: object
1855
1945
  additionalProperties: false
1856
1946
  x-internal: true
1947
+ description: >
1948
+ List response for balance history GET endpoints. Entries are grouped by
1949
+ account source under `balance_history`.
1857
1950
  properties:
1858
1951
  balance_history:
1859
1952
  type: array
@@ -1866,31 +1959,39 @@ components:
1866
1959
  type: object
1867
1960
  x-internal: true
1868
1961
  additionalProperties: false
1962
+ description: >
1963
+ A single monthly balance entry to upsert. Request bodies use this shape.
1964
+ Responses return `type: historical` entries instead.
1869
1965
  properties:
1870
1966
  id:
1871
1967
  type: integer
1872
1968
  format: int32
1873
1969
  description: System-defined balance history entry id. Ignored if set.
1874
1970
  x-updatable: false
1875
- date:
1971
+ month:
1876
1972
  type: string
1877
- format: date
1878
- 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.
1973
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
1974
+ description: >
1975
+ Calendar month to upsert, in YYYY-MM format. Must be a past month.
1976
+ The current month cannot be written through PUT endpoints.
1977
+ example: "2026-06"
1879
1978
  balance:
1880
1979
  oneOf:
1881
1980
  - type: number
1882
1981
  format: double
1883
1982
  - type: string
1884
1983
  pattern: ^-?\d+(\.\d{1,4})?$
1885
- 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.
1984
+ 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.
1886
1985
  symbol:
1887
1986
  type: string
1888
1987
  nullable: true
1889
1988
  minLength: 1
1890
1989
  maxLength: 25
1891
- description: Optional for crypto balances, but if set it must match the account's symbol.
1892
- Tolerated for deleted-account balances. Do not provide this for manual or Plaid balances.
1893
- If provided when using the synced crypto path-based endpoint, this must match the symbol in the path.
1990
+ description: >
1991
+ Optional for crypto balances. If set, it must match the account's
1992
+ symbol. Tolerated for deleted-account balances. Do not provide this
1993
+ for manual or Plaid balances. On the synced crypto path endpoint, if
1994
+ provided it must match the `symbol` path parameter.
1894
1995
  x-updatable: true
1895
1996
  crypto_balance:
1896
1997
  type: string
@@ -1906,10 +2007,10 @@ components:
1906
2007
  to_base:
1907
2008
  type: number
1908
2009
  format: double
1909
- description: System-defined historical balance converted to the user's primary currency. Ignored if set. Use `balance` to update the stored historical balance.
2010
+ description: System-defined historical balance converted to the user's primary currency. Ignored if set. Use `balance` to update the historical balance.
1910
2011
  x-updatable: false
1911
2012
  required:
1912
- - date
2013
+ - month
1913
2014
  - balance
1914
2015
 
1915
2016
  upsertBalanceHistoryRequestObject:
@@ -1920,7 +2021,11 @@ components:
1920
2021
  balances:
1921
2022
  type: array
1922
2023
  minItems: 1
1923
- description: One or more monthly balance history entries to upsert
2024
+ description: >
2025
+ One or more monthly balance history entries to upsert. Each entry uses
2026
+ `month` (YYYY-MM) and `balance`. Do not include response-only fields such
2027
+ as `type`. PUT responses return only the `type: historical` entries
2028
+ modified by the request.
1924
2029
  items:
1925
2030
  $ref: "#/components/schemas/balanceHistoryUpdateItemObject"
1926
2031
  required:
@@ -1935,51 +2040,58 @@ components:
1935
2040
  name:
1936
2041
  type: string
1937
2042
  nullable: true
1938
- description: New archived account name for the deleted account source.
2043
+ description: New archived account name for the deleted account source
1939
2044
  institution_name:
1940
2045
  type: string
1941
2046
  nullable: true
1942
- description: New archived institution name for the deleted account source.
2047
+ description: New archived institution name for the deleted account source
1943
2048
  display_name:
1944
2049
  type: string
1945
2050
  nullable: true
1946
- description: New display name for the deleted account source.
2051
+ description: New display name for the deleted account source
1947
2052
  account_type:
1948
2053
  type: string
1949
2054
  nullable: true
1950
- description: New archived account type for the deleted account source.
2055
+ description: New archived account type for the deleted account source
1951
2056
  subtype:
1952
2057
  type: string
1953
2058
  nullable: true
1954
- description: New archived subtype for the deleted account source.
2059
+ description: New archived subtype for the deleted account source
1955
2060
  mask:
1956
2061
  type: string
1957
2062
  nullable: true
1958
- description: New archived account mask for the deleted account source.
2063
+ description: New archived account mask for the deleted account source
1959
2064
 
1960
2065
  updateBalanceHistoryDetailsResponseObject:
1961
2066
  type: object
1962
2067
  x-internal: true
1963
2068
  additionalProperties: false
2069
+ description: Updated archived metadata for a deleted balance history source
1964
2070
  properties:
1965
2071
  name:
1966
2072
  type: string
1967
2073
  nullable: true
2074
+ description: Archived account name for the deleted account source
1968
2075
  institution_name:
1969
2076
  type: string
1970
2077
  nullable: true
2078
+ description: Archived institution name for the deleted account source
1971
2079
  display_name:
1972
2080
  type: string
1973
2081
  nullable: true
2082
+ description: Archived display name for the deleted account source
1974
2083
  account_type:
1975
2084
  type: string
1976
2085
  nullable: true
2086
+ description: Archived account type for the deleted account source
1977
2087
  subtype:
1978
2088
  type: string
1979
2089
  nullable: true
2090
+ description: Archived subtype for the deleted account source
1980
2091
  mask:
1981
2092
  type: string
1982
2093
  nullable: true
2094
+ description: Archived account mask for the deleted account source
1983
2095
  required:
1984
2096
  - name
1985
2097
  - institution_name
@@ -2935,7 +3047,7 @@ components:
2935
3047
  currency:
2936
3048
  description: Three-letter lowercase currency code of the transaction
2937
3049
  in ISO 4217 format. Must match one of the [supported
2938
- currencies](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/currencies). If not set
3050
+ currencies](https://lunchmoney.dev/v2/currencies). If not set
2939
3051
  defaults to the user account's primary currency.
2940
3052
  allOf:
2941
3053
  - $ref: "#/components/schemas/currencyEnum"
@@ -3080,6 +3192,7 @@ components:
3080
3192
  description: |
3081
3193
  The new payee for the transaction.
3082
3194
  minLength: 0
3195
+ x-updatable: true
3083
3196
  original_name:
3084
3197
  type: string
3085
3198
  nullable: true
@@ -3291,9 +3404,10 @@ components:
3291
3404
  category_id:
3292
3405
  type: integer
3293
3406
  format: int32
3294
- description: Unique identifier for associated category_id. Category
3295
- must already exist for the account. Will inherit category from the
3296
- parent if not defined.
3407
+ nullable: true
3408
+ description: Category ID for the child transaction. The category must
3409
+ already exist for the account. If omitted, the child inherits the
3410
+ parent category. If `null`, the child has no category.
3297
3411
  tag_ids:
3298
3412
  type: array
3299
3413
  description: The IDs of any tags to apply to this split child
@@ -3303,7 +3417,10 @@ components:
3303
3417
  format: int32
3304
3418
  notes:
3305
3419
  type: string
3306
- description: Will inherit notes from parent if not defined.
3420
+ nullable: true
3421
+ description: Notes for the child transaction. If omitted, the child
3422
+ inherits the parent notes. If `null` or an empty string, the child
3423
+ has no notes.
3307
3424
  required:
3308
3425
  - amount
3309
3426
 
@@ -3612,10 +3729,11 @@ components:
3612
3729
 
3613
3730
  # Response body for GET /budgets/settings (200)
3614
3731
  budgetSettingsResponseObject:
3615
- x-internal: true
3616
3732
  type: object
3733
+ title: budget settings object
3617
3734
  additionalProperties: false
3618
- description: Budget period and display settings
3735
+ description: Budget period and display settings for the current budgeting
3736
+ account.
3619
3737
  properties:
3620
3738
  budget_period_granularity:
3621
3739
  type: string
@@ -3627,8 +3745,8 @@ components:
3627
3745
  - twice a month
3628
3746
  description: Budget period granularity
3629
3747
  budget_period_quantity:
3630
- type: number
3631
- format: double
3748
+ type: integer
3749
+ format: int32
3632
3750
  description: The number of `granularity` units that make up a single
3633
3751
  budgeting period.
3634
3752
  budget_period_anchor_date:
@@ -4445,22 +4563,10 @@ components:
4445
4563
  securitySchemes:
4446
4564
  bearerSecurity:
4447
4565
  type: http
4448
- # TODO Make this shorter?
4449
- # description: The Lunch Money API uses API keys to authenticate requests. To use
4450
- # the v1 API you can view and manage your API keys on the [developers page
4451
- # in the Lunch Money app](https://my.lunchmoney.app/developers). <p> To
4452
- # interact with the Static Mock Server simply enter an API key of 11
4453
- # characters or more. <p> To interact with the v2 service implemented on
4454
- # top of the v1 API paste in a real API token associated with a Lunch
4455
- # Money Budget.
4456
- description: To interact with the Static Mock Server simply enter an API
4457
- key of 11 characters or more.
4566
+ description: >-
4567
+ Required for the LIVE server. Optional for MOCK.
4458
4568
  scheme: bearer
4459
4569
  bearerFormat: JWT
4460
- cookieAuth:
4461
- type: apiKey
4462
- in: cookie
4463
- name: _lm_access_token
4464
4570
 
4465
4571
  paths:
4466
4572
  /me:
@@ -5740,12 +5846,9 @@ paths:
5740
5846
  tags:
5741
5847
  - crypto-manual
5742
5848
  summary: Get all supported cryptocurrencies
5743
- description: >
5849
+ description: |-
5744
5850
  Retrieve the list of cryptocurrencies currently supported for manual tracking.<p>
5745
-
5746
- When creating a new manual crypto balance via `POST /crypto/manual`, the
5747
- `symbol` you specify must match the `symbol` of one of the entries
5748
- returned by this endpoint.
5851
+ 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.
5749
5852
  operationId: getAllCryptocurrencies
5750
5853
  responses:
5751
5854
  "200":
@@ -5783,16 +5886,9 @@ paths:
5783
5886
  - crypto-manual
5784
5887
  summary: Add a new supported cryptocurrency
5785
5888
  operationId: createCryptocurrency
5786
- description: >-
5889
+ description: |-
5787
5890
  Adds a new cryptocurrency to the supported manual-crypto list.<br><br>
5788
-
5789
- Lunch Money uses [CoinGecko](https://www.coingecko.com/us/coins/ethereum)
5790
- to convert crypto balances to the user's primary currency. Users add a
5791
- new supported cryptocurrency by submitting a CoinGecko coin-page URL.
5792
- The server validates the URL, extracts the id from `/coins/{id}`,
5793
- checks for an existing supported `coingecko_id`, validates the id
5794
- against CoinGecko, then confirms the resolved symbol is not already
5795
- supported before creating the new entry.
5891
+ 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.
5796
5892
  requestBody:
5797
5893
  required: true
5798
5894
  content:
@@ -5871,8 +5967,8 @@ paths:
5871
5967
  tags:
5872
5968
  - crypto-manual
5873
5969
  summary: Get all manual crypto balances
5874
- description: Retrieve all manually managed crypto balances associated with
5875
- the user's account.
5970
+ description: |-
5971
+ Retrieve all manually managed crypto balances associated with the user's account.
5876
5972
  operationId: getAllCryptoManual
5877
5973
  responses:
5878
5974
  "200":
@@ -5906,11 +6002,9 @@ paths:
5906
6002
  tags:
5907
6003
  - crypto-manual
5908
6004
  summary: Create a manual crypto balance
5909
- description: >-
6005
+ description: |-
5910
6006
  Create a manually managed crypto asset.<br><br>
5911
-
5912
- If `display_name` is `null`, clients may derive one from
5913
- `institution_name` + `name`.
6007
+ If `display_name` is `null`, clients may derive one from `institution_name` + `name`.
5914
6008
  operationId: createCryptoManual
5915
6009
  requestBody:
5916
6010
  required: true
@@ -5995,7 +6089,8 @@ paths:
5995
6089
  tags:
5996
6090
  - crypto-manual
5997
6091
  summary: Get a single manual crypto balance
5998
- description: Retrieve a single manually managed crypto balance by ID.
6092
+ description: |-
6093
+ Retrieve a single manually managed crypto balance by ID.
5999
6094
  operationId: getCryptoManualById
6000
6095
  parameters:
6001
6096
  - name: id
@@ -6063,11 +6158,9 @@ paths:
6063
6158
  tags:
6064
6159
  - crypto-manual
6065
6160
  summary: Update a manual crypto balance
6066
- description: >-
6161
+ description: |-
6067
6162
  Modify a manually managed crypto balance.<br><br>
6068
-
6069
- You may submit the response from `GET /crypto/manual/{id}` as the request body. System-defined properties
6070
- are accepted according to the `x-updatable` metadata in the update schema.
6163
+ 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.
6071
6164
  operationId: updateCryptoManual
6072
6165
  parameters:
6073
6166
  - name: id
@@ -6164,10 +6257,8 @@ paths:
6164
6257
  tags:
6165
6258
  - crypto-manual
6166
6259
  summary: Delete a manual crypto balance
6167
- description: Delete a single manually managed crypto asset by ID.<p> If
6168
- this crypto asset has a balance history, and you do not explicitly set
6169
- the query parameter`keep_history`, a 422 response will be returned
6170
- requesting you to explicitly set `keep_history` to `true` or `false`.
6260
+ description: |-
6261
+ 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`.
6171
6262
  operationId: deleteCryptoManual
6172
6263
  parameters:
6173
6264
  - name: id
@@ -6232,8 +6323,8 @@ paths:
6232
6323
  tags:
6233
6324
  - crypto-synced
6234
6325
  summary: Get all synced crypto accounts
6235
- description: Retrieves all synced crypto accounts
6236
- associated with the user's account.
6326
+ description: |-
6327
+ Retrieves all synced crypto accounts associated with the user's account.
6237
6328
  operationId: getAllCryptoSynced
6238
6329
  responses:
6239
6330
  "200":
@@ -6295,8 +6386,8 @@ paths:
6295
6386
  tags:
6296
6387
  - crypto-synced
6297
6388
  summary: Get a single synced crypto account
6298
- description: Retrieves the synced crypto account and all nested balances
6299
- for the specified synced crypto account ID.
6389
+ description: |-
6390
+ Retrieves the synced crypto account and all nested balances for the specified synced crypto account ID.
6300
6391
  operationId: getCryptoSyncedById
6301
6392
  parameters:
6302
6393
  - name: id
@@ -6376,8 +6467,8 @@ paths:
6376
6467
  tags:
6377
6468
  - crypto-synced
6378
6469
  summary: Get a synced crypto balance by symbol
6379
- description: Retrieves a single balance from the specified synced crypto
6380
- account using the crypto symbol.
6470
+ description: |-
6471
+ Retrieves a single balance from the specified synced crypto account using the crypto symbol.
6381
6472
  operationId: getCryptoSyncedBalanceBySymbol
6382
6473
  parameters:
6383
6474
  - name: id
@@ -6456,8 +6547,8 @@ paths:
6456
6547
  tags:
6457
6548
  - crypto-synced
6458
6549
  summary: Refresh balances for a synced crypto account
6459
- description: Trigger a balance refresh for the specified synced crypto
6460
- account. Returns the refreshed synced crypto account.
6550
+ description: |-
6551
+ Trigger a balance refresh for the specified synced crypto account. Returns the refreshed synced crypto account.
6461
6552
  operationId: refreshCryptoSynced
6462
6553
  parameters:
6463
6554
  - name: id
@@ -6526,51 +6617,55 @@ paths:
6526
6617
  tags:
6527
6618
  - balance_history
6528
6619
  summary: Get balance history
6529
- description: >-
6530
- Retrieve historical balance entries.<br><br>
6531
-
6532
- Balance history is monthly. When `start_date` and `end_date` are both provided,
6533
- they must be first-of-month dates. `start_date` must not be in the future,
6534
- while `end_date` may be in the future. If one of `start_date` or `end_date`
6535
- is provided, the other is required. If neither is provided, all available
6536
- balance history is returned.<br><br>
6537
-
6538
- The response groups entries by source account. Each item in
6539
- `balance_history` contains a `source` object plus a `balances` array
6540
- containing one balance entry per month in the requested range, or all
6541
- stored entries when no range is provided.<br><br>
6542
-
6543
- Historical entries for accounts that have been deleted may still
6544
- be returned. These entries use `source.type: deleted` and include
6545
- `deleted_account_id`, archived display fields, and account metadata on the
6546
- `source` object.
6620
+ description: |-
6621
+ Retrieve monthly balance history for all account sources.<br><br>
6622
+ 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>
6623
+ 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>
6624
+ 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>
6625
+ Each balance entry has a `type`:<br>
6626
+ - `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>
6627
+ - `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>
6628
+ &nbsp;&nbsp;&nbsp;&nbsp;- `manual`: `source.manual_account_id` with [GET /manual_accounts/{id}](#tag/manual-accounts/GET/manual_accounts/{id})<br>
6629
+ &nbsp;&nbsp;&nbsp;&nbsp;- `plaid`: `source.plaid_account_id` with [GET /plaid_accounts/{id}](#tag/plaid-accounts/GET/plaid_accounts/{id})<br>
6630
+ &nbsp;&nbsp;&nbsp;&nbsp;- `crypto_manual`: `source.crypto_manual_id` with [GET /crypto/manual/{id}](#tag/crypto-manual/GET/crypto/manual/{id})<br>
6631
+ &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})
6547
6632
  operationId: getBalanceHistory
6548
6633
  parameters:
6549
- - name: start_date
6634
+ - name: start_month
6550
6635
  in: query
6551
- 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.
6636
+ description: >-
6637
+ Optional start of the requested history range as a calendar month in
6638
+ YYYY-MM format (for example `2026-06`). If set, `end_month` is also
6639
+ required. The range is inclusive. `start_month` must not be in the
6640
+ future. A full date such as `2026-06-01` is invalid.
6552
6641
  required: false
6553
6642
  schema:
6554
6643
  type: string
6555
- format: date
6644
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
6556
6645
  examples:
6557
6646
  range start:
6558
- summary: Start date
6559
- value: "2026-01-01"
6560
- - name: end_date
6647
+ summary: Start month
6648
+ value: "2026-01"
6649
+ - name: end_month
6561
6650
  in: query
6562
- 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`.
6651
+ description: >-
6652
+ Optional end of the requested history range as a calendar month in
6653
+ YYYY-MM format (for example `2026-06`). If set, `start_month` is also
6654
+ required. The range is inclusive. `end_month` may not be earlier than
6655
+ `start_month` and must not be in the future. A full date such as
6656
+ `2026-06-01` is invalid. For a single month, set this to the same
6657
+ value as `start_month`.
6563
6658
  required: false
6564
6659
  schema:
6565
6660
  type: string
6566
- format: date
6661
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
6567
6662
  examples:
6568
6663
  range end:
6569
- summary: End date
6570
- value: "2026-03-01"
6664
+ summary: End month
6665
+ value: "2026-03"
6571
6666
  responses:
6572
6667
  "200":
6573
- description: Historical balance entries for the requested date range
6668
+ description: Monthly balance history for the requested month range
6574
6669
  content:
6575
6670
  application/json:
6576
6671
  schema:
@@ -6583,14 +6678,16 @@ paths:
6583
6678
  type: manual
6584
6679
  manual_account_id: 119807
6585
6680
  balances:
6586
- - id: 101
6587
- date: "2026-01-01"
6681
+ - type: historical
6682
+ id: 101
6683
+ month: "2026-01"
6588
6684
  balance: "41000.0000"
6589
6685
  currency: usd
6590
6686
  to_base: 41000
6591
6687
  crypto_balance: null
6592
- - id: 102
6593
- date: "2026-02-01"
6688
+ - type: historical
6689
+ id: 102
6690
+ month: "2026-02"
6594
6691
  balance: "41211.8000"
6595
6692
  currency: usd
6596
6693
  to_base: 41211.8
@@ -6599,8 +6696,9 @@ paths:
6599
6696
  type: plaid
6600
6697
  plaid_account_id: 119808
6601
6698
  balances:
6602
- - id: 103
6603
- date: "2026-01-01"
6699
+ - type: historical
6700
+ id: 103
6701
+ month: "2026-01"
6604
6702
  balance: "5498.2800"
6605
6703
  currency: usd
6606
6704
  to_base: 5498.28
@@ -6610,8 +6708,9 @@ paths:
6610
6708
  crypto_manual_id: 22001
6611
6709
  symbol: btc
6612
6710
  balances:
6613
- - id: 104
6614
- date: "2026-01-01"
6711
+ - type: historical
6712
+ id: 104
6713
+ month: "2026-01"
6615
6714
  balance: "53124.7200"
6616
6715
  currency: usd
6617
6716
  to_base: 53124.72
@@ -6621,8 +6720,9 @@ paths:
6621
6720
  crypto_synced_id: 33004
6622
6721
  symbol: btc
6623
6722
  balances:
6624
- - id: 105
6625
- date: "2026-01-01"
6723
+ - type: historical
6724
+ id: 105
6725
+ month: "2026-01"
6626
6726
  balance: "6231.2800"
6627
6727
  currency: usd
6628
6728
  to_base: 6231.28
@@ -6638,12 +6738,34 @@ paths:
6638
6738
  mask: "1234"
6639
6739
  symbol: null
6640
6740
  balances:
6641
- - id: 106
6642
- date: "2026-01-01"
6741
+ - type: historical
6742
+ id: 106
6743
+ month: "2026-01"
6643
6744
  balance: "1250.0000"
6644
6745
  currency: usd
6645
6746
  to_base: 1250
6646
6747
  crypto_balance: null
6748
+ historical and current:
6749
+ summary: Historical month plus ephemeral current month
6750
+ value:
6751
+ balance_history:
6752
+ - source:
6753
+ type: manual
6754
+ manual_account_id: 162003
6755
+ balances:
6756
+ - type: historical
6757
+ id: 7437356
6758
+ month: "2026-06"
6759
+ balance: "62.8"
6760
+ currency: usd
6761
+ to_base: 62.8
6762
+ crypto_balance: null
6763
+ - type: current
6764
+ month: "2026-07"
6765
+ balance: "71.2"
6766
+ currency: usd
6767
+ to_base: 71.2
6768
+ crypto_balance: null
6647
6769
  manual account history:
6648
6770
  value:
6649
6771
  balance_history:
@@ -6651,14 +6773,16 @@ paths:
6651
6773
  type: manual
6652
6774
  manual_account_id: 119807
6653
6775
  balances:
6654
- - id: 201
6655
- date: "2026-01-01"
6776
+ - type: historical
6777
+ id: 201
6778
+ month: "2026-01"
6656
6779
  balance: "41000.0000"
6657
6780
  currency: usd
6658
6781
  to_base: 41000
6659
6782
  crypto_balance: null
6660
- - id: 202
6661
- date: "2026-02-01"
6783
+ - type: historical
6784
+ id: 202
6785
+ month: "2026-02"
6662
6786
  balance: "41211.8000"
6663
6787
  currency: usd
6664
6788
  to_base: 41211.8
@@ -6670,8 +6794,9 @@ paths:
6670
6794
  type: plaid
6671
6795
  plaid_account_id: 119808
6672
6796
  balances:
6673
- - id: 301
6674
- date: "2026-02-01"
6797
+ - type: historical
6798
+ id: 301
6799
+ month: "2026-02"
6675
6800
  balance: "5498.2800"
6676
6801
  currency: usd
6677
6802
  to_base: 5498.28
@@ -6684,8 +6809,9 @@ paths:
6684
6809
  crypto_synced_id: 33004
6685
6810
  symbol: btc
6686
6811
  balances:
6687
- - id: 401
6688
- date: "2026-02-01"
6812
+ - type: historical
6813
+ id: 401
6814
+ month: "2026-02"
6689
6815
  balance: "6231.2800"
6690
6816
  currency: usd
6691
6817
  to_base: 6231.28
@@ -6704,8 +6830,9 @@ paths:
6704
6830
  mask: "1234"
6705
6831
  symbol: null
6706
6832
  balances:
6707
- - id: 501
6708
- date: "2026-01-01"
6833
+ - type: historical
6834
+ id: 501
6835
+ month: "2026-01"
6709
6836
  balance: "1250.0000"
6710
6837
  currency: usd
6711
6838
  to_base: 1250
@@ -6717,26 +6844,31 @@ paths:
6717
6844
  schema:
6718
6845
  $ref: "#/components/schemas/errorResponseObject"
6719
6846
  examples:
6720
- missing paired date:
6847
+ missing paired month:
6721
6848
  value:
6722
6849
  message: Request Validation Failure
6723
6850
  errors:
6724
- - errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
6851
+ - errMsg: "`start_month` and `end_month` must either both be provided or both be omitted."
6725
6852
  invalid range:
6726
6853
  value:
6727
6854
  message: Request Validation Failure
6728
6855
  errors:
6729
- - errMsg: "`start_date` must be before or equal to `end_date`."
6730
- not first of month:
6856
+ - errMsg: "`end_month` may not be earlier than `start_month`."
6857
+ invalid month format:
6858
+ value:
6859
+ message: Invalid Request Parameters
6860
+ errors:
6861
+ - errMsg: "Invalid value for parameter: 'start_month'. '2026-06-01' is not a valid month in YYYY-MM format."
6862
+ future start month:
6731
6863
  value:
6732
6864
  message: Request Validation Failure
6733
6865
  errors:
6734
- - errMsg: "`start_date` and `end_date` must both be the first day of a month."
6735
- future start date:
6866
+ - errMsg: "`start_month` must not be in the future."
6867
+ future end month:
6736
6868
  value:
6737
6869
  message: Request Validation Failure
6738
6870
  errors:
6739
- - errMsg: "`start_date` must not be in the future."
6871
+ - errMsg: "`end_month` must not be in the future."
6740
6872
  "401":
6741
6873
  $ref: "#/components/responses/unauthorizedToken"
6742
6874
  "429":
@@ -6748,23 +6880,16 @@ paths:
6748
6880
  tags:
6749
6881
  - balance_history
6750
6882
  summary: Get balance history for an account
6751
- description: >-
6752
- Retrieve historical balance entries for one manual, Plaid, manual crypto,
6753
- or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
6754
-
6755
- The `account_type` path parameter identifies the type of account and the
6756
- `account_id` path parameter identifies the specific id for that account type.<br><br>
6757
-
6758
- When `start_date` and `end_date` are both provided, they must be first-of-month
6759
- dates. `start_date` must not be in the future, while `end_date` may be in the future.
6760
- If one of `start_date` or `end_date` is provided, the other is required. If neither is
6761
- provided, all available history for the source is returned.
6883
+ description: |-
6884
+ 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>
6885
+ 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>
6886
+ `start_month`, `end_month`, and current-month entries behave as described in [GET /balance_history](#tag/balance-history/GET/balance_history).
6762
6887
  operationId: getBalanceHistoryForAccount
6763
6888
  parameters:
6764
6889
  - name: account_type
6765
6890
  in: path
6766
6891
  required: true
6767
- description: Source family to retrieve. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
6892
+ description: Account family to retrieve. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
6768
6893
  schema:
6769
6894
  type: string
6770
6895
  enum: [manual, plaid, crypto_manual, deleted]
@@ -6775,23 +6900,27 @@ paths:
6775
6900
  schema:
6776
6901
  type: integer
6777
6902
  format: int32
6778
- - name: start_date
6903
+ - name: start_month
6779
6904
  in: query
6780
- 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.
6905
+ description: >-
6906
+ Optional. Same format and constraints as `start_month` on
6907
+ [GET /balance_history](#tag/balance-history/GET/balance_history).
6781
6908
  required: false
6782
6909
  schema:
6783
6910
  type: string
6784
- format: date
6785
- - name: end_date
6911
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
6912
+ - name: end_month
6786
6913
  in: query
6787
- 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.
6914
+ description: >-
6915
+ Optional. Same format and constraints as `end_month` on
6916
+ [GET /balance_history](#tag/balance-history/GET/balance_history).
6788
6917
  required: false
6789
6918
  schema:
6790
6919
  type: string
6791
- format: date
6920
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
6792
6921
  responses:
6793
6922
  "200":
6794
- description: Historical balance entries for the requested source
6923
+ description: Monthly balance history for the requested source
6795
6924
  content:
6796
6925
  application/json:
6797
6926
  schema:
@@ -6804,14 +6933,16 @@ paths:
6804
6933
  type: manual
6805
6934
  manual_account_id: 119807
6806
6935
  balances:
6807
- - id: 201
6808
- date: "2026-01-01"
6936
+ - type: historical
6937
+ id: 201
6938
+ month: "2026-01"
6809
6939
  balance: "41000.0000"
6810
6940
  currency: usd
6811
6941
  to_base: 41000
6812
6942
  crypto_balance: null
6813
- - id: 202
6814
- date: "2026-02-01"
6943
+ - type: historical
6944
+ id: 202
6945
+ month: "2026-02"
6815
6946
  balance: "41211.8000"
6816
6947
  currency: usd
6817
6948
  to_base: 41211.8
@@ -6830,8 +6961,9 @@ paths:
6830
6961
  mask: "1234"
6831
6962
  symbol: null
6832
6963
  balances:
6833
- - id: 501
6834
- date: "2026-01-01"
6964
+ - type: historical
6965
+ id: 501
6966
+ month: "2026-01"
6835
6967
  balance: "1250.0000"
6836
6968
  currency: usd
6837
6969
  to_base: 1250
@@ -6843,16 +6975,16 @@ paths:
6843
6975
  schema:
6844
6976
  $ref: "#/components/schemas/errorResponseObject"
6845
6977
  examples:
6846
- missing paired date:
6978
+ missing paired month:
6847
6979
  value:
6848
6980
  message: Request Validation Failure
6849
6981
  errors:
6850
- - errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
6851
- invalid range:
6982
+ - errMsg: "`start_month` and `end_month` must either both be provided or both be omitted."
6983
+ invalid month format:
6852
6984
  value:
6853
- message: Request Validation Failure
6985
+ message: Invalid Request Parameters
6854
6986
  errors:
6855
- - errMsg: "`start_date` must be before or equal to `end_date`."
6987
+ - errMsg: "Invalid value for parameter: 'start_month'. '2026-06-01' is not a valid month in YYYY-MM format."
6856
6988
  "401":
6857
6989
  $ref: "#/components/responses/unauthorizedToken"
6858
6990
  "404":
@@ -6880,37 +7012,20 @@ paths:
6880
7012
  tags:
6881
7013
  - balance_history
6882
7014
  summary: Upsert balance history for an account
6883
- description: >-
6884
- Upsert one or more historical balance entries for a single manual, Plaid,
6885
- manual crypto, or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
6886
-
6887
- The `account_type` path parameter identifies the type of account and the
6888
- `account_id` path parameter identifies the specific id for that account type.<br><br>
6889
-
6890
- Submit one or more entries in the `balances` array. Each entry must specify
6891
- a `date` and `balance` value.<br><br>
6892
-
6893
- Balance history is monthly. Each entry's `date` must be the first day of
6894
- a month and must be in a past month.<br><br>
6895
-
6896
- `currency` may be provided for any balance entry. If omitted, it defaults
6897
- to the account currency for manual/Plaid accounts, or the user's primary
6898
- currency for crypto/deleted accounts.<br><br>
6899
-
6900
- `symbol` may only be set when `account_type` is `crypto_manual` or
6901
- `crypto_synced`. It is optional for `crypto_manual` accounts and tolerated
6902
- for `deleted` accounts.<br><br>
6903
-
6904
- `crypto_balance` may be provided for `crypto_manual`, `crypto_synced`, and
6905
- `deleted` accounts, and is invalid for `manual` or `plaid` accounts.<br><br>
6906
-
6907
- The response contains only the balance entries that were submitted in this request.
7015
+ description: |-
7016
+ 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>
7017
+ 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>
7018
+ 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>
7019
+ `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>
7020
+ `symbol` may be set for `crypto_manual` (optional) and `deleted` (tolerated) accounts. Do not provide it for `manual` or `plaid` accounts.<br><br>
7021
+ `crypto_balance` may be provided for `crypto_manual` and `deleted` accounts. It is invalid for `manual` or `plaid` accounts.<br><br>
7022
+ The response contains only the `type: historical` balance entries that were submitted in this request.
6908
7023
  operationId: upsertBalanceHistoryForAccount
6909
7024
  parameters:
6910
7025
  - name: account_type
6911
7026
  in: path
6912
7027
  required: true
6913
- description: Source family to update. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
7028
+ description: Account family to update. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
6914
7029
  schema:
6915
7030
  type: string
6916
7031
  enum: [manual, plaid, crypto_manual, deleted]
@@ -6931,21 +7046,21 @@ paths:
6931
7046
  manual account bulk upsert:
6932
7047
  value:
6933
7048
  balances:
6934
- - date: "2026-03-01"
7049
+ - month: "2026-03"
6935
7050
  balance: "41500.0000"
6936
- - date: "2026-04-01"
7051
+ - month: "2026-04"
6937
7052
  balance: "41625.5000"
6938
7053
  crypto manual balance with symbol:
6939
7054
  value:
6940
7055
  balances:
6941
- - date: "2026-03-01"
7056
+ - month: "2026-03"
6942
7057
  balance: "56011.1200"
6943
7058
  symbol: btc
6944
7059
  crypto_balance: "0.852341920145782301"
6945
7060
  deleted account bulk upsert:
6946
7061
  value:
6947
7062
  balances:
6948
- - date: "2026-03-01"
7063
+ - month: "2026-03"
6949
7064
  symbol: btc
6950
7065
  crypto_balance: "0.020000000000000000"
6951
7066
  currency: usd
@@ -6954,55 +7069,59 @@ paths:
6954
7069
  value:
6955
7070
  balances:
6956
7071
  - id: 601
6957
- date: "2026-03-01"
7072
+ month: "2026-03"
6958
7073
  balance: "41500.0000"
6959
7074
  currency: usd
6960
7075
  to_base: 41500
6961
7076
  crypto_balance: null
6962
7077
  responses:
6963
7078
  "200":
6964
- description: Returns the modified balance entries only. Other historical
6965
- entries for the account are omitted from `balances`.
7079
+ description: >-
7080
+ Returns only the `type: historical` entries modified by this request.
7081
+ Other historical entries for the account are omitted from `balances`.
6966
7082
  content:
6967
7083
  application/json:
6968
7084
  schema:
6969
7085
  $ref: "#/components/schemas/balanceHistoryAccountObject"
6970
7086
  examples:
6971
7087
  manual account bulk upsert:
6972
- summary: Two upserted rows returned (not full account history)
7088
+ summary: Two upserted entries returned (not full account history)
6973
7089
  value:
6974
7090
  source:
6975
7091
  type: manual
6976
7092
  manual_account_id: 119807
6977
7093
  balances:
6978
- - id: 601
6979
- date: "2026-03-01"
7094
+ - type: historical
7095
+ id: 601
7096
+ month: "2026-03"
6980
7097
  balance: "41500.0000"
6981
7098
  currency: usd
6982
7099
  to_base: 41500
6983
7100
  crypto_balance: null
6984
- - id: 602
6985
- date: "2026-04-01"
7101
+ - type: historical
7102
+ id: 602
7103
+ month: "2026-04"
6986
7104
  balance: "41625.5000"
6987
7105
  currency: usd
6988
7106
  to_base: 41625.5
6989
7107
  crypto_balance: null
6990
7108
  crypto manual balance with symbol:
6991
- summary: Single upserted row returned
7109
+ summary: Single upserted entry returned
6992
7110
  value:
6993
7111
  source:
6994
7112
  type: crypto_manual
6995
7113
  crypto_manual_id: 22001
6996
7114
  symbol: btc
6997
7115
  balances:
6998
- - id: 603
6999
- date: "2026-03-01"
7116
+ - type: historical
7117
+ id: 603
7118
+ month: "2026-03"
7000
7119
  balance: "56011.1200"
7001
7120
  currency: usd
7002
7121
  to_base: 56011.12
7003
7122
  crypto_balance: "0.852341920145782301"
7004
7123
  deleted account bulk upsert:
7005
- summary: Single upserted row returned
7124
+ summary: Single upserted entry returned
7006
7125
  value:
7007
7126
  source:
7008
7127
  type: deleted
@@ -7015,15 +7134,17 @@ paths:
7015
7134
  mask: "1234"
7016
7135
  symbol: btc
7017
7136
  balances:
7018
- - id: 504
7019
- date: "2026-03-01"
7137
+ - type: historical
7138
+ id: 504
7139
+ month: "2026-03"
7020
7140
  balance: "1255"
7021
7141
  currency: usd
7022
7142
  to_base: 1255
7023
7143
  crypto_balance: "0.020000000000000000"
7024
7144
  "400":
7025
- description: Bad Request. The entire request is rejected if any row in
7026
- `balances` fails validation; no rows are updated.
7145
+ description: >-
7146
+ Bad Request. If any entry in `balances` fails validation, the entire
7147
+ request is rejected and no entries are updated.
7027
7148
  content:
7028
7149
  application/json:
7029
7150
  schema:
@@ -7044,30 +7165,34 @@ paths:
7044
7165
  message: Invalid Request Body
7045
7166
  errors:
7046
7167
  - errMsg: "Invalid property 'foo' in request body."
7047
- invalid date:
7168
+ invalid month format:
7169
+ value:
7170
+ message: Invalid Request Body
7171
+ errors:
7172
+ - errMsg: "Invalid value for property 'balances.0.month'. '2026-06-01' is not a valid month in YYYY-MM format."
7173
+ current month:
7048
7174
  value:
7049
7175
  message: Request Validation Failure
7050
7176
  errors:
7051
- - errMsg: "`date` must be the first day of a month."
7177
+ - errMsg: "`month` must not be the current month."
7052
7178
  request_balances_index: 0
7053
- code: VALIDATION_ERROR
7054
- future date:
7179
+ future month:
7055
7180
  value:
7056
7181
  message: Request Validation Failure
7057
7182
  errors:
7058
- - errMsg: "`date` must be in a past month."
7183
+ - errMsg: "`month` must not be in the future."
7059
7184
  request_balances_index: 1
7060
7185
  crypto balance not allowed:
7061
7186
  value:
7062
7187
  message: Request Validation Failure
7063
7188
  errors:
7064
- - errMsg: "`crypto_balance` may only be set when `account_type` is `crypto_manual`, `crypto_synced`, or `deleted`."
7189
+ - errMsg: "`crypto_balance` may only be set when `account_type` is `crypto_manual` or `deleted`."
7065
7190
  request_balances_index: 0
7066
- invalid row in bulk request:
7191
+ invalid entry in bulk request:
7067
7192
  value:
7068
7193
  message: Request Validation Failure
7069
7194
  errors:
7070
- - errMsg: "`symbol` may only be set when `account_type` is `crypto_manual` or `crypto_synced`."
7195
+ - errMsg: "`symbol` may only be set when `account_type` is `crypto_manual` or `deleted`."
7071
7196
  request_balances_index: 1
7072
7197
  "401":
7073
7198
  $ref: "#/components/responses/unauthorizedToken"
@@ -7089,15 +7214,14 @@ paths:
7089
7214
  tags:
7090
7215
  - balance_history
7091
7216
  summary: Delete all balance history for an account
7092
- description: >-
7093
- Delete all historical balance entries for a single manual, Plaid,
7094
- manual crypto, or deleted account. Crypto synced accounts require an additional `symbol` path parameter.
7217
+ description: |-
7218
+ 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}).
7095
7219
  operationId: deleteBalanceHistoryForAccount
7096
7220
  parameters:
7097
7221
  - name: account_type
7098
7222
  in: path
7099
7223
  required: true
7100
- description: Source family to delete. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
7224
+ description: Account family to delete. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
7101
7225
  schema:
7102
7226
  type: string
7103
7227
  enum: [manual, plaid, crypto_manual, deleted]
@@ -7134,16 +7258,10 @@ paths:
7134
7258
  tags:
7135
7259
  - balance_history
7136
7260
  summary: Get balance history for a synced crypto symbol
7137
- description: >-
7138
- Retrieve historical balance entries for a single synced crypto symbol stream.<br><br>
7139
-
7140
- Use the `crypto_synced` account id together with a `symbol` path parameter
7141
- to select one balance stream within that synced crypto account.<br><br>
7142
-
7143
- When `start_date` and `end_date` are both provided, they must be first-of-month
7144
- dates. `start_date` must not be in the future, while `end_date` may be in the future.
7145
- If one of `start_date` or `end_date` is provided, the other is required. If neither is
7146
- provided, all available history for the symbol stream is returned.
7261
+ description: |-
7262
+ Retrieve monthly balance history for a single synced crypto symbol stream.<br><br>
7263
+ The path selects one balance stream with a synced crypto account id and `symbol`.<br><br>
7264
+ `start_month`, `end_month`, and current-month entries behave as described in [GET /balance_history](#tag/balance-history/GET/balance_history).
7147
7265
  operationId: getBalanceHistoryForCryptoSynced
7148
7266
  parameters:
7149
7267
  - name: account_id
@@ -7161,23 +7279,27 @@ paths:
7161
7279
  type: string
7162
7280
  minLength: 1
7163
7281
  maxLength: 25
7164
- - name: start_date
7282
+ - name: start_month
7165
7283
  in: query
7166
- 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.
7284
+ description: >-
7285
+ Optional. Same format and constraints as `start_month` on
7286
+ [GET /balance_history](#tag/balance-history/GET/balance_history).
7167
7287
  required: false
7168
7288
  schema:
7169
7289
  type: string
7170
- format: date
7171
- - name: end_date
7290
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
7291
+ - name: end_month
7172
7292
  in: query
7173
- 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.
7293
+ description: >-
7294
+ Optional. Same format and constraints as `end_month` on
7295
+ [GET /balance_history](#tag/balance-history/GET/balance_history).
7174
7296
  required: false
7175
7297
  schema:
7176
7298
  type: string
7177
- format: date
7299
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
7178
7300
  responses:
7179
7301
  "200":
7180
- description: Historical balance entries for the synced crypto symbol stream
7302
+ description: Monthly balance history for the synced crypto symbol stream
7181
7303
  content:
7182
7304
  application/json:
7183
7305
  schema:
@@ -7189,8 +7311,9 @@ paths:
7189
7311
  crypto_synced_id: 33004
7190
7312
  symbol: btc
7191
7313
  balances:
7192
- - id: 401
7193
- date: "2026-02-01"
7314
+ - type: historical
7315
+ id: 401
7316
+ month: "2026-02"
7194
7317
  balance: "6231.2800"
7195
7318
  currency: usd
7196
7319
  to_base: 6231.28
@@ -7202,16 +7325,16 @@ paths:
7202
7325
  schema:
7203
7326
  $ref: "#/components/schemas/errorResponseObject"
7204
7327
  examples:
7205
- missing paired date:
7328
+ missing paired month:
7206
7329
  value:
7207
7330
  message: Request Validation Failure
7208
7331
  errors:
7209
- - errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
7210
- invalid range:
7332
+ - errMsg: "`start_month` and `end_month` must either both be provided or both be omitted."
7333
+ invalid month format:
7211
7334
  value:
7212
- message: Request Validation Failure
7335
+ message: Invalid Request Parameters
7213
7336
  errors:
7214
- - errMsg: "`start_date` must be before or equal to `end_date`."
7337
+ - errMsg: "Invalid value for parameter: 'start_month'. '2026-06-01' is not a valid month in YYYY-MM format."
7215
7338
  "401":
7216
7339
  $ref: "#/components/responses/unauthorizedToken"
7217
7340
  "404":
@@ -7239,28 +7362,14 @@ paths:
7239
7362
  tags:
7240
7363
  - balance_history
7241
7364
  summary: Upsert balance history for a synced crypto symbol
7242
- description: >-
7243
- Upsert one or more historical balance entries for a single synced crypto
7244
- symbol stream.<br><br>
7245
-
7365
+ description: |-
7366
+ Upsert one or more historical balance entries for a single synced crypto symbol stream.<br><br>
7246
7367
  The path identifies both the synced crypto account and the symbol being updated.<br><br>
7247
-
7248
- Submit one or more entries in the `balances` array. Each entry must specify
7249
- a `date` and `balance` value.<br><br>
7250
-
7251
- Balance history is monthly. Each entry's `date` must be the first day of
7252
- a month and must be in a past month.<br><br>
7253
-
7254
- The request body may include an optional `symbol` on each balance entry. If
7255
- provided, it must match the `symbol` path parameter. Omit `symbol` to use
7256
- the path value.<br><br>
7257
-
7258
- `currency` may be provided for any balance entry. If omitted, it defaults
7259
- to the user's primary currency for synced crypto balances.<br><br>
7260
-
7368
+ 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>
7369
+ 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>
7370
+ `currency` may be provided for any balance entry. If omitted, it defaults to the user's primary currency for synced crypto balances.<br><br>
7261
7371
  `crypto_balance` may be provided for synced crypto balances.<br><br>
7262
-
7263
- The response contains only the balance entries that were submitted in this request.
7372
+ The response contains only the `type: historical` balance entries that were submitted in this request.
7264
7373
  operationId: upsertBalanceHistoryForCryptoSynced
7265
7374
  parameters:
7266
7375
  - name: account_id
@@ -7288,44 +7397,49 @@ paths:
7288
7397
  synced crypto bulk upsert:
7289
7398
  value:
7290
7399
  balances:
7291
- - date: "2026-03-01"
7400
+ - month: "2026-03"
7292
7401
  balance: "6400.0000"
7293
7402
  crypto_balance: "0.100020003000400050"
7294
- - date: "2026-04-01"
7403
+ - month: "2026-04"
7295
7404
  balance: "6500.0000"
7296
7405
  crypto_balance: "0.100020003000400050"
7297
7406
  responses:
7298
7407
  "200":
7299
- description: Returns the modified balance entries only. Other historical
7300
- entries for the symbol stream are omitted from `balances`.
7408
+ description: >-
7409
+ Returns only the `type: historical` entries modified by this request.
7410
+ Other historical entries for the symbol stream are omitted from
7411
+ `balances`.
7301
7412
  content:
7302
7413
  application/json:
7303
7414
  schema:
7304
7415
  $ref: "#/components/schemas/balanceHistoryAccountObject"
7305
7416
  examples:
7306
7417
  synced crypto bulk upsert:
7307
- summary: Two upserted rows returned (not full symbol history)
7418
+ summary: Two upserted entries returned (not full symbol history)
7308
7419
  value:
7309
7420
  source:
7310
7421
  type: crypto_synced
7311
7422
  crypto_synced_id: 33004
7312
7423
  symbol: btc
7313
7424
  balances:
7314
- - id: 604
7315
- date: "2026-03-01"
7425
+ - type: historical
7426
+ id: 604
7427
+ month: "2026-03"
7316
7428
  balance: "6400.0000"
7317
7429
  currency: usd
7318
7430
  to_base: 6400
7319
7431
  crypto_balance: "0.100020003000400050"
7320
- - id: 605
7321
- date: "2026-04-01"
7432
+ - type: historical
7433
+ id: 605
7434
+ month: "2026-04"
7322
7435
  balance: "6500.0000"
7323
7436
  currency: usd
7324
7437
  to_base: 6500
7325
7438
  crypto_balance: "0.100020003000400050"
7326
7439
  "400":
7327
- description: Bad Request. The entire request is rejected if any row in
7328
- `balances` fails validation; no rows are updated.
7440
+ description: >-
7441
+ Bad Request. If any entry in `balances` fails validation, the entire
7442
+ request is rejected and no entries are updated.
7329
7443
  content:
7330
7444
  application/json:
7331
7445
  schema:
@@ -7341,17 +7455,22 @@ paths:
7341
7455
  message: Invalid Request Body
7342
7456
  errors:
7343
7457
  - errMsg: "Invalid value for property 'balances'. Array must contain at least 1 element(s)"
7344
- invalid date:
7458
+ invalid month format:
7459
+ value:
7460
+ message: Invalid Request Body
7461
+ errors:
7462
+ - errMsg: "Invalid value for property 'balances.0.month'. '2026-06-01' is not a valid month in YYYY-MM format."
7463
+ current month:
7345
7464
  value:
7346
7465
  message: Request Validation Failure
7347
7466
  errors:
7348
- - errMsg: "`date` must be the first day of a month."
7467
+ - errMsg: "`month` must not be the current month."
7349
7468
  request_balances_index: 0
7350
- future date:
7469
+ future month:
7351
7470
  value:
7352
7471
  message: Request Validation Failure
7353
7472
  errors:
7354
- - errMsg: "`date` must be in a past month."
7473
+ - errMsg: "`month` must not be in the future."
7355
7474
  request_balances_index: 1
7356
7475
  symbol mismatch:
7357
7476
  value:
@@ -7359,9 +7478,9 @@ paths:
7359
7478
  errors:
7360
7479
  - errMsg: "`symbol` in request body (doge) does not match the path symbol (eth)."
7361
7480
  request_balances_index: 0
7362
- invalid row in bulk request:
7481
+ invalid entry in bulk request:
7363
7482
  value:
7364
- message: Request Validation Failure
7483
+ message: Invalid Request Body
7365
7484
  errors:
7366
7485
  - errMsg: "`balance` must be a valid numeric string or number."
7367
7486
  request_balances_index: 1
@@ -7392,11 +7511,9 @@ paths:
7392
7511
  tags:
7393
7512
  - balance_history
7394
7513
  summary: Delete all balance history for a synced crypto symbol
7395
- description: >-
7514
+ description: |-
7396
7515
  Delete all historical balance entries for a single synced crypto symbol stream.<br><br>
7397
-
7398
- The path identifies both the synced crypto account and the symbol whose
7399
- history should be deleted.
7516
+ The path identifies both the synced crypto account and the symbol whose history should be deleted.
7400
7517
  operationId: deleteBalanceHistoryForCryptoSynced
7401
7518
  parameters:
7402
7519
  - name: account_id
@@ -7438,14 +7555,14 @@ paths:
7438
7555
  tags:
7439
7556
  - balance_history
7440
7557
  summary: Delete a balance history entry
7441
- description: >-
7442
- Delete a single monthly balance history entry by its id.
7558
+ description: |-
7559
+ Delete a single stored (`type: historical`) monthly balance history entry by its id. Ephemeral `current` entries cannot be deleted this way.
7443
7560
  operationId: deleteBalanceHistoryEntry
7444
7561
  parameters:
7445
7562
  - name: id
7446
7563
  in: path
7447
7564
  required: true
7448
- description: Balance history row identifier to delete.
7565
+ description: Historical balance entry identifier to delete.
7449
7566
  schema:
7450
7567
  type: integer
7451
7568
  format: int32
@@ -7459,7 +7576,7 @@ paths:
7459
7576
  schema:
7460
7577
  $ref: "#/components/schemas/errorResponseObject"
7461
7578
  example:
7462
- message: Request Validation Failure
7579
+ message: Invalid Path Parameters
7463
7580
  errors:
7464
7581
  - errMsg: "Invalid value type for path parameter: 'id'. Expected 'number', received 'string'."
7465
7582
  "401":
@@ -7483,12 +7600,9 @@ paths:
7483
7600
  tags:
7484
7601
  - balance_history
7485
7602
  summary: Update details for a deleted account
7486
- description: >-
7603
+ description: |-
7487
7604
  Update archived metadata for a deleted balance history source.<br><br>
7488
-
7489
- Pass the `deleted` source id returned on `source.deleted_account_id`.
7490
- This endpoint updates the stored deleted-source metadata used for all
7491
- historical entries associated with that deleted source.
7605
+ Pass the `deleted_account_id` from a `source.type: deleted` entry. The update applies to all historical entries associated with that deleted source.
7492
7606
  operationId: updateBalanceHistoryDetails
7493
7607
  parameters:
7494
7608
  - name: account_id
@@ -8562,19 +8676,19 @@ paths:
8562
8676
  description: Sets the maximum number of transactions to return. If
8563
8677
  more match the filter criteria, the response will include a
8564
8678
  `has_more` attribute set to `true`. See
8565
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
8679
+ [Pagination](https://lunchmoney.dev/v2/pagination)
8566
8680
  - name: offset
8567
8681
  in: query
8568
8682
  schema:
8569
8683
  type: integer
8570
8684
  description: Sets the offset for the records returned. This is
8571
8685
  typically set automatically in the header. See
8572
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
8686
+ [Pagination](https://lunchmoney.dev/v2/pagination)
8573
8687
  responses:
8574
8688
  "200":
8575
8689
  description: Returns an array of transactions. <br><br>The `has_more`
8576
8690
  property is set to `true` if more transactions are available. See
8577
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
8691
+ [Pagination](https://lunchmoney.dev/v2/pagination)
8578
8692
  content:
8579
8693
  application/json:
8580
8694
  schema:
@@ -10798,9 +10912,8 @@ paths:
10798
10912
  - transactions (files)
10799
10913
  summary: Attach a file to a transaction
10800
10914
  operationId: attachFileToTransaction
10801
- description: >-
10802
- Attaches a file to a transaction. The file must be less than 10MB in size.<br><br>
10803
- The file will be attached to the transaction and can be downloaded from the link returned by a `GET /transactions/attachments/{file_id}` request.
10915
+ description: |-
10916
+ 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.
10804
10917
  parameters:
10805
10918
  - name: transaction_id
10806
10919
  in: path
@@ -10883,8 +10996,8 @@ paths:
10883
10996
  /transactions/attachments/{file_id}:
10884
10997
  get:
10885
10998
  summary: Get a url to download a file attachment
10886
- description: Returns a signed url that can be used to download the file
10887
- attachment.
10999
+ description: |-
11000
+ Returns a signed url that can be used to download the file attachment.
10888
11001
  operationId: getTransactionAttachmentUrl
10889
11002
  tags:
10890
11003
  - transactions (files)
@@ -11617,12 +11730,15 @@ paths:
11617
11730
  get:
11618
11731
  tags:
11619
11732
  - budgets
11620
- summary: Get budget settings
11621
- description: Returns the budget-related settings for the user's account.
11733
+ summary: Get budget period settings
11734
+ description: |-
11735
+ Returns budget period and display settings for the budget
11736
+ associated with this API token.<p> These control how budget **periods** are calculated
11737
+ (granularity, anchor date, rollover, and related options).
11622
11738
  operationId: getBudgetSettings
11623
11739
  responses:
11624
11740
  "200":
11625
- description: Budget settings for the account
11741
+ description: Budget period settings for the current budget
11626
11742
  content:
11627
11743
  application/json:
11628
11744
  schema:
@@ -11645,7 +11761,7 @@ paths:
11645
11761
  Note that `start_date` **must** be a valid budget period start for the account (based on the account's
11646
11762
  budget period settings). If an invalid `start_date` is provided, the request will fail with an error that indicates what the previous and next valid start dates are.<p>
11647
11763
 
11648
- Use the [budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view the account's budget settings.<br>
11764
+ Use the [/budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view the budget period settings for the account.<br>
11649
11765
  To view details for existing budgets, use the [summary](#tag/summary) endpoint.
11650
11766
  operationId: upsertBudget
11651
11767
  requestBody:
@@ -11716,7 +11832,7 @@ paths:
11716
11832
  period settings). If an invalid `start_date` is provided, the request
11717
11833
  will fail with an error that indicates what the previous and next valid
11718
11834
  start dates are.<p> Use the
11719
- [budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view
11835
+ [/budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view
11720
11836
  the account's budget settings.<br> To view details for existing budgets,
11721
11837
  use the [summary](#tag/summary) endpoint.
11722
11838
  operationId: deleteBudget
@@ -11774,4 +11890,3 @@ paths:
11774
11890
 
11775
11891
  security:
11776
11892
  - bearerSecurity: []
11777
- - cookieAuth: []