@lunch-money/v2-api-spec 2.11.0-preview.1 → 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 +300 -250
- package/package.json +11 -5
- package/version-history.md +9 -1
- package/README.md.backup +0 -217
- package/update-urls.sh +0 -135
package/lunch-money-api-v2.yaml
CHANGED
|
@@ -2,50 +2,33 @@ openapi: 3.0.2
|
|
|
2
2
|
info:
|
|
3
3
|
title: Lunch Money API - v2
|
|
4
4
|
description: |-
|
|
5
|
-
Welcome to the
|
|
6
|
-
This documentation is for the **v2.11.0** release of the API.<p>
|
|
7
|
-
|
|
8
|
-
See the [version history](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/version-history) for what is new in this release.
|
|
9
|
-
New functionality may only be available in the Mock Service until the release is finalized. <br><br>
|
|
10
|
-
|
|
11
|
-
The latest complete implementation of the spec is for the **v2.8.5** release and can be found [here](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/). <br><br>
|
|
12
|
-
Feedback on any of the API design is welcome, but we are particularly interested in getting feedback on most recent changes in the [version history](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/v2/version-history).
|
|
13
|
-
|
|
14
|
-
------------------------------------------------------------------------------------------------
|
|
15
|
-
Welcome to the Lunch Money v2 API.
|
|
5
|
+
Welcome to the Lunch Money v2 API reference. This is the **v2.11.0** spec.
|
|
16
6
|
|
|
17
|
-
|
|
7
|
+
### Introduction
|
|
18
8
|
|
|
19
|
-
`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).
|
|
20
10
|
|
|
21
|
-
<span class="red-text"><strong>
|
|
22
|
-
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>
|
|
23
|
-
See the [Getting Started Guide](https://lm-v2-api-next-a7fabcab8e9a.herokuapp.com/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.
|
|
24
12
|
|
|
25
|
-
|
|
13
|
+
**Static Mock Server**
|
|
26
14
|
|
|
27
|
-
|
|
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.
|
|
28
16
|
|
|
29
|
-
|
|
30
|
-
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>
|
|
31
|
-
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>
|
|
32
|
-
When using this server, set your Bearer token to any string with 11 or more characters.
|
|
17
|
+
**Client Libraries & SDKs**
|
|
33
18
|
|
|
34
|
-
|
|
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).
|
|
35
20
|
|
|
36
|
-
|
|
21
|
+
**Migrating from v1**
|
|
37
22
|
|
|
38
|
-
|
|
23
|
+
The v2 API is not backwards compatible with v1. See the [Migration Guide](https://lunchmoney.dev/v2/migration-guide) for details.
|
|
39
24
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- [
|
|
44
|
-
- [
|
|
45
|
-
- [Migration Guide](https://
|
|
46
|
-
- [Rate Limits](https://
|
|
47
|
-
- [Current v1 Lunch Money API Documentation](https://lunchmoney.dev)
|
|
48
|
-
- [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)
|
|
49
32
|
termsOfService: https://lunchmoney.dev/#current-status
|
|
50
33
|
contact:
|
|
51
34
|
email: devsupport@lunchmoney.app
|
|
@@ -57,8 +40,8 @@ info:
|
|
|
57
40
|
servers:
|
|
58
41
|
- url: https://api.lunchmoney.dev/v2
|
|
59
42
|
description: v2 Lunch Money API Server - changes will affect real data!
|
|
60
|
-
# - url: https://
|
|
61
|
-
- url: https://
|
|
43
|
+
# - url: https://lunchmoney.dev/v2
|
|
44
|
+
- url: https://lunchmoney.dev/v2
|
|
62
45
|
description: Static mock version of the v2 Lunch Money API Server
|
|
63
46
|
|
|
64
47
|
tags:
|
|
@@ -126,8 +109,10 @@ tags:
|
|
|
126
109
|
description: Learn more about transactions
|
|
127
110
|
url: https://support.lunchmoney.app/finances/transactions
|
|
128
111
|
- name: budgets
|
|
129
|
-
description: View settings and modify budget amounts.<p> Use
|
|
130
|
-
[/
|
|
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.
|
|
131
116
|
externalDocs:
|
|
132
117
|
description: Learn more about budgets
|
|
133
118
|
url: https://support.lunchmoney.app/finances/budgets
|
|
@@ -155,12 +140,12 @@ components:
|
|
|
155
140
|
account_id:
|
|
156
141
|
type: integer
|
|
157
142
|
format: int64
|
|
158
|
-
description: Unique ID for the
|
|
143
|
+
description: Unique ID for the current budgeting account
|
|
159
144
|
budget_name:
|
|
160
145
|
type: string
|
|
161
|
-
description: Name of the
|
|
146
|
+
description: Name of the current budgeting account
|
|
162
147
|
primary_currency:
|
|
163
|
-
description: Primary currency
|
|
148
|
+
description: Primary currency for the current budgeting account
|
|
164
149
|
allOf:
|
|
165
150
|
- $ref: "#/components/schemas/currencyEnum"
|
|
166
151
|
api_key_label:
|
|
@@ -679,7 +664,6 @@ components:
|
|
|
679
664
|
cryptoManualObject:
|
|
680
665
|
type: object
|
|
681
666
|
title: manual crypto object
|
|
682
|
-
x-internal: true
|
|
683
667
|
additionalProperties: false
|
|
684
668
|
properties:
|
|
685
669
|
id:
|
|
@@ -719,13 +703,22 @@ components:
|
|
|
719
703
|
description: CoinGecko identifier associated with this balance
|
|
720
704
|
to_base:
|
|
721
705
|
type: number
|
|
722
|
-
|
|
706
|
+
nullable: true
|
|
707
|
+
description: Balance converted to the user's primary currency. May be null if no conversion was available.
|
|
723
708
|
balance_as_of:
|
|
724
709
|
type: string
|
|
725
710
|
format: date-time
|
|
726
711
|
nullable: true
|
|
727
|
-
description: Date/time the balance was last updated in
|
|
728
|
-
extended format
|
|
712
|
+
description: Date/time the manual balance record was last updated in
|
|
713
|
+
ISO 8601 extended format. This is currently based on the manual
|
|
714
|
+
crypto record's updated_at timestamp.
|
|
715
|
+
exchange_rate_as_of:
|
|
716
|
+
type: string
|
|
717
|
+
format: date-time
|
|
718
|
+
nullable: true
|
|
719
|
+
description: Date/time the exchange rate used to calculate to_base was
|
|
720
|
+
last updated in ISO 8601 extended format. Null when no exchange rate was
|
|
721
|
+
used or no conversion was available.
|
|
729
722
|
created_by_name:
|
|
730
723
|
type: string
|
|
731
724
|
nullable: true
|
|
@@ -750,6 +743,7 @@ components:
|
|
|
750
743
|
- coingecko_id
|
|
751
744
|
- to_base
|
|
752
745
|
- balance_as_of
|
|
746
|
+
- exchange_rate_as_of
|
|
753
747
|
- created_by_name
|
|
754
748
|
- created_at
|
|
755
749
|
- updated_at
|
|
@@ -758,14 +752,18 @@ components:
|
|
|
758
752
|
cryptoSyncedBalance:
|
|
759
753
|
type: object
|
|
760
754
|
title: synced crypto balance object
|
|
761
|
-
x-internal: true
|
|
762
755
|
additionalProperties: false
|
|
763
756
|
properties:
|
|
764
757
|
name:
|
|
765
758
|
type: string
|
|
766
759
|
minLength: 1
|
|
767
760
|
maxLength: 45
|
|
768
|
-
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`.
|
|
769
767
|
balance:
|
|
770
768
|
type: string
|
|
771
769
|
pattern: ^-?\d+(\.\d{1,18})?$
|
|
@@ -783,13 +781,21 @@ components:
|
|
|
783
781
|
description: CoinGecko identifier associated with this balance
|
|
784
782
|
to_base:
|
|
785
783
|
type: number
|
|
786
|
-
|
|
784
|
+
nullable: true
|
|
785
|
+
description: Balance converted to the user's primary currency. May be null if no conversion was available.
|
|
787
786
|
balance_as_of:
|
|
788
787
|
type: string
|
|
789
788
|
format: date-time
|
|
790
789
|
nullable: true
|
|
791
790
|
description: Date/time the balance was last updated in ISO 8601
|
|
792
|
-
extended format
|
|
791
|
+
extended format.
|
|
792
|
+
exchange_rate_as_of:
|
|
793
|
+
type: string
|
|
794
|
+
format: date-time
|
|
795
|
+
nullable: true
|
|
796
|
+
description: Date/time the exchange rate used to calculate to_base was
|
|
797
|
+
last updated in ISO 8601 extended format. Null when no exchange rate was
|
|
798
|
+
used or no conversion was available.
|
|
793
799
|
updated_at:
|
|
794
800
|
type: string
|
|
795
801
|
format: date-time
|
|
@@ -797,17 +803,18 @@ components:
|
|
|
797
803
|
extended format
|
|
798
804
|
required:
|
|
799
805
|
- name
|
|
806
|
+
- display_name
|
|
800
807
|
- balance
|
|
801
808
|
- symbol
|
|
802
809
|
- coingecko_id
|
|
803
810
|
- to_base
|
|
804
811
|
- balance_as_of
|
|
812
|
+
- exchange_rate_as_of
|
|
805
813
|
- updated_at
|
|
806
814
|
|
|
807
815
|
syncedCryptoAccount:
|
|
808
816
|
type: object
|
|
809
817
|
title: synced crypto account
|
|
810
|
-
x-internal: true
|
|
811
818
|
additionalProperties: false
|
|
812
819
|
properties:
|
|
813
820
|
id:
|
|
@@ -1072,8 +1079,16 @@ components:
|
|
|
1072
1079
|
type: string
|
|
1073
1080
|
format: date-time
|
|
1074
1081
|
nullable: true
|
|
1075
|
-
description: System defined date/time the balance was
|
|
1076
|
-
ISO 8601 extended format. Ignored if set
|
|
1082
|
+
description: System defined date/time the manual balance record was
|
|
1083
|
+
last updated in ISO 8601 extended format. Ignored if set
|
|
1084
|
+
x-updatable: false
|
|
1085
|
+
exchange_rate_as_of:
|
|
1086
|
+
type: string
|
|
1087
|
+
format: date-time
|
|
1088
|
+
nullable: true
|
|
1089
|
+
description: System defined date/time the exchange rate used to
|
|
1090
|
+
calculate to_base was observed in ISO 8601 extended format. Ignored
|
|
1091
|
+
if set
|
|
1077
1092
|
x-updatable: false
|
|
1078
1093
|
created_by_name:
|
|
1079
1094
|
type: string
|
|
@@ -1353,10 +1368,13 @@ components:
|
|
|
1353
1368
|
- $ref: "#/components/schemas/accountTypeEnum"
|
|
1354
1369
|
subtype:
|
|
1355
1370
|
type: string
|
|
1356
|
-
|
|
1371
|
+
nullable: true
|
|
1372
|
+
description: If set, an optional account subtype. Set to `null` to clear it.
|
|
1373
|
+
Examples include<br>
|
|
1357
1374
|
- retirement - checking - savings - prepaid credit card
|
|
1358
1375
|
minLength: 1
|
|
1359
1376
|
maxLength: 100
|
|
1377
|
+
example: prepaid credit card
|
|
1360
1378
|
x-updatable: true
|
|
1361
1379
|
balance:
|
|
1362
1380
|
oneOf:
|
|
@@ -1614,6 +1632,7 @@ components:
|
|
|
1614
1632
|
type: object
|
|
1615
1633
|
description: Source information for a manual account balance history entry.
|
|
1616
1634
|
additionalProperties: false
|
|
1635
|
+
x-internal: true
|
|
1617
1636
|
properties:
|
|
1618
1637
|
type:
|
|
1619
1638
|
type: string
|
|
@@ -1631,6 +1650,7 @@ components:
|
|
|
1631
1650
|
type: object
|
|
1632
1651
|
description: Source information for a Plaid-synced account balance history entry.
|
|
1633
1652
|
additionalProperties: false
|
|
1653
|
+
x-internal: true
|
|
1634
1654
|
properties:
|
|
1635
1655
|
type:
|
|
1636
1656
|
type: string
|
|
@@ -1648,6 +1668,7 @@ components:
|
|
|
1648
1668
|
type: object
|
|
1649
1669
|
description: Source information for a manually-tracked cryptocurrency balance history entry.
|
|
1650
1670
|
additionalProperties: false
|
|
1671
|
+
x-internal: true
|
|
1651
1672
|
properties:
|
|
1652
1673
|
type:
|
|
1653
1674
|
type: string
|
|
@@ -1750,9 +1771,10 @@ components:
|
|
|
1750
1771
|
- subtype
|
|
1751
1772
|
- mask
|
|
1752
1773
|
- symbol
|
|
1774
|
+
|
|
1753
1775
|
balanceHistoryAccountObject:
|
|
1754
1776
|
type: object
|
|
1755
|
-
title: balance history account object
|
|
1777
|
+
title: balance history for an account object
|
|
1756
1778
|
additionalProperties: false
|
|
1757
1779
|
description: Historical balance entries grouped under a single account source.
|
|
1758
1780
|
properties:
|
|
@@ -1776,7 +1798,10 @@ components:
|
|
|
1776
1798
|
deleted: "#/components/schemas/balanceHistorySourceDeleted"
|
|
1777
1799
|
balances:
|
|
1778
1800
|
type: array
|
|
1779
|
-
description:
|
|
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.
|
|
1780
1805
|
items:
|
|
1781
1806
|
$ref: "#/components/schemas/balanceHistoryObject"
|
|
1782
1807
|
required:
|
|
@@ -1787,6 +1812,7 @@ components:
|
|
|
1787
1812
|
type: object
|
|
1788
1813
|
title: balance history entry object
|
|
1789
1814
|
additionalProperties: false
|
|
1815
|
+
x-internal: true
|
|
1790
1816
|
description: A historical balance entry for a single account on a single date.
|
|
1791
1817
|
properties:
|
|
1792
1818
|
id:
|
|
@@ -1800,7 +1826,7 @@ components:
|
|
|
1800
1826
|
balance:
|
|
1801
1827
|
type: string
|
|
1802
1828
|
pattern: ^-?\d+(\.\d{1,4})?$
|
|
1803
|
-
description: Historical balance stored for this entry. For manual and Plaid accounts this is in the account currency. For crypto accounts this is in the user's primary currency.
|
|
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.
|
|
1804
1830
|
currency:
|
|
1805
1831
|
allOf:
|
|
1806
1832
|
- $ref: "#/components/schemas/currencyEnum"
|
|
@@ -1847,7 +1873,7 @@ components:
|
|
|
1847
1873
|
date:
|
|
1848
1874
|
type: string
|
|
1849
1875
|
format: date
|
|
1850
|
-
description: Month to update, in YYYY-MM-DD format. This must be the first day of a month and must
|
|
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.
|
|
1851
1877
|
balance:
|
|
1852
1878
|
oneOf:
|
|
1853
1879
|
- type: number
|
|
@@ -1898,37 +1924,6 @@ components:
|
|
|
1898
1924
|
required:
|
|
1899
1925
|
- balances
|
|
1900
1926
|
|
|
1901
|
-
balanceHistoryUpdateErrorObject:
|
|
1902
|
-
type: object
|
|
1903
|
-
x-internal: true
|
|
1904
|
-
additionalProperties: true
|
|
1905
|
-
properties:
|
|
1906
|
-
request_balances_index:
|
|
1907
|
-
type: integer
|
|
1908
|
-
format: int32
|
|
1909
|
-
description: Zero-based index into the `balances` request array
|
|
1910
|
-
message:
|
|
1911
|
-
type: string
|
|
1912
|
-
description: Error message describing why the row could not be updated
|
|
1913
|
-
required:
|
|
1914
|
-
- request_balances_index
|
|
1915
|
-
- message
|
|
1916
|
-
|
|
1917
|
-
upsertBalanceHistoryResponseObject:
|
|
1918
|
-
type: object
|
|
1919
|
-
x-internal: true
|
|
1920
|
-
additionalProperties: false
|
|
1921
|
-
properties:
|
|
1922
|
-
updated_balance_history:
|
|
1923
|
-
$ref: "#/components/schemas/balanceHistoryAccountObject"
|
|
1924
|
-
errors:
|
|
1925
|
-
type: array
|
|
1926
|
-
items:
|
|
1927
|
-
$ref: "#/components/schemas/balanceHistoryUpdateErrorObject"
|
|
1928
|
-
required:
|
|
1929
|
-
- updated_balance_history
|
|
1930
|
-
- errors
|
|
1931
|
-
|
|
1932
1927
|
updateBalanceHistoryDetailsRequestObject:
|
|
1933
1928
|
type: object
|
|
1934
1929
|
x-internal: true
|
|
@@ -2467,14 +2462,9 @@ components:
|
|
|
2467
2462
|
external_id:
|
|
2468
2463
|
type: string
|
|
2469
2464
|
nullable: true
|
|
2470
|
-
description: A user-defined external ID
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
transactions associated with synced accounts, and they cannot be
|
|
2474
|
-
added. For transactions associated with manual accounts, the
|
|
2475
|
-
external ID must be unique as attempts to add a subsequent
|
|
2476
|
-
transaction with the same external_id and manual_account_id will be
|
|
2477
|
-
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.
|
|
2478
2468
|
minLength: 0
|
|
2479
2469
|
maxLength: 75
|
|
2480
2470
|
tag_ids:
|
|
@@ -2495,8 +2485,6 @@ components:
|
|
|
2495
2485
|
Any transaction notes set by the user or by
|
|
2496
2486
|
a matched recurring item. This will match the value
|
|
2497
2487
|
displayed in notes field on the transactions page in the Lunch Money app.
|
|
2498
|
-
minLength: 0
|
|
2499
|
-
maxLength: 350
|
|
2500
2488
|
status:
|
|
2501
2489
|
type: string
|
|
2502
2490
|
# description: >
|
|
@@ -2732,8 +2720,6 @@ components:
|
|
|
2732
2720
|
Any transaction notes set by the user or by
|
|
2733
2721
|
a matched recurring item. This will match the value
|
|
2734
2722
|
displayed in notes field on the transactions page in the Lunch Money app.
|
|
2735
|
-
minLength: 0
|
|
2736
|
-
maxLength: 350
|
|
2737
2723
|
status:
|
|
2738
2724
|
type: string
|
|
2739
2725
|
description: >
|
|
@@ -2875,14 +2861,9 @@ components:
|
|
|
2875
2861
|
external_id:
|
|
2876
2862
|
type: string
|
|
2877
2863
|
nullable: true
|
|
2878
|
-
description: A user-defined external ID
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
transactions associated with synced accounts, and they cannot be
|
|
2882
|
-
added. For transactions associated with manual accounts, the
|
|
2883
|
-
external ID must be unique as attempts to add a subsequent
|
|
2884
|
-
transaction with the same external_id and manual_account_id will be
|
|
2885
|
-
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.
|
|
2886
2867
|
minLength: 0
|
|
2887
2868
|
maxLength: 75
|
|
2888
2869
|
plaid_metadata:
|
|
@@ -2952,7 +2933,7 @@ components:
|
|
|
2952
2933
|
currency:
|
|
2953
2934
|
description: Three-letter lowercase currency code of the transaction
|
|
2954
2935
|
in ISO 4217 format. Must match one of the [supported
|
|
2955
|
-
currencies](https://
|
|
2936
|
+
currencies](https://lunchmoney.dev/v2/currencies). If not set
|
|
2956
2937
|
defaults to the user account's primary currency.
|
|
2957
2938
|
allOf:
|
|
2958
2939
|
- $ref: "#/components/schemas/currencyEnum"
|
|
@@ -2978,8 +2959,6 @@ components:
|
|
|
2978
2959
|
Any transaction notes set by the user or by
|
|
2979
2960
|
a matched recurring item. This will match the value
|
|
2980
2961
|
displayed in notes field on the transactions page in the Lunch Money app.
|
|
2981
|
-
minLength: 0
|
|
2982
|
-
maxLength: 350
|
|
2983
2962
|
manual_account_id:
|
|
2984
2963
|
type: integer
|
|
2985
2964
|
format: int32
|
|
@@ -3117,8 +3096,6 @@ components:
|
|
|
3117
3096
|
description: >
|
|
3118
3097
|
New notes for the transaction. Set this to an empty string to clear
|
|
3119
3098
|
the existing notes.
|
|
3120
|
-
minLength: 0
|
|
3121
|
-
maxLength: 350
|
|
3122
3099
|
x-updatable: true
|
|
3123
3100
|
manual_account_id:
|
|
3124
3101
|
type: integer
|
|
@@ -3301,6 +3278,7 @@ components:
|
|
|
3301
3278
|
amount.
|
|
3302
3279
|
payee:
|
|
3303
3280
|
type: string
|
|
3281
|
+
minLength: 0
|
|
3304
3282
|
description: The payee for the child transaction. Will inherit the
|
|
3305
3283
|
original payee from the parent if not defined.
|
|
3306
3284
|
date:
|
|
@@ -3323,7 +3301,6 @@ components:
|
|
|
3323
3301
|
format: int32
|
|
3324
3302
|
notes:
|
|
3325
3303
|
type: string
|
|
3326
|
-
maxLength: 350
|
|
3327
3304
|
description: Will inherit notes from parent if not defined.
|
|
3328
3305
|
required:
|
|
3329
3306
|
- amount
|
|
@@ -3633,10 +3610,11 @@ components:
|
|
|
3633
3610
|
|
|
3634
3611
|
# Response body for GET /budgets/settings (200)
|
|
3635
3612
|
budgetSettingsResponseObject:
|
|
3636
|
-
x-internal: true
|
|
3637
3613
|
type: object
|
|
3614
|
+
title: budget settings object
|
|
3638
3615
|
additionalProperties: false
|
|
3639
|
-
description: Budget period and display settings
|
|
3616
|
+
description: Budget period and display settings for the current budgeting
|
|
3617
|
+
account.
|
|
3640
3618
|
properties:
|
|
3641
3619
|
budget_period_granularity:
|
|
3642
3620
|
type: string
|
|
@@ -3648,8 +3626,8 @@ components:
|
|
|
3648
3626
|
- twice a month
|
|
3649
3627
|
description: Budget period granularity
|
|
3650
3628
|
budget_period_quantity:
|
|
3651
|
-
type:
|
|
3652
|
-
format:
|
|
3629
|
+
type: integer
|
|
3630
|
+
format: int32
|
|
3653
3631
|
description: The number of `granularity` units that make up a single
|
|
3654
3632
|
budgeting period.
|
|
3655
3633
|
budget_period_anchor_date:
|
|
@@ -4005,7 +3983,9 @@ components:
|
|
|
4005
3983
|
while processing the request.<br> If multiple errors were
|
|
4006
3984
|
encountered, the list will contain multiple objects.<br> Each
|
|
4007
3985
|
`error` object is guaranteed to have an `errMsg`, but it may also
|
|
4008
|
-
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.
|
|
4009
3989
|
type: array
|
|
4010
3990
|
items:
|
|
4011
3991
|
type: object
|
|
@@ -4114,6 +4094,7 @@ components:
|
|
|
4114
4094
|
# - `cad`: Canadian Dollar
|
|
4115
4095
|
# - `cdf`: Congolese Franc
|
|
4116
4096
|
# - `chf`: Swiss Franc
|
|
4097
|
+
# - `clf`: Chilean Unit of Account (UF)
|
|
4117
4098
|
# - `clp`: Chilean Peso
|
|
4118
4099
|
# - `cny`: Chinese Yuan
|
|
4119
4100
|
# - `cop`: Colombian Peso
|
|
@@ -4129,6 +4110,7 @@ components:
|
|
|
4129
4110
|
# - `egp`: Egyptian Pound
|
|
4130
4111
|
# - `ern`: Eritrean Nakfa
|
|
4131
4112
|
# - `etb`: Ethiopian Birr
|
|
4113
|
+
# - `eth`: Ethereum
|
|
4132
4114
|
# - `eur`: Euro
|
|
4133
4115
|
# - `fjd`: Fijian Dollar
|
|
4134
4116
|
# - `fkp`: Falkland Islands Pound
|
|
@@ -4236,10 +4218,13 @@ components:
|
|
|
4236
4218
|
# - `uyu`: Uruguayan Peso
|
|
4237
4219
|
# - `uzs`: Uzbekistan Som
|
|
4238
4220
|
# - `vef`: Venezuelan Bolívar
|
|
4221
|
+
# - `ves`: Venezuelan Bolívar Sotiemas
|
|
4239
4222
|
# - `vnd`: Vietnamese Dong
|
|
4240
4223
|
# - `vuv`: Vanuatu Vatu
|
|
4241
4224
|
# - `wst`: Samoan Tala
|
|
4242
4225
|
# - `xaf`: CFA Franc BEAC
|
|
4226
|
+
# - `xag`: Silver (troy ounce)
|
|
4227
|
+
# - `xau`: Gold (troy ounce)
|
|
4243
4228
|
# - `xcd`: East Caribbean Dollar
|
|
4244
4229
|
# - `xof`: CFA Franc BCEAO
|
|
4245
4230
|
# - `xpf`: CFP Franc
|
|
@@ -4277,6 +4262,7 @@ components:
|
|
|
4277
4262
|
- cad
|
|
4278
4263
|
- cdf
|
|
4279
4264
|
- chf
|
|
4265
|
+
- clf
|
|
4280
4266
|
- clp
|
|
4281
4267
|
- cny
|
|
4282
4268
|
- cop
|
|
@@ -4292,6 +4278,7 @@ components:
|
|
|
4292
4278
|
- egp
|
|
4293
4279
|
- ern
|
|
4294
4280
|
- etb
|
|
4281
|
+
- eth
|
|
4295
4282
|
- eur
|
|
4296
4283
|
- fjd
|
|
4297
4284
|
- fkp
|
|
@@ -4399,10 +4386,13 @@ components:
|
|
|
4399
4386
|
- uyu
|
|
4400
4387
|
- uzs
|
|
4401
4388
|
- vef
|
|
4389
|
+
- ves
|
|
4402
4390
|
- vnd
|
|
4403
4391
|
- vuv
|
|
4404
4392
|
- wst
|
|
4405
4393
|
- xaf
|
|
4394
|
+
- xag
|
|
4395
|
+
- xau
|
|
4406
4396
|
- xcd
|
|
4407
4397
|
- xof
|
|
4408
4398
|
- xpf
|
|
@@ -5901,6 +5891,7 @@ paths:
|
|
|
5901
5891
|
coingecko_id: bitcoin
|
|
5902
5892
|
to_base: 53124.72
|
|
5903
5893
|
balance_as_of: "2026-02-25T14:22:10.000Z"
|
|
5894
|
+
exchange_rate_as_of: "2026-02-25T14:10:00.000Z"
|
|
5904
5895
|
created_by_name: User 1
|
|
5905
5896
|
created_at: "2025-11-12T20:14:32.000Z"
|
|
5906
5897
|
updated_at: "2026-02-25T14:22:10.000Z"
|
|
@@ -5958,6 +5949,7 @@ paths:
|
|
|
5958
5949
|
coingecko_id: ethereum
|
|
5959
5950
|
to_base: 28998.44
|
|
5960
5951
|
balance_as_of: "2026-03-01T09:20:41.000Z"
|
|
5952
|
+
exchange_rate_as_of: "2026-03-01T09:15:00.000Z"
|
|
5961
5953
|
created_by_name: User 1
|
|
5962
5954
|
created_at: "2026-03-01T09:20:41.000Z"
|
|
5963
5955
|
updated_at: "2026-03-01T09:20:41.000Z"
|
|
@@ -5970,11 +5962,22 @@ paths:
|
|
|
5970
5962
|
examples:
|
|
5971
5963
|
missing required properties:
|
|
5972
5964
|
value:
|
|
5973
|
-
message: Request
|
|
5965
|
+
message: Invalid Request Body
|
|
5974
5966
|
errors:
|
|
5975
5967
|
- errMsg: "Missing required property 'name' in request body."
|
|
5976
5968
|
- errMsg: "Missing required property 'balance' in request body."
|
|
5977
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."
|
|
5978
5981
|
unsupported symbol:
|
|
5979
5982
|
value:
|
|
5980
5983
|
message: Request Validation Failure
|
|
@@ -6025,6 +6028,7 @@ paths:
|
|
|
6025
6028
|
coingecko_id: bitcoin
|
|
6026
6029
|
to_base: 53124.72
|
|
6027
6030
|
balance_as_of: "2026-02-25T14:22:10.000Z"
|
|
6031
|
+
exchange_rate_as_of: "2026-02-25T14:10:00.000Z"
|
|
6028
6032
|
created_by_name: User 1
|
|
6029
6033
|
created_at: "2025-11-12T20:14:32.000Z"
|
|
6030
6034
|
updated_at: "2026-02-25T14:22:10.000Z"
|
|
@@ -6102,6 +6106,7 @@ paths:
|
|
|
6102
6106
|
coingecko_id: bitcoin
|
|
6103
6107
|
to_base: 56011.12
|
|
6104
6108
|
balance_as_of: "2026-03-01T09:41:18.000Z"
|
|
6109
|
+
exchange_rate_as_of: "2026-03-01T09:35:00.000Z"
|
|
6105
6110
|
created_by_name: User 1
|
|
6106
6111
|
created_at: "2025-11-12T20:14:32.000Z"
|
|
6107
6112
|
updated_at: "2026-02-25T14:22:10.000Z"
|
|
@@ -6122,6 +6127,7 @@ paths:
|
|
|
6122
6127
|
coingecko_id: bitcoin
|
|
6123
6128
|
to_base: 56011.12
|
|
6124
6129
|
balance_as_of: "2026-03-01T09:41:18.000Z"
|
|
6130
|
+
exchange_rate_as_of: "2026-03-01T09:35:00.000Z"
|
|
6125
6131
|
created_by_name: User 1
|
|
6126
6132
|
created_at: "2025-11-12T20:14:32.000Z"
|
|
6127
6133
|
updated_at: "2026-03-01T09:41:18.000Z"
|
|
@@ -6251,6 +6257,7 @@ paths:
|
|
|
6251
6257
|
coingecko_id: ethereum
|
|
6252
6258
|
to_base: 28998.44
|
|
6253
6259
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6260
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6254
6261
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6255
6262
|
- name: BTC
|
|
6256
6263
|
balance: "0.100020003000400050"
|
|
@@ -6258,6 +6265,7 @@ paths:
|
|
|
6258
6265
|
coingecko_id: bitcoin
|
|
6259
6266
|
to_base: 6231.28
|
|
6260
6267
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6268
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6261
6269
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6262
6270
|
- id: 33005
|
|
6263
6271
|
provider: kraken
|
|
@@ -6273,6 +6281,7 @@ paths:
|
|
|
6273
6281
|
coingecko_id: ripple
|
|
6274
6282
|
to_base: 1287.50
|
|
6275
6283
|
balance_as_of: "2026-02-26T07:22:30.000Z"
|
|
6284
|
+
exchange_rate_as_of: "2026-02-26T07:10:00.000Z"
|
|
6276
6285
|
updated_at: "2026-02-26T07:22:30.000Z"
|
|
6277
6286
|
"401":
|
|
6278
6287
|
$ref: "#/components/responses/unauthorizedToken"
|
|
@@ -6325,6 +6334,7 @@ paths:
|
|
|
6325
6334
|
coingecko_id: ethereum
|
|
6326
6335
|
to_base: 28998.44
|
|
6327
6336
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6337
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6328
6338
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6329
6339
|
- name: BTC
|
|
6330
6340
|
balance: "0.100020003000400050"
|
|
@@ -6332,6 +6342,7 @@ paths:
|
|
|
6332
6342
|
coingecko_id: bitcoin
|
|
6333
6343
|
to_base: 6231.28
|
|
6334
6344
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6345
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6335
6346
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6336
6347
|
"400":
|
|
6337
6348
|
description: Bad Request
|
|
@@ -6397,6 +6408,7 @@ paths:
|
|
|
6397
6408
|
coingecko_id: ethereum
|
|
6398
6409
|
to_base: 28998.44
|
|
6399
6410
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6411
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6400
6412
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6401
6413
|
"400":
|
|
6402
6414
|
description: Bad Request
|
|
@@ -6482,6 +6494,7 @@ paths:
|
|
|
6482
6494
|
coingecko_id: ethereum
|
|
6483
6495
|
to_base: 28998.44
|
|
6484
6496
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6497
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6485
6498
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6486
6499
|
- name: BTC
|
|
6487
6500
|
balance: "0.100020003000400050"
|
|
@@ -6489,6 +6502,7 @@ paths:
|
|
|
6489
6502
|
coingecko_id: bitcoin
|
|
6490
6503
|
to_base: 6231.28
|
|
6491
6504
|
balance_as_of: "2026-02-25T14:25:00.000Z"
|
|
6505
|
+
exchange_rate_as_of: "2026-02-25T14:20:00.000Z"
|
|
6492
6506
|
updated_at: "2026-02-25T14:25:01.000Z"
|
|
6493
6507
|
"401":
|
|
6494
6508
|
$ref: "#/components/responses/unauthorizedToken"
|
|
@@ -6711,7 +6725,7 @@ paths:
|
|
|
6711
6725
|
value:
|
|
6712
6726
|
message: Request Validation Failure
|
|
6713
6727
|
errors:
|
|
6714
|
-
- errMsg: "`start_date` must be
|
|
6728
|
+
- errMsg: "`start_date` must be before or equal to `end_date`."
|
|
6715
6729
|
not first of month:
|
|
6716
6730
|
value:
|
|
6717
6731
|
message: Request Validation Failure
|
|
@@ -6837,7 +6851,7 @@ paths:
|
|
|
6837
6851
|
value:
|
|
6838
6852
|
message: Request Validation Failure
|
|
6839
6853
|
errors:
|
|
6840
|
-
- errMsg: "`start_date` must be
|
|
6854
|
+
- errMsg: "`start_date` must be before or equal to `end_date`."
|
|
6841
6855
|
"401":
|
|
6842
6856
|
$ref: "#/components/responses/unauthorizedToken"
|
|
6843
6857
|
"404":
|
|
@@ -6856,7 +6870,7 @@ paths:
|
|
|
6856
6870
|
value:
|
|
6857
6871
|
message: Not Found
|
|
6858
6872
|
errors:
|
|
6859
|
-
- errMsg: "
|
|
6873
|
+
- errMsg: "Deleted balance history source 99999999 was not found."
|
|
6860
6874
|
"429":
|
|
6861
6875
|
$ref: "#/components/responses/rateLimited"
|
|
6862
6876
|
"500":
|
|
@@ -6867,29 +6881,29 @@ paths:
|
|
|
6867
6881
|
summary: Upsert balance history for an account
|
|
6868
6882
|
description: >-
|
|
6869
6883
|
Upsert one or more historical balance entries for a single manual, Plaid,
|
|
6870
|
-
manual crypto, or deleted
|
|
6884
|
+
manual crypto, or deleted account. Crypto synced accounts require an additional `symbol` path parameter.<br><br>
|
|
6871
6885
|
|
|
6872
|
-
The `account_type` path parameter identifies the
|
|
6886
|
+
The `account_type` path parameter identifies the type of account and the
|
|
6873
6887
|
`account_id` path parameter identifies the specific id for that account type.<br><br>
|
|
6874
6888
|
|
|
6875
6889
|
Submit one or more entries in the `balances` array. Each entry must specify
|
|
6876
6890
|
a `date` and `balance` value.<br><br>
|
|
6877
6891
|
|
|
6878
6892
|
Balance history is monthly. Each entry's `date` must be the first day of
|
|
6879
|
-
a month and must
|
|
6893
|
+
a month and must be in a past month.<br><br>
|
|
6880
6894
|
|
|
6881
6895
|
`currency` may be provided for any balance entry. If omitted, it defaults
|
|
6882
6896
|
to the account currency for manual/Plaid accounts, or the user's primary
|
|
6883
6897
|
currency for crypto/deleted accounts.<br><br>
|
|
6884
6898
|
|
|
6885
|
-
`symbol`
|
|
6886
|
-
|
|
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>
|
|
6887
6902
|
|
|
6888
|
-
`crypto_balance` may be provided for `crypto_manual` and
|
|
6889
|
-
and is invalid for `manual` or `plaid` accounts.<br><br>
|
|
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>
|
|
6890
6905
|
|
|
6891
|
-
|
|
6892
|
-
deleted-source metadata.
|
|
6906
|
+
The response contains only the balance entries that were submitted in this request.
|
|
6893
6907
|
operationId: upsertBalanceHistoryForAccount
|
|
6894
6908
|
parameters:
|
|
6895
6909
|
- name: account_type
|
|
@@ -6934,7 +6948,7 @@ paths:
|
|
|
6934
6948
|
symbol: btc
|
|
6935
6949
|
crypto_balance: "0.020000000000000000"
|
|
6936
6950
|
currency: usd
|
|
6937
|
-
balance: "1255
|
|
6951
|
+
balance: "1255"
|
|
6938
6952
|
get-shaped balance entry input:
|
|
6939
6953
|
value:
|
|
6940
6954
|
balances:
|
|
@@ -6944,60 +6958,71 @@ paths:
|
|
|
6944
6958
|
currency: usd
|
|
6945
6959
|
to_base: 41500
|
|
6946
6960
|
crypto_balance: null
|
|
6947
|
-
partial success request:
|
|
6948
|
-
value:
|
|
6949
|
-
balances:
|
|
6950
|
-
- date: "2026-03-01"
|
|
6951
|
-
balance: "41500.0000"
|
|
6952
|
-
- date: "2026-04-01"
|
|
6953
|
-
balance: "41625.5000"
|
|
6954
|
-
symbol: btc
|
|
6955
6961
|
responses:
|
|
6956
6962
|
"200":
|
|
6957
|
-
description:
|
|
6963
|
+
description: Returns the modified balance entries only. Other historical
|
|
6964
|
+
entries for the account are omitted from `balances`.
|
|
6958
6965
|
content:
|
|
6959
6966
|
application/json:
|
|
6960
6967
|
schema:
|
|
6961
|
-
$ref: "#/components/schemas/
|
|
6968
|
+
$ref: "#/components/schemas/balanceHistoryAccountObject"
|
|
6962
6969
|
examples:
|
|
6963
|
-
|
|
6970
|
+
manual account bulk upsert:
|
|
6971
|
+
summary: Two upserted rows returned (not full account history)
|
|
6964
6972
|
value:
|
|
6965
|
-
|
|
6966
|
-
|
|
6967
|
-
|
|
6968
|
-
|
|
6969
|
-
|
|
6970
|
-
|
|
6971
|
-
|
|
6972
|
-
|
|
6973
|
-
|
|
6974
|
-
|
|
6975
|
-
|
|
6976
|
-
|
|
6977
|
-
|
|
6978
|
-
|
|
6979
|
-
|
|
6980
|
-
|
|
6981
|
-
|
|
6982
|
-
|
|
6983
|
-
|
|
6984
|
-
|
|
6985
|
-
|
|
6986
|
-
|
|
6987
|
-
|
|
6988
|
-
|
|
6989
|
-
|
|
6990
|
-
|
|
6991
|
-
|
|
6992
|
-
|
|
6993
|
-
|
|
6994
|
-
|
|
6995
|
-
|
|
6996
|
-
|
|
6997
|
-
|
|
6998
|
-
|
|
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"
|
|
6999
7023
|
"400":
|
|
7000
|
-
description: Bad Request
|
|
7024
|
+
description: Bad Request. The entire request is rejected if any row in
|
|
7025
|
+
`balances` fails validation; no rows are updated.
|
|
7001
7026
|
content:
|
|
7002
7027
|
application/json:
|
|
7003
7028
|
schema:
|
|
@@ -7008,6 +7033,11 @@ paths:
|
|
|
7008
7033
|
message: Invalid Request Body
|
|
7009
7034
|
errors:
|
|
7010
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)"
|
|
7011
7041
|
invalid property:
|
|
7012
7042
|
value:
|
|
7013
7043
|
message: Invalid Request Body
|
|
@@ -7018,16 +7048,26 @@ paths:
|
|
|
7018
7048
|
message: Request Validation Failure
|
|
7019
7049
|
errors:
|
|
7020
7050
|
- errMsg: "`date` must be the first day of a month."
|
|
7051
|
+
request_balances_index: 0
|
|
7052
|
+
code: VALIDATION_ERROR
|
|
7021
7053
|
future date:
|
|
7022
7054
|
value:
|
|
7023
7055
|
message: Request Validation Failure
|
|
7024
7056
|
errors:
|
|
7025
|
-
- errMsg: "`date` must
|
|
7057
|
+
- errMsg: "`date` must be in a past month."
|
|
7058
|
+
request_balances_index: 1
|
|
7026
7059
|
crypto balance not allowed:
|
|
7027
7060
|
value:
|
|
7028
7061
|
message: Request Validation Failure
|
|
7029
7062
|
errors:
|
|
7030
|
-
- errMsg: "`crypto_balance` may only be set when `account_type` is `crypto_manual` or `deleted`."
|
|
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
|
|
7031
7071
|
"401":
|
|
7032
7072
|
$ref: "#/components/responses/unauthorizedToken"
|
|
7033
7073
|
"404":
|
|
@@ -7170,7 +7210,7 @@ paths:
|
|
|
7170
7210
|
value:
|
|
7171
7211
|
message: Request Validation Failure
|
|
7172
7212
|
errors:
|
|
7173
|
-
- errMsg: "`start_date` must be
|
|
7213
|
+
- errMsg: "`start_date` must be before or equal to `end_date`."
|
|
7174
7214
|
"401":
|
|
7175
7215
|
$ref: "#/components/responses/unauthorizedToken"
|
|
7176
7216
|
"404":
|
|
@@ -7189,7 +7229,7 @@ paths:
|
|
|
7189
7229
|
value:
|
|
7190
7230
|
message: Not Found
|
|
7191
7231
|
errors:
|
|
7192
|
-
- errMsg: "There is no
|
|
7232
|
+
- errMsg: "There is no balance history for symbol 'doge' on this account."
|
|
7193
7233
|
"429":
|
|
7194
7234
|
$ref: "#/components/responses/rateLimited"
|
|
7195
7235
|
"500":
|
|
@@ -7208,14 +7248,18 @@ paths:
|
|
|
7208
7248
|
a `date` and `balance` value.<br><br>
|
|
7209
7249
|
|
|
7210
7250
|
Balance history is monthly. Each entry's `date` must be the first day of
|
|
7211
|
-
a month and must
|
|
7251
|
+
a month and must be in a past month.<br><br>
|
|
7212
7252
|
|
|
7213
|
-
The request body
|
|
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>
|
|
7214
7256
|
|
|
7215
7257
|
`currency` may be provided for any balance entry. If omitted, it defaults
|
|
7216
7258
|
to the user's primary currency for synced crypto balances.<br><br>
|
|
7217
7259
|
|
|
7218
|
-
`crypto_balance` may be provided for synced crypto balances
|
|
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.
|
|
7219
7263
|
operationId: upsertBalanceHistoryForCryptoSynced
|
|
7220
7264
|
parameters:
|
|
7221
7265
|
- name: account_id
|
|
@@ -7249,62 +7293,38 @@ paths:
|
|
|
7249
7293
|
- date: "2026-04-01"
|
|
7250
7294
|
balance: "6500.0000"
|
|
7251
7295
|
crypto_balance: "0.100020003000400050"
|
|
7252
|
-
partial success request:
|
|
7253
|
-
value:
|
|
7254
|
-
balances:
|
|
7255
|
-
- date: "2026-03-01"
|
|
7256
|
-
balance: "6400.0000"
|
|
7257
|
-
crypto_balance: "0.100020003000400050"
|
|
7258
|
-
- date: "2026-04-01"
|
|
7259
|
-
balance: "not-a-number"
|
|
7260
7296
|
responses:
|
|
7261
7297
|
"200":
|
|
7262
|
-
description:
|
|
7298
|
+
description: Returns the modified balance entries only. Other historical
|
|
7299
|
+
entries for the symbol stream are omitted from `balances`.
|
|
7263
7300
|
content:
|
|
7264
7301
|
application/json:
|
|
7265
7302
|
schema:
|
|
7266
|
-
$ref: "#/components/schemas/
|
|
7303
|
+
$ref: "#/components/schemas/balanceHistoryAccountObject"
|
|
7267
7304
|
examples:
|
|
7268
|
-
|
|
7305
|
+
synced crypto bulk upsert:
|
|
7306
|
+
summary: Two upserted rows returned (not full symbol history)
|
|
7269
7307
|
value:
|
|
7270
|
-
|
|
7271
|
-
|
|
7272
|
-
|
|
7273
|
-
|
|
7274
|
-
|
|
7275
|
-
|
|
7276
|
-
|
|
7277
|
-
|
|
7278
|
-
|
|
7279
|
-
|
|
7280
|
-
|
|
7281
|
-
|
|
7282
|
-
|
|
7283
|
-
|
|
7284
|
-
|
|
7285
|
-
|
|
7286
|
-
|
|
7287
|
-
crypto_balance: "0.100020003000400050"
|
|
7288
|
-
errors: []
|
|
7289
|
-
partial success:
|
|
7290
|
-
value:
|
|
7291
|
-
updated_balance_history:
|
|
7292
|
-
source:
|
|
7293
|
-
type: crypto_synced
|
|
7294
|
-
crypto_synced_id: 33004
|
|
7295
|
-
symbol: btc
|
|
7296
|
-
balances:
|
|
7297
|
-
- id: 604
|
|
7298
|
-
date: "2026-03-01"
|
|
7299
|
-
balance: "6400.0000"
|
|
7300
|
-
currency: usd
|
|
7301
|
-
to_base: 6400
|
|
7302
|
-
crypto_balance: "0.100020003000400050"
|
|
7303
|
-
errors:
|
|
7304
|
-
- request_balances_index: 1
|
|
7305
|
-
message: "`balance` must be a valid numeric string or number."
|
|
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"
|
|
7306
7325
|
"400":
|
|
7307
|
-
description: Bad Request
|
|
7326
|
+
description: Bad Request. The entire request is rejected if any row in
|
|
7327
|
+
`balances` fails validation; no rows are updated.
|
|
7308
7328
|
content:
|
|
7309
7329
|
application/json:
|
|
7310
7330
|
schema:
|
|
@@ -7315,16 +7335,35 @@ paths:
|
|
|
7315
7335
|
message: Invalid Request Body
|
|
7316
7336
|
errors:
|
|
7317
7337
|
- errMsg: "Missing required property 'balances' in request body."
|
|
7338
|
+
empty balances array:
|
|
7339
|
+
value:
|
|
7340
|
+
message: Invalid Request Body
|
|
7341
|
+
errors:
|
|
7342
|
+
- errMsg: "Invalid value for property 'balances'. Array must contain at least 1 element(s)"
|
|
7318
7343
|
invalid date:
|
|
7319
7344
|
value:
|
|
7320
7345
|
message: Request Validation Failure
|
|
7321
7346
|
errors:
|
|
7322
7347
|
- errMsg: "`date` must be the first day of a month."
|
|
7348
|
+
request_balances_index: 0
|
|
7323
7349
|
future date:
|
|
7324
7350
|
value:
|
|
7325
7351
|
message: Request Validation Failure
|
|
7326
7352
|
errors:
|
|
7327
|
-
- errMsg: "`date` must
|
|
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
|
|
7328
7367
|
"401":
|
|
7329
7368
|
$ref: "#/components/responses/unauthorizedToken"
|
|
7330
7369
|
"404":
|
|
@@ -7343,7 +7382,7 @@ paths:
|
|
|
7343
7382
|
value:
|
|
7344
7383
|
message: Not Found
|
|
7345
7384
|
errors:
|
|
7346
|
-
- errMsg: "There is no
|
|
7385
|
+
- errMsg: "There is no balance history for symbol 'doge' on this account."
|
|
7347
7386
|
"429":
|
|
7348
7387
|
$ref: "#/components/responses/rateLimited"
|
|
7349
7388
|
"500":
|
|
@@ -7388,7 +7427,7 @@ paths:
|
|
|
7388
7427
|
example:
|
|
7389
7428
|
message: Not Found
|
|
7390
7429
|
errors:
|
|
7391
|
-
- errMsg: "There is no
|
|
7430
|
+
- errMsg: "There is no balance history for symbol 'doge' on this account."
|
|
7392
7431
|
"429":
|
|
7393
7432
|
$ref: "#/components/responses/rateLimited"
|
|
7394
7433
|
"500":
|
|
@@ -7412,6 +7451,16 @@ paths:
|
|
|
7412
7451
|
responses:
|
|
7413
7452
|
"204":
|
|
7414
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'."
|
|
7415
7464
|
"401":
|
|
7416
7465
|
$ref: "#/components/responses/unauthorizedToken"
|
|
7417
7466
|
"404":
|
|
@@ -7486,7 +7535,7 @@ paths:
|
|
|
7486
7535
|
example:
|
|
7487
7536
|
message: Invalid Request Body
|
|
7488
7537
|
errors:
|
|
7489
|
-
- errMsg: "
|
|
7538
|
+
- errMsg: "At least one property must be provided: name, institution_name, display_name, account_type, subtype, mask."
|
|
7490
7539
|
"401":
|
|
7491
7540
|
$ref: "#/components/responses/unauthorizedToken"
|
|
7492
7541
|
"404":
|
|
@@ -7498,7 +7547,7 @@ paths:
|
|
|
7498
7547
|
example:
|
|
7499
7548
|
message: Not Found
|
|
7500
7549
|
errors:
|
|
7501
|
-
- errMsg: "
|
|
7550
|
+
- errMsg: "Deleted balance history source 99999999 was not found."
|
|
7502
7551
|
"429":
|
|
7503
7552
|
$ref: "#/components/responses/rateLimited"
|
|
7504
7553
|
"500":
|
|
@@ -8512,19 +8561,19 @@ paths:
|
|
|
8512
8561
|
description: Sets the maximum number of transactions to return. If
|
|
8513
8562
|
more match the filter criteria, the response will include a
|
|
8514
8563
|
`has_more` attribute set to `true`. See
|
|
8515
|
-
[Pagination](https://
|
|
8564
|
+
[Pagination](https://lunchmoney.dev/v2/pagination)
|
|
8516
8565
|
- name: offset
|
|
8517
8566
|
in: query
|
|
8518
8567
|
schema:
|
|
8519
8568
|
type: integer
|
|
8520
8569
|
description: Sets the offset for the records returned. This is
|
|
8521
8570
|
typically set automatically in the header. See
|
|
8522
|
-
[Pagination](https://
|
|
8571
|
+
[Pagination](https://lunchmoney.dev/v2/pagination)
|
|
8523
8572
|
responses:
|
|
8524
8573
|
"200":
|
|
8525
8574
|
description: Returns an array of transactions. <br><br>The `has_more`
|
|
8526
8575
|
property is set to `true` if more transactions are available. See
|
|
8527
|
-
[Pagination](https://
|
|
8576
|
+
[Pagination](https://lunchmoney.dev/v2/pagination)
|
|
8528
8577
|
content:
|
|
8529
8578
|
application/json:
|
|
8530
8579
|
schema:
|
|
@@ -10190,7 +10239,7 @@ paths:
|
|
|
10190
10239
|
description: |
|
|
10191
10240
|
The payee for the new grouped transaction.
|
|
10192
10241
|
minLength: 0
|
|
10193
|
-
|
|
10242
|
+
|
|
10194
10243
|
category_id:
|
|
10195
10244
|
type: integer
|
|
10196
10245
|
format: int64
|
|
@@ -10205,8 +10254,6 @@ paths:
|
|
|
10205
10254
|
nullable: true
|
|
10206
10255
|
description: |
|
|
10207
10256
|
Notes for the grouped transaction.
|
|
10208
|
-
minLength: 0
|
|
10209
|
-
maxLength: 350
|
|
10210
10257
|
status:
|
|
10211
10258
|
type: string
|
|
10212
10259
|
description: If set, must be either `reviewed` or
|
|
@@ -11569,12 +11616,15 @@ paths:
|
|
|
11569
11616
|
get:
|
|
11570
11617
|
tags:
|
|
11571
11618
|
- budgets
|
|
11572
|
-
summary: Get budget settings
|
|
11573
|
-
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).
|
|
11574
11624
|
operationId: getBudgetSettings
|
|
11575
11625
|
responses:
|
|
11576
11626
|
"200":
|
|
11577
|
-
description: Budget settings for the
|
|
11627
|
+
description: Budget period settings for the current budget
|
|
11578
11628
|
content:
|
|
11579
11629
|
application/json:
|
|
11580
11630
|
schema:
|
|
@@ -11597,7 +11647,7 @@ paths:
|
|
|
11597
11647
|
Note that `start_date` **must** be a valid budget period start for the account (based on the account's
|
|
11598
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>
|
|
11599
11649
|
|
|
11600
|
-
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>
|
|
11601
11651
|
To view details for existing budgets, use the [summary](#tag/summary) endpoint.
|
|
11602
11652
|
operationId: upsertBudget
|
|
11603
11653
|
requestBody:
|
|
@@ -11668,7 +11718,7 @@ paths:
|
|
|
11668
11718
|
period settings). If an invalid `start_date` is provided, the request
|
|
11669
11719
|
will fail with an error that indicates what the previous and next valid
|
|
11670
11720
|
start dates are.<p> Use the
|
|
11671
|
-
[budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view
|
|
11721
|
+
[/budgets/settings](#tag/budgets/GET/budgets/settings) endpoint to view
|
|
11672
11722
|
the account's budget settings.<br> To view details for existing budgets,
|
|
11673
11723
|
use the [summary](#tag/summary) endpoint.
|
|
11674
11724
|
operationId: deleteBudget
|