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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,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.1** 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.1** 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,17 +46,18 @@ 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
53
55
  description: View details and settings for the current user and account.<p>
54
- Use [/me/account/settings](#tag/me/GET/me/account/settings) and
55
- [/me/user/settings](#tag/me/GET/me/user/settings) for account- and
56
- user-level preferences.
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 budgeting account.
57
61
  - name: categories
58
62
  description: Work with categories
59
63
  externalDocs:
@@ -80,7 +84,11 @@ tags:
80
84
  description: Learn more about crypto assets
81
85
  url: https://support.lunchmoney.app/setup/crypto
82
86
  - name: balance_history
83
- 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.
84
92
  - name: recurring_items
85
93
  description: Work with recurring items
86
94
  externalDocs:
@@ -994,16 +1002,19 @@ components:
994
1002
  example: Cold Wallet BTC
995
1003
  display_name:
996
1004
  type: string
1005
+ nullable: true
997
1006
  minLength: 1
998
1007
  maxLength: 45
999
- description: Optional display name for the manual crypto asset. If
1000
- 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`.
1001
1010
  example: Cold Storage
1002
1011
  institution_name:
1003
1012
  type: string
1013
+ nullable: true
1004
1014
  minLength: 1
1005
1015
  maxLength: 50
1006
- 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.
1007
1018
  example: Ledger
1008
1019
  balance:
1009
1020
  oneOf:
@@ -1259,15 +1270,19 @@ components:
1259
1270
  example: My Savings Account
1260
1271
  institution_name:
1261
1272
  type: string
1273
+ nullable: true
1262
1274
  example: Bank of the West
1263
- 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.
1264
1277
  minLength: 1
1265
1278
  maxLength: 50
1266
1279
  display_name:
1267
1280
  type: string
1268
- description: Display name of the manual account as set by user or
1269
- derived from the `institution_name` and `name` if not explicitly
1270
- 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 budgeting
1285
+ account.
1271
1286
  example: Savings
1272
1287
  type:
1273
1288
  description: The type of manual account
@@ -1275,8 +1290,10 @@ components:
1275
1290
  - $ref: "#/components/schemas/accountTypeEnum"
1276
1291
  subtype:
1277
1292
  type: string
1278
- description: An optional manual account subtype. Examples include<br>
1279
- - 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.
1280
1297
  minLength: 1
1281
1298
  maxLength: 100
1282
1299
  example: prepaid credit card
@@ -1650,7 +1667,7 @@ components:
1650
1667
  type:
1651
1668
  type: string
1652
1669
  enum: [manual]
1653
- description: Identifies this entry as belonging to a manually-managed account.
1670
+ description: Identifies this entry as belonging to a manual account.
1654
1671
  manual_account_id:
1655
1672
  type: integer
1656
1673
  format: int32
@@ -1679,14 +1696,14 @@ components:
1679
1696
 
1680
1697
  balanceHistorySourceCryptoManual:
1681
1698
  type: object
1682
- description: Source information for a manually-tracked cryptocurrency balance history entry.
1699
+ description: Source information for a manual cryptocurrency balance history entry.
1683
1700
  additionalProperties: false
1684
1701
  x-internal: true
1685
1702
  properties:
1686
1703
  type:
1687
1704
  type: string
1688
1705
  enum: [crypto_manual]
1689
- description: Identifies this entry as belonging to a manually-tracked crypto account.
1706
+ description: Identifies this entry as belonging to a manual crypto account.
1690
1707
  crypto_manual_id:
1691
1708
  type: integer
1692
1709
  format: int32
@@ -1729,10 +1746,11 @@ components:
1729
1746
  type: object
1730
1747
  x-internal: true
1731
1748
  description: >
1732
- 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.
1733
1750
  Historical balances are preserved when a user chooses to keep history on account deletion.
1734
1751
  This object contains details that can be used to display the deleted account in the UI.
1735
- 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)
1736
1754
  to update the archived source metadata.
1737
1755
  additionalProperties: false
1738
1756
  properties:
@@ -1763,11 +1781,11 @@ components:
1763
1781
  subtype:
1764
1782
  type: string
1765
1783
  nullable: true
1766
- description: Archived `subtype`` of the deleted account source
1784
+ description: Archived `subtype` of the deleted account source
1767
1785
  mask:
1768
1786
  type: string
1769
1787
  nullable: true
1770
- description: Archived account `mask` for a deleted plaid account source
1788
+ description: Archived account `mask` for a deleted Plaid account source
1771
1789
  symbol:
1772
1790
  type: string
1773
1791
  nullable: true
@@ -1789,12 +1807,14 @@ components:
1789
1807
  type: object
1790
1808
  title: balance history for an account object
1791
1809
  additionalProperties: false
1792
- description: Historical balance entries grouped under a single account source.
1810
+ description: Monthly balance entries grouped under a single account source.
1793
1811
  properties:
1794
1812
  source:
1795
1813
  description: >
1796
- Identifies the account this balance entry belongs to. The shape varies by
1797
- `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`).
1798
1818
  oneOf:
1799
1819
  - $ref: "#/components/schemas/balanceHistorySourceManual"
1800
1820
  - $ref: "#/components/schemas/balanceHistorySourcePlaid"
@@ -1812,38 +1832,48 @@ components:
1812
1832
  balances:
1813
1833
  type: array
1814
1834
  description: >
1815
- Monthly balance history entries for the source account. On GET responses,
1816
- this includes all entries in the requested range. On PUT upsert responses,
1817
- 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.
1818
1840
  items:
1819
- $ref: "#/components/schemas/balanceHistoryObject"
1841
+ $ref: "#/components/schemas/balanceHistoryEntry"
1820
1842
  required:
1821
1843
  - source
1822
1844
  - balances
1823
1845
 
1824
- balanceHistoryObject:
1846
+ historicalBalanceHistoryEntry:
1825
1847
  type: object
1826
- title: balance history entry object
1848
+ title: historical balance history entry
1827
1849
  additionalProperties: false
1828
1850
  x-internal: true
1829
- 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`.
1830
1855
  properties:
1856
+ type:
1857
+ type: string
1858
+ enum: [historical]
1859
+ description: Identifies this entry as a stored snapshot of a past month.
1831
1860
  id:
1832
1861
  type: integer
1833
1862
  format: int32
1834
- description: Unique identifier of this historical balance entry.
1835
- date:
1863
+ description: Unique identifier for this historical balance entry.
1864
+ month:
1836
1865
  type: string
1837
- format: date
1838
- 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"
1839
1869
  balance:
1840
1870
  type: string
1841
1871
  pattern: ^-?\d+(\.\d{1,4})?$
1842
- 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.
1843
1873
  currency:
1844
1874
  allOf:
1845
1875
  - $ref: "#/components/schemas/currencyEnum"
1846
- 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.
1847
1877
  to_base:
1848
1878
  type: number
1849
1879
  format: double
@@ -1852,19 +1882,82 @@ components:
1852
1882
  type: string
1853
1883
  nullable: true
1854
1884
  pattern: ^-?\d+(\.\d{1,18})?$
1855
- 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.
1856
1886
  required:
1887
+ - type
1857
1888
  - id
1858
- - 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
1859
1933
  - balance
1860
1934
  - currency
1861
1935
  - to_base
1862
1936
  - crypto_balance
1863
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
+
1864
1954
  balanceHistoryListResponseObject:
1865
1955
  type: object
1866
1956
  additionalProperties: false
1867
1957
  x-internal: true
1958
+ description: >
1959
+ List response for balance history GET endpoints. Entries are grouped by
1960
+ account source under `balance_history`.
1868
1961
  properties:
1869
1962
  balance_history:
1870
1963
  type: array
@@ -1877,31 +1970,39 @@ components:
1877
1970
  type: object
1878
1971
  x-internal: true
1879
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.
1880
1976
  properties:
1881
1977
  id:
1882
1978
  type: integer
1883
1979
  format: int32
1884
1980
  description: System-defined balance history entry id. Ignored if set.
1885
1981
  x-updatable: false
1886
- date:
1982
+ month:
1887
1983
  type: string
1888
- format: date
1889
- 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"
1890
1989
  balance:
1891
1990
  oneOf:
1892
1991
  - type: number
1893
1992
  format: double
1894
1993
  - type: string
1895
1994
  pattern: ^-?\d+(\.\d{1,4})?$
1896
- 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.
1897
1996
  symbol:
1898
1997
  type: string
1899
1998
  nullable: true
1900
1999
  minLength: 1
1901
2000
  maxLength: 25
1902
- description: Optional for crypto balances, but if set it must match the account's symbol.
1903
- Tolerated for deleted-account balances. Do not provide this for manual or Plaid balances.
1904
- 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.
1905
2006
  x-updatable: true
1906
2007
  crypto_balance:
1907
2008
  type: string
@@ -1917,10 +2018,10 @@ components:
1917
2018
  to_base:
1918
2019
  type: number
1919
2020
  format: double
1920
- 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.
1921
2022
  x-updatable: false
1922
2023
  required:
1923
- - date
2024
+ - month
1924
2025
  - balance
1925
2026
 
1926
2027
  upsertBalanceHistoryRequestObject:
@@ -1931,7 +2032,11 @@ components:
1931
2032
  balances:
1932
2033
  type: array
1933
2034
  minItems: 1
1934
- 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.
1935
2040
  items:
1936
2041
  $ref: "#/components/schemas/balanceHistoryUpdateItemObject"
1937
2042
  required:
@@ -1946,51 +2051,58 @@ components:
1946
2051
  name:
1947
2052
  type: string
1948
2053
  nullable: true
1949
- description: New archived account name for the deleted account source.
2054
+ description: New archived account name for the deleted account source
1950
2055
  institution_name:
1951
2056
  type: string
1952
2057
  nullable: true
1953
- description: New archived institution name for the deleted account source.
2058
+ description: New archived institution name for the deleted account source
1954
2059
  display_name:
1955
2060
  type: string
1956
2061
  nullable: true
1957
- description: New display name for the deleted account source.
2062
+ description: New display name for the deleted account source
1958
2063
  account_type:
1959
2064
  type: string
1960
2065
  nullable: true
1961
- description: New archived account type for the deleted account source.
2066
+ description: New archived account type for the deleted account source
1962
2067
  subtype:
1963
2068
  type: string
1964
2069
  nullable: true
1965
- description: New archived subtype for the deleted account source.
2070
+ description: New archived subtype for the deleted account source
1966
2071
  mask:
1967
2072
  type: string
1968
2073
  nullable: true
1969
- description: New archived account mask for the deleted account source.
2074
+ description: New archived account mask for the deleted account source
1970
2075
 
1971
2076
  updateBalanceHistoryDetailsResponseObject:
1972
2077
  type: object
1973
2078
  x-internal: true
1974
2079
  additionalProperties: false
2080
+ description: Updated archived metadata for a deleted balance history source
1975
2081
  properties:
1976
2082
  name:
1977
2083
  type: string
1978
2084
  nullable: true
2085
+ description: Archived account name for the deleted account source
1979
2086
  institution_name:
1980
2087
  type: string
1981
2088
  nullable: true
2089
+ description: Archived institution name for the deleted account source
1982
2090
  display_name:
1983
2091
  type: string
1984
2092
  nullable: true
2093
+ description: Archived display name for the deleted account source
1985
2094
  account_type:
1986
2095
  type: string
1987
2096
  nullable: true
2097
+ description: Archived account type for the deleted account source
1988
2098
  subtype:
1989
2099
  type: string
1990
2100
  nullable: true
2101
+ description: Archived subtype for the deleted account source
1991
2102
  mask:
1992
2103
  type: string
1993
2104
  nullable: true
2105
+ description: Archived account mask for the deleted account source
1994
2106
  required:
1995
2107
  - name
1996
2108
  - institution_name
@@ -2946,7 +3058,7 @@ components:
2946
3058
  currency:
2947
3059
  description: Three-letter lowercase currency code of the transaction
2948
3060
  in ISO 4217 format. Must match one of the [supported
2949
- currencies](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/currencies). If not set
3061
+ currencies](https://lunchmoney.dev/v2/currencies). If not set
2950
3062
  defaults to the user account's primary currency.
2951
3063
  allOf:
2952
3064
  - $ref: "#/components/schemas/currencyEnum"
@@ -3091,6 +3203,7 @@ components:
3091
3203
  description: |
3092
3204
  The new payee for the transaction.
3093
3205
  minLength: 0
3206
+ x-updatable: true
3094
3207
  original_name:
3095
3208
  type: string
3096
3209
  nullable: true
@@ -3302,9 +3415,10 @@ components:
3302
3415
  category_id:
3303
3416
  type: integer
3304
3417
  format: int32
3305
- description: Unique identifier for associated category_id. Category
3306
- must already exist for the account. Will inherit category from the
3307
- 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.
3308
3422
  tag_ids:
3309
3423
  type: array
3310
3424
  description: The IDs of any tags to apply to this split child
@@ -3314,7 +3428,10 @@ components:
3314
3428
  format: int32
3315
3429
  notes:
3316
3430
  type: string
3317
- 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.
3318
3435
  required:
3319
3436
  - amount
3320
3437
 
@@ -3683,6 +3800,7 @@ components:
3683
3800
  - budget_rollover_left_to_budget
3684
3801
 
3685
3802
  weekStartsOnEnum:
3803
+ x-internal: true
3686
3804
  type: string
3687
3805
  title: week starts on enum
3688
3806
  enum:
@@ -3691,6 +3809,7 @@ components:
3691
3809
  description: The day on which a calendar week begins.
3692
3810
 
3693
3811
  monthYearFormatEnum:
3812
+ x-internal: true
3694
3813
  type: string
3695
3814
  title: month and year format enum
3696
3815
  description: Format string for displaying month and year values
@@ -3717,6 +3836,7 @@ components:
3717
3836
  - "YYYY/MM"
3718
3837
 
3719
3838
  monthDayYearFormatEnum:
3839
+ x-internal: true
3720
3840
  type: string
3721
3841
  title: month, day and year format enum
3722
3842
  description: Format string for displaying full dates in the
@@ -3774,6 +3894,7 @@ components:
3774
3894
  - "M/DD/YYYY"
3775
3895
 
3776
3896
  monthDayFormatEnum:
3897
+ x-internal: true
3777
3898
  type: string
3778
3899
  title: month and day format enum
3779
3900
  description: Format string for displaying month and day values
@@ -3816,6 +3937,98 @@ components:
3816
3937
  - "DD.M"
3817
3938
  - "DD/M"
3818
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
+
3819
4032
  accountSettingsObject:
3820
4033
  type: object
3821
4034
  title: account settings object
@@ -3839,13 +4052,19 @@ components:
3839
4052
  description: Display name of the budgeting account in the Lunch Money
3840
4053
  app.
3841
4054
  locale:
3842
- type: string
3843
- description: Locale used for formatting dates and numbers in the
3844
- Lunch Money app (for example, `en-US`). When no locale is explicitly
3845
- stored for the account, the effective locale is derived from the
3846
- `default_locale` associated with `primary_currency` in the
3847
- currencies table (for example, `usd` → `en-US`, `cad` → `en-CA`,
3848
- `gbp` → `en-GB`).
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`).
3849
4068
  auto_create_category_rules:
3850
4069
  type: boolean
3851
4070
  default: true
@@ -3856,16 +4075,11 @@ components:
3856
4075
  default: true
3857
4076
  description: If `true`, suggested transaction rules are created
3858
4077
  automatically.
3859
- auto_review_transaction_on_update:
3860
- type: boolean
3861
- default: true
3862
- description: If `true`, transactions are marked as reviewed when
3863
- updated.
3864
- auto_review_transaction_on_creation:
4078
+ include_pending_in_totals:
3865
4079
  type: boolean
3866
4080
  default: true
3867
- description: If `true`, transactions are marked as reviewed when
3868
- created.
4081
+ description: If `true`, pending transactions are included in account
4082
+ totals.
3869
4083
  required:
3870
4084
  - primary_currency
3871
4085
  - supported_currencies
@@ -3873,13 +4087,13 @@ components:
3873
4087
  - locale
3874
4088
  - auto_create_category_rules
3875
4089
  - auto_create_suggested_transaction_rules
3876
- - auto_review_transaction_on_update
3877
- - auto_review_transaction_on_creation
4090
+ - include_pending_in_totals
3878
4091
 
3879
4092
  updateAccountSettingsRequestObject:
3880
4093
  x-internal: true
3881
4094
  type: object
3882
4095
  additionalProperties: false
4096
+ minProperties: 1
3883
4097
  description: Request body for updating account settings. Include at least
3884
4098
  one property to update.
3885
4099
  properties:
@@ -3901,9 +4115,15 @@ components:
3901
4115
  description: If set, updates the display name of the budgeting account.
3902
4116
  x-updatable: true
3903
4117
  locale:
3904
- type: string
3905
- description: If set, updates the locale used for formatting dates and
3906
- numbers in the Lunch Money app.
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).
3907
4127
  x-updatable: true
3908
4128
  auto_create_category_rules:
3909
4129
  type: boolean
@@ -3915,15 +4135,70 @@ components:
3915
4135
  description: If set, updates whether suggested transaction rules are
3916
4136
  created automatically.
3917
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
+ budgeting 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 budgeting account. Must identify a
4166
+ manual account returned by
4167
+ [GET /manual_accounts](#tag/manual_accounts/GET/manual_accounts) for
4168
+ the current budgeting 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 budgeting account. Include at least one property
4181
+ to update.
4182
+ properties:
3918
4183
  auto_review_transaction_on_update:
3919
4184
  type: boolean
3920
4185
  description: If set, updates whether transactions are marked as reviewed
3921
- when updated.
4186
+ when their date, category, payee, amount, account, or notes are
4187
+ changed.
3922
4188
  x-updatable: true
3923
4189
  auto_review_transaction_on_creation:
3924
4190
  type: boolean
3925
- description: If set, updates whether transactions are marked as reviewed
3926
- when created.
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 budgeting
4199
+ account. Must identify a manual account returned by
4200
+ [GET /manual_accounts](#tag/manual_accounts/GET/manual_accounts) for
4201
+ the current budgeting account. Set to `null` to clear the selection.
3927
4202
  x-updatable: true
3928
4203
 
3929
4204
  userSettingsObject:
@@ -3999,6 +4274,7 @@ components:
3999
4274
  x-internal: true
4000
4275
  type: object
4001
4276
  additionalProperties: false
4277
+ minProperties: 1
4002
4278
  description: Request body for updating user settings. Include at least one
4003
4279
  property to update.
4004
4280
  properties:
@@ -4822,22 +5098,10 @@ components:
4822
5098
  securitySchemes:
4823
5099
  bearerSecurity:
4824
5100
  type: http
4825
- # TODO Make this shorter?
4826
- # description: The Lunch Money API uses API keys to authenticate requests. To use
4827
- # the v1 API you can view and manage your API keys on the [developers page
4828
- # in the Lunch Money app](https://my.lunchmoney.app/developers). <p> To
4829
- # interact with the Static Mock Server simply enter an API key of 11
4830
- # characters or more. <p> To interact with the v2 service implemented on
4831
- # top of the v1 API paste in a real API token associated with a Lunch
4832
- # Money Budget.
4833
- description: To interact with the Static Mock Server simply enter an API
4834
- key of 11 characters or more.
5101
+ description: >-
5102
+ Required for the LIVE server. Optional for MOCK.
4835
5103
  scheme: bearer
4836
5104
  bearerFormat: JWT
4837
- cookieAuth:
4838
- type: apiKey
4839
- in: cookie
4840
- name: _lm_access_token
4841
5105
 
4842
5106
  paths:
4843
5107
  /me:
@@ -4847,11 +5111,14 @@ paths:
4847
5111
  summary: Get current user
4848
5112
  description: |-
4849
5113
  Get details about the user associated with the supplied authorization
4850
- token.<p> For account- and user-level preferences, prefer
4851
- [/me/account/settings](#tag/me/GET/me/account/settings) and
4852
- [/me/user/settings](#tag/me/GET/me/user/settings). Properties such as
4853
- `primary_currency` and `budget_name` remain on this response for
4854
- backwards compatibility.
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 budgeting account.
5120
+ Properties such as `primary_currency` and `budget_name` remain on this
5121
+ response for backwards compatibility.
4855
5122
  operationId: getMe
4856
5123
  parameters: []
4857
5124
  responses:
@@ -4880,8 +5147,9 @@ paths:
4880
5147
  tags:
4881
5148
  - me
4882
5149
  summary: Get account settings
4883
- description: Returns account-level settings for the budgeting
4884
- account associated with the authorized API token.
5150
+ description: >-
5151
+ Returns settings for the current budgeting account. These settings apply
5152
+ regardless of which user is accessing the account.
4885
5153
  operationId: getAccountSettings
4886
5154
  responses:
4887
5155
  "200":
@@ -4900,8 +5168,7 @@ paths:
4900
5168
  locale: en-US
4901
5169
  auto_create_category_rules: true
4902
5170
  auto_create_suggested_transaction_rules: true
4903
- auto_review_transaction_on_update: true
4904
- auto_review_transaction_on_creation: true
5171
+ include_pending_in_totals: true
4905
5172
  "401":
4906
5173
  $ref: "#/components/responses/unauthorizedToken"
4907
5174
  "429":
@@ -4914,11 +5181,10 @@ paths:
4914
5181
  summary: Update account settings
4915
5182
  description: |-
4916
5183
  Updates account-level settings for the budgeting account
4917
- associated with the authorized API token.<p> You may submit the response from a
4918
- `GET /me/account/settings` as the request body; however, only certain
4919
- properties can be updated.<p> It is also possible to provide only the
4920
- properties to be updated in the request body, as long as the request
4921
- includes at least one updatable property.
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.
4922
5188
  operationId: updateAccountSettings
4923
5189
  requestBody:
4924
5190
  required: true
@@ -4933,7 +5199,7 @@ paths:
4933
5199
  Update automation preferences:
4934
5200
  value:
4935
5201
  auto_create_category_rules: false
4936
- auto_review_transaction_on_creation: false
5202
+ include_pending_in_totals: false
4937
5203
  responses:
4938
5204
  "200":
4939
5205
  description: Account settings updated successfully
@@ -4958,8 +5224,10 @@ paths:
4958
5224
  tags:
4959
5225
  - me
4960
5226
  summary: Get user settings
4961
- description: Returns user-level display and formatting preferences for the
4962
- user associated with the authorized API token.
5227
+ description: >-
5228
+ Returns display and formatting preferences for the authorized user.
5229
+ These settings apply across every budgeting account the user owns or
5230
+ collaborates on.
4963
5231
  operationId: getUserSettings
4964
5232
  responses:
4965
5233
  "200":
@@ -4990,11 +5258,10 @@ paths:
4990
5258
  summary: Update user settings
4991
5259
  description: |-
4992
5260
  Updates user-level display and formatting preferences for the user
4993
- associated with the authorized API token.<p> You may submit the response
4994
- from a `GET /me/user/settings` as the request body; however, only
4995
- certain properties can be updated.<p> It is also possible to provide
4996
- only the properties to be updated in the request body, as long as the
4997
- request includes at least one updatable property.<p> Updating
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
4998
5265
  `show_debits_as_negative` affects display in the Lunch Money app only.
4999
5266
  Amount fields in API responses always use positive values for debits and
5000
5267
  negative values for credits.
@@ -5034,6 +5301,88 @@ paths:
5034
5301
  $ref: "#/components/responses/rateLimited"
5035
5302
  "500":
5036
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
+ budgeting account. These settings do not affect other users or the
5312
+ authorized user's settings in other budgeting accounts.
5313
+ operationId: getUserAccountSettings
5314
+ responses:
5315
+ "200":
5316
+ description: Settings for the authorized user in the current budgeting
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
+ budgeting 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"
5037
5386
  /summary:
5038
5387
  get:
5039
5388
  tags:
@@ -6281,12 +6630,9 @@ paths:
6281
6630
  tags:
6282
6631
  - crypto-manual
6283
6632
  summary: Get all supported cryptocurrencies
6284
- description: >
6633
+ description: |-
6285
6634
  Retrieve the list of cryptocurrencies currently supported for manual tracking.<p>
6286
-
6287
- When creating a new manual crypto balance via `POST /crypto/manual`, the
6288
- `symbol` you specify must match the `symbol` of one of the entries
6289
- 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.
6290
6636
  operationId: getAllCryptocurrencies
6291
6637
  responses:
6292
6638
  "200":
@@ -6324,16 +6670,9 @@ paths:
6324
6670
  - crypto-manual
6325
6671
  summary: Add a new supported cryptocurrency
6326
6672
  operationId: createCryptocurrency
6327
- description: >-
6673
+ description: |-
6328
6674
  Adds a new cryptocurrency to the supported manual-crypto list.<br><br>
6329
-
6330
- Lunch Money uses [CoinGecko](https://www.coingecko.com/us/coins/ethereum)
6331
- to convert crypto balances to the user's primary currency. Users add a
6332
- new supported cryptocurrency by submitting a CoinGecko coin-page URL.
6333
- The server validates the URL, extracts the id from `/coins/{id}`,
6334
- checks for an existing supported `coingecko_id`, validates the id
6335
- against CoinGecko, then confirms the resolved symbol is not already
6336
- 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.
6337
6676
  requestBody:
6338
6677
  required: true
6339
6678
  content:
@@ -6412,8 +6751,8 @@ paths:
6412
6751
  tags:
6413
6752
  - crypto-manual
6414
6753
  summary: Get all manual crypto balances
6415
- description: Retrieve all manually managed crypto balances associated with
6416
- the user's account.
6754
+ description: |-
6755
+ Retrieve all manually managed crypto balances associated with the user's account.
6417
6756
  operationId: getAllCryptoManual
6418
6757
  responses:
6419
6758
  "200":
@@ -6447,11 +6786,9 @@ paths:
6447
6786
  tags:
6448
6787
  - crypto-manual
6449
6788
  summary: Create a manual crypto balance
6450
- description: >-
6789
+ description: |-
6451
6790
  Create a manually managed crypto asset.<br><br>
6452
-
6453
- If `display_name` is `null`, clients may derive one from
6454
- `institution_name` + `name`.
6791
+ If `display_name` is `null`, clients may derive one from `institution_name` + `name`.
6455
6792
  operationId: createCryptoManual
6456
6793
  requestBody:
6457
6794
  required: true
@@ -6536,7 +6873,8 @@ paths:
6536
6873
  tags:
6537
6874
  - crypto-manual
6538
6875
  summary: Get a single manual crypto balance
6539
- description: Retrieve a single manually managed crypto balance by ID.
6876
+ description: |-
6877
+ Retrieve a single manually managed crypto balance by ID.
6540
6878
  operationId: getCryptoManualById
6541
6879
  parameters:
6542
6880
  - name: id
@@ -6604,11 +6942,9 @@ paths:
6604
6942
  tags:
6605
6943
  - crypto-manual
6606
6944
  summary: Update a manual crypto balance
6607
- description: >-
6945
+ description: |-
6608
6946
  Modify a manually managed crypto balance.<br><br>
6609
-
6610
- You may submit the response from `GET /crypto/manual/{id}` as the request body. System-defined properties
6611
- 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.
6612
6948
  operationId: updateCryptoManual
6613
6949
  parameters:
6614
6950
  - name: id
@@ -6705,10 +7041,8 @@ paths:
6705
7041
  tags:
6706
7042
  - crypto-manual
6707
7043
  summary: Delete a manual crypto balance
6708
- description: Delete a single manually managed crypto asset by ID.<p> If
6709
- this crypto asset has a balance history, and you do not explicitly set
6710
- the query parameter`keep_history`, a 422 response will be returned
6711
- 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`.
6712
7046
  operationId: deleteCryptoManual
6713
7047
  parameters:
6714
7048
  - name: id
@@ -6773,8 +7107,8 @@ paths:
6773
7107
  tags:
6774
7108
  - crypto-synced
6775
7109
  summary: Get all synced crypto accounts
6776
- description: Retrieves all synced crypto accounts
6777
- associated with the user's account.
7110
+ description: |-
7111
+ Retrieves all synced crypto accounts associated with the user's account.
6778
7112
  operationId: getAllCryptoSynced
6779
7113
  responses:
6780
7114
  "200":
@@ -6836,8 +7170,8 @@ paths:
6836
7170
  tags:
6837
7171
  - crypto-synced
6838
7172
  summary: Get a single synced crypto account
6839
- description: Retrieves the synced crypto account and all nested balances
6840
- 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.
6841
7175
  operationId: getCryptoSyncedById
6842
7176
  parameters:
6843
7177
  - name: id
@@ -6917,8 +7251,8 @@ paths:
6917
7251
  tags:
6918
7252
  - crypto-synced
6919
7253
  summary: Get a synced crypto balance by symbol
6920
- description: Retrieves a single balance from the specified synced crypto
6921
- account using the crypto symbol.
7254
+ description: |-
7255
+ Retrieves a single balance from the specified synced crypto account using the crypto symbol.
6922
7256
  operationId: getCryptoSyncedBalanceBySymbol
6923
7257
  parameters:
6924
7258
  - name: id
@@ -6997,8 +7331,8 @@ paths:
6997
7331
  tags:
6998
7332
  - crypto-synced
6999
7333
  summary: Refresh balances for a synced crypto account
7000
- description: Trigger a balance refresh for the specified synced crypto
7001
- 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.
7002
7336
  operationId: refreshCryptoSynced
7003
7337
  parameters:
7004
7338
  - name: id
@@ -7067,51 +7401,55 @@ paths:
7067
7401
  tags:
7068
7402
  - balance_history
7069
7403
  summary: Get balance history
7070
- description: >-
7071
- Retrieve historical balance entries.<br><br>
7072
-
7073
- Balance history is monthly. When `start_date` and `end_date` are both provided,
7074
- they must be first-of-month dates. `start_date` must not be in the future,
7075
- while `end_date` may be in the future. If one of `start_date` or `end_date`
7076
- is provided, the other is required. If neither is provided, all available
7077
- balance history is returned.<br><br>
7078
-
7079
- The response groups entries by source account. Each item in
7080
- `balance_history` contains a `source` object plus a `balances` array
7081
- containing one balance entry per month in the requested range, or all
7082
- stored entries when no range is provided.<br><br>
7083
-
7084
- Historical entries for accounts that have been deleted may still
7085
- be returned. These entries use `source.type: deleted` and include
7086
- `deleted_account_id`, archived display fields, and account metadata on the
7087
- `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})
7088
7416
  operationId: getBalanceHistory
7089
7417
  parameters:
7090
- - name: start_date
7418
+ - name: start_month
7091
7419
  in: query
7092
- 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.
7093
7425
  required: false
7094
7426
  schema:
7095
7427
  type: string
7096
- format: date
7428
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
7097
7429
  examples:
7098
7430
  range start:
7099
- summary: Start date
7100
- value: "2026-01-01"
7101
- - name: end_date
7431
+ summary: Start month
7432
+ value: "2026-01"
7433
+ - name: end_month
7102
7434
  in: query
7103
- 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`.
7104
7442
  required: false
7105
7443
  schema:
7106
7444
  type: string
7107
- format: date
7445
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
7108
7446
  examples:
7109
7447
  range end:
7110
- summary: End date
7111
- value: "2026-03-01"
7448
+ summary: End month
7449
+ value: "2026-03"
7112
7450
  responses:
7113
7451
  "200":
7114
- description: Historical balance entries for the requested date range
7452
+ description: Monthly balance history for the requested month range
7115
7453
  content:
7116
7454
  application/json:
7117
7455
  schema:
@@ -7124,14 +7462,16 @@ paths:
7124
7462
  type: manual
7125
7463
  manual_account_id: 119807
7126
7464
  balances:
7127
- - id: 101
7128
- date: "2026-01-01"
7465
+ - type: historical
7466
+ id: 101
7467
+ month: "2026-01"
7129
7468
  balance: "41000.0000"
7130
7469
  currency: usd
7131
7470
  to_base: 41000
7132
7471
  crypto_balance: null
7133
- - id: 102
7134
- date: "2026-02-01"
7472
+ - type: historical
7473
+ id: 102
7474
+ month: "2026-02"
7135
7475
  balance: "41211.8000"
7136
7476
  currency: usd
7137
7477
  to_base: 41211.8
@@ -7140,8 +7480,9 @@ paths:
7140
7480
  type: plaid
7141
7481
  plaid_account_id: 119808
7142
7482
  balances:
7143
- - id: 103
7144
- date: "2026-01-01"
7483
+ - type: historical
7484
+ id: 103
7485
+ month: "2026-01"
7145
7486
  balance: "5498.2800"
7146
7487
  currency: usd
7147
7488
  to_base: 5498.28
@@ -7151,8 +7492,9 @@ paths:
7151
7492
  crypto_manual_id: 22001
7152
7493
  symbol: btc
7153
7494
  balances:
7154
- - id: 104
7155
- date: "2026-01-01"
7495
+ - type: historical
7496
+ id: 104
7497
+ month: "2026-01"
7156
7498
  balance: "53124.7200"
7157
7499
  currency: usd
7158
7500
  to_base: 53124.72
@@ -7162,8 +7504,9 @@ paths:
7162
7504
  crypto_synced_id: 33004
7163
7505
  symbol: btc
7164
7506
  balances:
7165
- - id: 105
7166
- date: "2026-01-01"
7507
+ - type: historical
7508
+ id: 105
7509
+ month: "2026-01"
7167
7510
  balance: "6231.2800"
7168
7511
  currency: usd
7169
7512
  to_base: 6231.28
@@ -7179,12 +7522,34 @@ paths:
7179
7522
  mask: "1234"
7180
7523
  symbol: null
7181
7524
  balances:
7182
- - id: 106
7183
- date: "2026-01-01"
7525
+ - type: historical
7526
+ id: 106
7527
+ month: "2026-01"
7184
7528
  balance: "1250.0000"
7185
7529
  currency: usd
7186
7530
  to_base: 1250
7187
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
7188
7553
  manual account history:
7189
7554
  value:
7190
7555
  balance_history:
@@ -7192,14 +7557,16 @@ paths:
7192
7557
  type: manual
7193
7558
  manual_account_id: 119807
7194
7559
  balances:
7195
- - id: 201
7196
- date: "2026-01-01"
7560
+ - type: historical
7561
+ id: 201
7562
+ month: "2026-01"
7197
7563
  balance: "41000.0000"
7198
7564
  currency: usd
7199
7565
  to_base: 41000
7200
7566
  crypto_balance: null
7201
- - id: 202
7202
- date: "2026-02-01"
7567
+ - type: historical
7568
+ id: 202
7569
+ month: "2026-02"
7203
7570
  balance: "41211.8000"
7204
7571
  currency: usd
7205
7572
  to_base: 41211.8
@@ -7211,8 +7578,9 @@ paths:
7211
7578
  type: plaid
7212
7579
  plaid_account_id: 119808
7213
7580
  balances:
7214
- - id: 301
7215
- date: "2026-02-01"
7581
+ - type: historical
7582
+ id: 301
7583
+ month: "2026-02"
7216
7584
  balance: "5498.2800"
7217
7585
  currency: usd
7218
7586
  to_base: 5498.28
@@ -7225,8 +7593,9 @@ paths:
7225
7593
  crypto_synced_id: 33004
7226
7594
  symbol: btc
7227
7595
  balances:
7228
- - id: 401
7229
- date: "2026-02-01"
7596
+ - type: historical
7597
+ id: 401
7598
+ month: "2026-02"
7230
7599
  balance: "6231.2800"
7231
7600
  currency: usd
7232
7601
  to_base: 6231.28
@@ -7245,8 +7614,9 @@ paths:
7245
7614
  mask: "1234"
7246
7615
  symbol: null
7247
7616
  balances:
7248
- - id: 501
7249
- date: "2026-01-01"
7617
+ - type: historical
7618
+ id: 501
7619
+ month: "2026-01"
7250
7620
  balance: "1250.0000"
7251
7621
  currency: usd
7252
7622
  to_base: 1250
@@ -7258,26 +7628,31 @@ paths:
7258
7628
  schema:
7259
7629
  $ref: "#/components/schemas/errorResponseObject"
7260
7630
  examples:
7261
- missing paired date:
7631
+ missing paired month:
7262
7632
  value:
7263
7633
  message: Request Validation Failure
7264
7634
  errors:
7265
- - 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."
7266
7636
  invalid range:
7267
7637
  value:
7268
7638
  message: Request Validation Failure
7269
7639
  errors:
7270
- - errMsg: "`start_date` must be before or equal to `end_date`."
7271
- 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:
7272
7647
  value:
7273
7648
  message: Request Validation Failure
7274
7649
  errors:
7275
- - errMsg: "`start_date` and `end_date` must both be the first day of a month."
7276
- future start date:
7650
+ - errMsg: "`start_month` must not be in the future."
7651
+ future end month:
7277
7652
  value:
7278
7653
  message: Request Validation Failure
7279
7654
  errors:
7280
- - errMsg: "`start_date` must not be in the future."
7655
+ - errMsg: "`end_month` must not be in the future."
7281
7656
  "401":
7282
7657
  $ref: "#/components/responses/unauthorizedToken"
7283
7658
  "429":
@@ -7289,23 +7664,16 @@ paths:
7289
7664
  tags:
7290
7665
  - balance_history
7291
7666
  summary: Get balance history for an account
7292
- description: >-
7293
- Retrieve historical balance entries for one manual, Plaid, manual crypto,
7294
- or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
7295
-
7296
- The `account_type` path parameter identifies the type of account and the
7297
- `account_id` path parameter identifies the specific id for that account type.<br><br>
7298
-
7299
- When `start_date` and `end_date` are both provided, they must be first-of-month
7300
- dates. `start_date` must not be in the future, while `end_date` may be in the future.
7301
- If one of `start_date` or `end_date` is provided, the other is required. If neither is
7302
- 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).
7303
7671
  operationId: getBalanceHistoryForAccount
7304
7672
  parameters:
7305
7673
  - name: account_type
7306
7674
  in: path
7307
7675
  required: true
7308
- 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`.
7309
7677
  schema:
7310
7678
  type: string
7311
7679
  enum: [manual, plaid, crypto_manual, deleted]
@@ -7316,23 +7684,27 @@ paths:
7316
7684
  schema:
7317
7685
  type: integer
7318
7686
  format: int32
7319
- - name: start_date
7687
+ - name: start_month
7320
7688
  in: query
7321
- 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).
7322
7692
  required: false
7323
7693
  schema:
7324
7694
  type: string
7325
- format: date
7326
- - name: end_date
7695
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
7696
+ - name: end_month
7327
7697
  in: query
7328
- 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).
7329
7701
  required: false
7330
7702
  schema:
7331
7703
  type: string
7332
- format: date
7704
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
7333
7705
  responses:
7334
7706
  "200":
7335
- description: Historical balance entries for the requested source
7707
+ description: Monthly balance history for the requested source
7336
7708
  content:
7337
7709
  application/json:
7338
7710
  schema:
@@ -7345,14 +7717,16 @@ paths:
7345
7717
  type: manual
7346
7718
  manual_account_id: 119807
7347
7719
  balances:
7348
- - id: 201
7349
- date: "2026-01-01"
7720
+ - type: historical
7721
+ id: 201
7722
+ month: "2026-01"
7350
7723
  balance: "41000.0000"
7351
7724
  currency: usd
7352
7725
  to_base: 41000
7353
7726
  crypto_balance: null
7354
- - id: 202
7355
- date: "2026-02-01"
7727
+ - type: historical
7728
+ id: 202
7729
+ month: "2026-02"
7356
7730
  balance: "41211.8000"
7357
7731
  currency: usd
7358
7732
  to_base: 41211.8
@@ -7371,8 +7745,9 @@ paths:
7371
7745
  mask: "1234"
7372
7746
  symbol: null
7373
7747
  balances:
7374
- - id: 501
7375
- date: "2026-01-01"
7748
+ - type: historical
7749
+ id: 501
7750
+ month: "2026-01"
7376
7751
  balance: "1250.0000"
7377
7752
  currency: usd
7378
7753
  to_base: 1250
@@ -7384,16 +7759,16 @@ paths:
7384
7759
  schema:
7385
7760
  $ref: "#/components/schemas/errorResponseObject"
7386
7761
  examples:
7387
- missing paired date:
7762
+ missing paired month:
7388
7763
  value:
7389
7764
  message: Request Validation Failure
7390
7765
  errors:
7391
- - errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
7392
- invalid range:
7766
+ - errMsg: "`start_month` and `end_month` must either both be provided or both be omitted."
7767
+ invalid month format:
7393
7768
  value:
7394
- message: Request Validation Failure
7769
+ message: Invalid Request Parameters
7395
7770
  errors:
7396
- - 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."
7397
7772
  "401":
7398
7773
  $ref: "#/components/responses/unauthorizedToken"
7399
7774
  "404":
@@ -7421,37 +7796,20 @@ paths:
7421
7796
  tags:
7422
7797
  - balance_history
7423
7798
  summary: Upsert balance history for an account
7424
- description: >-
7425
- Upsert one or more historical balance entries for a single manual, Plaid,
7426
- manual crypto, or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
7427
-
7428
- The `account_type` path parameter identifies the type of account and the
7429
- `account_id` path parameter identifies the specific id for that account type.<br><br>
7430
-
7431
- Submit one or more entries in the `balances` array. Each entry must specify
7432
- a `date` and `balance` value.<br><br>
7433
-
7434
- Balance history is monthly. Each entry's `date` must be the first day of
7435
- a month and must be in a past month.<br><br>
7436
-
7437
- `currency` may be provided for any balance entry. If omitted, it defaults
7438
- to the account currency for manual/Plaid accounts, or the user's primary
7439
- currency for crypto/deleted accounts.<br><br>
7440
-
7441
- `symbol` may only be set when `account_type` is `crypto_manual` or
7442
- `crypto_synced`. It is optional for `crypto_manual` accounts and tolerated
7443
- for `deleted` accounts.<br><br>
7444
-
7445
- `crypto_balance` may be provided for `crypto_manual`, `crypto_synced`, and
7446
- `deleted` accounts, and is invalid for `manual` or `plaid` accounts.<br><br>
7447
-
7448
- 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.
7449
7807
  operationId: upsertBalanceHistoryForAccount
7450
7808
  parameters:
7451
7809
  - name: account_type
7452
7810
  in: path
7453
7811
  required: true
7454
- 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`.
7455
7813
  schema:
7456
7814
  type: string
7457
7815
  enum: [manual, plaid, crypto_manual, deleted]
@@ -7472,21 +7830,21 @@ paths:
7472
7830
  manual account bulk upsert:
7473
7831
  value:
7474
7832
  balances:
7475
- - date: "2026-03-01"
7833
+ - month: "2026-03"
7476
7834
  balance: "41500.0000"
7477
- - date: "2026-04-01"
7835
+ - month: "2026-04"
7478
7836
  balance: "41625.5000"
7479
7837
  crypto manual balance with symbol:
7480
7838
  value:
7481
7839
  balances:
7482
- - date: "2026-03-01"
7840
+ - month: "2026-03"
7483
7841
  balance: "56011.1200"
7484
7842
  symbol: btc
7485
7843
  crypto_balance: "0.852341920145782301"
7486
7844
  deleted account bulk upsert:
7487
7845
  value:
7488
7846
  balances:
7489
- - date: "2026-03-01"
7847
+ - month: "2026-03"
7490
7848
  symbol: btc
7491
7849
  crypto_balance: "0.020000000000000000"
7492
7850
  currency: usd
@@ -7495,55 +7853,59 @@ paths:
7495
7853
  value:
7496
7854
  balances:
7497
7855
  - id: 601
7498
- date: "2026-03-01"
7856
+ month: "2026-03"
7499
7857
  balance: "41500.0000"
7500
7858
  currency: usd
7501
7859
  to_base: 41500
7502
7860
  crypto_balance: null
7503
7861
  responses:
7504
7862
  "200":
7505
- description: Returns the modified balance entries only. Other historical
7506
- 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`.
7507
7866
  content:
7508
7867
  application/json:
7509
7868
  schema:
7510
7869
  $ref: "#/components/schemas/balanceHistoryAccountObject"
7511
7870
  examples:
7512
7871
  manual account bulk upsert:
7513
- summary: Two upserted rows returned (not full account history)
7872
+ summary: Two upserted entries returned (not full account history)
7514
7873
  value:
7515
7874
  source:
7516
7875
  type: manual
7517
7876
  manual_account_id: 119807
7518
7877
  balances:
7519
- - id: 601
7520
- date: "2026-03-01"
7878
+ - type: historical
7879
+ id: 601
7880
+ month: "2026-03"
7521
7881
  balance: "41500.0000"
7522
7882
  currency: usd
7523
7883
  to_base: 41500
7524
7884
  crypto_balance: null
7525
- - id: 602
7526
- date: "2026-04-01"
7885
+ - type: historical
7886
+ id: 602
7887
+ month: "2026-04"
7527
7888
  balance: "41625.5000"
7528
7889
  currency: usd
7529
7890
  to_base: 41625.5
7530
7891
  crypto_balance: null
7531
7892
  crypto manual balance with symbol:
7532
- summary: Single upserted row returned
7893
+ summary: Single upserted entry returned
7533
7894
  value:
7534
7895
  source:
7535
7896
  type: crypto_manual
7536
7897
  crypto_manual_id: 22001
7537
7898
  symbol: btc
7538
7899
  balances:
7539
- - id: 603
7540
- date: "2026-03-01"
7900
+ - type: historical
7901
+ id: 603
7902
+ month: "2026-03"
7541
7903
  balance: "56011.1200"
7542
7904
  currency: usd
7543
7905
  to_base: 56011.12
7544
7906
  crypto_balance: "0.852341920145782301"
7545
7907
  deleted account bulk upsert:
7546
- summary: Single upserted row returned
7908
+ summary: Single upserted entry returned
7547
7909
  value:
7548
7910
  source:
7549
7911
  type: deleted
@@ -7556,15 +7918,17 @@ paths:
7556
7918
  mask: "1234"
7557
7919
  symbol: btc
7558
7920
  balances:
7559
- - id: 504
7560
- date: "2026-03-01"
7921
+ - type: historical
7922
+ id: 504
7923
+ month: "2026-03"
7561
7924
  balance: "1255"
7562
7925
  currency: usd
7563
7926
  to_base: 1255
7564
7927
  crypto_balance: "0.020000000000000000"
7565
7928
  "400":
7566
- description: Bad Request. The entire request is rejected if any row in
7567
- `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.
7568
7932
  content:
7569
7933
  application/json:
7570
7934
  schema:
@@ -7585,30 +7949,34 @@ paths:
7585
7949
  message: Invalid Request Body
7586
7950
  errors:
7587
7951
  - errMsg: "Invalid property 'foo' in request body."
7588
- 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:
7589
7958
  value:
7590
7959
  message: Request Validation Failure
7591
7960
  errors:
7592
- - errMsg: "`date` must be the first day of a month."
7961
+ - errMsg: "`month` must not be the current month."
7593
7962
  request_balances_index: 0
7594
- code: VALIDATION_ERROR
7595
- future date:
7963
+ future month:
7596
7964
  value:
7597
7965
  message: Request Validation Failure
7598
7966
  errors:
7599
- - errMsg: "`date` must be in a past month."
7967
+ - errMsg: "`month` must not be in the future."
7600
7968
  request_balances_index: 1
7601
7969
  crypto balance not allowed:
7602
7970
  value:
7603
7971
  message: Request Validation Failure
7604
7972
  errors:
7605
- - 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`."
7606
7974
  request_balances_index: 0
7607
- invalid row in bulk request:
7975
+ invalid entry in bulk request:
7608
7976
  value:
7609
7977
  message: Request Validation Failure
7610
7978
  errors:
7611
- - 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`."
7612
7980
  request_balances_index: 1
7613
7981
  "401":
7614
7982
  $ref: "#/components/responses/unauthorizedToken"
@@ -7630,15 +7998,14 @@ paths:
7630
7998
  tags:
7631
7999
  - balance_history
7632
8000
  summary: Delete all balance history for an account
7633
- description: >-
7634
- Delete all historical balance entries for a single manual, Plaid,
7635
- 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}).
7636
8003
  operationId: deleteBalanceHistoryForAccount
7637
8004
  parameters:
7638
8005
  - name: account_type
7639
8006
  in: path
7640
8007
  required: true
7641
- 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`.
7642
8009
  schema:
7643
8010
  type: string
7644
8011
  enum: [manual, plaid, crypto_manual, deleted]
@@ -7675,16 +8042,10 @@ paths:
7675
8042
  tags:
7676
8043
  - balance_history
7677
8044
  summary: Get balance history for a synced crypto symbol
7678
- description: >-
7679
- Retrieve historical balance entries for a single synced crypto symbol stream.<br><br>
7680
-
7681
- Use the `crypto_synced` account id together with a `symbol` path parameter
7682
- to select one balance stream within that synced crypto account.<br><br>
7683
-
7684
- When `start_date` and `end_date` are both provided, they must be first-of-month
7685
- dates. `start_date` must not be in the future, while `end_date` may be in the future.
7686
- If one of `start_date` or `end_date` is provided, the other is required. If neither is
7687
- 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).
7688
8049
  operationId: getBalanceHistoryForCryptoSynced
7689
8050
  parameters:
7690
8051
  - name: account_id
@@ -7702,23 +8063,27 @@ paths:
7702
8063
  type: string
7703
8064
  minLength: 1
7704
8065
  maxLength: 25
7705
- - name: start_date
8066
+ - name: start_month
7706
8067
  in: query
7707
- 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).
7708
8071
  required: false
7709
8072
  schema:
7710
8073
  type: string
7711
- format: date
7712
- - name: end_date
8074
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
8075
+ - name: end_month
7713
8076
  in: query
7714
- 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).
7715
8080
  required: false
7716
8081
  schema:
7717
8082
  type: string
7718
- format: date
8083
+ pattern: '^\d{4}-(0[1-9]|1[0-2])$'
7719
8084
  responses:
7720
8085
  "200":
7721
- description: Historical balance entries for the synced crypto symbol stream
8086
+ description: Monthly balance history for the synced crypto symbol stream
7722
8087
  content:
7723
8088
  application/json:
7724
8089
  schema:
@@ -7730,8 +8095,9 @@ paths:
7730
8095
  crypto_synced_id: 33004
7731
8096
  symbol: btc
7732
8097
  balances:
7733
- - id: 401
7734
- date: "2026-02-01"
8098
+ - type: historical
8099
+ id: 401
8100
+ month: "2026-02"
7735
8101
  balance: "6231.2800"
7736
8102
  currency: usd
7737
8103
  to_base: 6231.28
@@ -7743,16 +8109,16 @@ paths:
7743
8109
  schema:
7744
8110
  $ref: "#/components/schemas/errorResponseObject"
7745
8111
  examples:
7746
- missing paired date:
8112
+ missing paired month:
7747
8113
  value:
7748
8114
  message: Request Validation Failure
7749
8115
  errors:
7750
- - errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
7751
- invalid range:
8116
+ - errMsg: "`start_month` and `end_month` must either both be provided or both be omitted."
8117
+ invalid month format:
7752
8118
  value:
7753
- message: Request Validation Failure
8119
+ message: Invalid Request Parameters
7754
8120
  errors:
7755
- - 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."
7756
8122
  "401":
7757
8123
  $ref: "#/components/responses/unauthorizedToken"
7758
8124
  "404":
@@ -7780,28 +8146,14 @@ paths:
7780
8146
  tags:
7781
8147
  - balance_history
7782
8148
  summary: Upsert balance history for a synced crypto symbol
7783
- description: >-
7784
- Upsert one or more historical balance entries for a single synced crypto
7785
- symbol stream.<br><br>
7786
-
8149
+ description: |-
8150
+ Upsert one or more historical balance entries for a single synced crypto symbol stream.<br><br>
7787
8151
  The path identifies both the synced crypto account and the symbol being updated.<br><br>
7788
-
7789
- Submit one or more entries in the `balances` array. Each entry must specify
7790
- a `date` and `balance` value.<br><br>
7791
-
7792
- Balance history is monthly. Each entry's `date` must be the first day of
7793
- a month and must be in a past month.<br><br>
7794
-
7795
- The request body may include an optional `symbol` on each balance entry. If
7796
- provided, it must match the `symbol` path parameter. Omit `symbol` to use
7797
- the path value.<br><br>
7798
-
7799
- `currency` may be provided for any balance entry. If omitted, it defaults
7800
- to the user's primary currency for synced crypto balances.<br><br>
7801
-
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>
7802
8155
  `crypto_balance` may be provided for synced crypto balances.<br><br>
7803
-
7804
- 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.
7805
8157
  operationId: upsertBalanceHistoryForCryptoSynced
7806
8158
  parameters:
7807
8159
  - name: account_id
@@ -7829,44 +8181,49 @@ paths:
7829
8181
  synced crypto bulk upsert:
7830
8182
  value:
7831
8183
  balances:
7832
- - date: "2026-03-01"
8184
+ - month: "2026-03"
7833
8185
  balance: "6400.0000"
7834
8186
  crypto_balance: "0.100020003000400050"
7835
- - date: "2026-04-01"
8187
+ - month: "2026-04"
7836
8188
  balance: "6500.0000"
7837
8189
  crypto_balance: "0.100020003000400050"
7838
8190
  responses:
7839
8191
  "200":
7840
- description: Returns the modified balance entries only. Other historical
7841
- 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`.
7842
8196
  content:
7843
8197
  application/json:
7844
8198
  schema:
7845
8199
  $ref: "#/components/schemas/balanceHistoryAccountObject"
7846
8200
  examples:
7847
8201
  synced crypto bulk upsert:
7848
- summary: Two upserted rows returned (not full symbol history)
8202
+ summary: Two upserted entries returned (not full symbol history)
7849
8203
  value:
7850
8204
  source:
7851
8205
  type: crypto_synced
7852
8206
  crypto_synced_id: 33004
7853
8207
  symbol: btc
7854
8208
  balances:
7855
- - id: 604
7856
- date: "2026-03-01"
8209
+ - type: historical
8210
+ id: 604
8211
+ month: "2026-03"
7857
8212
  balance: "6400.0000"
7858
8213
  currency: usd
7859
8214
  to_base: 6400
7860
8215
  crypto_balance: "0.100020003000400050"
7861
- - id: 605
7862
- date: "2026-04-01"
8216
+ - type: historical
8217
+ id: 605
8218
+ month: "2026-04"
7863
8219
  balance: "6500.0000"
7864
8220
  currency: usd
7865
8221
  to_base: 6500
7866
8222
  crypto_balance: "0.100020003000400050"
7867
8223
  "400":
7868
- description: Bad Request. The entire request is rejected if any row in
7869
- `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.
7870
8227
  content:
7871
8228
  application/json:
7872
8229
  schema:
@@ -7882,17 +8239,22 @@ paths:
7882
8239
  message: Invalid Request Body
7883
8240
  errors:
7884
8241
  - errMsg: "Invalid value for property 'balances'. Array must contain at least 1 element(s)"
7885
- 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:
7886
8248
  value:
7887
8249
  message: Request Validation Failure
7888
8250
  errors:
7889
- - errMsg: "`date` must be the first day of a month."
8251
+ - errMsg: "`month` must not be the current month."
7890
8252
  request_balances_index: 0
7891
- future date:
8253
+ future month:
7892
8254
  value:
7893
8255
  message: Request Validation Failure
7894
8256
  errors:
7895
- - errMsg: "`date` must be in a past month."
8257
+ - errMsg: "`month` must not be in the future."
7896
8258
  request_balances_index: 1
7897
8259
  symbol mismatch:
7898
8260
  value:
@@ -7900,9 +8262,9 @@ paths:
7900
8262
  errors:
7901
8263
  - errMsg: "`symbol` in request body (doge) does not match the path symbol (eth)."
7902
8264
  request_balances_index: 0
7903
- invalid row in bulk request:
8265
+ invalid entry in bulk request:
7904
8266
  value:
7905
- message: Request Validation Failure
8267
+ message: Invalid Request Body
7906
8268
  errors:
7907
8269
  - errMsg: "`balance` must be a valid numeric string or number."
7908
8270
  request_balances_index: 1
@@ -7933,11 +8295,9 @@ paths:
7933
8295
  tags:
7934
8296
  - balance_history
7935
8297
  summary: Delete all balance history for a synced crypto symbol
7936
- description: >-
8298
+ description: |-
7937
8299
  Delete all historical balance entries for a single synced crypto symbol stream.<br><br>
7938
-
7939
- The path identifies both the synced crypto account and the symbol whose
7940
- history should be deleted.
8300
+ The path identifies both the synced crypto account and the symbol whose history should be deleted.
7941
8301
  operationId: deleteBalanceHistoryForCryptoSynced
7942
8302
  parameters:
7943
8303
  - name: account_id
@@ -7979,14 +8339,14 @@ paths:
7979
8339
  tags:
7980
8340
  - balance_history
7981
8341
  summary: Delete a balance history entry
7982
- description: >-
7983
- 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.
7984
8344
  operationId: deleteBalanceHistoryEntry
7985
8345
  parameters:
7986
8346
  - name: id
7987
8347
  in: path
7988
8348
  required: true
7989
- description: Balance history row identifier to delete.
8349
+ description: Historical balance entry identifier to delete.
7990
8350
  schema:
7991
8351
  type: integer
7992
8352
  format: int32
@@ -8000,7 +8360,7 @@ paths:
8000
8360
  schema:
8001
8361
  $ref: "#/components/schemas/errorResponseObject"
8002
8362
  example:
8003
- message: Request Validation Failure
8363
+ message: Invalid Path Parameters
8004
8364
  errors:
8005
8365
  - errMsg: "Invalid value type for path parameter: 'id'. Expected 'number', received 'string'."
8006
8366
  "401":
@@ -8024,12 +8384,9 @@ paths:
8024
8384
  tags:
8025
8385
  - balance_history
8026
8386
  summary: Update details for a deleted account
8027
- description: >-
8387
+ description: |-
8028
8388
  Update archived metadata for a deleted balance history source.<br><br>
8029
-
8030
- Pass the `deleted` source id returned on `source.deleted_account_id`.
8031
- This endpoint updates the stored deleted-source metadata used for all
8032
- 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.
8033
8390
  operationId: updateBalanceHistoryDetails
8034
8391
  parameters:
8035
8392
  - name: account_id
@@ -9103,19 +9460,19 @@ paths:
9103
9460
  description: Sets the maximum number of transactions to return. If
9104
9461
  more match the filter criteria, the response will include a
9105
9462
  `has_more` attribute set to `true`. See
9106
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
9463
+ [Pagination](https://lunchmoney.dev/v2/pagination)
9107
9464
  - name: offset
9108
9465
  in: query
9109
9466
  schema:
9110
9467
  type: integer
9111
9468
  description: Sets the offset for the records returned. This is
9112
9469
  typically set automatically in the header. See
9113
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
9470
+ [Pagination](https://lunchmoney.dev/v2/pagination)
9114
9471
  responses:
9115
9472
  "200":
9116
9473
  description: Returns an array of transactions. <br><br>The `has_more`
9117
9474
  property is set to `true` if more transactions are available. See
9118
- [Pagination](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/pagination)
9475
+ [Pagination](https://lunchmoney.dev/v2/pagination)
9119
9476
  content:
9120
9477
  application/json:
9121
9478
  schema:
@@ -11339,9 +11696,8 @@ paths:
11339
11696
  - transactions (files)
11340
11697
  summary: Attach a file to a transaction
11341
11698
  operationId: attachFileToTransaction
11342
- description: >-
11343
- Attaches a file to a transaction. The file must be less than 10MB in size.<br><br>
11344
- 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.
11345
11701
  parameters:
11346
11702
  - name: transaction_id
11347
11703
  in: path
@@ -11424,8 +11780,8 @@ paths:
11424
11780
  /transactions/attachments/{file_id}:
11425
11781
  get:
11426
11782
  summary: Get a url to download a file attachment
11427
- description: Returns a signed url that can be used to download the file
11428
- attachment.
11783
+ description: |-
11784
+ Returns a signed url that can be used to download the file attachment.
11429
11785
  operationId: getTransactionAttachmentUrl
11430
11786
  tags:
11431
11787
  - transactions (files)
@@ -12320,4 +12676,3 @@ paths:
12320
12676
 
12321
12677
  security:
12322
12678
  - bearerSecurity: []
12323
- - cookieAuth: []