@lunch-money/v2-api-spec 2.10.0-preview.8 → 2.11.0-preview.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -73
- package/lunch-money-api-v2.yaml +1601 -203
- package/package.json +11 -5
- package/version-history.md +19 -2
- package/README.md.backup +0 -217
- package/update-urls.sh +0 -135
package/lunch-money-api-v2.yaml
CHANGED
|
@@ -2,52 +2,46 @@ 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.
|
|
5
|
+
Welcome to the Lunch Money v2 API reference. This is the **v2.11.0** spec.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
### Introduction
|
|
8
8
|
|
|
9
|
-
`https://
|
|
9
|
+
The API is available at `https://lunchmoney.dev/v2`. Get your access token from the [Lunch Money developers page](https://my.lunchmoney.app/developers).
|
|
10
10
|
|
|
11
|
-
<span class="red-text"><strong>
|
|
12
|
-
period and bugs may still exist. We strongly encourage users to use the mock service or create a test budget with sample data as the first step to interacting with the v2 API.</strong></span>
|
|
13
|
-
See the [Getting Started Guide](https://alpha.lunchmoney.dev/v2/getting-started) for more information on using a test budget.<p>
|
|
11
|
+
API calls can <span class="red-text"><strong>change or delete</strong></span> your data. Any changes you make are <span class="red-text"><strong>permanent</strong></span>, just like they would be if you made changes using the web or mobile app. Please refer to the [Getting Started Guide](https://lunchmoney.dev/v2/getting-started) before using the API.
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
**Static Mock Server**
|
|
16
14
|
|
|
17
|
-
|
|
15
|
+
Explore the API without an access token or risk to real data. Select **"Static Mock v2 Lunch Money API Server"** from the Server dropdown, then set your Bearer token to any string with 11 or more characters.
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
This will allow you to become familiar with the API without having to create an access token, and eliminates the possibility of changing real data. <p>
|
|
21
|
-
To access this endpoint, select the second endpoint in the "Server" dropdown to the right. When selected, you should see "Static Mock v2 Lunch Money API Server".<br>
|
|
22
|
-
When using this server, set your Bearer token to any string with 11 or more characters.
|
|
17
|
+
**Client Libraries & SDKs**
|
|
23
18
|
|
|
24
|
-
|
|
19
|
+
An official TypeScript SDK is available on [NPM](https://www.npmjs.com/package/@lunch-money/v2-api-spec) and [GitHub](https://github.com/lunch-money/lunch-money-js-v2). For Python or other languages, see [lunchmoney-clients](https://github.com/juftin/lunchmoney-clients) or generate a client from [this OpenAPI spec](/v2/openapi).
|
|
25
20
|
|
|
26
|
-
|
|
21
|
+
**Migrating from v1**
|
|
27
22
|
|
|
28
|
-
|
|
23
|
+
The v2 API is not backwards compatible with v1. See the [Migration Guide](https://lunchmoney.dev/v2/migration-guide) for details.
|
|
29
24
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
- [
|
|
34
|
-
- [
|
|
35
|
-
- [Migration Guide](https://
|
|
36
|
-
- [Rate Limits](https://
|
|
37
|
-
- [Current v1 Lunch Money API Documentation](https://lunchmoney.dev)
|
|
38
|
-
- [Awesome Lunch Money Projects](https://github.com/lunch-money/awesome-lunchmoney?tab=readme-ov-file)
|
|
25
|
+
**Useful links**
|
|
26
|
+
- [Developer Portal](https://lunchmoney.dev/v2/introduction)
|
|
27
|
+
- [Getting Started Guide](https://lunchmoney.dev/v2/getting-started)
|
|
28
|
+
- [v2 API Overview](https://lunchmoney.dev/v2/overview)
|
|
29
|
+
- [Version History](https://lunchmoney.dev/v2/version-history)
|
|
30
|
+
- [Migration Guide](https://lunchmoney.dev/v2/migration-guide)
|
|
31
|
+
- [Rate Limits](https://lunchmoney.dev/v2/rate-limits)
|
|
39
32
|
termsOfService: https://lunchmoney.dev/#current-status
|
|
40
33
|
contact:
|
|
41
34
|
email: devsupport@lunchmoney.app
|
|
42
35
|
license:
|
|
43
36
|
name: Apache 2.0
|
|
44
37
|
url: http://www.apache.org/licenses/LICENSE-2.0.html
|
|
45
|
-
version: 2.
|
|
38
|
+
version: 2.11.0
|
|
46
39
|
|
|
47
40
|
servers:
|
|
48
41
|
- url: https://api.lunchmoney.dev/v2
|
|
49
42
|
description: v2 Lunch Money API Server - changes will affect real data!
|
|
50
|
-
- url: https://
|
|
43
|
+
# - url: https://lunchmoney.dev/v2
|
|
44
|
+
- url: https://lunchmoney.dev/v2
|
|
51
45
|
description: Static mock version of the v2 Lunch Money API Server
|
|
52
46
|
|
|
53
47
|
tags:
|
|
@@ -78,6 +72,8 @@ tags:
|
|
|
78
72
|
externalDocs:
|
|
79
73
|
description: Learn more about crypto assets
|
|
80
74
|
url: https://support.lunchmoney.app/setup/crypto
|
|
75
|
+
- name: balance_history
|
|
76
|
+
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.
|
|
81
77
|
- name: recurring_items
|
|
82
78
|
description: Work with recurring items
|
|
83
79
|
externalDocs:
|
|
@@ -113,8 +109,10 @@ tags:
|
|
|
113
109
|
description: Learn more about transactions
|
|
114
110
|
url: https://support.lunchmoney.app/finances/transactions
|
|
115
111
|
- name: budgets
|
|
116
|
-
description: View settings and modify budget amounts.<p> Use
|
|
117
|
-
[/
|
|
112
|
+
description: View settings and modify budget amounts.<p> Use
|
|
113
|
+
[/budgets/settings](#tag/budgets/GET/budgets/settings) to view budget
|
|
114
|
+
period settings.<p> Use the [/summary](#tag/summary) endpoint to view
|
|
115
|
+
the budget details performance.
|
|
118
116
|
externalDocs:
|
|
119
117
|
description: Learn more about budgets
|
|
120
118
|
url: https://support.lunchmoney.app/finances/budgets
|
|
@@ -142,12 +140,12 @@ components:
|
|
|
142
140
|
account_id:
|
|
143
141
|
type: integer
|
|
144
142
|
format: int64
|
|
145
|
-
description: Unique ID for the
|
|
143
|
+
description: Unique ID for the current budgeting account
|
|
146
144
|
budget_name:
|
|
147
145
|
type: string
|
|
148
|
-
description: Name of the
|
|
146
|
+
description: Name of the current budgeting account
|
|
149
147
|
primary_currency:
|
|
150
|
-
description: Primary currency
|
|
148
|
+
description: Primary currency for the current budgeting account
|
|
151
149
|
allOf:
|
|
152
150
|
- $ref: "#/components/schemas/currencyEnum"
|
|
153
151
|
api_key_label:
|
|
@@ -760,7 +758,12 @@ components:
|
|
|
760
758
|
type: string
|
|
761
759
|
minLength: 1
|
|
762
760
|
maxLength: 45
|
|
763
|
-
description: The name
|
|
761
|
+
description: The asset name for this balance, typically the uppercased currency symbol (e.g. ETH).
|
|
762
|
+
display_name:
|
|
763
|
+
type: string
|
|
764
|
+
nullable: true
|
|
765
|
+
description: Optional display name for the synced crypto asset as set by the user. If `null`,
|
|
766
|
+
clients may derive a display name from syncedCryptoAccount's `provider` + `name`.
|
|
764
767
|
balance:
|
|
765
768
|
type: string
|
|
766
769
|
pattern: ^-?\d+(\.\d{1,18})?$
|
|
@@ -800,6 +803,7 @@ components:
|
|
|
800
803
|
extended format
|
|
801
804
|
required:
|
|
802
805
|
- name
|
|
806
|
+
- display_name
|
|
803
807
|
- balance
|
|
804
808
|
- symbol
|
|
805
809
|
- coingecko_id
|
|
@@ -1364,10 +1368,13 @@ components:
|
|
|
1364
1368
|
- $ref: "#/components/schemas/accountTypeEnum"
|
|
1365
1369
|
subtype:
|
|
1366
1370
|
type: string
|
|
1367
|
-
|
|
1371
|
+
nullable: true
|
|
1372
|
+
description: If set, an optional account subtype. Set to `null` to clear it.
|
|
1373
|
+
Examples include<br>
|
|
1368
1374
|
- retirement - checking - savings - prepaid credit card
|
|
1369
1375
|
minLength: 1
|
|
1370
1376
|
maxLength: 100
|
|
1377
|
+
example: prepaid credit card
|
|
1371
1378
|
x-updatable: true
|
|
1372
1379
|
balance:
|
|
1373
1380
|
oneOf:
|
|
@@ -1621,6 +1628,364 @@ components:
|
|
|
1621
1628
|
- last_fetch
|
|
1622
1629
|
- plaid_last_successful_update
|
|
1623
1630
|
|
|
1631
|
+
balanceHistorySourceManual:
|
|
1632
|
+
type: object
|
|
1633
|
+
description: Source information for a manual account balance history entry.
|
|
1634
|
+
additionalProperties: false
|
|
1635
|
+
x-internal: true
|
|
1636
|
+
properties:
|
|
1637
|
+
type:
|
|
1638
|
+
type: string
|
|
1639
|
+
enum: [manual]
|
|
1640
|
+
description: Identifies this entry as belonging to a manually-managed account.
|
|
1641
|
+
manual_account_id:
|
|
1642
|
+
type: integer
|
|
1643
|
+
format: int32
|
|
1644
|
+
description: ID of the manual account associated with this entry.
|
|
1645
|
+
required:
|
|
1646
|
+
- type
|
|
1647
|
+
- manual_account_id
|
|
1648
|
+
|
|
1649
|
+
balanceHistorySourcePlaid:
|
|
1650
|
+
type: object
|
|
1651
|
+
description: Source information for a Plaid-synced account balance history entry.
|
|
1652
|
+
additionalProperties: false
|
|
1653
|
+
x-internal: true
|
|
1654
|
+
properties:
|
|
1655
|
+
type:
|
|
1656
|
+
type: string
|
|
1657
|
+
enum: [plaid]
|
|
1658
|
+
description: Identifies this entry as belonging to a Plaid-synced account.
|
|
1659
|
+
plaid_account_id:
|
|
1660
|
+
type: integer
|
|
1661
|
+
format: int32
|
|
1662
|
+
description: ID of the Plaid account associated with this entry.
|
|
1663
|
+
required:
|
|
1664
|
+
- type
|
|
1665
|
+
- plaid_account_id
|
|
1666
|
+
|
|
1667
|
+
balanceHistorySourceCryptoManual:
|
|
1668
|
+
type: object
|
|
1669
|
+
description: Source information for a manually-tracked cryptocurrency balance history entry.
|
|
1670
|
+
additionalProperties: false
|
|
1671
|
+
x-internal: true
|
|
1672
|
+
properties:
|
|
1673
|
+
type:
|
|
1674
|
+
type: string
|
|
1675
|
+
enum: [crypto_manual]
|
|
1676
|
+
description: Identifies this entry as belonging to a manually-tracked crypto account.
|
|
1677
|
+
crypto_manual_id:
|
|
1678
|
+
type: integer
|
|
1679
|
+
format: int32
|
|
1680
|
+
description: ID of the manual crypto account associated with this entry.
|
|
1681
|
+
symbol:
|
|
1682
|
+
type: string
|
|
1683
|
+
nullable: true
|
|
1684
|
+
minLength: 1
|
|
1685
|
+
maxLength: 25
|
|
1686
|
+
description: Crypto symbol associated with the manual crypto account, when available.
|
|
1687
|
+
required:
|
|
1688
|
+
- type
|
|
1689
|
+
- crypto_manual_id
|
|
1690
|
+
|
|
1691
|
+
balanceHistorySourceCryptoSynced:
|
|
1692
|
+
type: object
|
|
1693
|
+
x-internal: true
|
|
1694
|
+
description: Source information for a synced cryptocurrency balance history entry.
|
|
1695
|
+
additionalProperties: false
|
|
1696
|
+
properties:
|
|
1697
|
+
type:
|
|
1698
|
+
type: string
|
|
1699
|
+
enum: [crypto_synced]
|
|
1700
|
+
description: Identifies this entry as belonging to a synced crypto connection.
|
|
1701
|
+
crypto_synced_id:
|
|
1702
|
+
type: integer
|
|
1703
|
+
format: int32
|
|
1704
|
+
description: ID of the synced crypto connection associated with this entry.
|
|
1705
|
+
symbol:
|
|
1706
|
+
type: string
|
|
1707
|
+
minLength: 1
|
|
1708
|
+
maxLength: 25
|
|
1709
|
+
description: Crypto symbol (e.g. `eth`, `btc`) identifying the specific currency within the synced account.
|
|
1710
|
+
required:
|
|
1711
|
+
- type
|
|
1712
|
+
- crypto_synced_id
|
|
1713
|
+
- symbol
|
|
1714
|
+
|
|
1715
|
+
balanceHistorySourceDeleted:
|
|
1716
|
+
type: object
|
|
1717
|
+
x-internal: true
|
|
1718
|
+
description: >
|
|
1719
|
+
Source information for a balance history entry whose account has since been deleted.
|
|
1720
|
+
Historical balances are preserved when a user chooses to keep history on account deletion.
|
|
1721
|
+
This object contains details that can be used to display the deleted account in the UI.
|
|
1722
|
+
The `deleted_account_id` can be passed to `PUT /v2/balance_history/deleted/{account_id}/details`
|
|
1723
|
+
to update the archived source metadata.
|
|
1724
|
+
additionalProperties: false
|
|
1725
|
+
properties:
|
|
1726
|
+
type:
|
|
1727
|
+
type: string
|
|
1728
|
+
enum: [deleted]
|
|
1729
|
+
description: Identifies this entry as belonging to an account that has since been deleted.
|
|
1730
|
+
deleted_account_id:
|
|
1731
|
+
type: integer
|
|
1732
|
+
format: int32
|
|
1733
|
+
description: Identifier for the deleted account history source
|
|
1734
|
+
name:
|
|
1735
|
+
type: string
|
|
1736
|
+
nullable: true
|
|
1737
|
+
description: Archived account `name` for the deleted account source
|
|
1738
|
+
institution_name:
|
|
1739
|
+
type: string
|
|
1740
|
+
nullable: true
|
|
1741
|
+
description: Archived `institution_name` for the deleted account source
|
|
1742
|
+
display_name:
|
|
1743
|
+
type: string
|
|
1744
|
+
nullable: true
|
|
1745
|
+
description: Archived `display_name` of the deleted account
|
|
1746
|
+
account_type:
|
|
1747
|
+
type: string
|
|
1748
|
+
nullable: true
|
|
1749
|
+
description: Archived `type` of the deleted account source
|
|
1750
|
+
subtype:
|
|
1751
|
+
type: string
|
|
1752
|
+
nullable: true
|
|
1753
|
+
description: Archived `subtype`` of the deleted account source
|
|
1754
|
+
mask:
|
|
1755
|
+
type: string
|
|
1756
|
+
nullable: true
|
|
1757
|
+
description: Archived account `mask` for a deleted plaid account source
|
|
1758
|
+
symbol:
|
|
1759
|
+
type: string
|
|
1760
|
+
nullable: true
|
|
1761
|
+
minLength: 1
|
|
1762
|
+
maxLength: 25
|
|
1763
|
+
description: Archived `symbol` for a deleted crypto account source
|
|
1764
|
+
required:
|
|
1765
|
+
- type
|
|
1766
|
+
- deleted_account_id
|
|
1767
|
+
- name
|
|
1768
|
+
- institution_name
|
|
1769
|
+
- display_name
|
|
1770
|
+
- account_type
|
|
1771
|
+
- subtype
|
|
1772
|
+
- mask
|
|
1773
|
+
- symbol
|
|
1774
|
+
|
|
1775
|
+
balanceHistoryAccountObject:
|
|
1776
|
+
type: object
|
|
1777
|
+
title: balance history for an account object
|
|
1778
|
+
additionalProperties: false
|
|
1779
|
+
description: Historical balance entries grouped under a single account source.
|
|
1780
|
+
properties:
|
|
1781
|
+
source:
|
|
1782
|
+
description: >
|
|
1783
|
+
Identifies the account this balance entry belongs to. The shape varies by
|
|
1784
|
+
`source.type`. Use `source.type` to determine which account id field is present.
|
|
1785
|
+
oneOf:
|
|
1786
|
+
- $ref: "#/components/schemas/balanceHistorySourceManual"
|
|
1787
|
+
- $ref: "#/components/schemas/balanceHistorySourcePlaid"
|
|
1788
|
+
- $ref: "#/components/schemas/balanceHistorySourceCryptoManual"
|
|
1789
|
+
- $ref: "#/components/schemas/balanceHistorySourceCryptoSynced"
|
|
1790
|
+
- $ref: "#/components/schemas/balanceHistorySourceDeleted"
|
|
1791
|
+
discriminator:
|
|
1792
|
+
propertyName: type
|
|
1793
|
+
mapping:
|
|
1794
|
+
manual: "#/components/schemas/balanceHistorySourceManual"
|
|
1795
|
+
plaid: "#/components/schemas/balanceHistorySourcePlaid"
|
|
1796
|
+
crypto_manual: "#/components/schemas/balanceHistorySourceCryptoManual"
|
|
1797
|
+
crypto_synced: "#/components/schemas/balanceHistorySourceCryptoSynced"
|
|
1798
|
+
deleted: "#/components/schemas/balanceHistorySourceDeleted"
|
|
1799
|
+
balances:
|
|
1800
|
+
type: array
|
|
1801
|
+
description: >
|
|
1802
|
+
Monthly balance history entries for the source account. On GET responses,
|
|
1803
|
+
this includes all entries in the requested range. On PUT upsert responses,
|
|
1804
|
+
this includes only the entries modified by that request.
|
|
1805
|
+
items:
|
|
1806
|
+
$ref: "#/components/schemas/balanceHistoryObject"
|
|
1807
|
+
required:
|
|
1808
|
+
- source
|
|
1809
|
+
- balances
|
|
1810
|
+
|
|
1811
|
+
balanceHistoryObject:
|
|
1812
|
+
type: object
|
|
1813
|
+
title: balance history entry object
|
|
1814
|
+
additionalProperties: false
|
|
1815
|
+
x-internal: true
|
|
1816
|
+
description: A historical balance entry for a single account on a single date.
|
|
1817
|
+
properties:
|
|
1818
|
+
id:
|
|
1819
|
+
type: integer
|
|
1820
|
+
format: int32
|
|
1821
|
+
description: Unique identifier of this historical balance entry.
|
|
1822
|
+
date:
|
|
1823
|
+
type: string
|
|
1824
|
+
format: date
|
|
1825
|
+
description: Date of this historical balance entry in YYYY-MM-DD format. This is always the first day of a month.
|
|
1826
|
+
balance:
|
|
1827
|
+
type: string
|
|
1828
|
+
pattern: ^-?\d+(\.\d{1,4})?$
|
|
1829
|
+
description: Historical balance stored for this entry, as a numeric string with up to four decimal places. Trailing zeros and decimal places are not guaranteed in responses. For manual and Plaid accounts this is in the account currency. For crypto accounts this is in the user's primary currency.
|
|
1830
|
+
currency:
|
|
1831
|
+
allOf:
|
|
1832
|
+
- $ref: "#/components/schemas/currencyEnum"
|
|
1833
|
+
description: Currency of the stored `balance`. For crypto entries this is the user's primary currency.
|
|
1834
|
+
to_base:
|
|
1835
|
+
type: number
|
|
1836
|
+
format: double
|
|
1837
|
+
description: Historical 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`.
|
|
1838
|
+
crypto_balance:
|
|
1839
|
+
type: string
|
|
1840
|
+
nullable: true
|
|
1841
|
+
pattern: ^-?\d+(\.\d{1,18})?$
|
|
1842
|
+
description: Crypto quantity stored for this balance entry, when available. This may be present for crypto or deleted-account entries and is `null` otherwise.
|
|
1843
|
+
required:
|
|
1844
|
+
- id
|
|
1845
|
+
- date
|
|
1846
|
+
- balance
|
|
1847
|
+
- currency
|
|
1848
|
+
- to_base
|
|
1849
|
+
- crypto_balance
|
|
1850
|
+
|
|
1851
|
+
balanceHistoryListResponseObject:
|
|
1852
|
+
type: object
|
|
1853
|
+
additionalProperties: false
|
|
1854
|
+
x-internal: true
|
|
1855
|
+
properties:
|
|
1856
|
+
balance_history:
|
|
1857
|
+
type: array
|
|
1858
|
+
items:
|
|
1859
|
+
$ref: "#/components/schemas/balanceHistoryAccountObject"
|
|
1860
|
+
required:
|
|
1861
|
+
- balance_history
|
|
1862
|
+
|
|
1863
|
+
balanceHistoryUpdateItemObject:
|
|
1864
|
+
type: object
|
|
1865
|
+
x-internal: true
|
|
1866
|
+
additionalProperties: false
|
|
1867
|
+
properties:
|
|
1868
|
+
id:
|
|
1869
|
+
type: integer
|
|
1870
|
+
format: int32
|
|
1871
|
+
description: System-defined balance history entry id. Ignored if set.
|
|
1872
|
+
x-updatable: false
|
|
1873
|
+
date:
|
|
1874
|
+
type: string
|
|
1875
|
+
format: date
|
|
1876
|
+
description: Month to update, in YYYY-MM-DD format. This must be the first day of a month and must be in a past month.
|
|
1877
|
+
balance:
|
|
1878
|
+
oneOf:
|
|
1879
|
+
- type: number
|
|
1880
|
+
format: double
|
|
1881
|
+
- type: string
|
|
1882
|
+
pattern: ^-?\d+(\.\d{1,4})?$
|
|
1883
|
+
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.
|
|
1884
|
+
symbol:
|
|
1885
|
+
type: string
|
|
1886
|
+
nullable: true
|
|
1887
|
+
minLength: 1
|
|
1888
|
+
maxLength: 25
|
|
1889
|
+
description: Optional for crypto balances, but if set it must match the account's symbol.
|
|
1890
|
+
Tolerated for deleted-account balances. Do not provide this for manual or Plaid balances.
|
|
1891
|
+
If provided when using the synced crypto path-based endpoint, this must match the symbol in the path.
|
|
1892
|
+
x-updatable: true
|
|
1893
|
+
crypto_balance:
|
|
1894
|
+
type: string
|
|
1895
|
+
nullable: true
|
|
1896
|
+
pattern: ^-?\d+(\.\d{1,18})?$
|
|
1897
|
+
description: Optional crypto quantity for crypto_manual, crypto_synced, and deleted balances. Do not provide this for manual or Plaid balances.
|
|
1898
|
+
x-updatable: true
|
|
1899
|
+
currency:
|
|
1900
|
+
allOf:
|
|
1901
|
+
- $ref: "#/components/schemas/currencyEnum"
|
|
1902
|
+
description: Optional currency for this balance entry. If omitted, it defaults to the account currency for manual/Plaid accounts, or the user's primary currency for crypto/deleted accounts.
|
|
1903
|
+
x-updatable: true
|
|
1904
|
+
to_base:
|
|
1905
|
+
type: number
|
|
1906
|
+
format: double
|
|
1907
|
+
description: System-defined historical balance converted to the user's primary currency. Ignored if set. Use `balance` to update the stored historical balance.
|
|
1908
|
+
x-updatable: false
|
|
1909
|
+
required:
|
|
1910
|
+
- date
|
|
1911
|
+
- balance
|
|
1912
|
+
|
|
1913
|
+
upsertBalanceHistoryRequestObject:
|
|
1914
|
+
type: object
|
|
1915
|
+
x-internal: true
|
|
1916
|
+
additionalProperties: false
|
|
1917
|
+
properties:
|
|
1918
|
+
balances:
|
|
1919
|
+
type: array
|
|
1920
|
+
minItems: 1
|
|
1921
|
+
description: One or more monthly balance history entries to upsert
|
|
1922
|
+
items:
|
|
1923
|
+
$ref: "#/components/schemas/balanceHistoryUpdateItemObject"
|
|
1924
|
+
required:
|
|
1925
|
+
- balances
|
|
1926
|
+
|
|
1927
|
+
updateBalanceHistoryDetailsRequestObject:
|
|
1928
|
+
type: object
|
|
1929
|
+
x-internal: true
|
|
1930
|
+
additionalProperties: false
|
|
1931
|
+
minProperties: 1
|
|
1932
|
+
properties:
|
|
1933
|
+
name:
|
|
1934
|
+
type: string
|
|
1935
|
+
nullable: true
|
|
1936
|
+
description: New archived account name for the deleted account source.
|
|
1937
|
+
institution_name:
|
|
1938
|
+
type: string
|
|
1939
|
+
nullable: true
|
|
1940
|
+
description: New archived institution name for the deleted account source.
|
|
1941
|
+
display_name:
|
|
1942
|
+
type: string
|
|
1943
|
+
nullable: true
|
|
1944
|
+
description: New display name for the deleted account source.
|
|
1945
|
+
account_type:
|
|
1946
|
+
type: string
|
|
1947
|
+
nullable: true
|
|
1948
|
+
description: New archived account type for the deleted account source.
|
|
1949
|
+
subtype:
|
|
1950
|
+
type: string
|
|
1951
|
+
nullable: true
|
|
1952
|
+
description: New archived subtype for the deleted account source.
|
|
1953
|
+
mask:
|
|
1954
|
+
type: string
|
|
1955
|
+
nullable: true
|
|
1956
|
+
description: New archived account mask for the deleted account source.
|
|
1957
|
+
|
|
1958
|
+
updateBalanceHistoryDetailsResponseObject:
|
|
1959
|
+
type: object
|
|
1960
|
+
x-internal: true
|
|
1961
|
+
additionalProperties: false
|
|
1962
|
+
properties:
|
|
1963
|
+
name:
|
|
1964
|
+
type: string
|
|
1965
|
+
nullable: true
|
|
1966
|
+
institution_name:
|
|
1967
|
+
type: string
|
|
1968
|
+
nullable: true
|
|
1969
|
+
display_name:
|
|
1970
|
+
type: string
|
|
1971
|
+
nullable: true
|
|
1972
|
+
account_type:
|
|
1973
|
+
type: string
|
|
1974
|
+
nullable: true
|
|
1975
|
+
subtype:
|
|
1976
|
+
type: string
|
|
1977
|
+
nullable: true
|
|
1978
|
+
mask:
|
|
1979
|
+
type: string
|
|
1980
|
+
nullable: true
|
|
1981
|
+
required:
|
|
1982
|
+
- name
|
|
1983
|
+
- institution_name
|
|
1984
|
+
- display_name
|
|
1985
|
+
- account_type
|
|
1986
|
+
- subtype
|
|
1987
|
+
- mask
|
|
1988
|
+
|
|
1624
1989
|
# The object containing information about a recurring item
|
|
1625
1990
|
recurringObject:
|
|
1626
1991
|
type: object
|
|
@@ -2097,14 +2462,9 @@ components:
|
|
|
2097
2462
|
external_id:
|
|
2098
2463
|
type: string
|
|
2099
2464
|
nullable: true
|
|
2100
|
-
description: A user-defined external ID
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
transactions associated with synced accounts, and they cannot be
|
|
2104
|
-
added. For transactions associated with manual accounts, the
|
|
2105
|
-
external ID must be unique as attempts to add a subsequent
|
|
2106
|
-
transaction with the same external_id and manual_account_id will be
|
|
2107
|
-
flagged as duplicates and fail.
|
|
2465
|
+
description: A user-defined external ID associated with the transaction.
|
|
2466
|
+
For transactions belonging to manual accounts, the
|
|
2467
|
+
external ID must be unique for each transaction associated with the account.
|
|
2108
2468
|
minLength: 0
|
|
2109
2469
|
maxLength: 75
|
|
2110
2470
|
tag_ids:
|
|
@@ -2125,8 +2485,6 @@ components:
|
|
|
2125
2485
|
Any transaction notes set by the user or by
|
|
2126
2486
|
a matched recurring item. This will match the value
|
|
2127
2487
|
displayed in notes field on the transactions page in the Lunch Money app.
|
|
2128
|
-
minLength: 0
|
|
2129
|
-
maxLength: 350
|
|
2130
2488
|
status:
|
|
2131
2489
|
type: string
|
|
2132
2490
|
# description: >
|
|
@@ -2362,8 +2720,6 @@ components:
|
|
|
2362
2720
|
Any transaction notes set by the user or by
|
|
2363
2721
|
a matched recurring item. This will match the value
|
|
2364
2722
|
displayed in notes field on the transactions page in the Lunch Money app.
|
|
2365
|
-
minLength: 0
|
|
2366
|
-
maxLength: 350
|
|
2367
2723
|
status:
|
|
2368
2724
|
type: string
|
|
2369
2725
|
description: >
|
|
@@ -2505,14 +2861,9 @@ components:
|
|
|
2505
2861
|
external_id:
|
|
2506
2862
|
type: string
|
|
2507
2863
|
nullable: true
|
|
2508
|
-
description: A user-defined external ID
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
transactions associated with synced accounts, and they cannot be
|
|
2512
|
-
added. For transactions associated with manual accounts, the
|
|
2513
|
-
external ID must be unique as attempts to add a subsequent
|
|
2514
|
-
transaction with the same external_id and manual_account_id will be
|
|
2515
|
-
flagged as duplicates and fail.
|
|
2864
|
+
description: A user-defined external ID associated with the transaction.
|
|
2865
|
+
For transactions belonging to manual accounts, the
|
|
2866
|
+
external ID must be unique for each transaction associated with the account.
|
|
2516
2867
|
minLength: 0
|
|
2517
2868
|
maxLength: 75
|
|
2518
2869
|
plaid_metadata:
|
|
@@ -2582,7 +2933,7 @@ components:
|
|
|
2582
2933
|
currency:
|
|
2583
2934
|
description: Three-letter lowercase currency code of the transaction
|
|
2584
2935
|
in ISO 4217 format. Must match one of the [supported
|
|
2585
|
-
currencies](https://
|
|
2936
|
+
currencies](https://lunchmoney.dev/v2/currencies). If not set
|
|
2586
2937
|
defaults to the user account's primary currency.
|
|
2587
2938
|
allOf:
|
|
2588
2939
|
- $ref: "#/components/schemas/currencyEnum"
|
|
@@ -2608,8 +2959,6 @@ components:
|
|
|
2608
2959
|
Any transaction notes set by the user or by
|
|
2609
2960
|
a matched recurring item. This will match the value
|
|
2610
2961
|
displayed in notes field on the transactions page in the Lunch Money app.
|
|
2611
|
-
minLength: 0
|
|
2612
|
-
maxLength: 350
|
|
2613
2962
|
manual_account_id:
|
|
2614
2963
|
type: integer
|
|
2615
2964
|
format: int32
|
|
@@ -2728,7 +3077,7 @@ components:
|
|
|
2728
3077
|
type: string
|
|
2729
3078
|
description: |
|
|
2730
3079
|
The new payee for the transaction.
|
|
2731
|
-
|
|
3080
|
+
minLength: 0
|
|
2732
3081
|
original_name:
|
|
2733
3082
|
type: string
|
|
2734
3083
|
nullable: true
|
|
@@ -2747,8 +3096,6 @@ components:
|
|
|
2747
3096
|
description: >
|
|
2748
3097
|
New notes for the transaction. Set this to an empty string to clear
|
|
2749
3098
|
the existing notes.
|
|
2750
|
-
minLength: 0
|
|
2751
|
-
maxLength: 350
|
|
2752
3099
|
x-updatable: true
|
|
2753
3100
|
manual_account_id:
|
|
2754
3101
|
type: integer
|
|
@@ -2954,7 +3301,6 @@ components:
|
|
|
2954
3301
|
format: int32
|
|
2955
3302
|
notes:
|
|
2956
3303
|
type: string
|
|
2957
|
-
maxLength: 350
|
|
2958
3304
|
description: Will inherit notes from parent if not defined.
|
|
2959
3305
|
required:
|
|
2960
3306
|
- amount
|
|
@@ -3264,10 +3610,11 @@ components:
|
|
|
3264
3610
|
|
|
3265
3611
|
# Response body for GET /budgets/settings (200)
|
|
3266
3612
|
budgetSettingsResponseObject:
|
|
3267
|
-
x-internal: true
|
|
3268
3613
|
type: object
|
|
3614
|
+
title: budget settings object
|
|
3269
3615
|
additionalProperties: false
|
|
3270
|
-
description: Budget period and display settings
|
|
3616
|
+
description: Budget period and display settings for the current budgeting
|
|
3617
|
+
account.
|
|
3271
3618
|
properties:
|
|
3272
3619
|
budget_period_granularity:
|
|
3273
3620
|
type: string
|
|
@@ -3279,8 +3626,8 @@ components:
|
|
|
3279
3626
|
- twice a month
|
|
3280
3627
|
description: Budget period granularity
|
|
3281
3628
|
budget_period_quantity:
|
|
3282
|
-
type:
|
|
3283
|
-
format:
|
|
3629
|
+
type: integer
|
|
3630
|
+
format: int32
|
|
3284
3631
|
description: The number of `granularity` units that make up a single
|
|
3285
3632
|
budgeting period.
|
|
3286
3633
|
budget_period_anchor_date:
|
|
@@ -3425,8 +3772,6 @@ components:
|
|
|
3425
3772
|
type: array
|
|
3426
3773
|
items:
|
|
3427
3774
|
$ref: "#/components/schemas/summaryCategoryOccurrenceObject"
|
|
3428
|
-
rollover_pool:
|
|
3429
|
-
$ref: "#/components/schemas/summaryRolloverPoolObject"
|
|
3430
3775
|
required:
|
|
3431
3776
|
- category_id
|
|
3432
3777
|
- totals
|
|
@@ -3638,7 +3983,9 @@ components:
|
|
|
3638
3983
|
while processing the request.<br> If multiple errors were
|
|
3639
3984
|
encountered, the list will contain multiple objects.<br> Each
|
|
3640
3985
|
`error` object is guaranteed to have an `errMsg`, but it may also
|
|
3641
|
-
contain other error
|
|
3986
|
+
contain other error-specific properties such as `code` (for example
|
|
3987
|
+
`VALIDATION_ERROR`), or other properties that are useful to map
|
|
3988
|
+
the error to the relevant part of the request.
|
|
3642
3989
|
type: array
|
|
3643
3990
|
items:
|
|
3644
3991
|
type: object
|
|
@@ -3747,6 +4094,7 @@ components:
|
|
|
3747
4094
|
# - `cad`: Canadian Dollar
|
|
3748
4095
|
# - `cdf`: Congolese Franc
|
|
3749
4096
|
# - `chf`: Swiss Franc
|
|
4097
|
+
# - `clf`: Chilean Unit of Account (UF)
|
|
3750
4098
|
# - `clp`: Chilean Peso
|
|
3751
4099
|
# - `cny`: Chinese Yuan
|
|
3752
4100
|
# - `cop`: Colombian Peso
|
|
@@ -3762,6 +4110,7 @@ components:
|
|
|
3762
4110
|
# - `egp`: Egyptian Pound
|
|
3763
4111
|
# - `ern`: Eritrean Nakfa
|
|
3764
4112
|
# - `etb`: Ethiopian Birr
|
|
4113
|
+
# - `eth`: Ethereum
|
|
3765
4114
|
# - `eur`: Euro
|
|
3766
4115
|
# - `fjd`: Fijian Dollar
|
|
3767
4116
|
# - `fkp`: Falkland Islands Pound
|
|
@@ -3869,12 +4218,13 @@ components:
|
|
|
3869
4218
|
# - `uyu`: Uruguayan Peso
|
|
3870
4219
|
# - `uzs`: Uzbekistan Som
|
|
3871
4220
|
# - `vef`: Venezuelan Bolívar
|
|
4221
|
+
# - `ves`: Venezuelan Bolívar Sotiemas
|
|
3872
4222
|
# - `vnd`: Vietnamese Dong
|
|
3873
4223
|
# - `vuv`: Vanuatu Vatu
|
|
3874
4224
|
# - `wst`: Samoan Tala
|
|
3875
4225
|
# - `xaf`: CFA Franc BEAC
|
|
3876
|
-
# - `xag`: Silver
|
|
3877
|
-
# - `xau`: Gold
|
|
4226
|
+
# - `xag`: Silver (troy ounce)
|
|
4227
|
+
# - `xau`: Gold (troy ounce)
|
|
3878
4228
|
# - `xcd`: East Caribbean Dollar
|
|
3879
4229
|
# - `xof`: CFA Franc BCEAO
|
|
3880
4230
|
# - `xpf`: CFP Franc
|
|
@@ -3912,6 +4262,7 @@ components:
|
|
|
3912
4262
|
- cad
|
|
3913
4263
|
- cdf
|
|
3914
4264
|
- chf
|
|
4265
|
+
- clf
|
|
3915
4266
|
- clp
|
|
3916
4267
|
- cny
|
|
3917
4268
|
- cop
|
|
@@ -3927,6 +4278,7 @@ components:
|
|
|
3927
4278
|
- egp
|
|
3928
4279
|
- ern
|
|
3929
4280
|
- etb
|
|
4281
|
+
- eth
|
|
3930
4282
|
- eur
|
|
3931
4283
|
- fjd
|
|
3932
4284
|
- fkp
|
|
@@ -4034,6 +4386,7 @@ components:
|
|
|
4034
4386
|
- uyu
|
|
4035
4387
|
- uzs
|
|
4036
4388
|
- vef
|
|
4389
|
+
- ves
|
|
4037
4390
|
- vnd
|
|
4038
4391
|
- vuv
|
|
4039
4392
|
- wst
|
|
@@ -4614,6 +4967,24 @@ paths:
|
|
|
4614
4967
|
pool data for categories with budgets"
|
|
4615
4968
|
value:
|
|
4616
4969
|
aligned: true
|
|
4970
|
+
rollover_pool:
|
|
4971
|
+
budgeted_to_base: 179.50
|
|
4972
|
+
all_adjustments:
|
|
4973
|
+
- in_range: false
|
|
4974
|
+
date: "2025-06-30"
|
|
4975
|
+
amount: "179.5000"
|
|
4976
|
+
currency: "usd"
|
|
4977
|
+
to_base: 179.50
|
|
4978
|
+
- in_range: false
|
|
4979
|
+
date: "2025-05-31"
|
|
4980
|
+
amount: "120.2500"
|
|
4981
|
+
currency: "usd"
|
|
4982
|
+
to_base: 120.25
|
|
4983
|
+
- in_range: false
|
|
4984
|
+
date: "2025-04-30"
|
|
4985
|
+
amount: "80.0000"
|
|
4986
|
+
currency: "usd"
|
|
4987
|
+
to_base: 80.00
|
|
4617
4988
|
categories:
|
|
4618
4989
|
- category_id: 315177
|
|
4619
4990
|
totals:
|
|
@@ -4633,24 +5004,6 @@ paths:
|
|
|
4633
5004
|
budgeted_amount: "500.0000"
|
|
4634
5005
|
budgeted_currency: "usd"
|
|
4635
5006
|
notes: "Monthly budget allocation"
|
|
4636
|
-
rollover_pool:
|
|
4637
|
-
budgeted_to_base: 179.50
|
|
4638
|
-
all_adjustments:
|
|
4639
|
-
- in_range: false
|
|
4640
|
-
date: "2025-06-30"
|
|
4641
|
-
amount: "179.5000"
|
|
4642
|
-
currency: "usd"
|
|
4643
|
-
to_base: 179.50
|
|
4644
|
-
- in_range: false
|
|
4645
|
-
date: "2025-05-31"
|
|
4646
|
-
amount: "120.2500"
|
|
4647
|
-
currency: "usd"
|
|
4648
|
-
to_base: 120.25
|
|
4649
|
-
- in_range: false
|
|
4650
|
-
date: "2025-04-30"
|
|
4651
|
-
amount: "80.0000"
|
|
4652
|
-
currency: "usd"
|
|
4653
|
-
to_base: 80.00
|
|
4654
5007
|
"401":
|
|
4655
5008
|
$ref: "#/components/responses/unauthorizedToken"
|
|
4656
5009
|
"429":
|
|
@@ -5609,11 +5962,22 @@ paths:
|
|
|
5609
5962
|
examples:
|
|
5610
5963
|
missing required properties:
|
|
5611
5964
|
value:
|
|
5612
|
-
message: Request
|
|
5965
|
+
message: Invalid Request Body
|
|
5613
5966
|
errors:
|
|
5614
5967
|
- errMsg: "Missing required property 'name' in request body."
|
|
5615
5968
|
- errMsg: "Missing required property 'balance' in request body."
|
|
5616
5969
|
- errMsg: "Missing required property 'symbol' in request body."
|
|
5970
|
+
invalid balance:
|
|
5971
|
+
value:
|
|
5972
|
+
message: Invalid Request Body
|
|
5973
|
+
errors:
|
|
5974
|
+
- errMsg: "Invalid value for property 'balance'. 'abc' cannot be converted to a number"
|
|
5975
|
+
- errMsg: "Invalid value for property 'balance'. Invalid input"
|
|
5976
|
+
invalid property:
|
|
5977
|
+
value:
|
|
5978
|
+
message: Invalid Request Body
|
|
5979
|
+
errors:
|
|
5980
|
+
- errMsg: "Invalid property 'coingecko_id' in request body."
|
|
5617
5981
|
unsupported symbol:
|
|
5618
5982
|
value:
|
|
5619
5983
|
message: Request Validation Failure
|
|
@@ -5950,46 +6314,903 @@ paths:
|
|
|
5950
6314
|
value: 99999999
|
|
5951
6315
|
responses:
|
|
5952
6316
|
"200":
|
|
5953
|
-
description: Synced crypto account object
|
|
6317
|
+
description: Synced crypto account object
|
|
6318
|
+
content:
|
|
6319
|
+
application/json:
|
|
6320
|
+
schema:
|
|
6321
|
+
$ref: "#/components/schemas/syncedCryptoAccount"
|
|
6322
|
+
example:
|
|
6323
|
+
id: 33004
|
|
6324
|
+
provider: coinbase
|
|
6325
|
+
status: active
|
|
6326
|
+
created_by_name: User 1
|
|
6327
|
+
created_at: "2025-10-02T11:02:09.000Z"
|
|
6328
|
+
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6329
|
+
display_name: Coinbase Main
|
|
6330
|
+
balances:
|
|
6331
|
+
- name: ETH
|
|
6332
|
+
balance: "12.004500000000000000"
|
|
6333
|
+
symbol: eth
|
|
6334
|
+
coingecko_id: ethereum
|
|
6335
|
+
to_base: 28998.44
|
|
6336
|
+
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6337
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6338
|
+
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6339
|
+
- name: BTC
|
|
6340
|
+
balance: "0.100020003000400050"
|
|
6341
|
+
symbol: btc
|
|
6342
|
+
coingecko_id: bitcoin
|
|
6343
|
+
to_base: 6231.28
|
|
6344
|
+
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6345
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6346
|
+
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6347
|
+
"400":
|
|
6348
|
+
description: Bad Request
|
|
6349
|
+
content:
|
|
6350
|
+
application/json:
|
|
6351
|
+
schema:
|
|
6352
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
6353
|
+
example:
|
|
6354
|
+
message: Invalid Path Parameters
|
|
6355
|
+
errors:
|
|
6356
|
+
- errMsg: "Invalid value type for path parameter: 'id'. Expected 'number', received 'string'."
|
|
6357
|
+
"401":
|
|
6358
|
+
$ref: "#/components/responses/unauthorizedToken"
|
|
6359
|
+
"404":
|
|
6360
|
+
description: Not Found
|
|
6361
|
+
content:
|
|
6362
|
+
application/json:
|
|
6363
|
+
schema:
|
|
6364
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
6365
|
+
example:
|
|
6366
|
+
message: Not Found
|
|
6367
|
+
errors:
|
|
6368
|
+
- errMsg: "There is no synced crypto account with the id: 99999999."
|
|
6369
|
+
"429":
|
|
6370
|
+
$ref: "#/components/responses/rateLimited"
|
|
6371
|
+
"500":
|
|
6372
|
+
$ref: "#/components/responses/serverError"
|
|
6373
|
+
/crypto/synced/{id}/{symbol}:
|
|
6374
|
+
get:
|
|
6375
|
+
tags:
|
|
6376
|
+
- crypto-synced
|
|
6377
|
+
summary: Get a synced crypto balance by symbol
|
|
6378
|
+
description: Retrieves a single balance from the specified synced crypto
|
|
6379
|
+
account using the crypto symbol.
|
|
6380
|
+
operationId: getCryptoSyncedBalanceBySymbol
|
|
6381
|
+
parameters:
|
|
6382
|
+
- name: id
|
|
6383
|
+
in: path
|
|
6384
|
+
description: Synced crypto account ID
|
|
6385
|
+
required: true
|
|
6386
|
+
schema:
|
|
6387
|
+
type: integer
|
|
6388
|
+
format: int32
|
|
6389
|
+
- name: symbol
|
|
6390
|
+
in: path
|
|
6391
|
+
description: Crypto symbol within the synced account
|
|
6392
|
+
required: true
|
|
6393
|
+
schema:
|
|
6394
|
+
type: string
|
|
6395
|
+
minLength: 1
|
|
6396
|
+
maxLength: 25
|
|
6397
|
+
responses:
|
|
6398
|
+
"200":
|
|
6399
|
+
description: Synced crypto balance object
|
|
6400
|
+
content:
|
|
6401
|
+
application/json:
|
|
6402
|
+
schema:
|
|
6403
|
+
$ref: "#/components/schemas/cryptoSyncedBalance"
|
|
6404
|
+
example:
|
|
6405
|
+
name: ETH
|
|
6406
|
+
balance: "12.004500000000000000"
|
|
6407
|
+
symbol: eth
|
|
6408
|
+
coingecko_id: ethereum
|
|
6409
|
+
to_base: 28998.44
|
|
6410
|
+
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6411
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6412
|
+
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6413
|
+
"400":
|
|
6414
|
+
description: Bad Request
|
|
6415
|
+
content:
|
|
6416
|
+
application/json:
|
|
6417
|
+
schema:
|
|
6418
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
6419
|
+
examples:
|
|
6420
|
+
invalid id:
|
|
6421
|
+
value:
|
|
6422
|
+
message: Invalid Path Parameters
|
|
6423
|
+
errors:
|
|
6424
|
+
- errMsg: "Invalid value type for path parameter: 'id'. Expected 'number', received 'string'."
|
|
6425
|
+
invalid symbol:
|
|
6426
|
+
value:
|
|
6427
|
+
message: Invalid Path Parameters
|
|
6428
|
+
errors:
|
|
6429
|
+
- errMsg: "Value for path parameter 'symbol' must not be empty."
|
|
6430
|
+
"401":
|
|
6431
|
+
$ref: "#/components/responses/unauthorizedToken"
|
|
6432
|
+
"404":
|
|
6433
|
+
description: Not Found
|
|
6434
|
+
content:
|
|
6435
|
+
application/json:
|
|
6436
|
+
schema:
|
|
6437
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
6438
|
+
examples:
|
|
6439
|
+
account not found:
|
|
6440
|
+
value:
|
|
6441
|
+
message: Not Found
|
|
6442
|
+
errors:
|
|
6443
|
+
- errMsg: "There is no synced crypto account with the id: 99999999."
|
|
6444
|
+
symbol not found:
|
|
6445
|
+
value:
|
|
6446
|
+
message: Not Found
|
|
6447
|
+
errors:
|
|
6448
|
+
- errMsg: "There is no synced crypto balance with symbol 'doge' for the crypto account with id: 33004."
|
|
6449
|
+
"429":
|
|
6450
|
+
$ref: "#/components/responses/rateLimited"
|
|
6451
|
+
"500":
|
|
6452
|
+
$ref: "#/components/responses/serverError"
|
|
6453
|
+
/crypto/synced/{id}/refresh:
|
|
6454
|
+
post:
|
|
6455
|
+
tags:
|
|
6456
|
+
- crypto-synced
|
|
6457
|
+
summary: Refresh balances for a synced crypto account
|
|
6458
|
+
description: Trigger a balance refresh for the specified synced crypto
|
|
6459
|
+
account. Returns the refreshed synced crypto account.
|
|
6460
|
+
operationId: refreshCryptoSynced
|
|
6461
|
+
parameters:
|
|
6462
|
+
- name: id
|
|
6463
|
+
in: path
|
|
6464
|
+
description: Synced crypto account ID
|
|
6465
|
+
required: true
|
|
6466
|
+
schema:
|
|
6467
|
+
type: integer
|
|
6468
|
+
format: int32
|
|
6469
|
+
examples:
|
|
6470
|
+
existing synced connection:
|
|
6471
|
+
summary: Existing synced account ID
|
|
6472
|
+
value: 33004
|
|
6473
|
+
id not found:
|
|
6474
|
+
summary: Example of an id that doesn't exist
|
|
6475
|
+
value: 99999999
|
|
6476
|
+
responses:
|
|
6477
|
+
"200":
|
|
6478
|
+
description: Refreshed synced crypto account
|
|
6479
|
+
content:
|
|
6480
|
+
application/json:
|
|
6481
|
+
schema:
|
|
6482
|
+
$ref: "#/components/schemas/syncedCryptoAccount"
|
|
6483
|
+
example:
|
|
6484
|
+
id: 33004
|
|
6485
|
+
provider: coinbase
|
|
6486
|
+
status: active
|
|
6487
|
+
created_by_name: User 1
|
|
6488
|
+
created_at: "2025-10-02T11:02:09.000Z"
|
|
6489
|
+
display_name: Coinbase Main
|
|
6490
|
+
balances:
|
|
6491
|
+
- name: ETH
|
|
6492
|
+
balance: "12.004500000000000000"
|
|
6493
|
+
symbol: eth
|
|
6494
|
+
coingecko_id: ethereum
|
|
6495
|
+
to_base: 28998.44
|
|
6496
|
+
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6497
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6498
|
+
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6499
|
+
- name: BTC
|
|
6500
|
+
balance: "0.100020003000400050"
|
|
6501
|
+
symbol: btc
|
|
6502
|
+
coingecko_id: bitcoin
|
|
6503
|
+
to_base: 6231.28
|
|
6504
|
+
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6505
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6506
|
+
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6507
|
+
"401":
|
|
6508
|
+
$ref: "#/components/responses/unauthorizedToken"
|
|
6509
|
+
"404":
|
|
6510
|
+
description: Not Found
|
|
6511
|
+
content:
|
|
6512
|
+
application/json:
|
|
6513
|
+
schema:
|
|
6514
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
6515
|
+
example:
|
|
6516
|
+
message: Not Found
|
|
6517
|
+
errors:
|
|
6518
|
+
- errMsg: "There is no synced crypto account with the id: 99999999."
|
|
6519
|
+
"429":
|
|
6520
|
+
$ref: "#/components/responses/rateLimited"
|
|
6521
|
+
"500":
|
|
6522
|
+
$ref: "#/components/responses/serverError"
|
|
6523
|
+
/balance_history:
|
|
6524
|
+
get:
|
|
6525
|
+
tags:
|
|
6526
|
+
- balance_history
|
|
6527
|
+
summary: Get balance history
|
|
6528
|
+
description: >-
|
|
6529
|
+
Retrieve historical balance entries.<br><br>
|
|
6530
|
+
|
|
6531
|
+
Balance history is monthly. When `start_date` and `end_date` are both provided,
|
|
6532
|
+
they must be first-of-month dates. `start_date` must not be in the future,
|
|
6533
|
+
while `end_date` may be in the future. If one of `start_date` or `end_date`
|
|
6534
|
+
is provided, the other is required. If neither is provided, all available
|
|
6535
|
+
balance history is returned.<br><br>
|
|
6536
|
+
|
|
6537
|
+
The response groups entries by source account. Each item in
|
|
6538
|
+
`balance_history` contains a `source` object plus a `balances` array
|
|
6539
|
+
containing one balance entry per month in the requested range, or all
|
|
6540
|
+
stored entries when no range is provided.<br><br>
|
|
6541
|
+
|
|
6542
|
+
Historical entries for accounts that have been deleted may still
|
|
6543
|
+
be returned. These entries use `source.type: deleted` and include
|
|
6544
|
+
`deleted_account_id`, archived display fields, and account metadata on the
|
|
6545
|
+
`source` object.
|
|
6546
|
+
operationId: getBalanceHistory
|
|
6547
|
+
parameters:
|
|
6548
|
+
- name: start_date
|
|
6549
|
+
in: query
|
|
6550
|
+
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.
|
|
6551
|
+
required: false
|
|
6552
|
+
schema:
|
|
6553
|
+
type: string
|
|
6554
|
+
format: date
|
|
6555
|
+
examples:
|
|
6556
|
+
range start:
|
|
6557
|
+
summary: Start date
|
|
6558
|
+
value: "2026-01-01"
|
|
6559
|
+
- name: end_date
|
|
6560
|
+
in: query
|
|
6561
|
+
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`.
|
|
6562
|
+
required: false
|
|
6563
|
+
schema:
|
|
6564
|
+
type: string
|
|
6565
|
+
format: date
|
|
6566
|
+
examples:
|
|
6567
|
+
range end:
|
|
6568
|
+
summary: End date
|
|
6569
|
+
value: "2026-03-01"
|
|
6570
|
+
responses:
|
|
6571
|
+
"200":
|
|
6572
|
+
description: Historical balance entries for the requested date range
|
|
6573
|
+
content:
|
|
6574
|
+
application/json:
|
|
6575
|
+
schema:
|
|
6576
|
+
$ref: "#/components/schemas/balanceHistoryListResponseObject"
|
|
6577
|
+
examples:
|
|
6578
|
+
all account types:
|
|
6579
|
+
value:
|
|
6580
|
+
balance_history:
|
|
6581
|
+
- source:
|
|
6582
|
+
type: manual
|
|
6583
|
+
manual_account_id: 119807
|
|
6584
|
+
balances:
|
|
6585
|
+
- id: 101
|
|
6586
|
+
date: "2026-01-01"
|
|
6587
|
+
balance: "41000.0000"
|
|
6588
|
+
currency: usd
|
|
6589
|
+
to_base: 41000
|
|
6590
|
+
crypto_balance: null
|
|
6591
|
+
- id: 102
|
|
6592
|
+
date: "2026-02-01"
|
|
6593
|
+
balance: "41211.8000"
|
|
6594
|
+
currency: usd
|
|
6595
|
+
to_base: 41211.8
|
|
6596
|
+
crypto_balance: null
|
|
6597
|
+
- source:
|
|
6598
|
+
type: plaid
|
|
6599
|
+
plaid_account_id: 119808
|
|
6600
|
+
balances:
|
|
6601
|
+
- id: 103
|
|
6602
|
+
date: "2026-01-01"
|
|
6603
|
+
balance: "5498.2800"
|
|
6604
|
+
currency: usd
|
|
6605
|
+
to_base: 5498.28
|
|
6606
|
+
crypto_balance: null
|
|
6607
|
+
- source:
|
|
6608
|
+
type: crypto_manual
|
|
6609
|
+
crypto_manual_id: 22001
|
|
6610
|
+
symbol: btc
|
|
6611
|
+
balances:
|
|
6612
|
+
- id: 104
|
|
6613
|
+
date: "2026-01-01"
|
|
6614
|
+
balance: "53124.7200"
|
|
6615
|
+
currency: usd
|
|
6616
|
+
to_base: 53124.72
|
|
6617
|
+
crypto_balance: "0.852341920145782301"
|
|
6618
|
+
- source:
|
|
6619
|
+
type: crypto_synced
|
|
6620
|
+
crypto_synced_id: 33004
|
|
6621
|
+
symbol: btc
|
|
6622
|
+
balances:
|
|
6623
|
+
- id: 105
|
|
6624
|
+
date: "2026-01-01"
|
|
6625
|
+
balance: "6231.2800"
|
|
6626
|
+
currency: usd
|
|
6627
|
+
to_base: 6231.28
|
|
6628
|
+
crypto_balance: "0.100020003000400050"
|
|
6629
|
+
- source:
|
|
6630
|
+
type: deleted
|
|
6631
|
+
deleted_account_id: 91
|
|
6632
|
+
name: Savings
|
|
6633
|
+
institution_name: Old Bank
|
|
6634
|
+
display_name: Closed Savings
|
|
6635
|
+
account_type: savings
|
|
6636
|
+
subtype: savings
|
|
6637
|
+
mask: "1234"
|
|
6638
|
+
symbol: null
|
|
6639
|
+
balances:
|
|
6640
|
+
- id: 106
|
|
6641
|
+
date: "2026-01-01"
|
|
6642
|
+
balance: "1250.0000"
|
|
6643
|
+
currency: usd
|
|
6644
|
+
to_base: 1250
|
|
6645
|
+
crypto_balance: null
|
|
6646
|
+
manual account history:
|
|
6647
|
+
value:
|
|
6648
|
+
balance_history:
|
|
6649
|
+
- source:
|
|
6650
|
+
type: manual
|
|
6651
|
+
manual_account_id: 119807
|
|
6652
|
+
balances:
|
|
6653
|
+
- id: 201
|
|
6654
|
+
date: "2026-01-01"
|
|
6655
|
+
balance: "41000.0000"
|
|
6656
|
+
currency: usd
|
|
6657
|
+
to_base: 41000
|
|
6658
|
+
crypto_balance: null
|
|
6659
|
+
- id: 202
|
|
6660
|
+
date: "2026-02-01"
|
|
6661
|
+
balance: "41211.8000"
|
|
6662
|
+
currency: usd
|
|
6663
|
+
to_base: 41211.8
|
|
6664
|
+
crypto_balance: null
|
|
6665
|
+
plaid account history:
|
|
6666
|
+
value:
|
|
6667
|
+
balance_history:
|
|
6668
|
+
- source:
|
|
6669
|
+
type: plaid
|
|
6670
|
+
plaid_account_id: 119808
|
|
6671
|
+
balances:
|
|
6672
|
+
- id: 301
|
|
6673
|
+
date: "2026-02-01"
|
|
6674
|
+
balance: "5498.2800"
|
|
6675
|
+
currency: usd
|
|
6676
|
+
to_base: 5498.28
|
|
6677
|
+
crypto_balance: null
|
|
6678
|
+
synced crypto history:
|
|
6679
|
+
value:
|
|
6680
|
+
balance_history:
|
|
6681
|
+
- source:
|
|
6682
|
+
type: crypto_synced
|
|
6683
|
+
crypto_synced_id: 33004
|
|
6684
|
+
symbol: btc
|
|
6685
|
+
balances:
|
|
6686
|
+
- id: 401
|
|
6687
|
+
date: "2026-02-01"
|
|
6688
|
+
balance: "6231.2800"
|
|
6689
|
+
currency: usd
|
|
6690
|
+
to_base: 6231.28
|
|
6691
|
+
crypto_balance: "0.100020003000400050"
|
|
6692
|
+
deleted account history:
|
|
6693
|
+
value:
|
|
6694
|
+
balance_history:
|
|
6695
|
+
- source:
|
|
6696
|
+
type: deleted
|
|
6697
|
+
deleted_account_id: 91
|
|
6698
|
+
name: Savings
|
|
6699
|
+
institution_name: Old Bank
|
|
6700
|
+
display_name: Closed Savings
|
|
6701
|
+
account_type: savings
|
|
6702
|
+
subtype: savings
|
|
6703
|
+
mask: "1234"
|
|
6704
|
+
symbol: null
|
|
6705
|
+
balances:
|
|
6706
|
+
- id: 501
|
|
6707
|
+
date: "2026-01-01"
|
|
6708
|
+
balance: "1250.0000"
|
|
6709
|
+
currency: usd
|
|
6710
|
+
to_base: 1250
|
|
6711
|
+
crypto_balance: null
|
|
6712
|
+
"400":
|
|
6713
|
+
description: Bad Request
|
|
6714
|
+
content:
|
|
6715
|
+
application/json:
|
|
6716
|
+
schema:
|
|
6717
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
6718
|
+
examples:
|
|
6719
|
+
missing paired date:
|
|
6720
|
+
value:
|
|
6721
|
+
message: Request Validation Failure
|
|
6722
|
+
errors:
|
|
6723
|
+
- errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
|
|
6724
|
+
invalid range:
|
|
6725
|
+
value:
|
|
6726
|
+
message: Request Validation Failure
|
|
6727
|
+
errors:
|
|
6728
|
+
- errMsg: "`start_date` must be before or equal to `end_date`."
|
|
6729
|
+
not first of month:
|
|
6730
|
+
value:
|
|
6731
|
+
message: Request Validation Failure
|
|
6732
|
+
errors:
|
|
6733
|
+
- errMsg: "`start_date` and `end_date` must both be the first day of a month."
|
|
6734
|
+
future start date:
|
|
6735
|
+
value:
|
|
6736
|
+
message: Request Validation Failure
|
|
6737
|
+
errors:
|
|
6738
|
+
- errMsg: "`start_date` must not be in the future."
|
|
6739
|
+
"401":
|
|
6740
|
+
$ref: "#/components/responses/unauthorizedToken"
|
|
6741
|
+
"429":
|
|
6742
|
+
$ref: "#/components/responses/rateLimited"
|
|
6743
|
+
"500":
|
|
6744
|
+
$ref: "#/components/responses/serverError"
|
|
6745
|
+
/balance_history/{account_type}/{account_id}:
|
|
6746
|
+
get:
|
|
6747
|
+
tags:
|
|
6748
|
+
- balance_history
|
|
6749
|
+
summary: Get balance history for an account
|
|
6750
|
+
description: >-
|
|
6751
|
+
Retrieve historical balance entries for one manual, Plaid, manual crypto,
|
|
6752
|
+
or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
|
|
6753
|
+
|
|
6754
|
+
The `account_type` path parameter identifies the type of account and the
|
|
6755
|
+
`account_id` path parameter identifies the specific id for that account type.<br><br>
|
|
6756
|
+
|
|
6757
|
+
When `start_date` and `end_date` are both provided, they must be first-of-month
|
|
6758
|
+
dates. `start_date` must not be in the future, while `end_date` may be in the future.
|
|
6759
|
+
If one of `start_date` or `end_date` is provided, the other is required. If neither is
|
|
6760
|
+
provided, all available history for the source is returned.
|
|
6761
|
+
operationId: getBalanceHistoryForAccount
|
|
6762
|
+
parameters:
|
|
6763
|
+
- name: account_type
|
|
6764
|
+
in: path
|
|
6765
|
+
required: true
|
|
6766
|
+
description: Source family to retrieve. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
|
|
6767
|
+
schema:
|
|
6768
|
+
type: string
|
|
6769
|
+
enum: [manual, plaid, crypto_manual, deleted]
|
|
6770
|
+
- name: account_id
|
|
6771
|
+
in: path
|
|
6772
|
+
required: true
|
|
6773
|
+
description: Account or deleted-source identifier within the selected `account_type`.
|
|
6774
|
+
schema:
|
|
6775
|
+
type: integer
|
|
6776
|
+
format: int32
|
|
6777
|
+
- name: start_date
|
|
6778
|
+
in: query
|
|
6779
|
+
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.
|
|
6780
|
+
required: false
|
|
6781
|
+
schema:
|
|
6782
|
+
type: string
|
|
6783
|
+
format: date
|
|
6784
|
+
- name: end_date
|
|
6785
|
+
in: query
|
|
6786
|
+
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.
|
|
6787
|
+
required: false
|
|
6788
|
+
schema:
|
|
6789
|
+
type: string
|
|
6790
|
+
format: date
|
|
6791
|
+
responses:
|
|
6792
|
+
"200":
|
|
6793
|
+
description: Historical balance entries for the requested source
|
|
6794
|
+
content:
|
|
6795
|
+
application/json:
|
|
6796
|
+
schema:
|
|
6797
|
+
$ref: "#/components/schemas/balanceHistoryListResponseObject"
|
|
6798
|
+
examples:
|
|
6799
|
+
manual account history:
|
|
6800
|
+
value:
|
|
6801
|
+
balance_history:
|
|
6802
|
+
- source:
|
|
6803
|
+
type: manual
|
|
6804
|
+
manual_account_id: 119807
|
|
6805
|
+
balances:
|
|
6806
|
+
- id: 201
|
|
6807
|
+
date: "2026-01-01"
|
|
6808
|
+
balance: "41000.0000"
|
|
6809
|
+
currency: usd
|
|
6810
|
+
to_base: 41000
|
|
6811
|
+
crypto_balance: null
|
|
6812
|
+
- id: 202
|
|
6813
|
+
date: "2026-02-01"
|
|
6814
|
+
balance: "41211.8000"
|
|
6815
|
+
currency: usd
|
|
6816
|
+
to_base: 41211.8
|
|
6817
|
+
crypto_balance: null
|
|
6818
|
+
deleted account history:
|
|
6819
|
+
value:
|
|
6820
|
+
balance_history:
|
|
6821
|
+
- source:
|
|
6822
|
+
type: deleted
|
|
6823
|
+
deleted_account_id: 91
|
|
6824
|
+
name: Savings
|
|
6825
|
+
institution_name: Old Bank
|
|
6826
|
+
display_name: Closed Savings
|
|
6827
|
+
account_type: savings
|
|
6828
|
+
subtype: savings
|
|
6829
|
+
mask: "1234"
|
|
6830
|
+
symbol: null
|
|
6831
|
+
balances:
|
|
6832
|
+
- id: 501
|
|
6833
|
+
date: "2026-01-01"
|
|
6834
|
+
balance: "1250.0000"
|
|
6835
|
+
currency: usd
|
|
6836
|
+
to_base: 1250
|
|
6837
|
+
crypto_balance: null
|
|
6838
|
+
"400":
|
|
6839
|
+
description: Bad Request
|
|
6840
|
+
content:
|
|
6841
|
+
application/json:
|
|
6842
|
+
schema:
|
|
6843
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
6844
|
+
examples:
|
|
6845
|
+
missing paired date:
|
|
6846
|
+
value:
|
|
6847
|
+
message: Request Validation Failure
|
|
6848
|
+
errors:
|
|
6849
|
+
- errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
|
|
6850
|
+
invalid range:
|
|
6851
|
+
value:
|
|
6852
|
+
message: Request Validation Failure
|
|
6853
|
+
errors:
|
|
6854
|
+
- errMsg: "`start_date` must be before or equal to `end_date`."
|
|
6855
|
+
"401":
|
|
6856
|
+
$ref: "#/components/responses/unauthorizedToken"
|
|
6857
|
+
"404":
|
|
6858
|
+
description: Not Found
|
|
6859
|
+
content:
|
|
6860
|
+
application/json:
|
|
6861
|
+
schema:
|
|
6862
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
6863
|
+
examples:
|
|
6864
|
+
manual not found:
|
|
6865
|
+
value:
|
|
6866
|
+
message: Not Found
|
|
6867
|
+
errors:
|
|
6868
|
+
- errMsg: "There is no manual account with the id: 99999999."
|
|
6869
|
+
deleted not found:
|
|
6870
|
+
value:
|
|
6871
|
+
message: Not Found
|
|
6872
|
+
errors:
|
|
6873
|
+
- errMsg: "Deleted balance history source 99999999 was not found."
|
|
6874
|
+
"429":
|
|
6875
|
+
$ref: "#/components/responses/rateLimited"
|
|
6876
|
+
"500":
|
|
6877
|
+
$ref: "#/components/responses/serverError"
|
|
6878
|
+
put:
|
|
6879
|
+
tags:
|
|
6880
|
+
- balance_history
|
|
6881
|
+
summary: Upsert balance history for an account
|
|
6882
|
+
description: >-
|
|
6883
|
+
Upsert one or more historical balance entries for a single manual, Plaid,
|
|
6884
|
+
manual crypto, or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
|
|
6885
|
+
|
|
6886
|
+
The `account_type` path parameter identifies the type of account and the
|
|
6887
|
+
`account_id` path parameter identifies the specific id for that account type.<br><br>
|
|
6888
|
+
|
|
6889
|
+
Submit one or more entries in the `balances` array. Each entry must specify
|
|
6890
|
+
a `date` and `balance` value.<br><br>
|
|
6891
|
+
|
|
6892
|
+
Balance history is monthly. Each entry's `date` must be the first day of
|
|
6893
|
+
a month and must be in a past month.<br><br>
|
|
6894
|
+
|
|
6895
|
+
`currency` may be provided for any balance entry. If omitted, it defaults
|
|
6896
|
+
to the account currency for manual/Plaid accounts, or the user's primary
|
|
6897
|
+
currency for crypto/deleted accounts.<br><br>
|
|
6898
|
+
|
|
6899
|
+
`symbol` may only be set when `account_type` is `crypto_manual` or
|
|
6900
|
+
`crypto_synced`. It is optional for `crypto_manual` accounts and tolerated
|
|
6901
|
+
for `deleted` accounts.<br><br>
|
|
6902
|
+
|
|
6903
|
+
`crypto_balance` may be provided for `crypto_manual`, `crypto_synced`, and
|
|
6904
|
+
`deleted` accounts, and is invalid for `manual` or `plaid` accounts.<br><br>
|
|
6905
|
+
|
|
6906
|
+
The response contains only the balance entries that were submitted in this request.
|
|
6907
|
+
operationId: upsertBalanceHistoryForAccount
|
|
6908
|
+
parameters:
|
|
6909
|
+
- name: account_type
|
|
6910
|
+
in: path
|
|
6911
|
+
required: true
|
|
6912
|
+
description: Source family to update. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
|
|
6913
|
+
schema:
|
|
6914
|
+
type: string
|
|
6915
|
+
enum: [manual, plaid, crypto_manual, deleted]
|
|
6916
|
+
- name: account_id
|
|
6917
|
+
in: path
|
|
6918
|
+
required: true
|
|
6919
|
+
description: Account or deleted-source identifier within the selected `account_type`.
|
|
6920
|
+
schema:
|
|
6921
|
+
type: integer
|
|
6922
|
+
format: int32
|
|
6923
|
+
requestBody:
|
|
6924
|
+
required: true
|
|
6925
|
+
content:
|
|
6926
|
+
application/json:
|
|
6927
|
+
schema:
|
|
6928
|
+
$ref: "#/components/schemas/upsertBalanceHistoryRequestObject"
|
|
6929
|
+
examples:
|
|
6930
|
+
manual account bulk upsert:
|
|
6931
|
+
value:
|
|
6932
|
+
balances:
|
|
6933
|
+
- date: "2026-03-01"
|
|
6934
|
+
balance: "41500.0000"
|
|
6935
|
+
- date: "2026-04-01"
|
|
6936
|
+
balance: "41625.5000"
|
|
6937
|
+
crypto manual balance with symbol:
|
|
6938
|
+
value:
|
|
6939
|
+
balances:
|
|
6940
|
+
- date: "2026-03-01"
|
|
6941
|
+
balance: "56011.1200"
|
|
6942
|
+
symbol: btc
|
|
6943
|
+
crypto_balance: "0.852341920145782301"
|
|
6944
|
+
deleted account bulk upsert:
|
|
6945
|
+
value:
|
|
6946
|
+
balances:
|
|
6947
|
+
- date: "2026-03-01"
|
|
6948
|
+
symbol: btc
|
|
6949
|
+
crypto_balance: "0.020000000000000000"
|
|
6950
|
+
currency: usd
|
|
6951
|
+
balance: "1255"
|
|
6952
|
+
get-shaped balance entry input:
|
|
6953
|
+
value:
|
|
6954
|
+
balances:
|
|
6955
|
+
- id: 601
|
|
6956
|
+
date: "2026-03-01"
|
|
6957
|
+
balance: "41500.0000"
|
|
6958
|
+
currency: usd
|
|
6959
|
+
to_base: 41500
|
|
6960
|
+
crypto_balance: null
|
|
6961
|
+
responses:
|
|
6962
|
+
"200":
|
|
6963
|
+
description: Returns the modified balance entries only. Other historical
|
|
6964
|
+
entries for the account are omitted from `balances`.
|
|
6965
|
+
content:
|
|
6966
|
+
application/json:
|
|
6967
|
+
schema:
|
|
6968
|
+
$ref: "#/components/schemas/balanceHistoryAccountObject"
|
|
6969
|
+
examples:
|
|
6970
|
+
manual account bulk upsert:
|
|
6971
|
+
summary: Two upserted rows returned (not full account history)
|
|
6972
|
+
value:
|
|
6973
|
+
source:
|
|
6974
|
+
type: manual
|
|
6975
|
+
manual_account_id: 119807
|
|
6976
|
+
balances:
|
|
6977
|
+
- id: 601
|
|
6978
|
+
date: "2026-03-01"
|
|
6979
|
+
balance: "41500.0000"
|
|
6980
|
+
currency: usd
|
|
6981
|
+
to_base: 41500
|
|
6982
|
+
crypto_balance: null
|
|
6983
|
+
- id: 602
|
|
6984
|
+
date: "2026-04-01"
|
|
6985
|
+
balance: "41625.5000"
|
|
6986
|
+
currency: usd
|
|
6987
|
+
to_base: 41625.5
|
|
6988
|
+
crypto_balance: null
|
|
6989
|
+
crypto manual balance with symbol:
|
|
6990
|
+
summary: Single upserted row returned
|
|
6991
|
+
value:
|
|
6992
|
+
source:
|
|
6993
|
+
type: crypto_manual
|
|
6994
|
+
crypto_manual_id: 22001
|
|
6995
|
+
symbol: btc
|
|
6996
|
+
balances:
|
|
6997
|
+
- id: 603
|
|
6998
|
+
date: "2026-03-01"
|
|
6999
|
+
balance: "56011.1200"
|
|
7000
|
+
currency: usd
|
|
7001
|
+
to_base: 56011.12
|
|
7002
|
+
crypto_balance: "0.852341920145782301"
|
|
7003
|
+
deleted account bulk upsert:
|
|
7004
|
+
summary: Single upserted row returned
|
|
7005
|
+
value:
|
|
7006
|
+
source:
|
|
7007
|
+
type: deleted
|
|
7008
|
+
deleted_account_id: 91
|
|
7009
|
+
name: Savings
|
|
7010
|
+
institution_name: Old Bank
|
|
7011
|
+
display_name: Closed Savings
|
|
7012
|
+
account_type: savings
|
|
7013
|
+
subtype: savings
|
|
7014
|
+
mask: "1234"
|
|
7015
|
+
symbol: btc
|
|
7016
|
+
balances:
|
|
7017
|
+
- id: 504
|
|
7018
|
+
date: "2026-03-01"
|
|
7019
|
+
balance: "1255"
|
|
7020
|
+
currency: usd
|
|
7021
|
+
to_base: 1255
|
|
7022
|
+
crypto_balance: "0.020000000000000000"
|
|
7023
|
+
"400":
|
|
7024
|
+
description: Bad Request. The entire request is rejected if any row in
|
|
7025
|
+
`balances` fails validation; no rows are updated.
|
|
7026
|
+
content:
|
|
7027
|
+
application/json:
|
|
7028
|
+
schema:
|
|
7029
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
7030
|
+
examples:
|
|
7031
|
+
missing balances:
|
|
7032
|
+
value:
|
|
7033
|
+
message: Invalid Request Body
|
|
7034
|
+
errors:
|
|
7035
|
+
- errMsg: "Missing required property 'balances' in request body."
|
|
7036
|
+
empty balances array:
|
|
7037
|
+
value:
|
|
7038
|
+
message: Invalid Request Body
|
|
7039
|
+
errors:
|
|
7040
|
+
- errMsg: "Invalid value for property 'balances'. Array must contain at least 1 element(s)"
|
|
7041
|
+
invalid property:
|
|
7042
|
+
value:
|
|
7043
|
+
message: Invalid Request Body
|
|
7044
|
+
errors:
|
|
7045
|
+
- errMsg: "Invalid property 'foo' in request body."
|
|
7046
|
+
invalid date:
|
|
7047
|
+
value:
|
|
7048
|
+
message: Request Validation Failure
|
|
7049
|
+
errors:
|
|
7050
|
+
- errMsg: "`date` must be the first day of a month."
|
|
7051
|
+
request_balances_index: 0
|
|
7052
|
+
code: VALIDATION_ERROR
|
|
7053
|
+
future date:
|
|
7054
|
+
value:
|
|
7055
|
+
message: Request Validation Failure
|
|
7056
|
+
errors:
|
|
7057
|
+
- errMsg: "`date` must be in a past month."
|
|
7058
|
+
request_balances_index: 1
|
|
7059
|
+
crypto balance not allowed:
|
|
7060
|
+
value:
|
|
7061
|
+
message: Request Validation Failure
|
|
7062
|
+
errors:
|
|
7063
|
+
- errMsg: "`crypto_balance` may only be set when `account_type` is `crypto_manual`, `crypto_synced`, or `deleted`."
|
|
7064
|
+
request_balances_index: 0
|
|
7065
|
+
invalid row in bulk request:
|
|
7066
|
+
value:
|
|
7067
|
+
message: Request Validation Failure
|
|
7068
|
+
errors:
|
|
7069
|
+
- errMsg: "`symbol` may only be set when `account_type` is `crypto_manual` or `crypto_synced`."
|
|
7070
|
+
request_balances_index: 1
|
|
7071
|
+
"401":
|
|
7072
|
+
$ref: "#/components/responses/unauthorizedToken"
|
|
7073
|
+
"404":
|
|
7074
|
+
description: Not Found
|
|
7075
|
+
content:
|
|
7076
|
+
application/json:
|
|
7077
|
+
schema:
|
|
7078
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
7079
|
+
example:
|
|
7080
|
+
message: Not Found
|
|
7081
|
+
errors:
|
|
7082
|
+
- errMsg: "There is no manual account with the id: 99999999."
|
|
7083
|
+
"429":
|
|
7084
|
+
$ref: "#/components/responses/rateLimited"
|
|
7085
|
+
"500":
|
|
7086
|
+
$ref: "#/components/responses/serverError"
|
|
7087
|
+
delete:
|
|
7088
|
+
tags:
|
|
7089
|
+
- balance_history
|
|
7090
|
+
summary: Delete all balance history for an account
|
|
7091
|
+
description: >-
|
|
7092
|
+
Delete all historical balance entries for a single manual, Plaid,
|
|
7093
|
+
manual crypto, or deleted account. Crypto synced accounts require an additional `symbol` path parameter.
|
|
7094
|
+
operationId: deleteBalanceHistoryForAccount
|
|
7095
|
+
parameters:
|
|
7096
|
+
- name: account_type
|
|
7097
|
+
in: path
|
|
7098
|
+
required: true
|
|
7099
|
+
description: Source family to delete. Use `manual`, `plaid`, `crypto_manual`, or `deleted`.
|
|
7100
|
+
schema:
|
|
7101
|
+
type: string
|
|
7102
|
+
enum: [manual, plaid, crypto_manual, deleted]
|
|
7103
|
+
- name: account_id
|
|
7104
|
+
in: path
|
|
7105
|
+
required: true
|
|
7106
|
+
description: Account or deleted-source identifier within the selected `account_type`.
|
|
7107
|
+
schema:
|
|
7108
|
+
type: integer
|
|
7109
|
+
format: int32
|
|
7110
|
+
responses:
|
|
7111
|
+
"204":
|
|
7112
|
+
description: All history for the account/source was deleted
|
|
7113
|
+
"401":
|
|
7114
|
+
$ref: "#/components/responses/unauthorizedToken"
|
|
7115
|
+
"404":
|
|
7116
|
+
description: Not Found
|
|
7117
|
+
content:
|
|
7118
|
+
application/json:
|
|
7119
|
+
schema:
|
|
7120
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
7121
|
+
examples:
|
|
7122
|
+
source not found:
|
|
7123
|
+
value:
|
|
7124
|
+
message: Not Found
|
|
7125
|
+
errors:
|
|
7126
|
+
- errMsg: "There is no manual account with the id: 99999999."
|
|
7127
|
+
"429":
|
|
7128
|
+
$ref: "#/components/responses/rateLimited"
|
|
7129
|
+
"500":
|
|
7130
|
+
$ref: "#/components/responses/serverError"
|
|
7131
|
+
/balance_history/crypto_synced/{account_id}/{symbol}:
|
|
7132
|
+
get:
|
|
7133
|
+
tags:
|
|
7134
|
+
- balance_history
|
|
7135
|
+
summary: Get balance history for a synced crypto symbol
|
|
7136
|
+
description: >-
|
|
7137
|
+
Retrieve historical balance entries for a single synced crypto symbol stream.<br><br>
|
|
7138
|
+
|
|
7139
|
+
Use the `crypto_synced` account id together with a `symbol` path parameter
|
|
7140
|
+
to select one balance stream within that synced crypto account.<br><br>
|
|
7141
|
+
|
|
7142
|
+
When `start_date` and `end_date` are both provided, they must be first-of-month
|
|
7143
|
+
dates. `start_date` must not be in the future, while `end_date` may be in the future.
|
|
7144
|
+
If one of `start_date` or `end_date` is provided, the other is required. If neither is
|
|
7145
|
+
provided, all available history for the symbol stream is returned.
|
|
7146
|
+
operationId: getBalanceHistoryForCryptoSynced
|
|
7147
|
+
parameters:
|
|
7148
|
+
- name: account_id
|
|
7149
|
+
in: path
|
|
7150
|
+
required: true
|
|
7151
|
+
description: Synced crypto account identifier.
|
|
7152
|
+
schema:
|
|
7153
|
+
type: integer
|
|
7154
|
+
format: int32
|
|
7155
|
+
- name: symbol
|
|
7156
|
+
in: path
|
|
7157
|
+
required: true
|
|
7158
|
+
description: Crypto symbol identifying one balance stream within the synced crypto account.
|
|
7159
|
+
schema:
|
|
7160
|
+
type: string
|
|
7161
|
+
minLength: 1
|
|
7162
|
+
maxLength: 25
|
|
7163
|
+
- name: start_date
|
|
7164
|
+
in: query
|
|
7165
|
+
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.
|
|
7166
|
+
required: false
|
|
7167
|
+
schema:
|
|
7168
|
+
type: string
|
|
7169
|
+
format: date
|
|
7170
|
+
- name: end_date
|
|
7171
|
+
in: query
|
|
7172
|
+
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.
|
|
7173
|
+
required: false
|
|
7174
|
+
schema:
|
|
7175
|
+
type: string
|
|
7176
|
+
format: date
|
|
7177
|
+
responses:
|
|
7178
|
+
"200":
|
|
7179
|
+
description: Historical balance entries for the synced crypto symbol stream
|
|
5954
7180
|
content:
|
|
5955
7181
|
application/json:
|
|
5956
7182
|
schema:
|
|
5957
|
-
$ref: "#/components/schemas/
|
|
7183
|
+
$ref: "#/components/schemas/balanceHistoryListResponseObject"
|
|
5958
7184
|
example:
|
|
5959
|
-
|
|
5960
|
-
|
|
5961
|
-
|
|
5962
|
-
|
|
5963
|
-
|
|
5964
|
-
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
|
|
5969
|
-
|
|
5970
|
-
|
|
5971
|
-
to_base: 28998.44
|
|
5972
|
-
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
5973
|
-
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
5974
|
-
updated_at: "2026-02-25T14:25:01.000Z"
|
|
5975
|
-
- name: BTC
|
|
5976
|
-
balance: "0.100020003000400050"
|
|
5977
|
-
symbol: btc
|
|
5978
|
-
coingecko_id: bitcoin
|
|
5979
|
-
to_base: 6231.28
|
|
5980
|
-
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
5981
|
-
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
5982
|
-
updated_at: "2026-02-25T14:25:01.000Z"
|
|
7185
|
+
balance_history:
|
|
7186
|
+
- source:
|
|
7187
|
+
type: crypto_synced
|
|
7188
|
+
crypto_synced_id: 33004
|
|
7189
|
+
symbol: btc
|
|
7190
|
+
balances:
|
|
7191
|
+
- id: 401
|
|
7192
|
+
date: "2026-02-01"
|
|
7193
|
+
balance: "6231.2800"
|
|
7194
|
+
currency: usd
|
|
7195
|
+
to_base: 6231.28
|
|
7196
|
+
crypto_balance: "0.100020003000400050"
|
|
5983
7197
|
"400":
|
|
5984
7198
|
description: Bad Request
|
|
5985
7199
|
content:
|
|
5986
7200
|
application/json:
|
|
5987
7201
|
schema:
|
|
5988
7202
|
$ref: "#/components/schemas/errorResponseObject"
|
|
5989
|
-
|
|
5990
|
-
|
|
5991
|
-
|
|
5992
|
-
|
|
7203
|
+
examples:
|
|
7204
|
+
missing paired date:
|
|
7205
|
+
value:
|
|
7206
|
+
message: Request Validation Failure
|
|
7207
|
+
errors:
|
|
7208
|
+
- errMsg: "`start_date` and `end_date` must either both be provided or both be omitted."
|
|
7209
|
+
invalid range:
|
|
7210
|
+
value:
|
|
7211
|
+
message: Request Validation Failure
|
|
7212
|
+
errors:
|
|
7213
|
+
- errMsg: "`start_date` must be before or equal to `end_date`."
|
|
5993
7214
|
"401":
|
|
5994
7215
|
$ref: "#/components/responses/unauthorizedToken"
|
|
5995
7216
|
"404":
|
|
@@ -5998,71 +7219,151 @@ paths:
|
|
|
5998
7219
|
application/json:
|
|
5999
7220
|
schema:
|
|
6000
7221
|
$ref: "#/components/schemas/errorResponseObject"
|
|
6001
|
-
|
|
6002
|
-
|
|
6003
|
-
|
|
6004
|
-
|
|
7222
|
+
examples:
|
|
7223
|
+
source not found:
|
|
7224
|
+
value:
|
|
7225
|
+
message: Not Found
|
|
7226
|
+
errors:
|
|
7227
|
+
- errMsg: "There is no synced crypto account with the id: 99999999."
|
|
7228
|
+
symbol not found:
|
|
7229
|
+
value:
|
|
7230
|
+
message: Not Found
|
|
7231
|
+
errors:
|
|
7232
|
+
- errMsg: "There is no balance history for symbol 'doge' on this account."
|
|
6005
7233
|
"429":
|
|
6006
7234
|
$ref: "#/components/responses/rateLimited"
|
|
6007
7235
|
"500":
|
|
6008
7236
|
$ref: "#/components/responses/serverError"
|
|
6009
|
-
|
|
6010
|
-
get:
|
|
7237
|
+
put:
|
|
6011
7238
|
tags:
|
|
6012
|
-
-
|
|
6013
|
-
summary:
|
|
6014
|
-
description:
|
|
6015
|
-
|
|
6016
|
-
|
|
7239
|
+
- balance_history
|
|
7240
|
+
summary: Upsert balance history for a synced crypto symbol
|
|
7241
|
+
description: >-
|
|
7242
|
+
Upsert one or more historical balance entries for a single synced crypto
|
|
7243
|
+
symbol stream.<br><br>
|
|
7244
|
+
|
|
7245
|
+
The path identifies both the synced crypto account and the symbol being updated.<br><br>
|
|
7246
|
+
|
|
7247
|
+
Submit one or more entries in the `balances` array. Each entry must specify
|
|
7248
|
+
a `date` and `balance` value.<br><br>
|
|
7249
|
+
|
|
7250
|
+
Balance history is monthly. Each entry's `date` must be the first day of
|
|
7251
|
+
a month and must be in a past month.<br><br>
|
|
7252
|
+
|
|
7253
|
+
The request body may include an optional `symbol` on each balance entry. If
|
|
7254
|
+
provided, it must match the `symbol` path parameter. Omit `symbol` to use
|
|
7255
|
+
the path value.<br><br>
|
|
7256
|
+
|
|
7257
|
+
`currency` may be provided for any balance entry. If omitted, it defaults
|
|
7258
|
+
to the user's primary currency for synced crypto balances.<br><br>
|
|
7259
|
+
|
|
7260
|
+
`crypto_balance` may be provided for synced crypto balances.<br><br>
|
|
7261
|
+
|
|
7262
|
+
The response contains only the balance entries that were submitted in this request.
|
|
7263
|
+
operationId: upsertBalanceHistoryForCryptoSynced
|
|
6017
7264
|
parameters:
|
|
6018
|
-
- name:
|
|
7265
|
+
- name: account_id
|
|
6019
7266
|
in: path
|
|
6020
|
-
description: Synced crypto account ID
|
|
6021
7267
|
required: true
|
|
7268
|
+
description: Synced crypto account identifier to update.
|
|
6022
7269
|
schema:
|
|
6023
7270
|
type: integer
|
|
6024
7271
|
format: int32
|
|
6025
7272
|
- name: symbol
|
|
6026
7273
|
in: path
|
|
6027
|
-
description: Crypto symbol within the synced account
|
|
6028
7274
|
required: true
|
|
7275
|
+
description: Crypto symbol identifying one balance stream within the synced crypto account.
|
|
6029
7276
|
schema:
|
|
6030
7277
|
type: string
|
|
6031
7278
|
minLength: 1
|
|
6032
7279
|
maxLength: 25
|
|
7280
|
+
requestBody:
|
|
7281
|
+
required: true
|
|
7282
|
+
content:
|
|
7283
|
+
application/json:
|
|
7284
|
+
schema:
|
|
7285
|
+
$ref: "#/components/schemas/upsertBalanceHistoryRequestObject"
|
|
7286
|
+
examples:
|
|
7287
|
+
synced crypto bulk upsert:
|
|
7288
|
+
value:
|
|
7289
|
+
balances:
|
|
7290
|
+
- date: "2026-03-01"
|
|
7291
|
+
balance: "6400.0000"
|
|
7292
|
+
crypto_balance: "0.100020003000400050"
|
|
7293
|
+
- date: "2026-04-01"
|
|
7294
|
+
balance: "6500.0000"
|
|
7295
|
+
crypto_balance: "0.100020003000400050"
|
|
6033
7296
|
responses:
|
|
6034
7297
|
"200":
|
|
6035
|
-
description:
|
|
7298
|
+
description: Returns the modified balance entries only. Other historical
|
|
7299
|
+
entries for the symbol stream are omitted from `balances`.
|
|
6036
7300
|
content:
|
|
6037
7301
|
application/json:
|
|
6038
7302
|
schema:
|
|
6039
|
-
$ref: "#/components/schemas/
|
|
6040
|
-
|
|
6041
|
-
|
|
6042
|
-
|
|
6043
|
-
|
|
6044
|
-
|
|
6045
|
-
|
|
6046
|
-
|
|
6047
|
-
|
|
6048
|
-
|
|
7303
|
+
$ref: "#/components/schemas/balanceHistoryAccountObject"
|
|
7304
|
+
examples:
|
|
7305
|
+
synced crypto bulk upsert:
|
|
7306
|
+
summary: Two upserted rows returned (not full symbol history)
|
|
7307
|
+
value:
|
|
7308
|
+
source:
|
|
7309
|
+
type: crypto_synced
|
|
7310
|
+
crypto_synced_id: 33004
|
|
7311
|
+
symbol: btc
|
|
7312
|
+
balances:
|
|
7313
|
+
- id: 604
|
|
7314
|
+
date: "2026-03-01"
|
|
7315
|
+
balance: "6400.0000"
|
|
7316
|
+
currency: usd
|
|
7317
|
+
to_base: 6400
|
|
7318
|
+
crypto_balance: "0.100020003000400050"
|
|
7319
|
+
- id: 605
|
|
7320
|
+
date: "2026-04-01"
|
|
7321
|
+
balance: "6500.0000"
|
|
7322
|
+
currency: usd
|
|
7323
|
+
to_base: 6500
|
|
7324
|
+
crypto_balance: "0.100020003000400050"
|
|
6049
7325
|
"400":
|
|
6050
|
-
description: Bad Request
|
|
7326
|
+
description: Bad Request. The entire request is rejected if any row in
|
|
7327
|
+
`balances` fails validation; no rows are updated.
|
|
6051
7328
|
content:
|
|
6052
7329
|
application/json:
|
|
6053
7330
|
schema:
|
|
6054
7331
|
$ref: "#/components/schemas/errorResponseObject"
|
|
6055
7332
|
examples:
|
|
6056
|
-
|
|
7333
|
+
missing balances:
|
|
6057
7334
|
value:
|
|
6058
|
-
message: Invalid
|
|
7335
|
+
message: Invalid Request Body
|
|
6059
7336
|
errors:
|
|
6060
|
-
- errMsg: "
|
|
6061
|
-
|
|
7337
|
+
- errMsg: "Missing required property 'balances' in request body."
|
|
7338
|
+
empty balances array:
|
|
6062
7339
|
value:
|
|
6063
|
-
message: Invalid
|
|
7340
|
+
message: Invalid Request Body
|
|
6064
7341
|
errors:
|
|
6065
|
-
- errMsg: "
|
|
7342
|
+
- errMsg: "Invalid value for property 'balances'. Array must contain at least 1 element(s)"
|
|
7343
|
+
invalid date:
|
|
7344
|
+
value:
|
|
7345
|
+
message: Request Validation Failure
|
|
7346
|
+
errors:
|
|
7347
|
+
- errMsg: "`date` must be the first day of a month."
|
|
7348
|
+
request_balances_index: 0
|
|
7349
|
+
future date:
|
|
7350
|
+
value:
|
|
7351
|
+
message: Request Validation Failure
|
|
7352
|
+
errors:
|
|
7353
|
+
- errMsg: "`date` must be in a past month."
|
|
7354
|
+
request_balances_index: 1
|
|
7355
|
+
symbol mismatch:
|
|
7356
|
+
value:
|
|
7357
|
+
message: Request Validation Failure
|
|
7358
|
+
errors:
|
|
7359
|
+
- errMsg: "`symbol` in request body (doge) does not match the path symbol (eth)."
|
|
7360
|
+
request_balances_index: 0
|
|
7361
|
+
invalid row in bulk request:
|
|
7362
|
+
value:
|
|
7363
|
+
message: Request Validation Failure
|
|
7364
|
+
errors:
|
|
7365
|
+
- errMsg: "`balance` must be a valid numeric string or number."
|
|
7366
|
+
request_balances_index: 1
|
|
6066
7367
|
"401":
|
|
6067
7368
|
$ref: "#/components/responses/unauthorizedToken"
|
|
6068
7369
|
"404":
|
|
@@ -6072,7 +7373,7 @@ paths:
|
|
|
6072
7373
|
schema:
|
|
6073
7374
|
$ref: "#/components/schemas/errorResponseObject"
|
|
6074
7375
|
examples:
|
|
6075
|
-
|
|
7376
|
+
source not found:
|
|
6076
7377
|
value:
|
|
6077
7378
|
message: Not Found
|
|
6078
7379
|
errors:
|
|
@@ -6081,65 +7382,160 @@ paths:
|
|
|
6081
7382
|
value:
|
|
6082
7383
|
message: Not Found
|
|
6083
7384
|
errors:
|
|
6084
|
-
- errMsg: "There is no
|
|
7385
|
+
- errMsg: "There is no balance history for symbol 'doge' on this account."
|
|
6085
7386
|
"429":
|
|
6086
7387
|
$ref: "#/components/responses/rateLimited"
|
|
6087
7388
|
"500":
|
|
6088
7389
|
$ref: "#/components/responses/serverError"
|
|
6089
|
-
|
|
6090
|
-
post:
|
|
7390
|
+
delete:
|
|
6091
7391
|
tags:
|
|
6092
|
-
-
|
|
6093
|
-
summary:
|
|
6094
|
-
description:
|
|
6095
|
-
|
|
6096
|
-
|
|
7392
|
+
- balance_history
|
|
7393
|
+
summary: Delete all balance history for a synced crypto symbol
|
|
7394
|
+
description: >-
|
|
7395
|
+
Delete all historical balance entries for a single synced crypto symbol stream.<br><br>
|
|
7396
|
+
|
|
7397
|
+
The path identifies both the synced crypto account and the symbol whose
|
|
7398
|
+
history should be deleted.
|
|
7399
|
+
operationId: deleteBalanceHistoryForCryptoSynced
|
|
7400
|
+
parameters:
|
|
7401
|
+
- name: account_id
|
|
7402
|
+
in: path
|
|
7403
|
+
required: true
|
|
7404
|
+
description: Synced crypto account identifier.
|
|
7405
|
+
schema:
|
|
7406
|
+
type: integer
|
|
7407
|
+
format: int32
|
|
7408
|
+
- name: symbol
|
|
7409
|
+
in: path
|
|
7410
|
+
required: true
|
|
7411
|
+
description: Crypto symbol identifying one balance stream within the synced crypto account.
|
|
7412
|
+
schema:
|
|
7413
|
+
type: string
|
|
7414
|
+
minLength: 1
|
|
7415
|
+
maxLength: 25
|
|
7416
|
+
responses:
|
|
7417
|
+
"204":
|
|
7418
|
+
description: All history for the synced crypto symbol stream was deleted
|
|
7419
|
+
"401":
|
|
7420
|
+
$ref: "#/components/responses/unauthorizedToken"
|
|
7421
|
+
"404":
|
|
7422
|
+
description: Not Found
|
|
7423
|
+
content:
|
|
7424
|
+
application/json:
|
|
7425
|
+
schema:
|
|
7426
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
7427
|
+
example:
|
|
7428
|
+
message: Not Found
|
|
7429
|
+
errors:
|
|
7430
|
+
- errMsg: "There is no balance history for symbol 'doge' on this account."
|
|
7431
|
+
"429":
|
|
7432
|
+
$ref: "#/components/responses/rateLimited"
|
|
7433
|
+
"500":
|
|
7434
|
+
$ref: "#/components/responses/serverError"
|
|
7435
|
+
/balance_history/entries/{id}:
|
|
7436
|
+
delete:
|
|
7437
|
+
tags:
|
|
7438
|
+
- balance_history
|
|
7439
|
+
summary: Delete a balance history entry
|
|
7440
|
+
description: >-
|
|
7441
|
+
Delete a single monthly balance history entry by its id.
|
|
7442
|
+
operationId: deleteBalanceHistoryEntry
|
|
6097
7443
|
parameters:
|
|
6098
7444
|
- name: id
|
|
6099
7445
|
in: path
|
|
6100
|
-
description: Synced crypto account ID
|
|
6101
7446
|
required: true
|
|
7447
|
+
description: Balance history row identifier to delete.
|
|
6102
7448
|
schema:
|
|
6103
7449
|
type: integer
|
|
6104
7450
|
format: int32
|
|
6105
|
-
|
|
6106
|
-
|
|
6107
|
-
|
|
6108
|
-
|
|
6109
|
-
|
|
6110
|
-
|
|
6111
|
-
|
|
7451
|
+
responses:
|
|
7452
|
+
"204":
|
|
7453
|
+
description: The balance history entry was deleted
|
|
7454
|
+
"400":
|
|
7455
|
+
description: Bad Request
|
|
7456
|
+
content:
|
|
7457
|
+
application/json:
|
|
7458
|
+
schema:
|
|
7459
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
7460
|
+
example:
|
|
7461
|
+
message: Request Validation Failure
|
|
7462
|
+
errors:
|
|
7463
|
+
- errMsg: "Invalid value type for path parameter: 'id'. Expected 'number', received 'string'."
|
|
7464
|
+
"401":
|
|
7465
|
+
$ref: "#/components/responses/unauthorizedToken"
|
|
7466
|
+
"404":
|
|
7467
|
+
description: Not Found
|
|
7468
|
+
content:
|
|
7469
|
+
application/json:
|
|
7470
|
+
schema:
|
|
7471
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
7472
|
+
example:
|
|
7473
|
+
message: Not Found
|
|
7474
|
+
errors:
|
|
7475
|
+
- errMsg: "There is no balance history entry with the id: 99999999."
|
|
7476
|
+
"429":
|
|
7477
|
+
$ref: "#/components/responses/rateLimited"
|
|
7478
|
+
"500":
|
|
7479
|
+
$ref: "#/components/responses/serverError"
|
|
7480
|
+
/balance_history/deleted/{account_id}/details:
|
|
7481
|
+
put:
|
|
7482
|
+
tags:
|
|
7483
|
+
- balance_history
|
|
7484
|
+
summary: Update details for a deleted account
|
|
7485
|
+
description: >-
|
|
7486
|
+
Update archived metadata for a deleted balance history source.<br><br>
|
|
7487
|
+
|
|
7488
|
+
Pass the `deleted` source id returned on `source.deleted_account_id`.
|
|
7489
|
+
This endpoint updates the stored deleted-source metadata used for all
|
|
7490
|
+
historical entries associated with that deleted source.
|
|
7491
|
+
operationId: updateBalanceHistoryDetails
|
|
7492
|
+
parameters:
|
|
7493
|
+
- name: account_id
|
|
7494
|
+
in: path
|
|
7495
|
+
required: true
|
|
7496
|
+
description: Deleted account history source identifier to update.
|
|
7497
|
+
schema:
|
|
7498
|
+
type: integer
|
|
7499
|
+
format: int32
|
|
7500
|
+
requestBody:
|
|
7501
|
+
required: true
|
|
7502
|
+
content:
|
|
7503
|
+
application/json:
|
|
7504
|
+
schema:
|
|
7505
|
+
$ref: "#/components/schemas/updateBalanceHistoryDetailsRequestObject"
|
|
7506
|
+
examples:
|
|
7507
|
+
update deleted source details:
|
|
7508
|
+
value:
|
|
7509
|
+
name: Savings
|
|
7510
|
+
institution_name: Old Bank
|
|
7511
|
+
display_name: Old Savings Account
|
|
7512
|
+
account_type: savings
|
|
7513
|
+
subtype: savings
|
|
7514
|
+
mask: "1234"
|
|
6112
7515
|
responses:
|
|
6113
7516
|
"200":
|
|
6114
|
-
description:
|
|
7517
|
+
description: Updated deleted source details
|
|
6115
7518
|
content:
|
|
6116
7519
|
application/json:
|
|
6117
7520
|
schema:
|
|
6118
|
-
$ref: "#/components/schemas/
|
|
7521
|
+
$ref: "#/components/schemas/updateBalanceHistoryDetailsResponseObject"
|
|
6119
7522
|
example:
|
|
6120
|
-
|
|
6121
|
-
|
|
6122
|
-
|
|
6123
|
-
|
|
6124
|
-
|
|
6125
|
-
|
|
6126
|
-
|
|
6127
|
-
|
|
6128
|
-
|
|
6129
|
-
|
|
6130
|
-
|
|
6131
|
-
|
|
6132
|
-
|
|
6133
|
-
|
|
6134
|
-
|
|
6135
|
-
-
|
|
6136
|
-
balance: "0.100020003000400050"
|
|
6137
|
-
symbol: btc
|
|
6138
|
-
coingecko_id: bitcoin
|
|
6139
|
-
to_base: 6231.28
|
|
6140
|
-
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6141
|
-
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6142
|
-
updated_at: "2026-02-25T14:25:01.000Z"
|
|
7523
|
+
name: Savings
|
|
7524
|
+
institution_name: Old Bank
|
|
7525
|
+
display_name: Old Savings Account
|
|
7526
|
+
account_type: savings
|
|
7527
|
+
subtype: savings
|
|
7528
|
+
mask: "1234"
|
|
7529
|
+
"400":
|
|
7530
|
+
description: Bad Request
|
|
7531
|
+
content:
|
|
7532
|
+
application/json:
|
|
7533
|
+
schema:
|
|
7534
|
+
$ref: "#/components/schemas/errorResponseObject"
|
|
7535
|
+
example:
|
|
7536
|
+
message: Invalid Request Body
|
|
7537
|
+
errors:
|
|
7538
|
+
- errMsg: "At least one property must be provided: name, institution_name, display_name, account_type, subtype, mask."
|
|
6143
7539
|
"401":
|
|
6144
7540
|
$ref: "#/components/responses/unauthorizedToken"
|
|
6145
7541
|
"404":
|
|
@@ -6151,7 +7547,7 @@ paths:
|
|
|
6151
7547
|
example:
|
|
6152
7548
|
message: Not Found
|
|
6153
7549
|
errors:
|
|
6154
|
-
- errMsg: "
|
|
7550
|
+
- errMsg: "Deleted balance history source 99999999 was not found."
|
|
6155
7551
|
"429":
|
|
6156
7552
|
$ref: "#/components/responses/rateLimited"
|
|
6157
7553
|
"500":
|
|
@@ -7165,19 +8561,19 @@ paths:
|
|
|
7165
8561
|
description: Sets the maximum number of transactions to return. If
|
|
7166
8562
|
more match the filter criteria, the response will include a
|
|
7167
8563
|
`has_more` attribute set to `true`. See
|
|
7168
|
-
[Pagination](https://
|
|
8564
|
+
[Pagination](https://lunchmoney.dev/v2/pagination)
|
|
7169
8565
|
- name: offset
|
|
7170
8566
|
in: query
|
|
7171
8567
|
schema:
|
|
7172
8568
|
type: integer
|
|
7173
8569
|
description: Sets the offset for the records returned. This is
|
|
7174
8570
|
typically set automatically in the header. See
|
|
7175
|
-
[Pagination](https://
|
|
8571
|
+
[Pagination](https://lunchmoney.dev/v2/pagination)
|
|
7176
8572
|
responses:
|
|
7177
8573
|
"200":
|
|
7178
8574
|
description: Returns an array of transactions. <br><br>The `has_more`
|
|
7179
8575
|
property is set to `true` if more transactions are available. See
|
|
7180
|
-
[Pagination](https://
|
|
8576
|
+
[Pagination](https://lunchmoney.dev/v2/pagination)
|
|
7181
8577
|
content:
|
|
7182
8578
|
application/json:
|
|
7183
8579
|
schema:
|
|
@@ -8843,6 +10239,7 @@ paths:
|
|
|
8843
10239
|
description: |
|
|
8844
10240
|
The payee for the new grouped transaction.
|
|
8845
10241
|
minLength: 0
|
|
10242
|
+
|
|
8846
10243
|
category_id:
|
|
8847
10244
|
type: integer
|
|
8848
10245
|
format: int64
|
|
@@ -8857,8 +10254,6 @@ paths:
|
|
|
8857
10254
|
nullable: true
|
|
8858
10255
|
description: |
|
|
8859
10256
|
Notes for the grouped transaction.
|
|
8860
|
-
minLength: 0
|
|
8861
|
-
maxLength: 350
|
|
8862
10257
|
status:
|
|
8863
10258
|
type: string
|
|
8864
10259
|
description: If set, must be either `reviewed` or
|
|
@@ -10221,12 +11616,15 @@ paths:
|
|
|
10221
11616
|
get:
|
|
10222
11617
|
tags:
|
|
10223
11618
|
- budgets
|
|
10224
|
-
summary: Get budget settings
|
|
10225
|
-
description:
|
|
11619
|
+
summary: Get budget period settings
|
|
11620
|
+
description: |-
|
|
11621
|
+
Returns budget period and display settings for the budget
|
|
11622
|
+
associated with this API token.<p> These control how budget **periods** are calculated
|
|
11623
|
+
(granularity, anchor date, rollover, and related options).
|
|
10226
11624
|
operationId: getBudgetSettings
|
|
10227
11625
|
responses:
|
|
10228
11626
|
"200":
|
|
10229
|
-
description: Budget settings for the
|
|
11627
|
+
description: Budget period settings for the current budget
|
|
10230
11628
|
content:
|
|
10231
11629
|
application/json:
|
|
10232
11630
|
schema:
|
|
@@ -10249,7 +11647,7 @@ paths:
|
|
|
10249
11647
|
Note that `start_date` **must** be a valid budget period start for the account (based on the account's
|
|
10250
11648
|
budget period settings). If an invalid `start_date` is provided, the request will fail with an error that indicates what the previous and next valid start dates are.<p>
|
|
10251
11649
|
|
|
10252
|
-
Use the [budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view the
|
|
11650
|
+
Use the [/budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view the budget period settings for the account.<br>
|
|
10253
11651
|
To view details for existing budgets, use the [summary](#tag/summary) endpoint.
|
|
10254
11652
|
operationId: upsertBudget
|
|
10255
11653
|
requestBody:
|
|
@@ -10320,7 +11718,7 @@ paths:
|
|
|
10320
11718
|
period settings). If an invalid `start_date` is provided, the request
|
|
10321
11719
|
will fail with an error that indicates what the previous and next valid
|
|
10322
11720
|
start dates are.<p> Use the
|
|
10323
|
-
[budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view
|
|
11721
|
+
[/budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view
|
|
10324
11722
|
the account's budget settings.<br> To view details for existing budgets,
|
|
10325
11723
|
use the [summary](#tag/summary) endpoint.
|
|
10326
11724
|
operationId: deleteBudget
|