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