@firela/api-types 0.0.0-canary.7b647d33 → 0.0.0-canary.824fea47

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.
@@ -6,13 +6,9 @@ export type CreateAccountDto = {
6
6
  */
7
7
  path: string;
8
8
  /**
9
- * Display name to distinguish accounts at the same path (default: "")
9
+ * Account open date (server defaults to today)
10
10
  */
11
- displayName?: string;
12
- /**
13
- * Account open date
14
- */
15
- openDate: string;
11
+ openDate?: string;
16
12
  /**
17
13
  * Allowed currencies (null = no restriction)
18
14
  */
@@ -36,18 +32,14 @@ export type CreateAccountDto = {
36
32
  * Whether this is a custom (user-created) account
37
33
  */
38
34
  isCustom?: boolean;
39
- /**
40
- * i18n key for display name (overrides template)
41
- */
42
- i18nKey?: string;
43
35
  /**
44
36
  * Icon identifier (overrides template)
45
37
  */
46
38
  icon?: string;
47
39
  /**
48
- * Additional metadata
40
+ * Open directive metadata (NOT an opening-balance amount — use the opening-balance endpoint)
49
41
  */
50
- openMeta?: {
42
+ openDirectiveMeta?: {
51
43
  [key: string]: unknown;
52
44
  };
53
45
  /**
@@ -77,14 +69,47 @@ export type AccountResponseDto = {
77
69
  * Account path (hierarchical, colon-separated)
78
70
  */
79
71
  path: string;
80
- /**
81
- * Display name distinguishing multiple accounts at the same path
82
- */
83
- displayName: string;
84
72
  /**
85
73
  * Account type (root segment)
86
74
  */
87
75
  type: 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
76
+ /**
77
+ * Account-level asset sub-class (product type, e.g. STOCK/DEPOSIT/CREDIT_CARD/PERSONAL_LOAN). Computed from the account path via the asset-classifier (ADR-0077). Null for non-asset accounts (Income/Expenses/Equity) or unmatched paths.
78
+ */
79
+ assetSubClass?:
80
+ | 'DEPOSIT'
81
+ | 'CASH'
82
+ | 'MONEY_MARKET_FUND'
83
+ | 'STOCK'
84
+ | 'ETF'
85
+ | 'MUTUAL_FUND'
86
+ | 'EQUITY_COMPENSATION'
87
+ | 'GOVERNMENT_BOND'
88
+ | 'CORPORATE_BOND'
89
+ | 'BOND_FUND'
90
+ | 'PRIMARY_RESIDENCE'
91
+ | 'INVESTMENT_PROPERTY'
92
+ | 'REIT'
93
+ | 'GOLD'
94
+ | 'SILVER'
95
+ | 'PRECIOUS_METAL'
96
+ | 'PRECIOUS_METAL_FUND'
97
+ | 'COMMODITY'
98
+ | 'COMMODITY_FUND'
99
+ | 'CRYPTOCURRENCY'
100
+ | 'RETIREMENT_ACCOUNT'
101
+ | 'HEALTH_ACCOUNT'
102
+ | 'EDUCATION_ACCOUNT'
103
+ | 'INSURANCE'
104
+ | 'PRIVATE_EQUITY'
105
+ | 'HEDGE_FUND'
106
+ | 'COLLECTIBLES'
107
+ | 'MORTGAGE'
108
+ | 'STUDENT_LOAN'
109
+ | 'CREDIT_CARD'
110
+ | 'PERSONAL_LOAN'
111
+ | 'OTHER'
112
+ | null;
88
113
  /**
89
114
  * Account status
90
115
  */
@@ -121,17 +146,17 @@ export type AccountResponseDto = {
121
146
  */
122
147
  isCustom: boolean;
123
148
  /**
124
- * i18n key for display name
149
+ * Localized display name (ADR-0114, read-time projection)
125
150
  */
126
- i18nKey?: string;
151
+ displayName?: string;
127
152
  /**
128
153
  * Icon identifier
129
154
  */
130
155
  icon?: string;
131
156
  /**
132
- * Account metadata
157
+ * Open directive metadata (ADR-0115 Decision 9)
133
158
  */
134
- openMeta?: {
159
+ openDirectiveMeta?: {
135
160
  [key: string]: unknown;
136
161
  };
137
162
  /**
@@ -161,6 +186,43 @@ export type AccountResponseDto = {
161
186
  */
162
187
  export type type = 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
163
188
 
189
+ /**
190
+ * Account-level asset sub-class (product type, e.g. STOCK/DEPOSIT/CREDIT_CARD/PERSONAL_LOAN). Computed from the account path via the asset-classifier (ADR-0077). Null for non-asset accounts (Income/Expenses/Equity) or unmatched paths.
191
+ */
192
+ export type assetSubClass =
193
+ | 'DEPOSIT'
194
+ | 'CASH'
195
+ | 'MONEY_MARKET_FUND'
196
+ | 'STOCK'
197
+ | 'ETF'
198
+ | 'MUTUAL_FUND'
199
+ | 'EQUITY_COMPENSATION'
200
+ | 'GOVERNMENT_BOND'
201
+ | 'CORPORATE_BOND'
202
+ | 'BOND_FUND'
203
+ | 'PRIMARY_RESIDENCE'
204
+ | 'INVESTMENT_PROPERTY'
205
+ | 'REIT'
206
+ | 'GOLD'
207
+ | 'SILVER'
208
+ | 'PRECIOUS_METAL'
209
+ | 'PRECIOUS_METAL_FUND'
210
+ | 'COMMODITY'
211
+ | 'COMMODITY_FUND'
212
+ | 'CRYPTOCURRENCY'
213
+ | 'RETIREMENT_ACCOUNT'
214
+ | 'HEALTH_ACCOUNT'
215
+ | 'EDUCATION_ACCOUNT'
216
+ | 'INSURANCE'
217
+ | 'PRIVATE_EQUITY'
218
+ | 'HEDGE_FUND'
219
+ | 'COLLECTIBLES'
220
+ | 'MORTGAGE'
221
+ | 'STUDENT_LOAN'
222
+ | 'CREDIT_CARD'
223
+ | 'PERSONAL_LOAN'
224
+ | 'OTHER';
225
+
164
226
  /**
165
227
  * Account status
166
228
  */
@@ -178,10 +240,6 @@ export type AccountListResponseDto = {
178
240
  };
179
241
 
180
242
  export type UpdateAccountDto = {
181
- /**
182
- * Display name to distinguish accounts at the same path
183
- */
184
- displayName?: string;
185
243
  /**
186
244
  * Allowed currencies (null = no restriction)
187
245
  */
@@ -197,18 +255,14 @@ export type UpdateAccountDto = {
197
255
  | 'STRICT'
198
256
  | 'STRICT_WITH_SIZE'
199
257
  | 'NONE';
200
- /**
201
- * i18n key for display name
202
- */
203
- i18nKey?: string;
204
258
  /**
205
259
  * Icon identifier
206
260
  */
207
261
  icon?: string;
208
262
  /**
209
- * Additional metadata (merged with existing)
263
+ * Open directive metadata (merged with existing; NOT an opening-balance amount)
210
264
  */
211
- openMeta?: {
265
+ openDirectiveMeta?: {
212
266
  [key: string]: unknown;
213
267
  };
214
268
  /**
@@ -237,6 +291,28 @@ export type ReopenAccountDto = {
237
291
  reopenDate?: string;
238
292
  };
239
293
 
294
+ export type CreateOpeningBalanceDto = {
295
+ /**
296
+ * Opening balance amount (non-negative)
297
+ */
298
+ amount: number;
299
+ /**
300
+ * Currency code
301
+ */
302
+ currency: string;
303
+ /**
304
+ * Opening-balance date (defaults to now)
305
+ */
306
+ date?: string;
307
+ };
308
+
309
+ export type OpeningBalanceResultDto = {
310
+ /**
311
+ * Created opening-balance transaction id.
312
+ */
313
+ transactionId: string;
314
+ };
315
+
240
316
  export type AccountStandardResponseDto = {
241
317
  /**
242
318
  * Account path (hierarchical, colon-separated)
@@ -246,10 +322,6 @@ export type AccountStandardResponseDto = {
246
322
  * Account type in Beancount hierarchy
247
323
  */
248
324
  type: 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
249
- /**
250
- * i18n key for localized display name
251
- */
252
- i18nKey: string;
253
325
  /**
254
326
  * Short localized display name
255
327
  */
@@ -284,10 +356,6 @@ export type AccountStandardListResponseDto = {
284
356
  };
285
357
 
286
358
  export type TemplateMetadataDto = {
287
- /**
288
- * Whether this path can be extended
289
- */
290
- extendable: boolean;
291
359
  /**
292
360
  * Root account type
293
361
  */
@@ -848,6 +916,51 @@ export type flag2 =
848
916
  */
849
917
  export type status2 = 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
850
918
 
919
+ export type BalanceByCurrencyDto = {
920
+ /**
921
+ * ISO 4217 currency code
922
+ */
923
+ currency: string;
924
+ /**
925
+ * Balance amount
926
+ */
927
+ balance: string;
928
+ };
929
+
930
+ export type ExchangeRateWarningDto = {
931
+ /**
932
+ * Warning type
933
+ */
934
+ type: string;
935
+ /**
936
+ * Currency without exchange rate
937
+ */
938
+ currency: string;
939
+ /**
940
+ * Total amount affected
941
+ */
942
+ totalAmount: string;
943
+ };
944
+
945
+ export type TransactionListSummaryDto = {
946
+ /**
947
+ * Partial converted total in base currency (rated currencies only, raw Beancount sign). When warnings is non-empty this excludes currencies missing an FX rate; may be "0.00" if ALL non-base currencies lack a rate. Converted at the dateTo (or current) available rate.
948
+ */
949
+ totalAmount: string;
950
+ /**
951
+ * Base currency (ISO 4217)
952
+ */
953
+ currency: string;
954
+ /**
955
+ * Raw (unconverted) balance per currency
956
+ */
957
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
958
+ /**
959
+ * Currencies missing an FX rate (omitted when empty)
960
+ */
961
+ warnings?: Array<ExchangeRateWarningDto>;
962
+ };
963
+
851
964
  export type TransactionListResponseDto = {
852
965
  /**
853
966
  * List of transactions
@@ -865,6 +978,10 @@ export type TransactionListResponseDto = {
865
978
  * Number of items skipped
866
979
  */
867
980
  offset: number;
981
+ /**
982
+ * Amount summary for the full filtered set (#514). Present only when the request has a single account OR category viewpoint; omitted for search-only / plain-list / dual-perspective requests.
983
+ */
984
+ summary?: TransactionListSummaryDto;
868
985
  };
869
986
 
870
987
  export type TagSuggestionDto = {
@@ -1917,6 +2034,108 @@ export type UpdateCommodityDto = {
1917
2034
  };
1918
2035
  };
1919
2036
 
2037
+ export type CreateBeanPriceDto = {
2038
+ /**
2039
+ * Currency being priced (e.g., USD, AAPL, BTC)
2040
+ */
2041
+ currency: string;
2042
+ /**
2043
+ * Quote currency (pricing currency, e.g., CNY, EUR)
2044
+ */
2045
+ quoteCurrency: string;
2046
+ /**
2047
+ * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
2048
+ */
2049
+ amount: number;
2050
+ /**
2051
+ * Price date (ISO 8601 format)
2052
+ */
2053
+ date: string;
2054
+ /**
2055
+ * Metadata (validated by Zod schema, max field lengths enforced)
2056
+ */
2057
+ metadata?: {
2058
+ [key: string]: unknown;
2059
+ };
2060
+ };
2061
+
2062
+ export type PriceResponseDto = {
2063
+ /**
2064
+ * Unique identifier
2065
+ */
2066
+ id: string;
2067
+ /**
2068
+ * User ID (owner of the price)
2069
+ */
2070
+ userId: string;
2071
+ /**
2072
+ * Currency being priced (e.g., USD, AAPL, BTC)
2073
+ */
2074
+ currency: string;
2075
+ /**
2076
+ * Quote currency (pricing currency, e.g., USD, CNY)
2077
+ */
2078
+ quoteCurrency: string;
2079
+ /**
2080
+ * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
2081
+ */
2082
+ amount: number;
2083
+ /**
2084
+ * Price date (ISO 8601 format). Represents the date this price was valid.
2085
+ */
2086
+ date: string;
2087
+ /**
2088
+ * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
2089
+ */
2090
+ meta: {
2091
+ [key: string]: unknown;
2092
+ };
2093
+ /**
2094
+ * Creation timestamp
2095
+ */
2096
+ createdAt: string;
2097
+ /**
2098
+ * Last update timestamp
2099
+ */
2100
+ updatedAt: string;
2101
+ };
2102
+
2103
+ export type PriceListResponseDto = {
2104
+ /**
2105
+ * List of prices
2106
+ */
2107
+ items: Array<PriceResponseDto>;
2108
+ /**
2109
+ * Total number of prices
2110
+ */
2111
+ total: number;
2112
+ };
2113
+
2114
+ export type UpdateBeanPriceDto = {
2115
+ /**
2116
+ * Currency being priced
2117
+ */
2118
+ currency?: string;
2119
+ /**
2120
+ * Quote currency (pricing currency)
2121
+ */
2122
+ quoteCurrency?: string;
2123
+ /**
2124
+ * Price amount (MUST be >= 0 per Beancount spec)
2125
+ */
2126
+ amount?: number;
2127
+ /**
2128
+ * Price date (ISO 8601 format)
2129
+ */
2130
+ date?: string;
2131
+ /**
2132
+ * Metadata
2133
+ */
2134
+ metadata?: {
2135
+ [key: string]: unknown;
2136
+ };
2137
+ };
2138
+
1920
2139
  export type CreateRecurringRuleDto = {
1921
2140
  /**
1922
2141
  * Rule name (unique per user)
@@ -2556,68 +2775,380 @@ export type ForecastResponseDto = {
2556
2775
  periodEnd: string;
2557
2776
  };
2558
2777
 
2559
- export type CreateTransactionRuleDto = {
2560
- name: string;
2561
- description?: string;
2562
- narrationKeywords?: Array<unknown[]>;
2563
- payeeKeywords?: Array<unknown[]>;
2564
- categoryKeywords?: Array<unknown[]>;
2778
+ export type CurrencyBalanceDto = {
2565
2779
  /**
2566
- * Payment method keywords (e.g., HuaBei, YuEBao)
2780
+ * ISO 4217 currency code
2567
2781
  */
2568
- methodKeywords?: Array<unknown[]>;
2782
+ currency: string;
2569
2783
  /**
2570
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2784
+ * Balance amount
2571
2785
  */
2572
- categoryAccount?: string;
2573
- matchLogic: 'OR' | 'AND';
2786
+ balance: string;
2787
+ };
2788
+
2789
+ export type TimeSeriesPointDto = {
2574
2790
  /**
2575
- * Minimum transaction amount (inclusive)
2791
+ * Date in YYYY-MM-DD format
2576
2792
  */
2577
- amountMin?: number;
2793
+ date: string;
2578
2794
  /**
2579
- * Maximum transaction amount (inclusive)
2795
+ * Value at this date (in base currency)
2580
2796
  */
2581
- amountMax?: number;
2582
- priority: number;
2583
- additionalTags?: Array<unknown[]>;
2584
- additionalMetadata?: {
2797
+ value: string;
2798
+ /**
2799
+ * Change from previous point
2800
+ */
2801
+ change?: {
2585
2802
  [key: string]: unknown;
2586
2803
  };
2587
2804
  /**
2588
- * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
2805
+ * Total assets at this date (in base currency)
2589
2806
  */
2590
- upsertByPayee?: boolean;
2591
- };
2592
-
2593
- export type matchLogic = 'OR' | 'AND';
2594
-
2595
- export type AmountRangeDto = {
2807
+ assets?: string;
2596
2808
  /**
2597
- * Minimum amount
2809
+ * Total liabilities at this date (in base currency)
2598
2810
  */
2599
- min?: number;
2811
+ liabilities?: string;
2600
2812
  /**
2601
- * Maximum amount
2813
+ * Multi-currency breakdown for this point
2602
2814
  */
2603
- max?: number;
2815
+ byCurrency?: Array<CurrencyBalanceDto>;
2604
2816
  };
2605
2817
 
2606
- export type TransactionRuleResponseDto = {
2818
+ export type TrendSummaryDto = {
2607
2819
  /**
2608
- * Rule ID
2820
+ * Value at start of period
2609
2821
  */
2610
- id: string;
2822
+ startValue: string;
2611
2823
  /**
2612
- * Rule name
2824
+ * Value at end of period
2613
2825
  */
2614
- name: string;
2826
+ endValue: string;
2615
2827
  /**
2616
- * Rule description
2828
+ * Total change over period
2617
2829
  */
2618
- description?: string;
2830
+ totalChange: string;
2619
2831
  /**
2620
- * Keywords to match in transaction narration
2832
+ * Total change percentage
2833
+ */
2834
+ totalChangePercentage: string;
2835
+ };
2836
+
2837
+ export type MultiCurrencyPointDto = {
2838
+ /**
2839
+ * Date in YYYY-MM-DD format
2840
+ */
2841
+ date: string;
2842
+ /**
2843
+ * Balances by currency
2844
+ */
2845
+ byCurrency: Array<CurrencyBalanceDto>;
2846
+ };
2847
+
2848
+ export type PortfolioTrendsResponseDto = {
2849
+ /**
2850
+ * Time series data points
2851
+ */
2852
+ series: Array<TimeSeriesPointDto>;
2853
+ /**
2854
+ * Period summary
2855
+ */
2856
+ summary: TrendSummaryDto;
2857
+ /**
2858
+ * Period requested
2859
+ */
2860
+ period: string;
2861
+ /**
2862
+ * Data granularity
2863
+ */
2864
+ granularity: string;
2865
+ /**
2866
+ * Base currency for converted values
2867
+ */
2868
+ currency: string;
2869
+ /**
2870
+ * Multi-currency time series (each point has currency breakdown)
2871
+ */
2872
+ byCurrency?: Array<MultiCurrencyPointDto>;
2873
+ /**
2874
+ * Exchange rate warnings
2875
+ */
2876
+ warnings?: Array<ExchangeRateWarningDto>;
2877
+ };
2878
+
2879
+ export type CashFlowPointDto = {
2880
+ /**
2881
+ * Month key (YYYY-MM)
2882
+ */
2883
+ month: string;
2884
+ /**
2885
+ * Income in base currency (absolute, converted)
2886
+ */
2887
+ income: string;
2888
+ /**
2889
+ * Expense in base currency (absolute, converted)
2890
+ */
2891
+ expense: string;
2892
+ /**
2893
+ * netSavings = income − expense (savings positive)
2894
+ */
2895
+ netSavings: string;
2896
+ };
2897
+
2898
+ export type CashFlowTrendSummaryDto = {
2899
+ /**
2900
+ * Total income across the period
2901
+ */
2902
+ totalIncome: string;
2903
+ /**
2904
+ * Total expense across the period
2905
+ */
2906
+ totalExpense: string;
2907
+ /**
2908
+ * income − expense across the period
2909
+ */
2910
+ totalNetSavings: string;
2911
+ /**
2912
+ * totalNetSavings divided by the window length (N months, incl. zero-filled)
2913
+ */
2914
+ averageMonthlyNetSavings: string;
2915
+ };
2916
+
2917
+ export type CashFlowTrendsResponseDto = {
2918
+ /**
2919
+ * Monthly cash-flow series (fixed N-month window, zero-filled)
2920
+ */
2921
+ series: Array<CashFlowPointDto>;
2922
+ /**
2923
+ * Period totals
2924
+ */
2925
+ summary: CashFlowTrendSummaryDto;
2926
+ /**
2927
+ * Period requested
2928
+ */
2929
+ period: string;
2930
+ /**
2931
+ * Data granularity (v1 returns month buckets)
2932
+ */
2933
+ granularity: string;
2934
+ /**
2935
+ * Base currency for converted values
2936
+ */
2937
+ currency: string;
2938
+ /**
2939
+ * Exchange rate warnings (e.g. missing rate for a currency)
2940
+ */
2941
+ warnings?: Array<ExchangeRateWarningDto>;
2942
+ };
2943
+
2944
+ export type GenerateSnapshotBody = unknown;
2945
+
2946
+ export type GenerateSnapshotResponse = unknown;
2947
+
2948
+ export type BackfillSnapshotsBody = unknown;
2949
+
2950
+ export type BackfillSnapshotsResponse = unknown;
2951
+
2952
+ export type DeleteOwnUserDto = {
2953
+ /**
2954
+ * Access token for user verification
2955
+ */
2956
+ accessToken: string;
2957
+ };
2958
+
2959
+ export type SignupDto = {
2960
+ /**
2961
+ * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2962
+ */
2963
+ turnstileToken?: string;
2964
+ };
2965
+
2966
+ export type SignupResponseDto = {
2967
+ /**
2968
+ * JWT auth token
2969
+ */
2970
+ authToken: string;
2971
+ /**
2972
+ * Auto-generated access token
2973
+ */
2974
+ accessToken: string;
2975
+ /**
2976
+ * Assigned user role
2977
+ */
2978
+ role: 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2979
+ };
2980
+
2981
+ /**
2982
+ * Assigned user role
2983
+ */
2984
+ export type role = 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2985
+
2986
+ export type UpdateUserSettingDto = {
2987
+ /**
2988
+ * Security ID
2989
+ */
2990
+ secId?: number;
2991
+ /**
2992
+ * Annual interest rate
2993
+ */
2994
+ annualInterestRate?: number;
2995
+ /**
2996
+ * Currency code
2997
+ */
2998
+ currency?: string;
2999
+ /**
3000
+ * Base currency code
3001
+ */
3002
+ baseCurrency?: string;
3003
+ /**
3004
+ * Benchmark symbol
3005
+ */
3006
+ benchmark?: string;
3007
+ /**
3008
+ * Color scheme
3009
+ */
3010
+ colorScheme?: 'DARK' | 'LIGHT';
3011
+ /**
3012
+ * Date range filter
3013
+ */
3014
+ dateRange?: string;
3015
+ /**
3016
+ * Emergency fund amount
3017
+ */
3018
+ emergencyFund?: number;
3019
+ /**
3020
+ * Account filter IDs
3021
+ */
3022
+ 'filters.accounts'?: Array<string>;
3023
+ /**
3024
+ * Asset class filters
3025
+ */
3026
+ 'filters.assetClasses'?: Array<string>;
3027
+ /**
3028
+ * Data source filter
3029
+ */
3030
+ 'filters.dataSource'?: string;
3031
+ /**
3032
+ * Symbol filter
3033
+ */
3034
+ 'filters.symbol'?: string;
3035
+ /**
3036
+ * Tag filters
3037
+ */
3038
+ 'filters.tags'?: Array<string>;
3039
+ /**
3040
+ * Enable experimental features
3041
+ */
3042
+ isExperimentalFeatures?: boolean;
3043
+ /**
3044
+ * Enable restricted view mode
3045
+ */
3046
+ isRestrictedView?: boolean;
3047
+ /**
3048
+ * Language code
3049
+ */
3050
+ language?: string;
3051
+ /**
3052
+ * Locale code
3053
+ */
3054
+ locale?: string;
3055
+ /**
3056
+ * Projected total amount
3057
+ */
3058
+ projectedTotalAmount?: number;
3059
+ /**
3060
+ * Retirement date in ISO 8601 format
3061
+ */
3062
+ retirementDate?: string;
3063
+ /**
3064
+ * Savings rate percentage
3065
+ */
3066
+ savingsRate?: number;
3067
+ /**
3068
+ * View mode
3069
+ */
3070
+ viewMode?: 'DEFAULT' | 'ZEN';
3071
+ };
3072
+
3073
+ /**
3074
+ * Color scheme
3075
+ */
3076
+ export type colorScheme = 'DARK' | 'LIGHT';
3077
+
3078
+ /**
3079
+ * View mode
3080
+ */
3081
+ export type viewMode = 'DEFAULT' | 'ZEN';
3082
+
3083
+ export type UpdatePropertyDto = {
3084
+ /**
3085
+ * Property value
3086
+ */
3087
+ value: string;
3088
+ };
3089
+
3090
+ export type CreateTransactionRuleDto = {
3091
+ name: string;
3092
+ description?: string;
3093
+ narrationKeywords?: Array<unknown[]>;
3094
+ payeeKeywords?: Array<unknown[]>;
3095
+ categoryKeywords?: Array<unknown[]>;
3096
+ /**
3097
+ * Payment method keywords (e.g., HuaBei, YuEBao)
3098
+ */
3099
+ methodKeywords?: Array<unknown[]>;
3100
+ /**
3101
+ * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
3102
+ */
3103
+ categoryAccount?: string;
3104
+ matchLogic: 'OR' | 'AND';
3105
+ /**
3106
+ * Minimum transaction amount (inclusive)
3107
+ */
3108
+ amountMin?: number;
3109
+ /**
3110
+ * Maximum transaction amount (inclusive)
3111
+ */
3112
+ amountMax?: number;
3113
+ priority: number;
3114
+ additionalTags?: Array<unknown[]>;
3115
+ additionalMetadata?: {
3116
+ [key: string]: unknown;
3117
+ };
3118
+ /**
3119
+ * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
3120
+ */
3121
+ upsertByPayee?: boolean;
3122
+ };
3123
+
3124
+ export type matchLogic = 'OR' | 'AND';
3125
+
3126
+ export type AmountRangeDto = {
3127
+ /**
3128
+ * Minimum amount
3129
+ */
3130
+ min?: number;
3131
+ /**
3132
+ * Maximum amount
3133
+ */
3134
+ max?: number;
3135
+ };
3136
+
3137
+ export type TransactionRuleResponseDto = {
3138
+ /**
3139
+ * Rule ID
3140
+ */
3141
+ id: string;
3142
+ /**
3143
+ * Rule name
3144
+ */
3145
+ name: string;
3146
+ /**
3147
+ * Rule description
3148
+ */
3149
+ description?: string;
3150
+ /**
3151
+ * Keywords to match in transaction narration
2621
3152
  */
2622
3153
  narrationKeywords: Array<string>;
2623
3154
  /**
@@ -2855,178 +3386,60 @@ export type UpdateTransactionRuleDto = {
2855
3386
  payeeKeywords?: Array<unknown[]>;
2856
3387
  categoryKeywords?: Array<unknown[]>;
2857
3388
  /**
2858
- * Payment method keywords (e.g., HuaBei, YuEBao)
2859
- */
2860
- methodKeywords?: Array<unknown[]>;
2861
- /**
2862
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2863
- */
2864
- categoryAccount?: string;
2865
- matchLogic?: 'OR' | 'AND';
2866
- /**
2867
- * Minimum transaction amount (inclusive)
2868
- */
2869
- amountMin?: number;
2870
- /**
2871
- * Maximum transaction amount (inclusive)
2872
- */
2873
- amountMax?: number;
2874
- priority?: number;
2875
- /**
2876
- * Enable or disable the rule
2877
- */
2878
- enabled?: boolean;
2879
- additionalTags?: Array<unknown[]>;
2880
- additionalMetadata?: {
2881
- [key: string]: unknown;
2882
- };
2883
- };
2884
-
2885
- export type TestRuleDto = {
2886
- narration: string;
2887
- payee?: string;
2888
- categoryAccount?: string;
2889
- amount?: number;
2890
- currency?: string;
2891
- };
2892
-
2893
- export type TestRuleResponseDto = {
2894
- /**
2895
- * Rule ID that was tested
2896
- */
2897
- ruleId: string;
2898
- /**
2899
- * Whether the rule matched the test data
2900
- */
2901
- matches: boolean;
2902
- /**
2903
- * Match confidence score (0-1)
2904
- */
2905
- confidence: number;
2906
- /**
2907
- * Details of which fields matched
2908
- */
2909
- matchDetails: {
2910
- [key: string]: unknown;
2911
- };
2912
- };
2913
-
2914
- export type DeleteOwnUserDto = {
2915
- /**
2916
- * Access token for user verification
2917
- */
2918
- accessToken: string;
2919
- };
2920
-
2921
- export type SignupDto = {
2922
- /**
2923
- * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2924
- */
2925
- turnstileToken?: string;
2926
- };
2927
-
2928
- export type UpdateUserSettingDto = {
2929
- /**
2930
- * Security ID
2931
- */
2932
- secId?: number;
2933
- /**
2934
- * Annual interest rate
2935
- */
2936
- annualInterestRate?: number;
2937
- /**
2938
- * Currency code
2939
- */
2940
- currency?: string;
2941
- /**
2942
- * Base currency code
2943
- */
2944
- baseCurrency?: string;
2945
- /**
2946
- * Benchmark symbol
2947
- */
2948
- benchmark?: string;
2949
- /**
2950
- * Color scheme
2951
- */
2952
- colorScheme?: 'DARK' | 'LIGHT';
2953
- /**
2954
- * Date range filter
2955
- */
2956
- dateRange?: string;
2957
- /**
2958
- * Emergency fund amount
2959
- */
2960
- emergencyFund?: number;
2961
- /**
2962
- * Account filter IDs
2963
- */
2964
- 'filters.accounts'?: Array<string>;
2965
- /**
2966
- * Asset class filters
2967
- */
2968
- 'filters.assetClasses'?: Array<string>;
2969
- /**
2970
- * Data source filter
2971
- */
2972
- 'filters.dataSource'?: string;
2973
- /**
2974
- * Symbol filter
2975
- */
2976
- 'filters.symbol'?: string;
2977
- /**
2978
- * Tag filters
2979
- */
2980
- 'filters.tags'?: Array<string>;
2981
- /**
2982
- * Enable experimental features
3389
+ * Payment method keywords (e.g., HuaBei, YuEBao)
2983
3390
  */
2984
- isExperimentalFeatures?: boolean;
3391
+ methodKeywords?: Array<unknown[]>;
2985
3392
  /**
2986
- * Enable restricted view mode
3393
+ * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2987
3394
  */
2988
- isRestrictedView?: boolean;
3395
+ categoryAccount?: string;
3396
+ matchLogic?: 'OR' | 'AND';
2989
3397
  /**
2990
- * Language code
3398
+ * Minimum transaction amount (inclusive)
2991
3399
  */
2992
- language?: string;
3400
+ amountMin?: number;
2993
3401
  /**
2994
- * Locale code
3402
+ * Maximum transaction amount (inclusive)
2995
3403
  */
2996
- locale?: string;
3404
+ amountMax?: number;
3405
+ priority?: number;
2997
3406
  /**
2998
- * Projected total amount
3407
+ * Enable or disable the rule
2999
3408
  */
3000
- projectedTotalAmount?: number;
3409
+ enabled?: boolean;
3410
+ additionalTags?: Array<unknown[]>;
3411
+ additionalMetadata?: {
3412
+ [key: string]: unknown;
3413
+ };
3414
+ };
3415
+
3416
+ export type TestRuleDto = {
3417
+ narration: string;
3418
+ payee?: string;
3419
+ categoryAccount?: string;
3420
+ amount?: number;
3421
+ currency?: string;
3422
+ };
3423
+
3424
+ export type TestRuleResponseDto = {
3001
3425
  /**
3002
- * Retirement date in ISO 8601 format
3426
+ * Rule ID that was tested
3003
3427
  */
3004
- retirementDate?: string;
3428
+ ruleId: string;
3005
3429
  /**
3006
- * Savings rate percentage
3430
+ * Whether the rule matched the test data
3007
3431
  */
3008
- savingsRate?: number;
3432
+ matches: boolean;
3009
3433
  /**
3010
- * View mode
3434
+ * Match confidence score (0-1)
3011
3435
  */
3012
- viewMode?: 'DEFAULT' | 'ZEN';
3013
- };
3014
-
3015
- /**
3016
- * Color scheme
3017
- */
3018
- export type colorScheme = 'DARK' | 'LIGHT';
3019
-
3020
- /**
3021
- * View mode
3022
- */
3023
- export type viewMode = 'DEFAULT' | 'ZEN';
3024
-
3025
- export type UpdatePropertyDto = {
3436
+ confidence: number;
3026
3437
  /**
3027
- * Property value
3438
+ * Details of which fields matched
3028
3439
  */
3029
- value: string;
3440
+ matchDetails: {
3441
+ [key: string]: unknown;
3442
+ };
3030
3443
  };
3031
3444
 
3032
3445
  export type CreateBeanEventDto = {
@@ -3119,6 +3532,160 @@ export type UpdateBeanEventDto = {
3119
3532
  };
3120
3533
  };
3121
3534
 
3535
+ export type OnboardingAccountDto = {
3536
+ /**
3537
+ * Account path (Assets/Liabilities only; format validated by the account service)
3538
+ */
3539
+ path: string;
3540
+ /**
3541
+ * ISO 4217 currency code (3 letters)
3542
+ */
3543
+ currency: string;
3544
+ /**
3545
+ * Opening balance as a non-negative Decimal string (e.g. "1000.00")
3546
+ */
3547
+ openingBalance?: string;
3548
+ /**
3549
+ * Platform ID to bind the account to (references Platform.id); omit for unbound
3550
+ */
3551
+ platformId?: string;
3552
+ };
3553
+
3554
+ export type OnboardingDto = {
3555
+ /**
3556
+ * Asset/Liability accounts to register with opening balances
3557
+ */
3558
+ accounts?: Array<OnboardingAccountDto>;
3559
+ /**
3560
+ * Skip asset registration; only bootstrap the core account set
3561
+ */
3562
+ skipAssetRegistration?: boolean;
3563
+ };
3564
+
3565
+ export type ActualBalanceDto = {
3566
+ /**
3567
+ * Actual balance amount as a decimal string (preserves precision for tolerance inference).
3568
+ */
3569
+ amount: string;
3570
+ /**
3571
+ * Currency code (ISO 4217 or commodity ticker).
3572
+ */
3573
+ ccy: string;
3574
+ };
3575
+
3576
+ export type ComputeReconciliationDto = {
3577
+ /**
3578
+ * BeanAccount id to reconcile.
3579
+ */
3580
+ accountId: string;
3581
+ /**
3582
+ * Assertion date (ISO 8601, e.g. "2026-07-24").
3583
+ */
3584
+ asOfDate: string;
3585
+ /**
3586
+ * Actual balance from the external statement.
3587
+ */
3588
+ actualBalance: ActualBalanceDto;
3589
+ };
3590
+
3591
+ export type ReconciliationComputeResultDto = {
3592
+ accountId: string;
3593
+ asOfDate: string;
3594
+ /**
3595
+ * System-computed book balance (decimal string).
3596
+ */
3597
+ bookBalance: string;
3598
+ /**
3599
+ * User-entered actual balance (decimal string).
3600
+ */
3601
+ actualBalance: string;
3602
+ currency: string;
3603
+ /**
3604
+ * Diff = book − actual (decimal string).
3605
+ */
3606
+ diff: string;
3607
+ /**
3608
+ * Applied tolerance (decimal string).
3609
+ */
3610
+ tolerance: string;
3611
+ /**
3612
+ * true when |diff| ≤ tolerance.
3613
+ */
3614
+ withinTolerance: boolean;
3615
+ /**
3616
+ * Suggested next action: assert when within tolerance, pad otherwise.
3617
+ */
3618
+ suggestedAction: 'assert' | 'pad';
3619
+ };
3620
+
3621
+ /**
3622
+ * Suggested next action: assert when within tolerance, pad otherwise.
3623
+ */
3624
+ export type suggestedAction = 'assert' | 'pad';
3625
+
3626
+ export type AssertReconciliationDto = {
3627
+ /**
3628
+ * BeanAccount id to reconcile.
3629
+ */
3630
+ accountId: string;
3631
+ /**
3632
+ * Assertion date (ISO 8601, e.g. "2026-07-24").
3633
+ */
3634
+ asOfDate: string;
3635
+ /**
3636
+ * Actual balance from the external statement.
3637
+ */
3638
+ actualBalance: ActualBalanceDto;
3639
+ /**
3640
+ * Optional explicit tolerance override. Omit to infer from amount precision (Beancount default).
3641
+ */
3642
+ tolerance?: string;
3643
+ };
3644
+
3645
+ export type ReconciliationRecordDto = {
3646
+ id: string;
3647
+ accountId: string;
3648
+ date: string;
3649
+ /**
3650
+ * Asserted (actual) amount.
3651
+ */
3652
+ amount: string;
3653
+ currency: string;
3654
+ tolerance?: string;
3655
+ /**
3656
+ * book − actual.
3657
+ */
3658
+ diffAmount?: string;
3659
+ diffCurrency?: string;
3660
+ createdAt: string;
3661
+ };
3662
+
3663
+ export type PadReconciliationDto = {
3664
+ /**
3665
+ * BeanAccount id to reconcile.
3666
+ */
3667
+ accountId: string;
3668
+ /**
3669
+ * Assertion date (ISO 8601, e.g. "2026-07-24").
3670
+ */
3671
+ asOfDate: string;
3672
+ /**
3673
+ * Actual balance from the external statement.
3674
+ */
3675
+ actualBalance: ActualBalanceDto;
3676
+ /**
3677
+ * Pad source account. Defaults to Equity:Opening-Balances (official Beancount convention).
3678
+ */
3679
+ sourceAccount?: string;
3680
+ };
3681
+
3682
+ export type PadResultDto = {
3683
+ /**
3684
+ * Created pad adjusting transaction id.
3685
+ */
3686
+ transactionId: string;
3687
+ };
3688
+
3122
3689
  export type FileImportDto = {
3123
3690
  /**
3124
3691
  * Bill file to import (CSV, PDF, OFX, etc.)
@@ -3380,129 +3947,41 @@ export type importerId =
3380
3947
 
3381
3948
  export type UpdateMapperDefaultsDto = {
3382
3949
  /**
3383
- * Source account for transactions (Beancount format)
3384
- */
3385
- sourceAccount?: string;
3386
- /**
3387
- * Default currency (ISO 4217 code)
3388
- */
3389
- currency?: string;
3390
- /**
3391
- * Default expense account (optional)
3392
- */
3393
- expenseAccount?: string;
3394
- /**
3395
- * Default income account (optional)
3396
- */
3397
- incomeAccount?: string;
3398
- /**
3399
- * Payment method to source account mapping. Maps payment method keywords to Beancount account paths. Used by Alipay/WeChat importers to determine sourceAccount based on payment method (e.g., HuaBei, CreditCard).
3400
- */
3401
- methodAccountMapping?: {
3402
- [key: string]: unknown;
3403
- };
3404
- };
3405
-
3406
- export type UpdateConfigDataDto = {
3407
- /**
3408
- * Mapper defaults configuration
3409
- */
3410
- defaults?: UpdateMapperDefaultsDto;
3411
- };
3412
-
3413
- export type UpdateImporterConfigDto = {
3414
- /**
3415
- * Configuration data (v1 schema)
3416
- */
3417
- data?: UpdateConfigDataDto;
3418
- };
3419
-
3420
- export type CreatePlatformDto = {
3421
- /**
3422
- * Platform name
3423
- */
3424
- name: string;
3425
- /**
3426
- * Platform canonical identifier (lowercase, kebab-case)
3427
- */
3428
- canonical: string;
3429
- /**
3430
- * Platform aliases (multi-language names for lookup)
3431
- */
3432
- aliases: Array<string>;
3433
- /**
3434
- * Platform URL
3435
- */
3436
- url: string;
3437
- /**
3438
- * Platform type
3439
- */
3440
- type:
3441
- | 'BANK'
3442
- | 'BROKERAGE'
3443
- | 'CRYPTO_EXCHANGE'
3444
- | 'PAYMENT'
3445
- | 'INVESTMENT'
3446
- | 'INSURANCE'
3447
- | 'OTHER';
3448
- /**
3449
- * Platform logo URL
3450
- */
3451
- logoUrl?: string;
3452
- /**
3453
- * Whether the platform is active
3454
- */
3455
- isActive?: boolean;
3456
- };
3457
-
3458
- /**
3459
- * Platform type
3460
- */
3461
- export type type3 =
3462
- | 'BANK'
3463
- | 'BROKERAGE'
3464
- | 'CRYPTO_EXCHANGE'
3465
- | 'PAYMENT'
3466
- | 'INVESTMENT'
3467
- | 'INSURANCE'
3468
- | 'OTHER';
3469
-
3470
- export type UpdatePlatformDto = {
3471
- /**
3472
- * Platform name
3950
+ * Source account for transactions (Beancount format)
3473
3951
  */
3474
- name?: string;
3952
+ sourceAccount?: string;
3475
3953
  /**
3476
- * Platform canonical identifier (lowercase, kebab-case)
3954
+ * Default currency (ISO 4217 code)
3477
3955
  */
3478
- canonical?: string;
3956
+ currency?: string;
3479
3957
  /**
3480
- * Platform aliases (multi-language names for lookup)
3958
+ * Default expense account (optional)
3481
3959
  */
3482
- aliases?: Array<string>;
3960
+ expenseAccount?: string;
3483
3961
  /**
3484
- * Platform URL
3962
+ * Default income account (optional)
3485
3963
  */
3486
- url?: string;
3964
+ incomeAccount?: string;
3487
3965
  /**
3488
- * Platform type
3966
+ * Payment method to source account mapping. Maps payment method keywords to Beancount account paths. Used by Alipay/WeChat importers to determine sourceAccount based on payment method (e.g., HuaBei, CreditCard).
3489
3967
  */
3490
- type?:
3491
- | 'BANK'
3492
- | 'BROKERAGE'
3493
- | 'CRYPTO_EXCHANGE'
3494
- | 'PAYMENT'
3495
- | 'INVESTMENT'
3496
- | 'INSURANCE'
3497
- | 'OTHER';
3968
+ methodAccountMapping?: {
3969
+ [key: string]: unknown;
3970
+ };
3971
+ };
3972
+
3973
+ export type UpdateConfigDataDto = {
3498
3974
  /**
3499
- * Platform logo URL
3975
+ * Mapper defaults configuration
3500
3976
  */
3501
- logoUrl?: string;
3977
+ defaults?: UpdateMapperDefaultsDto;
3978
+ };
3979
+
3980
+ export type UpdateImporterConfigDto = {
3502
3981
  /**
3503
- * Whether the platform is active
3982
+ * Configuration data (v1 schema)
3504
3983
  */
3505
- isActive?: boolean;
3984
+ data?: UpdateConfigDataDto;
3506
3985
  };
3507
3986
 
3508
3987
  export type ProviderSyncConfigDto = {
@@ -3526,6 +4005,10 @@ export type ProviderSyncConfigDto = {
3526
4005
  * Filter pending transactions
3527
4006
  */
3528
4007
  filterPending?: boolean;
4008
+ /**
4009
+ * External account ID for per-batch providers (e.g. GoCardless). Overrides sourceAccount when an ExternalAccountLink mapping exists.
4010
+ */
4011
+ externalAccountId?: string;
3529
4012
  };
3530
4013
 
3531
4014
  export type ProviderSyncDto = {
@@ -3581,6 +4064,61 @@ export type SupportedProvidersResponseDto = {
3581
4064
  providers: Array<string>;
3582
4065
  };
3583
4066
 
4067
+ export type CreateExternalAccountLinkDto = {
4068
+ /**
4069
+ * Open Banking provider (whitelist)
4070
+ */
4071
+ provider:
4072
+ | 'plaid'
4073
+ | 'teller'
4074
+ | 'truelayer'
4075
+ | 'gocardless'
4076
+ | 'simplefin'
4077
+ | 'yodlee'
4078
+ | 'beancount-direct'
4079
+ | 'parsed-bill';
4080
+ /**
4081
+ * External account ID from the provider
4082
+ */
4083
+ externalAccountId: string;
4084
+ /**
4085
+ * Target BeanAccount ID (must belong to the JWT user)
4086
+ */
4087
+ beanAccountId: string;
4088
+ };
4089
+
4090
+ /**
4091
+ * Open Banking provider (whitelist)
4092
+ */
4093
+ export type provider =
4094
+ | 'plaid'
4095
+ | 'teller'
4096
+ | 'truelayer'
4097
+ | 'gocardless'
4098
+ | 'simplefin'
4099
+ | 'yodlee'
4100
+ | 'beancount-direct'
4101
+ | 'parsed-bill';
4102
+
4103
+ export type ExternalAccountLinkResponseDto = {
4104
+ id: string;
4105
+ provider: string;
4106
+ externalAccountId: string;
4107
+ beanAccountId: string;
4108
+ isActive: boolean;
4109
+ createdAt: string;
4110
+ updatedAt: string;
4111
+ };
4112
+
4113
+ export type ExternalAccountLinkListResponseDto = {
4114
+ items: Array<ExternalAccountLinkResponseDto>;
4115
+ total: number;
4116
+ /**
4117
+ * Filter by provider (query param)
4118
+ */
4119
+ provider?: string;
4120
+ };
4121
+
3584
4122
  export type ParserTelemetryReportDto = unknown;
3585
4123
 
3586
4124
  export type UncoveredFormatMissDto = unknown;
@@ -3600,6 +4138,14 @@ export type ProcessNlpDto = {
3600
4138
  parsedData?: {
3601
4139
  [key: string]: unknown;
3602
4140
  };
4141
+ /**
4142
+ * confirm_rule echo-back: rule id selected from the prior confirm_rule response (matchedRule.id or alternatives[i].ruleId). Applied directly when the session is confirming_rule — no NL re-parse.
4143
+ */
4144
+ selectedRuleId?: string;
4145
+ /**
4146
+ * confirm_account echo-back: account path selected from the prior confirm_account response (suggestedAccount, similarAccounts[i], or a typed path). Applied directly when the session is confirming_account — no NL re-parse.
4147
+ */
4148
+ selectedAccount?: string;
3603
4149
  };
3604
4150
 
3605
4151
  export type NlpTransactionInfoDto = {
@@ -3843,9 +4389,9 @@ export type NlpAccountConfirmationDataDto = {
3843
4389
  */
3844
4390
  invalidAccount: string;
3845
4391
  /**
3846
- * Suggested replacement account
4392
+ * Suggested replacement account (omitted when no clear candidate)
3847
4393
  */
3848
- suggestedAccount: string;
4394
+ suggestedAccount?: string;
3849
4395
  /**
3850
4396
  * Similar accounts for user selection
3851
4397
  */
@@ -4024,7 +4570,8 @@ export type NlpResponseDto = {
4024
4570
  | 'confirm_rule'
4025
4571
  | 'confirm_account'
4026
4572
  | 'confirm_payee'
4027
- | 'cancel';
4573
+ | 'cancel'
4574
+ | 'aborted';
4028
4575
  /**
4029
4576
  * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
4030
4577
  */
@@ -4053,122 +4600,309 @@ export type NlpResponseDto = {
4053
4600
  * Human-readable message (for ask or error actions). Deprecated: Use messageKey for i18n support.
4054
4601
  * @deprecated
4055
4602
  */
4056
- message?: string;
4603
+ message?: string;
4604
+ /**
4605
+ * i18n message key for frontend translation. Use this instead of message for internationalization support.
4606
+ */
4607
+ messageKey?: string;
4608
+ /**
4609
+ * Parameters for message interpolation. Used with messageKey for dynamic values in translated messages.
4610
+ */
4611
+ messageParams?: {
4612
+ [key: string]: unknown;
4613
+ };
4614
+ /**
4615
+ * Session ID for multi-turn dialogue. Must be included in subsequent requests to continue the conversation.
4616
+ */
4617
+ sessionId?: string;
4618
+ /**
4619
+ * Which slot is waiting for user input
4620
+ */
4621
+ waitingFor?: string;
4622
+ /**
4623
+ * Created transaction info (for created action)
4624
+ */
4625
+ transaction?: NlpTransactionInfoDto;
4626
+ /**
4627
+ * Parsed data for confirmation (when action is "confirm"). Contains extracted fields that user should verify before transaction creation.
4628
+ */
4629
+ parsedData?: NlpParsedDataDto;
4630
+ /**
4631
+ * Duplicate detection data (when action is "confirm_duplicate"). Contains information about potential duplicate transaction for user confirmation.
4632
+ */
4633
+ duplicateData?: NlpDuplicateConfirmationDataDto;
4634
+ /**
4635
+ * Rule match data (when action is "confirm_rule"). Contains information about medium-confidence rule match for user confirmation.
4636
+ */
4637
+ ruleData?: NlpRuleConfirmationDataDto;
4638
+ /**
4639
+ * Account validation data (when action is "confirm_account"). Contains information about invalid account for user correction.
4640
+ */
4641
+ accountData?: NlpAccountConfirmationDataDto;
4642
+ /**
4643
+ * Payee confirmation data (when action is "confirm_payee"). Contains information about medium/low confidence payee match for user confirmation.
4644
+ */
4645
+ payeeData?: NlpPayeeConfirmationDataDto;
4646
+ /**
4647
+ * Overall confidence score (0-1)
4648
+ */
4649
+ confidence?: number;
4650
+ /**
4651
+ * Confidence threshold for automatic creation (default: 0.75). When confidence < threshold, action will be "confirm" requiring user verification.
4652
+ */
4653
+ confidenceThreshold?: number;
4654
+ /**
4655
+ * Recurring transaction match info (when action is "created"). Contains match details when transaction matches a pending expected transaction.
4656
+ */
4657
+ recurringMatch?: RecurringMatchInfoDto;
4658
+ /**
4659
+ * Recurring rule creation suggestion (when action is "created"). Contains suggestion to create a recurring rule based on detected patterns. Only present when no existing rule matched and similar historical transactions were found.
4660
+ */
4661
+ recurringSuggestion?: RecurringSuggestionDto;
4662
+ /**
4663
+ * Suggested accounts for this transaction. Contains recommended source and destination accounts based on the detected intent and rules.
4664
+ */
4665
+ suggestedAccounts?: NlpSuggestedAccountsDto;
4666
+ /**
4667
+ * Default accounts for the user/region. These are fallback accounts used when no specific suggestion is available.
4668
+ */
4669
+ defaultAccounts?: NlpDefaultAccountsDto;
4670
+ };
4671
+
4672
+ /**
4673
+ * Response status
4674
+ */
4675
+ export type status4 = 'success' | 'pending' | 'error';
4676
+
4677
+ /**
4678
+ * Action taken or requested
4679
+ */
4680
+ export type action2 =
4681
+ | 'created'
4682
+ | 'ask'
4683
+ | 'confirm'
4684
+ | 'confirm_duplicate'
4685
+ | 'confirm_rule'
4686
+ | 'confirm_account'
4687
+ | 'confirm_payee'
4688
+ | 'cancel'
4689
+ | 'aborted';
4690
+
4691
+ /**
4692
+ * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
4693
+ */
4694
+ export type intent = 'expense' | 'asset' | 'income' | 'liability' | 'equity';
4695
+
4696
+ /**
4697
+ * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
4698
+ */
4699
+ export type assetSubType = 'transfer' | 'banking' | 'investment';
4700
+
4701
+ /**
4702
+ * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
4703
+ */
4704
+ export type liabilitySubType = 'borrow' | 'repay';
4705
+
4706
+ /**
4707
+ * Equity sub-type (only present when intent is "equity"). opening: account opening balance (Equity → Assets), adjustment: balance correction.
4708
+ */
4709
+ export type equitySubType = 'opening' | 'adjustment';
4710
+
4711
+ export type PlatformListItemDto = {
4712
+ /**
4713
+ * Global platform ID
4714
+ */
4715
+ id: string;
4716
+ /**
4717
+ * Platform name
4718
+ */
4719
+ name: string;
4720
+ /**
4721
+ * Platform URL
4722
+ */
4723
+ url: string;
4724
+ /**
4725
+ * Platform type
4726
+ */
4727
+ type:
4728
+ | 'BANK'
4729
+ | 'BROKERAGE'
4730
+ | 'CRYPTO_EXCHANGE'
4731
+ | 'PAYMENT'
4732
+ | 'INVESTMENT'
4733
+ | 'INSURANCE'
4734
+ | 'OTHER';
4735
+ /**
4736
+ * Canonical identifier in ACCOUNT_RE format (e.g., "icbc")
4737
+ */
4738
+ canonical: string;
4739
+ /**
4740
+ * Suggested path segment — canonical with first char uppercased (ACC_COMP_NAME_RE)
4741
+ */
4742
+ suggestedSegment: string;
4743
+ /**
4744
+ * Logo URL
4745
+ */
4746
+ logoUrl: string | null;
4747
+ /**
4748
+ * Whether user has accounts using this platform
4749
+ */
4750
+ isBound: boolean;
4751
+ };
4752
+
4753
+ /**
4754
+ * Platform type
4755
+ */
4756
+ export type type3 =
4757
+ | 'BANK'
4758
+ | 'BROKERAGE'
4759
+ | 'CRYPTO_EXCHANGE'
4760
+ | 'PAYMENT'
4761
+ | 'INVESTMENT'
4762
+ | 'INSURANCE'
4763
+ | 'OTHER';
4764
+
4765
+ export type PlatformMatchResultDto = {
4766
+ /**
4767
+ * Global platform ID
4768
+ */
4769
+ id: string;
4770
+ /**
4771
+ * Platform name (e.g., "ICBC")
4772
+ */
4773
+ name: string;
4774
+ /**
4775
+ * Canonical identifier in ACCOUNT_RE format (e.g., "icbc")
4776
+ */
4777
+ canonical: string;
4778
+ /**
4779
+ * Platform type
4780
+ */
4781
+ type:
4782
+ | 'BANK'
4783
+ | 'BROKERAGE'
4784
+ | 'CRYPTO_EXCHANGE'
4785
+ | 'PAYMENT'
4786
+ | 'INVESTMENT'
4787
+ | 'INSURANCE'
4788
+ | 'OTHER';
4789
+ /**
4790
+ * Suggested path segment — canonical, already in ACCOUNT_RE format
4791
+ */
4792
+ suggestedSegment: string;
4793
+ /**
4794
+ * Logo URL
4795
+ */
4796
+ logoUrl: string | null;
4797
+ /**
4798
+ * How this row matched: 'exact' > 'prefix' > 'substring'
4799
+ */
4800
+ matchType: 'exact' | 'prefix' | 'substring';
4801
+ };
4802
+
4803
+ /**
4804
+ * How this row matched: 'exact' > 'prefix' > 'substring'
4805
+ */
4806
+ export type matchType = 'exact' | 'prefix' | 'substring';
4807
+
4808
+ export type PlatformMatchResponseDto = {
4057
4809
  /**
4058
- * i18n message key for frontend translation. Use this instead of message for internationalization support.
4810
+ * Ranked matches, best tier first (at most 10 rows)
4059
4811
  */
4060
- messageKey?: string;
4812
+ platforms: Array<PlatformMatchResultDto>;
4061
4813
  /**
4062
- * Parameters for message interpolation. Used with messageKey for dynamic values in translated messages.
4814
+ * Overall match quality — top row's tier, or 'none' when no hits
4063
4815
  */
4064
- messageParams?: {
4065
- [key: string]: unknown;
4066
- };
4816
+ matchType: 'none' | 'exact' | 'prefix' | 'substring';
4067
4817
  /**
4068
- * Session ID for multi-turn dialogue. Must be included in subsequent requests to continue the conversation.
4818
+ * Total matches before LIMIT (truncation transparency)
4069
4819
  */
4070
- sessionId?: string;
4820
+ total: number;
4071
4821
  /**
4072
- * Which slot is waiting for user input
4822
+ * true when total > platforms.length (more matches exist)
4073
4823
  */
4074
- waitingFor?: string;
4824
+ hasMore: boolean;
4825
+ };
4826
+
4827
+ /**
4828
+ * Overall match quality — top row's tier, or 'none' when no hits
4829
+ */
4830
+ export type matchType2 = 'none' | 'exact' | 'prefix' | 'substring';
4831
+
4832
+ export type CreatePlatformDto = {
4075
4833
  /**
4076
- * Created transaction info (for created action)
4834
+ * Platform name
4077
4835
  */
4078
- transaction?: NlpTransactionInfoDto;
4836
+ name: string;
4079
4837
  /**
4080
- * Parsed data for confirmation (when action is "confirm"). Contains extracted fields that user should verify before transaction creation.
4838
+ * Platform canonical identifier (lowercase, kebab-case)
4081
4839
  */
4082
- parsedData?: NlpParsedDataDto;
4840
+ canonical: string;
4083
4841
  /**
4084
- * Duplicate detection data (when action is "confirm_duplicate"). Contains information about potential duplicate transaction for user confirmation.
4842
+ * Platform aliases (multi-language names for lookup)
4085
4843
  */
4086
- duplicateData?: NlpDuplicateConfirmationDataDto;
4844
+ aliases: Array<string>;
4087
4845
  /**
4088
- * Rule match data (when action is "confirm_rule"). Contains information about medium-confidence rule match for user confirmation.
4846
+ * Platform URL
4089
4847
  */
4090
- ruleData?: NlpRuleConfirmationDataDto;
4848
+ url: string;
4091
4849
  /**
4092
- * Account validation data (when action is "confirm_account"). Contains information about invalid account for user correction.
4850
+ * Platform type
4093
4851
  */
4094
- accountData?: NlpAccountConfirmationDataDto;
4852
+ type:
4853
+ | 'BANK'
4854
+ | 'BROKERAGE'
4855
+ | 'CRYPTO_EXCHANGE'
4856
+ | 'PAYMENT'
4857
+ | 'INVESTMENT'
4858
+ | 'INSURANCE'
4859
+ | 'OTHER';
4095
4860
  /**
4096
- * Payee confirmation data (when action is "confirm_payee"). Contains information about medium/low confidence payee match for user confirmation.
4861
+ * Platform logo URL
4097
4862
  */
4098
- payeeData?: NlpPayeeConfirmationDataDto;
4863
+ logoUrl?: string;
4099
4864
  /**
4100
- * Overall confidence score (0-1)
4865
+ * Whether the platform is active
4101
4866
  */
4102
- confidence?: number;
4867
+ isActive?: boolean;
4868
+ };
4869
+
4870
+ export type UpdatePlatformDto = {
4103
4871
  /**
4104
- * Confidence threshold for automatic creation (default: 0.75). When confidence < threshold, action will be "confirm" requiring user verification.
4872
+ * Platform name
4105
4873
  */
4106
- confidenceThreshold?: number;
4874
+ name?: string;
4107
4875
  /**
4108
- * Recurring transaction match info (when action is "created"). Contains match details when transaction matches a pending expected transaction.
4876
+ * Platform canonical identifier (lowercase, kebab-case)
4109
4877
  */
4110
- recurringMatch?: RecurringMatchInfoDto;
4878
+ canonical?: string;
4111
4879
  /**
4112
- * Recurring rule creation suggestion (when action is "created"). Contains suggestion to create a recurring rule based on detected patterns. Only present when no existing rule matched and similar historical transactions were found.
4880
+ * Platform aliases (multi-language names for lookup)
4113
4881
  */
4114
- recurringSuggestion?: RecurringSuggestionDto;
4882
+ aliases?: Array<string>;
4115
4883
  /**
4116
- * Suggested accounts for this transaction. Contains recommended source and destination accounts based on the detected intent and rules.
4884
+ * Platform URL
4117
4885
  */
4118
- suggestedAccounts?: NlpSuggestedAccountsDto;
4886
+ url?: string;
4119
4887
  /**
4120
- * Default accounts for the user/region. These are fallback accounts used when no specific suggestion is available.
4888
+ * Platform type
4121
4889
  */
4122
- defaultAccounts?: NlpDefaultAccountsDto;
4123
- };
4124
-
4125
- /**
4126
- * Response status
4127
- */
4128
- export type status4 = 'success' | 'pending' | 'error';
4129
-
4130
- /**
4131
- * Action taken or requested
4132
- */
4133
- export type action2 =
4134
- | 'created'
4135
- | 'ask'
4136
- | 'confirm'
4137
- | 'confirm_duplicate'
4138
- | 'confirm_rule'
4139
- | 'confirm_account'
4140
- | 'confirm_payee'
4141
- | 'cancel';
4142
-
4143
- /**
4144
- * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
4145
- */
4146
- export type intent = 'expense' | 'asset' | 'income' | 'liability' | 'equity';
4147
-
4148
- /**
4149
- * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
4150
- */
4151
- export type assetSubType = 'transfer' | 'banking' | 'investment';
4152
-
4153
- /**
4154
- * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
4155
- */
4156
- export type liabilitySubType = 'borrow' | 'repay';
4157
-
4158
- /**
4159
- * Equity sub-type (only present when intent is "equity"). opening: account opening balance (Equity → Assets), adjustment: balance correction.
4160
- */
4161
- export type equitySubType = 'opening' | 'adjustment';
4162
-
4163
- export type BalanceByCurrencyDto = {
4890
+ type?:
4891
+ | 'BANK'
4892
+ | 'BROKERAGE'
4893
+ | 'CRYPTO_EXCHANGE'
4894
+ | 'PAYMENT'
4895
+ | 'INVESTMENT'
4896
+ | 'INSURANCE'
4897
+ | 'OTHER';
4164
4898
  /**
4165
- * ISO 4217 currency code
4899
+ * Platform logo URL
4166
4900
  */
4167
- currency: string;
4901
+ logoUrl?: string;
4168
4902
  /**
4169
- * Balance amount
4903
+ * Whether the platform is active
4170
4904
  */
4171
- balance: string;
4905
+ isActive?: boolean;
4172
4906
  };
4173
4907
 
4174
4908
  export type NetWorthByCurrencyDto = {
@@ -4211,21 +4945,6 @@ export type ConvertedNetWorthDto = {
4211
4945
  };
4212
4946
  };
4213
4947
 
4214
- export type ExchangeRateWarningDto = {
4215
- /**
4216
- * Warning type
4217
- */
4218
- type: string;
4219
- /**
4220
- * Currency without exchange rate
4221
- */
4222
- currency: string;
4223
- /**
4224
- * Total amount affected
4225
- */
4226
- totalAmount: string;
4227
- };
4228
-
4229
4948
  export type NetWorthResponseDto = {
4230
4949
  /**
4231
4950
  * Total net worth (assets - liabilities, converted to base currency)
@@ -4290,6 +5009,10 @@ export type AccountItemDto = {
4290
5009
  * Currency code
4291
5010
  */
4292
5011
  currency: string;
5012
+ /**
5013
+ * FX-converted balance in base currency; omitted when not convertible
5014
+ */
5015
+ convertedBalance?: string;
4293
5016
  };
4294
5017
 
4295
5018
  export type PlatformGroupDto = {
@@ -4306,9 +5029,40 @@ export type PlatformGroupDto = {
4306
5029
  */
4307
5030
  accounts: Array<AccountItemDto>;
4308
5031
  /**
4309
- * Total balance across all accounts in platform
5032
+ * FX-converted total balance in base currency
4310
5033
  */
4311
5034
  totalBalance: string;
5035
+ /**
5036
+ * Raw (unconverted) balances grouped by currency
5037
+ */
5038
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
5039
+ /**
5040
+ * Converted balance in base currency (omitted when no currency is convertible)
5041
+ */
5042
+ convertedBalance?: string;
5043
+ /**
5044
+ * Share of the grand converted total (0-100); 0 when grand total is 0
5045
+ */
5046
+ sharePct: number;
5047
+ };
5048
+
5049
+ export type AccountExchangeRateWarningDto = {
5050
+ /**
5051
+ * Warning type
5052
+ */
5053
+ type: string;
5054
+ /**
5055
+ * Currency without exchange rate
5056
+ */
5057
+ currency: string;
5058
+ /**
5059
+ * Affected account paths
5060
+ */
5061
+ accounts: Array<string>;
5062
+ /**
5063
+ * Total amount in this currency
5064
+ */
5065
+ totalAmount: string;
4312
5066
  };
4313
5067
 
4314
5068
  export type AccountsSummaryDto = {
@@ -4320,6 +5074,14 @@ export type AccountsSummaryDto = {
4320
5074
  * Total number of platforms
4321
5075
  */
4322
5076
  totalPlatforms: number;
5077
+ /**
5078
+ * Base currency for conversion
5079
+ */
5080
+ baseCurrency: string;
5081
+ /**
5082
+ * Per-account exchange rate warnings
5083
+ */
5084
+ warnings?: Array<AccountExchangeRateWarningDto>;
4323
5085
  };
4324
5086
 
4325
5087
  export type AccountsResponseDto = {
@@ -4354,6 +5116,10 @@ export type AccountItemWithAssetClassDto = {
4354
5116
  * Currency code
4355
5117
  */
4356
5118
  currency: string;
5119
+ /**
5120
+ * FX-converted balance in base currency; omitted when not convertible
5121
+ */
5122
+ convertedBalance?: string;
4357
5123
  /**
4358
5124
  * Asset class
4359
5125
  */
@@ -4435,25 +5201,6 @@ export type assetClass =
4435
5201
  | 'REAL_ESTATE'
4436
5202
  | 'INDEX';
4437
5203
 
4438
- export type AccountExchangeRateWarningDto = {
4439
- /**
4440
- * Warning type
4441
- */
4442
- type: string;
4443
- /**
4444
- * Currency without exchange rate
4445
- */
4446
- currency: string;
4447
- /**
4448
- * Affected account paths
4449
- */
4450
- accounts: Array<string>;
4451
- /**
4452
- * Total amount in this currency
4453
- */
4454
- totalAmount: string;
4455
- };
4456
-
4457
5204
  export type AssetClassSummaryDto = {
4458
5205
  /**
4459
5206
  * Total number of accounts
@@ -4600,21 +5347,78 @@ export type CashFlowResponseDto = {
4600
5347
  /**
4601
5348
  * Savings rate percentage (netSavings / income * 100)
4602
5349
  */
4603
- savingsRate: string;
5350
+ savingsRate: string;
5351
+ /**
5352
+ * Base currency code
5353
+ */
5354
+ currency: string;
5355
+ /**
5356
+ * Cash flow grouped by original currency
5357
+ */
5358
+ byCurrency?: CashFlowByCurrencyDto;
5359
+ /**
5360
+ * Converted values in base currency
5361
+ */
5362
+ converted?: ConvertedCashFlowDto;
5363
+ /**
5364
+ * Exchange rate warnings
5365
+ */
5366
+ warnings?: Array<ExchangeRateWarningDto>;
5367
+ };
5368
+
5369
+ export type CategoryGroupDto = {
5370
+ /**
5371
+ * Functional category (account-path Group segment); regional and universal account paths merge under it
5372
+ */
5373
+ category: string;
5374
+ /**
5375
+ * Converted total for this category in base currency (expense amount when flow=expense, income amount when flow=income)
5376
+ */
5377
+ totalExpense: string;
5378
+ /**
5379
+ * Share of grand total (0-100); 0 when grand total is 0
5380
+ */
5381
+ sharePct: number;
5382
+ /**
5383
+ * Raw (unconverted) expense per currency
5384
+ */
5385
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
5386
+ /**
5387
+ * Converted total in base currency (omitted when FX missing for all currencies in this category)
5388
+ */
5389
+ convertedBalance?: string;
5390
+ };
5391
+
5392
+ export type ExpensesByCategorySummaryDto = {
5393
+ /**
5394
+ * Total across all categories, converted (convertible categories only); expense totals when flow=expense, income totals when flow=income
5395
+ */
5396
+ totalExpense: string;
5397
+ /**
5398
+ * Number of categories
5399
+ */
5400
+ categoryCount: number;
5401
+ };
5402
+
5403
+ export type ExpensesByCategoryResponseDto = {
5404
+ /**
5405
+ * Period requested
5406
+ */
5407
+ period: string;
4604
5408
  /**
4605
- * Base currency code
5409
+ * Base currency for converted values
4606
5410
  */
4607
- currency: string;
5411
+ baseCurrency: string;
4608
5412
  /**
4609
- * Cash flow grouped by original currency
5413
+ * Expense groups by functional category, sorted by converted total desc
4610
5414
  */
4611
- byCurrency?: CashFlowByCurrencyDto;
5415
+ groups: Array<CategoryGroupDto>;
4612
5416
  /**
4613
- * Converted values in base currency
5417
+ * Summary statistics
4614
5418
  */
4615
- converted?: ConvertedCashFlowDto;
5419
+ summary: ExpensesByCategorySummaryDto;
4616
5420
  /**
4617
- * Exchange rate warnings
5421
+ * Exchange rate warnings (e.g. missing rate for a currency)
4618
5422
  */
4619
5423
  warnings?: Array<ExchangeRateWarningDto>;
4620
5424
  };
@@ -4814,279 +5618,146 @@ export type HoldingPnlResponseDto = {
4814
5618
  */
4815
5619
  export type method = 'average' | 'FIFO';
4816
5620
 
4817
- export type CreateBeanPriceDto = {
4818
- /**
4819
- * Currency being priced (e.g., USD, AAPL, BTC)
4820
- */
4821
- currency: string;
4822
- /**
4823
- * Quote currency (pricing currency, e.g., CNY, EUR)
4824
- */
4825
- quoteCurrency: string;
4826
- /**
4827
- * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
4828
- */
4829
- amount: number;
4830
- /**
4831
- * Price date (ISO 8601 format)
4832
- */
4833
- date: string;
4834
- /**
4835
- * Metadata (validated by Zod schema, max field lengths enforced)
4836
- */
4837
- metadata?: {
4838
- [key: string]: unknown;
4839
- };
4840
- };
4841
-
4842
- export type PriceResponseDto = {
4843
- /**
4844
- * Unique identifier
4845
- */
4846
- id: string;
4847
- /**
4848
- * User ID (owner of the price)
4849
- */
4850
- userId: string;
4851
- /**
4852
- * Currency being priced (e.g., USD, AAPL, BTC)
4853
- */
4854
- currency: string;
4855
- /**
4856
- * Quote currency (pricing currency, e.g., USD, CNY)
4857
- */
4858
- quoteCurrency: string;
4859
- /**
4860
- * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
4861
- */
4862
- amount: number;
4863
- /**
4864
- * Price date (ISO 8601 format). Represents the date this price was valid.
4865
- */
4866
- date: string;
4867
- /**
4868
- * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
4869
- */
4870
- meta: {
4871
- [key: string]: unknown;
4872
- };
4873
- /**
4874
- * Creation timestamp
4875
- */
4876
- createdAt: string;
5621
+ export type AnonymousLoginDto = {
4877
5622
  /**
4878
- * Last update timestamp
5623
+ * Access token for anonymous login
4879
5624
  */
4880
- updatedAt: string;
5625
+ accessToken: string;
4881
5626
  };
4882
5627
 
4883
- export type PriceListResponseDto = {
4884
- /**
4885
- * List of prices
4886
- */
4887
- items: Array<PriceResponseDto>;
5628
+ export type AnonymousLoginResponseDto = {
4888
5629
  /**
4889
- * Total number of prices
5630
+ * JWT auth token
4890
5631
  */
4891
- total: number;
5632
+ authToken: string;
4892
5633
  };
4893
5634
 
4894
- export type UpdateBeanPriceDto = {
4895
- /**
4896
- * Currency being priced
4897
- */
4898
- currency?: string;
4899
- /**
4900
- * Quote currency (pricing currency)
4901
- */
4902
- quoteCurrency?: string;
4903
- /**
4904
- * Price amount (MUST be >= 0 per Beancount spec)
4905
- */
4906
- amount?: number;
4907
- /**
4908
- * Price date (ISO 8601 format)
4909
- */
4910
- date?: string;
4911
- /**
4912
- * Metadata
4913
- */
4914
- metadata?: {
5635
+ export type SymbolSearchResultDto = {
5636
+ symbol: string;
5637
+ name?: {
4915
5638
  [key: string]: unknown;
4916
- };
4917
- };
4918
-
4919
- export type CurrencyBalanceDto = {
4920
- /**
4921
- * ISO 4217 currency code
4922
- */
4923
- currency: string;
4924
- /**
4925
- * Balance amount
4926
- */
4927
- balance: string;
4928
- };
4929
-
4930
- export type TimeSeriesPointDto = {
4931
- /**
4932
- * Date in YYYY-MM-DD format
4933
- */
4934
- date: string;
4935
- /**
4936
- * Value at this date (in base currency)
4937
- */
4938
- value: string;
4939
- /**
4940
- * Change from previous point
4941
- */
4942
- change?: {
5639
+ } | null;
5640
+ exchange?: {
4943
5641
  [key: string]: unknown;
4944
- };
4945
- /**
4946
- * Multi-currency breakdown for this point
4947
- */
4948
- byCurrency?: Array<CurrencyBalanceDto>;
4949
- };
4950
-
4951
- export type TrendSummaryDto = {
4952
- /**
4953
- * Value at start of period
4954
- */
4955
- startValue: string;
4956
- /**
4957
- * Value at end of period
4958
- */
4959
- endValue: string;
4960
- /**
4961
- * Total change over period
4962
- */
4963
- totalChange: string;
4964
- /**
4965
- * Total change percentage
4966
- */
4967
- totalChangePercentage: string;
4968
- };
4969
-
4970
- export type MultiCurrencyPointDto = {
4971
- /**
4972
- * Date in YYYY-MM-DD format
4973
- */
4974
- date: string;
4975
- /**
4976
- * Balances by currency
4977
- */
4978
- byCurrency: Array<CurrencyBalanceDto>;
4979
- };
4980
-
4981
- export type PortfolioTrendsResponseDto = {
4982
- /**
4983
- * Time series data points
4984
- */
4985
- series: Array<TimeSeriesPointDto>;
4986
- /**
4987
- * Period summary
4988
- */
4989
- summary: TrendSummaryDto;
4990
- /**
4991
- * Period requested
4992
- */
4993
- period: string;
5642
+ } | null;
4994
5643
  /**
4995
- * Data granularity
5644
+ * OpenBB asset_type (e.g. stock, etf)
4996
5645
  */
4997
- granularity: string;
5646
+ assetType?: {
5647
+ [key: string]: unknown;
5648
+ } | null;
4998
5649
  /**
4999
- * Base currency for converted values
5650
+ * IGN asset class (region.types.ts ASSET_CLASSES)
5000
5651
  */
5001
- currency: string;
5652
+ assetClass?: {
5653
+ [key: string]: unknown;
5654
+ } | null;
5002
5655
  /**
5003
- * Multi-currency time series (each point has currency breakdown)
5656
+ * IGN asset sub-class (region.types.ts ASSET_SUB_CLASSES)
5004
5657
  */
5005
- byCurrency?: Array<MultiCurrencyPointDto>;
5658
+ assetSubClass?: {
5659
+ [key: string]: unknown;
5660
+ } | null;
5006
5661
  /**
5007
- * Exchange rate warnings
5662
+ * Trading currency (extra_data or inferred from exchange)
5008
5663
  */
5009
- warnings?: Array<ExchangeRateWarningDto>;
5664
+ currency?: {
5665
+ [key: string]: unknown;
5666
+ } | null;
5010
5667
  };
5011
5668
 
5012
- export type CashFlowPointDto = {
5013
- /**
5014
- * Month key (YYYY-MM)
5015
- */
5016
- month: string;
5669
+ export type SymbolQuoteDto = {
5670
+ symbol?: string;
5671
+ name?: {
5672
+ [key: string]: unknown;
5673
+ } | null;
5674
+ exchange?: {
5675
+ [key: string]: unknown;
5676
+ } | null;
5017
5677
  /**
5018
- * Income in base currency (absolute, converted)
5678
+ * OpenBB asset_type
5019
5679
  */
5020
- income: string;
5680
+ assetType?: {
5681
+ [key: string]: unknown;
5682
+ } | null;
5021
5683
  /**
5022
- * Expense in base currency (absolute, converted)
5684
+ * IGN asset class
5023
5685
  */
5024
- expense: string;
5686
+ assetClass?: {
5687
+ [key: string]: unknown;
5688
+ } | null;
5025
5689
  /**
5026
- * netSavings = income − expense (savings positive)
5690
+ * IGN asset sub-class
5027
5691
  */
5028
- netSavings: string;
5029
- };
5030
-
5031
- export type CashFlowTrendSummaryDto = {
5692
+ assetSubClass?: {
5693
+ [key: string]: unknown;
5694
+ } | null;
5032
5695
  /**
5033
- * Total income across the period
5696
+ * Trading currency (extra_data or inferred from exchange)
5034
5697
  */
5035
- totalIncome: string;
5698
+ currency?: {
5699
+ [key: string]: unknown;
5700
+ } | null;
5036
5701
  /**
5037
- * Total expense across the period
5702
+ * Latest price (Decimal string)
5038
5703
  */
5039
- totalExpense: string;
5704
+ price?: {
5705
+ [key: string]: unknown;
5706
+ } | null;
5040
5707
  /**
5041
- * income − expense across the period
5708
+ * Date the price was observed (ISO yyyy-MM-dd)
5042
5709
  */
5043
- totalNetSavings: string;
5710
+ priceDate?: {
5711
+ [key: string]: unknown;
5712
+ } | null;
5044
5713
  /**
5045
- * totalNetSavings divided by the window length (N months, incl. zero-filled)
5714
+ * Change vs previous close, in percentage points (1.7 == 1.7%). openbb stores change_percent as a normalized decimal; this exposes percentage points for frontend convenience.
5046
5715
  */
5047
- averageMonthlyNetSavings: string;
5048
- };
5049
-
5050
- export type CashFlowTrendsResponseDto = {
5716
+ changePercent?: {
5717
+ [key: string]: unknown;
5718
+ } | null;
5051
5719
  /**
5052
- * Monthly cash-flow series (fixed N-month window, zero-filled)
5720
+ * Previous close (Decimal string)
5053
5721
  */
5054
- series: Array<CashFlowPointDto>;
5722
+ prevClose?: {
5723
+ [key: string]: unknown;
5724
+ } | null;
5055
5725
  /**
5056
- * Period totals
5726
+ * Day open (Decimal string)
5057
5727
  */
5058
- summary: CashFlowTrendSummaryDto;
5728
+ open?: {
5729
+ [key: string]: unknown;
5730
+ } | null;
5059
5731
  /**
5060
- * Period requested
5732
+ * Day high (Decimal string)
5061
5733
  */
5062
- period: string;
5734
+ high?: {
5735
+ [key: string]: unknown;
5736
+ } | null;
5063
5737
  /**
5064
- * Data granularity (v1 returns month buckets)
5738
+ * Day low (Decimal string)
5065
5739
  */
5066
- granularity: string;
5740
+ low?: {
5741
+ [key: string]: unknown;
5742
+ } | null;
5067
5743
  /**
5068
- * Base currency for converted values
5744
+ * Day volume (Decimal string)
5069
5745
  */
5070
- currency: string;
5746
+ volume?: {
5747
+ [key: string]: unknown;
5748
+ } | null;
5071
5749
  /**
5072
- * Exchange rate warnings (e.g. missing rate for a currency)
5750
+ * 52-week high (Decimal string)
5073
5751
  */
5074
- warnings?: Array<ExchangeRateWarningDto>;
5075
- };
5076
-
5077
- export type GenerateSnapshotBody = unknown;
5078
-
5079
- export type GenerateSnapshotResponse = unknown;
5080
-
5081
- export type BackfillSnapshotsBody = unknown;
5082
-
5083
- export type BackfillSnapshotsResponse = unknown;
5084
-
5085
- export type AnonymousLoginDto = {
5752
+ yearHigh?: {
5753
+ [key: string]: unknown;
5754
+ } | null;
5086
5755
  /**
5087
- * Access token for anonymous login
5756
+ * 52-week low (Decimal string)
5088
5757
  */
5089
- accessToken: string;
5758
+ yearLow?: {
5759
+ [key: string]: unknown;
5760
+ } | null;
5090
5761
  };
5091
5762
 
5092
5763
  export type AccountControllerCreateData = {
@@ -5117,7 +5788,7 @@ export type AccountControllerFindAllData = {
5117
5788
  */
5118
5789
  region: 'cn' | 'us' | 'de' | 'gb';
5119
5790
  /**
5120
- * Search term for path or i18nKey
5791
+ * Search term for account path
5121
5792
  */
5122
5793
  search?: string;
5123
5794
  /**
@@ -5200,6 +5871,21 @@ export type AccountControllerReopenData = {
5200
5871
 
5201
5872
  export type AccountControllerReopenResponse = AccountResponseDto;
5202
5873
 
5874
+ export type AccountControllerAddOpeningBalanceData = {
5875
+ /**
5876
+ * Account UUID
5877
+ */
5878
+ id: string;
5879
+ /**
5880
+ * Region code for tenant context
5881
+ */
5882
+ region: 'cn' | 'us' | 'de' | 'gb';
5883
+ requestBody: CreateOpeningBalanceDto;
5884
+ };
5885
+
5886
+ export type AccountControllerAddOpeningBalanceResponse =
5887
+ OpeningBalanceResultDto;
5888
+
5203
5889
  export type AccountStandardsControllerGetTemplatesData = {
5204
5890
  /**
5205
5891
  * Region code (cn, us, de)
@@ -5260,6 +5946,10 @@ export type TransactionControllerListData = {
5260
5946
  * Filter by account ID (transactions with postings to this account)
5261
5947
  */
5262
5948
  accountId?: string;
5949
+ /**
5950
+ * Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
5951
+ */
5952
+ category?: string;
5263
5953
  /**
5264
5954
  * Filter by start date (inclusive), format: YYYY-MM-DD
5265
5955
  */
@@ -5384,7 +6074,7 @@ export type TransactionControllerDeleteResponse = void;
5384
6074
 
5385
6075
  export type BalanceControllerGetBalanceData = {
5386
6076
  /**
5387
- * Account name (e.g., "Assets:Bank:Checking")
6077
+ * Account name (e.g., "Assets:Checking")
5388
6078
  */
5389
6079
  account: string;
5390
6080
  /**
@@ -5786,6 +6476,103 @@ export type CommodityControllerBulkCreateData = {
5786
6476
 
5787
6477
  export type CommodityControllerBulkCreateResponse = Array<CommodityResponseDto>;
5788
6478
 
6479
+ export type PriceControllerCreateData = {
6480
+ /**
6481
+ * Region code for tenant context
6482
+ */
6483
+ region: 'cn' | 'us' | 'de' | 'gb';
6484
+ requestBody: CreateBeanPriceDto;
6485
+ };
6486
+
6487
+ export type PriceControllerCreateResponse = PriceResponseDto;
6488
+
6489
+ export type PriceControllerFindAllData = {
6490
+ /**
6491
+ * Filter by currency (e.g., BTC, AAPL, USD)
6492
+ */
6493
+ currency?: string;
6494
+ /**
6495
+ * Filter prices from this date (ISO 8601 format)
6496
+ */
6497
+ dateFrom?: string;
6498
+ /**
6499
+ * Filter prices to this date (ISO 8601 format)
6500
+ */
6501
+ dateTo?: string;
6502
+ /**
6503
+ * Number of items per page (default: 20, max: 100)
6504
+ */
6505
+ limit?: number;
6506
+ /**
6507
+ * Page number for pagination (default: 1)
6508
+ */
6509
+ page?: number;
6510
+ /**
6511
+ * Filter by quote currency (pricing currency, e.g., USD, CNY)
6512
+ */
6513
+ quoteCurrency?: string;
6514
+ /**
6515
+ * Region code for tenant context
6516
+ */
6517
+ region: 'cn' | 'us' | 'de' | 'gb';
6518
+ /**
6519
+ * Search term for currency or quoteCurrency (case-insensitive partial match)
6520
+ */
6521
+ search?: string;
6522
+ };
6523
+
6524
+ export type PriceControllerFindAllResponse = PriceListResponseDto;
6525
+
6526
+ export type PriceControllerFindOneData = {
6527
+ /**
6528
+ * Price ID
6529
+ */
6530
+ id: string;
6531
+ /**
6532
+ * Region code for tenant context
6533
+ */
6534
+ region: 'cn' | 'us' | 'de' | 'gb';
6535
+ };
6536
+
6537
+ export type PriceControllerFindOneResponse = PriceResponseDto;
6538
+
6539
+ export type PriceControllerUpdateData = {
6540
+ /**
6541
+ * Price ID
6542
+ */
6543
+ id: string;
6544
+ /**
6545
+ * Region code for tenant context
6546
+ */
6547
+ region: 'cn' | 'us' | 'de' | 'gb';
6548
+ requestBody: UpdateBeanPriceDto;
6549
+ };
6550
+
6551
+ export type PriceControllerUpdateResponse = PriceResponseDto;
6552
+
6553
+ export type PriceControllerDeleteData = {
6554
+ /**
6555
+ * Price ID
6556
+ */
6557
+ id: string;
6558
+ /**
6559
+ * Region code for tenant context
6560
+ */
6561
+ region: 'cn' | 'us' | 'de' | 'gb';
6562
+ };
6563
+
6564
+ export type PriceControllerDeleteResponse = void;
6565
+
6566
+ export type PriceControllerBulkCreateData = {
6567
+ /**
6568
+ * Region code for tenant context
6569
+ */
6570
+ region: 'cn' | 'us' | 'de' | 'gb';
6571
+ requestBody: Array<string>;
6572
+ };
6573
+
6574
+ export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
6575
+
5789
6576
  export type RecurringRuleControllerCreateData = {
5790
6577
  /**
5791
6578
  * Region code for tenant context
@@ -5920,104 +6707,252 @@ export type ExpectedTransactionControllerFindOverdueData = {
5920
6707
  region: 'cn' | 'us' | 'de' | 'gb';
5921
6708
  };
5922
6709
 
5923
- export type ExpectedTransactionControllerFindOverdueResponse =
5924
- ExpectedTransactionListResponseDto;
6710
+ export type ExpectedTransactionControllerFindOverdueResponse =
6711
+ ExpectedTransactionListResponseDto;
6712
+
6713
+ export type ExpectedTransactionControllerFindOneData = {
6714
+ /**
6715
+ * Expected transaction ID
6716
+ */
6717
+ id: string;
6718
+ /**
6719
+ * Region code for tenant context
6720
+ */
6721
+ region: 'cn' | 'us' | 'de' | 'gb';
6722
+ };
6723
+
6724
+ export type ExpectedTransactionControllerFindOneResponse =
6725
+ ExpectedTransactionResponseDto;
6726
+
6727
+ export type ExpectedTransactionControllerSkipData = {
6728
+ /**
6729
+ * Expected transaction ID
6730
+ */
6731
+ id: string;
6732
+ /**
6733
+ * Region code for tenant context
6734
+ */
6735
+ region: 'cn' | 'us' | 'de' | 'gb';
6736
+ };
6737
+
6738
+ export type ExpectedTransactionControllerSkipResponse =
6739
+ ExpectedTransactionResponseDto;
6740
+
6741
+ export type ExpectedTransactionControllerUndoSkipData = {
6742
+ /**
6743
+ * Expected transaction ID
6744
+ */
6745
+ id: string;
6746
+ /**
6747
+ * Region code for tenant context
6748
+ */
6749
+ region: 'cn' | 'us' | 'de' | 'gb';
6750
+ };
6751
+
6752
+ export type ExpectedTransactionControllerUndoSkipResponse =
6753
+ ExpectedTransactionResponseDto;
6754
+
6755
+ export type ExpectedTransactionControllerConfirmMatchData = {
6756
+ /**
6757
+ * Expected transaction ID
6758
+ */
6759
+ id: string;
6760
+ /**
6761
+ * Region code for tenant context
6762
+ */
6763
+ region: 'cn' | 'us' | 'de' | 'gb';
6764
+ requestBody: ConfirmMatchDto;
6765
+ };
6766
+
6767
+ export type ExpectedTransactionControllerConfirmMatchResponse = unknown;
6768
+
6769
+ export type ExpectedTransactionControllerUnmatchData = {
6770
+ /**
6771
+ * Expected transaction ID
6772
+ */
6773
+ id: string;
6774
+ /**
6775
+ * Region code for tenant context
6776
+ */
6777
+ region: 'cn' | 'us' | 'de' | 'gb';
6778
+ };
6779
+
6780
+ export type ExpectedTransactionControllerUnmatchResponse = unknown;
6781
+
6782
+ export type ExpectedTransactionControllerEnterNowData = {
6783
+ /**
6784
+ * Expected transaction ID
6785
+ */
6786
+ id: string;
6787
+ /**
6788
+ * Region code for tenant context
6789
+ */
6790
+ region: 'cn' | 'us' | 'de' | 'gb';
6791
+ requestBody: EnterNowDto;
6792
+ };
6793
+
6794
+ export type ExpectedTransactionControllerEnterNowResponse = unknown;
6795
+
6796
+ export type ForecastControllerGetForecastData = {
6797
+ /**
6798
+ * Number of months to forecast (1-12, default 3)
6799
+ */
6800
+ months?: number;
6801
+ /**
6802
+ * Region code for tenant context
6803
+ */
6804
+ region: 'cn' | 'us' | 'de' | 'gb';
6805
+ };
6806
+
6807
+ export type ForecastControllerGetForecastResponse = ForecastResponseDto;
6808
+
6809
+ export type ReportingControllerGetPortfolioTrendsData = {
6810
+ /**
6811
+ * Data granularity
6812
+ */
6813
+ granularity?: 'day' | 'week' | 'month';
6814
+ /**
6815
+ * Time period
6816
+ */
6817
+ period?: '1m' | '3m' | '6m' | '1y';
6818
+ /**
6819
+ * Region code for tenant context
6820
+ */
6821
+ region: 'cn' | 'us' | 'de' | 'gb';
6822
+ };
6823
+
6824
+ export type ReportingControllerGetPortfolioTrendsResponse =
6825
+ PortfolioTrendsResponseDto;
5925
6826
 
5926
- export type ExpectedTransactionControllerFindOneData = {
6827
+ export type ReportingControllerGetCashFlowTrendsData = {
5927
6828
  /**
5928
- * Expected transaction ID
6829
+ * Data granularity (accepted for API symmetry; v1 returns month buckets)
5929
6830
  */
5930
- id: string;
6831
+ granularity?: 'day' | 'week' | 'month';
6832
+ /**
6833
+ * Time period
6834
+ */
6835
+ period?: '1m' | '3m' | '6m' | '1y';
5931
6836
  /**
5932
6837
  * Region code for tenant context
5933
6838
  */
5934
6839
  region: 'cn' | 'us' | 'de' | 'gb';
5935
6840
  };
5936
6841
 
5937
- export type ExpectedTransactionControllerFindOneResponse =
5938
- ExpectedTransactionResponseDto;
6842
+ export type ReportingControllerGetCashFlowTrendsResponse =
6843
+ CashFlowTrendsResponseDto;
5939
6844
 
5940
- export type ExpectedTransactionControllerSkipData = {
5941
- /**
5942
- * Expected transaction ID
5943
- */
5944
- id: string;
6845
+ export type ReportingControllerGenerateSnapshotData = {
5945
6846
  /**
5946
6847
  * Region code for tenant context
5947
6848
  */
5948
6849
  region: 'cn' | 'us' | 'de' | 'gb';
6850
+ /**
6851
+ * Optional date (defaults to today)
6852
+ */
6853
+ requestBody: GenerateSnapshotBody;
5949
6854
  };
5950
6855
 
5951
- export type ExpectedTransactionControllerSkipResponse =
5952
- ExpectedTransactionResponseDto;
6856
+ export type ReportingControllerGenerateSnapshotResponse =
6857
+ GenerateSnapshotResponse;
5953
6858
 
5954
- export type ExpectedTransactionControllerUndoSkipData = {
5955
- /**
5956
- * Expected transaction ID
5957
- */
5958
- id: string;
6859
+ export type ReportingControllerBackfillSnapshotsData = {
5959
6860
  /**
5960
6861
  * Region code for tenant context
5961
6862
  */
5962
6863
  region: 'cn' | 'us' | 'de' | 'gb';
6864
+ requestBody: BackfillSnapshotsBody;
5963
6865
  };
5964
6866
 
5965
- export type ExpectedTransactionControllerUndoSkipResponse =
5966
- ExpectedTransactionResponseDto;
6867
+ export type ReportingControllerBackfillSnapshotsResponse =
6868
+ BackfillSnapshotsResponse;
5967
6869
 
5968
- export type ExpectedTransactionControllerConfirmMatchData = {
6870
+ export type UserControllerDeleteOwnUserData = {
6871
+ requestBody: DeleteOwnUserDto;
6872
+ };
6873
+
6874
+ export type UserControllerDeleteOwnUserResponse = void;
6875
+
6876
+ export type UserControllerGetUserData = {
6877
+ acceptLanguage: string;
6878
+ };
6879
+
6880
+ export type UserControllerGetUserResponse = unknown;
6881
+
6882
+ export type UserControllerSignupUserData = {
6883
+ requestBody: SignupDto;
6884
+ };
6885
+
6886
+ export type UserControllerSignupUserResponse = SignupResponseDto;
6887
+
6888
+ export type UserControllerDeleteUserData = {
5969
6889
  /**
5970
- * Expected transaction ID
6890
+ * User ID to delete
5971
6891
  */
5972
6892
  id: string;
6893
+ };
6894
+
6895
+ export type UserControllerDeleteUserResponse = void;
6896
+
6897
+ export type UserControllerGetUserInfoData = {
5973
6898
  /**
5974
- * Region code for tenant context
6899
+ * User ID
5975
6900
  */
5976
- region: 'cn' | 'us' | 'de' | 'gb';
5977
- requestBody: ConfirmMatchDto;
6901
+ id: string;
5978
6902
  };
5979
6903
 
5980
- export type ExpectedTransactionControllerConfirmMatchResponse = unknown;
6904
+ export type UserControllerGetUserInfoResponse = unknown;
5981
6905
 
5982
- export type ExpectedTransactionControllerUnmatchData = {
6906
+ export type UserControllerUpdateUserSettingData = {
6907
+ requestBody: UpdateUserSettingDto;
6908
+ };
6909
+
6910
+ export type UserControllerUpdateUserSettingResponse = unknown;
6911
+
6912
+ export type UserControllerGetAllUserSettingsByPageData = {
5983
6913
  /**
5984
- * Expected transaction ID
6914
+ * Page number
5985
6915
  */
5986
- id: string;
6916
+ pageNo: number;
5987
6917
  /**
5988
- * Region code for tenant context
6918
+ * Page size
5989
6919
  */
5990
- region: 'cn' | 'us' | 'de' | 'gb';
6920
+ pageSize: number;
5991
6921
  };
5992
6922
 
5993
- export type ExpectedTransactionControllerUnmatchResponse = unknown;
6923
+ export type UserControllerGetAllUserSettingsByPageResponse = unknown;
5994
6924
 
5995
- export type ExpectedTransactionControllerEnterNowData = {
5996
- /**
5997
- * Expected transaction ID
5998
- */
5999
- id: string;
6925
+ export type UserControllerGetAssetLiabilitySummaryResponse = unknown;
6926
+
6927
+ export type PropertyControllerGetAllResponse = unknown;
6928
+
6929
+ export type PropertyControllerGetByKeyData = {
6000
6930
  /**
6001
- * Region code for tenant context
6931
+ * Property key
6002
6932
  */
6003
- region: 'cn' | 'us' | 'de' | 'gb';
6004
- requestBody: EnterNowDto;
6933
+ key: string;
6005
6934
  };
6006
6935
 
6007
- export type ExpectedTransactionControllerEnterNowResponse = unknown;
6936
+ export type PropertyControllerGetByKeyResponse = unknown;
6008
6937
 
6009
- export type ForecastControllerGetForecastData = {
6938
+ export type PropertyControllerUpdateData = {
6010
6939
  /**
6011
- * Number of months to forecast (1-12, default 3)
6940
+ * Property key
6012
6941
  */
6013
- months?: number;
6942
+ key: string;
6943
+ requestBody: UpdatePropertyDto;
6944
+ };
6945
+
6946
+ export type PropertyControllerUpdateResponse = unknown;
6947
+
6948
+ export type PropertyControllerDeleteData = {
6014
6949
  /**
6015
- * Region code for tenant context
6950
+ * Property key
6016
6951
  */
6017
- region: 'cn' | 'us' | 'de' | 'gb';
6952
+ key: string;
6018
6953
  };
6019
6954
 
6020
- export type ForecastControllerGetForecastResponse = ForecastResponseDto;
6955
+ export type PropertyControllerDeleteResponse = void;
6021
6956
 
6022
6957
  export type TransactionRuleControllerCreateData = {
6023
6958
  /**
@@ -6164,93 +7099,6 @@ export type TransactionRuleControllerTestData = {
6164
7099
 
6165
7100
  export type TransactionRuleControllerTestResponse = TestRuleResponseDto;
6166
7101
 
6167
- export type UserControllerDeleteOwnUserData = {
6168
- requestBody: DeleteOwnUserDto;
6169
- };
6170
-
6171
- export type UserControllerDeleteOwnUserResponse = void;
6172
-
6173
- export type UserControllerGetUserData = {
6174
- acceptLanguage: string;
6175
- };
6176
-
6177
- export type UserControllerGetUserResponse = unknown;
6178
-
6179
- export type UserControllerSignupUserData = {
6180
- requestBody: SignupDto;
6181
- };
6182
-
6183
- export type UserControllerSignupUserResponse = unknown;
6184
-
6185
- export type UserControllerDeleteUserData = {
6186
- /**
6187
- * User ID to delete
6188
- */
6189
- id: string;
6190
- };
6191
-
6192
- export type UserControllerDeleteUserResponse = void;
6193
-
6194
- export type UserControllerGetUserInfoData = {
6195
- /**
6196
- * User ID
6197
- */
6198
- id: string;
6199
- };
6200
-
6201
- export type UserControllerGetUserInfoResponse = unknown;
6202
-
6203
- export type UserControllerUpdateUserSettingData = {
6204
- requestBody: UpdateUserSettingDto;
6205
- };
6206
-
6207
- export type UserControllerUpdateUserSettingResponse = unknown;
6208
-
6209
- export type UserControllerGetAllUserSettingsByPageData = {
6210
- /**
6211
- * Page number
6212
- */
6213
- pageNo: number;
6214
- /**
6215
- * Page size
6216
- */
6217
- pageSize: number;
6218
- };
6219
-
6220
- export type UserControllerGetAllUserSettingsByPageResponse = unknown;
6221
-
6222
- export type UserControllerGetAssetLiabilitySummaryResponse = unknown;
6223
-
6224
- export type PropertyControllerGetAllResponse = unknown;
6225
-
6226
- export type PropertyControllerGetByKeyData = {
6227
- /**
6228
- * Property key
6229
- */
6230
- key: string;
6231
- };
6232
-
6233
- export type PropertyControllerGetByKeyResponse = unknown;
6234
-
6235
- export type PropertyControllerUpdateData = {
6236
- /**
6237
- * Property key
6238
- */
6239
- key: string;
6240
- requestBody: UpdatePropertyDto;
6241
- };
6242
-
6243
- export type PropertyControllerUpdateResponse = unknown;
6244
-
6245
- export type PropertyControllerDeleteData = {
6246
- /**
6247
- * Property key
6248
- */
6249
- key: string;
6250
- };
6251
-
6252
- export type PropertyControllerDeleteResponse = void;
6253
-
6254
7102
  export type EventControllerCreateData = {
6255
7103
  /**
6256
7104
  * Region code for tenant context (decorative for life events)
@@ -6305,49 +7153,104 @@ export type EventControllerFindOneData = {
6305
7153
  region: 'cn' | 'us' | 'de' | 'gb';
6306
7154
  };
6307
7155
 
6308
- export type EventControllerFindOneResponse = EventResponseDto;
7156
+ export type EventControllerFindOneResponse = EventResponseDto;
7157
+
7158
+ export type EventControllerUpdateData = {
7159
+ /**
7160
+ * Life event ID
7161
+ */
7162
+ id: string;
7163
+ /**
7164
+ * Region code for tenant context (decorative for life events)
7165
+ */
7166
+ region: 'cn' | 'us' | 'de' | 'gb';
7167
+ requestBody: UpdateBeanEventDto;
7168
+ };
7169
+
7170
+ export type EventControllerUpdateResponse = EventResponseDto;
7171
+
7172
+ export type EventControllerDeleteData = {
7173
+ /**
7174
+ * Life event ID
7175
+ */
7176
+ id: string;
7177
+ /**
7178
+ * Region code for tenant context (decorative for life events)
7179
+ */
7180
+ region: 'cn' | 'us' | 'de' | 'gb';
7181
+ };
7182
+
7183
+ export type EventControllerDeleteResponse = void;
7184
+
7185
+ export type EventControllerGetSliceData = {
7186
+ accountPattern: string;
7187
+ granularity: string;
7188
+ /**
7189
+ * Life event ID
7190
+ */
7191
+ id: string;
7192
+ /**
7193
+ * Region code for tenant context (decorative for life events)
7194
+ */
7195
+ region: 'cn' | 'us' | 'de' | 'gb';
7196
+ };
7197
+
7198
+ export type EventControllerGetSliceResponse = unknown;
6309
7199
 
6310
- export type EventControllerUpdateData = {
7200
+ export type OnboardingControllerBootstrapData = {
6311
7201
  /**
6312
- * Life event ID
7202
+ * Region code for tenant context
6313
7203
  */
6314
- id: string;
7204
+ region: 'cn' | 'us' | 'de' | 'gb';
7205
+ requestBody: OnboardingDto;
7206
+ };
7207
+
7208
+ export type OnboardingControllerBootstrapResponse = unknown;
7209
+
7210
+ export type ReconciliationControllerComputeData = {
6315
7211
  /**
6316
- * Region code for tenant context (decorative for life events)
7212
+ * Region code for tenant context (decorative for reconciliation)
6317
7213
  */
6318
7214
  region: 'cn' | 'us' | 'de' | 'gb';
6319
- requestBody: UpdateBeanEventDto;
7215
+ requestBody: ComputeReconciliationDto;
6320
7216
  };
6321
7217
 
6322
- export type EventControllerUpdateResponse = EventResponseDto;
7218
+ export type ReconciliationControllerComputeResponse =
7219
+ ReconciliationComputeResultDto;
6323
7220
 
6324
- export type EventControllerDeleteData = {
7221
+ export type ReconciliationControllerAssertData = {
6325
7222
  /**
6326
- * Life event ID
7223
+ * Region code for tenant context (decorative for reconciliation)
6327
7224
  */
6328
- id: string;
7225
+ region: 'cn' | 'us' | 'de' | 'gb';
7226
+ requestBody: AssertReconciliationDto;
7227
+ };
7228
+
7229
+ export type ReconciliationControllerAssertResponse = ReconciliationRecordDto;
7230
+
7231
+ export type ReconciliationControllerPadData = {
6329
7232
  /**
6330
- * Region code for tenant context (decorative for life events)
7233
+ * Region code for tenant context (decorative for reconciliation)
6331
7234
  */
6332
7235
  region: 'cn' | 'us' | 'de' | 'gb';
7236
+ requestBody: PadReconciliationDto;
6333
7237
  };
6334
7238
 
6335
- export type EventControllerDeleteResponse = void;
7239
+ export type ReconciliationControllerPadResponse = PadResultDto;
6336
7240
 
6337
- export type EventControllerGetSliceData = {
6338
- accountPattern: string;
6339
- granularity: string;
7241
+ export type ReconciliationControllerHistoryData = {
6340
7242
  /**
6341
- * Life event ID
7243
+ * BeanAccount id
6342
7244
  */
6343
- id: string;
7245
+ accountId: string;
6344
7246
  /**
6345
- * Region code for tenant context (decorative for life events)
7247
+ * Region code for tenant context (decorative for reconciliation)
6346
7248
  */
6347
7249
  region: 'cn' | 'us' | 'de' | 'gb';
6348
7250
  };
6349
7251
 
6350
- export type EventControllerGetSliceResponse = unknown;
7252
+ export type ReconciliationControllerHistoryResponse =
7253
+ Array<ReconciliationRecordDto>;
6351
7254
 
6352
7255
  export type ExportControllerExportBeancountResponse = unknown;
6353
7256
 
@@ -6441,48 +7344,6 @@ export type ImporterConfigControllerResetConfigData = {
6441
7344
 
6442
7345
  export type ImporterConfigControllerResetConfigResponse = ImporterConfigDto;
6443
7346
 
6444
- export type PlatformControllerFindAllResponse = unknown;
6445
-
6446
- export type PlatformControllerCreateData = {
6447
- requestBody: CreatePlatformDto;
6448
- };
6449
-
6450
- export type PlatformControllerCreateResponse = unknown;
6451
-
6452
- export type PlatformControllerGetPlatformListResponse = unknown;
6453
-
6454
- export type PlatformControllerMatchPlatformsData = {
6455
- /**
6456
- * Search query — Chinese name, English name, or abbreviation
6457
- */
6458
- q: string;
6459
- /**
6460
- * Region code for category override lookup
6461
- */
6462
- region?: string;
6463
- };
6464
-
6465
- export type PlatformControllerMatchPlatformsResponse = unknown;
6466
-
6467
- export type PlatformControllerUpdateData = {
6468
- /**
6469
- * Platform ID
6470
- */
6471
- id: string;
6472
- requestBody: UpdatePlatformDto;
6473
- };
6474
-
6475
- export type PlatformControllerUpdateResponse = unknown;
6476
-
6477
- export type PlatformControllerDeleteData = {
6478
- /**
6479
- * Platform ID
6480
- */
6481
- id: string;
6482
- };
6483
-
6484
- export type PlatformControllerDeleteResponse = void;
6485
-
6486
7347
  export type ProviderSyncControllerSyncData = {
6487
7348
  /**
6488
7349
  * Provider name
@@ -6528,6 +7389,49 @@ export type ProviderSyncControllerIsProviderSupportedData = {
6528
7389
 
6529
7390
  export type ProviderSyncControllerIsProviderSupportedResponse = unknown;
6530
7391
 
7392
+ export type ExternalAccountLinkControllerCreateData = {
7393
+ /**
7394
+ * Region code for tenant context
7395
+ */
7396
+ region: 'cn' | 'us' | 'de' | 'gb';
7397
+ requestBody: CreateExternalAccountLinkDto;
7398
+ };
7399
+
7400
+ export type ExternalAccountLinkControllerCreateResponse =
7401
+ ExternalAccountLinkResponseDto;
7402
+
7403
+ export type ExternalAccountLinkControllerFindAllData = {
7404
+ provider: string;
7405
+ /**
7406
+ * Region code for tenant context
7407
+ */
7408
+ region: 'cn' | 'us' | 'de' | 'gb';
7409
+ };
7410
+
7411
+ export type ExternalAccountLinkControllerFindAllResponse =
7412
+ ExternalAccountLinkListResponseDto;
7413
+
7414
+ export type ExternalAccountLinkControllerFindOneData = {
7415
+ id: string;
7416
+ /**
7417
+ * Region code for tenant context
7418
+ */
7419
+ region: 'cn' | 'us' | 'de' | 'gb';
7420
+ };
7421
+
7422
+ export type ExternalAccountLinkControllerFindOneResponse =
7423
+ ExternalAccountLinkResponseDto;
7424
+
7425
+ export type ExternalAccountLinkControllerRemoveData = {
7426
+ id: string;
7427
+ /**
7428
+ * Region code for tenant context
7429
+ */
7430
+ region: 'cn' | 'us' | 'de' | 'gb';
7431
+ };
7432
+
7433
+ export type ExternalAccountLinkControllerRemoveResponse = void;
7434
+
6531
7435
  export type TelemetryControllerReportTelemetryData = {
6532
7436
  /**
6533
7437
  * Region code for tenant context
@@ -6600,203 +7504,114 @@ export type NlpControllerGetSessionData = {
6600
7504
 
6601
7505
  export type NlpControllerGetSessionResponse = unknown;
6602
7506
 
6603
- export type DashboardControllerGetNetWorthData = {
6604
- /**
6605
- * Date for balance calculation (ISO 8601 format)
6606
- */
6607
- date?: string;
6608
- /**
6609
- * Region code for tenant context
6610
- */
6611
- region: 'cn' | 'us' | 'de' | 'gb';
6612
- };
6613
-
6614
- export type DashboardControllerGetNetWorthResponse = NetWorthResponseDto;
7507
+ export type PlatformControllerFindAllResponse = unknown;
6615
7508
 
6616
- export type DashboardControllerGetAccountsData = {
6617
- /**
6618
- * Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
6619
- */
6620
- accountId?: string;
6621
- /**
6622
- * Date for balance calculation (ISO 8601 format)
6623
- */
6624
- date?: string;
6625
- /**
6626
- * Grouping strategy
6627
- */
6628
- groupBy?:
6629
- | 'platform'
6630
- | 'assetClass'
6631
- | 'holdingAssetClass'
6632
- | 'holdingAssetClassByAccount';
6633
- /**
6634
- * Region code for tenant context
6635
- */
6636
- region: 'cn' | 'us' | 'de' | 'gb';
7509
+ export type PlatformControllerCreateData = {
7510
+ requestBody: CreatePlatformDto;
6637
7511
  };
6638
7512
 
6639
- export type DashboardControllerGetAccountsResponse =
6640
- | AccountsResponseDto
6641
- | AssetClassAccountsResponseDto
6642
- | HoldingAssetClassCrossAccountResponseDto;
6643
-
6644
- export type DashboardControllerGetCashFlowData = {
6645
- /**
6646
- * Period in YYYY-MM format
6647
- */
6648
- period: string;
6649
- /**
6650
- * Region code for tenant context
6651
- */
6652
- region: 'cn' | 'us' | 'de' | 'gb';
6653
- };
7513
+ export type PlatformControllerCreateResponse = unknown;
6654
7514
 
6655
- export type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
7515
+ export type PlatformControllerGetPlatformListResponse =
7516
+ Array<PlatformListItemDto>;
6656
7517
 
6657
- export type HoldingPnlControllerGetHoldingPnlData = {
6658
- /**
6659
- * Scope to a single account
6660
- */
6661
- accountId?: string;
6662
- /**
6663
- * As-of date (ISO 8601), defaults to today
6664
- */
6665
- asOf?: string;
6666
- /**
6667
- * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6668
- */
6669
- method?: 'FIFO' | 'average';
7518
+ export type PlatformControllerMatchPlatformsData = {
6670
7519
  /**
6671
- * Region code for tenant context
7520
+ * Search query — Chinese name, English name, or abbreviation
6672
7521
  */
6673
- region: 'cn' | 'us' | 'de' | 'gb';
6674
- };
6675
-
6676
- export type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6677
-
6678
- export type PriceControllerCreateData = {
7522
+ q: string;
6679
7523
  /**
6680
- * Region code for tenant context
7524
+ * Region code for category override lookup
6681
7525
  */
6682
- region: 'cn' | 'us' | 'de' | 'gb';
6683
- requestBody: CreateBeanPriceDto;
7526
+ region?: string;
6684
7527
  };
6685
7528
 
6686
- export type PriceControllerCreateResponse = PriceResponseDto;
7529
+ export type PlatformControllerMatchPlatformsResponse = PlatformMatchResponseDto;
6687
7530
 
6688
- export type PriceControllerFindAllData = {
6689
- /**
6690
- * Filter by currency (e.g., BTC, AAPL, USD)
6691
- */
6692
- currency?: string;
6693
- /**
6694
- * Filter prices from this date (ISO 8601 format)
6695
- */
6696
- dateFrom?: string;
6697
- /**
6698
- * Filter prices to this date (ISO 8601 format)
6699
- */
6700
- dateTo?: string;
6701
- /**
6702
- * Number of items per page (default: 20, max: 100)
6703
- */
6704
- limit?: number;
6705
- /**
6706
- * Page number for pagination (default: 1)
6707
- */
6708
- page?: number;
6709
- /**
6710
- * Filter by quote currency (pricing currency, e.g., USD, CNY)
6711
- */
6712
- quoteCurrency?: string;
6713
- /**
6714
- * Region code for tenant context
6715
- */
6716
- region: 'cn' | 'us' | 'de' | 'gb';
7531
+ export type PlatformControllerUpdateData = {
6717
7532
  /**
6718
- * Search term for currency or quoteCurrency (case-insensitive partial match)
7533
+ * Platform ID
6719
7534
  */
6720
- search?: string;
7535
+ id: string;
7536
+ requestBody: UpdatePlatformDto;
6721
7537
  };
6722
7538
 
6723
- export type PriceControllerFindAllResponse = PriceListResponseDto;
7539
+ export type PlatformControllerUpdateResponse = unknown;
6724
7540
 
6725
- export type PriceControllerFindOneData = {
7541
+ export type PlatformControllerDeleteData = {
6726
7542
  /**
6727
- * Price ID
7543
+ * Platform ID
6728
7544
  */
6729
7545
  id: string;
6730
- /**
6731
- * Region code for tenant context
6732
- */
6733
- region: 'cn' | 'us' | 'de' | 'gb';
6734
7546
  };
6735
7547
 
6736
- export type PriceControllerFindOneResponse = PriceResponseDto;
7548
+ export type PlatformControllerDeleteResponse = void;
6737
7549
 
6738
- export type PriceControllerUpdateData = {
7550
+ export type DashboardControllerGetNetWorthData = {
6739
7551
  /**
6740
- * Price ID
7552
+ * Date for balance calculation (ISO 8601 format)
6741
7553
  */
6742
- id: string;
7554
+ date?: string;
6743
7555
  /**
6744
7556
  * Region code for tenant context
6745
7557
  */
6746
7558
  region: 'cn' | 'us' | 'de' | 'gb';
6747
- requestBody: UpdateBeanPriceDto;
6748
7559
  };
6749
7560
 
6750
- export type PriceControllerUpdateResponse = PriceResponseDto;
7561
+ export type DashboardControllerGetNetWorthResponse = NetWorthResponseDto;
6751
7562
 
6752
- export type PriceControllerDeleteData = {
7563
+ export type DashboardControllerGetAccountsData = {
6753
7564
  /**
6754
- * Price ID
7565
+ * Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
6755
7566
  */
6756
- id: string;
7567
+ accountId?: string;
6757
7568
  /**
6758
- * Region code for tenant context
6759
- */
6760
- region: 'cn' | 'us' | 'de' | 'gb';
6761
- };
6762
-
6763
- export type PriceControllerDeleteResponse = void;
6764
-
6765
- export type PriceControllerBulkCreateData = {
7569
+ * Date for balance calculation (ISO 8601 format)
7570
+ */
7571
+ date?: string;
7572
+ /**
7573
+ * Grouping strategy
7574
+ */
7575
+ groupBy?:
7576
+ | 'platform'
7577
+ | 'assetClass'
7578
+ | 'holdingAssetClass'
7579
+ | 'holdingAssetClassByAccount';
6766
7580
  /**
6767
7581
  * Region code for tenant context
6768
7582
  */
6769
7583
  region: 'cn' | 'us' | 'de' | 'gb';
6770
- requestBody: Array<string>;
6771
7584
  };
6772
7585
 
6773
- export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
7586
+ export type DashboardControllerGetAccountsResponse =
7587
+ | AccountsResponseDto
7588
+ | AssetClassAccountsResponseDto
7589
+ | HoldingAssetClassCrossAccountResponseDto;
6774
7590
 
6775
- export type ReportingControllerGetPortfolioTrendsData = {
6776
- /**
6777
- * Data granularity
6778
- */
6779
- granularity?: 'day' | 'week' | 'month';
7591
+ export type DashboardControllerGetCashFlowData = {
6780
7592
  /**
6781
- * Time period
7593
+ * Period in YYYY-MM format
6782
7594
  */
6783
- period?: '1m' | '3m' | '6m' | '1y';
7595
+ period: string;
6784
7596
  /**
6785
7597
  * Region code for tenant context
6786
7598
  */
6787
7599
  region: 'cn' | 'us' | 'de' | 'gb';
6788
7600
  };
6789
7601
 
6790
- export type ReportingControllerGetPortfolioTrendsResponse =
6791
- PortfolioTrendsResponseDto;
7602
+ export type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
6792
7603
 
6793
- export type ReportingControllerGetCashFlowTrendsData = {
7604
+ export type DashboardControllerGetExpensesData = {
6794
7605
  /**
6795
- * Data granularity (accepted for API symmetry; v1 returns month buckets)
7606
+ * Account root to aggregate (expense → ^Expenses:, income → ^Income:)
6796
7607
  */
6797
- granularity?: 'day' | 'week' | 'month';
7608
+ flow?: 'expense' | 'income';
6798
7609
  /**
6799
- * Time period
7610
+ * Grouping strategy
7611
+ */
7612
+ groupBy?: 'category';
7613
+ /**
7614
+ * Time window (1m = current calendar month)
6800
7615
  */
6801
7616
  period?: '1m' | '3m' | '6m' | '1y';
6802
7617
  /**
@@ -6805,33 +7620,29 @@ export type ReportingControllerGetCashFlowTrendsData = {
6805
7620
  region: 'cn' | 'us' | 'de' | 'gb';
6806
7621
  };
6807
7622
 
6808
- export type ReportingControllerGetCashFlowTrendsResponse =
6809
- CashFlowTrendsResponseDto;
7623
+ export type DashboardControllerGetExpensesResponse =
7624
+ ExpensesByCategoryResponseDto;
6810
7625
 
6811
- export type ReportingControllerGenerateSnapshotData = {
7626
+ export type HoldingPnlControllerGetHoldingPnlData = {
6812
7627
  /**
6813
- * Region code for tenant context
7628
+ * Scope to a single account
6814
7629
  */
6815
- region: 'cn' | 'us' | 'de' | 'gb';
7630
+ accountId?: string;
6816
7631
  /**
6817
- * Optional date (defaults to today)
7632
+ * As-of date (ISO 8601), defaults to today
6818
7633
  */
6819
- requestBody: GenerateSnapshotBody;
6820
- };
6821
-
6822
- export type ReportingControllerGenerateSnapshotResponse =
6823
- GenerateSnapshotResponse;
6824
-
6825
- export type ReportingControllerBackfillSnapshotsData = {
7634
+ asOf?: string;
7635
+ /**
7636
+ * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
7637
+ */
7638
+ method?: 'FIFO' | 'average';
6826
7639
  /**
6827
7640
  * Region code for tenant context
6828
7641
  */
6829
7642
  region: 'cn' | 'us' | 'de' | 'gb';
6830
- requestBody: BackfillSnapshotsBody;
6831
7643
  };
6832
7644
 
6833
- export type ReportingControllerBackfillSnapshotsResponse =
6834
- BackfillSnapshotsResponse;
7645
+ export type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6835
7646
 
6836
7647
  export type ApiKeysControllerCreateApiKeyResponse = unknown;
6837
7648
 
@@ -6839,7 +7650,7 @@ export type AuthControllerAccessTokenLoginData = {
6839
7650
  requestBody: AnonymousLoginDto;
6840
7651
  };
6841
7652
 
6842
- export type AuthControllerAccessTokenLoginResponse = unknown;
7653
+ export type AuthControllerAccessTokenLoginResponse = AnonymousLoginResponseDto;
6843
7654
 
6844
7655
  export type CacheControllerFlushCacheResponse = unknown;
6845
7656
 
@@ -6879,6 +7690,33 @@ export type HealthControllerGetMetricsResponse = unknown;
6879
7690
 
6880
7691
  export type InfoControllerGetInfoResponse = unknown;
6881
7692
 
7693
+ export type SymbolControllerSearchData = {
7694
+ /**
7695
+ * Filter by OpenBB asset_type (e.g. stock, etf)
7696
+ */
7697
+ assetType?: string;
7698
+ /**
7699
+ * Filter by exchange code (e.g. US, HK, SS, SZ)
7700
+ */
7701
+ exchange?: string;
7702
+ /**
7703
+ * Maximum number of results (clamped 1..50)
7704
+ */
7705
+ limit?: number;
7706
+ /**
7707
+ * Search term — matched against symbol and instrument name. Empty string returns [].
7708
+ */
7709
+ q: string;
7710
+ };
7711
+
7712
+ export type SymbolControllerSearchResponse = Array<SymbolSearchResultDto>;
7713
+
7714
+ export type SymbolControllerGetQuoteData = {
7715
+ symbol: string;
7716
+ };
7717
+
7718
+ export type SymbolControllerGetQuoteResponse = SymbolQuoteDto;
7719
+
6882
7720
  export type $OpenApiTs = {
6883
7721
  '/api/v1/{region}/bean/accounts': {
6884
7722
  post: {
@@ -6987,6 +7825,25 @@ export type $OpenApiTs = {
6987
7825
  };
6988
7826
  };
6989
7827
  };
7828
+ '/api/v1/{region}/bean/accounts/{id}/opening-balance': {
7829
+ post: {
7830
+ req: AccountControllerAddOpeningBalanceData;
7831
+ res: {
7832
+ /**
7833
+ * Opening-balance transaction created
7834
+ */
7835
+ 201: OpeningBalanceResultDto;
7836
+ /**
7837
+ * Account not found
7838
+ */
7839
+ 404: unknown;
7840
+ /**
7841
+ * An opening balance already exists for this account
7842
+ */
7843
+ 409: unknown;
7844
+ };
7845
+ };
7846
+ };
6990
7847
  '/api/v1/{region}/bean/account-standards': {
6991
7848
  get: {
6992
7849
  req: AccountStandardsControllerGetTemplatesData;
@@ -7595,6 +8452,90 @@ export type $OpenApiTs = {
7595
8452
  };
7596
8453
  };
7597
8454
  };
8455
+ '/api/v1/{region}/bean/prices': {
8456
+ post: {
8457
+ req: PriceControllerCreateData;
8458
+ res: {
8459
+ /**
8460
+ * Price created successfully
8461
+ */
8462
+ 201: PriceResponseDto;
8463
+ /**
8464
+ * Currency or quoteCurrency commodity not found
8465
+ */
8466
+ 404: unknown;
8467
+ /**
8468
+ * Price already exists for this currency pair and date
8469
+ */
8470
+ 409: unknown;
8471
+ };
8472
+ };
8473
+ get: {
8474
+ req: PriceControllerFindAllData;
8475
+ res: {
8476
+ /**
8477
+ * Prices retrieved successfully
8478
+ */
8479
+ 200: PriceListResponseDto;
8480
+ };
8481
+ };
8482
+ };
8483
+ '/api/v1/{region}/bean/prices/{id}': {
8484
+ get: {
8485
+ req: PriceControllerFindOneData;
8486
+ res: {
8487
+ /**
8488
+ * Price retrieved successfully
8489
+ */
8490
+ 200: PriceResponseDto;
8491
+ /**
8492
+ * Price not found
8493
+ */
8494
+ 404: unknown;
8495
+ };
8496
+ };
8497
+ put: {
8498
+ req: PriceControllerUpdateData;
8499
+ res: {
8500
+ /**
8501
+ * Price updated successfully
8502
+ */
8503
+ 200: PriceResponseDto;
8504
+ /**
8505
+ * Price not found
8506
+ */
8507
+ 404: unknown;
8508
+ /**
8509
+ * Updated price conflicts with existing price
8510
+ */
8511
+ 409: unknown;
8512
+ };
8513
+ };
8514
+ delete: {
8515
+ req: PriceControllerDeleteData;
8516
+ res: {
8517
+ /**
8518
+ * Price deleted successfully
8519
+ */
8520
+ 204: void;
8521
+ /**
8522
+ * Price not found
8523
+ */
8524
+ 404: unknown;
8525
+ };
8526
+ };
8527
+ };
8528
+ '/api/v1/{region}/bean/prices/bulk': {
8529
+ post: {
8530
+ req: PriceControllerBulkCreateData;
8531
+ res: {
8532
+ /**
8533
+ * Prices created successfully
8534
+ */
8535
+ 201: Array<PriceResponseDto>;
8536
+ };
8537
+ };
8538
+ };
7598
8539
  '/api/v1/{region}/bean/recurring-rules': {
7599
8540
  post: {
7600
8541
  req: RecurringRuleControllerCreateData;
@@ -7845,397 +8786,469 @@ export type $OpenApiTs = {
7845
8786
  };
7846
8787
  };
7847
8788
  };
7848
- '/api/v1/{region}/bean/transaction-rules': {
8789
+ '/api/v1/{region}/reporting/portfolio/trends': {
8790
+ get: {
8791
+ req: ReportingControllerGetPortfolioTrendsData;
8792
+ res: {
8793
+ /**
8794
+ * Trends retrieved successfully
8795
+ */
8796
+ 200: PortfolioTrendsResponseDto;
8797
+ /**
8798
+ * User not authenticated
8799
+ */
8800
+ 401: unknown;
8801
+ };
8802
+ };
8803
+ };
8804
+ '/api/v1/{region}/reporting/cash-flow/trends': {
8805
+ get: {
8806
+ req: ReportingControllerGetCashFlowTrendsData;
8807
+ res: {
8808
+ /**
8809
+ * Cash-flow trends retrieved successfully
8810
+ */
8811
+ 200: CashFlowTrendsResponseDto;
8812
+ /**
8813
+ * User not authenticated
8814
+ */
8815
+ 401: unknown;
8816
+ };
8817
+ };
8818
+ };
8819
+ '/api/v1/{region}/reporting/snapshots/generate': {
7849
8820
  post: {
7850
- req: TransactionRuleControllerCreateData;
8821
+ req: ReportingControllerGenerateSnapshotData;
7851
8822
  res: {
7852
8823
  /**
7853
- * Rule updated successfully (upsert mode)
8824
+ * Snapshot generated successfully
7854
8825
  */
7855
- 200: TransactionRuleResponseDto;
8826
+ 200: GenerateSnapshotResponse;
7856
8827
  /**
7857
- * Validation failed
8828
+ * Invalid date format
7858
8829
  */
7859
- 400: ApiProblemResponseDto;
8830
+ 400: unknown;
7860
8831
  /**
7861
- * Unauthorized
8832
+ * User not authenticated
7862
8833
  */
7863
- 401: ApiProblemResponseDto;
8834
+ 401: unknown;
8835
+ };
8836
+ };
8837
+ };
8838
+ '/api/v1/{region}/reporting/snapshots/backfill': {
8839
+ post: {
8840
+ req: ReportingControllerBackfillSnapshotsData;
8841
+ res: {
8842
+ /**
8843
+ * Backfill completed successfully
8844
+ */
8845
+ 200: BackfillSnapshotsResponse;
8846
+ /**
8847
+ * Invalid date format or range
8848
+ */
8849
+ 400: unknown;
8850
+ /**
8851
+ * User not authenticated
8852
+ */
8853
+ 401: unknown;
8854
+ /**
8855
+ * Backfill already in progress for this user
8856
+ */
8857
+ 409: unknown;
8858
+ };
8859
+ };
8860
+ };
8861
+ '/api/v1/users': {
8862
+ delete: {
8863
+ req: UserControllerDeleteOwnUserData;
8864
+ res: {
8865
+ /**
8866
+ * User deleted successfully
8867
+ */
8868
+ 204: void;
7864
8869
  /**
7865
- * Resource conflict - another process is updating this rule
8870
+ * Invalid access token
7866
8871
  */
7867
- 409: ApiProblemResponseDto;
8872
+ 403: unknown;
7868
8873
  };
7869
8874
  };
7870
8875
  get: {
7871
- req: TransactionRuleControllerListData;
8876
+ req: UserControllerGetUserData;
7872
8877
  res: {
7873
8878
  /**
7874
- * List of rules
7875
- */
7876
- 200: TransactionRuleListResponseDto;
7877
- /**
7878
- * Unauthorized
8879
+ * User retrieved successfully
7879
8880
  */
7880
- 401: ApiProblemResponseDto;
8881
+ 200: unknown;
7881
8882
  };
7882
8883
  };
7883
- };
7884
- '/api/v1/{region}/bean/transaction-rules/validate': {
7885
8884
  post: {
7886
- req: TransactionRuleControllerValidateData;
8885
+ req: UserControllerSignupUserData;
7887
8886
  res: {
7888
8887
  /**
7889
- * Validation result
8888
+ * User created successfully
7890
8889
  */
7891
- 200: ValidateRuleResponseDto;
8890
+ 201: SignupResponseDto;
7892
8891
  /**
7893
- * Validation failed
8892
+ * Invalid Turnstile token (when Turnstile is enabled)
7894
8893
  */
7895
- 400: ApiProblemResponseDto;
8894
+ 400: unknown;
7896
8895
  /**
7897
- * Unauthorized
8896
+ * User signup is disabled
7898
8897
  */
7899
- 401: ApiProblemResponseDto;
8898
+ 403: unknown;
7900
8899
  };
7901
8900
  };
7902
8901
  };
7903
- '/api/v1/{region}/bean/transaction-rules/bulk': {
7904
- post: {
7905
- req: TransactionRuleControllerBulkCreateData;
8902
+ '/api/v1/users/{id}': {
8903
+ delete: {
8904
+ req: UserControllerDeleteUserData;
7906
8905
  res: {
7907
8906
  /**
7908
- * Bulk create completed
7909
- */
7910
- 201: BulkCreateRulesResponseDto;
7911
- /**
7912
- * Invalid bulk create data
8907
+ * User deleted successfully
7913
8908
  */
7914
- 400: ApiProblemResponseDto;
8909
+ 204: void;
7915
8910
  /**
7916
- * Unauthorized
8911
+ * Cannot delete own account or insufficient permissions
7917
8912
  */
7918
- 401: ApiProblemResponseDto;
8913
+ 403: unknown;
7919
8914
  };
7920
8915
  };
7921
8916
  };
7922
- '/api/v1/{region}/bean/transaction-rules/export/{format}': {
8917
+ '/api/v1/users/{id}/info': {
7923
8918
  get: {
7924
- req: TransactionRuleControllerExportData;
8919
+ req: UserControllerGetUserInfoData;
7925
8920
  res: {
7926
8921
  /**
7927
- * Exported rules
7928
- */
7929
- 200: ExportRulesResponseDto;
7930
- /**
7931
- * Unsupported format
8922
+ * User info retrieved successfully
7932
8923
  */
7933
- 400: ApiProblemResponseDto;
8924
+ 200: unknown;
7934
8925
  /**
7935
- * Unauthorized
8926
+ * Cannot access other user info without admin permission
7936
8927
  */
7937
- 401: ApiProblemResponseDto;
8928
+ 403: unknown;
7938
8929
  };
7939
8930
  };
7940
8931
  };
7941
- '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
7942
- get: {
7943
- req: TransactionRuleControllerGetStatisticsData;
8932
+ '/api/v1/users/setting': {
8933
+ put: {
8934
+ req: UserControllerUpdateUserSettingData;
7944
8935
  res: {
7945
8936
  /**
7946
- * Rule statistics
8937
+ * Settings updated successfully
7947
8938
  */
7948
- 200: RuleStatisticsResponseDto;
8939
+ 200: unknown;
7949
8940
  /**
7950
- * Unauthorized
8941
+ * Insufficient permissions
7951
8942
  */
7952
- 401: ApiProblemResponseDto;
8943
+ 403: unknown;
7953
8944
  };
7954
8945
  };
7955
8946
  };
7956
- '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
8947
+ '/api/v1/users/settings-by-page': {
7957
8948
  get: {
7958
- req: TransactionRuleControllerGetDetailData;
8949
+ req: UserControllerGetAllUserSettingsByPageData;
7959
8950
  res: {
7960
8951
  /**
7961
- * Rule details
7962
- */
7963
- 200: TransactionRuleResponseDto;
7964
- /**
7965
- * Unauthorized
7966
- */
7967
- 401: ApiProblemResponseDto;
7968
- /**
7969
- * Forbidden - not owner of rule
7970
- */
7971
- 403: ApiProblemResponseDto;
7972
- /**
7973
- * Rule not found
8952
+ * Settings list retrieved successfully
7974
8953
  */
7975
- 404: ApiProblemResponseDto;
8954
+ 200: unknown;
7976
8955
  };
7977
8956
  };
7978
- put: {
7979
- req: TransactionRuleControllerUpdateData;
8957
+ };
8958
+ '/api/v1/users/asset-liability-summary': {
8959
+ get: {
7980
8960
  res: {
7981
8961
  /**
7982
- * Rule updated successfully
8962
+ * Summary retrieved successfully
7983
8963
  */
7984
- 200: TransactionRuleResponseDto;
8964
+ 200: unknown;
8965
+ };
8966
+ };
8967
+ };
8968
+ '/api/v1/admin/properties': {
8969
+ get: {
8970
+ res: {
7985
8971
  /**
7986
- * Validation failed
8972
+ * Properties retrieved successfully
7987
8973
  */
7988
- 400: ApiProblemResponseDto;
8974
+ 200: unknown;
7989
8975
  /**
7990
8976
  * Unauthorized
7991
8977
  */
7992
- 401: ApiProblemResponseDto;
7993
- /**
7994
- * Forbidden - not owner of rule
7995
- */
7996
- 403: ApiProblemResponseDto;
7997
- /**
7998
- * Rule not found
7999
- */
8000
- 404: ApiProblemResponseDto;
8978
+ 401: unknown;
8001
8979
  /**
8002
- * Resource conflict - rule is being modified by another process
8980
+ * Forbidden - insufficient permissions
8003
8981
  */
8004
- 409: ApiProblemResponseDto;
8982
+ 403: unknown;
8005
8983
  };
8006
8984
  };
8007
- delete: {
8008
- req: TransactionRuleControllerDeleteData;
8985
+ };
8986
+ '/api/v1/admin/properties/{key}': {
8987
+ get: {
8988
+ req: PropertyControllerGetByKeyData;
8009
8989
  res: {
8010
8990
  /**
8011
- * Rule deleted successfully
8991
+ * Property retrieved successfully
8012
8992
  */
8013
- 204: void;
8993
+ 200: unknown;
8014
8994
  /**
8015
8995
  * Unauthorized
8016
8996
  */
8017
- 401: ApiProblemResponseDto;
8018
- /**
8019
- * Forbidden - not owner of rule
8020
- */
8021
- 403: ApiProblemResponseDto;
8997
+ 401: unknown;
8022
8998
  /**
8023
- * Rule not found
8999
+ * Forbidden - insufficient permissions
8024
9000
  */
8025
- 404: ApiProblemResponseDto;
9001
+ 403: unknown;
8026
9002
  /**
8027
- * Resource conflict - rule is being modified by another process
9003
+ * Property not found
8028
9004
  */
8029
- 409: ApiProblemResponseDto;
9005
+ 404: unknown;
8030
9006
  };
8031
9007
  };
8032
- };
8033
- '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
8034
- post: {
8035
- req: TransactionRuleControllerTestData;
9008
+ put: {
9009
+ req: PropertyControllerUpdateData;
8036
9010
  res: {
8037
9011
  /**
8038
- * Test result
9012
+ * Property updated successfully
8039
9013
  */
8040
- 200: TestRuleResponseDto;
9014
+ 200: unknown;
8041
9015
  /**
8042
9016
  * Unauthorized
8043
9017
  */
8044
- 401: ApiProblemResponseDto;
8045
- /**
8046
- * Forbidden - not owner of rule
8047
- */
8048
- 403: ApiProblemResponseDto;
9018
+ 401: unknown;
8049
9019
  /**
8050
- * Rule not found
9020
+ * Forbidden - insufficient permissions
8051
9021
  */
8052
- 404: ApiProblemResponseDto;
9022
+ 403: unknown;
8053
9023
  };
8054
9024
  };
8055
- };
8056
- '/api/v1/users': {
8057
9025
  delete: {
8058
- req: UserControllerDeleteOwnUserData;
9026
+ req: PropertyControllerDeleteData;
8059
9027
  res: {
8060
9028
  /**
8061
- * User deleted successfully
9029
+ * Property deleted successfully
8062
9030
  */
8063
9031
  204: void;
8064
9032
  /**
8065
- * Invalid access token
9033
+ * Unauthorized
9034
+ */
9035
+ 401: unknown;
9036
+ /**
9037
+ * Forbidden - insufficient permissions
8066
9038
  */
8067
9039
  403: unknown;
8068
- };
8069
- };
8070
- get: {
8071
- req: UserControllerGetUserData;
8072
- res: {
8073
9040
  /**
8074
- * User retrieved successfully
9041
+ * Property not found
8075
9042
  */
8076
- 200: unknown;
9043
+ 404: unknown;
8077
9044
  };
8078
9045
  };
9046
+ };
9047
+ '/api/v1/{region}/bean/transaction-rules': {
8079
9048
  post: {
8080
- req: UserControllerSignupUserData;
9049
+ req: TransactionRuleControllerCreateData;
8081
9050
  res: {
8082
9051
  /**
8083
- * User created successfully
9052
+ * Rule updated successfully (upsert mode)
8084
9053
  */
8085
- 201: unknown;
9054
+ 200: TransactionRuleResponseDto;
8086
9055
  /**
8087
- * Invalid Turnstile token (when Turnstile is enabled)
9056
+ * Validation failed
8088
9057
  */
8089
- 400: unknown;
9058
+ 400: ApiProblemResponseDto;
8090
9059
  /**
8091
- * User signup is disabled
9060
+ * Unauthorized
8092
9061
  */
8093
- 403: unknown;
9062
+ 401: ApiProblemResponseDto;
9063
+ /**
9064
+ * Resource conflict - another process is updating this rule
9065
+ */
9066
+ 409: ApiProblemResponseDto;
8094
9067
  };
8095
9068
  };
8096
- };
8097
- '/api/v1/users/{id}': {
8098
- delete: {
8099
- req: UserControllerDeleteUserData;
9069
+ get: {
9070
+ req: TransactionRuleControllerListData;
8100
9071
  res: {
8101
9072
  /**
8102
- * User deleted successfully
9073
+ * List of rules
8103
9074
  */
8104
- 204: void;
9075
+ 200: TransactionRuleListResponseDto;
8105
9076
  /**
8106
- * Cannot delete own account or insufficient permissions
9077
+ * Unauthorized
8107
9078
  */
8108
- 403: unknown;
9079
+ 401: ApiProblemResponseDto;
8109
9080
  };
8110
9081
  };
8111
9082
  };
8112
- '/api/v1/users/{id}/info': {
8113
- get: {
8114
- req: UserControllerGetUserInfoData;
9083
+ '/api/v1/{region}/bean/transaction-rules/validate': {
9084
+ post: {
9085
+ req: TransactionRuleControllerValidateData;
8115
9086
  res: {
8116
9087
  /**
8117
- * User info retrieved successfully
9088
+ * Validation result
8118
9089
  */
8119
- 200: unknown;
9090
+ 200: ValidateRuleResponseDto;
8120
9091
  /**
8121
- * Cannot access other user info without admin permission
9092
+ * Validation failed
8122
9093
  */
8123
- 403: unknown;
9094
+ 400: ApiProblemResponseDto;
9095
+ /**
9096
+ * Unauthorized
9097
+ */
9098
+ 401: ApiProblemResponseDto;
8124
9099
  };
8125
9100
  };
8126
9101
  };
8127
- '/api/v1/users/setting': {
8128
- put: {
8129
- req: UserControllerUpdateUserSettingData;
9102
+ '/api/v1/{region}/bean/transaction-rules/bulk': {
9103
+ post: {
9104
+ req: TransactionRuleControllerBulkCreateData;
8130
9105
  res: {
8131
9106
  /**
8132
- * Settings updated successfully
9107
+ * Bulk create completed
9108
+ */
9109
+ 201: BulkCreateRulesResponseDto;
9110
+ /**
9111
+ * Invalid bulk create data
8133
9112
  */
8134
- 200: unknown;
9113
+ 400: ApiProblemResponseDto;
8135
9114
  /**
8136
- * Insufficient permissions
9115
+ * Unauthorized
8137
9116
  */
8138
- 403: unknown;
9117
+ 401: ApiProblemResponseDto;
8139
9118
  };
8140
9119
  };
8141
9120
  };
8142
- '/api/v1/users/settings-by-page': {
9121
+ '/api/v1/{region}/bean/transaction-rules/export/{format}': {
8143
9122
  get: {
8144
- req: UserControllerGetAllUserSettingsByPageData;
9123
+ req: TransactionRuleControllerExportData;
8145
9124
  res: {
8146
9125
  /**
8147
- * Settings list retrieved successfully
9126
+ * Exported rules
8148
9127
  */
8149
- 200: unknown;
9128
+ 200: ExportRulesResponseDto;
9129
+ /**
9130
+ * Unsupported format
9131
+ */
9132
+ 400: ApiProblemResponseDto;
9133
+ /**
9134
+ * Unauthorized
9135
+ */
9136
+ 401: ApiProblemResponseDto;
8150
9137
  };
8151
9138
  };
8152
9139
  };
8153
- '/api/v1/users/asset-liability-summary': {
9140
+ '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
8154
9141
  get: {
9142
+ req: TransactionRuleControllerGetStatisticsData;
8155
9143
  res: {
8156
9144
  /**
8157
- * Summary retrieved successfully
9145
+ * Rule statistics
8158
9146
  */
8159
- 200: unknown;
9147
+ 200: RuleStatisticsResponseDto;
9148
+ /**
9149
+ * Unauthorized
9150
+ */
9151
+ 401: ApiProblemResponseDto;
8160
9152
  };
8161
9153
  };
8162
9154
  };
8163
- '/api/v1/admin/properties': {
9155
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
8164
9156
  get: {
9157
+ req: TransactionRuleControllerGetDetailData;
8165
9158
  res: {
8166
9159
  /**
8167
- * Properties retrieved successfully
9160
+ * Rule details
8168
9161
  */
8169
- 200: unknown;
9162
+ 200: TransactionRuleResponseDto;
8170
9163
  /**
8171
9164
  * Unauthorized
8172
9165
  */
8173
- 401: unknown;
9166
+ 401: ApiProblemResponseDto;
8174
9167
  /**
8175
- * Forbidden - insufficient permissions
9168
+ * Forbidden - not owner of rule
8176
9169
  */
8177
- 403: unknown;
9170
+ 403: ApiProblemResponseDto;
9171
+ /**
9172
+ * Rule not found
9173
+ */
9174
+ 404: ApiProblemResponseDto;
8178
9175
  };
8179
9176
  };
8180
- };
8181
- '/api/v1/admin/properties/{key}': {
8182
- get: {
8183
- req: PropertyControllerGetByKeyData;
9177
+ put: {
9178
+ req: TransactionRuleControllerUpdateData;
8184
9179
  res: {
8185
9180
  /**
8186
- * Property retrieved successfully
9181
+ * Rule updated successfully
8187
9182
  */
8188
- 200: unknown;
9183
+ 200: TransactionRuleResponseDto;
9184
+ /**
9185
+ * Validation failed
9186
+ */
9187
+ 400: ApiProblemResponseDto;
8189
9188
  /**
8190
9189
  * Unauthorized
8191
9190
  */
8192
- 401: unknown;
9191
+ 401: ApiProblemResponseDto;
8193
9192
  /**
8194
- * Forbidden - insufficient permissions
9193
+ * Forbidden - not owner of rule
8195
9194
  */
8196
- 403: unknown;
9195
+ 403: ApiProblemResponseDto;
8197
9196
  /**
8198
- * Property not found
9197
+ * Rule not found
8199
9198
  */
8200
- 404: unknown;
9199
+ 404: ApiProblemResponseDto;
9200
+ /**
9201
+ * Resource conflict - rule is being modified by another process
9202
+ */
9203
+ 409: ApiProblemResponseDto;
8201
9204
  };
8202
9205
  };
8203
- put: {
8204
- req: PropertyControllerUpdateData;
9206
+ delete: {
9207
+ req: TransactionRuleControllerDeleteData;
8205
9208
  res: {
8206
9209
  /**
8207
- * Property updated successfully
9210
+ * Rule deleted successfully
8208
9211
  */
8209
- 200: unknown;
9212
+ 204: void;
8210
9213
  /**
8211
9214
  * Unauthorized
8212
9215
  */
8213
- 401: unknown;
9216
+ 401: ApiProblemResponseDto;
8214
9217
  /**
8215
- * Forbidden - insufficient permissions
9218
+ * Forbidden - not owner of rule
8216
9219
  */
8217
- 403: unknown;
9220
+ 403: ApiProblemResponseDto;
9221
+ /**
9222
+ * Rule not found
9223
+ */
9224
+ 404: ApiProblemResponseDto;
9225
+ /**
9226
+ * Resource conflict - rule is being modified by another process
9227
+ */
9228
+ 409: ApiProblemResponseDto;
8218
9229
  };
8219
9230
  };
8220
- delete: {
8221
- req: PropertyControllerDeleteData;
9231
+ };
9232
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
9233
+ post: {
9234
+ req: TransactionRuleControllerTestData;
8222
9235
  res: {
8223
9236
  /**
8224
- * Property deleted successfully
9237
+ * Test result
8225
9238
  */
8226
- 204: void;
9239
+ 200: TestRuleResponseDto;
8227
9240
  /**
8228
9241
  * Unauthorized
8229
9242
  */
8230
- 401: unknown;
9243
+ 401: ApiProblemResponseDto;
8231
9244
  /**
8232
- * Forbidden - insufficient permissions
9245
+ * Forbidden - not owner of rule
8233
9246
  */
8234
- 403: unknown;
9247
+ 403: ApiProblemResponseDto;
8235
9248
  /**
8236
- * Property not found
9249
+ * Rule not found
8237
9250
  */
8238
- 404: unknown;
9251
+ 404: ApiProblemResponseDto;
8239
9252
  };
8240
9253
  };
8241
9254
  };
@@ -8335,6 +9348,85 @@ export type $OpenApiTs = {
8335
9348
  };
8336
9349
  };
8337
9350
  };
9351
+ '/api/v1/{region}/bean/onboarding': {
9352
+ post: {
9353
+ req: OnboardingControllerBootstrapData;
9354
+ res: {
9355
+ /**
9356
+ * Onboarding bootstrap result.
9357
+ */
9358
+ 201: unknown;
9359
+ /**
9360
+ * Invalid region/account path/duplicate paths.
9361
+ */
9362
+ 422: unknown;
9363
+ };
9364
+ };
9365
+ };
9366
+ '/api/v1/{region}/bean/reconciliations': {
9367
+ post: {
9368
+ req: ReconciliationControllerComputeData;
9369
+ res: {
9370
+ /**
9371
+ * Reconciliation preview
9372
+ */
9373
+ 200: ReconciliationComputeResultDto;
9374
+ /**
9375
+ * Account not found
9376
+ */
9377
+ 404: unknown;
9378
+ };
9379
+ };
9380
+ };
9381
+ '/api/v1/{region}/bean/reconciliations/assert': {
9382
+ post: {
9383
+ req: ReconciliationControllerAssertData;
9384
+ res: {
9385
+ /**
9386
+ * Balance assertion recorded
9387
+ */
9388
+ 201: ReconciliationRecordDto;
9389
+ /**
9390
+ * Account not found
9391
+ */
9392
+ 404: unknown;
9393
+ };
9394
+ };
9395
+ };
9396
+ '/api/v1/{region}/bean/reconciliations/pad': {
9397
+ post: {
9398
+ req: ReconciliationControllerPadData;
9399
+ res: {
9400
+ /**
9401
+ * Pad adjusting entry generated
9402
+ */
9403
+ 201: PadResultDto;
9404
+ /**
9405
+ * Book already within tolerance — no pad needed
9406
+ */
9407
+ 400: unknown;
9408
+ /**
9409
+ * Account not found
9410
+ */
9411
+ 404: unknown;
9412
+ };
9413
+ };
9414
+ };
9415
+ '/api/v1/{region}/bean/accounts/{accountId}/reconciliations': {
9416
+ get: {
9417
+ req: ReconciliationControllerHistoryData;
9418
+ res: {
9419
+ /**
9420
+ * Reconciliation history
9421
+ */
9422
+ 200: Array<ReconciliationRecordDto>;
9423
+ /**
9424
+ * Account not found
9425
+ */
9426
+ 404: unknown;
9427
+ };
9428
+ };
9429
+ };
8338
9430
  '/api/v1/{region}/bean/export/beancount': {
8339
9431
  get: {
8340
9432
  res: {
@@ -8453,107 +9545,35 @@ export type $OpenApiTs = {
8453
9545
  };
8454
9546
  };
8455
9547
  put: {
8456
- req: ImporterConfigControllerUpdateConfigData;
8457
- res: {
8458
- /**
8459
- * Configuration updated successfully
8460
- */
8461
- 200: ImporterConfigDto;
8462
- /**
8463
- * Invalid input - Validation failed
8464
- */
8465
- 400: ApiProblemResponseDto;
8466
- /**
8467
- * Configuration not found
8468
- */
8469
- 404: ApiProblemResponseDto;
8470
- };
8471
- };
8472
- };
8473
- '/api/v1/{region}/bean/import/config/{importerId}/reset': {
8474
- post: {
8475
- req: ImporterConfigControllerResetConfigData;
8476
- res: {
8477
- /**
8478
- * Configuration reset successfully
8479
- */
8480
- 200: ImporterConfigDto;
8481
- /**
8482
- * Invalid input - Unsupported importer
8483
- */
8484
- 400: ApiProblemResponseDto;
8485
- };
8486
- };
8487
- };
8488
- '/api/v1/bean/platforms': {
8489
- get: {
8490
- res: {
8491
- /**
8492
- * List of platforms with binding and account counts
8493
- */
8494
- 200: unknown;
8495
- };
8496
- };
8497
- post: {
8498
- req: PlatformControllerCreateData;
8499
- res: {
8500
- /**
8501
- * Platform created successfully
8502
- */
8503
- 201: unknown;
8504
- /**
8505
- * Platform already exists
8506
- */
8507
- 409: unknown;
8508
- };
8509
- };
8510
- };
8511
- '/api/v1/bean/platforms/list': {
8512
- get: {
8513
- res: {
8514
- /**
8515
- * List of platforms with user binding status
8516
- */
8517
- 200: unknown;
8518
- };
8519
- };
8520
- };
8521
- '/api/v1/bean/platforms/match': {
8522
- get: {
8523
- req: PlatformControllerMatchPlatformsData;
8524
- res: {
8525
- /**
8526
- * List of matching platforms with suggested segment names
8527
- */
8528
- 200: unknown;
8529
- };
8530
- };
8531
- };
8532
- '/api/v1/bean/platforms/{id}': {
8533
- put: {
8534
- req: PlatformControllerUpdateData;
9548
+ req: ImporterConfigControllerUpdateConfigData;
8535
9549
  res: {
8536
9550
  /**
8537
- * Platform updated successfully
9551
+ * Configuration updated successfully
8538
9552
  */
8539
- 200: unknown;
9553
+ 200: ImporterConfigDto;
8540
9554
  /**
8541
- * Platform not found
9555
+ * Invalid input - Validation failed
8542
9556
  */
8543
- 404: unknown;
9557
+ 400: ApiProblemResponseDto;
9558
+ /**
9559
+ * Configuration not found
9560
+ */
9561
+ 404: ApiProblemResponseDto;
8544
9562
  };
8545
9563
  };
8546
- delete: {
8547
- req: PlatformControllerDeleteData;
9564
+ };
9565
+ '/api/v1/{region}/bean/import/config/{importerId}/reset': {
9566
+ post: {
9567
+ req: ImporterConfigControllerResetConfigData;
8548
9568
  res: {
8549
9569
  /**
8550
- * Platform deleted successfully
9570
+ * Configuration reset successfully
8551
9571
  */
8552
- 204: void;
9572
+ 200: ImporterConfigDto;
8553
9573
  /**
8554
- * Platform not found
9574
+ * Invalid input - Unsupported importer
8555
9575
  */
8556
- 404: unknown;
9576
+ 400: ApiProblemResponseDto;
8557
9577
  };
8558
9578
  };
8559
9579
  };
@@ -8610,6 +9630,54 @@ export type $OpenApiTs = {
8610
9630
  };
8611
9631
  };
8612
9632
  };
9633
+ '/api/v1/{region}/bean/external-account-links': {
9634
+ post: {
9635
+ req: ExternalAccountLinkControllerCreateData;
9636
+ res: {
9637
+ /**
9638
+ * Link created.
9639
+ */
9640
+ 201: ExternalAccountLinkResponseDto;
9641
+ /**
9642
+ * beanAccountId not owned, or an active link already exists.
9643
+ */
9644
+ 422: unknown;
9645
+ };
9646
+ };
9647
+ get: {
9648
+ req: ExternalAccountLinkControllerFindAllData;
9649
+ res: {
9650
+ /**
9651
+ * Links retrieved.
9652
+ */
9653
+ 200: ExternalAccountLinkListResponseDto;
9654
+ };
9655
+ };
9656
+ };
9657
+ '/api/v1/{region}/bean/external-account-links/{id}': {
9658
+ get: {
9659
+ req: ExternalAccountLinkControllerFindOneData;
9660
+ res: {
9661
+ /**
9662
+ * Link retrieved.
9663
+ */
9664
+ 200: ExternalAccountLinkResponseDto;
9665
+ /**
9666
+ * Link not found or not owned by the user.
9667
+ */
9668
+ 422: unknown;
9669
+ };
9670
+ };
9671
+ delete: {
9672
+ req: ExternalAccountLinkControllerRemoveData;
9673
+ res: {
9674
+ /**
9675
+ * Link soft-deleted; historical transactions are unaffected.
9676
+ */
9677
+ 204: void;
9678
+ };
9679
+ };
9680
+ };
8613
9681
  '/api/v1/{region}/bean/import/parser-telemetry': {
8614
9682
  post: {
8615
9683
  req: TelemetryControllerReportTelemetryData;
@@ -8698,169 +9766,104 @@ export type $OpenApiTs = {
8698
9766
  };
8699
9767
  };
8700
9768
  };
8701
- '/api/v1/{region}/dashboard/net-worth': {
8702
- get: {
8703
- req: DashboardControllerGetNetWorthData;
8704
- res: {
8705
- /**
8706
- * Net worth retrieved successfully
8707
- */
8708
- 200: NetWorthResponseDto;
8709
- /**
8710
- * User not authenticated
8711
- */
8712
- 401: unknown;
8713
- };
8714
- };
8715
- };
8716
- '/api/v1/{region}/dashboard/accounts': {
8717
- get: {
8718
- req: DashboardControllerGetAccountsData;
8719
- res: {
8720
- /**
8721
- * Accounts retrieved successfully. Response type depends on groupBy parameter.
8722
- */
8723
- 200:
8724
- | AccountsResponseDto
8725
- | AssetClassAccountsResponseDto
8726
- | HoldingAssetClassCrossAccountResponseDto;
8727
- /**
8728
- * User not authenticated
8729
- */
8730
- 401: unknown;
8731
- };
8732
- };
8733
- };
8734
- '/api/v1/{region}/dashboard/cash-flow': {
8735
- get: {
8736
- req: DashboardControllerGetCashFlowData;
8737
- res: {
8738
- /**
8739
- * Cash flow retrieved successfully
8740
- */
8741
- 200: CashFlowResponseDto;
8742
- /**
8743
- * Invalid period format
8744
- */
8745
- 400: unknown;
8746
- /**
8747
- * User not authenticated
8748
- */
8749
- 401: unknown;
8750
- };
8751
- };
8752
- };
8753
- '/api/v1/{region}/investment/holdings/pnl': {
9769
+ '/api/v1/bean/platforms': {
8754
9770
  get: {
8755
- req: HoldingPnlControllerGetHoldingPnlData;
8756
9771
  res: {
8757
9772
  /**
8758
- * Holding P&L retrieved successfully
8759
- */
8760
- 200: HoldingPnlResponseDto;
8761
- /**
8762
- * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
8763
- */
8764
- 400: unknown;
8765
- /**
8766
- * User not authenticated
9773
+ * List of platforms with binding and account counts
8767
9774
  */
8768
- 401: unknown;
9775
+ 200: unknown;
8769
9776
  };
8770
9777
  };
8771
- };
8772
- '/api/v1/{region}/bean/prices': {
8773
9778
  post: {
8774
- req: PriceControllerCreateData;
9779
+ req: PlatformControllerCreateData;
8775
9780
  res: {
8776
9781
  /**
8777
- * Price created successfully
8778
- */
8779
- 201: PriceResponseDto;
8780
- /**
8781
- * Currency or quoteCurrency commodity not found
9782
+ * Platform created successfully
8782
9783
  */
8783
- 404: unknown;
9784
+ 201: unknown;
8784
9785
  /**
8785
- * Price already exists for this currency pair and date
9786
+ * Platform already exists
8786
9787
  */
8787
9788
  409: unknown;
8788
9789
  };
8789
9790
  };
9791
+ };
9792
+ '/api/v1/bean/platforms/list': {
8790
9793
  get: {
8791
- req: PriceControllerFindAllData;
8792
9794
  res: {
8793
9795
  /**
8794
- * Prices retrieved successfully
9796
+ * List of platforms with user binding status
8795
9797
  */
8796
- 200: PriceListResponseDto;
9798
+ 200: Array<PlatformListItemDto>;
8797
9799
  };
8798
9800
  };
8799
9801
  };
8800
- '/api/v1/{region}/bean/prices/{id}': {
9802
+ '/api/v1/bean/platforms/match': {
8801
9803
  get: {
8802
- req: PriceControllerFindOneData;
9804
+ req: PlatformControllerMatchPlatformsData;
8803
9805
  res: {
8804
9806
  /**
8805
- * Price retrieved successfully
8806
- */
8807
- 200: PriceResponseDto;
8808
- /**
8809
- * Price not found
9807
+ * Matching platforms with overall match type and truncation flag
8810
9808
  */
8811
- 404: unknown;
9809
+ 200: PlatformMatchResponseDto;
8812
9810
  };
8813
9811
  };
9812
+ };
9813
+ '/api/v1/bean/platforms/{id}': {
8814
9814
  put: {
8815
- req: PriceControllerUpdateData;
9815
+ req: PlatformControllerUpdateData;
8816
9816
  res: {
8817
9817
  /**
8818
- * Price updated successfully
9818
+ * Platform updated successfully
8819
9819
  */
8820
- 200: PriceResponseDto;
9820
+ 200: unknown;
8821
9821
  /**
8822
- * Price not found
9822
+ * Platform not found
8823
9823
  */
8824
9824
  404: unknown;
8825
- /**
8826
- * Updated price conflicts with existing price
8827
- */
8828
- 409: unknown;
8829
9825
  };
8830
9826
  };
8831
9827
  delete: {
8832
- req: PriceControllerDeleteData;
9828
+ req: PlatformControllerDeleteData;
8833
9829
  res: {
8834
9830
  /**
8835
- * Price deleted successfully
9831
+ * Platform deleted successfully
8836
9832
  */
8837
9833
  204: void;
8838
9834
  /**
8839
- * Price not found
9835
+ * Platform not found
8840
9836
  */
8841
9837
  404: unknown;
8842
9838
  };
8843
9839
  };
8844
9840
  };
8845
- '/api/v1/{region}/bean/prices/bulk': {
8846
- post: {
8847
- req: PriceControllerBulkCreateData;
9841
+ '/api/v1/{region}/dashboard/net-worth': {
9842
+ get: {
9843
+ req: DashboardControllerGetNetWorthData;
8848
9844
  res: {
8849
9845
  /**
8850
- * Prices created successfully
9846
+ * Net worth retrieved successfully
8851
9847
  */
8852
- 201: Array<PriceResponseDto>;
9848
+ 200: NetWorthResponseDto;
9849
+ /**
9850
+ * User not authenticated
9851
+ */
9852
+ 401: unknown;
8853
9853
  };
8854
9854
  };
8855
9855
  };
8856
- '/api/v1/{region}/reporting/portfolio/trends': {
9856
+ '/api/v1/{region}/dashboard/accounts': {
8857
9857
  get: {
8858
- req: ReportingControllerGetPortfolioTrendsData;
9858
+ req: DashboardControllerGetAccountsData;
8859
9859
  res: {
8860
9860
  /**
8861
- * Trends retrieved successfully
9861
+ * Accounts retrieved successfully. Response type depends on groupBy parameter.
8862
9862
  */
8863
- 200: PortfolioTrendsResponseDto;
9863
+ 200:
9864
+ | AccountsResponseDto
9865
+ | AssetClassAccountsResponseDto
9866
+ | HoldingAssetClassCrossAccountResponseDto;
8864
9867
  /**
8865
9868
  * User not authenticated
8866
9869
  */
@@ -8868,14 +9871,18 @@ export type $OpenApiTs = {
8868
9871
  };
8869
9872
  };
8870
9873
  };
8871
- '/api/v1/{region}/reporting/cash-flow/trends': {
9874
+ '/api/v1/{region}/dashboard/cash-flow': {
8872
9875
  get: {
8873
- req: ReportingControllerGetCashFlowTrendsData;
9876
+ req: DashboardControllerGetCashFlowData;
8874
9877
  res: {
8875
9878
  /**
8876
- * Cash-flow trends retrieved successfully
9879
+ * Cash flow retrieved successfully
8877
9880
  */
8878
- 200: CashFlowTrendsResponseDto;
9881
+ 200: CashFlowResponseDto;
9882
+ /**
9883
+ * Invalid period format
9884
+ */
9885
+ 400: unknown;
8879
9886
  /**
8880
9887
  * User not authenticated
8881
9888
  */
@@ -8883,16 +9890,16 @@ export type $OpenApiTs = {
8883
9890
  };
8884
9891
  };
8885
9892
  };
8886
- '/api/v1/{region}/reporting/snapshots/generate': {
8887
- post: {
8888
- req: ReportingControllerGenerateSnapshotData;
9893
+ '/api/v1/{region}/dashboard/expenses': {
9894
+ get: {
9895
+ req: DashboardControllerGetExpensesData;
8889
9896
  res: {
8890
9897
  /**
8891
- * Snapshot generated successfully
9898
+ * Expenses retrieved successfully
8892
9899
  */
8893
- 200: GenerateSnapshotResponse;
9900
+ 200: ExpensesByCategoryResponseDto;
8894
9901
  /**
8895
- * Invalid date format
9902
+ * Invalid groupBy or period
8896
9903
  */
8897
9904
  400: unknown;
8898
9905
  /**
@@ -8902,26 +9909,22 @@ export type $OpenApiTs = {
8902
9909
  };
8903
9910
  };
8904
9911
  };
8905
- '/api/v1/{region}/reporting/snapshots/backfill': {
8906
- post: {
8907
- req: ReportingControllerBackfillSnapshotsData;
9912
+ '/api/v1/{region}/investment/holdings/pnl': {
9913
+ get: {
9914
+ req: HoldingPnlControllerGetHoldingPnlData;
8908
9915
  res: {
8909
9916
  /**
8910
- * Backfill completed successfully
9917
+ * Holding P&L retrieved successfully
8911
9918
  */
8912
- 200: BackfillSnapshotsResponse;
9919
+ 200: HoldingPnlResponseDto;
8913
9920
  /**
8914
- * Invalid date format or range
9921
+ * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
8915
9922
  */
8916
9923
  400: unknown;
8917
9924
  /**
8918
9925
  * User not authenticated
8919
9926
  */
8920
9927
  401: unknown;
8921
- /**
8922
- * Backfill already in progress for this user
8923
- */
8924
- 409: unknown;
8925
9928
  };
8926
9929
  };
8927
9930
  };
@@ -8946,7 +9949,7 @@ export type $OpenApiTs = {
8946
9949
  /**
8947
9950
  * Login successful
8948
9951
  */
8949
- 200: unknown;
9952
+ 200: AnonymousLoginResponseDto;
8950
9953
  /**
8951
9954
  * Invalid access token
8952
9955
  */
@@ -9093,4 +10096,30 @@ export type $OpenApiTs = {
9093
10096
  };
9094
10097
  };
9095
10098
  };
10099
+ '/api/v1/market/symbols/search': {
10100
+ get: {
10101
+ req: SymbolControllerSearchData;
10102
+ res: {
10103
+ /**
10104
+ * Ranked search results
10105
+ */
10106
+ 200: Array<SymbolSearchResultDto>;
10107
+ };
10108
+ };
10109
+ };
10110
+ '/api/v1/market/symbols/{symbol}/quote': {
10111
+ get: {
10112
+ req: SymbolControllerGetQuoteData;
10113
+ res: {
10114
+ /**
10115
+ * Symbol quote
10116
+ */
10117
+ 200: SymbolQuoteDto;
10118
+ /**
10119
+ * Symbol not found in the openbb catalog
10120
+ */
10121
+ 404: unknown;
10122
+ };
10123
+ };
10124
+ };
9096
10125
  };