@firela/api-types 0.0.0-canary.45a6cc23 → 0.0.0-canary.4e3af49c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -27,13 +27,9 @@ type CreateAccountDto = {
27
27
  */
28
28
  path: string;
29
29
  /**
30
- * Display name to distinguish accounts at the same path (default: "")
30
+ * Account open date (server defaults to today)
31
31
  */
32
- displayName?: string;
33
- /**
34
- * Account open date
35
- */
36
- openDate: string;
32
+ openDate?: string;
37
33
  /**
38
34
  * Allowed currencies (null = no restriction)
39
35
  */
@@ -50,18 +46,14 @@ type CreateAccountDto = {
50
46
  * Whether this is a custom (user-created) account
51
47
  */
52
48
  isCustom?: boolean;
53
- /**
54
- * i18n key for display name (overrides template)
55
- */
56
- i18nKey?: string;
57
49
  /**
58
50
  * Icon identifier (overrides template)
59
51
  */
60
52
  icon?: string;
61
53
  /**
62
- * Additional metadata
54
+ * Open directive metadata (NOT an opening-balance amount — use the opening-balance endpoint)
63
55
  */
64
- openMeta?: {
56
+ openDirectiveMeta?: {
65
57
  [key: string]: unknown;
66
58
  };
67
59
  /**
@@ -82,14 +74,14 @@ type AccountResponseDto = {
82
74
  * Account path (hierarchical, colon-separated)
83
75
  */
84
76
  path: string;
85
- /**
86
- * Display name distinguishing multiple accounts at the same path
87
- */
88
- displayName: string;
89
77
  /**
90
78
  * Account type (root segment)
91
79
  */
92
80
  type: 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
81
+ /**
82
+ * 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.
83
+ */
84
+ assetSubClass?: 'DEPOSIT' | 'CASH' | 'MONEY_MARKET_FUND' | 'STOCK' | 'ETF' | 'MUTUAL_FUND' | 'EQUITY_COMPENSATION' | 'GOVERNMENT_BOND' | 'CORPORATE_BOND' | 'BOND_FUND' | 'PRIMARY_RESIDENCE' | 'INVESTMENT_PROPERTY' | 'REIT' | 'GOLD' | 'SILVER' | 'PRECIOUS_METAL' | 'PRECIOUS_METAL_FUND' | 'COMMODITY' | 'COMMODITY_FUND' | 'CRYPTOCURRENCY' | 'RETIREMENT_ACCOUNT' | 'HEALTH_ACCOUNT' | 'EDUCATION_ACCOUNT' | 'INSURANCE' | 'PRIVATE_EQUITY' | 'HEDGE_FUND' | 'COLLECTIBLES' | 'MORTGAGE' | 'STUDENT_LOAN' | 'CREDIT_CARD' | 'PERSONAL_LOAN' | 'OTHER' | null;
93
85
  /**
94
86
  * Account status
95
87
  */
@@ -119,17 +111,17 @@ type AccountResponseDto = {
119
111
  */
120
112
  isCustom: boolean;
121
113
  /**
122
- * i18n key for display name
114
+ * Localized display name (ADR-0114, read-time projection)
123
115
  */
124
- i18nKey?: string;
116
+ displayName?: string;
125
117
  /**
126
118
  * Icon identifier
127
119
  */
128
120
  icon?: string;
129
121
  /**
130
- * Account metadata
122
+ * Open directive metadata (ADR-0115 Decision 9)
131
123
  */
132
- openMeta?: {
124
+ openDirectiveMeta?: {
133
125
  [key: string]: unknown;
134
126
  };
135
127
  /**
@@ -157,6 +149,10 @@ type AccountResponseDto = {
157
149
  * Account type (root segment)
158
150
  */
159
151
  type type = 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
152
+ /**
153
+ * 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.
154
+ */
155
+ type assetSubClass = 'DEPOSIT' | 'CASH' | 'MONEY_MARKET_FUND' | 'STOCK' | 'ETF' | 'MUTUAL_FUND' | 'EQUITY_COMPENSATION' | 'GOVERNMENT_BOND' | 'CORPORATE_BOND' | 'BOND_FUND' | 'PRIMARY_RESIDENCE' | 'INVESTMENT_PROPERTY' | 'REIT' | 'GOLD' | 'SILVER' | 'PRECIOUS_METAL' | 'PRECIOUS_METAL_FUND' | 'COMMODITY' | 'COMMODITY_FUND' | 'CRYPTOCURRENCY' | 'RETIREMENT_ACCOUNT' | 'HEALTH_ACCOUNT' | 'EDUCATION_ACCOUNT' | 'INSURANCE' | 'PRIVATE_EQUITY' | 'HEDGE_FUND' | 'COLLECTIBLES' | 'MORTGAGE' | 'STUDENT_LOAN' | 'CREDIT_CARD' | 'PERSONAL_LOAN' | 'OTHER';
160
156
  /**
161
157
  * Account status
162
158
  */
@@ -172,10 +168,6 @@ type AccountListResponseDto = {
172
168
  total: number;
173
169
  };
174
170
  type UpdateAccountDto = {
175
- /**
176
- * Display name to distinguish accounts at the same path
177
- */
178
- displayName?: string;
179
171
  /**
180
172
  * Allowed currencies (null = no restriction)
181
173
  */
@@ -184,18 +176,14 @@ type UpdateAccountDto = {
184
176
  * Booking method for cost basis
185
177
  */
186
178
  bookingMethod?: 'FIFO' | 'LIFO' | 'HIFO' | 'AVERAGE' | 'STRICT' | 'STRICT_WITH_SIZE' | 'NONE';
187
- /**
188
- * i18n key for display name
189
- */
190
- i18nKey?: string;
191
179
  /**
192
180
  * Icon identifier
193
181
  */
194
182
  icon?: string;
195
183
  /**
196
- * Additional metadata (merged with existing)
184
+ * Open directive metadata (merged with existing; NOT an opening-balance amount)
197
185
  */
198
- openMeta?: {
186
+ openDirectiveMeta?: {
199
187
  [key: string]: unknown;
200
188
  };
201
189
  /**
@@ -221,6 +209,26 @@ type ReopenAccountDto = {
221
209
  */
222
210
  reopenDate?: string;
223
211
  };
212
+ type CreateOpeningBalanceDto = {
213
+ /**
214
+ * Opening balance amount (non-negative)
215
+ */
216
+ amount: number;
217
+ /**
218
+ * Currency code
219
+ */
220
+ currency: string;
221
+ /**
222
+ * Opening-balance date (defaults to now)
223
+ */
224
+ date?: string;
225
+ };
226
+ type OpeningBalanceResultDto = {
227
+ /**
228
+ * Created opening-balance transaction id.
229
+ */
230
+ transactionId: string;
231
+ };
224
232
  type AccountStandardResponseDto = {
225
233
  /**
226
234
  * Account path (hierarchical, colon-separated)
@@ -230,10 +238,6 @@ type AccountStandardResponseDto = {
230
238
  * Account type in Beancount hierarchy
231
239
  */
232
240
  type: 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
233
- /**
234
- * i18n key for localized display name
235
- */
236
- i18nKey: string;
237
241
  /**
238
242
  * Short localized display name
239
243
  */
@@ -266,10 +270,6 @@ type AccountStandardListResponseDto = {
266
270
  region: string;
267
271
  };
268
272
  type TemplateMetadataDto = {
269
- /**
270
- * Whether this path can be extended
271
- */
272
- extendable: boolean;
273
273
  /**
274
274
  * Root account type
275
275
  */
@@ -779,6 +779,48 @@ type flag2 = 'CLEARED' | 'PENDING' | 'PADDING' | 'SUMMARIZE' | 'TRANSFER' | 'CON
779
779
  * Transaction status
780
780
  */
781
781
  type status2 = 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
782
+ type BalanceByCurrencyDto = {
783
+ /**
784
+ * ISO 4217 currency code
785
+ */
786
+ currency: string;
787
+ /**
788
+ * Balance amount
789
+ */
790
+ balance: string;
791
+ };
792
+ type ExchangeRateWarningDto = {
793
+ /**
794
+ * Warning type
795
+ */
796
+ type: string;
797
+ /**
798
+ * Currency without exchange rate
799
+ */
800
+ currency: string;
801
+ /**
802
+ * Total amount affected
803
+ */
804
+ totalAmount: string;
805
+ };
806
+ type TransactionListSummaryDto = {
807
+ /**
808
+ * 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.
809
+ */
810
+ totalAmount: string;
811
+ /**
812
+ * Base currency (ISO 4217)
813
+ */
814
+ currency: string;
815
+ /**
816
+ * Raw (unconverted) balance per currency
817
+ */
818
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
819
+ /**
820
+ * Currencies missing an FX rate (omitted when empty)
821
+ */
822
+ warnings?: Array<ExchangeRateWarningDto>;
823
+ };
782
824
  type TransactionListResponseDto = {
783
825
  /**
784
826
  * List of transactions
@@ -796,6 +838,10 @@ type TransactionListResponseDto = {
796
838
  * Number of items skipped
797
839
  */
798
840
  offset: number;
841
+ /**
842
+ * 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.
843
+ */
844
+ summary?: TransactionListSummaryDto;
799
845
  };
800
846
  type TagSuggestionDto = {
801
847
  /**
@@ -1642,6 +1688,104 @@ type UpdateCommodityDto = {
1642
1688
  [key: string]: unknown;
1643
1689
  };
1644
1690
  };
1691
+ type CreateBeanPriceDto = {
1692
+ /**
1693
+ * Currency being priced (e.g., USD, AAPL, BTC)
1694
+ */
1695
+ currency: string;
1696
+ /**
1697
+ * Quote currency (pricing currency, e.g., CNY, EUR)
1698
+ */
1699
+ quoteCurrency: string;
1700
+ /**
1701
+ * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
1702
+ */
1703
+ amount: number;
1704
+ /**
1705
+ * Price date (ISO 8601 format)
1706
+ */
1707
+ date: string;
1708
+ /**
1709
+ * Metadata (validated by Zod schema, max field lengths enforced)
1710
+ */
1711
+ metadata?: {
1712
+ [key: string]: unknown;
1713
+ };
1714
+ };
1715
+ type PriceResponseDto = {
1716
+ /**
1717
+ * Unique identifier
1718
+ */
1719
+ id: string;
1720
+ /**
1721
+ * User ID (owner of the price)
1722
+ */
1723
+ userId: string;
1724
+ /**
1725
+ * Currency being priced (e.g., USD, AAPL, BTC)
1726
+ */
1727
+ currency: string;
1728
+ /**
1729
+ * Quote currency (pricing currency, e.g., USD, CNY)
1730
+ */
1731
+ quoteCurrency: string;
1732
+ /**
1733
+ * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
1734
+ */
1735
+ amount: number;
1736
+ /**
1737
+ * Price date (ISO 8601 format). Represents the date this price was valid.
1738
+ */
1739
+ date: string;
1740
+ /**
1741
+ * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
1742
+ */
1743
+ meta: {
1744
+ [key: string]: unknown;
1745
+ };
1746
+ /**
1747
+ * Creation timestamp
1748
+ */
1749
+ createdAt: string;
1750
+ /**
1751
+ * Last update timestamp
1752
+ */
1753
+ updatedAt: string;
1754
+ };
1755
+ type PriceListResponseDto = {
1756
+ /**
1757
+ * List of prices
1758
+ */
1759
+ items: Array<PriceResponseDto>;
1760
+ /**
1761
+ * Total number of prices
1762
+ */
1763
+ total: number;
1764
+ };
1765
+ type UpdateBeanPriceDto = {
1766
+ /**
1767
+ * Currency being priced
1768
+ */
1769
+ currency?: string;
1770
+ /**
1771
+ * Quote currency (pricing currency)
1772
+ */
1773
+ quoteCurrency?: string;
1774
+ /**
1775
+ * Price amount (MUST be >= 0 per Beancount spec)
1776
+ */
1777
+ amount?: number;
1778
+ /**
1779
+ * Price date (ISO 8601 format)
1780
+ */
1781
+ date?: string;
1782
+ /**
1783
+ * Metadata
1784
+ */
1785
+ metadata?: {
1786
+ [key: string]: unknown;
1787
+ };
1788
+ };
1645
1789
  type CreateRecurringRuleDto = {
1646
1790
  /**
1647
1791
  * Rule name (unique per user)
@@ -2239,76 +2383,368 @@ type ForecastResponseDto = {
2239
2383
  */
2240
2384
  periodEnd: string;
2241
2385
  };
2242
- type CreateTransactionRuleDto = {
2243
- name: string;
2244
- description?: string;
2245
- narrationKeywords?: Array<unknown[]>;
2246
- payeeKeywords?: Array<unknown[]>;
2247
- categoryKeywords?: Array<unknown[]>;
2386
+ type CurrencyBalanceDto = {
2248
2387
  /**
2249
- * Payment method keywords (e.g., HuaBei, YuEBao)
2388
+ * ISO 4217 currency code
2250
2389
  */
2251
- methodKeywords?: Array<unknown[]>;
2390
+ currency: string;
2252
2391
  /**
2253
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2392
+ * Balance amount
2254
2393
  */
2255
- categoryAccount?: string;
2256
- matchLogic: 'OR' | 'AND';
2394
+ balance: string;
2395
+ };
2396
+ type TimeSeriesPointDto = {
2257
2397
  /**
2258
- * Minimum transaction amount (inclusive)
2398
+ * Date in YYYY-MM-DD format
2259
2399
  */
2260
- amountMin?: number;
2400
+ date: string;
2261
2401
  /**
2262
- * Maximum transaction amount (inclusive)
2402
+ * Value at this date (in base currency)
2263
2403
  */
2264
- amountMax?: number;
2265
- priority: number;
2266
- additionalTags?: Array<unknown[]>;
2267
- additionalMetadata?: {
2404
+ value: string;
2405
+ /**
2406
+ * Change from previous point
2407
+ */
2408
+ change?: {
2268
2409
  [key: string]: unknown;
2269
2410
  };
2270
2411
  /**
2271
- * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
2412
+ * Total assets at this date (in base currency)
2272
2413
  */
2273
- upsertByPayee?: boolean;
2274
- };
2275
- type matchLogic = 'OR' | 'AND';
2276
- type AmountRangeDto = {
2414
+ assets?: string;
2277
2415
  /**
2278
- * Minimum amount
2416
+ * Total liabilities at this date (in base currency)
2279
2417
  */
2280
- min?: number;
2418
+ liabilities?: string;
2281
2419
  /**
2282
- * Maximum amount
2420
+ * Multi-currency breakdown for this point
2283
2421
  */
2284
- max?: number;
2422
+ byCurrency?: Array<CurrencyBalanceDto>;
2285
2423
  };
2286
- type TransactionRuleResponseDto = {
2424
+ type TrendSummaryDto = {
2287
2425
  /**
2288
- * Rule ID
2426
+ * Value at start of period
2289
2427
  */
2290
- id: string;
2428
+ startValue: string;
2291
2429
  /**
2292
- * Rule name
2430
+ * Value at end of period
2293
2431
  */
2294
- name: string;
2432
+ endValue: string;
2295
2433
  /**
2296
- * Rule description
2434
+ * Total change over period
2297
2435
  */
2298
- description?: string;
2436
+ totalChange: string;
2299
2437
  /**
2300
- * Keywords to match in transaction narration
2438
+ * Total change percentage
2301
2439
  */
2302
- narrationKeywords: Array<string>;
2440
+ totalChangePercentage: string;
2441
+ };
2442
+ type MultiCurrencyPointDto = {
2303
2443
  /**
2304
- * Keywords to match in payee name
2444
+ * Date in YYYY-MM-DD format
2305
2445
  */
2306
- payeeKeywords: Array<string>;
2446
+ date: string;
2307
2447
  /**
2308
- * Keywords to match in category
2448
+ * Balances by currency
2309
2449
  */
2310
- categoryKeywords: Array<string>;
2311
- /**
2450
+ byCurrency: Array<CurrencyBalanceDto>;
2451
+ };
2452
+ type PortfolioTrendsResponseDto = {
2453
+ /**
2454
+ * Time series data points
2455
+ */
2456
+ series: Array<TimeSeriesPointDto>;
2457
+ /**
2458
+ * Period summary
2459
+ */
2460
+ summary: TrendSummaryDto;
2461
+ /**
2462
+ * Period requested
2463
+ */
2464
+ period: string;
2465
+ /**
2466
+ * Data granularity
2467
+ */
2468
+ granularity: string;
2469
+ /**
2470
+ * Base currency for converted values
2471
+ */
2472
+ currency: string;
2473
+ /**
2474
+ * Multi-currency time series (each point has currency breakdown)
2475
+ */
2476
+ byCurrency?: Array<MultiCurrencyPointDto>;
2477
+ /**
2478
+ * Exchange rate warnings
2479
+ */
2480
+ warnings?: Array<ExchangeRateWarningDto>;
2481
+ };
2482
+ type CashFlowPointDto = {
2483
+ /**
2484
+ * Month key (YYYY-MM)
2485
+ */
2486
+ month: string;
2487
+ /**
2488
+ * Income in base currency (absolute, converted)
2489
+ */
2490
+ income: string;
2491
+ /**
2492
+ * Expense in base currency (absolute, converted)
2493
+ */
2494
+ expense: string;
2495
+ /**
2496
+ * netSavings = income − expense (savings positive)
2497
+ */
2498
+ netSavings: string;
2499
+ };
2500
+ type CashFlowTrendSummaryDto = {
2501
+ /**
2502
+ * Total income across the period
2503
+ */
2504
+ totalIncome: string;
2505
+ /**
2506
+ * Total expense across the period
2507
+ */
2508
+ totalExpense: string;
2509
+ /**
2510
+ * income − expense across the period
2511
+ */
2512
+ totalNetSavings: string;
2513
+ /**
2514
+ * totalNetSavings divided by the window length (N months, incl. zero-filled)
2515
+ */
2516
+ averageMonthlyNetSavings: string;
2517
+ };
2518
+ type CashFlowTrendsResponseDto = {
2519
+ /**
2520
+ * Monthly cash-flow series (fixed N-month window, zero-filled)
2521
+ */
2522
+ series: Array<CashFlowPointDto>;
2523
+ /**
2524
+ * Period totals
2525
+ */
2526
+ summary: CashFlowTrendSummaryDto;
2527
+ /**
2528
+ * Period requested
2529
+ */
2530
+ period: string;
2531
+ /**
2532
+ * Data granularity (v1 returns month buckets)
2533
+ */
2534
+ granularity: string;
2535
+ /**
2536
+ * Base currency for converted values
2537
+ */
2538
+ currency: string;
2539
+ /**
2540
+ * Exchange rate warnings (e.g. missing rate for a currency)
2541
+ */
2542
+ warnings?: Array<ExchangeRateWarningDto>;
2543
+ };
2544
+ type GenerateSnapshotBody = unknown;
2545
+ type GenerateSnapshotResponse = unknown;
2546
+ type BackfillSnapshotsBody = unknown;
2547
+ type BackfillSnapshotsResponse = unknown;
2548
+ type DeleteOwnUserDto = {
2549
+ /**
2550
+ * Access token for user verification
2551
+ */
2552
+ accessToken: string;
2553
+ };
2554
+ type SignupDto = {
2555
+ /**
2556
+ * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2557
+ */
2558
+ turnstileToken?: string;
2559
+ };
2560
+ type SignupResponseDto = {
2561
+ /**
2562
+ * JWT auth token
2563
+ */
2564
+ authToken: string;
2565
+ /**
2566
+ * Auto-generated access token
2567
+ */
2568
+ accessToken: string;
2569
+ /**
2570
+ * Assigned user role
2571
+ */
2572
+ role: 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2573
+ };
2574
+ /**
2575
+ * Assigned user role
2576
+ */
2577
+ type role = 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2578
+ type UpdateUserSettingDto = {
2579
+ /**
2580
+ * Security ID
2581
+ */
2582
+ secId?: number;
2583
+ /**
2584
+ * Annual interest rate
2585
+ */
2586
+ annualInterestRate?: number;
2587
+ /**
2588
+ * Currency code
2589
+ */
2590
+ currency?: string;
2591
+ /**
2592
+ * Base currency code
2593
+ */
2594
+ baseCurrency?: string;
2595
+ /**
2596
+ * Benchmark symbol
2597
+ */
2598
+ benchmark?: string;
2599
+ /**
2600
+ * Color scheme
2601
+ */
2602
+ colorScheme?: 'DARK' | 'LIGHT';
2603
+ /**
2604
+ * Date range filter
2605
+ */
2606
+ dateRange?: string;
2607
+ /**
2608
+ * Emergency fund amount
2609
+ */
2610
+ emergencyFund?: number;
2611
+ /**
2612
+ * Account filter IDs
2613
+ */
2614
+ 'filters.accounts'?: Array<string>;
2615
+ /**
2616
+ * Asset class filters
2617
+ */
2618
+ 'filters.assetClasses'?: Array<string>;
2619
+ /**
2620
+ * Data source filter
2621
+ */
2622
+ 'filters.dataSource'?: string;
2623
+ /**
2624
+ * Symbol filter
2625
+ */
2626
+ 'filters.symbol'?: string;
2627
+ /**
2628
+ * Tag filters
2629
+ */
2630
+ 'filters.tags'?: Array<string>;
2631
+ /**
2632
+ * Enable experimental features
2633
+ */
2634
+ isExperimentalFeatures?: boolean;
2635
+ /**
2636
+ * Enable restricted view mode
2637
+ */
2638
+ isRestrictedView?: boolean;
2639
+ /**
2640
+ * Language code
2641
+ */
2642
+ language?: string;
2643
+ /**
2644
+ * Locale code
2645
+ */
2646
+ locale?: string;
2647
+ /**
2648
+ * Projected total amount
2649
+ */
2650
+ projectedTotalAmount?: number;
2651
+ /**
2652
+ * Retirement date in ISO 8601 format
2653
+ */
2654
+ retirementDate?: string;
2655
+ /**
2656
+ * Savings rate percentage
2657
+ */
2658
+ savingsRate?: number;
2659
+ /**
2660
+ * View mode
2661
+ */
2662
+ viewMode?: 'DEFAULT' | 'ZEN';
2663
+ };
2664
+ /**
2665
+ * Color scheme
2666
+ */
2667
+ type colorScheme = 'DARK' | 'LIGHT';
2668
+ /**
2669
+ * View mode
2670
+ */
2671
+ type viewMode = 'DEFAULT' | 'ZEN';
2672
+ type UpdatePropertyDto = {
2673
+ /**
2674
+ * Property value
2675
+ */
2676
+ value: string;
2677
+ };
2678
+ type CreateTransactionRuleDto = {
2679
+ name: string;
2680
+ description?: string;
2681
+ narrationKeywords?: Array<unknown[]>;
2682
+ payeeKeywords?: Array<unknown[]>;
2683
+ categoryKeywords?: Array<unknown[]>;
2684
+ /**
2685
+ * Payment method keywords (e.g., HuaBei, YuEBao)
2686
+ */
2687
+ methodKeywords?: Array<unknown[]>;
2688
+ /**
2689
+ * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2690
+ */
2691
+ categoryAccount?: string;
2692
+ matchLogic: 'OR' | 'AND';
2693
+ /**
2694
+ * Minimum transaction amount (inclusive)
2695
+ */
2696
+ amountMin?: number;
2697
+ /**
2698
+ * Maximum transaction amount (inclusive)
2699
+ */
2700
+ amountMax?: number;
2701
+ priority: number;
2702
+ additionalTags?: Array<unknown[]>;
2703
+ additionalMetadata?: {
2704
+ [key: string]: unknown;
2705
+ };
2706
+ /**
2707
+ * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
2708
+ */
2709
+ upsertByPayee?: boolean;
2710
+ };
2711
+ type matchLogic = 'OR' | 'AND';
2712
+ type AmountRangeDto = {
2713
+ /**
2714
+ * Minimum amount
2715
+ */
2716
+ min?: number;
2717
+ /**
2718
+ * Maximum amount
2719
+ */
2720
+ max?: number;
2721
+ };
2722
+ type TransactionRuleResponseDto = {
2723
+ /**
2724
+ * Rule ID
2725
+ */
2726
+ id: string;
2727
+ /**
2728
+ * Rule name
2729
+ */
2730
+ name: string;
2731
+ /**
2732
+ * Rule description
2733
+ */
2734
+ description?: string;
2735
+ /**
2736
+ * Keywords to match in transaction narration
2737
+ */
2738
+ narrationKeywords: Array<string>;
2739
+ /**
2740
+ * Keywords to match in payee name
2741
+ */
2742
+ payeeKeywords: Array<string>;
2743
+ /**
2744
+ * Keywords to match in category
2745
+ */
2746
+ categoryKeywords: Array<string>;
2747
+ /**
2312
2748
  * Keywords to match in payment method
2313
2749
  */
2314
2750
  methodKeywords: Array<string>;
@@ -2502,192 +2938,80 @@ type RuleStatisticsResponseDto = {
2502
2938
  /**
2503
2939
  * Average confidence score across all matches
2504
2940
  */
2505
- averageConfidence: number;
2506
- /**
2507
- * Per-rule statistics
2508
- */
2509
- ruleStats: Array<{
2510
- ruleId?: string;
2511
- ruleName?: string;
2512
- matchCount?: number;
2513
- averageConfidence?: number;
2514
- }>;
2515
- };
2516
- /**
2517
- * Statistics time period
2518
- */
2519
- type period = '7d' | '30d' | '90d';
2520
- type UpdateTransactionRuleDto = {
2521
- name?: string;
2522
- description?: string;
2523
- narrationKeywords?: Array<unknown[]>;
2524
- payeeKeywords?: Array<unknown[]>;
2525
- categoryKeywords?: Array<unknown[]>;
2526
- /**
2527
- * Payment method keywords (e.g., HuaBei, YuEBao)
2528
- */
2529
- methodKeywords?: Array<unknown[]>;
2530
- /**
2531
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2532
- */
2533
- categoryAccount?: string;
2534
- matchLogic?: 'OR' | 'AND';
2535
- /**
2536
- * Minimum transaction amount (inclusive)
2537
- */
2538
- amountMin?: number;
2539
- /**
2540
- * Maximum transaction amount (inclusive)
2541
- */
2542
- amountMax?: number;
2543
- priority?: number;
2544
- /**
2545
- * Enable or disable the rule
2546
- */
2547
- enabled?: boolean;
2548
- additionalTags?: Array<unknown[]>;
2549
- additionalMetadata?: {
2550
- [key: string]: unknown;
2551
- };
2552
- };
2553
- type TestRuleDto = {
2554
- narration: string;
2555
- payee?: string;
2556
- categoryAccount?: string;
2557
- amount?: number;
2558
- currency?: string;
2559
- };
2560
- type TestRuleResponseDto = {
2561
- /**
2562
- * Rule ID that was tested
2563
- */
2564
- ruleId: string;
2565
- /**
2566
- * Whether the rule matched the test data
2567
- */
2568
- matches: boolean;
2569
- /**
2570
- * Match confidence score (0-1)
2571
- */
2572
- confidence: number;
2573
- /**
2574
- * Details of which fields matched
2575
- */
2576
- matchDetails: {
2577
- [key: string]: unknown;
2578
- };
2579
- };
2580
- type DeleteOwnUserDto = {
2581
- /**
2582
- * Access token for user verification
2583
- */
2584
- accessToken: string;
2585
- };
2586
- type SignupDto = {
2587
- /**
2588
- * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2589
- */
2590
- turnstileToken?: string;
2591
- };
2592
- type UpdateUserSettingDto = {
2593
- /**
2594
- * Security ID
2595
- */
2596
- secId?: number;
2597
- /**
2598
- * Annual interest rate
2599
- */
2600
- annualInterestRate?: number;
2601
- /**
2602
- * Currency code
2603
- */
2604
- currency?: string;
2605
- /**
2606
- * Base currency code
2607
- */
2608
- baseCurrency?: string;
2609
- /**
2610
- * Benchmark symbol
2611
- */
2612
- benchmark?: string;
2613
- /**
2614
- * Color scheme
2615
- */
2616
- colorScheme?: 'DARK' | 'LIGHT';
2617
- /**
2618
- * Date range filter
2619
- */
2620
- dateRange?: string;
2621
- /**
2622
- * Emergency fund amount
2623
- */
2624
- emergencyFund?: number;
2625
- /**
2626
- * Account filter IDs
2627
- */
2628
- 'filters.accounts'?: Array<string>;
2629
- /**
2630
- * Asset class filters
2631
- */
2632
- 'filters.assetClasses'?: Array<string>;
2633
- /**
2634
- * Data source filter
2635
- */
2636
- 'filters.dataSource'?: string;
2637
- /**
2638
- * Symbol filter
2639
- */
2640
- 'filters.symbol'?: string;
2941
+ averageConfidence: number;
2641
2942
  /**
2642
- * Tag filters
2943
+ * Per-rule statistics
2643
2944
  */
2644
- 'filters.tags'?: Array<string>;
2945
+ ruleStats: Array<{
2946
+ ruleId?: string;
2947
+ ruleName?: string;
2948
+ matchCount?: number;
2949
+ averageConfidence?: number;
2950
+ }>;
2951
+ };
2952
+ /**
2953
+ * Statistics time period
2954
+ */
2955
+ type period = '7d' | '30d' | '90d';
2956
+ type UpdateTransactionRuleDto = {
2957
+ name?: string;
2958
+ description?: string;
2959
+ narrationKeywords?: Array<unknown[]>;
2960
+ payeeKeywords?: Array<unknown[]>;
2961
+ categoryKeywords?: Array<unknown[]>;
2645
2962
  /**
2646
- * Enable experimental features
2963
+ * Payment method keywords (e.g., HuaBei, YuEBao)
2647
2964
  */
2648
- isExperimentalFeatures?: boolean;
2965
+ methodKeywords?: Array<unknown[]>;
2649
2966
  /**
2650
- * Enable restricted view mode
2967
+ * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2651
2968
  */
2652
- isRestrictedView?: boolean;
2969
+ categoryAccount?: string;
2970
+ matchLogic?: 'OR' | 'AND';
2653
2971
  /**
2654
- * Language code
2972
+ * Minimum transaction amount (inclusive)
2655
2973
  */
2656
- language?: string;
2974
+ amountMin?: number;
2657
2975
  /**
2658
- * Locale code
2976
+ * Maximum transaction amount (inclusive)
2659
2977
  */
2660
- locale?: string;
2978
+ amountMax?: number;
2979
+ priority?: number;
2661
2980
  /**
2662
- * Projected total amount
2981
+ * Enable or disable the rule
2663
2982
  */
2664
- projectedTotalAmount?: number;
2983
+ enabled?: boolean;
2984
+ additionalTags?: Array<unknown[]>;
2985
+ additionalMetadata?: {
2986
+ [key: string]: unknown;
2987
+ };
2988
+ };
2989
+ type TestRuleDto = {
2990
+ narration: string;
2991
+ payee?: string;
2992
+ categoryAccount?: string;
2993
+ amount?: number;
2994
+ currency?: string;
2995
+ };
2996
+ type TestRuleResponseDto = {
2665
2997
  /**
2666
- * Retirement date in ISO 8601 format
2998
+ * Rule ID that was tested
2667
2999
  */
2668
- retirementDate?: string;
3000
+ ruleId: string;
2669
3001
  /**
2670
- * Savings rate percentage
3002
+ * Whether the rule matched the test data
2671
3003
  */
2672
- savingsRate?: number;
3004
+ matches: boolean;
2673
3005
  /**
2674
- * View mode
3006
+ * Match confidence score (0-1)
2675
3007
  */
2676
- viewMode?: 'DEFAULT' | 'ZEN';
2677
- };
2678
- /**
2679
- * Color scheme
2680
- */
2681
- type colorScheme = 'DARK' | 'LIGHT';
2682
- /**
2683
- * View mode
2684
- */
2685
- type viewMode = 'DEFAULT' | 'ZEN';
2686
- type UpdatePropertyDto = {
3008
+ confidence: number;
2687
3009
  /**
2688
- * Property value
3010
+ * Details of which fields matched
2689
3011
  */
2690
- value: string;
3012
+ matchDetails: {
3013
+ [key: string]: unknown;
3014
+ };
2691
3015
  };
2692
3016
  type CreateBeanEventDto = {
2693
3017
  /**
@@ -2775,6 +3099,150 @@ type UpdateBeanEventDto = {
2775
3099
  [key: string]: unknown;
2776
3100
  };
2777
3101
  };
3102
+ type OnboardingAccountDto = {
3103
+ /**
3104
+ * Account path (Assets/Liabilities only; format validated by the account service)
3105
+ */
3106
+ path: string;
3107
+ /**
3108
+ * ISO 4217 currency code (3 letters)
3109
+ */
3110
+ currency: string;
3111
+ /**
3112
+ * Opening balance as a non-negative Decimal string (e.g. "1000.00")
3113
+ */
3114
+ openingBalance?: string;
3115
+ /**
3116
+ * Platform ID to bind the account to (references Platform.id); omit for unbound
3117
+ */
3118
+ platformId?: string;
3119
+ };
3120
+ type OnboardingDto = {
3121
+ /**
3122
+ * Asset/Liability accounts to register with opening balances
3123
+ */
3124
+ accounts?: Array<OnboardingAccountDto>;
3125
+ /**
3126
+ * Skip asset registration; only bootstrap the core account set
3127
+ */
3128
+ skipAssetRegistration?: boolean;
3129
+ };
3130
+ type ActualBalanceDto = {
3131
+ /**
3132
+ * Actual balance amount as a decimal string (preserves precision for tolerance inference).
3133
+ */
3134
+ amount: string;
3135
+ /**
3136
+ * Currency code (ISO 4217 or commodity ticker).
3137
+ */
3138
+ ccy: string;
3139
+ };
3140
+ type ComputeReconciliationDto = {
3141
+ /**
3142
+ * BeanAccount id to reconcile.
3143
+ */
3144
+ accountId: string;
3145
+ /**
3146
+ * Assertion date (ISO 8601, e.g. "2026-07-24").
3147
+ */
3148
+ asOfDate: string;
3149
+ /**
3150
+ * Actual balance from the external statement.
3151
+ */
3152
+ actualBalance: ActualBalanceDto;
3153
+ };
3154
+ type ReconciliationComputeResultDto = {
3155
+ accountId: string;
3156
+ asOfDate: string;
3157
+ /**
3158
+ * System-computed book balance (decimal string).
3159
+ */
3160
+ bookBalance: string;
3161
+ /**
3162
+ * User-entered actual balance (decimal string).
3163
+ */
3164
+ actualBalance: string;
3165
+ currency: string;
3166
+ /**
3167
+ * Diff = book − actual (decimal string).
3168
+ */
3169
+ diff: string;
3170
+ /**
3171
+ * Applied tolerance (decimal string).
3172
+ */
3173
+ tolerance: string;
3174
+ /**
3175
+ * true when |diff| ≤ tolerance.
3176
+ */
3177
+ withinTolerance: boolean;
3178
+ /**
3179
+ * Suggested next action: assert when within tolerance, pad otherwise.
3180
+ */
3181
+ suggestedAction: 'assert' | 'pad';
3182
+ };
3183
+ /**
3184
+ * Suggested next action: assert when within tolerance, pad otherwise.
3185
+ */
3186
+ type suggestedAction = 'assert' | 'pad';
3187
+ type AssertReconciliationDto = {
3188
+ /**
3189
+ * BeanAccount id to reconcile.
3190
+ */
3191
+ accountId: string;
3192
+ /**
3193
+ * Assertion date (ISO 8601, e.g. "2026-07-24").
3194
+ */
3195
+ asOfDate: string;
3196
+ /**
3197
+ * Actual balance from the external statement.
3198
+ */
3199
+ actualBalance: ActualBalanceDto;
3200
+ /**
3201
+ * Optional explicit tolerance override. Omit to infer from amount precision (Beancount default).
3202
+ */
3203
+ tolerance?: string;
3204
+ };
3205
+ type ReconciliationRecordDto = {
3206
+ id: string;
3207
+ accountId: string;
3208
+ date: string;
3209
+ /**
3210
+ * Asserted (actual) amount.
3211
+ */
3212
+ amount: string;
3213
+ currency: string;
3214
+ tolerance?: string;
3215
+ /**
3216
+ * book − actual.
3217
+ */
3218
+ diffAmount?: string;
3219
+ diffCurrency?: string;
3220
+ createdAt: string;
3221
+ };
3222
+ type PadReconciliationDto = {
3223
+ /**
3224
+ * BeanAccount id to reconcile.
3225
+ */
3226
+ accountId: string;
3227
+ /**
3228
+ * Assertion date (ISO 8601, e.g. "2026-07-24").
3229
+ */
3230
+ asOfDate: string;
3231
+ /**
3232
+ * Actual balance from the external statement.
3233
+ */
3234
+ actualBalance: ActualBalanceDto;
3235
+ /**
3236
+ * Pad source account. Defaults to Equity:Opening-Balances (official Beancount convention).
3237
+ */
3238
+ sourceAccount?: string;
3239
+ };
3240
+ type PadResultDto = {
3241
+ /**
3242
+ * Created pad adjusting transaction id.
3243
+ */
3244
+ transactionId: string;
3245
+ };
2778
3246
  type FileImportDto = {
2779
3247
  /**
2780
3248
  * Bill file to import (CSV, PDF, OFX, etc.)
@@ -3019,70 +3487,6 @@ type UpdateImporterConfigDto = {
3019
3487
  */
3020
3488
  data?: UpdateConfigDataDto;
3021
3489
  };
3022
- type CreatePlatformDto = {
3023
- /**
3024
- * Platform name
3025
- */
3026
- name: string;
3027
- /**
3028
- * Platform canonical identifier (lowercase, kebab-case)
3029
- */
3030
- canonical: string;
3031
- /**
3032
- * Platform aliases (multi-language names for lookup)
3033
- */
3034
- aliases: Array<string>;
3035
- /**
3036
- * Platform URL
3037
- */
3038
- url: string;
3039
- /**
3040
- * Platform type
3041
- */
3042
- type: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3043
- /**
3044
- * Platform logo URL
3045
- */
3046
- logoUrl?: string;
3047
- /**
3048
- * Whether the platform is active
3049
- */
3050
- isActive?: boolean;
3051
- };
3052
- /**
3053
- * Platform type
3054
- */
3055
- type type3 = 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3056
- type UpdatePlatformDto = {
3057
- /**
3058
- * Platform name
3059
- */
3060
- name?: string;
3061
- /**
3062
- * Platform canonical identifier (lowercase, kebab-case)
3063
- */
3064
- canonical?: string;
3065
- /**
3066
- * Platform aliases (multi-language names for lookup)
3067
- */
3068
- aliases?: Array<string>;
3069
- /**
3070
- * Platform URL
3071
- */
3072
- url?: string;
3073
- /**
3074
- * Platform type
3075
- */
3076
- type?: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3077
- /**
3078
- * Platform logo URL
3079
- */
3080
- logoUrl?: string;
3081
- /**
3082
- * Whether the platform is active
3083
- */
3084
- isActive?: boolean;
3085
- };
3086
3490
  type ProviderSyncConfigDto = {
3087
3491
  /**
3088
3492
  * Source account for the first posting
@@ -3104,6 +3508,10 @@ type ProviderSyncConfigDto = {
3104
3508
  * Filter pending transactions
3105
3509
  */
3106
3510
  filterPending?: boolean;
3511
+ /**
3512
+ * External account ID for per-batch providers (e.g. GoCardless). Overrides sourceAccount when an ExternalAccountLink mapping exists.
3513
+ */
3514
+ externalAccountId?: string;
3107
3515
  };
3108
3516
  type ProviderSyncDto = {
3109
3517
  /**
@@ -3155,6 +3563,41 @@ type SupportedProvidersResponseDto = {
3155
3563
  */
3156
3564
  providers: Array<string>;
3157
3565
  };
3566
+ type CreateExternalAccountLinkDto = {
3567
+ /**
3568
+ * Open Banking provider (whitelist)
3569
+ */
3570
+ provider: 'plaid' | 'teller' | 'truelayer' | 'gocardless' | 'simplefin' | 'yodlee' | 'beancount-direct' | 'parsed-bill';
3571
+ /**
3572
+ * External account ID from the provider
3573
+ */
3574
+ externalAccountId: string;
3575
+ /**
3576
+ * Target BeanAccount ID (must belong to the JWT user)
3577
+ */
3578
+ beanAccountId: string;
3579
+ };
3580
+ /**
3581
+ * Open Banking provider (whitelist)
3582
+ */
3583
+ type provider = 'plaid' | 'teller' | 'truelayer' | 'gocardless' | 'simplefin' | 'yodlee' | 'beancount-direct' | 'parsed-bill';
3584
+ type ExternalAccountLinkResponseDto = {
3585
+ id: string;
3586
+ provider: string;
3587
+ externalAccountId: string;
3588
+ beanAccountId: string;
3589
+ isActive: boolean;
3590
+ createdAt: string;
3591
+ updatedAt: string;
3592
+ };
3593
+ type ExternalAccountLinkListResponseDto = {
3594
+ items: Array<ExternalAccountLinkResponseDto>;
3595
+ total: number;
3596
+ /**
3597
+ * Filter by provider (query param)
3598
+ */
3599
+ provider?: string;
3600
+ };
3158
3601
  type ParserTelemetryReportDto = unknown;
3159
3602
  type UncoveredFormatMissDto = unknown;
3160
3603
  type ProcessNlpDto = {
@@ -3405,9 +3848,9 @@ type NlpAccountConfirmationDataDto = {
3405
3848
  */
3406
3849
  invalidAccount: string;
3407
3850
  /**
3408
- * Suggested replacement account
3851
+ * Suggested replacement account (omitted when no clear candidate)
3409
3852
  */
3410
- suggestedAccount: string;
3853
+ suggestedAccount?: string;
3411
3854
  /**
3412
3855
  * Similar accounts for user selection
3413
3856
  */
@@ -3569,7 +4012,7 @@ type NlpResponseDto = {
3569
4012
  /**
3570
4013
  * Action taken or requested
3571
4014
  */
3572
- action: 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel';
4015
+ action: 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel' | 'aborted';
3573
4016
  /**
3574
4017
  * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
3575
4018
  */
@@ -3673,7 +4116,7 @@ type status4 = 'success' | 'pending' | 'error';
3673
4116
  /**
3674
4117
  * Action taken or requested
3675
4118
  */
3676
- type action2 = 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel';
4119
+ type action2 = 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel' | 'aborted';
3677
4120
  /**
3678
4121
  * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
3679
4122
  */
@@ -3690,909 +4133,813 @@ type liabilitySubType = 'borrow' | 'repay';
3690
4133
  * Equity sub-type (only present when intent is "equity"). opening: account opening balance (Equity → Assets), adjustment: balance correction.
3691
4134
  */
3692
4135
  type equitySubType = 'opening' | 'adjustment';
3693
- type BalanceByCurrencyDto = {
3694
- /**
3695
- * ISO 4217 currency code
3696
- */
3697
- currency: string;
3698
- /**
3699
- * Balance amount
3700
- */
3701
- balance: string;
3702
- };
3703
- type NetWorthByCurrencyDto = {
3704
- /**
3705
- * Net worth by currency
3706
- */
3707
- netWorth: Array<BalanceByCurrencyDto>;
3708
- /**
3709
- * Assets by currency
3710
- */
3711
- assets: Array<BalanceByCurrencyDto>;
3712
- /**
3713
- * Liabilities by currency
3714
- */
3715
- liabilities: Array<BalanceByCurrencyDto>;
3716
- };
3717
- type ConvertedNetWorthDto = {
3718
- /**
3719
- * Base currency for conversion
3720
- */
3721
- baseCurrency: string;
3722
- /**
3723
- * Converted net worth
3724
- */
3725
- netWorth: string;
3726
- /**
3727
- * Converted assets
3728
- */
3729
- assets: string;
3730
- /**
3731
- * Converted liabilities
3732
- */
3733
- liabilities: string;
3734
- /**
3735
- * Exchange rates used for conversion
3736
- */
3737
- exchangeRates: {
3738
- [key: string]: unknown;
3739
- };
3740
- };
3741
- type ExchangeRateWarningDto = {
3742
- /**
3743
- * Warning type
3744
- */
3745
- type: string;
3746
- /**
3747
- * Currency without exchange rate
3748
- */
3749
- currency: string;
3750
- /**
3751
- * Total amount affected
3752
- */
3753
- totalAmount: string;
3754
- };
3755
- type NetWorthResponseDto = {
4136
+ type PlatformListItemDto = {
3756
4137
  /**
3757
- * Total net worth (assets - liabilities, converted to base currency)
3758
- */
3759
- netWorth: string;
3760
- /**
3761
- * Total assets value (converted)
3762
- */
3763
- assets: string;
3764
- /**
3765
- * Total liabilities value (positive number, converted)
4138
+ * Global platform ID
3766
4139
  */
3767
- liabilities: string;
4140
+ id: string;
3768
4141
  /**
3769
- * Monthly return (change from last month)
4142
+ * Platform name
3770
4143
  */
3771
- monthlyReturn: string;
4144
+ name: string;
3772
4145
  /**
3773
- * Monthly return percentage
4146
+ * Platform URL
3774
4147
  */
3775
- monthlyReturnPercentage: string;
4148
+ url: string;
3776
4149
  /**
3777
- * Base currency code
4150
+ * Platform type
3778
4151
  */
3779
- currency: string;
4152
+ type: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3780
4153
  /**
3781
- * Data as of date (ISO 8601)
4154
+ * Canonical identifier in ACCOUNT_RE format (e.g., "icbc")
3782
4155
  */
3783
- asOf: string;
4156
+ canonical: string;
3784
4157
  /**
3785
- * Balances grouped by original currency
4158
+ * Suggested path segment canonical with first char uppercased (ACC_COMP_NAME_RE)
3786
4159
  */
3787
- byCurrency?: NetWorthByCurrencyDto;
4160
+ suggestedSegment: string;
3788
4161
  /**
3789
- * Converted values in base currency (undefined if no exchange rates available)
4162
+ * Logo URL
3790
4163
  */
3791
- converted?: ConvertedNetWorthDto;
4164
+ logoUrl: string | null;
3792
4165
  /**
3793
- * Exchange rate warnings
4166
+ * Whether user has accounts using this platform
3794
4167
  */
3795
- warnings?: Array<ExchangeRateWarningDto>;
4168
+ isBound: boolean;
3796
4169
  };
3797
- type AccountItemDto = {
4170
+ /**
4171
+ * Platform type
4172
+ */
4173
+ type type3 = 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
4174
+ type PlatformMatchResultDto = {
3798
4175
  /**
3799
- * Account ID
4176
+ * Global platform ID
3800
4177
  */
3801
4178
  id: string;
3802
4179
  /**
3803
- * Full account name
4180
+ * Platform name (e.g., "ICBC")
3804
4181
  */
3805
4182
  name: string;
3806
4183
  /**
3807
- * Display name (last part of account path)
3808
- */
3809
- displayName: string;
3810
- /**
3811
- * Account balance
3812
- */
3813
- balance: string;
3814
- /**
3815
- * Currency code
4184
+ * Canonical identifier in ACCOUNT_RE format (e.g., "icbc")
3816
4185
  */
3817
- currency: string;
3818
- };
3819
- type PlatformGroupDto = {
4186
+ canonical: string;
3820
4187
  /**
3821
- * Platform ID
4188
+ * Platform type
3822
4189
  */
3823
- platformId: string;
4190
+ type: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3824
4191
  /**
3825
- * Platform display name
4192
+ * Suggested path segment — canonical, already in ACCOUNT_RE format
3826
4193
  */
3827
- platformName: string;
4194
+ suggestedSegment: string;
3828
4195
  /**
3829
- * Accounts within this platform
4196
+ * Logo URL
3830
4197
  */
3831
- accounts: Array<AccountItemDto>;
4198
+ logoUrl: string | null;
3832
4199
  /**
3833
- * Total balance across all accounts in platform
4200
+ * How this row matched: 'exact' > 'prefix' > 'substring'
3834
4201
  */
3835
- totalBalance: string;
4202
+ matchType: 'exact' | 'prefix' | 'substring';
3836
4203
  };
3837
- type AccountsSummaryDto = {
4204
+ /**
4205
+ * How this row matched: 'exact' > 'prefix' > 'substring'
4206
+ */
4207
+ type matchType = 'exact' | 'prefix' | 'substring';
4208
+ type PlatformMatchResponseDto = {
3838
4209
  /**
3839
- * Total number of accounts
4210
+ * Ranked matches, best tier first (at most 10 rows)
3840
4211
  */
3841
- totalAccounts: number;
4212
+ platforms: Array<PlatformMatchResultDto>;
3842
4213
  /**
3843
- * Total number of platforms
4214
+ * Overall match quality — top row's tier, or 'none' when no hits
3844
4215
  */
3845
- totalPlatforms: number;
3846
- };
3847
- type AccountsResponseDto = {
4216
+ matchType: 'none' | 'exact' | 'prefix' | 'substring';
3848
4217
  /**
3849
- * Account groups by platform
4218
+ * Total matches before LIMIT (truncation transparency)
3850
4219
  */
3851
- groups: Array<PlatformGroupDto>;
4220
+ total: number;
3852
4221
  /**
3853
- * Summary statistics
4222
+ * true when total > platforms.length (more matches exist)
3854
4223
  */
3855
- summary: AccountsSummaryDto;
4224
+ hasMore: boolean;
3856
4225
  };
3857
- type AccountItemWithAssetClassDto = {
3858
- /**
3859
- * Account ID
3860
- */
3861
- id: string;
4226
+ /**
4227
+ * Overall match quality — top row's tier, or 'none' when no hits
4228
+ */
4229
+ type matchType2 = 'none' | 'exact' | 'prefix' | 'substring';
4230
+ type CreatePlatformDto = {
3862
4231
  /**
3863
- * Full account name
4232
+ * Platform name
3864
4233
  */
3865
4234
  name: string;
3866
4235
  /**
3867
- * Display name (last part of account path)
4236
+ * Platform canonical identifier (lowercase, kebab-case)
3868
4237
  */
3869
- displayName: string;
4238
+ canonical: string;
3870
4239
  /**
3871
- * Account balance
4240
+ * Platform aliases (multi-language names for lookup)
3872
4241
  */
3873
- balance: string;
4242
+ aliases: Array<string>;
3874
4243
  /**
3875
- * Currency code
4244
+ * Platform URL
3876
4245
  */
3877
- currency: string;
4246
+ url: string;
3878
4247
  /**
3879
- * Asset class
4248
+ * Platform type
3880
4249
  */
3881
- assetClass: string;
4250
+ type: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3882
4251
  /**
3883
- * Asset sub-class (Prisma-compatible)
4252
+ * Platform logo URL
3884
4253
  */
3885
- assetSubClass?: string;
4254
+ logoUrl?: string;
3886
4255
  /**
3887
- * Regional sub-class (region-specific, for display)
4256
+ * Whether the platform is active
3888
4257
  */
3889
- regionalSubClass?: string;
4258
+ isActive?: boolean;
4259
+ };
4260
+ type UpdatePlatformDto = {
3890
4261
  /**
3891
- * Risk level
4262
+ * Platform name
3892
4263
  */
3893
- riskLevel?: string;
4264
+ name?: string;
3894
4265
  /**
3895
- * ADR-0105 classification provenance (holding level always; account level only on FALLBACK)
4266
+ * Platform canonical identifier (lowercase, kebab-case)
3896
4267
  */
3897
- source?: 'USER_META' | 'FIAT_CURRENCY' | 'OPENBB_MAPPING' | 'FALLBACK';
3898
- };
3899
- /**
3900
- * ADR-0105 classification provenance (holding level always; account level only on FALLBACK)
3901
- */
3902
- type source2 = 'USER_META' | 'FIAT_CURRENCY' | 'OPENBB_MAPPING' | 'FALLBACK';
3903
- type AssetClassGroupDto = {
4268
+ canonical?: string;
3904
4269
  /**
3905
- * Asset class name
4270
+ * Platform aliases (multi-language names for lookup)
3906
4271
  */
3907
- assetClass: 'LIQUIDITY' | 'EQUITY' | 'FIXED_INCOME' | 'PRECIOUS_METALS' | 'COMMODITY' | 'INSURANCE' | 'ALTERNATIVE_INVESTMENT' | 'PERSONAL_ASSETS' | 'LIABILITY' | 'REAL_ESTATE' | 'INDEX';
4272
+ aliases?: Array<string>;
3908
4273
  /**
3909
- * Asset sub-class name
4274
+ * Platform URL
3910
4275
  */
3911
- assetSubClass?: string;
4276
+ url?: string;
3912
4277
  /**
3913
- * Accounts within this asset class
4278
+ * Platform type
3914
4279
  */
3915
- accounts: Array<AccountItemWithAssetClassDto>;
4280
+ type?: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3916
4281
  /**
3917
- * Balances grouped by currency
4282
+ * Platform logo URL
3918
4283
  */
3919
- balanceByCurrency: Array<BalanceByCurrencyDto>;
4284
+ logoUrl?: string;
3920
4285
  /**
3921
- * Converted balance in base currency
4286
+ * Whether the platform is active
3922
4287
  */
3923
- convertedBalance?: string;
4288
+ isActive?: boolean;
3924
4289
  };
3925
- /**
3926
- * Asset class name
3927
- */
3928
- type assetClass = 'LIQUIDITY' | 'EQUITY' | 'FIXED_INCOME' | 'PRECIOUS_METALS' | 'COMMODITY' | 'INSURANCE' | 'ALTERNATIVE_INVESTMENT' | 'PERSONAL_ASSETS' | 'LIABILITY' | 'REAL_ESTATE' | 'INDEX';
3929
- type AccountExchangeRateWarningDto = {
3930
- /**
3931
- * Warning type
3932
- */
3933
- type: string;
4290
+ type NetWorthByCurrencyDto = {
3934
4291
  /**
3935
- * Currency without exchange rate
4292
+ * Net worth by currency
3936
4293
  */
3937
- currency: string;
4294
+ netWorth: Array<BalanceByCurrencyDto>;
3938
4295
  /**
3939
- * Affected account paths
4296
+ * Assets by currency
3940
4297
  */
3941
- accounts: Array<string>;
4298
+ assets: Array<BalanceByCurrencyDto>;
3942
4299
  /**
3943
- * Total amount in this currency
4300
+ * Liabilities by currency
3944
4301
  */
3945
- totalAmount: string;
4302
+ liabilities: Array<BalanceByCurrencyDto>;
3946
4303
  };
3947
- type AssetClassSummaryDto = {
4304
+ type ConvertedNetWorthDto = {
3948
4305
  /**
3949
- * Total number of accounts
4306
+ * Base currency for conversion
3950
4307
  */
3951
- totalAccounts: number;
4308
+ baseCurrency: string;
3952
4309
  /**
3953
- * Total number of asset classes
4310
+ * Converted net worth
3954
4311
  */
3955
- totalAssetClasses: number;
4312
+ netWorth: string;
3956
4313
  /**
3957
- * Base currency for conversion
4314
+ * Converted assets
3958
4315
  */
3959
- baseCurrency: string;
4316
+ assets: string;
3960
4317
  /**
3961
- * Exchange rate warnings
4318
+ * Converted liabilities
3962
4319
  */
3963
- warnings?: Array<AccountExchangeRateWarningDto>;
4320
+ liabilities: string;
3964
4321
  /**
3965
- * ADR-0105 §4 fallback provenance stats (holding level only). valueRatio is the grey-area share of total converted value; count is the number of source=FALLBACK holdings.
4322
+ * Exchange rates used for conversion
3966
4323
  */
3967
- fallback?: {
4324
+ exchangeRates: {
3968
4325
  [key: string]: unknown;
3969
4326
  };
3970
4327
  };
3971
- type AssetClassAccountsResponseDto = {
4328
+ type NetWorthResponseDto = {
3972
4329
  /**
3973
- * Account groups by asset class
4330
+ * Total net worth (assets - liabilities, converted to base currency)
3974
4331
  */
3975
- groups: Array<AssetClassGroupDto>;
4332
+ netWorth: string;
3976
4333
  /**
3977
- * Summary statistics
4334
+ * Total assets value (converted)
3978
4335
  */
3979
- summary: AssetClassSummaryDto;
4336
+ assets: string;
3980
4337
  /**
3981
- * ADR-0105 §6 holding-level grey-area bucket (source=FALLBACK holdings peeled out of groups). Present only for groupBy=holdingAssetClass when FALLBACK holdings exist.
4338
+ * Total liabilities value (positive number, converted)
3982
4339
  */
3983
- uncategorized?: AssetClassGroupDto;
3984
- };
3985
- type HoldingAssetClassAccountSliceDto = {
4340
+ liabilities: string;
3986
4341
  /**
3987
- * Account ID
4342
+ * Monthly return (change from last month)
3988
4343
  */
3989
- accountId: string;
4344
+ monthlyReturn: string;
3990
4345
  /**
3991
- * Full account path
4346
+ * Monthly return percentage
3992
4347
  */
3993
- accountPath: string;
4348
+ monthlyReturnPercentage: string;
3994
4349
  /**
3995
- * Currency of the holding with the largest converted base value; undefined when no holding is convertible
4350
+ * Base currency code
3996
4351
  */
3997
- accountCurrency?: string;
4352
+ currency: string;
3998
4353
  /**
3999
- * Account's market value in base currency (Σ converted holdings; grey bucket included)
4354
+ * Data as of date (ISO 8601)
4000
4355
  */
4001
- marketValueBase: string;
4356
+ asOf: string;
4002
4357
  /**
4003
- * Share of the global total (0-100). 0 when globalTotal is zero (no NaN/Infinity).
4358
+ * Balances grouped by original currency
4004
4359
  */
4005
- shareOfTotalPct: number;
4360
+ byCurrency?: NetWorthByCurrencyDto;
4006
4361
  /**
4007
- * Per-account asset-class breakdown
4362
+ * Converted values in base currency (undefined if no exchange rates available)
4008
4363
  */
4009
- groups: Array<AssetClassGroupDto>;
4364
+ converted?: ConvertedNetWorthDto;
4010
4365
  /**
4011
- * Per-account grey bucket (source=FALLBACK holdings, incl. broker cash)
4366
+ * Exchange rate warnings
4012
4367
  */
4013
- uncategorized?: AssetClassGroupDto;
4368
+ warnings?: Array<ExchangeRateWarningDto>;
4369
+ };
4370
+ type AccountItemDto = {
4014
4371
  /**
4015
- * Every holding row for this account (account ID in each row’s `id` field)
4372
+ * Account ID
4016
4373
  */
4017
- holdings: Array<AccountItemWithAssetClassDto>;
4018
- };
4019
- type HoldingAssetClassCrossAccountResponseDto = {
4374
+ id: string;
4020
4375
  /**
4021
- * Merged cross-account holding aggregation
4376
+ * Full account name
4022
4377
  */
4023
- global: AssetClassAccountsResponseDto;
4378
+ name: string;
4024
4379
  /**
4025
- * Per-account slices
4380
+ * Display name (last part of account path)
4026
4381
  */
4027
- byAccount: Array<HoldingAssetClassAccountSliceDto>;
4028
- };
4029
- type CashFlowByCurrencyDto = {
4382
+ displayName: string;
4030
4383
  /**
4031
- * Income by currency
4384
+ * Account balance
4032
4385
  */
4033
- income: Array<BalanceByCurrencyDto>;
4386
+ balance: string;
4034
4387
  /**
4035
- * Expense by currency
4388
+ * Currency code
4036
4389
  */
4037
- expense: Array<BalanceByCurrencyDto>;
4390
+ currency: string;
4038
4391
  /**
4039
- * Net savings by currency
4392
+ * FX-converted balance in base currency; omitted when not convertible
4040
4393
  */
4041
- netSavings: Array<BalanceByCurrencyDto>;
4394
+ convertedBalance?: string;
4042
4395
  };
4043
- type ConvertedCashFlowDto = {
4396
+ type PlatformGroupDto = {
4044
4397
  /**
4045
- * Base currency for conversion
4398
+ * Platform ID
4046
4399
  */
4047
- baseCurrency: string;
4400
+ platformId: string;
4048
4401
  /**
4049
- * Converted income
4402
+ * Platform display name
4050
4403
  */
4051
- income: string;
4404
+ platformName: string;
4052
4405
  /**
4053
- * Converted expense
4406
+ * Accounts within this platform
4054
4407
  */
4055
- expense: string;
4408
+ accounts: Array<AccountItemDto>;
4056
4409
  /**
4057
- * Converted net savings
4410
+ * FX-converted total balance in base currency
4058
4411
  */
4059
- netSavings: string;
4412
+ totalBalance: string;
4060
4413
  /**
4061
- * Exchange rates used for conversion
4414
+ * Raw (unconverted) balances grouped by currency
4062
4415
  */
4063
- exchangeRates: {
4064
- [key: string]: unknown;
4065
- };
4066
- };
4067
- type CashFlowResponseDto = {
4416
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
4068
4417
  /**
4069
- * Period identifier (YYYY-MM)
4418
+ * Converted balance in base currency (omitted when no currency is convertible)
4070
4419
  */
4071
- period: string;
4420
+ convertedBalance?: string;
4072
4421
  /**
4073
- * Total income for the period (converted)
4422
+ * Share of the grand converted total (0-100); 0 when grand total is 0
4074
4423
  */
4075
- income: string;
4424
+ sharePct: number;
4425
+ };
4426
+ type AccountExchangeRateWarningDto = {
4076
4427
  /**
4077
- * Total expenses for the period (converted)
4428
+ * Warning type
4078
4429
  */
4079
- expense: string;
4430
+ type: string;
4080
4431
  /**
4081
- * Net savings (income - expense, converted)
4432
+ * Currency without exchange rate
4082
4433
  */
4083
- netSavings: string;
4434
+ currency: string;
4084
4435
  /**
4085
- * Savings rate percentage (netSavings / income * 100)
4436
+ * Affected account paths
4086
4437
  */
4087
- savingsRate: string;
4438
+ accounts: Array<string>;
4088
4439
  /**
4089
- * Base currency code
4440
+ * Total amount in this currency
4090
4441
  */
4091
- currency: string;
4442
+ totalAmount: string;
4443
+ };
4444
+ type AccountsSummaryDto = {
4092
4445
  /**
4093
- * Cash flow grouped by original currency
4446
+ * Total number of accounts
4094
4447
  */
4095
- byCurrency?: CashFlowByCurrencyDto;
4448
+ totalAccounts: number;
4096
4449
  /**
4097
- * Converted values in base currency
4450
+ * Total number of platforms
4098
4451
  */
4099
- converted?: ConvertedCashFlowDto;
4452
+ totalPlatforms: number;
4100
4453
  /**
4101
- * Exchange rate warnings
4454
+ * Base currency for conversion
4102
4455
  */
4103
- warnings?: Array<ExchangeRateWarningDto>;
4104
- };
4105
- type CategoryGroupDto = {
4456
+ baseCurrency: string;
4106
4457
  /**
4107
- * Functional category (account-path Group segment); regional and universal account paths merge under it
4458
+ * Per-account exchange rate warnings
4108
4459
  */
4109
- category: string;
4460
+ warnings?: Array<AccountExchangeRateWarningDto>;
4461
+ };
4462
+ type AccountsResponseDto = {
4110
4463
  /**
4111
- * Converted total expense in base currency
4464
+ * Account groups by platform
4112
4465
  */
4113
- totalExpense: string;
4466
+ groups: Array<PlatformGroupDto>;
4114
4467
  /**
4115
- * Share of grand total (0-100); 0 when grand total is 0
4468
+ * Summary statistics
4116
4469
  */
4117
- sharePct: number;
4470
+ summary: AccountsSummaryDto;
4471
+ };
4472
+ type AccountItemWithAssetClassDto = {
4118
4473
  /**
4119
- * Raw (unconverted) expense per currency
4474
+ * Account ID
4120
4475
  */
4121
- balanceByCurrency: Array<BalanceByCurrencyDto>;
4476
+ id: string;
4122
4477
  /**
4123
- * Converted total in base currency (omitted when FX missing for all currencies in this category)
4478
+ * Full account name
4124
4479
  */
4125
- convertedBalance?: string;
4126
- };
4127
- type ExpensesByCategorySummaryDto = {
4480
+ name: string;
4128
4481
  /**
4129
- * Total expense across all categories (converted; convertible categories only)
4482
+ * Display name (last part of account path)
4130
4483
  */
4131
- totalExpense: string;
4484
+ displayName: string;
4132
4485
  /**
4133
- * Number of categories
4486
+ * Account balance
4134
4487
  */
4135
- categoryCount: number;
4136
- };
4137
- type ExpensesByCategoryResponseDto = {
4488
+ balance: string;
4138
4489
  /**
4139
- * Period requested
4490
+ * Currency code
4140
4491
  */
4141
- period: string;
4492
+ currency: string;
4142
4493
  /**
4143
- * Base currency for converted values
4494
+ * FX-converted balance in base currency; omitted when not convertible
4144
4495
  */
4145
- baseCurrency: string;
4496
+ convertedBalance?: string;
4146
4497
  /**
4147
- * Expense groups by functional category, sorted by converted total desc
4498
+ * Asset class
4148
4499
  */
4149
- groups: Array<CategoryGroupDto>;
4500
+ assetClass: string;
4150
4501
  /**
4151
- * Summary statistics
4502
+ * Asset sub-class (Prisma-compatible)
4152
4503
  */
4153
- summary: ExpensesByCategorySummaryDto;
4504
+ assetSubClass?: string;
4154
4505
  /**
4155
- * Exchange rate warnings (e.g. missing rate for a currency)
4506
+ * Regional sub-class (region-specific, for display)
4156
4507
  */
4157
- warnings?: Array<ExchangeRateWarningDto>;
4158
- };
4159
- type MonetaryDto = {
4508
+ regionalSubClass?: string;
4160
4509
  /**
4161
- * Amount (Decimal string)
4510
+ * Risk level
4162
4511
  */
4163
- amount: string;
4512
+ riskLevel?: string;
4164
4513
  /**
4165
- * ISO 4217 currency
4514
+ * ADR-0105 classification provenance (holding level always; account level only on FALLBACK)
4166
4515
  */
4167
- currency: string;
4516
+ source?: 'USER_META' | 'FIAT_CURRENCY' | 'OPENBB_MAPPING' | 'FALLBACK';
4517
+ };
4518
+ /**
4519
+ * ADR-0105 classification provenance (holding level always; account level only on FALLBACK)
4520
+ */
4521
+ type source2 = 'USER_META' | 'FIAT_CURRENCY' | 'OPENBB_MAPPING' | 'FALLBACK';
4522
+ type AssetClassGroupDto = {
4168
4523
  /**
4169
- * Converted to user base currency (Decimal string)
4524
+ * Asset class name
4170
4525
  */
4171
- baseCcyEquivalent?: {
4172
- [key: string]: unknown;
4173
- } | null;
4174
- };
4175
- type CurrentPriceDto = {
4526
+ assetClass: 'LIQUIDITY' | 'EQUITY' | 'FIXED_INCOME' | 'PRECIOUS_METALS' | 'COMMODITY' | 'INSURANCE' | 'ALTERNATIVE_INVESTMENT' | 'PERSONAL_ASSETS' | 'LIABILITY' | 'REAL_ESTATE' | 'INDEX';
4176
4527
  /**
4177
- * Price amount (Decimal string)
4528
+ * Asset sub-class name
4178
4529
  */
4179
- amount: string;
4530
+ assetSubClass?: string;
4180
4531
  /**
4181
- * Price currency (ISO 4217)
4532
+ * Accounts within this asset class
4182
4533
  */
4183
- currency: string;
4534
+ accounts: Array<AccountItemWithAssetClassDto>;
4184
4535
  /**
4185
- * Price date (ISO 8601)
4536
+ * Balances grouped by currency
4186
4537
  */
4187
- date: string;
4538
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
4188
4539
  /**
4189
- * Price source
4540
+ * Converted balance in base currency
4190
4541
  */
4191
- source: 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4542
+ convertedBalance?: string;
4192
4543
  };
4193
4544
  /**
4194
- * Price source
4545
+ * Asset class name
4195
4546
  */
4196
- type source3 = 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4197
- type FxRateDto = {
4198
- from: string;
4199
- to: string;
4200
- /**
4201
- * FX rate (Decimal string)
4202
- */
4203
- rate: string;
4547
+ type assetClass = 'LIQUIDITY' | 'EQUITY' | 'FIXED_INCOME' | 'PRECIOUS_METALS' | 'COMMODITY' | 'INSURANCE' | 'ALTERNATIVE_INVESTMENT' | 'PERSONAL_ASSETS' | 'LIABILITY' | 'REAL_ESTATE' | 'INDEX';
4548
+ type AssetClassSummaryDto = {
4204
4549
  /**
4205
- * Rate date (ISO 8601)
4550
+ * Total number of accounts
4206
4551
  */
4207
- date: string;
4208
- };
4209
- type HoldingPnlRowDto = {
4552
+ totalAccounts: number;
4210
4553
  /**
4211
- * Account UUID
4554
+ * Total number of asset classes
4212
4555
  */
4213
- accountId: string;
4556
+ totalAssetClasses: number;
4214
4557
  /**
4215
- * Full account path
4558
+ * Base currency for conversion
4216
4559
  */
4217
- accountPath: string;
4560
+ baseCurrency: string;
4218
4561
  /**
4219
- * Account settlement currency (ISO 4217), from cost currency
4562
+ * Exchange rate warnings
4220
4563
  */
4221
- accountCcy?: {
4222
- [key: string]: unknown;
4223
- } | null;
4564
+ warnings?: Array<AccountExchangeRateWarningDto>;
4224
4565
  /**
4225
- * Broker type derived from Platform.type
4566
+ * ADR-0105 §4 fallback provenance stats (holding level only). valueRatio is the grey-area share of total converted value; count is the number of source=FALLBACK holdings.
4226
4567
  */
4227
- brokerType?: {
4568
+ fallback?: {
4228
4569
  [key: string]: unknown;
4229
- } | null;
4570
+ };
4571
+ };
4572
+ type AssetClassAccountsResponseDto = {
4230
4573
  /**
4231
- * Commodity symbol
4574
+ * Account groups by asset class
4232
4575
  */
4233
- symbol: string;
4576
+ groups: Array<AssetClassGroupDto>;
4234
4577
  /**
4235
- * Chart segment token (libs/common resolver)
4578
+ * Summary statistics
4236
4579
  */
4237
- chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4238
- assetClass: string;
4239
- assetSubClass?: {
4240
- [key: string]: unknown;
4241
- } | null;
4580
+ summary: AssetClassSummaryDto;
4242
4581
  /**
4243
- * Net held units (Decimal string)
4582
+ * ADR-0105 §6 holding-level grey-area bucket (source=FALLBACK holdings peeled out of groups). Present only for groupBy=holdingAssetClass when FALLBACK holdings exist.
4244
4583
  */
4245
- units: string;
4584
+ uncategorized?: AssetClassGroupDto;
4585
+ };
4586
+ type HoldingAssetClassAccountSliceDto = {
4246
4587
  /**
4247
- * Average cost per unit; null when cost currency conflicts or no cost
4588
+ * Account ID
4248
4589
  */
4249
- averageCostPerUnit?: MonetaryDto | null;
4590
+ accountId: string;
4250
4591
  /**
4251
- * Cost basis of held units
4592
+ * Full account path
4252
4593
  */
4253
- costBasis?: MonetaryDto | null;
4594
+ accountPath: string;
4254
4595
  /**
4255
- * Market value at asOf price
4596
+ * Currency of the holding with the largest converted base value; undefined when no holding is convertible
4256
4597
  */
4257
- marketValue?: MonetaryDto | null;
4598
+ accountCurrency?: string;
4258
4599
  /**
4259
- * Price used for market value
4600
+ * Account's market value in base currency (Σ converted holdings; grey bucket included)
4260
4601
  */
4261
- currentPrice?: CurrentPriceDto | null;
4602
+ marketValueBase: string;
4262
4603
  /**
4263
- * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
4604
+ * Share of the global total (0-100). 0 when globalTotal is zero (no NaN/Infinity).
4264
4605
  */
4265
- unrealizedPnlBase?: {
4266
- [key: string]: unknown;
4267
- } | null;
4606
+ shareOfTotalPct: number;
4268
4607
  /**
4269
- * Unrealized P&L % (Decimal string)
4608
+ * Per-account asset-class breakdown
4270
4609
  */
4271
- unrealizedPnlPct?: {
4272
- [key: string]: unknown;
4273
- } | null;
4610
+ groups: Array<AssetClassGroupDto>;
4274
4611
  /**
4275
- * Historical FX rate applied to cost basis
4612
+ * Per-account grey bucket (source=FALLBACK holdings, incl. broker cash)
4276
4613
  */
4277
- costFxRate?: FxRateDto | null;
4614
+ uncategorized?: AssetClassGroupDto;
4278
4615
  /**
4279
- * FX rate applied to market value
4616
+ * Every holding row for this account (account ID in each row’s `id` field)
4280
4617
  */
4281
- marketFxRate?: FxRateDto | null;
4618
+ holdings: Array<AccountItemWithAssetClassDto>;
4619
+ };
4620
+ type HoldingAssetClassCrossAccountResponseDto = {
4282
4621
  /**
4283
- * Share of invested assets % (Decimal string); only for invested chartTokens
4622
+ * Merged cross-account holding aggregation
4284
4623
  */
4285
- pctOfInvestedAssets?: {
4286
- [key: string]: unknown;
4287
- } | null;
4624
+ global: AssetClassAccountsResponseDto;
4288
4625
  /**
4289
- * Cumulative realized P&L on sold lots (asOf-date cutoff); null when the method has no applicable sells, a sell lacks a price, or any required FX rate is missing (never-mix). When a sell spans multiple currencies (cross-currency sale), amount and currency reflect the base currency; baseCcyEquivalent is always the authoritative dual-FX figure
4626
+ * Per-account slices
4290
4627
  */
4291
- realizedPnl?: MonetaryDto | null;
4628
+ byAccount: Array<HoldingAssetClassAccountSliceDto>;
4292
4629
  };
4293
- /**
4294
- * Chart segment token (libs/common resolver)
4295
- */
4296
- type chartToken = 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4297
- type HoldingPnlWarningDto = {
4630
+ type CashFlowByCurrencyDto = {
4298
4631
  /**
4299
- * Warning type
4632
+ * Income by currency
4300
4633
  */
4301
- type: 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4302
- symbol?: {
4303
- [key: string]: unknown;
4304
- } | null;
4305
- accountId?: {
4306
- [key: string]: unknown;
4307
- } | null;
4308
- currency?: {
4309
- [key: string]: unknown;
4310
- } | null;
4311
- };
4312
- /**
4313
- * Warning type
4314
- */
4315
- type type4 = 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4316
- type HoldingPnlResponseDto = {
4317
- asOfDate: string;
4318
- baseCurrency: string;
4634
+ income: Array<BalanceByCurrencyDto>;
4319
4635
  /**
4320
- * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4636
+ * Expense by currency
4321
4637
  */
4322
- method: 'average' | 'FIFO';
4323
- rows: Array<HoldingPnlRowDto>;
4324
- warnings: Array<HoldingPnlWarningDto>;
4638
+ expense: Array<BalanceByCurrencyDto>;
4639
+ /**
4640
+ * Net savings by currency
4641
+ */
4642
+ netSavings: Array<BalanceByCurrencyDto>;
4325
4643
  };
4326
- /**
4327
- * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4328
- */
4329
- type method = 'average' | 'FIFO';
4330
- type CreateBeanPriceDto = {
4644
+ type ConvertedCashFlowDto = {
4331
4645
  /**
4332
- * Currency being priced (e.g., USD, AAPL, BTC)
4646
+ * Base currency for conversion
4333
4647
  */
4334
- currency: string;
4648
+ baseCurrency: string;
4335
4649
  /**
4336
- * Quote currency (pricing currency, e.g., CNY, EUR)
4650
+ * Converted income
4337
4651
  */
4338
- quoteCurrency: string;
4652
+ income: string;
4339
4653
  /**
4340
- * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
4654
+ * Converted expense
4341
4655
  */
4342
- amount: number;
4656
+ expense: string;
4343
4657
  /**
4344
- * Price date (ISO 8601 format)
4658
+ * Converted net savings
4345
4659
  */
4346
- date: string;
4660
+ netSavings: string;
4347
4661
  /**
4348
- * Metadata (validated by Zod schema, max field lengths enforced)
4662
+ * Exchange rates used for conversion
4349
4663
  */
4350
- metadata?: {
4664
+ exchangeRates: {
4351
4665
  [key: string]: unknown;
4352
4666
  };
4353
4667
  };
4354
- type PriceResponseDto = {
4355
- /**
4356
- * Unique identifier
4357
- */
4358
- id: string;
4359
- /**
4360
- * User ID (owner of the price)
4361
- */
4362
- userId: string;
4668
+ type CashFlowResponseDto = {
4363
4669
  /**
4364
- * Currency being priced (e.g., USD, AAPL, BTC)
4670
+ * Period identifier (YYYY-MM)
4365
4671
  */
4366
- currency: string;
4672
+ period: string;
4367
4673
  /**
4368
- * Quote currency (pricing currency, e.g., USD, CNY)
4674
+ * Total income for the period (converted)
4369
4675
  */
4370
- quoteCurrency: string;
4676
+ income: string;
4371
4677
  /**
4372
- * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
4678
+ * Total expenses for the period (converted)
4373
4679
  */
4374
- amount: number;
4680
+ expense: string;
4375
4681
  /**
4376
- * Price date (ISO 8601 format). Represents the date this price was valid.
4682
+ * Net savings (income - expense, converted)
4377
4683
  */
4378
- date: string;
4684
+ netSavings: string;
4379
4685
  /**
4380
- * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
4686
+ * Savings rate percentage (netSavings / income * 100)
4381
4687
  */
4382
- meta: {
4383
- [key: string]: unknown;
4384
- };
4688
+ savingsRate: string;
4385
4689
  /**
4386
- * Creation timestamp
4690
+ * Base currency code
4387
4691
  */
4388
- createdAt: string;
4692
+ currency: string;
4389
4693
  /**
4390
- * Last update timestamp
4694
+ * Cash flow grouped by original currency
4391
4695
  */
4392
- updatedAt: string;
4393
- };
4394
- type PriceListResponseDto = {
4696
+ byCurrency?: CashFlowByCurrencyDto;
4395
4697
  /**
4396
- * List of prices
4698
+ * Converted values in base currency
4397
4699
  */
4398
- items: Array<PriceResponseDto>;
4700
+ converted?: ConvertedCashFlowDto;
4399
4701
  /**
4400
- * Total number of prices
4702
+ * Exchange rate warnings
4401
4703
  */
4402
- total: number;
4704
+ warnings?: Array<ExchangeRateWarningDto>;
4403
4705
  };
4404
- type UpdateBeanPriceDto = {
4706
+ type CategoryGroupDto = {
4405
4707
  /**
4406
- * Currency being priced
4708
+ * Functional category (account-path Group segment); regional and universal account paths merge under it
4407
4709
  */
4408
- currency?: string;
4710
+ category: string;
4409
4711
  /**
4410
- * Quote currency (pricing currency)
4712
+ * Converted total for this category in base currency (expense amount when flow=expense, income amount when flow=income)
4411
4713
  */
4412
- quoteCurrency?: string;
4714
+ totalExpense: string;
4413
4715
  /**
4414
- * Price amount (MUST be >= 0 per Beancount spec)
4716
+ * Share of grand total (0-100); 0 when grand total is 0
4415
4717
  */
4416
- amount?: number;
4718
+ sharePct: number;
4417
4719
  /**
4418
- * Price date (ISO 8601 format)
4720
+ * Raw (unconverted) expense per currency
4419
4721
  */
4420
- date?: string;
4722
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
4421
4723
  /**
4422
- * Metadata
4724
+ * Converted total in base currency (omitted when FX missing for all currencies in this category)
4423
4725
  */
4424
- metadata?: {
4425
- [key: string]: unknown;
4426
- };
4726
+ convertedBalance?: string;
4427
4727
  };
4428
- type CurrencyBalanceDto = {
4728
+ type ExpensesByCategorySummaryDto = {
4429
4729
  /**
4430
- * ISO 4217 currency code
4730
+ * Total across all categories, converted (convertible categories only); expense totals when flow=expense, income totals when flow=income
4431
4731
  */
4432
- currency: string;
4732
+ totalExpense: string;
4433
4733
  /**
4434
- * Balance amount
4734
+ * Number of categories
4435
4735
  */
4436
- balance: string;
4736
+ categoryCount: number;
4437
4737
  };
4438
- type TimeSeriesPointDto = {
4439
- /**
4440
- * Date in YYYY-MM-DD format
4441
- */
4442
- date: string;
4738
+ type ExpensesByCategoryResponseDto = {
4443
4739
  /**
4444
- * Value at this date (in base currency)
4740
+ * Period requested
4445
4741
  */
4446
- value: string;
4742
+ period: string;
4447
4743
  /**
4448
- * Change from previous point
4744
+ * Base currency for converted values
4449
4745
  */
4450
- change?: {
4451
- [key: string]: unknown;
4452
- };
4746
+ baseCurrency: string;
4453
4747
  /**
4454
- * Total assets at this date (in base currency)
4748
+ * Expense groups by functional category, sorted by converted total desc
4455
4749
  */
4456
- assets?: string;
4750
+ groups: Array<CategoryGroupDto>;
4457
4751
  /**
4458
- * Total liabilities at this date (in base currency)
4752
+ * Summary statistics
4459
4753
  */
4460
- liabilities?: string;
4754
+ summary: ExpensesByCategorySummaryDto;
4461
4755
  /**
4462
- * Multi-currency breakdown for this point
4756
+ * Exchange rate warnings (e.g. missing rate for a currency)
4463
4757
  */
4464
- byCurrency?: Array<CurrencyBalanceDto>;
4758
+ warnings?: Array<ExchangeRateWarningDto>;
4465
4759
  };
4466
- type TrendSummaryDto = {
4760
+ type MonetaryDto = {
4761
+ /**
4762
+ * Amount (Decimal string)
4763
+ */
4764
+ amount: string;
4467
4765
  /**
4468
- * Value at start of period
4766
+ * ISO 4217 currency
4469
4767
  */
4470
- startValue: string;
4768
+ currency: string;
4471
4769
  /**
4472
- * Value at end of period
4770
+ * Converted to user base currency (Decimal string)
4473
4771
  */
4474
- endValue: string;
4772
+ baseCcyEquivalent?: {
4773
+ [key: string]: unknown;
4774
+ } | null;
4775
+ };
4776
+ type CurrentPriceDto = {
4475
4777
  /**
4476
- * Total change over period
4778
+ * Price amount (Decimal string)
4477
4779
  */
4478
- totalChange: string;
4780
+ amount: string;
4479
4781
  /**
4480
- * Total change percentage
4782
+ * Price currency (ISO 4217)
4481
4783
  */
4482
- totalChangePercentage: string;
4483
- };
4484
- type MultiCurrencyPointDto = {
4784
+ currency: string;
4485
4785
  /**
4486
- * Date in YYYY-MM-DD format
4786
+ * Price date (ISO 8601)
4487
4787
  */
4488
4788
  date: string;
4489
4789
  /**
4490
- * Balances by currency
4790
+ * Price source
4491
4791
  */
4492
- byCurrency: Array<CurrencyBalanceDto>;
4792
+ source: 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4493
4793
  };
4494
- type PortfolioTrendsResponseDto = {
4794
+ /**
4795
+ * Price source
4796
+ */
4797
+ type source3 = 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4798
+ type FxRateDto = {
4799
+ from: string;
4800
+ to: string;
4495
4801
  /**
4496
- * Time series data points
4802
+ * FX rate (Decimal string)
4497
4803
  */
4498
- series: Array<TimeSeriesPointDto>;
4804
+ rate: string;
4499
4805
  /**
4500
- * Period summary
4806
+ * Rate date (ISO 8601)
4501
4807
  */
4502
- summary: TrendSummaryDto;
4808
+ date: string;
4809
+ };
4810
+ type HoldingPnlRowDto = {
4503
4811
  /**
4504
- * Period requested
4812
+ * Account UUID
4505
4813
  */
4506
- period: string;
4814
+ accountId: string;
4507
4815
  /**
4508
- * Data granularity
4816
+ * Full account path
4509
4817
  */
4510
- granularity: string;
4818
+ accountPath: string;
4511
4819
  /**
4512
- * Base currency for converted values
4820
+ * Account settlement currency (ISO 4217), from cost currency
4513
4821
  */
4514
- currency: string;
4822
+ accountCcy?: {
4823
+ [key: string]: unknown;
4824
+ } | null;
4515
4825
  /**
4516
- * Multi-currency time series (each point has currency breakdown)
4826
+ * Broker type derived from Platform.type
4517
4827
  */
4518
- byCurrency?: Array<MultiCurrencyPointDto>;
4828
+ brokerType?: {
4829
+ [key: string]: unknown;
4830
+ } | null;
4519
4831
  /**
4520
- * Exchange rate warnings
4832
+ * Commodity symbol
4521
4833
  */
4522
- warnings?: Array<ExchangeRateWarningDto>;
4523
- };
4524
- type CashFlowPointDto = {
4834
+ symbol: string;
4525
4835
  /**
4526
- * Month key (YYYY-MM)
4836
+ * Chart segment token (libs/common resolver)
4527
4837
  */
4528
- month: string;
4838
+ chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4839
+ assetClass: string;
4840
+ assetSubClass?: {
4841
+ [key: string]: unknown;
4842
+ } | null;
4529
4843
  /**
4530
- * Income in base currency (absolute, converted)
4844
+ * Net held units (Decimal string)
4531
4845
  */
4532
- income: string;
4846
+ units: string;
4533
4847
  /**
4534
- * Expense in base currency (absolute, converted)
4848
+ * Average cost per unit; null when cost currency conflicts or no cost
4535
4849
  */
4536
- expense: string;
4850
+ averageCostPerUnit?: MonetaryDto | null;
4537
4851
  /**
4538
- * netSavings = income expense (savings positive)
4852
+ * Cost basis of held units
4539
4853
  */
4540
- netSavings: string;
4541
- };
4542
- type CashFlowTrendSummaryDto = {
4854
+ costBasis?: MonetaryDto | null;
4543
4855
  /**
4544
- * Total income across the period
4856
+ * Market value at asOf price
4545
4857
  */
4546
- totalIncome: string;
4858
+ marketValue?: MonetaryDto | null;
4547
4859
  /**
4548
- * Total expense across the period
4860
+ * Price used for market value
4549
4861
  */
4550
- totalExpense: string;
4862
+ currentPrice?: CurrentPriceDto | null;
4551
4863
  /**
4552
- * income expense across the period
4864
+ * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
4553
4865
  */
4554
- totalNetSavings: string;
4866
+ unrealizedPnlBase?: {
4867
+ [key: string]: unknown;
4868
+ } | null;
4555
4869
  /**
4556
- * totalNetSavings divided by the window length (N months, incl. zero-filled)
4870
+ * Unrealized P&L % (Decimal string)
4557
4871
  */
4558
- averageMonthlyNetSavings: string;
4559
- };
4560
- type CashFlowTrendsResponseDto = {
4872
+ unrealizedPnlPct?: {
4873
+ [key: string]: unknown;
4874
+ } | null;
4561
4875
  /**
4562
- * Monthly cash-flow series (fixed N-month window, zero-filled)
4876
+ * Historical FX rate applied to cost basis
4563
4877
  */
4564
- series: Array<CashFlowPointDto>;
4878
+ costFxRate?: FxRateDto | null;
4565
4879
  /**
4566
- * Period totals
4880
+ * FX rate applied to market value
4567
4881
  */
4568
- summary: CashFlowTrendSummaryDto;
4882
+ marketFxRate?: FxRateDto | null;
4569
4883
  /**
4570
- * Period requested
4884
+ * Share of invested assets % (Decimal string); only for invested chartTokens
4571
4885
  */
4572
- period: string;
4886
+ pctOfInvestedAssets?: {
4887
+ [key: string]: unknown;
4888
+ } | null;
4573
4889
  /**
4574
- * Data granularity (v1 returns month buckets)
4890
+ * Cumulative realized P&L on sold lots (asOf-date cutoff); null when the method has no applicable sells, a sell lacks a price, or any required FX rate is missing (never-mix). When a sell spans multiple currencies (cross-currency sale), amount and currency reflect the base currency; baseCcyEquivalent is always the authoritative dual-FX figure
4575
4891
  */
4576
- granularity: string;
4892
+ realizedPnl?: MonetaryDto | null;
4893
+ };
4894
+ /**
4895
+ * Chart segment token (libs/common resolver)
4896
+ */
4897
+ type chartToken = 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4898
+ type HoldingPnlWarningDto = {
4577
4899
  /**
4578
- * Base currency for converted values
4900
+ * Warning type
4579
4901
  */
4580
- currency: string;
4902
+ type: 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4903
+ symbol?: {
4904
+ [key: string]: unknown;
4905
+ } | null;
4906
+ accountId?: {
4907
+ [key: string]: unknown;
4908
+ } | null;
4909
+ currency?: {
4910
+ [key: string]: unknown;
4911
+ } | null;
4912
+ };
4913
+ /**
4914
+ * Warning type
4915
+ */
4916
+ type type4 = 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4917
+ type HoldingPnlResponseDto = {
4918
+ asOfDate: string;
4919
+ baseCurrency: string;
4581
4920
  /**
4582
- * Exchange rate warnings (e.g. missing rate for a currency)
4921
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4583
4922
  */
4584
- warnings?: Array<ExchangeRateWarningDto>;
4923
+ method: 'average' | 'FIFO';
4924
+ rows: Array<HoldingPnlRowDto>;
4925
+ warnings: Array<HoldingPnlWarningDto>;
4585
4926
  };
4586
- type GenerateSnapshotBody = unknown;
4587
- type GenerateSnapshotResponse = unknown;
4588
- type BackfillSnapshotsBody = unknown;
4589
- type BackfillSnapshotsResponse = unknown;
4927
+ /**
4928
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4929
+ */
4930
+ type method = 'average' | 'FIFO';
4590
4931
  type AnonymousLoginDto = {
4591
4932
  /**
4592
4933
  * Access token for anonymous login
4593
4934
  */
4594
4935
  accessToken: string;
4595
4936
  };
4937
+ type AnonymousLoginResponseDto = {
4938
+ /**
4939
+ * JWT auth token
4940
+ */
4941
+ authToken: string;
4942
+ };
4596
4943
  type AccountControllerCreateData = {
4597
4944
  /**
4598
4945
  * Region code for tenant context
@@ -4619,7 +4966,7 @@ type AccountControllerFindAllData = {
4619
4966
  */
4620
4967
  region: 'cn' | 'us' | 'de' | 'gb';
4621
4968
  /**
4622
- * Search term for path or i18nKey
4969
+ * Search term for account path
4623
4970
  */
4624
4971
  search?: string;
4625
4972
  /**
@@ -4690,6 +5037,18 @@ type AccountControllerReopenData = {
4690
5037
  requestBody: ReopenAccountDto;
4691
5038
  };
4692
5039
  type AccountControllerReopenResponse = AccountResponseDto;
5040
+ type AccountControllerAddOpeningBalanceData = {
5041
+ /**
5042
+ * Account UUID
5043
+ */
5044
+ id: string;
5045
+ /**
5046
+ * Region code for tenant context
5047
+ */
5048
+ region: 'cn' | 'us' | 'de' | 'gb';
5049
+ requestBody: CreateOpeningBalanceDto;
5050
+ };
5051
+ type AccountControllerAddOpeningBalanceResponse = OpeningBalanceResultDto;
4693
5052
  type AccountStandardsControllerGetTemplatesData = {
4694
5053
  /**
4695
5054
  * Region code (cn, us, de)
@@ -4851,7 +5210,7 @@ type TransactionControllerDeleteData = {
4851
5210
  type TransactionControllerDeleteResponse = void;
4852
5211
  type BalanceControllerGetBalanceData = {
4853
5212
  /**
4854
- * Account name (e.g., "Assets:Bank:Checking")
5213
+ * Account name (e.g., "Assets:Checking")
4855
5214
  */
4856
5215
  account: string;
4857
5216
  /**
@@ -5093,76 +5452,161 @@ type CommodityControllerCreateData = {
5093
5452
  * Region code for tenant context
5094
5453
  */
5095
5454
  region: 'cn' | 'us' | 'de' | 'gb';
5096
- requestBody: CreateCommodityDto;
5455
+ requestBody: CreateCommodityDto;
5456
+ };
5457
+ type CommodityControllerCreateResponse = CommodityResponseDto;
5458
+ type CommodityControllerFindAllData = {
5459
+ /**
5460
+ * Region code for tenant context
5461
+ */
5462
+ region: 'cn' | 'us' | 'de' | 'gb';
5463
+ /**
5464
+ * Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
5465
+ */
5466
+ search?: string;
5467
+ /**
5468
+ * Filter by exact symbol match
5469
+ */
5470
+ symbol?: string;
5471
+ };
5472
+ type CommodityControllerFindAllResponse = CommodityListResponseDto;
5473
+ type CommodityControllerFindOneData = {
5474
+ /**
5475
+ * Region code for tenant context
5476
+ */
5477
+ region: 'cn' | 'us' | 'de' | 'gb';
5478
+ /**
5479
+ * Commodity symbol
5480
+ */
5481
+ symbol: string;
5482
+ };
5483
+ type CommodityControllerFindOneResponse = CommodityResponseDto;
5484
+ type CommodityControllerUpdateData = {
5485
+ /**
5486
+ * Region code for tenant context
5487
+ */
5488
+ region: 'cn' | 'us' | 'de' | 'gb';
5489
+ requestBody: UpdateCommodityDto;
5490
+ /**
5491
+ * Commodity symbol
5492
+ */
5493
+ symbol: string;
5494
+ };
5495
+ type CommodityControllerUpdateResponse = CommodityResponseDto;
5496
+ type CommodityControllerDeleteData = {
5497
+ /**
5498
+ * Region code for tenant context
5499
+ */
5500
+ region: 'cn' | 'us' | 'de' | 'gb';
5501
+ /**
5502
+ * Commodity symbol
5503
+ */
5504
+ symbol: string;
5505
+ };
5506
+ type CommodityControllerDeleteResponse = void;
5507
+ type CommodityControllerGetOrCreateData = {
5508
+ /**
5509
+ * Region code for tenant context
5510
+ */
5511
+ region: 'cn' | 'us' | 'de' | 'gb';
5512
+ /**
5513
+ * Commodity symbol
5514
+ */
5515
+ symbol: string;
5516
+ };
5517
+ type CommodityControllerGetOrCreateResponse = CommodityResponseDto;
5518
+ type CommodityControllerBulkCreateData = {
5519
+ /**
5520
+ * Region code for tenant context
5521
+ */
5522
+ region: 'cn' | 'us' | 'de' | 'gb';
5097
5523
  };
5098
- type CommodityControllerCreateResponse = CommodityResponseDto;
5099
- type CommodityControllerFindAllData = {
5524
+ type CommodityControllerBulkCreateResponse = Array<CommodityResponseDto>;
5525
+ type PriceControllerCreateData = {
5100
5526
  /**
5101
5527
  * Region code for tenant context
5102
5528
  */
5103
5529
  region: 'cn' | 'us' | 'de' | 'gb';
5530
+ requestBody: CreateBeanPriceDto;
5531
+ };
5532
+ type PriceControllerCreateResponse = PriceResponseDto;
5533
+ type PriceControllerFindAllData = {
5104
5534
  /**
5105
- * Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
5535
+ * Filter by currency (e.g., BTC, AAPL, USD)
5106
5536
  */
5107
- search?: string;
5537
+ currency?: string;
5108
5538
  /**
5109
- * Filter by exact symbol match
5539
+ * Filter prices from this date (ISO 8601 format)
5110
5540
  */
5111
- symbol?: string;
5112
- };
5113
- type CommodityControllerFindAllResponse = CommodityListResponseDto;
5114
- type CommodityControllerFindOneData = {
5541
+ dateFrom?: string;
5115
5542
  /**
5116
- * Region code for tenant context
5543
+ * Filter prices to this date (ISO 8601 format)
5117
5544
  */
5118
- region: 'cn' | 'us' | 'de' | 'gb';
5545
+ dateTo?: string;
5119
5546
  /**
5120
- * Commodity symbol
5547
+ * Number of items per page (default: 20, max: 100)
5121
5548
  */
5122
- symbol: string;
5123
- };
5124
- type CommodityControllerFindOneResponse = CommodityResponseDto;
5125
- type CommodityControllerUpdateData = {
5549
+ limit?: number;
5550
+ /**
5551
+ * Page number for pagination (default: 1)
5552
+ */
5553
+ page?: number;
5554
+ /**
5555
+ * Filter by quote currency (pricing currency, e.g., USD, CNY)
5556
+ */
5557
+ quoteCurrency?: string;
5126
5558
  /**
5127
5559
  * Region code for tenant context
5128
5560
  */
5129
5561
  region: 'cn' | 'us' | 'de' | 'gb';
5130
- requestBody: UpdateCommodityDto;
5131
5562
  /**
5132
- * Commodity symbol
5563
+ * Search term for currency or quoteCurrency (case-insensitive partial match)
5133
5564
  */
5134
- symbol: string;
5565
+ search?: string;
5135
5566
  };
5136
- type CommodityControllerUpdateResponse = CommodityResponseDto;
5137
- type CommodityControllerDeleteData = {
5567
+ type PriceControllerFindAllResponse = PriceListResponseDto;
5568
+ type PriceControllerFindOneData = {
5569
+ /**
5570
+ * Price ID
5571
+ */
5572
+ id: string;
5138
5573
  /**
5139
5574
  * Region code for tenant context
5140
5575
  */
5141
5576
  region: 'cn' | 'us' | 'de' | 'gb';
5577
+ };
5578
+ type PriceControllerFindOneResponse = PriceResponseDto;
5579
+ type PriceControllerUpdateData = {
5142
5580
  /**
5143
- * Commodity symbol
5581
+ * Price ID
5144
5582
  */
5145
- symbol: string;
5146
- };
5147
- type CommodityControllerDeleteResponse = void;
5148
- type CommodityControllerGetOrCreateData = {
5583
+ id: string;
5149
5584
  /**
5150
5585
  * Region code for tenant context
5151
5586
  */
5152
5587
  region: 'cn' | 'us' | 'de' | 'gb';
5588
+ requestBody: UpdateBeanPriceDto;
5589
+ };
5590
+ type PriceControllerUpdateResponse = PriceResponseDto;
5591
+ type PriceControllerDeleteData = {
5153
5592
  /**
5154
- * Commodity symbol
5593
+ * Price ID
5155
5594
  */
5156
- symbol: string;
5595
+ id: string;
5596
+ /**
5597
+ * Region code for tenant context
5598
+ */
5599
+ region: 'cn' | 'us' | 'de' | 'gb';
5157
5600
  };
5158
- type CommodityControllerGetOrCreateResponse = CommodityResponseDto;
5159
- type CommodityControllerBulkCreateData = {
5601
+ type PriceControllerDeleteResponse = void;
5602
+ type PriceControllerBulkCreateData = {
5160
5603
  /**
5161
5604
  * Region code for tenant context
5162
5605
  */
5163
5606
  region: 'cn' | 'us' | 'de' | 'gb';
5607
+ requestBody: Array<string>;
5164
5608
  };
5165
- type CommodityControllerBulkCreateResponse = Array<CommodityResponseDto>;
5609
+ type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
5166
5610
  type RecurringRuleControllerCreateData = {
5167
5611
  /**
5168
5612
  * Region code for tenant context
@@ -5356,6 +5800,120 @@ type ForecastControllerGetForecastData = {
5356
5800
  region: 'cn' | 'us' | 'de' | 'gb';
5357
5801
  };
5358
5802
  type ForecastControllerGetForecastResponse = ForecastResponseDto;
5803
+ type ReportingControllerGetPortfolioTrendsData = {
5804
+ /**
5805
+ * Data granularity
5806
+ */
5807
+ granularity?: 'day' | 'week' | 'month';
5808
+ /**
5809
+ * Time period
5810
+ */
5811
+ period?: '1m' | '3m' | '6m' | '1y';
5812
+ /**
5813
+ * Region code for tenant context
5814
+ */
5815
+ region: 'cn' | 'us' | 'de' | 'gb';
5816
+ };
5817
+ type ReportingControllerGetPortfolioTrendsResponse = PortfolioTrendsResponseDto;
5818
+ type ReportingControllerGetCashFlowTrendsData = {
5819
+ /**
5820
+ * Data granularity (accepted for API symmetry; v1 returns month buckets)
5821
+ */
5822
+ granularity?: 'day' | 'week' | 'month';
5823
+ /**
5824
+ * Time period
5825
+ */
5826
+ period?: '1m' | '3m' | '6m' | '1y';
5827
+ /**
5828
+ * Region code for tenant context
5829
+ */
5830
+ region: 'cn' | 'us' | 'de' | 'gb';
5831
+ };
5832
+ type ReportingControllerGetCashFlowTrendsResponse = CashFlowTrendsResponseDto;
5833
+ type ReportingControllerGenerateSnapshotData = {
5834
+ /**
5835
+ * Region code for tenant context
5836
+ */
5837
+ region: 'cn' | 'us' | 'de' | 'gb';
5838
+ /**
5839
+ * Optional date (defaults to today)
5840
+ */
5841
+ requestBody: GenerateSnapshotBody;
5842
+ };
5843
+ type ReportingControllerGenerateSnapshotResponse = GenerateSnapshotResponse;
5844
+ type ReportingControllerBackfillSnapshotsData = {
5845
+ /**
5846
+ * Region code for tenant context
5847
+ */
5848
+ region: 'cn' | 'us' | 'de' | 'gb';
5849
+ requestBody: BackfillSnapshotsBody;
5850
+ };
5851
+ type ReportingControllerBackfillSnapshotsResponse = BackfillSnapshotsResponse;
5852
+ type UserControllerDeleteOwnUserData = {
5853
+ requestBody: DeleteOwnUserDto;
5854
+ };
5855
+ type UserControllerDeleteOwnUserResponse = void;
5856
+ type UserControllerGetUserData = {
5857
+ acceptLanguage: string;
5858
+ };
5859
+ type UserControllerGetUserResponse = unknown;
5860
+ type UserControllerSignupUserData = {
5861
+ requestBody: SignupDto;
5862
+ };
5863
+ type UserControllerSignupUserResponse = SignupResponseDto;
5864
+ type UserControllerDeleteUserData = {
5865
+ /**
5866
+ * User ID to delete
5867
+ */
5868
+ id: string;
5869
+ };
5870
+ type UserControllerDeleteUserResponse = void;
5871
+ type UserControllerGetUserInfoData = {
5872
+ /**
5873
+ * User ID
5874
+ */
5875
+ id: string;
5876
+ };
5877
+ type UserControllerGetUserInfoResponse = unknown;
5878
+ type UserControllerUpdateUserSettingData = {
5879
+ requestBody: UpdateUserSettingDto;
5880
+ };
5881
+ type UserControllerUpdateUserSettingResponse = unknown;
5882
+ type UserControllerGetAllUserSettingsByPageData = {
5883
+ /**
5884
+ * Page number
5885
+ */
5886
+ pageNo: number;
5887
+ /**
5888
+ * Page size
5889
+ */
5890
+ pageSize: number;
5891
+ };
5892
+ type UserControllerGetAllUserSettingsByPageResponse = unknown;
5893
+ type UserControllerGetAssetLiabilitySummaryResponse = unknown;
5894
+ type PropertyControllerGetAllResponse = unknown;
5895
+ type PropertyControllerGetByKeyData = {
5896
+ /**
5897
+ * Property key
5898
+ */
5899
+ key: string;
5900
+ };
5901
+ type PropertyControllerGetByKeyResponse = unknown;
5902
+ type PropertyControllerUpdateData = {
5903
+ /**
5904
+ * Property key
5905
+ */
5906
+ key: string;
5907
+ requestBody: UpdatePropertyDto;
5908
+ };
5909
+ type PropertyControllerUpdateResponse = unknown;
5910
+ type PropertyControllerDeleteData = {
5911
+ /**
5912
+ * Property key
5913
+ */
5914
+ key: string;
5915
+ };
5916
+ type PropertyControllerDeleteResponse = void;
5359
5917
  type TransactionRuleControllerCreateData = {
5360
5918
  /**
5361
5919
  * Region code for tenant context
@@ -5433,113 +5991,48 @@ type TransactionRuleControllerGetDetailData = {
5433
5991
  /**
5434
5992
  * Region code for tenant context
5435
5993
  */
5436
- region: 'cn' | 'us' | 'de' | 'gb';
5437
- /**
5438
- * Rule ID
5439
- */
5440
- ruleId: string;
5441
- };
5442
- type TransactionRuleControllerGetDetailResponse = TransactionRuleResponseDto;
5443
- type TransactionRuleControllerUpdateData = {
5444
- /**
5445
- * Region code for tenant context
5446
- */
5447
- region: 'cn' | 'us' | 'de' | 'gb';
5448
- requestBody: UpdateTransactionRuleDto;
5449
- /**
5450
- * Rule ID to update
5451
- */
5452
- ruleId: string;
5453
- };
5454
- type TransactionRuleControllerUpdateResponse = TransactionRuleResponseDto;
5455
- type TransactionRuleControllerDeleteData = {
5456
- /**
5457
- * Region code for tenant context
5458
- */
5459
- region: 'cn' | 'us' | 'de' | 'gb';
5460
- /**
5461
- * Rule ID to delete
5462
- */
5463
- ruleId: string;
5464
- };
5465
- type TransactionRuleControllerDeleteResponse = void;
5466
- type TransactionRuleControllerTestData = {
5467
- /**
5468
- * Region code for tenant context
5469
- */
5470
- region: 'cn' | 'us' | 'de' | 'gb';
5471
- requestBody: TestRuleDto;
5472
- /**
5473
- * Rule ID to test
5474
- */
5475
- ruleId: string;
5476
- };
5477
- type TransactionRuleControllerTestResponse = TestRuleResponseDto;
5478
- type UserControllerDeleteOwnUserData = {
5479
- requestBody: DeleteOwnUserDto;
5480
- };
5481
- type UserControllerDeleteOwnUserResponse = void;
5482
- type UserControllerGetUserData = {
5483
- acceptLanguage: string;
5484
- };
5485
- type UserControllerGetUserResponse = unknown;
5486
- type UserControllerSignupUserData = {
5487
- requestBody: SignupDto;
5488
- };
5489
- type UserControllerSignupUserResponse = unknown;
5490
- type UserControllerDeleteUserData = {
5491
- /**
5492
- * User ID to delete
5493
- */
5494
- id: string;
5495
- };
5496
- type UserControllerDeleteUserResponse = void;
5497
- type UserControllerGetUserInfoData = {
5994
+ region: 'cn' | 'us' | 'de' | 'gb';
5498
5995
  /**
5499
- * User ID
5996
+ * Rule ID
5500
5997
  */
5501
- id: string;
5502
- };
5503
- type UserControllerGetUserInfoResponse = unknown;
5504
- type UserControllerUpdateUserSettingData = {
5505
- requestBody: UpdateUserSettingDto;
5998
+ ruleId: string;
5506
5999
  };
5507
- type UserControllerUpdateUserSettingResponse = unknown;
5508
- type UserControllerGetAllUserSettingsByPageData = {
6000
+ type TransactionRuleControllerGetDetailResponse = TransactionRuleResponseDto;
6001
+ type TransactionRuleControllerUpdateData = {
5509
6002
  /**
5510
- * Page number
6003
+ * Region code for tenant context
5511
6004
  */
5512
- pageNo: number;
6005
+ region: 'cn' | 'us' | 'de' | 'gb';
6006
+ requestBody: UpdateTransactionRuleDto;
5513
6007
  /**
5514
- * Page size
6008
+ * Rule ID to update
5515
6009
  */
5516
- pageSize: number;
6010
+ ruleId: string;
5517
6011
  };
5518
- type UserControllerGetAllUserSettingsByPageResponse = unknown;
5519
- type UserControllerGetAssetLiabilitySummaryResponse = unknown;
5520
- type PropertyControllerGetAllResponse = unknown;
5521
- type PropertyControllerGetByKeyData = {
6012
+ type TransactionRuleControllerUpdateResponse = TransactionRuleResponseDto;
6013
+ type TransactionRuleControllerDeleteData = {
5522
6014
  /**
5523
- * Property key
6015
+ * Region code for tenant context
5524
6016
  */
5525
- key: string;
5526
- };
5527
- type PropertyControllerGetByKeyResponse = unknown;
5528
- type PropertyControllerUpdateData = {
6017
+ region: 'cn' | 'us' | 'de' | 'gb';
5529
6018
  /**
5530
- * Property key
6019
+ * Rule ID to delete
5531
6020
  */
5532
- key: string;
5533
- requestBody: UpdatePropertyDto;
6021
+ ruleId: string;
5534
6022
  };
5535
- type PropertyControllerUpdateResponse = unknown;
5536
- type PropertyControllerDeleteData = {
6023
+ type TransactionRuleControllerDeleteResponse = void;
6024
+ type TransactionRuleControllerTestData = {
5537
6025
  /**
5538
- * Property key
6026
+ * Region code for tenant context
5539
6027
  */
5540
- key: string;
6028
+ region: 'cn' | 'us' | 'de' | 'gb';
6029
+ requestBody: TestRuleDto;
6030
+ /**
6031
+ * Rule ID to test
6032
+ */
6033
+ ruleId: string;
5541
6034
  };
5542
- type PropertyControllerDeleteResponse = void;
6035
+ type TransactionRuleControllerTestResponse = TestRuleResponseDto;
5543
6036
  type EventControllerCreateData = {
5544
6037
  /**
5545
6038
  * Region code for tenant context (decorative for life events)
@@ -5626,6 +6119,49 @@ type EventControllerGetSliceData = {
5626
6119
  region: 'cn' | 'us' | 'de' | 'gb';
5627
6120
  };
5628
6121
  type EventControllerGetSliceResponse = unknown;
6122
+ type OnboardingControllerBootstrapData = {
6123
+ /**
6124
+ * Region code for tenant context
6125
+ */
6126
+ region: 'cn' | 'us' | 'de' | 'gb';
6127
+ requestBody: OnboardingDto;
6128
+ };
6129
+ type OnboardingControllerBootstrapResponse = unknown;
6130
+ type ReconciliationControllerComputeData = {
6131
+ /**
6132
+ * Region code for tenant context (decorative for reconciliation)
6133
+ */
6134
+ region: 'cn' | 'us' | 'de' | 'gb';
6135
+ requestBody: ComputeReconciliationDto;
6136
+ };
6137
+ type ReconciliationControllerComputeResponse = ReconciliationComputeResultDto;
6138
+ type ReconciliationControllerAssertData = {
6139
+ /**
6140
+ * Region code for tenant context (decorative for reconciliation)
6141
+ */
6142
+ region: 'cn' | 'us' | 'de' | 'gb';
6143
+ requestBody: AssertReconciliationDto;
6144
+ };
6145
+ type ReconciliationControllerAssertResponse = ReconciliationRecordDto;
6146
+ type ReconciliationControllerPadData = {
6147
+ /**
6148
+ * Region code for tenant context (decorative for reconciliation)
6149
+ */
6150
+ region: 'cn' | 'us' | 'de' | 'gb';
6151
+ requestBody: PadReconciliationDto;
6152
+ };
6153
+ type ReconciliationControllerPadResponse = PadResultDto;
6154
+ type ReconciliationControllerHistoryData = {
6155
+ /**
6156
+ * BeanAccount id
6157
+ */
6158
+ accountId: string;
6159
+ /**
6160
+ * Region code for tenant context (decorative for reconciliation)
6161
+ */
6162
+ region: 'cn' | 'us' | 'de' | 'gb';
6163
+ };
6164
+ type ReconciliationControllerHistoryResponse = Array<ReconciliationRecordDto>;
5629
6165
  type ExportControllerExportBeancountResponse = unknown;
5630
6166
  type FileImportControllerImportFileData = {
5631
6167
  /**
@@ -5705,38 +6241,6 @@ type ImporterConfigControllerResetConfigData = {
5705
6241
  region: 'cn' | 'us' | 'de' | 'gb';
5706
6242
  };
5707
6243
  type ImporterConfigControllerResetConfigResponse = ImporterConfigDto;
5708
- type PlatformControllerFindAllResponse = unknown;
5709
- type PlatformControllerCreateData = {
5710
- requestBody: CreatePlatformDto;
5711
- };
5712
- type PlatformControllerCreateResponse = unknown;
5713
- type PlatformControllerGetPlatformListResponse = unknown;
5714
- type PlatformControllerMatchPlatformsData = {
5715
- /**
5716
- * Search query — Chinese name, English name, or abbreviation
5717
- */
5718
- q: string;
5719
- /**
5720
- * Region code for category override lookup
5721
- */
5722
- region?: string;
5723
- };
5724
- type PlatformControllerMatchPlatformsResponse = unknown;
5725
- type PlatformControllerUpdateData = {
5726
- /**
5727
- * Platform ID
5728
- */
5729
- id: string;
5730
- requestBody: UpdatePlatformDto;
5731
- };
5732
- type PlatformControllerUpdateResponse = unknown;
5733
- type PlatformControllerDeleteData = {
5734
- /**
5735
- * Platform ID
5736
- */
5737
- id: string;
5738
- };
5739
- type PlatformControllerDeleteResponse = void;
5740
6244
  type ProviderSyncControllerSyncData = {
5741
6245
  /**
5742
6246
  * Provider name
@@ -5767,6 +6271,38 @@ type ProviderSyncControllerIsProviderSupportedData = {
5767
6271
  region: 'cn' | 'us' | 'de' | 'gb';
5768
6272
  };
5769
6273
  type ProviderSyncControllerIsProviderSupportedResponse = unknown;
6274
+ type ExternalAccountLinkControllerCreateData = {
6275
+ /**
6276
+ * Region code for tenant context
6277
+ */
6278
+ region: 'cn' | 'us' | 'de' | 'gb';
6279
+ requestBody: CreateExternalAccountLinkDto;
6280
+ };
6281
+ type ExternalAccountLinkControllerCreateResponse = ExternalAccountLinkResponseDto;
6282
+ type ExternalAccountLinkControllerFindAllData = {
6283
+ provider: string;
6284
+ /**
6285
+ * Region code for tenant context
6286
+ */
6287
+ region: 'cn' | 'us' | 'de' | 'gb';
6288
+ };
6289
+ type ExternalAccountLinkControllerFindAllResponse = ExternalAccountLinkListResponseDto;
6290
+ type ExternalAccountLinkControllerFindOneData = {
6291
+ id: string;
6292
+ /**
6293
+ * Region code for tenant context
6294
+ */
6295
+ region: 'cn' | 'us' | 'de' | 'gb';
6296
+ };
6297
+ type ExternalAccountLinkControllerFindOneResponse = ExternalAccountLinkResponseDto;
6298
+ type ExternalAccountLinkControllerRemoveData = {
6299
+ id: string;
6300
+ /**
6301
+ * Region code for tenant context
6302
+ */
6303
+ region: 'cn' | 'us' | 'de' | 'gb';
6304
+ };
6305
+ type ExternalAccountLinkControllerRemoveResponse = void;
5770
6306
  type TelemetryControllerReportTelemetryData = {
5771
6307
  /**
5772
6308
  * Region code for tenant context
@@ -5827,188 +6363,90 @@ type NlpControllerGetSessionData = {
5827
6363
  sessionId?: string;
5828
6364
  };
5829
6365
  type NlpControllerGetSessionResponse = unknown;
5830
- type DashboardControllerGetNetWorthData = {
5831
- /**
5832
- * Date for balance calculation (ISO 8601 format)
5833
- */
5834
- date?: string;
5835
- /**
5836
- * Region code for tenant context
5837
- */
5838
- region: 'cn' | 'us' | 'de' | 'gb';
5839
- };
5840
- type DashboardControllerGetNetWorthResponse = NetWorthResponseDto;
5841
- type DashboardControllerGetAccountsData = {
5842
- /**
5843
- * Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
5844
- */
5845
- accountId?: string;
5846
- /**
5847
- * Date for balance calculation (ISO 8601 format)
5848
- */
5849
- date?: string;
5850
- /**
5851
- * Grouping strategy
5852
- */
5853
- groupBy?: 'platform' | 'assetClass' | 'holdingAssetClass' | 'holdingAssetClassByAccount';
5854
- /**
5855
- * Region code for tenant context
5856
- */
5857
- region: 'cn' | 'us' | 'de' | 'gb';
5858
- };
5859
- type DashboardControllerGetAccountsResponse = AccountsResponseDto | AssetClassAccountsResponseDto | HoldingAssetClassCrossAccountResponseDto;
5860
- type DashboardControllerGetCashFlowData = {
5861
- /**
5862
- * Period in YYYY-MM format
5863
- */
5864
- period: string;
5865
- /**
5866
- * Region code for tenant context
5867
- */
5868
- region: 'cn' | 'us' | 'de' | 'gb';
5869
- };
5870
- type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
5871
- type DashboardControllerGetExpensesData = {
5872
- /**
5873
- * Grouping strategy
5874
- */
5875
- groupBy?: 'category';
5876
- /**
5877
- * Time window (1m = current calendar month)
5878
- */
5879
- period?: '1m' | '3m' | '6m' | '1y';
5880
- /**
5881
- * Region code for tenant context
5882
- */
5883
- region: 'cn' | 'us' | 'de' | 'gb';
6366
+ type PlatformControllerFindAllResponse = unknown;
6367
+ type PlatformControllerCreateData = {
6368
+ requestBody: CreatePlatformDto;
5884
6369
  };
5885
- type DashboardControllerGetExpensesResponse = ExpensesByCategoryResponseDto;
5886
- type HoldingPnlControllerGetHoldingPnlData = {
5887
- /**
5888
- * Scope to a single account
5889
- */
5890
- accountId?: string;
5891
- /**
5892
- * As-of date (ISO 8601), defaults to today
5893
- */
5894
- asOf?: string;
5895
- /**
5896
- * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
5897
- */
5898
- method?: 'FIFO' | 'average';
6370
+ type PlatformControllerCreateResponse = unknown;
6371
+ type PlatformControllerGetPlatformListResponse = Array<PlatformListItemDto>;
6372
+ type PlatformControllerMatchPlatformsData = {
5899
6373
  /**
5900
- * Region code for tenant context
6374
+ * Search query Chinese name, English name, or abbreviation
5901
6375
  */
5902
- region: 'cn' | 'us' | 'de' | 'gb';
5903
- };
5904
- type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
5905
- type PriceControllerCreateData = {
6376
+ q: string;
5906
6377
  /**
5907
- * Region code for tenant context
6378
+ * Region code for category override lookup
5908
6379
  */
5909
- region: 'cn' | 'us' | 'de' | 'gb';
5910
- requestBody: CreateBeanPriceDto;
6380
+ region?: string;
5911
6381
  };
5912
- type PriceControllerCreateResponse = PriceResponseDto;
5913
- type PriceControllerFindAllData = {
5914
- /**
5915
- * Filter by currency (e.g., BTC, AAPL, USD)
5916
- */
5917
- currency?: string;
5918
- /**
5919
- * Filter prices from this date (ISO 8601 format)
5920
- */
5921
- dateFrom?: string;
5922
- /**
5923
- * Filter prices to this date (ISO 8601 format)
5924
- */
5925
- dateTo?: string;
5926
- /**
5927
- * Number of items per page (default: 20, max: 100)
5928
- */
5929
- limit?: number;
5930
- /**
5931
- * Page number for pagination (default: 1)
5932
- */
5933
- page?: number;
5934
- /**
5935
- * Filter by quote currency (pricing currency, e.g., USD, CNY)
5936
- */
5937
- quoteCurrency?: string;
5938
- /**
5939
- * Region code for tenant context
5940
- */
5941
- region: 'cn' | 'us' | 'de' | 'gb';
6382
+ type PlatformControllerMatchPlatformsResponse = PlatformMatchResponseDto;
6383
+ type PlatformControllerUpdateData = {
5942
6384
  /**
5943
- * Search term for currency or quoteCurrency (case-insensitive partial match)
6385
+ * Platform ID
5944
6386
  */
5945
- search?: string;
6387
+ id: string;
6388
+ requestBody: UpdatePlatformDto;
5946
6389
  };
5947
- type PriceControllerFindAllResponse = PriceListResponseDto;
5948
- type PriceControllerFindOneData = {
6390
+ type PlatformControllerUpdateResponse = unknown;
6391
+ type PlatformControllerDeleteData = {
5949
6392
  /**
5950
- * Price ID
6393
+ * Platform ID
5951
6394
  */
5952
6395
  id: string;
5953
- /**
5954
- * Region code for tenant context
5955
- */
5956
- region: 'cn' | 'us' | 'de' | 'gb';
5957
6396
  };
5958
- type PriceControllerFindOneResponse = PriceResponseDto;
5959
- type PriceControllerUpdateData = {
6397
+ type PlatformControllerDeleteResponse = void;
6398
+ type DashboardControllerGetNetWorthData = {
5960
6399
  /**
5961
- * Price ID
6400
+ * Date for balance calculation (ISO 8601 format)
5962
6401
  */
5963
- id: string;
6402
+ date?: string;
5964
6403
  /**
5965
6404
  * Region code for tenant context
5966
6405
  */
5967
6406
  region: 'cn' | 'us' | 'de' | 'gb';
5968
- requestBody: UpdateBeanPriceDto;
5969
6407
  };
5970
- type PriceControllerUpdateResponse = PriceResponseDto;
5971
- type PriceControllerDeleteData = {
6408
+ type DashboardControllerGetNetWorthResponse = NetWorthResponseDto;
6409
+ type DashboardControllerGetAccountsData = {
5972
6410
  /**
5973
- * Price ID
6411
+ * Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
5974
6412
  */
5975
- id: string;
6413
+ accountId?: string;
5976
6414
  /**
5977
- * Region code for tenant context
6415
+ * Date for balance calculation (ISO 8601 format)
5978
6416
  */
5979
- region: 'cn' | 'us' | 'de' | 'gb';
5980
- };
5981
- type PriceControllerDeleteResponse = void;
5982
- type PriceControllerBulkCreateData = {
6417
+ date?: string;
6418
+ /**
6419
+ * Grouping strategy
6420
+ */
6421
+ groupBy?: 'platform' | 'assetClass' | 'holdingAssetClass' | 'holdingAssetClassByAccount';
5983
6422
  /**
5984
6423
  * Region code for tenant context
5985
6424
  */
5986
6425
  region: 'cn' | 'us' | 'de' | 'gb';
5987
- requestBody: Array<string>;
5988
6426
  };
5989
- type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
5990
- type ReportingControllerGetPortfolioTrendsData = {
5991
- /**
5992
- * Data granularity
5993
- */
5994
- granularity?: 'day' | 'week' | 'month';
6427
+ type DashboardControllerGetAccountsResponse = AccountsResponseDto | AssetClassAccountsResponseDto | HoldingAssetClassCrossAccountResponseDto;
6428
+ type DashboardControllerGetCashFlowData = {
5995
6429
  /**
5996
- * Time period
6430
+ * Period in YYYY-MM format
5997
6431
  */
5998
- period?: '1m' | '3m' | '6m' | '1y';
6432
+ period: string;
5999
6433
  /**
6000
6434
  * Region code for tenant context
6001
6435
  */
6002
6436
  region: 'cn' | 'us' | 'de' | 'gb';
6003
6437
  };
6004
- type ReportingControllerGetPortfolioTrendsResponse = PortfolioTrendsResponseDto;
6005
- type ReportingControllerGetCashFlowTrendsData = {
6438
+ type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
6439
+ type DashboardControllerGetExpensesData = {
6006
6440
  /**
6007
- * Data granularity (accepted for API symmetry; v1 returns month buckets)
6441
+ * Account root to aggregate (expense ^Expenses:, income ^Income:)
6008
6442
  */
6009
- granularity?: 'day' | 'week' | 'month';
6443
+ flow?: 'expense' | 'income';
6010
6444
  /**
6011
- * Time period
6445
+ * Grouping strategy
6446
+ */
6447
+ groupBy?: 'category';
6448
+ /**
6449
+ * Time window (1m = current calendar month)
6012
6450
  */
6013
6451
  period?: '1m' | '3m' | '6m' | '1y';
6014
6452
  /**
@@ -6016,31 +6454,31 @@ type ReportingControllerGetCashFlowTrendsData = {
6016
6454
  */
6017
6455
  region: 'cn' | 'us' | 'de' | 'gb';
6018
6456
  };
6019
- type ReportingControllerGetCashFlowTrendsResponse = CashFlowTrendsResponseDto;
6020
- type ReportingControllerGenerateSnapshotData = {
6457
+ type DashboardControllerGetExpensesResponse = ExpensesByCategoryResponseDto;
6458
+ type HoldingPnlControllerGetHoldingPnlData = {
6021
6459
  /**
6022
- * Region code for tenant context
6460
+ * Scope to a single account
6023
6461
  */
6024
- region: 'cn' | 'us' | 'de' | 'gb';
6462
+ accountId?: string;
6025
6463
  /**
6026
- * Optional date (defaults to today)
6464
+ * As-of date (ISO 8601), defaults to today
6027
6465
  */
6028
- requestBody: GenerateSnapshotBody;
6029
- };
6030
- type ReportingControllerGenerateSnapshotResponse = GenerateSnapshotResponse;
6031
- type ReportingControllerBackfillSnapshotsData = {
6466
+ asOf?: string;
6467
+ /**
6468
+ * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6469
+ */
6470
+ method?: 'FIFO' | 'average';
6032
6471
  /**
6033
6472
  * Region code for tenant context
6034
6473
  */
6035
6474
  region: 'cn' | 'us' | 'de' | 'gb';
6036
- requestBody: BackfillSnapshotsBody;
6037
6475
  };
6038
- type ReportingControllerBackfillSnapshotsResponse = BackfillSnapshotsResponse;
6476
+ type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6039
6477
  type ApiKeysControllerCreateApiKeyResponse = unknown;
6040
6478
  type AuthControllerAccessTokenLoginData = {
6041
6479
  requestBody: AnonymousLoginDto;
6042
6480
  };
6043
- type AuthControllerAccessTokenLoginResponse = unknown;
6481
+ type AuthControllerAccessTokenLoginResponse = AnonymousLoginResponseDto;
6044
6482
  type CacheControllerFlushCacheResponse = unknown;
6045
6483
  type ExchangeRateControllerGetExchangeRateData = {
6046
6484
  /**
@@ -6175,6 +6613,25 @@ type $OpenApiTs = {
6175
6613
  };
6176
6614
  };
6177
6615
  };
6616
+ '/api/v1/{region}/bean/accounts/{id}/opening-balance': {
6617
+ post: {
6618
+ req: AccountControllerAddOpeningBalanceData;
6619
+ res: {
6620
+ /**
6621
+ * Opening-balance transaction created
6622
+ */
6623
+ 201: OpeningBalanceResultDto;
6624
+ /**
6625
+ * Account not found
6626
+ */
6627
+ 404: unknown;
6628
+ /**
6629
+ * An opening balance already exists for this account
6630
+ */
6631
+ 409: unknown;
6632
+ };
6633
+ };
6634
+ };
6178
6635
  '/api/v1/{region}/bean/account-standards': {
6179
6636
  get: {
6180
6637
  req: AccountStandardsControllerGetTemplatesData;
@@ -6783,6 +7240,90 @@ type $OpenApiTs = {
6783
7240
  };
6784
7241
  };
6785
7242
  };
7243
+ '/api/v1/{region}/bean/prices': {
7244
+ post: {
7245
+ req: PriceControllerCreateData;
7246
+ res: {
7247
+ /**
7248
+ * Price created successfully
7249
+ */
7250
+ 201: PriceResponseDto;
7251
+ /**
7252
+ * Currency or quoteCurrency commodity not found
7253
+ */
7254
+ 404: unknown;
7255
+ /**
7256
+ * Price already exists for this currency pair and date
7257
+ */
7258
+ 409: unknown;
7259
+ };
7260
+ };
7261
+ get: {
7262
+ req: PriceControllerFindAllData;
7263
+ res: {
7264
+ /**
7265
+ * Prices retrieved successfully
7266
+ */
7267
+ 200: PriceListResponseDto;
7268
+ };
7269
+ };
7270
+ };
7271
+ '/api/v1/{region}/bean/prices/{id}': {
7272
+ get: {
7273
+ req: PriceControllerFindOneData;
7274
+ res: {
7275
+ /**
7276
+ * Price retrieved successfully
7277
+ */
7278
+ 200: PriceResponseDto;
7279
+ /**
7280
+ * Price not found
7281
+ */
7282
+ 404: unknown;
7283
+ };
7284
+ };
7285
+ put: {
7286
+ req: PriceControllerUpdateData;
7287
+ res: {
7288
+ /**
7289
+ * Price updated successfully
7290
+ */
7291
+ 200: PriceResponseDto;
7292
+ /**
7293
+ * Price not found
7294
+ */
7295
+ 404: unknown;
7296
+ /**
7297
+ * Updated price conflicts with existing price
7298
+ */
7299
+ 409: unknown;
7300
+ };
7301
+ };
7302
+ delete: {
7303
+ req: PriceControllerDeleteData;
7304
+ res: {
7305
+ /**
7306
+ * Price deleted successfully
7307
+ */
7308
+ 204: void;
7309
+ /**
7310
+ * Price not found
7311
+ */
7312
+ 404: unknown;
7313
+ };
7314
+ };
7315
+ };
7316
+ '/api/v1/{region}/bean/prices/bulk': {
7317
+ post: {
7318
+ req: PriceControllerBulkCreateData;
7319
+ res: {
7320
+ /**
7321
+ * Prices created successfully
7322
+ */
7323
+ 201: Array<PriceResponseDto>;
7324
+ };
7325
+ };
7326
+ };
6786
7327
  '/api/v1/{region}/bean/recurring-rules': {
6787
7328
  post: {
6788
7329
  req: RecurringRuleControllerCreateData;
@@ -7033,397 +7574,469 @@ type $OpenApiTs = {
7033
7574
  };
7034
7575
  };
7035
7576
  };
7036
- '/api/v1/{region}/bean/transaction-rules': {
7577
+ '/api/v1/{region}/reporting/portfolio/trends': {
7578
+ get: {
7579
+ req: ReportingControllerGetPortfolioTrendsData;
7580
+ res: {
7581
+ /**
7582
+ * Trends retrieved successfully
7583
+ */
7584
+ 200: PortfolioTrendsResponseDto;
7585
+ /**
7586
+ * User not authenticated
7587
+ */
7588
+ 401: unknown;
7589
+ };
7590
+ };
7591
+ };
7592
+ '/api/v1/{region}/reporting/cash-flow/trends': {
7593
+ get: {
7594
+ req: ReportingControllerGetCashFlowTrendsData;
7595
+ res: {
7596
+ /**
7597
+ * Cash-flow trends retrieved successfully
7598
+ */
7599
+ 200: CashFlowTrendsResponseDto;
7600
+ /**
7601
+ * User not authenticated
7602
+ */
7603
+ 401: unknown;
7604
+ };
7605
+ };
7606
+ };
7607
+ '/api/v1/{region}/reporting/snapshots/generate': {
7037
7608
  post: {
7038
- req: TransactionRuleControllerCreateData;
7609
+ req: ReportingControllerGenerateSnapshotData;
7039
7610
  res: {
7040
7611
  /**
7041
- * Rule updated successfully (upsert mode)
7612
+ * Snapshot generated successfully
7042
7613
  */
7043
- 200: TransactionRuleResponseDto;
7614
+ 200: GenerateSnapshotResponse;
7044
7615
  /**
7045
- * Validation failed
7616
+ * Invalid date format
7046
7617
  */
7047
- 400: ApiProblemResponseDto;
7618
+ 400: unknown;
7048
7619
  /**
7049
- * Unauthorized
7620
+ * User not authenticated
7621
+ */
7622
+ 401: unknown;
7623
+ };
7624
+ };
7625
+ };
7626
+ '/api/v1/{region}/reporting/snapshots/backfill': {
7627
+ post: {
7628
+ req: ReportingControllerBackfillSnapshotsData;
7629
+ res: {
7630
+ /**
7631
+ * Backfill completed successfully
7632
+ */
7633
+ 200: BackfillSnapshotsResponse;
7634
+ /**
7635
+ * Invalid date format or range
7636
+ */
7637
+ 400: unknown;
7638
+ /**
7639
+ * User not authenticated
7640
+ */
7641
+ 401: unknown;
7642
+ /**
7643
+ * Backfill already in progress for this user
7644
+ */
7645
+ 409: unknown;
7646
+ };
7647
+ };
7648
+ };
7649
+ '/api/v1/users': {
7650
+ delete: {
7651
+ req: UserControllerDeleteOwnUserData;
7652
+ res: {
7653
+ /**
7654
+ * User deleted successfully
7050
7655
  */
7051
- 401: ApiProblemResponseDto;
7656
+ 204: void;
7052
7657
  /**
7053
- * Resource conflict - another process is updating this rule
7658
+ * Invalid access token
7054
7659
  */
7055
- 409: ApiProblemResponseDto;
7660
+ 403: unknown;
7056
7661
  };
7057
7662
  };
7058
7663
  get: {
7059
- req: TransactionRuleControllerListData;
7664
+ req: UserControllerGetUserData;
7060
7665
  res: {
7061
7666
  /**
7062
- * List of rules
7063
- */
7064
- 200: TransactionRuleListResponseDto;
7065
- /**
7066
- * Unauthorized
7667
+ * User retrieved successfully
7067
7668
  */
7068
- 401: ApiProblemResponseDto;
7669
+ 200: unknown;
7069
7670
  };
7070
7671
  };
7071
- };
7072
- '/api/v1/{region}/bean/transaction-rules/validate': {
7073
7672
  post: {
7074
- req: TransactionRuleControllerValidateData;
7673
+ req: UserControllerSignupUserData;
7075
7674
  res: {
7076
7675
  /**
7077
- * Validation result
7676
+ * User created successfully
7078
7677
  */
7079
- 200: ValidateRuleResponseDto;
7678
+ 201: SignupResponseDto;
7080
7679
  /**
7081
- * Validation failed
7680
+ * Invalid Turnstile token (when Turnstile is enabled)
7082
7681
  */
7083
- 400: ApiProblemResponseDto;
7682
+ 400: unknown;
7084
7683
  /**
7085
- * Unauthorized
7684
+ * User signup is disabled
7086
7685
  */
7087
- 401: ApiProblemResponseDto;
7686
+ 403: unknown;
7088
7687
  };
7089
7688
  };
7090
7689
  };
7091
- '/api/v1/{region}/bean/transaction-rules/bulk': {
7092
- post: {
7093
- req: TransactionRuleControllerBulkCreateData;
7690
+ '/api/v1/users/{id}': {
7691
+ delete: {
7692
+ req: UserControllerDeleteUserData;
7094
7693
  res: {
7095
7694
  /**
7096
- * Bulk create completed
7097
- */
7098
- 201: BulkCreateRulesResponseDto;
7099
- /**
7100
- * Invalid bulk create data
7695
+ * User deleted successfully
7101
7696
  */
7102
- 400: ApiProblemResponseDto;
7697
+ 204: void;
7103
7698
  /**
7104
- * Unauthorized
7699
+ * Cannot delete own account or insufficient permissions
7105
7700
  */
7106
- 401: ApiProblemResponseDto;
7701
+ 403: unknown;
7107
7702
  };
7108
7703
  };
7109
7704
  };
7110
- '/api/v1/{region}/bean/transaction-rules/export/{format}': {
7705
+ '/api/v1/users/{id}/info': {
7111
7706
  get: {
7112
- req: TransactionRuleControllerExportData;
7707
+ req: UserControllerGetUserInfoData;
7113
7708
  res: {
7114
7709
  /**
7115
- * Exported rules
7116
- */
7117
- 200: ExportRulesResponseDto;
7118
- /**
7119
- * Unsupported format
7710
+ * User info retrieved successfully
7120
7711
  */
7121
- 400: ApiProblemResponseDto;
7712
+ 200: unknown;
7122
7713
  /**
7123
- * Unauthorized
7714
+ * Cannot access other user info without admin permission
7124
7715
  */
7125
- 401: ApiProblemResponseDto;
7716
+ 403: unknown;
7126
7717
  };
7127
7718
  };
7128
7719
  };
7129
- '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
7130
- get: {
7131
- req: TransactionRuleControllerGetStatisticsData;
7720
+ '/api/v1/users/setting': {
7721
+ put: {
7722
+ req: UserControllerUpdateUserSettingData;
7132
7723
  res: {
7133
7724
  /**
7134
- * Rule statistics
7725
+ * Settings updated successfully
7135
7726
  */
7136
- 200: RuleStatisticsResponseDto;
7727
+ 200: unknown;
7137
7728
  /**
7138
- * Unauthorized
7729
+ * Insufficient permissions
7139
7730
  */
7140
- 401: ApiProblemResponseDto;
7731
+ 403: unknown;
7141
7732
  };
7142
7733
  };
7143
7734
  };
7144
- '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
7735
+ '/api/v1/users/settings-by-page': {
7145
7736
  get: {
7146
- req: TransactionRuleControllerGetDetailData;
7737
+ req: UserControllerGetAllUserSettingsByPageData;
7147
7738
  res: {
7148
7739
  /**
7149
- * Rule details
7150
- */
7151
- 200: TransactionRuleResponseDto;
7152
- /**
7153
- * Unauthorized
7154
- */
7155
- 401: ApiProblemResponseDto;
7156
- /**
7157
- * Forbidden - not owner of rule
7158
- */
7159
- 403: ApiProblemResponseDto;
7160
- /**
7161
- * Rule not found
7740
+ * Settings list retrieved successfully
7162
7741
  */
7163
- 404: ApiProblemResponseDto;
7742
+ 200: unknown;
7164
7743
  };
7165
7744
  };
7166
- put: {
7167
- req: TransactionRuleControllerUpdateData;
7745
+ };
7746
+ '/api/v1/users/asset-liability-summary': {
7747
+ get: {
7168
7748
  res: {
7169
7749
  /**
7170
- * Rule updated successfully
7750
+ * Summary retrieved successfully
7171
7751
  */
7172
- 200: TransactionRuleResponseDto;
7752
+ 200: unknown;
7753
+ };
7754
+ };
7755
+ };
7756
+ '/api/v1/admin/properties': {
7757
+ get: {
7758
+ res: {
7173
7759
  /**
7174
- * Validation failed
7760
+ * Properties retrieved successfully
7175
7761
  */
7176
- 400: ApiProblemResponseDto;
7762
+ 200: unknown;
7177
7763
  /**
7178
7764
  * Unauthorized
7179
7765
  */
7180
- 401: ApiProblemResponseDto;
7181
- /**
7182
- * Forbidden - not owner of rule
7183
- */
7184
- 403: ApiProblemResponseDto;
7185
- /**
7186
- * Rule not found
7187
- */
7188
- 404: ApiProblemResponseDto;
7766
+ 401: unknown;
7189
7767
  /**
7190
- * Resource conflict - rule is being modified by another process
7768
+ * Forbidden - insufficient permissions
7191
7769
  */
7192
- 409: ApiProblemResponseDto;
7770
+ 403: unknown;
7193
7771
  };
7194
7772
  };
7195
- delete: {
7196
- req: TransactionRuleControllerDeleteData;
7773
+ };
7774
+ '/api/v1/admin/properties/{key}': {
7775
+ get: {
7776
+ req: PropertyControllerGetByKeyData;
7197
7777
  res: {
7198
7778
  /**
7199
- * Rule deleted successfully
7779
+ * Property retrieved successfully
7200
7780
  */
7201
- 204: void;
7781
+ 200: unknown;
7202
7782
  /**
7203
7783
  * Unauthorized
7204
7784
  */
7205
- 401: ApiProblemResponseDto;
7206
- /**
7207
- * Forbidden - not owner of rule
7208
- */
7209
- 403: ApiProblemResponseDto;
7785
+ 401: unknown;
7210
7786
  /**
7211
- * Rule not found
7787
+ * Forbidden - insufficient permissions
7212
7788
  */
7213
- 404: ApiProblemResponseDto;
7789
+ 403: unknown;
7214
7790
  /**
7215
- * Resource conflict - rule is being modified by another process
7791
+ * Property not found
7216
7792
  */
7217
- 409: ApiProblemResponseDto;
7793
+ 404: unknown;
7218
7794
  };
7219
7795
  };
7220
- };
7221
- '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
7222
- post: {
7223
- req: TransactionRuleControllerTestData;
7796
+ put: {
7797
+ req: PropertyControllerUpdateData;
7224
7798
  res: {
7225
7799
  /**
7226
- * Test result
7800
+ * Property updated successfully
7227
7801
  */
7228
- 200: TestRuleResponseDto;
7802
+ 200: unknown;
7229
7803
  /**
7230
7804
  * Unauthorized
7231
7805
  */
7232
- 401: ApiProblemResponseDto;
7233
- /**
7234
- * Forbidden - not owner of rule
7235
- */
7236
- 403: ApiProblemResponseDto;
7806
+ 401: unknown;
7237
7807
  /**
7238
- * Rule not found
7808
+ * Forbidden - insufficient permissions
7239
7809
  */
7240
- 404: ApiProblemResponseDto;
7810
+ 403: unknown;
7241
7811
  };
7242
7812
  };
7243
- };
7244
- '/api/v1/users': {
7245
7813
  delete: {
7246
- req: UserControllerDeleteOwnUserData;
7814
+ req: PropertyControllerDeleteData;
7247
7815
  res: {
7248
7816
  /**
7249
- * User deleted successfully
7817
+ * Property deleted successfully
7250
7818
  */
7251
7819
  204: void;
7252
7820
  /**
7253
- * Invalid access token
7821
+ * Unauthorized
7822
+ */
7823
+ 401: unknown;
7824
+ /**
7825
+ * Forbidden - insufficient permissions
7254
7826
  */
7255
7827
  403: unknown;
7256
- };
7257
- };
7258
- get: {
7259
- req: UserControllerGetUserData;
7260
- res: {
7261
7828
  /**
7262
- * User retrieved successfully
7829
+ * Property not found
7263
7830
  */
7264
- 200: unknown;
7831
+ 404: unknown;
7265
7832
  };
7266
7833
  };
7834
+ };
7835
+ '/api/v1/{region}/bean/transaction-rules': {
7267
7836
  post: {
7268
- req: UserControllerSignupUserData;
7837
+ req: TransactionRuleControllerCreateData;
7269
7838
  res: {
7270
7839
  /**
7271
- * User created successfully
7840
+ * Rule updated successfully (upsert mode)
7272
7841
  */
7273
- 201: unknown;
7842
+ 200: TransactionRuleResponseDto;
7274
7843
  /**
7275
- * Invalid Turnstile token (when Turnstile is enabled)
7844
+ * Validation failed
7276
7845
  */
7277
- 400: unknown;
7846
+ 400: ApiProblemResponseDto;
7278
7847
  /**
7279
- * User signup is disabled
7848
+ * Unauthorized
7280
7849
  */
7281
- 403: unknown;
7850
+ 401: ApiProblemResponseDto;
7851
+ /**
7852
+ * Resource conflict - another process is updating this rule
7853
+ */
7854
+ 409: ApiProblemResponseDto;
7282
7855
  };
7283
7856
  };
7284
- };
7285
- '/api/v1/users/{id}': {
7286
- delete: {
7287
- req: UserControllerDeleteUserData;
7857
+ get: {
7858
+ req: TransactionRuleControllerListData;
7288
7859
  res: {
7289
7860
  /**
7290
- * User deleted successfully
7861
+ * List of rules
7291
7862
  */
7292
- 204: void;
7863
+ 200: TransactionRuleListResponseDto;
7293
7864
  /**
7294
- * Cannot delete own account or insufficient permissions
7865
+ * Unauthorized
7295
7866
  */
7296
- 403: unknown;
7867
+ 401: ApiProblemResponseDto;
7297
7868
  };
7298
7869
  };
7299
7870
  };
7300
- '/api/v1/users/{id}/info': {
7301
- get: {
7302
- req: UserControllerGetUserInfoData;
7871
+ '/api/v1/{region}/bean/transaction-rules/validate': {
7872
+ post: {
7873
+ req: TransactionRuleControllerValidateData;
7303
7874
  res: {
7304
7875
  /**
7305
- * User info retrieved successfully
7876
+ * Validation result
7306
7877
  */
7307
- 200: unknown;
7878
+ 200: ValidateRuleResponseDto;
7308
7879
  /**
7309
- * Cannot access other user info without admin permission
7880
+ * Validation failed
7310
7881
  */
7311
- 403: unknown;
7882
+ 400: ApiProblemResponseDto;
7883
+ /**
7884
+ * Unauthorized
7885
+ */
7886
+ 401: ApiProblemResponseDto;
7312
7887
  };
7313
7888
  };
7314
7889
  };
7315
- '/api/v1/users/setting': {
7316
- put: {
7317
- req: UserControllerUpdateUserSettingData;
7890
+ '/api/v1/{region}/bean/transaction-rules/bulk': {
7891
+ post: {
7892
+ req: TransactionRuleControllerBulkCreateData;
7318
7893
  res: {
7319
7894
  /**
7320
- * Settings updated successfully
7895
+ * Bulk create completed
7321
7896
  */
7322
- 200: unknown;
7897
+ 201: BulkCreateRulesResponseDto;
7323
7898
  /**
7324
- * Insufficient permissions
7899
+ * Invalid bulk create data
7325
7900
  */
7326
- 403: unknown;
7901
+ 400: ApiProblemResponseDto;
7902
+ /**
7903
+ * Unauthorized
7904
+ */
7905
+ 401: ApiProblemResponseDto;
7327
7906
  };
7328
7907
  };
7329
7908
  };
7330
- '/api/v1/users/settings-by-page': {
7909
+ '/api/v1/{region}/bean/transaction-rules/export/{format}': {
7331
7910
  get: {
7332
- req: UserControllerGetAllUserSettingsByPageData;
7911
+ req: TransactionRuleControllerExportData;
7333
7912
  res: {
7334
7913
  /**
7335
- * Settings list retrieved successfully
7914
+ * Exported rules
7336
7915
  */
7337
- 200: unknown;
7916
+ 200: ExportRulesResponseDto;
7917
+ /**
7918
+ * Unsupported format
7919
+ */
7920
+ 400: ApiProblemResponseDto;
7921
+ /**
7922
+ * Unauthorized
7923
+ */
7924
+ 401: ApiProblemResponseDto;
7338
7925
  };
7339
7926
  };
7340
7927
  };
7341
- '/api/v1/users/asset-liability-summary': {
7928
+ '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
7342
7929
  get: {
7930
+ req: TransactionRuleControllerGetStatisticsData;
7343
7931
  res: {
7344
7932
  /**
7345
- * Summary retrieved successfully
7933
+ * Rule statistics
7346
7934
  */
7347
- 200: unknown;
7935
+ 200: RuleStatisticsResponseDto;
7936
+ /**
7937
+ * Unauthorized
7938
+ */
7939
+ 401: ApiProblemResponseDto;
7348
7940
  };
7349
7941
  };
7350
7942
  };
7351
- '/api/v1/admin/properties': {
7943
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
7352
7944
  get: {
7945
+ req: TransactionRuleControllerGetDetailData;
7353
7946
  res: {
7354
7947
  /**
7355
- * Properties retrieved successfully
7948
+ * Rule details
7356
7949
  */
7357
- 200: unknown;
7950
+ 200: TransactionRuleResponseDto;
7358
7951
  /**
7359
7952
  * Unauthorized
7360
7953
  */
7361
- 401: unknown;
7954
+ 401: ApiProblemResponseDto;
7362
7955
  /**
7363
- * Forbidden - insufficient permissions
7956
+ * Forbidden - not owner of rule
7364
7957
  */
7365
- 403: unknown;
7958
+ 403: ApiProblemResponseDto;
7959
+ /**
7960
+ * Rule not found
7961
+ */
7962
+ 404: ApiProblemResponseDto;
7366
7963
  };
7367
7964
  };
7368
- };
7369
- '/api/v1/admin/properties/{key}': {
7370
- get: {
7371
- req: PropertyControllerGetByKeyData;
7965
+ put: {
7966
+ req: TransactionRuleControllerUpdateData;
7372
7967
  res: {
7373
7968
  /**
7374
- * Property retrieved successfully
7969
+ * Rule updated successfully
7375
7970
  */
7376
- 200: unknown;
7971
+ 200: TransactionRuleResponseDto;
7972
+ /**
7973
+ * Validation failed
7974
+ */
7975
+ 400: ApiProblemResponseDto;
7377
7976
  /**
7378
7977
  * Unauthorized
7379
7978
  */
7380
- 401: unknown;
7979
+ 401: ApiProblemResponseDto;
7381
7980
  /**
7382
- * Forbidden - insufficient permissions
7981
+ * Forbidden - not owner of rule
7383
7982
  */
7384
- 403: unknown;
7983
+ 403: ApiProblemResponseDto;
7385
7984
  /**
7386
- * Property not found
7985
+ * Rule not found
7387
7986
  */
7388
- 404: unknown;
7987
+ 404: ApiProblemResponseDto;
7988
+ /**
7989
+ * Resource conflict - rule is being modified by another process
7990
+ */
7991
+ 409: ApiProblemResponseDto;
7389
7992
  };
7390
7993
  };
7391
- put: {
7392
- req: PropertyControllerUpdateData;
7994
+ delete: {
7995
+ req: TransactionRuleControllerDeleteData;
7393
7996
  res: {
7394
7997
  /**
7395
- * Property updated successfully
7998
+ * Rule deleted successfully
7396
7999
  */
7397
- 200: unknown;
8000
+ 204: void;
7398
8001
  /**
7399
8002
  * Unauthorized
7400
8003
  */
7401
- 401: unknown;
8004
+ 401: ApiProblemResponseDto;
7402
8005
  /**
7403
- * Forbidden - insufficient permissions
8006
+ * Forbidden - not owner of rule
7404
8007
  */
7405
- 403: unknown;
8008
+ 403: ApiProblemResponseDto;
8009
+ /**
8010
+ * Rule not found
8011
+ */
8012
+ 404: ApiProblemResponseDto;
8013
+ /**
8014
+ * Resource conflict - rule is being modified by another process
8015
+ */
8016
+ 409: ApiProblemResponseDto;
7406
8017
  };
7407
8018
  };
7408
- delete: {
7409
- req: PropertyControllerDeleteData;
8019
+ };
8020
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
8021
+ post: {
8022
+ req: TransactionRuleControllerTestData;
7410
8023
  res: {
7411
8024
  /**
7412
- * Property deleted successfully
8025
+ * Test result
7413
8026
  */
7414
- 204: void;
8027
+ 200: TestRuleResponseDto;
7415
8028
  /**
7416
8029
  * Unauthorized
7417
8030
  */
7418
- 401: unknown;
8031
+ 401: ApiProblemResponseDto;
7419
8032
  /**
7420
- * Forbidden - insufficient permissions
8033
+ * Forbidden - not owner of rule
7421
8034
  */
7422
- 403: unknown;
8035
+ 403: ApiProblemResponseDto;
7423
8036
  /**
7424
- * Property not found
8037
+ * Rule not found
7425
8038
  */
7426
- 404: unknown;
8039
+ 404: ApiProblemResponseDto;
7427
8040
  };
7428
8041
  };
7429
8042
  };
@@ -7523,6 +8136,85 @@ type $OpenApiTs = {
7523
8136
  };
7524
8137
  };
7525
8138
  };
8139
+ '/api/v1/{region}/bean/onboarding': {
8140
+ post: {
8141
+ req: OnboardingControllerBootstrapData;
8142
+ res: {
8143
+ /**
8144
+ * Onboarding bootstrap result.
8145
+ */
8146
+ 201: unknown;
8147
+ /**
8148
+ * Invalid region/account path/duplicate paths.
8149
+ */
8150
+ 422: unknown;
8151
+ };
8152
+ };
8153
+ };
8154
+ '/api/v1/{region}/bean/reconciliations': {
8155
+ post: {
8156
+ req: ReconciliationControllerComputeData;
8157
+ res: {
8158
+ /**
8159
+ * Reconciliation preview
8160
+ */
8161
+ 200: ReconciliationComputeResultDto;
8162
+ /**
8163
+ * Account not found
8164
+ */
8165
+ 404: unknown;
8166
+ };
8167
+ };
8168
+ };
8169
+ '/api/v1/{region}/bean/reconciliations/assert': {
8170
+ post: {
8171
+ req: ReconciliationControllerAssertData;
8172
+ res: {
8173
+ /**
8174
+ * Balance assertion recorded
8175
+ */
8176
+ 201: ReconciliationRecordDto;
8177
+ /**
8178
+ * Account not found
8179
+ */
8180
+ 404: unknown;
8181
+ };
8182
+ };
8183
+ };
8184
+ '/api/v1/{region}/bean/reconciliations/pad': {
8185
+ post: {
8186
+ req: ReconciliationControllerPadData;
8187
+ res: {
8188
+ /**
8189
+ * Pad adjusting entry generated
8190
+ */
8191
+ 201: PadResultDto;
8192
+ /**
8193
+ * Book already within tolerance — no pad needed
8194
+ */
8195
+ 400: unknown;
8196
+ /**
8197
+ * Account not found
8198
+ */
8199
+ 404: unknown;
8200
+ };
8201
+ };
8202
+ };
8203
+ '/api/v1/{region}/bean/accounts/{accountId}/reconciliations': {
8204
+ get: {
8205
+ req: ReconciliationControllerHistoryData;
8206
+ res: {
8207
+ /**
8208
+ * Reconciliation history
8209
+ */
8210
+ 200: Array<ReconciliationRecordDto>;
8211
+ /**
8212
+ * Account not found
8213
+ */
8214
+ 404: unknown;
8215
+ };
8216
+ };
8217
+ };
7526
8218
  '/api/v1/{region}/bean/export/beancount': {
7527
8219
  get: {
7528
8220
  res: {
@@ -7648,100 +8340,28 @@ type $OpenApiTs = {
7648
8340
  */
7649
8341
  200: ImporterConfigDto;
7650
8342
  /**
7651
- * Invalid input - Validation failed
7652
- */
7653
- 400: ApiProblemResponseDto;
7654
- /**
7655
- * Configuration not found
7656
- */
7657
- 404: ApiProblemResponseDto;
7658
- };
7659
- };
7660
- };
7661
- '/api/v1/{region}/bean/import/config/{importerId}/reset': {
7662
- post: {
7663
- req: ImporterConfigControllerResetConfigData;
7664
- res: {
7665
- /**
7666
- * Configuration reset successfully
7667
- */
7668
- 200: ImporterConfigDto;
7669
- /**
7670
- * Invalid input - Unsupported importer
7671
- */
7672
- 400: ApiProblemResponseDto;
7673
- };
7674
- };
7675
- };
7676
- '/api/v1/bean/platforms': {
7677
- get: {
7678
- res: {
7679
- /**
7680
- * List of platforms with binding and account counts
7681
- */
7682
- 200: unknown;
7683
- };
7684
- };
7685
- post: {
7686
- req: PlatformControllerCreateData;
7687
- res: {
7688
- /**
7689
- * Platform created successfully
7690
- */
7691
- 201: unknown;
7692
- /**
7693
- * Platform already exists
7694
- */
7695
- 409: unknown;
7696
- };
7697
- };
7698
- };
7699
- '/api/v1/bean/platforms/list': {
7700
- get: {
7701
- res: {
7702
- /**
7703
- * List of platforms with user binding status
7704
- */
7705
- 200: unknown;
7706
- };
7707
- };
7708
- };
7709
- '/api/v1/bean/platforms/match': {
7710
- get: {
7711
- req: PlatformControllerMatchPlatformsData;
7712
- res: {
7713
- /**
7714
- * List of matching platforms with suggested segment names
7715
- */
7716
- 200: unknown;
7717
- };
7718
- };
7719
- };
7720
- '/api/v1/bean/platforms/{id}': {
7721
- put: {
7722
- req: PlatformControllerUpdateData;
7723
- res: {
7724
- /**
7725
- * Platform updated successfully
8343
+ * Invalid input - Validation failed
7726
8344
  */
7727
- 200: unknown;
8345
+ 400: ApiProblemResponseDto;
7728
8346
  /**
7729
- * Platform not found
8347
+ * Configuration not found
7730
8348
  */
7731
- 404: unknown;
8349
+ 404: ApiProblemResponseDto;
7732
8350
  };
7733
8351
  };
7734
- delete: {
7735
- req: PlatformControllerDeleteData;
8352
+ };
8353
+ '/api/v1/{region}/bean/import/config/{importerId}/reset': {
8354
+ post: {
8355
+ req: ImporterConfigControllerResetConfigData;
7736
8356
  res: {
7737
8357
  /**
7738
- * Platform deleted successfully
8358
+ * Configuration reset successfully
7739
8359
  */
7740
- 204: void;
8360
+ 200: ImporterConfigDto;
7741
8361
  /**
7742
- * Platform not found
8362
+ * Invalid input - Unsupported importer
7743
8363
  */
7744
- 404: unknown;
8364
+ 400: ApiProblemResponseDto;
7745
8365
  };
7746
8366
  };
7747
8367
  };
@@ -7798,6 +8418,54 @@ type $OpenApiTs = {
7798
8418
  };
7799
8419
  };
7800
8420
  };
8421
+ '/api/v1/{region}/bean/external-account-links': {
8422
+ post: {
8423
+ req: ExternalAccountLinkControllerCreateData;
8424
+ res: {
8425
+ /**
8426
+ * Link created.
8427
+ */
8428
+ 201: ExternalAccountLinkResponseDto;
8429
+ /**
8430
+ * beanAccountId not owned, or an active link already exists.
8431
+ */
8432
+ 422: unknown;
8433
+ };
8434
+ };
8435
+ get: {
8436
+ req: ExternalAccountLinkControllerFindAllData;
8437
+ res: {
8438
+ /**
8439
+ * Links retrieved.
8440
+ */
8441
+ 200: ExternalAccountLinkListResponseDto;
8442
+ };
8443
+ };
8444
+ };
8445
+ '/api/v1/{region}/bean/external-account-links/{id}': {
8446
+ get: {
8447
+ req: ExternalAccountLinkControllerFindOneData;
8448
+ res: {
8449
+ /**
8450
+ * Link retrieved.
8451
+ */
8452
+ 200: ExternalAccountLinkResponseDto;
8453
+ /**
8454
+ * Link not found or not owned by the user.
8455
+ */
8456
+ 422: unknown;
8457
+ };
8458
+ };
8459
+ delete: {
8460
+ req: ExternalAccountLinkControllerRemoveData;
8461
+ res: {
8462
+ /**
8463
+ * Link soft-deleted; historical transactions are unaffected.
8464
+ */
8465
+ 204: void;
8466
+ };
8467
+ };
8468
+ };
7801
8469
  '/api/v1/{region}/bean/import/parser-telemetry': {
7802
8470
  post: {
7803
8471
  req: TelemetryControllerReportTelemetryData;
@@ -7886,185 +8554,101 @@ type $OpenApiTs = {
7886
8554
  };
7887
8555
  };
7888
8556
  };
7889
- '/api/v1/{region}/dashboard/net-worth': {
7890
- get: {
7891
- req: DashboardControllerGetNetWorthData;
7892
- res: {
7893
- /**
7894
- * Net worth retrieved successfully
7895
- */
7896
- 200: NetWorthResponseDto;
7897
- /**
7898
- * User not authenticated
7899
- */
7900
- 401: unknown;
7901
- };
7902
- };
7903
- };
7904
- '/api/v1/{region}/dashboard/accounts': {
7905
- get: {
7906
- req: DashboardControllerGetAccountsData;
7907
- res: {
7908
- /**
7909
- * Accounts retrieved successfully. Response type depends on groupBy parameter.
7910
- */
7911
- 200: AccountsResponseDto | AssetClassAccountsResponseDto | HoldingAssetClassCrossAccountResponseDto;
7912
- /**
7913
- * User not authenticated
7914
- */
7915
- 401: unknown;
7916
- };
7917
- };
7918
- };
7919
- '/api/v1/{region}/dashboard/cash-flow': {
7920
- get: {
7921
- req: DashboardControllerGetCashFlowData;
7922
- res: {
7923
- /**
7924
- * Cash flow retrieved successfully
7925
- */
7926
- 200: CashFlowResponseDto;
7927
- /**
7928
- * Invalid period format
7929
- */
7930
- 400: unknown;
7931
- /**
7932
- * User not authenticated
7933
- */
7934
- 401: unknown;
7935
- };
7936
- };
7937
- };
7938
- '/api/v1/{region}/dashboard/expenses': {
7939
- get: {
7940
- req: DashboardControllerGetExpensesData;
7941
- res: {
7942
- /**
7943
- * Expenses retrieved successfully
7944
- */
7945
- 200: ExpensesByCategoryResponseDto;
7946
- /**
7947
- * Invalid groupBy or period
7948
- */
7949
- 400: unknown;
7950
- /**
7951
- * User not authenticated
7952
- */
7953
- 401: unknown;
7954
- };
7955
- };
7956
- };
7957
- '/api/v1/{region}/investment/holdings/pnl': {
8557
+ '/api/v1/bean/platforms': {
7958
8558
  get: {
7959
- req: HoldingPnlControllerGetHoldingPnlData;
7960
8559
  res: {
7961
8560
  /**
7962
- * Holding P&L retrieved successfully
7963
- */
7964
- 200: HoldingPnlResponseDto;
7965
- /**
7966
- * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
7967
- */
7968
- 400: unknown;
7969
- /**
7970
- * User not authenticated
8561
+ * List of platforms with binding and account counts
7971
8562
  */
7972
- 401: unknown;
8563
+ 200: unknown;
7973
8564
  };
7974
8565
  };
7975
- };
7976
- '/api/v1/{region}/bean/prices': {
7977
8566
  post: {
7978
- req: PriceControllerCreateData;
8567
+ req: PlatformControllerCreateData;
7979
8568
  res: {
7980
8569
  /**
7981
- * Price created successfully
7982
- */
7983
- 201: PriceResponseDto;
7984
- /**
7985
- * Currency or quoteCurrency commodity not found
8570
+ * Platform created successfully
7986
8571
  */
7987
- 404: unknown;
8572
+ 201: unknown;
7988
8573
  /**
7989
- * Price already exists for this currency pair and date
8574
+ * Platform already exists
7990
8575
  */
7991
8576
  409: unknown;
7992
8577
  };
7993
8578
  };
8579
+ };
8580
+ '/api/v1/bean/platforms/list': {
7994
8581
  get: {
7995
- req: PriceControllerFindAllData;
7996
8582
  res: {
7997
8583
  /**
7998
- * Prices retrieved successfully
8584
+ * List of platforms with user binding status
7999
8585
  */
8000
- 200: PriceListResponseDto;
8586
+ 200: Array<PlatformListItemDto>;
8001
8587
  };
8002
8588
  };
8003
8589
  };
8004
- '/api/v1/{region}/bean/prices/{id}': {
8590
+ '/api/v1/bean/platforms/match': {
8005
8591
  get: {
8006
- req: PriceControllerFindOneData;
8592
+ req: PlatformControllerMatchPlatformsData;
8007
8593
  res: {
8008
8594
  /**
8009
- * Price retrieved successfully
8010
- */
8011
- 200: PriceResponseDto;
8012
- /**
8013
- * Price not found
8595
+ * Matching platforms with overall match type and truncation flag
8014
8596
  */
8015
- 404: unknown;
8597
+ 200: PlatformMatchResponseDto;
8016
8598
  };
8017
8599
  };
8600
+ };
8601
+ '/api/v1/bean/platforms/{id}': {
8018
8602
  put: {
8019
- req: PriceControllerUpdateData;
8603
+ req: PlatformControllerUpdateData;
8020
8604
  res: {
8021
8605
  /**
8022
- * Price updated successfully
8606
+ * Platform updated successfully
8023
8607
  */
8024
- 200: PriceResponseDto;
8608
+ 200: unknown;
8025
8609
  /**
8026
- * Price not found
8610
+ * Platform not found
8027
8611
  */
8028
8612
  404: unknown;
8029
- /**
8030
- * Updated price conflicts with existing price
8031
- */
8032
- 409: unknown;
8033
8613
  };
8034
8614
  };
8035
8615
  delete: {
8036
- req: PriceControllerDeleteData;
8616
+ req: PlatformControllerDeleteData;
8037
8617
  res: {
8038
8618
  /**
8039
- * Price deleted successfully
8619
+ * Platform deleted successfully
8040
8620
  */
8041
8621
  204: void;
8042
8622
  /**
8043
- * Price not found
8623
+ * Platform not found
8044
8624
  */
8045
8625
  404: unknown;
8046
8626
  };
8047
8627
  };
8048
8628
  };
8049
- '/api/v1/{region}/bean/prices/bulk': {
8050
- post: {
8051
- req: PriceControllerBulkCreateData;
8629
+ '/api/v1/{region}/dashboard/net-worth': {
8630
+ get: {
8631
+ req: DashboardControllerGetNetWorthData;
8052
8632
  res: {
8053
8633
  /**
8054
- * Prices created successfully
8634
+ * Net worth retrieved successfully
8055
8635
  */
8056
- 201: Array<PriceResponseDto>;
8636
+ 200: NetWorthResponseDto;
8637
+ /**
8638
+ * User not authenticated
8639
+ */
8640
+ 401: unknown;
8057
8641
  };
8058
8642
  };
8059
8643
  };
8060
- '/api/v1/{region}/reporting/portfolio/trends': {
8644
+ '/api/v1/{region}/dashboard/accounts': {
8061
8645
  get: {
8062
- req: ReportingControllerGetPortfolioTrendsData;
8646
+ req: DashboardControllerGetAccountsData;
8063
8647
  res: {
8064
8648
  /**
8065
- * Trends retrieved successfully
8649
+ * Accounts retrieved successfully. Response type depends on groupBy parameter.
8066
8650
  */
8067
- 200: PortfolioTrendsResponseDto;
8651
+ 200: AccountsResponseDto | AssetClassAccountsResponseDto | HoldingAssetClassCrossAccountResponseDto;
8068
8652
  /**
8069
8653
  * User not authenticated
8070
8654
  */
@@ -8072,14 +8656,18 @@ type $OpenApiTs = {
8072
8656
  };
8073
8657
  };
8074
8658
  };
8075
- '/api/v1/{region}/reporting/cash-flow/trends': {
8659
+ '/api/v1/{region}/dashboard/cash-flow': {
8076
8660
  get: {
8077
- req: ReportingControllerGetCashFlowTrendsData;
8661
+ req: DashboardControllerGetCashFlowData;
8078
8662
  res: {
8079
8663
  /**
8080
- * Cash-flow trends retrieved successfully
8664
+ * Cash flow retrieved successfully
8081
8665
  */
8082
- 200: CashFlowTrendsResponseDto;
8666
+ 200: CashFlowResponseDto;
8667
+ /**
8668
+ * Invalid period format
8669
+ */
8670
+ 400: unknown;
8083
8671
  /**
8084
8672
  * User not authenticated
8085
8673
  */
@@ -8087,16 +8675,16 @@ type $OpenApiTs = {
8087
8675
  };
8088
8676
  };
8089
8677
  };
8090
- '/api/v1/{region}/reporting/snapshots/generate': {
8091
- post: {
8092
- req: ReportingControllerGenerateSnapshotData;
8678
+ '/api/v1/{region}/dashboard/expenses': {
8679
+ get: {
8680
+ req: DashboardControllerGetExpensesData;
8093
8681
  res: {
8094
8682
  /**
8095
- * Snapshot generated successfully
8683
+ * Expenses retrieved successfully
8096
8684
  */
8097
- 200: GenerateSnapshotResponse;
8685
+ 200: ExpensesByCategoryResponseDto;
8098
8686
  /**
8099
- * Invalid date format
8687
+ * Invalid groupBy or period
8100
8688
  */
8101
8689
  400: unknown;
8102
8690
  /**
@@ -8106,26 +8694,22 @@ type $OpenApiTs = {
8106
8694
  };
8107
8695
  };
8108
8696
  };
8109
- '/api/v1/{region}/reporting/snapshots/backfill': {
8110
- post: {
8111
- req: ReportingControllerBackfillSnapshotsData;
8697
+ '/api/v1/{region}/investment/holdings/pnl': {
8698
+ get: {
8699
+ req: HoldingPnlControllerGetHoldingPnlData;
8112
8700
  res: {
8113
8701
  /**
8114
- * Backfill completed successfully
8702
+ * Holding P&L retrieved successfully
8115
8703
  */
8116
- 200: BackfillSnapshotsResponse;
8704
+ 200: HoldingPnlResponseDto;
8117
8705
  /**
8118
- * Invalid date format or range
8706
+ * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
8119
8707
  */
8120
8708
  400: unknown;
8121
8709
  /**
8122
8710
  * User not authenticated
8123
8711
  */
8124
8712
  401: unknown;
8125
- /**
8126
- * Backfill already in progress for this user
8127
- */
8128
- 409: unknown;
8129
8713
  };
8130
8714
  };
8131
8715
  };
@@ -8150,7 +8734,7 @@ type $OpenApiTs = {
8150
8734
  /**
8151
8735
  * Login successful
8152
8736
  */
8153
- 200: unknown;
8737
+ 200: AnonymousLoginResponseDto;
8154
8738
  /**
8155
8739
  * Invalid access token
8156
8740
  */
@@ -8318,7 +8902,7 @@ declare class BeanAccountsService {
8318
8902
  * @param data.type Filter by account type
8319
8903
  * @param data.status Filter by status
8320
8904
  * @param data.isCustom Filter by custom (user-created) accounts only
8321
- * @param data.search Search term for path or i18nKey
8905
+ * @param data.search Search term for account path
8322
8906
  * @param data.limit Maximum number of results
8323
8907
  * @param data.offset Number of results to skip
8324
8908
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -8378,6 +8962,17 @@ declare class BeanAccountsService {
8378
8962
  * @throws ApiError
8379
8963
  */
8380
8964
  static accountControllerReopen(data: AccountControllerReopenData): CancelablePromise<AccountControllerReopenResponse>;
8965
+ /**
8966
+ * Post an opening-balance transaction
8967
+ * Posts a double-entry opening-balance transaction against Equity:Opening-Balances for an existing Assets/Liabilities account. At most one active opening balance per account.
8968
+ * @param data The data for the request.
8969
+ * @param data.id Account UUID
8970
+ * @param data.region Region code for tenant context
8971
+ * @param data.requestBody
8972
+ * @returns OpeningBalanceResultDto Opening-balance transaction created
8973
+ * @throws ApiError
8974
+ */
8975
+ static accountControllerAddOpeningBalance(data: AccountControllerAddOpeningBalanceData): CancelablePromise<AccountControllerAddOpeningBalanceResponse>;
8381
8976
  }
8382
8977
  declare class BeanTransactionsService {
8383
8978
  /**
@@ -8479,7 +9074,7 @@ declare class BeanBalancesService {
8479
9074
  * Query account balance
8480
9075
  * Calculate account balance at a specific date for a single currency
8481
9076
  * @param data The data for the request.
8482
- * @param data.account Account name (e.g., "Assets:Bank:Checking")
9077
+ * @param data.account Account name (e.g., "Assets:Checking")
8483
9078
  * @param data.region Region code for tenant context
8484
9079
  * @param data.date Date to calculate balance at (ISO 8601 format)
8485
9080
  * @param data.currency Currency to query (e.g., "USD", "CNY")
@@ -8709,4 +9304,4 @@ type OpenAPIConfig = {
8709
9304
  };
8710
9305
  declare const OpenAPI: OpenAPIConfig;
8711
9306
 
8712
- export { type $OpenApiTs, type AccountControllerCloseData, type AccountControllerCloseResponse, type AccountControllerCreateData, type AccountControllerCreateResponse, type AccountControllerDeleteData, type AccountControllerDeleteResponse, type AccountControllerFindAllData, type AccountControllerFindAllResponse, type AccountControllerFindOneData, type AccountControllerFindOneResponse, type AccountControllerReopenData, type AccountControllerReopenResponse, type AccountControllerUpdateData, type AccountControllerUpdateResponse, type AccountExchangeRateWarningDto, type AccountItemDto, type AccountItemWithAssetClassDto, type AccountListResponseDto, type AccountResponseDto, type AccountStandardListResponseDto, type AccountStandardResponseDto, type AccountStandardsControllerGetRegionsData, type AccountStandardsControllerGetRegionsResponse, type AccountStandardsControllerGetTemplateMetadataData, type AccountStandardsControllerGetTemplateMetadataResponse, type AccountStandardsControllerGetTemplatesData, type AccountStandardsControllerGetTemplatesResponse, type AccountsResponseDto, type AccountsSummaryDto, type AmountDto, type AmountRangeDto, type AnonymousLoginDto, type ApiKeysControllerCreateApiKeyResponse, type ApiProblemResponseDto, type AssetClassAccountsResponseDto, type AssetClassGroupDto, type AssetClassSummaryDto, type AuthControllerAccessTokenLoginData, type AuthControllerAccessTokenLoginResponse, type BackfillSnapshotsBody, type BackfillSnapshotsResponse, type BalanceByCurrencyDto, type BalanceControllerGetBalanceData, type BalanceControllerGetBalanceResponse, type BalanceControllerGetMultiCurrencyBalanceData, type BalanceControllerGetMultiCurrencyBalanceResponse, type BalanceResponseDto, type BatchCreateTransactionDto, type BatchResolveDto, type BatchResolveResultDto, type BatchTransactionErrorDto, type BatchTransactionResponseDto, BeanAccountsService, BeanBalancesService, BeanCommoditiesService, BeanTransactionsService, type BulkCreateRulesDto, type BulkCreateRulesResponseDto, type CacheControllerFlushCacheResponse, type CashFlowByCurrencyDto, type CashFlowPointDto, type CashFlowResponseDto, type CashFlowTrendSummaryDto, type CashFlowTrendsResponseDto, type CategoryGroupDto, type CloseAccountDto, type CommodityControllerBulkCreateData, type CommodityControllerBulkCreateResponse, type CommodityControllerCreateData, type CommodityControllerCreateResponse, type CommodityControllerDeleteData, type CommodityControllerDeleteResponse, type CommodityControllerFindAllData, type CommodityControllerFindAllResponse, type CommodityControllerFindOneData, type CommodityControllerFindOneResponse, type CommodityControllerGetOrCreateData, type CommodityControllerGetOrCreateResponse, type CommodityControllerUpdateData, type CommodityControllerUpdateResponse, type CommodityListResponseDto, type CommodityResponseDto, type ConfirmMatchDto, type ConvertedCashFlowDto, type ConvertedNetWorthDto, type CorrectTransactionDto, type CostDetailDto, type CostSpecDto, type CreateAccountDto, type CreateBeanEventDto, type CreateBeanPriceDto, type CreateCommodityDto, type CreatePayeeDto, type CreatePayeeProfileDto, type CreatePlatformDto, type CreatePostingDto, type CreateRecurringRuleDto, type CreateRuleFromTransactionDto, type CreateTransactionDto, type CreateTransactionRuleDto, type CurrencyBalanceDto, type CurrentPriceDto, type DashboardControllerGetAccountsData, type DashboardControllerGetAccountsResponse, type DashboardControllerGetCashFlowData, type DashboardControllerGetCashFlowResponse, type DashboardControllerGetExpensesData, type DashboardControllerGetExpensesResponse, type DashboardControllerGetNetWorthData, type DashboardControllerGetNetWorthResponse, type DecisionOptionDto, type DeleteOwnUserDto, type EnterNowDto, type EventControllerCreateData, type EventControllerCreateResponse, type EventControllerDeleteData, type EventControllerDeleteResponse, type EventControllerFindAllData, type EventControllerFindAllResponse, type EventControllerFindOneData, type EventControllerFindOneResponse, type EventControllerGetSliceData, type EventControllerGetSliceResponse, type EventControllerUpdateData, type EventControllerUpdateResponse, type EventListResponseDto, type EventResponseDto, type ExchangeRateControllerGetExchangeRateData, type ExchangeRateControllerGetExchangeRateResponse, type ExchangeRateWarningDto, type ExpectedTransactionControllerConfirmMatchData, type ExpectedTransactionControllerConfirmMatchResponse, type ExpectedTransactionControllerEnterNowData, type ExpectedTransactionControllerEnterNowResponse, type ExpectedTransactionControllerFindAllData, type ExpectedTransactionControllerFindAllResponse, type ExpectedTransactionControllerFindOneData, type ExpectedTransactionControllerFindOneResponse, type ExpectedTransactionControllerFindOverdueData, type ExpectedTransactionControllerFindOverdueResponse, type ExpectedTransactionControllerSkipData, type ExpectedTransactionControllerSkipResponse, type ExpectedTransactionControllerUndoSkipData, type ExpectedTransactionControllerUndoSkipResponse, type ExpectedTransactionControllerUnmatchData, type ExpectedTransactionControllerUnmatchResponse, type ExpectedTransactionListResponseDto, type ExpectedTransactionResponseDto, type ExpectedTransactionRuleDto, type ExpensesByCategoryResponseDto, type ExpensesByCategorySummaryDto, type ExportControllerExportBeancountResponse, type ExportRulesResponseDto, type FileImportControllerIdentifyFileData, type FileImportControllerIdentifyFileResponse, type FileImportControllerImportBeancountData, type FileImportControllerImportBeancountResponse, type FileImportControllerImportFileData, type FileImportControllerImportFileResponse, type FileImportDto, type ForecastControllerGetForecastData, type ForecastControllerGetForecastResponse, type ForecastItemDto, type ForecastResponseDto, type FxRateDto, type GenerateSnapshotBody, type GenerateSnapshotResponse, type HealthControllerCheckDatabaseResponse, type HealthControllerCheckOpenBbResponse, type HealthControllerCheckRedisResponse, type HealthControllerGetCircuitBreakersHealthResponse, type HealthControllerGetHealthResponse, type HealthControllerGetMetricsResponse, type HealthControllerResetCircuitBreakerData, type HealthControllerResetCircuitBreakerResponse, HealthService, type HoldingAssetClassAccountSliceDto, type HoldingAssetClassCrossAccountResponseDto, type HoldingPnlControllerGetHoldingPnlData, type HoldingPnlControllerGetHoldingPnlResponse, type HoldingPnlResponseDto, type HoldingPnlRowDto, type HoldingPnlWarningDto, type IdentifyResultDto, type ImportErrorDto, type ImportResultDto, type ImporterConfigControllerGetConfigData, type ImporterConfigControllerGetConfigResponse, type ImporterConfigControllerResetConfigData, type ImporterConfigControllerResetConfigResponse, type ImporterConfigControllerUpdateConfigData, type ImporterConfigControllerUpdateConfigResponse, type ImporterConfigDataDto, type ImporterConfigDto, type InfoControllerGetInfoResponse, type MapperDefaultsDto, type MonetaryDto, type MonthlyForecastDto, type MultiCurrencyBalanceResponseDto, type MultiCurrencyPointDto, type NetWorthByCurrencyDto, type NetWorthResponseDto, type NlpAccountConfirmationDataDto, type NlpAlternativePayeeDto, type NlpControllerClearSessionData, type NlpControllerClearSessionResponse, type NlpControllerGetSessionData, type NlpControllerGetSessionResponse, type NlpControllerProcessNaturalLanguageData, type NlpControllerProcessNaturalLanguageResponse, type NlpDefaultAccountsDto, type NlpDuplicateConfirmationDataDto, type NlpParsedDataDto, type NlpPayeeConfirmationDataDto, type NlpResponseDto, type NlpRuleConfirmationDataDto, type NlpSimilarityDto, type NlpSourceTransactionDto, type NlpSuggestedAccountDto, type NlpSuggestedAccountsDto, type NlpSuggestedPayeeDto, type NlpTargetTransactionDto, type NlpTransactionInfoDto, OpenAPI, type OpenAPIConfig, type ParserTelemetryReportDto, type PayeeAutocompleteResponseDto, type PayeeControllerAutocompleteData, type PayeeControllerAutocompleteResponse, type PayeeControllerCreateData, type PayeeControllerCreateResponse, type PayeeControllerDeleteData, type PayeeControllerDeleteResponse, type PayeeControllerFindAllData, type PayeeControllerFindAllResponse, type PayeeControllerFindOneData, type PayeeControllerFindOneResponse, type PayeeControllerGetTopPayeesData, type PayeeControllerGetTopPayeesResponse, type PayeeControllerUpdateData, type PayeeControllerUpdateResponse, type PayeeListResponseDto, type PayeeProfileAdminControllerCreateData, type PayeeProfileAdminControllerCreateResponse, type PayeeProfileAdminControllerDeleteData, type PayeeProfileAdminControllerDeleteResponse, type PayeeProfileAdminControllerFindAllData, type PayeeProfileAdminControllerFindAllResponse, type PayeeProfileAdminControllerFindOneData, type PayeeProfileAdminControllerFindOneResponse, type PayeeProfileAdminControllerUnverifyData, type PayeeProfileAdminControllerUnverifyResponse, type PayeeProfileAdminControllerUpdateData, type PayeeProfileAdminControllerUpdateResponse, type PayeeProfileAdminControllerVerifyData, type PayeeProfileAdminControllerVerifyResponse, type PayeeProfileListResponseDto, type PayeeProfileResponseDto, type PayeeResponseDto, type PayeeStatsResponseDto, type PlatformControllerCreateData, type PlatformControllerCreateResponse, type PlatformControllerDeleteData, type PlatformControllerDeleteResponse, type PlatformControllerFindAllResponse, type PlatformControllerGetPlatformListResponse, type PlatformControllerMatchPlatformsData, type PlatformControllerMatchPlatformsResponse, type PlatformControllerUpdateData, type PlatformControllerUpdateResponse, type PlatformGroupDto, type PortfolioTrendsResponseDto, type PostingDetailDto, type PostingResponseDto, type PriceControllerBulkCreateData, type PriceControllerBulkCreateResponse, type PriceControllerCreateData, type PriceControllerCreateResponse, type PriceControllerDeleteData, type PriceControllerDeleteResponse, type PriceControllerFindAllData, type PriceControllerFindAllResponse, type PriceControllerFindOneData, type PriceControllerFindOneResponse, type PriceControllerUpdateData, type PriceControllerUpdateResponse, type PriceListResponseDto, type PriceResponseDto, type ProcessNlpDto, type PropertyControllerDeleteData, type PropertyControllerDeleteResponse, type PropertyControllerGetAllResponse, type PropertyControllerGetByKeyData, type PropertyControllerGetByKeyResponse, type PropertyControllerUpdateData, type PropertyControllerUpdateResponse, type ProviderSyncConfigDto, type ProviderSyncControllerGetSupportedProvidersData, type ProviderSyncControllerGetSupportedProvidersResponse, type ProviderSyncControllerIsProviderSupportedData, type ProviderSyncControllerIsProviderSupportedResponse, type ProviderSyncControllerSyncData, type ProviderSyncControllerSyncResponse, type ProviderSyncDto, type ProviderSyncResponseDto, ProviderSyncService, type RecurringMatchInfoDto, type RecurringRuleControllerCreateData, type RecurringRuleControllerCreateFromTransactionData, type RecurringRuleControllerCreateFromTransactionResponse, type RecurringRuleControllerCreateResponse, type RecurringRuleControllerDeleteData, type RecurringRuleControllerDeleteResponse, type RecurringRuleControllerFindAllData, type RecurringRuleControllerFindAllResponse, type RecurringRuleControllerFindOneData, type RecurringRuleControllerFindOneResponse, type RecurringRuleControllerGetWithStatsData, type RecurringRuleControllerGetWithStatsResponse, type RecurringRuleControllerUpdateData, type RecurringRuleControllerUpdateResponse, type RecurringRuleResponseDto, type RecurringRuleWithStatsResponseDto, type RecurringSuggestionDto, type RegionConfigDto, type RegionInfoDto, type RegionsMetadataResponseDto, type ReopenAccountDto, type ReportingControllerBackfillSnapshotsData, type ReportingControllerBackfillSnapshotsResponse, type ReportingControllerGenerateSnapshotData, type ReportingControllerGenerateSnapshotResponse, type ReportingControllerGetCashFlowTrendsData, type ReportingControllerGetCashFlowTrendsResponse, type ReportingControllerGetPortfolioTrendsData, type ReportingControllerGetPortfolioTrendsResponse, type ResolveResultDto, type ResolveReviewDto, type ReviewControllerBatchResolveData, type ReviewControllerBatchResolveResponse, type ReviewControllerFindAllData, type ReviewControllerFindAllResponse, type ReviewControllerFindOneData, type ReviewControllerFindOneResponse, type ReviewControllerGetStatsData, type ReviewControllerGetStatsResponse, type ReviewControllerResolveData, type ReviewControllerResolveResponse, type ReviewControllerUndoData, type ReviewControllerUndoResponse, type ReviewDetailDto, type ReviewItemPreviewDto, type ReviewListResponseDto, type ReviewStatsDto, type ReviewSummaryDto, type RuleStatisticsResponseDto, type SignupDto, type SupportedProvidersResponseDto, type TagSuggestionDto, type TagSuggestionsResponseDto, type TelemetryControllerGetCoverageMetricsData, type TelemetryControllerGetCoverageMetricsResponse, type TelemetryControllerReportCoverageMissData, type TelemetryControllerReportCoverageMissResponse, type TelemetryControllerReportTelemetryData, type TelemetryControllerReportTelemetryResponse, type TemplateMetadataDto, type TemplateMetadataResponseDto, type TestRuleDto, type TestRuleResponseDto, type TimeSeriesPointDto, type TransactionControllerCorrectData, type TransactionControllerCorrectResponse, type TransactionControllerCreateBatchData, type TransactionControllerCreateBatchResponse, type TransactionControllerCreateData, type TransactionControllerCreateResponse, type TransactionControllerDeleteData, type TransactionControllerDeleteResponse, type TransactionControllerGetDetailData, type TransactionControllerGetDetailResponse, type TransactionControllerListData, type TransactionControllerListResponse, type TransactionControllerSuggestTagsData, type TransactionControllerSuggestTagsResponse, type TransactionControllerUpdateData, type TransactionControllerUpdateResponse, type TransactionDetailDto, type TransactionListResponseDto, type TransactionResponseDto, type TransactionRuleControllerBulkCreateData, type TransactionRuleControllerBulkCreateResponse, type TransactionRuleControllerCreateData, type TransactionRuleControllerCreateResponse, type TransactionRuleControllerDeleteData, type TransactionRuleControllerDeleteResponse, type TransactionRuleControllerExportData, type TransactionRuleControllerExportResponse, type TransactionRuleControllerGetDetailData, type TransactionRuleControllerGetDetailResponse, type TransactionRuleControllerGetStatisticsData, type TransactionRuleControllerGetStatisticsResponse, type TransactionRuleControllerListData, type TransactionRuleControllerListResponse, type TransactionRuleControllerTestData, type TransactionRuleControllerTestResponse, type TransactionRuleControllerUpdateData, type TransactionRuleControllerUpdateResponse, type TransactionRuleControllerValidateData, type TransactionRuleControllerValidateResponse, type TransactionRuleListResponseDto, type TransactionRuleResponseDto, type TransactionSummaryDto, type TrendSummaryDto, type UncoveredFormatMissDto, type UndoResultDto, type UpdateAccountDto, type UpdateBeanEventDto, type UpdateBeanPriceDto, type UpdateCommodityDto, type UpdateConfigDataDto, type UpdateImporterConfigDto, type UpdateMapperDefaultsDto, type UpdatePayeeDto, type UpdatePayeeProfileDto, type UpdatePlatformDto, type UpdatePropertyDto, type UpdateRecurringRuleDto, type UpdateTransactionDto, type UpdateTransactionRuleDto, type UpdateUserSettingDto, type UserControllerDeleteOwnUserData, type UserControllerDeleteOwnUserResponse, type UserControllerDeleteUserData, type UserControllerDeleteUserResponse, type UserControllerGetAllUserSettingsByPageData, type UserControllerGetAllUserSettingsByPageResponse, type UserControllerGetAssetLiabilitySummaryResponse, type UserControllerGetUserData, type UserControllerGetUserInfoData, type UserControllerGetUserInfoResponse, type UserControllerGetUserResponse, type UserControllerSignupUserData, type UserControllerSignupUserResponse, type UserControllerUpdateUserSettingData, type UserControllerUpdateUserSettingResponse, type ValidateRuleDto, type ValidateRuleResponseDto, type VersionedConfigDto, type action, type action2, type assetClass, type assetSubType, type bookingMethod, type branchType, type category, type chartToken, type colorScheme, type confidenceLevel, type conflictStrategy, type dataSource, type equitySubType, type flag, type flag2, type frequency, type importerId, type intent, type investmentAction, type learningSource, type liabilitySubType, type matchLogic, type method, type mode, type paymentSource, type period, type source, type source2, type source3, type status, type status2, type status3, type status4, type suggestedFrequency, type type, type type2, type type3, type type4, type value, type viewMode };
9307
+ export { type $OpenApiTs, type AccountControllerAddOpeningBalanceData, type AccountControllerAddOpeningBalanceResponse, type AccountControllerCloseData, type AccountControllerCloseResponse, type AccountControllerCreateData, type AccountControllerCreateResponse, type AccountControllerDeleteData, type AccountControllerDeleteResponse, type AccountControllerFindAllData, type AccountControllerFindAllResponse, type AccountControllerFindOneData, type AccountControllerFindOneResponse, type AccountControllerReopenData, type AccountControllerReopenResponse, type AccountControllerUpdateData, type AccountControllerUpdateResponse, type AccountExchangeRateWarningDto, type AccountItemDto, type AccountItemWithAssetClassDto, type AccountListResponseDto, type AccountResponseDto, type AccountStandardListResponseDto, type AccountStandardResponseDto, type AccountStandardsControllerGetRegionsData, type AccountStandardsControllerGetRegionsResponse, type AccountStandardsControllerGetTemplateMetadataData, type AccountStandardsControllerGetTemplateMetadataResponse, type AccountStandardsControllerGetTemplatesData, type AccountStandardsControllerGetTemplatesResponse, type AccountsResponseDto, type AccountsSummaryDto, type ActualBalanceDto, type AmountDto, type AmountRangeDto, type AnonymousLoginDto, type AnonymousLoginResponseDto, type ApiKeysControllerCreateApiKeyResponse, type ApiProblemResponseDto, type AssertReconciliationDto, type AssetClassAccountsResponseDto, type AssetClassGroupDto, type AssetClassSummaryDto, type AuthControllerAccessTokenLoginData, type AuthControllerAccessTokenLoginResponse, type BackfillSnapshotsBody, type BackfillSnapshotsResponse, type BalanceByCurrencyDto, type BalanceControllerGetBalanceData, type BalanceControllerGetBalanceResponse, type BalanceControllerGetMultiCurrencyBalanceData, type BalanceControllerGetMultiCurrencyBalanceResponse, type BalanceResponseDto, type BatchCreateTransactionDto, type BatchResolveDto, type BatchResolveResultDto, type BatchTransactionErrorDto, type BatchTransactionResponseDto, BeanAccountsService, BeanBalancesService, BeanCommoditiesService, BeanTransactionsService, type BulkCreateRulesDto, type BulkCreateRulesResponseDto, type CacheControllerFlushCacheResponse, type CashFlowByCurrencyDto, type CashFlowPointDto, type CashFlowResponseDto, type CashFlowTrendSummaryDto, type CashFlowTrendsResponseDto, type CategoryGroupDto, type CloseAccountDto, type CommodityControllerBulkCreateData, type CommodityControllerBulkCreateResponse, type CommodityControllerCreateData, type CommodityControllerCreateResponse, type CommodityControllerDeleteData, type CommodityControllerDeleteResponse, type CommodityControllerFindAllData, type CommodityControllerFindAllResponse, type CommodityControllerFindOneData, type CommodityControllerFindOneResponse, type CommodityControllerGetOrCreateData, type CommodityControllerGetOrCreateResponse, type CommodityControllerUpdateData, type CommodityControllerUpdateResponse, type CommodityListResponseDto, type CommodityResponseDto, type ComputeReconciliationDto, type ConfirmMatchDto, type ConvertedCashFlowDto, type ConvertedNetWorthDto, type CorrectTransactionDto, type CostDetailDto, type CostSpecDto, type CreateAccountDto, type CreateBeanEventDto, type CreateBeanPriceDto, type CreateCommodityDto, type CreateExternalAccountLinkDto, type CreateOpeningBalanceDto, type CreatePayeeDto, type CreatePayeeProfileDto, type CreatePlatformDto, type CreatePostingDto, type CreateRecurringRuleDto, type CreateRuleFromTransactionDto, type CreateTransactionDto, type CreateTransactionRuleDto, type CurrencyBalanceDto, type CurrentPriceDto, type DashboardControllerGetAccountsData, type DashboardControllerGetAccountsResponse, type DashboardControllerGetCashFlowData, type DashboardControllerGetCashFlowResponse, type DashboardControllerGetExpensesData, type DashboardControllerGetExpensesResponse, type DashboardControllerGetNetWorthData, type DashboardControllerGetNetWorthResponse, type DecisionOptionDto, type DeleteOwnUserDto, type EnterNowDto, type EventControllerCreateData, type EventControllerCreateResponse, type EventControllerDeleteData, type EventControllerDeleteResponse, type EventControllerFindAllData, type EventControllerFindAllResponse, type EventControllerFindOneData, type EventControllerFindOneResponse, type EventControllerGetSliceData, type EventControllerGetSliceResponse, type EventControllerUpdateData, type EventControllerUpdateResponse, type EventListResponseDto, type EventResponseDto, type ExchangeRateControllerGetExchangeRateData, type ExchangeRateControllerGetExchangeRateResponse, type ExchangeRateWarningDto, type ExpectedTransactionControllerConfirmMatchData, type ExpectedTransactionControllerConfirmMatchResponse, type ExpectedTransactionControllerEnterNowData, type ExpectedTransactionControllerEnterNowResponse, type ExpectedTransactionControllerFindAllData, type ExpectedTransactionControllerFindAllResponse, type ExpectedTransactionControllerFindOneData, type ExpectedTransactionControllerFindOneResponse, type ExpectedTransactionControllerFindOverdueData, type ExpectedTransactionControllerFindOverdueResponse, type ExpectedTransactionControllerSkipData, type ExpectedTransactionControllerSkipResponse, type ExpectedTransactionControllerUndoSkipData, type ExpectedTransactionControllerUndoSkipResponse, type ExpectedTransactionControllerUnmatchData, type ExpectedTransactionControllerUnmatchResponse, type ExpectedTransactionListResponseDto, type ExpectedTransactionResponseDto, type ExpectedTransactionRuleDto, type ExpensesByCategoryResponseDto, type ExpensesByCategorySummaryDto, type ExportControllerExportBeancountResponse, type ExportRulesResponseDto, type ExternalAccountLinkControllerCreateData, type ExternalAccountLinkControllerCreateResponse, type ExternalAccountLinkControllerFindAllData, type ExternalAccountLinkControllerFindAllResponse, type ExternalAccountLinkControllerFindOneData, type ExternalAccountLinkControllerFindOneResponse, type ExternalAccountLinkControllerRemoveData, type ExternalAccountLinkControllerRemoveResponse, type ExternalAccountLinkListResponseDto, type ExternalAccountLinkResponseDto, type FileImportControllerIdentifyFileData, type FileImportControllerIdentifyFileResponse, type FileImportControllerImportBeancountData, type FileImportControllerImportBeancountResponse, type FileImportControllerImportFileData, type FileImportControllerImportFileResponse, type FileImportDto, type ForecastControllerGetForecastData, type ForecastControllerGetForecastResponse, type ForecastItemDto, type ForecastResponseDto, type FxRateDto, type GenerateSnapshotBody, type GenerateSnapshotResponse, type HealthControllerCheckDatabaseResponse, type HealthControllerCheckOpenBbResponse, type HealthControllerCheckRedisResponse, type HealthControllerGetCircuitBreakersHealthResponse, type HealthControllerGetHealthResponse, type HealthControllerGetMetricsResponse, type HealthControllerResetCircuitBreakerData, type HealthControllerResetCircuitBreakerResponse, HealthService, type HoldingAssetClassAccountSliceDto, type HoldingAssetClassCrossAccountResponseDto, type HoldingPnlControllerGetHoldingPnlData, type HoldingPnlControllerGetHoldingPnlResponse, type HoldingPnlResponseDto, type HoldingPnlRowDto, type HoldingPnlWarningDto, type IdentifyResultDto, type ImportErrorDto, type ImportResultDto, type ImporterConfigControllerGetConfigData, type ImporterConfigControllerGetConfigResponse, type ImporterConfigControllerResetConfigData, type ImporterConfigControllerResetConfigResponse, type ImporterConfigControllerUpdateConfigData, type ImporterConfigControllerUpdateConfigResponse, type ImporterConfigDataDto, type ImporterConfigDto, type InfoControllerGetInfoResponse, type MapperDefaultsDto, type MonetaryDto, type MonthlyForecastDto, type MultiCurrencyBalanceResponseDto, type MultiCurrencyPointDto, type NetWorthByCurrencyDto, type NetWorthResponseDto, type NlpAccountConfirmationDataDto, type NlpAlternativePayeeDto, type NlpControllerClearSessionData, type NlpControllerClearSessionResponse, type NlpControllerGetSessionData, type NlpControllerGetSessionResponse, type NlpControllerProcessNaturalLanguageData, type NlpControllerProcessNaturalLanguageResponse, type NlpDefaultAccountsDto, type NlpDuplicateConfirmationDataDto, type NlpParsedDataDto, type NlpPayeeConfirmationDataDto, type NlpResponseDto, type NlpRuleConfirmationDataDto, type NlpSimilarityDto, type NlpSourceTransactionDto, type NlpSuggestedAccountDto, type NlpSuggestedAccountsDto, type NlpSuggestedPayeeDto, type NlpTargetTransactionDto, type NlpTransactionInfoDto, type OnboardingAccountDto, type OnboardingControllerBootstrapData, type OnboardingControllerBootstrapResponse, type OnboardingDto, OpenAPI, type OpenAPIConfig, type OpeningBalanceResultDto, type PadReconciliationDto, type PadResultDto, type ParserTelemetryReportDto, type PayeeAutocompleteResponseDto, type PayeeControllerAutocompleteData, type PayeeControllerAutocompleteResponse, type PayeeControllerCreateData, type PayeeControllerCreateResponse, type PayeeControllerDeleteData, type PayeeControllerDeleteResponse, type PayeeControllerFindAllData, type PayeeControllerFindAllResponse, type PayeeControllerFindOneData, type PayeeControllerFindOneResponse, type PayeeControllerGetTopPayeesData, type PayeeControllerGetTopPayeesResponse, type PayeeControllerUpdateData, type PayeeControllerUpdateResponse, type PayeeListResponseDto, type PayeeProfileAdminControllerCreateData, type PayeeProfileAdminControllerCreateResponse, type PayeeProfileAdminControllerDeleteData, type PayeeProfileAdminControllerDeleteResponse, type PayeeProfileAdminControllerFindAllData, type PayeeProfileAdminControllerFindAllResponse, type PayeeProfileAdminControllerFindOneData, type PayeeProfileAdminControllerFindOneResponse, type PayeeProfileAdminControllerUnverifyData, type PayeeProfileAdminControllerUnverifyResponse, type PayeeProfileAdminControllerUpdateData, type PayeeProfileAdminControllerUpdateResponse, type PayeeProfileAdminControllerVerifyData, type PayeeProfileAdminControllerVerifyResponse, type PayeeProfileListResponseDto, type PayeeProfileResponseDto, type PayeeResponseDto, type PayeeStatsResponseDto, type PlatformControllerCreateData, type PlatformControllerCreateResponse, type PlatformControllerDeleteData, type PlatformControllerDeleteResponse, type PlatformControllerFindAllResponse, type PlatformControllerGetPlatformListResponse, type PlatformControllerMatchPlatformsData, type PlatformControllerMatchPlatformsResponse, type PlatformControllerUpdateData, type PlatformControllerUpdateResponse, type PlatformGroupDto, type PlatformListItemDto, type PlatformMatchResponseDto, type PlatformMatchResultDto, type PortfolioTrendsResponseDto, type PostingDetailDto, type PostingResponseDto, type PriceControllerBulkCreateData, type PriceControllerBulkCreateResponse, type PriceControllerCreateData, type PriceControllerCreateResponse, type PriceControllerDeleteData, type PriceControllerDeleteResponse, type PriceControllerFindAllData, type PriceControllerFindAllResponse, type PriceControllerFindOneData, type PriceControllerFindOneResponse, type PriceControllerUpdateData, type PriceControllerUpdateResponse, type PriceListResponseDto, type PriceResponseDto, type ProcessNlpDto, type PropertyControllerDeleteData, type PropertyControllerDeleteResponse, type PropertyControllerGetAllResponse, type PropertyControllerGetByKeyData, type PropertyControllerGetByKeyResponse, type PropertyControllerUpdateData, type PropertyControllerUpdateResponse, type ProviderSyncConfigDto, type ProviderSyncControllerGetSupportedProvidersData, type ProviderSyncControllerGetSupportedProvidersResponse, type ProviderSyncControllerIsProviderSupportedData, type ProviderSyncControllerIsProviderSupportedResponse, type ProviderSyncControllerSyncData, type ProviderSyncControllerSyncResponse, type ProviderSyncDto, type ProviderSyncResponseDto, ProviderSyncService, type ReconciliationComputeResultDto, type ReconciliationControllerAssertData, type ReconciliationControllerAssertResponse, type ReconciliationControllerComputeData, type ReconciliationControllerComputeResponse, type ReconciliationControllerHistoryData, type ReconciliationControllerHistoryResponse, type ReconciliationControllerPadData, type ReconciliationControllerPadResponse, type ReconciliationRecordDto, type RecurringMatchInfoDto, type RecurringRuleControllerCreateData, type RecurringRuleControllerCreateFromTransactionData, type RecurringRuleControllerCreateFromTransactionResponse, type RecurringRuleControllerCreateResponse, type RecurringRuleControllerDeleteData, type RecurringRuleControllerDeleteResponse, type RecurringRuleControllerFindAllData, type RecurringRuleControllerFindAllResponse, type RecurringRuleControllerFindOneData, type RecurringRuleControllerFindOneResponse, type RecurringRuleControllerGetWithStatsData, type RecurringRuleControllerGetWithStatsResponse, type RecurringRuleControllerUpdateData, type RecurringRuleControllerUpdateResponse, type RecurringRuleResponseDto, type RecurringRuleWithStatsResponseDto, type RecurringSuggestionDto, type RegionConfigDto, type RegionInfoDto, type RegionsMetadataResponseDto, type ReopenAccountDto, type ReportingControllerBackfillSnapshotsData, type ReportingControllerBackfillSnapshotsResponse, type ReportingControllerGenerateSnapshotData, type ReportingControllerGenerateSnapshotResponse, type ReportingControllerGetCashFlowTrendsData, type ReportingControllerGetCashFlowTrendsResponse, type ReportingControllerGetPortfolioTrendsData, type ReportingControllerGetPortfolioTrendsResponse, type ResolveResultDto, type ResolveReviewDto, type ReviewControllerBatchResolveData, type ReviewControllerBatchResolveResponse, type ReviewControllerFindAllData, type ReviewControllerFindAllResponse, type ReviewControllerFindOneData, type ReviewControllerFindOneResponse, type ReviewControllerGetStatsData, type ReviewControllerGetStatsResponse, type ReviewControllerResolveData, type ReviewControllerResolveResponse, type ReviewControllerUndoData, type ReviewControllerUndoResponse, type ReviewDetailDto, type ReviewItemPreviewDto, type ReviewListResponseDto, type ReviewStatsDto, type ReviewSummaryDto, type RuleStatisticsResponseDto, type SignupDto, type SignupResponseDto, type SupportedProvidersResponseDto, type TagSuggestionDto, type TagSuggestionsResponseDto, type TelemetryControllerGetCoverageMetricsData, type TelemetryControllerGetCoverageMetricsResponse, type TelemetryControllerReportCoverageMissData, type TelemetryControllerReportCoverageMissResponse, type TelemetryControllerReportTelemetryData, type TelemetryControllerReportTelemetryResponse, type TemplateMetadataDto, type TemplateMetadataResponseDto, type TestRuleDto, type TestRuleResponseDto, type TimeSeriesPointDto, type TransactionControllerCorrectData, type TransactionControllerCorrectResponse, type TransactionControllerCreateBatchData, type TransactionControllerCreateBatchResponse, type TransactionControllerCreateData, type TransactionControllerCreateResponse, type TransactionControllerDeleteData, type TransactionControllerDeleteResponse, type TransactionControllerGetDetailData, type TransactionControllerGetDetailResponse, type TransactionControllerListData, type TransactionControllerListResponse, type TransactionControllerSuggestTagsData, type TransactionControllerSuggestTagsResponse, type TransactionControllerUpdateData, type TransactionControllerUpdateResponse, type TransactionDetailDto, type TransactionListResponseDto, type TransactionListSummaryDto, type TransactionResponseDto, type TransactionRuleControllerBulkCreateData, type TransactionRuleControllerBulkCreateResponse, type TransactionRuleControllerCreateData, type TransactionRuleControllerCreateResponse, type TransactionRuleControllerDeleteData, type TransactionRuleControllerDeleteResponse, type TransactionRuleControllerExportData, type TransactionRuleControllerExportResponse, type TransactionRuleControllerGetDetailData, type TransactionRuleControllerGetDetailResponse, type TransactionRuleControllerGetStatisticsData, type TransactionRuleControllerGetStatisticsResponse, type TransactionRuleControllerListData, type TransactionRuleControllerListResponse, type TransactionRuleControllerTestData, type TransactionRuleControllerTestResponse, type TransactionRuleControllerUpdateData, type TransactionRuleControllerUpdateResponse, type TransactionRuleControllerValidateData, type TransactionRuleControllerValidateResponse, type TransactionRuleListResponseDto, type TransactionRuleResponseDto, type TransactionSummaryDto, type TrendSummaryDto, type UncoveredFormatMissDto, type UndoResultDto, type UpdateAccountDto, type UpdateBeanEventDto, type UpdateBeanPriceDto, type UpdateCommodityDto, type UpdateConfigDataDto, type UpdateImporterConfigDto, type UpdateMapperDefaultsDto, type UpdatePayeeDto, type UpdatePayeeProfileDto, type UpdatePlatformDto, type UpdatePropertyDto, type UpdateRecurringRuleDto, type UpdateTransactionDto, type UpdateTransactionRuleDto, type UpdateUserSettingDto, type UserControllerDeleteOwnUserData, type UserControllerDeleteOwnUserResponse, type UserControllerDeleteUserData, type UserControllerDeleteUserResponse, type UserControllerGetAllUserSettingsByPageData, type UserControllerGetAllUserSettingsByPageResponse, type UserControllerGetAssetLiabilitySummaryResponse, type UserControllerGetUserData, type UserControllerGetUserInfoData, type UserControllerGetUserInfoResponse, type UserControllerGetUserResponse, type UserControllerSignupUserData, type UserControllerSignupUserResponse, type UserControllerUpdateUserSettingData, type UserControllerUpdateUserSettingResponse, type ValidateRuleDto, type ValidateRuleResponseDto, type VersionedConfigDto, type action, type action2, type assetClass, type assetSubClass, type assetSubType, type bookingMethod, type branchType, type category, type chartToken, type colorScheme, type confidenceLevel, type conflictStrategy, type dataSource, type equitySubType, type flag, type flag2, type frequency, type importerId, type intent, type investmentAction, type learningSource, type liabilitySubType, type matchLogic, type matchType, type matchType2, type method, type mode, type paymentSource, type period, type provider, type role, type source, type source2, type source3, type status, type status2, type status3, type status4, type suggestedAction, type suggestedFrequency, type type, type type2, type type3, type type4, type value, type viewMode };