@firela/api-types 0.0.0-canary.a4e21680 → 0.0.0-canary.a5198363

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
  */
@@ -1688,6 +1688,104 @@ type UpdateCommodityDto = {
1688
1688
  [key: string]: unknown;
1689
1689
  };
1690
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
+ };
1691
1789
  type CreateRecurringRuleDto = {
1692
1790
  /**
1693
1791
  * Rule name (unique per user)
@@ -2285,356 +2383,198 @@ type ForecastResponseDto = {
2285
2383
  */
2286
2384
  periodEnd: string;
2287
2385
  };
2288
- type CreateTransactionRuleDto = {
2289
- name: string;
2290
- description?: string;
2291
- narrationKeywords?: Array<unknown[]>;
2292
- payeeKeywords?: Array<unknown[]>;
2293
- categoryKeywords?: Array<unknown[]>;
2386
+ type CurrencyBalanceDto = {
2294
2387
  /**
2295
- * Payment method keywords (e.g., HuaBei, YuEBao)
2388
+ * ISO 4217 currency code
2296
2389
  */
2297
- methodKeywords?: Array<unknown[]>;
2390
+ currency: string;
2298
2391
  /**
2299
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2392
+ * Balance amount
2300
2393
  */
2301
- categoryAccount?: string;
2302
- matchLogic: 'OR' | 'AND';
2394
+ balance: string;
2395
+ };
2396
+ type TimeSeriesPointDto = {
2303
2397
  /**
2304
- * Minimum transaction amount (inclusive)
2398
+ * Date in YYYY-MM-DD format
2305
2399
  */
2306
- amountMin?: number;
2400
+ date: string;
2307
2401
  /**
2308
- * Maximum transaction amount (inclusive)
2402
+ * Value at this date (in base currency)
2309
2403
  */
2310
- amountMax?: number;
2311
- priority: number;
2312
- additionalTags?: Array<unknown[]>;
2313
- additionalMetadata?: {
2404
+ value: string;
2405
+ /**
2406
+ * Change from previous point
2407
+ */
2408
+ change?: {
2314
2409
  [key: string]: unknown;
2315
2410
  };
2316
2411
  /**
2317
- * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
2412
+ * Total assets at this date (in base currency)
2318
2413
  */
2319
- upsertByPayee?: boolean;
2320
- };
2321
- type matchLogic = 'OR' | 'AND';
2322
- type AmountRangeDto = {
2414
+ assets?: string;
2323
2415
  /**
2324
- * Minimum amount
2416
+ * Total liabilities at this date (in base currency)
2325
2417
  */
2326
- min?: number;
2418
+ liabilities?: string;
2327
2419
  /**
2328
- * Maximum amount
2420
+ * Multi-currency breakdown for this point
2329
2421
  */
2330
- max?: number;
2422
+ byCurrency?: Array<CurrencyBalanceDto>;
2331
2423
  };
2332
- type TransactionRuleResponseDto = {
2424
+ type TrendSummaryDto = {
2333
2425
  /**
2334
- * Rule ID
2426
+ * Value at start of period
2335
2427
  */
2336
- id: string;
2428
+ startValue: string;
2337
2429
  /**
2338
- * Rule name
2430
+ * Value at end of period
2339
2431
  */
2340
- name: string;
2432
+ endValue: string;
2341
2433
  /**
2342
- * Rule description
2434
+ * Total change over period
2343
2435
  */
2344
- description?: string;
2436
+ totalChange: string;
2345
2437
  /**
2346
- * Keywords to match in transaction narration
2438
+ * Total change percentage
2347
2439
  */
2348
- narrationKeywords: Array<string>;
2440
+ totalChangePercentage: string;
2441
+ };
2442
+ type MultiCurrencyPointDto = {
2349
2443
  /**
2350
- * Keywords to match in payee name
2444
+ * Date in YYYY-MM-DD format
2351
2445
  */
2352
- payeeKeywords: Array<string>;
2446
+ date: string;
2353
2447
  /**
2354
- * Keywords to match in category
2448
+ * Balances by currency
2355
2449
  */
2356
- categoryKeywords: Array<string>;
2450
+ byCurrency: Array<CurrencyBalanceDto>;
2451
+ };
2452
+ type PortfolioTrendsResponseDto = {
2357
2453
  /**
2358
- * Keywords to match in payment method
2454
+ * Time series data points
2359
2455
  */
2360
- methodKeywords: Array<string>;
2456
+ series: Array<TimeSeriesPointDto>;
2361
2457
  /**
2362
- * Destination account for categorization
2458
+ * Period summary
2363
2459
  */
2364
- categoryAccount?: string;
2460
+ summary: TrendSummaryDto;
2365
2461
  /**
2366
- * Keyword matching logic
2462
+ * Period requested
2367
2463
  */
2368
- matchLogic: 'OR' | 'AND';
2464
+ period: string;
2369
2465
  /**
2370
- * Amount range for matching
2466
+ * Data granularity
2371
2467
  */
2372
- amountRange?: AmountRangeDto;
2468
+ granularity: string;
2373
2469
  /**
2374
- * Rule priority (0-1000, higher = first match)
2470
+ * Base currency for converted values
2375
2471
  */
2376
- priority: number;
2472
+ currency: string;
2377
2473
  /**
2378
- * Whether the rule is enabled
2474
+ * Multi-currency time series (each point has currency breakdown)
2379
2475
  */
2380
- enabled: boolean;
2476
+ byCurrency?: Array<MultiCurrencyPointDto>;
2381
2477
  /**
2382
- * Learning source: NLP, REVIEW_CENTER, or null for manual
2478
+ * Exchange rate warnings
2383
2479
  */
2384
- learningSource?: 'NLP' | 'REVIEW_CENTER' | null;
2480
+ warnings?: Array<ExchangeRateWarningDto>;
2481
+ };
2482
+ type CashFlowPointDto = {
2385
2483
  /**
2386
- * Whether auto-apply is enabled for this rule
2484
+ * Month key (YYYY-MM)
2387
2485
  */
2388
- autoApplyEnabled: boolean;
2486
+ month: string;
2389
2487
  /**
2390
- * Number of confirmations for NLP-learned rules
2488
+ * Income in base currency (absolute, converted)
2391
2489
  */
2392
- confirmationCount: number;
2393
- /**
2394
- * Additional tags
2395
- */
2396
- additionalTags: Array<string>;
2397
- /**
2398
- * Additional metadata
2399
- */
2400
- additionalMetadata?: {
2401
- [key: string]: string;
2402
- };
2403
- /**
2404
- * Created timestamp
2405
- */
2406
- createdAt: string;
2407
- /**
2408
- * Updated timestamp
2409
- */
2410
- updatedAt: string;
2411
- };
2412
- /**
2413
- * Learning source: NLP, REVIEW_CENTER, or null for manual
2414
- */
2415
- type learningSource = 'NLP' | 'REVIEW_CENTER';
2416
- type TransactionRuleListResponseDto = {
2417
- data: Array<TransactionRuleResponseDto>;
2418
- /**
2419
- * Total count of rules
2420
- */
2421
- total: number;
2422
- /**
2423
- * Results per page
2424
- */
2425
- limit: number;
2426
- /**
2427
- * Pagination offset
2428
- */
2429
- offset: number;
2430
- };
2431
- type ValidateRuleDto = {
2432
- name: string;
2433
- description?: string;
2434
- narrationKeywords?: Array<unknown[]>;
2435
- payeeKeywords?: Array<unknown[]>;
2436
- categoryKeywords?: Array<unknown[]>;
2437
- /**
2438
- * Payment method keywords (e.g., HuaBei, YuEBao)
2439
- */
2440
- methodKeywords?: Array<unknown[]>;
2441
- /**
2442
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2443
- */
2444
- categoryAccount?: string;
2445
- matchLogic: 'OR' | 'AND';
2446
- /**
2447
- * Minimum transaction amount (inclusive)
2448
- */
2449
- amountMin?: number;
2490
+ income: string;
2450
2491
  /**
2451
- * Maximum transaction amount (inclusive)
2492
+ * Expense in base currency (absolute, converted)
2452
2493
  */
2453
- amountMax?: number;
2454
- priority: number;
2455
- additionalTags?: Array<unknown[]>;
2456
- additionalMetadata?: {
2457
- [key: string]: unknown;
2458
- };
2494
+ expense: string;
2459
2495
  /**
2460
- * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
2496
+ * netSavings = income expense (savings positive)
2461
2497
  */
2462
- upsertByPayee?: boolean;
2498
+ netSavings: string;
2463
2499
  };
2464
- type ValidateRuleResponseDto = {
2465
- /**
2466
- * Whether the rule configuration is valid
2467
- */
2468
- valid: boolean;
2500
+ type CashFlowTrendSummaryDto = {
2469
2501
  /**
2470
- * List of validation errors (empty if valid)
2502
+ * Total income across the period
2471
2503
  */
2472
- errors: Array<unknown[]>;
2504
+ totalIncome: string;
2473
2505
  /**
2474
- * List of validation warnings (non-blocking issues)
2506
+ * Total expense across the period
2475
2507
  */
2476
- warnings: Array<unknown[]>;
2477
- };
2478
- type BulkCreateRulesDto = {
2508
+ totalExpense: string;
2479
2509
  /**
2480
- * Array of rules to import
2510
+ * income expense across the period
2481
2511
  */
2482
- rules: Array<unknown[]>;
2512
+ totalNetSavings: string;
2483
2513
  /**
2484
- * Conflict handling strategy: skip (default) ignores duplicates, replace soft-deletes existing rule
2514
+ * totalNetSavings divided by the window length (N months, incl. zero-filled)
2485
2515
  */
2486
- conflictStrategy: 'replace' | 'skip';
2516
+ averageMonthlyNetSavings: string;
2487
2517
  };
2488
- /**
2489
- * Conflict handling strategy: skip (default) ignores duplicates, replace soft-deletes existing rule
2490
- */
2491
- type conflictStrategy = 'replace' | 'skip';
2492
- type BulkCreateRulesResponseDto = {
2493
- /**
2494
- * Number of successfully created rules
2495
- */
2496
- successCount: number;
2497
- /**
2498
- * Number of failed rules
2499
- */
2500
- failureCount: number;
2518
+ type CashFlowTrendsResponseDto = {
2501
2519
  /**
2502
- * Error details for failed rules
2520
+ * Monthly cash-flow series (fixed N-month window, zero-filled)
2503
2521
  */
2504
- errors: Array<{
2505
- index?: number;
2506
- message?: string;
2507
- }>;
2522
+ series: Array<CashFlowPointDto>;
2508
2523
  /**
2509
- * IDs of successfully created rules
2524
+ * Period totals
2510
2525
  */
2511
- createdRuleIds: Array<string>;
2512
- };
2513
- type ExportRulesResponseDto = {
2526
+ summary: CashFlowTrendSummaryDto;
2514
2527
  /**
2515
- * Export timestamp
2528
+ * Period requested
2516
2529
  */
2517
- exportedAt: string;
2530
+ period: string;
2518
2531
  /**
2519
- * User ID
2532
+ * Data granularity (v1 returns month buckets)
2520
2533
  */
2521
- userId: string;
2534
+ granularity: string;
2522
2535
  /**
2523
- * Number of exported rules
2536
+ * Base currency for converted values
2524
2537
  */
2525
- ruleCount: number;
2538
+ currency: string;
2526
2539
  /**
2527
- * Exported rules
2540
+ * Exchange rate warnings (e.g. missing rate for a currency)
2528
2541
  */
2529
- rules: unknown[];
2542
+ warnings?: Array<ExchangeRateWarningDto>;
2530
2543
  };
2531
- type RuleStatisticsResponseDto = {
2532
- /**
2533
- * Statistics time period
2534
- */
2535
- period: '7d' | '30d' | '90d';
2536
- /**
2537
- * Total number of rules
2538
- */
2539
- totalRules: number;
2540
- /**
2541
- * Number of rules with at least one match
2542
- */
2543
- rulesWithMatches: number;
2544
- /**
2545
- * Total number of matches across all rules
2546
- */
2547
- totalMatches: number;
2548
- /**
2549
- * Average confidence score across all matches
2550
- */
2551
- averageConfidence: number;
2544
+ type GenerateSnapshotBody = unknown;
2545
+ type GenerateSnapshotResponse = unknown;
2546
+ type BackfillSnapshotsBody = unknown;
2547
+ type BackfillSnapshotsResponse = unknown;
2548
+ type DeleteOwnUserDto = {
2552
2549
  /**
2553
- * Per-rule statistics
2550
+ * Access token for user verification
2554
2551
  */
2555
- ruleStats: Array<{
2556
- ruleId?: string;
2557
- ruleName?: string;
2558
- matchCount?: number;
2559
- averageConfidence?: number;
2560
- }>;
2552
+ accessToken: string;
2561
2553
  };
2562
- /**
2563
- * Statistics time period
2564
- */
2565
- type period = '7d' | '30d' | '90d';
2566
- type UpdateTransactionRuleDto = {
2567
- name?: string;
2568
- description?: string;
2569
- narrationKeywords?: Array<unknown[]>;
2570
- payeeKeywords?: Array<unknown[]>;
2571
- categoryKeywords?: Array<unknown[]>;
2572
- /**
2573
- * Payment method keywords (e.g., HuaBei, YuEBao)
2574
- */
2575
- methodKeywords?: Array<unknown[]>;
2576
- /**
2577
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2578
- */
2579
- categoryAccount?: string;
2580
- matchLogic?: 'OR' | 'AND';
2581
- /**
2582
- * Minimum transaction amount (inclusive)
2583
- */
2584
- amountMin?: number;
2585
- /**
2586
- * Maximum transaction amount (inclusive)
2587
- */
2588
- amountMax?: number;
2589
- priority?: number;
2554
+ type SignupDto = {
2590
2555
  /**
2591
- * Enable or disable the rule
2556
+ * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2592
2557
  */
2593
- enabled?: boolean;
2594
- additionalTags?: Array<unknown[]>;
2595
- additionalMetadata?: {
2596
- [key: string]: unknown;
2597
- };
2598
- };
2599
- type TestRuleDto = {
2600
- narration: string;
2601
- payee?: string;
2602
- categoryAccount?: string;
2603
- amount?: number;
2604
- currency?: string;
2558
+ turnstileToken?: string;
2605
2559
  };
2606
- type TestRuleResponseDto = {
2607
- /**
2608
- * Rule ID that was tested
2609
- */
2610
- ruleId: string;
2611
- /**
2612
- * Whether the rule matched the test data
2613
- */
2614
- matches: boolean;
2615
- /**
2616
- * Match confidence score (0-1)
2617
- */
2618
- confidence: number;
2560
+ type SignupResponseDto = {
2619
2561
  /**
2620
- * Details of which fields matched
2562
+ * JWT auth token
2621
2563
  */
2622
- matchDetails: {
2623
- [key: string]: unknown;
2624
- };
2625
- };
2626
- type DeleteOwnUserDto = {
2564
+ authToken: string;
2627
2565
  /**
2628
- * Access token for user verification
2566
+ * Auto-generated access token
2629
2567
  */
2630
2568
  accessToken: string;
2631
- };
2632
- type SignupDto = {
2633
2569
  /**
2634
- * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2570
+ * Assigned user role
2635
2571
  */
2636
- turnstileToken?: string;
2572
+ role: 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2637
2573
  };
2574
+ /**
2575
+ * Assigned user role
2576
+ */
2577
+ type role = 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2638
2578
  type UpdateUserSettingDto = {
2639
2579
  /**
2640
2580
  * Security ID
@@ -2735,13 +2675,351 @@ type UpdatePropertyDto = {
2735
2675
  */
2736
2676
  value: string;
2737
2677
  };
2738
- type CreateBeanEventDto = {
2678
+ type CreateTransactionRuleDto = {
2679
+ name: string;
2680
+ description?: string;
2681
+ narrationKeywords?: Array<unknown[]>;
2682
+ payeeKeywords?: Array<unknown[]>;
2683
+ categoryKeywords?: Array<unknown[]>;
2739
2684
  /**
2740
- * Life event date (ISO 8601)
2685
+ * Payment method keywords (e.g., HuaBei, YuEBao)
2741
2686
  */
2742
- date: string;
2687
+ methodKeywords?: Array<unknown[]>;
2743
2688
  /**
2744
- * Life event type (e.g., "employer", "location", "marital-status") — user-defined, no enum constraint at engine layer
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
+ /**
2748
+ * Keywords to match in payment method
2749
+ */
2750
+ methodKeywords: Array<string>;
2751
+ /**
2752
+ * Destination account for categorization
2753
+ */
2754
+ categoryAccount?: string;
2755
+ /**
2756
+ * Keyword matching logic
2757
+ */
2758
+ matchLogic: 'OR' | 'AND';
2759
+ /**
2760
+ * Amount range for matching
2761
+ */
2762
+ amountRange?: AmountRangeDto;
2763
+ /**
2764
+ * Rule priority (0-1000, higher = first match)
2765
+ */
2766
+ priority: number;
2767
+ /**
2768
+ * Whether the rule is enabled
2769
+ */
2770
+ enabled: boolean;
2771
+ /**
2772
+ * Learning source: NLP, REVIEW_CENTER, or null for manual
2773
+ */
2774
+ learningSource?: 'NLP' | 'REVIEW_CENTER' | null;
2775
+ /**
2776
+ * Whether auto-apply is enabled for this rule
2777
+ */
2778
+ autoApplyEnabled: boolean;
2779
+ /**
2780
+ * Number of confirmations for NLP-learned rules
2781
+ */
2782
+ confirmationCount: number;
2783
+ /**
2784
+ * Additional tags
2785
+ */
2786
+ additionalTags: Array<string>;
2787
+ /**
2788
+ * Additional metadata
2789
+ */
2790
+ additionalMetadata?: {
2791
+ [key: string]: string;
2792
+ };
2793
+ /**
2794
+ * Created timestamp
2795
+ */
2796
+ createdAt: string;
2797
+ /**
2798
+ * Updated timestamp
2799
+ */
2800
+ updatedAt: string;
2801
+ };
2802
+ /**
2803
+ * Learning source: NLP, REVIEW_CENTER, or null for manual
2804
+ */
2805
+ type learningSource = 'NLP' | 'REVIEW_CENTER';
2806
+ type TransactionRuleListResponseDto = {
2807
+ data: Array<TransactionRuleResponseDto>;
2808
+ /**
2809
+ * Total count of rules
2810
+ */
2811
+ total: number;
2812
+ /**
2813
+ * Results per page
2814
+ */
2815
+ limit: number;
2816
+ /**
2817
+ * Pagination offset
2818
+ */
2819
+ offset: number;
2820
+ };
2821
+ type ValidateRuleDto = {
2822
+ name: string;
2823
+ description?: string;
2824
+ narrationKeywords?: Array<unknown[]>;
2825
+ payeeKeywords?: Array<unknown[]>;
2826
+ categoryKeywords?: Array<unknown[]>;
2827
+ /**
2828
+ * Payment method keywords (e.g., HuaBei, YuEBao)
2829
+ */
2830
+ methodKeywords?: Array<unknown[]>;
2831
+ /**
2832
+ * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2833
+ */
2834
+ categoryAccount?: string;
2835
+ matchLogic: 'OR' | 'AND';
2836
+ /**
2837
+ * Minimum transaction amount (inclusive)
2838
+ */
2839
+ amountMin?: number;
2840
+ /**
2841
+ * Maximum transaction amount (inclusive)
2842
+ */
2843
+ amountMax?: number;
2844
+ priority: number;
2845
+ additionalTags?: Array<unknown[]>;
2846
+ additionalMetadata?: {
2847
+ [key: string]: unknown;
2848
+ };
2849
+ /**
2850
+ * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
2851
+ */
2852
+ upsertByPayee?: boolean;
2853
+ };
2854
+ type ValidateRuleResponseDto = {
2855
+ /**
2856
+ * Whether the rule configuration is valid
2857
+ */
2858
+ valid: boolean;
2859
+ /**
2860
+ * List of validation errors (empty if valid)
2861
+ */
2862
+ errors: Array<unknown[]>;
2863
+ /**
2864
+ * List of validation warnings (non-blocking issues)
2865
+ */
2866
+ warnings: Array<unknown[]>;
2867
+ };
2868
+ type BulkCreateRulesDto = {
2869
+ /**
2870
+ * Array of rules to import
2871
+ */
2872
+ rules: Array<unknown[]>;
2873
+ /**
2874
+ * Conflict handling strategy: skip (default) ignores duplicates, replace soft-deletes existing rule
2875
+ */
2876
+ conflictStrategy: 'replace' | 'skip';
2877
+ };
2878
+ /**
2879
+ * Conflict handling strategy: skip (default) ignores duplicates, replace soft-deletes existing rule
2880
+ */
2881
+ type conflictStrategy = 'replace' | 'skip';
2882
+ type BulkCreateRulesResponseDto = {
2883
+ /**
2884
+ * Number of successfully created rules
2885
+ */
2886
+ successCount: number;
2887
+ /**
2888
+ * Number of failed rules
2889
+ */
2890
+ failureCount: number;
2891
+ /**
2892
+ * Error details for failed rules
2893
+ */
2894
+ errors: Array<{
2895
+ index?: number;
2896
+ message?: string;
2897
+ }>;
2898
+ /**
2899
+ * IDs of successfully created rules
2900
+ */
2901
+ createdRuleIds: Array<string>;
2902
+ };
2903
+ type ExportRulesResponseDto = {
2904
+ /**
2905
+ * Export timestamp
2906
+ */
2907
+ exportedAt: string;
2908
+ /**
2909
+ * User ID
2910
+ */
2911
+ userId: string;
2912
+ /**
2913
+ * Number of exported rules
2914
+ */
2915
+ ruleCount: number;
2916
+ /**
2917
+ * Exported rules
2918
+ */
2919
+ rules: unknown[];
2920
+ };
2921
+ type RuleStatisticsResponseDto = {
2922
+ /**
2923
+ * Statistics time period
2924
+ */
2925
+ period: '7d' | '30d' | '90d';
2926
+ /**
2927
+ * Total number of rules
2928
+ */
2929
+ totalRules: number;
2930
+ /**
2931
+ * Number of rules with at least one match
2932
+ */
2933
+ rulesWithMatches: number;
2934
+ /**
2935
+ * Total number of matches across all rules
2936
+ */
2937
+ totalMatches: number;
2938
+ /**
2939
+ * Average confidence score across all matches
2940
+ */
2941
+ averageConfidence: number;
2942
+ /**
2943
+ * Per-rule statistics
2944
+ */
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[]>;
2962
+ /**
2963
+ * Payment method keywords (e.g., HuaBei, YuEBao)
2964
+ */
2965
+ methodKeywords?: Array<unknown[]>;
2966
+ /**
2967
+ * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2968
+ */
2969
+ categoryAccount?: string;
2970
+ matchLogic?: 'OR' | 'AND';
2971
+ /**
2972
+ * Minimum transaction amount (inclusive)
2973
+ */
2974
+ amountMin?: number;
2975
+ /**
2976
+ * Maximum transaction amount (inclusive)
2977
+ */
2978
+ amountMax?: number;
2979
+ priority?: number;
2980
+ /**
2981
+ * Enable or disable the rule
2982
+ */
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 = {
2997
+ /**
2998
+ * Rule ID that was tested
2999
+ */
3000
+ ruleId: string;
3001
+ /**
3002
+ * Whether the rule matched the test data
3003
+ */
3004
+ matches: boolean;
3005
+ /**
3006
+ * Match confidence score (0-1)
3007
+ */
3008
+ confidence: number;
3009
+ /**
3010
+ * Details of which fields matched
3011
+ */
3012
+ matchDetails: {
3013
+ [key: string]: unknown;
3014
+ };
3015
+ };
3016
+ type CreateBeanEventDto = {
3017
+ /**
3018
+ * Life event date (ISO 8601)
3019
+ */
3020
+ date: string;
3021
+ /**
3022
+ * Life event type (e.g., "employer", "location", "marital-status") — user-defined, no enum constraint at engine layer
2745
3023
  */
2746
3024
  type: string;
2747
3025
  /**
@@ -2821,6 +3099,34 @@ type UpdateBeanEventDto = {
2821
3099
  [key: string]: unknown;
2822
3100
  };
2823
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
+ };
2824
3130
  type ActualBalanceDto = {
2825
3131
  /**
2826
3132
  * Actual balance amount as a decimal string (preserves precision for tolerance inference).
@@ -3181,70 +3487,6 @@ type UpdateImporterConfigDto = {
3181
3487
  */
3182
3488
  data?: UpdateConfigDataDto;
3183
3489
  };
3184
- type CreatePlatformDto = {
3185
- /**
3186
- * Platform name
3187
- */
3188
- name: string;
3189
- /**
3190
- * Platform canonical identifier (lowercase, kebab-case)
3191
- */
3192
- canonical: string;
3193
- /**
3194
- * Platform aliases (multi-language names for lookup)
3195
- */
3196
- aliases: Array<string>;
3197
- /**
3198
- * Platform URL
3199
- */
3200
- url: string;
3201
- /**
3202
- * Platform type
3203
- */
3204
- type: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3205
- /**
3206
- * Platform logo URL
3207
- */
3208
- logoUrl?: string;
3209
- /**
3210
- * Whether the platform is active
3211
- */
3212
- isActive?: boolean;
3213
- };
3214
- /**
3215
- * Platform type
3216
- */
3217
- type type3 = 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3218
- type UpdatePlatformDto = {
3219
- /**
3220
- * Platform name
3221
- */
3222
- name?: string;
3223
- /**
3224
- * Platform canonical identifier (lowercase, kebab-case)
3225
- */
3226
- canonical?: string;
3227
- /**
3228
- * Platform aliases (multi-language names for lookup)
3229
- */
3230
- aliases?: Array<string>;
3231
- /**
3232
- * Platform URL
3233
- */
3234
- url?: string;
3235
- /**
3236
- * Platform type
3237
- */
3238
- type?: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3239
- /**
3240
- * Platform logo URL
3241
- */
3242
- logoUrl?: string;
3243
- /**
3244
- * Whether the platform is active
3245
- */
3246
- isActive?: boolean;
3247
- };
3248
3490
  type ProviderSyncConfigDto = {
3249
3491
  /**
3250
3492
  * Source account for the first posting
@@ -3266,6 +3508,10 @@ type ProviderSyncConfigDto = {
3266
3508
  * Filter pending transactions
3267
3509
  */
3268
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;
3269
3515
  };
3270
3516
  type ProviderSyncDto = {
3271
3517
  /**
@@ -3317,6 +3563,41 @@ type SupportedProvidersResponseDto = {
3317
3563
  */
3318
3564
  providers: Array<string>;
3319
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
+ };
3320
3601
  type ParserTelemetryReportDto = unknown;
3321
3602
  type UncoveredFormatMissDto = unknown;
3322
3603
  type ProcessNlpDto = {
@@ -3334,6 +3615,14 @@ type ProcessNlpDto = {
3334
3615
  parsedData?: {
3335
3616
  [key: string]: unknown;
3336
3617
  };
3618
+ /**
3619
+ * confirm_rule echo-back: rule id selected from the prior confirm_rule response (matchedRule.id or alternatives[i].ruleId). Applied directly when the session is confirming_rule — no NL re-parse.
3620
+ */
3621
+ selectedRuleId?: string;
3622
+ /**
3623
+ * confirm_account echo-back: account path selected from the prior confirm_account response (suggestedAccount, similarAccounts[i], or a typed path). Applied directly when the session is confirming_account — no NL re-parse.
3624
+ */
3625
+ selectedAccount?: string;
3337
3626
  };
3338
3627
  type NlpTransactionInfoDto = {
3339
3628
  /**
@@ -3567,9 +3856,9 @@ type NlpAccountConfirmationDataDto = {
3567
3856
  */
3568
3857
  invalidAccount: string;
3569
3858
  /**
3570
- * Suggested replacement account
3859
+ * Suggested replacement account (omitted when no clear candidate)
3571
3860
  */
3572
- suggestedAccount: string;
3861
+ suggestedAccount?: string;
3573
3862
  /**
3574
3863
  * Similar accounts for user selection
3575
3864
  */
@@ -3691,7 +3980,7 @@ type NlpSuggestedAccountDto = {
3691
3980
  */
3692
3981
  account: string;
3693
3982
  /**
3694
- * Confidence score for this suggestion (0-1)
3983
+ * Confidence score for this suggestion (0-1). Present = predicted (confirm/confirm_rule/confirm_account); omitted = actual persisted account (created). (#586)
3695
3984
  */
3696
3985
  confidence?: number;
3697
3986
  };
@@ -3707,21 +3996,21 @@ type NlpSuggestedAccountsDto = {
3707
3996
  };
3708
3997
  type NlpDefaultAccountsDto = {
3709
3998
  /**
3710
- * Default asset account
3999
+ * Default OPEN asset account (MRU when multiple), or null when none/ambiguous
3711
4000
  */
3712
- asset: string;
4001
+ asset: string | null;
3713
4002
  /**
3714
- * Default expense account
4003
+ * Default OPEN expense account (MRU when multiple), or null when none/ambiguous
3715
4004
  */
3716
- expense: string;
4005
+ expense: string | null;
3717
4006
  /**
3718
- * Default income account
4007
+ * Default OPEN income account (MRU when multiple), or null when none/ambiguous
3719
4008
  */
3720
- income: string;
4009
+ income: string | null;
3721
4010
  /**
3722
- * Default liability account
4011
+ * Default OPEN liability account (MRU when multiple), or null when none/ambiguous
3723
4012
  */
3724
- liability: string;
4013
+ liability: string | null;
3725
4014
  };
3726
4015
  type NlpResponseDto = {
3727
4016
  /**
@@ -3731,7 +4020,7 @@ type NlpResponseDto = {
3731
4020
  /**
3732
4021
  * Action taken or requested
3733
4022
  */
3734
- action: 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel';
4023
+ action: 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel' | 'aborted';
3735
4024
  /**
3736
4025
  * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
3737
4026
  */
@@ -3800,58 +4089,212 @@ type NlpResponseDto = {
3800
4089
  */
3801
4090
  accountData?: NlpAccountConfirmationDataDto;
3802
4091
  /**
3803
- * Payee confirmation data (when action is "confirm_payee"). Contains information about medium/low confidence payee match for user confirmation.
4092
+ * Payee confirmation data (when action is "confirm_payee"). Contains information about medium/low confidence payee match for user confirmation.
4093
+ */
4094
+ payeeData?: NlpPayeeConfirmationDataDto;
4095
+ /**
4096
+ * Overall confidence score (0-1)
4097
+ */
4098
+ confidence?: number;
4099
+ /**
4100
+ * Confidence threshold for automatic creation (default: 0.75). When confidence < threshold, action will be "confirm" requiring user verification.
4101
+ */
4102
+ confidenceThreshold?: number;
4103
+ /**
4104
+ * Recurring transaction match info (when action is "created"). Contains match details when transaction matches a pending expected transaction.
4105
+ */
4106
+ recurringMatch?: RecurringMatchInfoDto;
4107
+ /**
4108
+ * Recurring rule creation suggestion (when action is "created"). Contains suggestion to create a recurring rule based on detected patterns. Only present when no existing rule matched and similar historical transactions were found.
4109
+ */
4110
+ recurringSuggestion?: RecurringSuggestionDto;
4111
+ /**
4112
+ * Suggested accounts for this transaction (#586). confirm/confirm_rule/confirm_account: predicted (source/destination carry confidence); created: actual persisted accounts (confidence omitted). confirm_account destination is the suggested replacement, never the invalid account.
4113
+ */
4114
+ suggestedAccounts?: NlpSuggestedAccountsDto;
4115
+ /**
4116
+ * Default fallback accounts for the user/region (#586). v1 returns universal constants; per-user personalization is planned.
4117
+ */
4118
+ defaultAccounts?: NlpDefaultAccountsDto;
4119
+ };
4120
+ /**
4121
+ * Response status
4122
+ */
4123
+ type status4 = 'success' | 'pending' | 'error';
4124
+ /**
4125
+ * Action taken or requested
4126
+ */
4127
+ type action2 = 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel' | 'aborted';
4128
+ /**
4129
+ * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
4130
+ */
4131
+ type intent = 'expense' | 'asset' | 'income' | 'liability' | 'equity';
4132
+ /**
4133
+ * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
4134
+ */
4135
+ type assetSubType = 'transfer' | 'banking' | 'investment';
4136
+ /**
4137
+ * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
4138
+ */
4139
+ type liabilitySubType = 'borrow' | 'repay';
4140
+ /**
4141
+ * Equity sub-type (only present when intent is "equity"). opening: account opening balance (Equity → Assets), adjustment: balance correction.
4142
+ */
4143
+ type equitySubType = 'opening' | 'adjustment';
4144
+ type PlatformListItemDto = {
4145
+ /**
4146
+ * Global platform ID
4147
+ */
4148
+ id: string;
4149
+ /**
4150
+ * Platform name
4151
+ */
4152
+ name: string;
4153
+ /**
4154
+ * Platform URL
4155
+ */
4156
+ url: string;
4157
+ /**
4158
+ * Platform type
4159
+ */
4160
+ type: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
4161
+ /**
4162
+ * Canonical identifier in ACCOUNT_RE format (e.g., "icbc")
4163
+ */
4164
+ canonical: string;
4165
+ /**
4166
+ * Suggested path segment — canonical with first char uppercased (ACC_COMP_NAME_RE)
4167
+ */
4168
+ suggestedSegment: string;
4169
+ /**
4170
+ * Logo URL
4171
+ */
4172
+ logoUrl: string | null;
4173
+ /**
4174
+ * Whether user has accounts using this platform
4175
+ */
4176
+ isBound: boolean;
4177
+ };
4178
+ /**
4179
+ * Platform type
4180
+ */
4181
+ type type3 = 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
4182
+ type PlatformMatchResultDto = {
4183
+ /**
4184
+ * Global platform ID
4185
+ */
4186
+ id: string;
4187
+ /**
4188
+ * Platform name (e.g., "ICBC")
4189
+ */
4190
+ name: string;
4191
+ /**
4192
+ * Canonical identifier in ACCOUNT_RE format (e.g., "icbc")
4193
+ */
4194
+ canonical: string;
4195
+ /**
4196
+ * Platform type
4197
+ */
4198
+ type: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
4199
+ /**
4200
+ * Suggested path segment — canonical, already in ACCOUNT_RE format
4201
+ */
4202
+ suggestedSegment: string;
4203
+ /**
4204
+ * Logo URL
4205
+ */
4206
+ logoUrl: string | null;
4207
+ /**
4208
+ * How this row matched: 'exact' > 'prefix' > 'substring'
4209
+ */
4210
+ matchType: 'exact' | 'prefix' | 'substring';
4211
+ };
4212
+ /**
4213
+ * How this row matched: 'exact' > 'prefix' > 'substring'
4214
+ */
4215
+ type matchType = 'exact' | 'prefix' | 'substring';
4216
+ type PlatformMatchResponseDto = {
4217
+ /**
4218
+ * Ranked matches, best tier first (at most 10 rows)
4219
+ */
4220
+ platforms: Array<PlatformMatchResultDto>;
4221
+ /**
4222
+ * Overall match quality — top row's tier, or 'none' when no hits
4223
+ */
4224
+ matchType: 'none' | 'exact' | 'prefix' | 'substring';
4225
+ /**
4226
+ * Total matches before LIMIT (truncation transparency)
4227
+ */
4228
+ total: number;
4229
+ /**
4230
+ * true when total > platforms.length (more matches exist)
4231
+ */
4232
+ hasMore: boolean;
4233
+ };
4234
+ /**
4235
+ * Overall match quality — top row's tier, or 'none' when no hits
4236
+ */
4237
+ type matchType2 = 'none' | 'exact' | 'prefix' | 'substring';
4238
+ type CreatePlatformDto = {
4239
+ /**
4240
+ * Platform name
4241
+ */
4242
+ name: string;
4243
+ /**
4244
+ * Platform canonical identifier (lowercase, kebab-case)
4245
+ */
4246
+ canonical: string;
4247
+ /**
4248
+ * Platform aliases (multi-language names for lookup)
4249
+ */
4250
+ aliases: Array<string>;
4251
+ /**
4252
+ * Platform URL
4253
+ */
4254
+ url: string;
4255
+ /**
4256
+ * Platform type
4257
+ */
4258
+ type: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
4259
+ /**
4260
+ * Platform logo URL
4261
+ */
4262
+ logoUrl?: string;
4263
+ /**
4264
+ * Whether the platform is active
4265
+ */
4266
+ isActive?: boolean;
4267
+ };
4268
+ type UpdatePlatformDto = {
4269
+ /**
4270
+ * Platform name
3804
4271
  */
3805
- payeeData?: NlpPayeeConfirmationDataDto;
4272
+ name?: string;
3806
4273
  /**
3807
- * Overall confidence score (0-1)
4274
+ * Platform canonical identifier (lowercase, kebab-case)
3808
4275
  */
3809
- confidence?: number;
4276
+ canonical?: string;
3810
4277
  /**
3811
- * Confidence threshold for automatic creation (default: 0.75). When confidence < threshold, action will be "confirm" requiring user verification.
4278
+ * Platform aliases (multi-language names for lookup)
3812
4279
  */
3813
- confidenceThreshold?: number;
4280
+ aliases?: Array<string>;
3814
4281
  /**
3815
- * Recurring transaction match info (when action is "created"). Contains match details when transaction matches a pending expected transaction.
4282
+ * Platform URL
3816
4283
  */
3817
- recurringMatch?: RecurringMatchInfoDto;
4284
+ url?: string;
3818
4285
  /**
3819
- * Recurring rule creation suggestion (when action is "created"). Contains suggestion to create a recurring rule based on detected patterns. Only present when no existing rule matched and similar historical transactions were found.
4286
+ * Platform type
3820
4287
  */
3821
- recurringSuggestion?: RecurringSuggestionDto;
4288
+ type?: 'BANK' | 'BROKERAGE' | 'CRYPTO_EXCHANGE' | 'PAYMENT' | 'INVESTMENT' | 'INSURANCE' | 'OTHER';
3822
4289
  /**
3823
- * Suggested accounts for this transaction. Contains recommended source and destination accounts based on the detected intent and rules.
4290
+ * Platform logo URL
3824
4291
  */
3825
- suggestedAccounts?: NlpSuggestedAccountsDto;
4292
+ logoUrl?: string;
3826
4293
  /**
3827
- * Default accounts for the user/region. These are fallback accounts used when no specific suggestion is available.
4294
+ * Whether the platform is active
3828
4295
  */
3829
- defaultAccounts?: NlpDefaultAccountsDto;
4296
+ isActive?: boolean;
3830
4297
  };
3831
- /**
3832
- * Response status
3833
- */
3834
- type status4 = 'success' | 'pending' | 'error';
3835
- /**
3836
- * Action taken or requested
3837
- */
3838
- type action2 = 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel';
3839
- /**
3840
- * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
3841
- */
3842
- type intent = 'expense' | 'asset' | 'income' | 'liability' | 'equity';
3843
- /**
3844
- * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
3845
- */
3846
- type assetSubType = 'transfer' | 'banking' | 'investment';
3847
- /**
3848
- * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
3849
- */
3850
- type liabilitySubType = 'borrow' | 'repay';
3851
- /**
3852
- * Equity sub-type (only present when intent is "equity"). opening: account opening balance (Equity → Assets), adjustment: balance correction.
3853
- */
3854
- type equitySubType = 'opening' | 'adjustment';
3855
4298
  type NetWorthByCurrencyDto = {
3856
4299
  /**
3857
4300
  * Net worth by currency
@@ -4366,398 +4809,270 @@ type FxRateDto = {
4366
4809
  /**
4367
4810
  * FX rate (Decimal string)
4368
4811
  */
4369
- rate: string;
4370
- /**
4371
- * Rate date (ISO 8601)
4372
- */
4373
- date: string;
4374
- };
4375
- type HoldingPnlRowDto = {
4376
- /**
4377
- * Account UUID
4378
- */
4379
- accountId: string;
4380
- /**
4381
- * Full account path
4382
- */
4383
- accountPath: string;
4384
- /**
4385
- * Account settlement currency (ISO 4217), from cost currency
4386
- */
4387
- accountCcy?: {
4388
- [key: string]: unknown;
4389
- } | null;
4390
- /**
4391
- * Broker type derived from Platform.type
4392
- */
4393
- brokerType?: {
4394
- [key: string]: unknown;
4395
- } | null;
4396
- /**
4397
- * Commodity symbol
4398
- */
4399
- symbol: string;
4400
- /**
4401
- * Chart segment token (libs/common resolver)
4402
- */
4403
- chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4404
- assetClass: string;
4405
- assetSubClass?: {
4406
- [key: string]: unknown;
4407
- } | null;
4408
- /**
4409
- * Net held units (Decimal string)
4410
- */
4411
- units: string;
4412
- /**
4413
- * Average cost per unit; null when cost currency conflicts or no cost
4414
- */
4415
- averageCostPerUnit?: MonetaryDto | null;
4416
- /**
4417
- * Cost basis of held units
4418
- */
4419
- costBasis?: MonetaryDto | null;
4420
- /**
4421
- * Market value at asOf price
4422
- */
4423
- marketValue?: MonetaryDto | null;
4424
- /**
4425
- * Price used for market value
4426
- */
4427
- currentPrice?: CurrentPriceDto | null;
4428
- /**
4429
- * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
4430
- */
4431
- unrealizedPnlBase?: {
4432
- [key: string]: unknown;
4433
- } | null;
4434
- /**
4435
- * Unrealized P&L % (Decimal string)
4436
- */
4437
- unrealizedPnlPct?: {
4438
- [key: string]: unknown;
4439
- } | null;
4440
- /**
4441
- * Historical FX rate applied to cost basis
4442
- */
4443
- costFxRate?: FxRateDto | null;
4444
- /**
4445
- * FX rate applied to market value
4446
- */
4447
- marketFxRate?: FxRateDto | null;
4448
- /**
4449
- * Share of invested assets % (Decimal string); only for invested chartTokens
4450
- */
4451
- pctOfInvestedAssets?: {
4452
- [key: string]: unknown;
4453
- } | null;
4454
- /**
4455
- * 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
4456
- */
4457
- realizedPnl?: MonetaryDto | null;
4458
- };
4459
- /**
4460
- * Chart segment token (libs/common resolver)
4461
- */
4462
- type chartToken = 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4463
- type HoldingPnlWarningDto = {
4464
- /**
4465
- * Warning type
4466
- */
4467
- type: 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4468
- symbol?: {
4469
- [key: string]: unknown;
4470
- } | null;
4471
- accountId?: {
4472
- [key: string]: unknown;
4473
- } | null;
4474
- currency?: {
4475
- [key: string]: unknown;
4476
- } | null;
4477
- };
4478
- /**
4479
- * Warning type
4480
- */
4481
- type type4 = 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4482
- type HoldingPnlResponseDto = {
4483
- asOfDate: string;
4484
- baseCurrency: string;
4485
- /**
4486
- * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4487
- */
4488
- method: 'average' | 'FIFO';
4489
- rows: Array<HoldingPnlRowDto>;
4490
- warnings: Array<HoldingPnlWarningDto>;
4491
- };
4492
- /**
4493
- * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4494
- */
4495
- type method = 'average' | 'FIFO';
4496
- type CreateBeanPriceDto = {
4497
- /**
4498
- * Currency being priced (e.g., USD, AAPL, BTC)
4499
- */
4500
- currency: string;
4501
- /**
4502
- * Quote currency (pricing currency, e.g., CNY, EUR)
4503
- */
4504
- quoteCurrency: string;
4505
- /**
4506
- * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
4507
- */
4508
- amount: number;
4509
- /**
4510
- * Price date (ISO 8601 format)
4511
- */
4512
- date: string;
4513
- /**
4514
- * Metadata (validated by Zod schema, max field lengths enforced)
4515
- */
4516
- metadata?: {
4517
- [key: string]: unknown;
4518
- };
4519
- };
4520
- type PriceResponseDto = {
4521
- /**
4522
- * Unique identifier
4523
- */
4524
- id: string;
4525
- /**
4526
- * User ID (owner of the price)
4527
- */
4528
- userId: string;
4529
- /**
4530
- * Currency being priced (e.g., USD, AAPL, BTC)
4531
- */
4532
- currency: string;
4533
- /**
4534
- * Quote currency (pricing currency, e.g., USD, CNY)
4535
- */
4536
- quoteCurrency: string;
4537
- /**
4538
- * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
4539
- */
4540
- amount: number;
4541
- /**
4542
- * Price date (ISO 8601 format). Represents the date this price was valid.
4543
- */
4544
- date: string;
4545
- /**
4546
- * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
4547
- */
4548
- meta: {
4549
- [key: string]: unknown;
4550
- };
4551
- /**
4552
- * Creation timestamp
4553
- */
4554
- createdAt: string;
4555
- /**
4556
- * Last update timestamp
4557
- */
4558
- updatedAt: string;
4559
- };
4560
- type PriceListResponseDto = {
4561
- /**
4562
- * List of prices
4563
- */
4564
- items: Array<PriceResponseDto>;
4565
- /**
4566
- * Total number of prices
4567
- */
4568
- total: number;
4569
- };
4570
- type UpdateBeanPriceDto = {
4571
- /**
4572
- * Currency being priced
4573
- */
4574
- currency?: string;
4812
+ rate: string;
4575
4813
  /**
4576
- * Quote currency (pricing currency)
4814
+ * Rate date (ISO 8601)
4577
4815
  */
4578
- quoteCurrency?: string;
4816
+ date: string;
4817
+ };
4818
+ type HoldingPnlRowDto = {
4579
4819
  /**
4580
- * Price amount (MUST be >= 0 per Beancount spec)
4820
+ * Account UUID
4581
4821
  */
4582
- amount?: number;
4822
+ accountId: string;
4583
4823
  /**
4584
- * Price date (ISO 8601 format)
4824
+ * Full account path
4585
4825
  */
4586
- date?: string;
4826
+ accountPath: string;
4587
4827
  /**
4588
- * Metadata
4828
+ * Account settlement currency (ISO 4217), from cost currency
4589
4829
  */
4590
- metadata?: {
4830
+ accountCcy?: {
4591
4831
  [key: string]: unknown;
4592
- };
4593
- };
4594
- type CurrencyBalanceDto = {
4832
+ } | null;
4595
4833
  /**
4596
- * ISO 4217 currency code
4834
+ * Broker type derived from Platform.type
4597
4835
  */
4598
- currency: string;
4836
+ brokerType?: {
4837
+ [key: string]: unknown;
4838
+ } | null;
4599
4839
  /**
4600
- * Balance amount
4840
+ * Commodity symbol
4601
4841
  */
4602
- balance: string;
4603
- };
4604
- type TimeSeriesPointDto = {
4842
+ symbol: string;
4605
4843
  /**
4606
- * Date in YYYY-MM-DD format
4844
+ * Chart segment token (libs/common resolver)
4607
4845
  */
4608
- date: string;
4846
+ chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4847
+ assetClass: string;
4848
+ assetSubClass?: {
4849
+ [key: string]: unknown;
4850
+ } | null;
4609
4851
  /**
4610
- * Value at this date (in base currency)
4852
+ * Net held units (Decimal string)
4611
4853
  */
4612
- value: string;
4854
+ units: string;
4613
4855
  /**
4614
- * Change from previous point
4856
+ * Average cost per unit; null when cost currency conflicts or no cost
4615
4857
  */
4616
- change?: {
4617
- [key: string]: unknown;
4618
- };
4858
+ averageCostPerUnit?: MonetaryDto | null;
4619
4859
  /**
4620
- * Total assets at this date (in base currency)
4860
+ * Cost basis of held units
4621
4861
  */
4622
- assets?: string;
4862
+ costBasis?: MonetaryDto | null;
4623
4863
  /**
4624
- * Total liabilities at this date (in base currency)
4864
+ * Market value at asOf price
4625
4865
  */
4626
- liabilities?: string;
4866
+ marketValue?: MonetaryDto | null;
4627
4867
  /**
4628
- * Multi-currency breakdown for this point
4868
+ * Price used for market value
4629
4869
  */
4630
- byCurrency?: Array<CurrencyBalanceDto>;
4631
- };
4632
- type TrendSummaryDto = {
4870
+ currentPrice?: CurrentPriceDto | null;
4633
4871
  /**
4634
- * Value at start of period
4872
+ * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
4635
4873
  */
4636
- startValue: string;
4874
+ unrealizedPnlBase?: {
4875
+ [key: string]: unknown;
4876
+ } | null;
4637
4877
  /**
4638
- * Value at end of period
4878
+ * Unrealized P&L % (Decimal string)
4639
4879
  */
4640
- endValue: string;
4880
+ unrealizedPnlPct?: {
4881
+ [key: string]: unknown;
4882
+ } | null;
4641
4883
  /**
4642
- * Total change over period
4884
+ * Historical FX rate applied to cost basis
4643
4885
  */
4644
- totalChange: string;
4886
+ costFxRate?: FxRateDto | null;
4645
4887
  /**
4646
- * Total change percentage
4888
+ * FX rate applied to market value
4647
4889
  */
4648
- totalChangePercentage: string;
4649
- };
4650
- type MultiCurrencyPointDto = {
4890
+ marketFxRate?: FxRateDto | null;
4651
4891
  /**
4652
- * Date in YYYY-MM-DD format
4892
+ * Share of invested assets % (Decimal string); only for invested chartTokens
4653
4893
  */
4654
- date: string;
4894
+ pctOfInvestedAssets?: {
4895
+ [key: string]: unknown;
4896
+ } | null;
4655
4897
  /**
4656
- * Balances by currency
4898
+ * 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
4657
4899
  */
4658
- byCurrency: Array<CurrencyBalanceDto>;
4900
+ realizedPnl?: MonetaryDto | null;
4659
4901
  };
4660
- type PortfolioTrendsResponseDto = {
4902
+ /**
4903
+ * Chart segment token (libs/common resolver)
4904
+ */
4905
+ type chartToken = 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4906
+ type HoldingPnlWarningDto = {
4661
4907
  /**
4662
- * Time series data points
4908
+ * Warning type
4663
4909
  */
4664
- series: Array<TimeSeriesPointDto>;
4910
+ type: 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4911
+ symbol?: {
4912
+ [key: string]: unknown;
4913
+ } | null;
4914
+ accountId?: {
4915
+ [key: string]: unknown;
4916
+ } | null;
4917
+ currency?: {
4918
+ [key: string]: unknown;
4919
+ } | null;
4920
+ };
4921
+ /**
4922
+ * Warning type
4923
+ */
4924
+ type type4 = 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4925
+ type HoldingPnlResponseDto = {
4926
+ asOfDate: string;
4927
+ baseCurrency: string;
4665
4928
  /**
4666
- * Period summary
4929
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4667
4930
  */
4668
- summary: TrendSummaryDto;
4931
+ method: 'average' | 'FIFO';
4932
+ rows: Array<HoldingPnlRowDto>;
4933
+ warnings: Array<HoldingPnlWarningDto>;
4934
+ };
4935
+ /**
4936
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4937
+ */
4938
+ type method = 'average' | 'FIFO';
4939
+ type AnonymousLoginDto = {
4669
4940
  /**
4670
- * Period requested
4941
+ * Access token for anonymous login
4671
4942
  */
4672
- period: string;
4943
+ accessToken: string;
4944
+ };
4945
+ type AnonymousLoginResponseDto = {
4673
4946
  /**
4674
- * Data granularity
4947
+ * JWT auth token
4675
4948
  */
4676
- granularity: string;
4949
+ authToken: string;
4950
+ };
4951
+ type SymbolSearchResultDto = {
4952
+ symbol: string;
4953
+ name?: {
4954
+ [key: string]: unknown;
4955
+ } | null;
4956
+ exchange?: {
4957
+ [key: string]: unknown;
4958
+ } | null;
4677
4959
  /**
4678
- * Base currency for converted values
4960
+ * OpenBB asset_type (e.g. stock, etf)
4679
4961
  */
4680
- currency: string;
4962
+ assetType?: {
4963
+ [key: string]: unknown;
4964
+ } | null;
4681
4965
  /**
4682
- * Multi-currency time series (each point has currency breakdown)
4966
+ * IGN asset class (region.types.ts ASSET_CLASSES)
4683
4967
  */
4684
- byCurrency?: Array<MultiCurrencyPointDto>;
4968
+ assetClass?: {
4969
+ [key: string]: unknown;
4970
+ } | null;
4685
4971
  /**
4686
- * Exchange rate warnings
4972
+ * IGN asset sub-class (region.types.ts ASSET_SUB_CLASSES)
4687
4973
  */
4688
- warnings?: Array<ExchangeRateWarningDto>;
4689
- };
4690
- type CashFlowPointDto = {
4974
+ assetSubClass?: {
4975
+ [key: string]: unknown;
4976
+ } | null;
4691
4977
  /**
4692
- * Month key (YYYY-MM)
4978
+ * Trading currency (extra_data or inferred from exchange)
4693
4979
  */
4694
- month: string;
4980
+ currency?: {
4981
+ [key: string]: unknown;
4982
+ } | null;
4983
+ };
4984
+ type SymbolQuoteDto = {
4985
+ symbol?: string;
4986
+ name?: {
4987
+ [key: string]: unknown;
4988
+ } | null;
4989
+ exchange?: {
4990
+ [key: string]: unknown;
4991
+ } | null;
4695
4992
  /**
4696
- * Income in base currency (absolute, converted)
4993
+ * OpenBB asset_type
4697
4994
  */
4698
- income: string;
4995
+ assetType?: {
4996
+ [key: string]: unknown;
4997
+ } | null;
4699
4998
  /**
4700
- * Expense in base currency (absolute, converted)
4999
+ * IGN asset class
4701
5000
  */
4702
- expense: string;
5001
+ assetClass?: {
5002
+ [key: string]: unknown;
5003
+ } | null;
4703
5004
  /**
4704
- * netSavings = income − expense (savings positive)
5005
+ * IGN asset sub-class
4705
5006
  */
4706
- netSavings: string;
4707
- };
4708
- type CashFlowTrendSummaryDto = {
5007
+ assetSubClass?: {
5008
+ [key: string]: unknown;
5009
+ } | null;
4709
5010
  /**
4710
- * Total income across the period
5011
+ * Trading currency (extra_data or inferred from exchange)
4711
5012
  */
4712
- totalIncome: string;
5013
+ currency?: {
5014
+ [key: string]: unknown;
5015
+ } | null;
4713
5016
  /**
4714
- * Total expense across the period
5017
+ * Latest price (Decimal string)
4715
5018
  */
4716
- totalExpense: string;
5019
+ price?: {
5020
+ [key: string]: unknown;
5021
+ } | null;
4717
5022
  /**
4718
- * income expense across the period
5023
+ * Date the price was observed (ISO yyyy-MM-dd)
4719
5024
  */
4720
- totalNetSavings: string;
5025
+ priceDate?: {
5026
+ [key: string]: unknown;
5027
+ } | null;
4721
5028
  /**
4722
- * totalNetSavings divided by the window length (N months, incl. zero-filled)
5029
+ * Change vs previous close, in percentage points (1.7 == 1.7%). openbb stores change_percent as a normalized decimal; this exposes percentage points for frontend convenience.
4723
5030
  */
4724
- averageMonthlyNetSavings: string;
4725
- };
4726
- type CashFlowTrendsResponseDto = {
5031
+ changePercent?: {
5032
+ [key: string]: unknown;
5033
+ } | null;
4727
5034
  /**
4728
- * Monthly cash-flow series (fixed N-month window, zero-filled)
5035
+ * Previous close (Decimal string)
4729
5036
  */
4730
- series: Array<CashFlowPointDto>;
5037
+ prevClose?: {
5038
+ [key: string]: unknown;
5039
+ } | null;
4731
5040
  /**
4732
- * Period totals
5041
+ * Day open (Decimal string)
4733
5042
  */
4734
- summary: CashFlowTrendSummaryDto;
5043
+ open?: {
5044
+ [key: string]: unknown;
5045
+ } | null;
4735
5046
  /**
4736
- * Period requested
5047
+ * Day high (Decimal string)
4737
5048
  */
4738
- period: string;
5049
+ high?: {
5050
+ [key: string]: unknown;
5051
+ } | null;
4739
5052
  /**
4740
- * Data granularity (v1 returns month buckets)
5053
+ * Day low (Decimal string)
4741
5054
  */
4742
- granularity: string;
5055
+ low?: {
5056
+ [key: string]: unknown;
5057
+ } | null;
4743
5058
  /**
4744
- * Base currency for converted values
5059
+ * Day volume (Decimal string)
4745
5060
  */
4746
- currency: string;
5061
+ volume?: {
5062
+ [key: string]: unknown;
5063
+ } | null;
4747
5064
  /**
4748
- * Exchange rate warnings (e.g. missing rate for a currency)
5065
+ * 52-week high (Decimal string)
4749
5066
  */
4750
- warnings?: Array<ExchangeRateWarningDto>;
4751
- };
4752
- type GenerateSnapshotBody = unknown;
4753
- type GenerateSnapshotResponse = unknown;
4754
- type BackfillSnapshotsBody = unknown;
4755
- type BackfillSnapshotsResponse = unknown;
4756
- type AnonymousLoginDto = {
5067
+ yearHigh?: {
5068
+ [key: string]: unknown;
5069
+ } | null;
4757
5070
  /**
4758
- * Access token for anonymous login
5071
+ * 52-week low (Decimal string)
4759
5072
  */
4760
- accessToken: string;
5073
+ yearLow?: {
5074
+ [key: string]: unknown;
5075
+ } | null;
4761
5076
  };
4762
5077
  type AccountControllerCreateData = {
4763
5078
  /**
@@ -4785,7 +5100,7 @@ type AccountControllerFindAllData = {
4785
5100
  */
4786
5101
  region: 'cn' | 'us' | 'de' | 'gb';
4787
5102
  /**
4788
- * Search term for path or i18nKey
5103
+ * Search term for account path
4789
5104
  */
4790
5105
  search?: string;
4791
5106
  /**
@@ -4855,7 +5170,19 @@ type AccountControllerReopenData = {
4855
5170
  region: 'cn' | 'us' | 'de' | 'gb';
4856
5171
  requestBody: ReopenAccountDto;
4857
5172
  };
4858
- type AccountControllerReopenResponse = AccountResponseDto;
5173
+ type AccountControllerReopenResponse = AccountResponseDto;
5174
+ type AccountControllerAddOpeningBalanceData = {
5175
+ /**
5176
+ * Account UUID
5177
+ */
5178
+ id: string;
5179
+ /**
5180
+ * Region code for tenant context
5181
+ */
5182
+ region: 'cn' | 'us' | 'de' | 'gb';
5183
+ requestBody: CreateOpeningBalanceDto;
5184
+ };
5185
+ type AccountControllerAddOpeningBalanceResponse = OpeningBalanceResultDto;
4859
5186
  type AccountStandardsControllerGetTemplatesData = {
4860
5187
  /**
4861
5188
  * Region code (cn, us, de)
@@ -5017,7 +5344,7 @@ type TransactionControllerDeleteData = {
5017
5344
  type TransactionControllerDeleteResponse = void;
5018
5345
  type BalanceControllerGetBalanceData = {
5019
5346
  /**
5020
- * Account name (e.g., "Assets:Bank:Checking")
5347
+ * Account name (e.g., "Assets:Checking")
5021
5348
  */
5022
5349
  account: string;
5023
5350
  /**
@@ -5329,6 +5656,91 @@ type CommodityControllerBulkCreateData = {
5329
5656
  region: 'cn' | 'us' | 'de' | 'gb';
5330
5657
  };
5331
5658
  type CommodityControllerBulkCreateResponse = Array<CommodityResponseDto>;
5659
+ type PriceControllerCreateData = {
5660
+ /**
5661
+ * Region code for tenant context
5662
+ */
5663
+ region: 'cn' | 'us' | 'de' | 'gb';
5664
+ requestBody: CreateBeanPriceDto;
5665
+ };
5666
+ type PriceControllerCreateResponse = PriceResponseDto;
5667
+ type PriceControllerFindAllData = {
5668
+ /**
5669
+ * Filter by currency (e.g., BTC, AAPL, USD)
5670
+ */
5671
+ currency?: string;
5672
+ /**
5673
+ * Filter prices from this date (ISO 8601 format)
5674
+ */
5675
+ dateFrom?: string;
5676
+ /**
5677
+ * Filter prices to this date (ISO 8601 format)
5678
+ */
5679
+ dateTo?: string;
5680
+ /**
5681
+ * Number of items per page (default: 20, max: 100)
5682
+ */
5683
+ limit?: number;
5684
+ /**
5685
+ * Page number for pagination (default: 1)
5686
+ */
5687
+ page?: number;
5688
+ /**
5689
+ * Filter by quote currency (pricing currency, e.g., USD, CNY)
5690
+ */
5691
+ quoteCurrency?: string;
5692
+ /**
5693
+ * Region code for tenant context
5694
+ */
5695
+ region: 'cn' | 'us' | 'de' | 'gb';
5696
+ /**
5697
+ * Search term for currency or quoteCurrency (case-insensitive partial match)
5698
+ */
5699
+ search?: string;
5700
+ };
5701
+ type PriceControllerFindAllResponse = PriceListResponseDto;
5702
+ type PriceControllerFindOneData = {
5703
+ /**
5704
+ * Price ID
5705
+ */
5706
+ id: string;
5707
+ /**
5708
+ * Region code for tenant context
5709
+ */
5710
+ region: 'cn' | 'us' | 'de' | 'gb';
5711
+ };
5712
+ type PriceControllerFindOneResponse = PriceResponseDto;
5713
+ type PriceControllerUpdateData = {
5714
+ /**
5715
+ * Price ID
5716
+ */
5717
+ id: string;
5718
+ /**
5719
+ * Region code for tenant context
5720
+ */
5721
+ region: 'cn' | 'us' | 'de' | 'gb';
5722
+ requestBody: UpdateBeanPriceDto;
5723
+ };
5724
+ type PriceControllerUpdateResponse = PriceResponseDto;
5725
+ type PriceControllerDeleteData = {
5726
+ /**
5727
+ * Price ID
5728
+ */
5729
+ id: string;
5730
+ /**
5731
+ * Region code for tenant context
5732
+ */
5733
+ region: 'cn' | 'us' | 'de' | 'gb';
5734
+ };
5735
+ type PriceControllerDeleteResponse = void;
5736
+ type PriceControllerBulkCreateData = {
5737
+ /**
5738
+ * Region code for tenant context
5739
+ */
5740
+ region: 'cn' | 'us' | 'de' | 'gb';
5741
+ requestBody: Array<string>;
5742
+ };
5743
+ type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
5332
5744
  type RecurringRuleControllerCreateData = {
5333
5745
  /**
5334
5746
  * Region code for tenant context
@@ -5522,6 +5934,120 @@ type ForecastControllerGetForecastData = {
5522
5934
  region: 'cn' | 'us' | 'de' | 'gb';
5523
5935
  };
5524
5936
  type ForecastControllerGetForecastResponse = ForecastResponseDto;
5937
+ type ReportingControllerGetPortfolioTrendsData = {
5938
+ /**
5939
+ * Data granularity
5940
+ */
5941
+ granularity?: 'day' | 'week' | 'month';
5942
+ /**
5943
+ * Time period
5944
+ */
5945
+ period?: '1m' | '3m' | '6m' | '1y';
5946
+ /**
5947
+ * Region code for tenant context
5948
+ */
5949
+ region: 'cn' | 'us' | 'de' | 'gb';
5950
+ };
5951
+ type ReportingControllerGetPortfolioTrendsResponse = PortfolioTrendsResponseDto;
5952
+ type ReportingControllerGetCashFlowTrendsData = {
5953
+ /**
5954
+ * Data granularity (accepted for API symmetry; v1 returns month buckets)
5955
+ */
5956
+ granularity?: 'day' | 'week' | 'month';
5957
+ /**
5958
+ * Time period
5959
+ */
5960
+ period?: '1m' | '3m' | '6m' | '1y';
5961
+ /**
5962
+ * Region code for tenant context
5963
+ */
5964
+ region: 'cn' | 'us' | 'de' | 'gb';
5965
+ };
5966
+ type ReportingControllerGetCashFlowTrendsResponse = CashFlowTrendsResponseDto;
5967
+ type ReportingControllerGenerateSnapshotData = {
5968
+ /**
5969
+ * Region code for tenant context
5970
+ */
5971
+ region: 'cn' | 'us' | 'de' | 'gb';
5972
+ /**
5973
+ * Optional date (defaults to today)
5974
+ */
5975
+ requestBody: GenerateSnapshotBody;
5976
+ };
5977
+ type ReportingControllerGenerateSnapshotResponse = GenerateSnapshotResponse;
5978
+ type ReportingControllerBackfillSnapshotsData = {
5979
+ /**
5980
+ * Region code for tenant context
5981
+ */
5982
+ region: 'cn' | 'us' | 'de' | 'gb';
5983
+ requestBody: BackfillSnapshotsBody;
5984
+ };
5985
+ type ReportingControllerBackfillSnapshotsResponse = BackfillSnapshotsResponse;
5986
+ type UserControllerDeleteOwnUserData = {
5987
+ requestBody: DeleteOwnUserDto;
5988
+ };
5989
+ type UserControllerDeleteOwnUserResponse = void;
5990
+ type UserControllerGetUserData = {
5991
+ acceptLanguage: string;
5992
+ };
5993
+ type UserControllerGetUserResponse = unknown;
5994
+ type UserControllerSignupUserData = {
5995
+ requestBody: SignupDto;
5996
+ };
5997
+ type UserControllerSignupUserResponse = SignupResponseDto;
5998
+ type UserControllerDeleteUserData = {
5999
+ /**
6000
+ * User ID to delete
6001
+ */
6002
+ id: string;
6003
+ };
6004
+ type UserControllerDeleteUserResponse = void;
6005
+ type UserControllerGetUserInfoData = {
6006
+ /**
6007
+ * User ID
6008
+ */
6009
+ id: string;
6010
+ };
6011
+ type UserControllerGetUserInfoResponse = unknown;
6012
+ type UserControllerUpdateUserSettingData = {
6013
+ requestBody: UpdateUserSettingDto;
6014
+ };
6015
+ type UserControllerUpdateUserSettingResponse = unknown;
6016
+ type UserControllerGetAllUserSettingsByPageData = {
6017
+ /**
6018
+ * Page number
6019
+ */
6020
+ pageNo: number;
6021
+ /**
6022
+ * Page size
6023
+ */
6024
+ pageSize: number;
6025
+ };
6026
+ type UserControllerGetAllUserSettingsByPageResponse = unknown;
6027
+ type UserControllerGetAssetLiabilitySummaryResponse = unknown;
6028
+ type PropertyControllerGetAllResponse = unknown;
6029
+ type PropertyControllerGetByKeyData = {
6030
+ /**
6031
+ * Property key
6032
+ */
6033
+ key: string;
6034
+ };
6035
+ type PropertyControllerGetByKeyResponse = unknown;
6036
+ type PropertyControllerUpdateData = {
6037
+ /**
6038
+ * Property key
6039
+ */
6040
+ key: string;
6041
+ requestBody: UpdatePropertyDto;
6042
+ };
6043
+ type PropertyControllerUpdateResponse = unknown;
6044
+ type PropertyControllerDeleteData = {
6045
+ /**
6046
+ * Property key
6047
+ */
6048
+ key: string;
6049
+ };
6050
+ type PropertyControllerDeleteResponse = void;
5525
6051
  type TransactionRuleControllerCreateData = {
5526
6052
  /**
5527
6053
  * Region code for tenant context
@@ -5597,115 +6123,50 @@ type TransactionRuleControllerGetStatisticsData = {
5597
6123
  type TransactionRuleControllerGetStatisticsResponse = RuleStatisticsResponseDto;
5598
6124
  type TransactionRuleControllerGetDetailData = {
5599
6125
  /**
5600
- * Region code for tenant context
5601
- */
5602
- region: 'cn' | 'us' | 'de' | 'gb';
5603
- /**
5604
- * Rule ID
5605
- */
5606
- ruleId: string;
5607
- };
5608
- type TransactionRuleControllerGetDetailResponse = TransactionRuleResponseDto;
5609
- type TransactionRuleControllerUpdateData = {
5610
- /**
5611
- * Region code for tenant context
5612
- */
5613
- region: 'cn' | 'us' | 'de' | 'gb';
5614
- requestBody: UpdateTransactionRuleDto;
5615
- /**
5616
- * Rule ID to update
5617
- */
5618
- ruleId: string;
5619
- };
5620
- type TransactionRuleControllerUpdateResponse = TransactionRuleResponseDto;
5621
- type TransactionRuleControllerDeleteData = {
5622
- /**
5623
- * Region code for tenant context
5624
- */
5625
- region: 'cn' | 'us' | 'de' | 'gb';
5626
- /**
5627
- * Rule ID to delete
5628
- */
5629
- ruleId: string;
5630
- };
5631
- type TransactionRuleControllerDeleteResponse = void;
5632
- type TransactionRuleControllerTestData = {
5633
- /**
5634
- * Region code for tenant context
5635
- */
5636
- region: 'cn' | 'us' | 'de' | 'gb';
5637
- requestBody: TestRuleDto;
5638
- /**
5639
- * Rule ID to test
5640
- */
5641
- ruleId: string;
5642
- };
5643
- type TransactionRuleControllerTestResponse = TestRuleResponseDto;
5644
- type UserControllerDeleteOwnUserData = {
5645
- requestBody: DeleteOwnUserDto;
5646
- };
5647
- type UserControllerDeleteOwnUserResponse = void;
5648
- type UserControllerGetUserData = {
5649
- acceptLanguage: string;
5650
- };
5651
- type UserControllerGetUserResponse = unknown;
5652
- type UserControllerSignupUserData = {
5653
- requestBody: SignupDto;
5654
- };
5655
- type UserControllerSignupUserResponse = unknown;
5656
- type UserControllerDeleteUserData = {
5657
- /**
5658
- * User ID to delete
6126
+ * Region code for tenant context
5659
6127
  */
5660
- id: string;
5661
- };
5662
- type UserControllerDeleteUserResponse = void;
5663
- type UserControllerGetUserInfoData = {
6128
+ region: 'cn' | 'us' | 'de' | 'gb';
5664
6129
  /**
5665
- * User ID
6130
+ * Rule ID
5666
6131
  */
5667
- id: string;
5668
- };
5669
- type UserControllerGetUserInfoResponse = unknown;
5670
- type UserControllerUpdateUserSettingData = {
5671
- requestBody: UpdateUserSettingDto;
6132
+ ruleId: string;
5672
6133
  };
5673
- type UserControllerUpdateUserSettingResponse = unknown;
5674
- type UserControllerGetAllUserSettingsByPageData = {
6134
+ type TransactionRuleControllerGetDetailResponse = TransactionRuleResponseDto;
6135
+ type TransactionRuleControllerUpdateData = {
5675
6136
  /**
5676
- * Page number
6137
+ * Region code for tenant context
5677
6138
  */
5678
- pageNo: number;
6139
+ region: 'cn' | 'us' | 'de' | 'gb';
6140
+ requestBody: UpdateTransactionRuleDto;
5679
6141
  /**
5680
- * Page size
6142
+ * Rule ID to update
5681
6143
  */
5682
- pageSize: number;
6144
+ ruleId: string;
5683
6145
  };
5684
- type UserControllerGetAllUserSettingsByPageResponse = unknown;
5685
- type UserControllerGetAssetLiabilitySummaryResponse = unknown;
5686
- type PropertyControllerGetAllResponse = unknown;
5687
- type PropertyControllerGetByKeyData = {
6146
+ type TransactionRuleControllerUpdateResponse = TransactionRuleResponseDto;
6147
+ type TransactionRuleControllerDeleteData = {
5688
6148
  /**
5689
- * Property key
6149
+ * Region code for tenant context
5690
6150
  */
5691
- key: string;
5692
- };
5693
- type PropertyControllerGetByKeyResponse = unknown;
5694
- type PropertyControllerUpdateData = {
6151
+ region: 'cn' | 'us' | 'de' | 'gb';
5695
6152
  /**
5696
- * Property key
6153
+ * Rule ID to delete
5697
6154
  */
5698
- key: string;
5699
- requestBody: UpdatePropertyDto;
6155
+ ruleId: string;
5700
6156
  };
5701
- type PropertyControllerUpdateResponse = unknown;
5702
- type PropertyControllerDeleteData = {
6157
+ type TransactionRuleControllerDeleteResponse = void;
6158
+ type TransactionRuleControllerTestData = {
5703
6159
  /**
5704
- * Property key
6160
+ * Region code for tenant context
5705
6161
  */
5706
- key: string;
6162
+ region: 'cn' | 'us' | 'de' | 'gb';
6163
+ requestBody: TestRuleDto;
6164
+ /**
6165
+ * Rule ID to test
6166
+ */
6167
+ ruleId: string;
5707
6168
  };
5708
- type PropertyControllerDeleteResponse = void;
6169
+ type TransactionRuleControllerTestResponse = TestRuleResponseDto;
5709
6170
  type EventControllerCreateData = {
5710
6171
  /**
5711
6172
  * Region code for tenant context (decorative for life events)
@@ -5792,6 +6253,14 @@ type EventControllerGetSliceData = {
5792
6253
  region: 'cn' | 'us' | 'de' | 'gb';
5793
6254
  };
5794
6255
  type EventControllerGetSliceResponse = unknown;
6256
+ type OnboardingControllerBootstrapData = {
6257
+ /**
6258
+ * Region code for tenant context
6259
+ */
6260
+ region: 'cn' | 'us' | 'de' | 'gb';
6261
+ requestBody: OnboardingDto;
6262
+ };
6263
+ type OnboardingControllerBootstrapResponse = unknown;
5795
6264
  type ReconciliationControllerComputeData = {
5796
6265
  /**
5797
6266
  * Region code for tenant context (decorative for reconciliation)
@@ -5906,38 +6375,6 @@ type ImporterConfigControllerResetConfigData = {
5906
6375
  region: 'cn' | 'us' | 'de' | 'gb';
5907
6376
  };
5908
6377
  type ImporterConfigControllerResetConfigResponse = ImporterConfigDto;
5909
- type PlatformControllerFindAllResponse = unknown;
5910
- type PlatformControllerCreateData = {
5911
- requestBody: CreatePlatformDto;
5912
- };
5913
- type PlatformControllerCreateResponse = unknown;
5914
- type PlatformControllerGetPlatformListResponse = unknown;
5915
- type PlatformControllerMatchPlatformsData = {
5916
- /**
5917
- * Search query — Chinese name, English name, or abbreviation
5918
- */
5919
- q: string;
5920
- /**
5921
- * Region code for category override lookup
5922
- */
5923
- region?: string;
5924
- };
5925
- type PlatformControllerMatchPlatformsResponse = unknown;
5926
- type PlatformControllerUpdateData = {
5927
- /**
5928
- * Platform ID
5929
- */
5930
- id: string;
5931
- requestBody: UpdatePlatformDto;
5932
- };
5933
- type PlatformControllerUpdateResponse = unknown;
5934
- type PlatformControllerDeleteData = {
5935
- /**
5936
- * Platform ID
5937
- */
5938
- id: string;
5939
- };
5940
- type PlatformControllerDeleteResponse = void;
5941
6378
  type ProviderSyncControllerSyncData = {
5942
6379
  /**
5943
6380
  * Provider name
@@ -5968,6 +6405,38 @@ type ProviderSyncControllerIsProviderSupportedData = {
5968
6405
  region: 'cn' | 'us' | 'de' | 'gb';
5969
6406
  };
5970
6407
  type ProviderSyncControllerIsProviderSupportedResponse = unknown;
6408
+ type ExternalAccountLinkControllerCreateData = {
6409
+ /**
6410
+ * Region code for tenant context
6411
+ */
6412
+ region: 'cn' | 'us' | 'de' | 'gb';
6413
+ requestBody: CreateExternalAccountLinkDto;
6414
+ };
6415
+ type ExternalAccountLinkControllerCreateResponse = ExternalAccountLinkResponseDto;
6416
+ type ExternalAccountLinkControllerFindAllData = {
6417
+ provider: string;
6418
+ /**
6419
+ * Region code for tenant context
6420
+ */
6421
+ region: 'cn' | 'us' | 'de' | 'gb';
6422
+ };
6423
+ type ExternalAccountLinkControllerFindAllResponse = ExternalAccountLinkListResponseDto;
6424
+ type ExternalAccountLinkControllerFindOneData = {
6425
+ id: string;
6426
+ /**
6427
+ * Region code for tenant context
6428
+ */
6429
+ region: 'cn' | 'us' | 'de' | 'gb';
6430
+ };
6431
+ type ExternalAccountLinkControllerFindOneResponse = ExternalAccountLinkResponseDto;
6432
+ type ExternalAccountLinkControllerRemoveData = {
6433
+ id: string;
6434
+ /**
6435
+ * Region code for tenant context
6436
+ */
6437
+ region: 'cn' | 'us' | 'de' | 'gb';
6438
+ };
6439
+ type ExternalAccountLinkControllerRemoveResponse = void;
5971
6440
  type TelemetryControllerReportTelemetryData = {
5972
6441
  /**
5973
6442
  * Region code for tenant context
@@ -6028,177 +6497,90 @@ type NlpControllerGetSessionData = {
6028
6497
  sessionId?: string;
6029
6498
  };
6030
6499
  type NlpControllerGetSessionResponse = unknown;
6031
- type DashboardControllerGetNetWorthData = {
6032
- /**
6033
- * Date for balance calculation (ISO 8601 format)
6034
- */
6035
- date?: string;
6036
- /**
6037
- * Region code for tenant context
6038
- */
6039
- region: 'cn' | 'us' | 'de' | 'gb';
6040
- };
6041
- type DashboardControllerGetNetWorthResponse = NetWorthResponseDto;
6042
- type DashboardControllerGetAccountsData = {
6043
- /**
6044
- * Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
6045
- */
6046
- accountId?: string;
6047
- /**
6048
- * Date for balance calculation (ISO 8601 format)
6049
- */
6050
- date?: string;
6051
- /**
6052
- * Grouping strategy
6053
- */
6054
- groupBy?: 'platform' | 'assetClass' | 'holdingAssetClass' | 'holdingAssetClassByAccount';
6055
- /**
6056
- * Region code for tenant context
6057
- */
6058
- region: 'cn' | 'us' | 'de' | 'gb';
6059
- };
6060
- type DashboardControllerGetAccountsResponse = AccountsResponseDto | AssetClassAccountsResponseDto | HoldingAssetClassCrossAccountResponseDto;
6061
- type DashboardControllerGetCashFlowData = {
6062
- /**
6063
- * Period in YYYY-MM format
6064
- */
6065
- period: string;
6066
- /**
6067
- * Region code for tenant context
6068
- */
6069
- region: 'cn' | 'us' | 'de' | 'gb';
6500
+ type PlatformControllerFindAllResponse = unknown;
6501
+ type PlatformControllerCreateData = {
6502
+ requestBody: CreatePlatformDto;
6070
6503
  };
6071
- type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
6072
- type DashboardControllerGetExpensesData = {
6073
- /**
6074
- * Account root to aggregate (expense → ^Expenses:, income → ^Income:)
6075
- */
6076
- flow?: 'expense' | 'income';
6077
- /**
6078
- * Grouping strategy
6079
- */
6080
- groupBy?: 'category';
6504
+ type PlatformControllerCreateResponse = unknown;
6505
+ type PlatformControllerGetPlatformListResponse = Array<PlatformListItemDto>;
6506
+ type PlatformControllerMatchPlatformsData = {
6081
6507
  /**
6082
- * Time window (1m = current calendar month)
6508
+ * Search query Chinese name, English name, or abbreviation
6083
6509
  */
6084
- period?: '1m' | '3m' | '6m' | '1y';
6510
+ q: string;
6085
6511
  /**
6086
- * Region code for tenant context
6512
+ * Region code for category override lookup
6087
6513
  */
6088
- region: 'cn' | 'us' | 'de' | 'gb';
6514
+ region?: string;
6089
6515
  };
6090
- type DashboardControllerGetExpensesResponse = ExpensesByCategoryResponseDto;
6091
- type HoldingPnlControllerGetHoldingPnlData = {
6092
- /**
6093
- * Scope to a single account
6094
- */
6095
- accountId?: string;
6096
- /**
6097
- * As-of date (ISO 8601), defaults to today
6098
- */
6099
- asOf?: string;
6100
- /**
6101
- * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6102
- */
6103
- method?: 'FIFO' | 'average';
6516
+ type PlatformControllerMatchPlatformsResponse = PlatformMatchResponseDto;
6517
+ type PlatformControllerUpdateData = {
6104
6518
  /**
6105
- * Region code for tenant context
6519
+ * Platform ID
6106
6520
  */
6107
- region: 'cn' | 'us' | 'de' | 'gb';
6521
+ id: string;
6522
+ requestBody: UpdatePlatformDto;
6108
6523
  };
6109
- type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6110
- type PriceControllerCreateData = {
6524
+ type PlatformControllerUpdateResponse = unknown;
6525
+ type PlatformControllerDeleteData = {
6111
6526
  /**
6112
- * Region code for tenant context
6527
+ * Platform ID
6113
6528
  */
6114
- region: 'cn' | 'us' | 'de' | 'gb';
6115
- requestBody: CreateBeanPriceDto;
6529
+ id: string;
6116
6530
  };
6117
- type PriceControllerCreateResponse = PriceResponseDto;
6118
- type PriceControllerFindAllData = {
6119
- /**
6120
- * Filter by currency (e.g., BTC, AAPL, USD)
6121
- */
6122
- currency?: string;
6123
- /**
6124
- * Filter prices from this date (ISO 8601 format)
6125
- */
6126
- dateFrom?: string;
6127
- /**
6128
- * Filter prices to this date (ISO 8601 format)
6129
- */
6130
- dateTo?: string;
6131
- /**
6132
- * Number of items per page (default: 20, max: 100)
6133
- */
6134
- limit?: number;
6135
- /**
6136
- * Page number for pagination (default: 1)
6137
- */
6138
- page?: number;
6531
+ type PlatformControllerDeleteResponse = void;
6532
+ type DashboardControllerGetNetWorthData = {
6139
6533
  /**
6140
- * Filter by quote currency (pricing currency, e.g., USD, CNY)
6534
+ * Date for balance calculation (ISO 8601 format)
6141
6535
  */
6142
- quoteCurrency?: string;
6536
+ date?: string;
6143
6537
  /**
6144
6538
  * Region code for tenant context
6145
6539
  */
6146
6540
  region: 'cn' | 'us' | 'de' | 'gb';
6147
- /**
6148
- * Search term for currency or quoteCurrency (case-insensitive partial match)
6149
- */
6150
- search?: string;
6151
6541
  };
6152
- type PriceControllerFindAllResponse = PriceListResponseDto;
6153
- type PriceControllerFindOneData = {
6542
+ type DashboardControllerGetNetWorthResponse = NetWorthResponseDto;
6543
+ type DashboardControllerGetAccountsData = {
6154
6544
  /**
6155
- * Price ID
6545
+ * Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
6156
6546
  */
6157
- id: string;
6547
+ accountId?: string;
6158
6548
  /**
6159
- * Region code for tenant context
6160
- */
6161
- region: 'cn' | 'us' | 'de' | 'gb';
6162
- };
6163
- type PriceControllerFindOneResponse = PriceResponseDto;
6164
- type PriceControllerUpdateData = {
6549
+ * Date for balance calculation (ISO 8601 format)
6550
+ */
6551
+ date?: string;
6165
6552
  /**
6166
- * Price ID
6553
+ * Grouping strategy
6167
6554
  */
6168
- id: string;
6555
+ groupBy?: 'platform' | 'assetClass' | 'holdingAssetClass' | 'holdingAssetClassByAccount';
6169
6556
  /**
6170
6557
  * Region code for tenant context
6171
6558
  */
6172
6559
  region: 'cn' | 'us' | 'de' | 'gb';
6173
- requestBody: UpdateBeanPriceDto;
6174
6560
  };
6175
- type PriceControllerUpdateResponse = PriceResponseDto;
6176
- type PriceControllerDeleteData = {
6561
+ type DashboardControllerGetAccountsResponse = AccountsResponseDto | AssetClassAccountsResponseDto | HoldingAssetClassCrossAccountResponseDto;
6562
+ type DashboardControllerGetCashFlowData = {
6177
6563
  /**
6178
- * Price ID
6564
+ * Period in YYYY-MM format
6179
6565
  */
6180
- id: string;
6566
+ period: string;
6181
6567
  /**
6182
6568
  * Region code for tenant context
6183
6569
  */
6184
6570
  region: 'cn' | 'us' | 'de' | 'gb';
6185
6571
  };
6186
- type PriceControllerDeleteResponse = void;
6187
- type PriceControllerBulkCreateData = {
6572
+ type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
6573
+ type DashboardControllerGetExpensesData = {
6188
6574
  /**
6189
- * Region code for tenant context
6575
+ * Account root to aggregate (expense → ^Expenses:, income → ^Income:)
6190
6576
  */
6191
- region: 'cn' | 'us' | 'de' | 'gb';
6192
- requestBody: Array<string>;
6193
- };
6194
- type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
6195
- type ReportingControllerGetPortfolioTrendsData = {
6577
+ flow?: 'expense' | 'income';
6196
6578
  /**
6197
- * Data granularity
6579
+ * Grouping strategy
6198
6580
  */
6199
- granularity?: 'day' | 'week' | 'month';
6581
+ groupBy?: 'category';
6200
6582
  /**
6201
- * Time period
6583
+ * Time window (1m = current calendar month)
6202
6584
  */
6203
6585
  period?: '1m' | '3m' | '6m' | '1y';
6204
6586
  /**
@@ -6206,46 +6588,31 @@ type ReportingControllerGetPortfolioTrendsData = {
6206
6588
  */
6207
6589
  region: 'cn' | 'us' | 'de' | 'gb';
6208
6590
  };
6209
- type ReportingControllerGetPortfolioTrendsResponse = PortfolioTrendsResponseDto;
6210
- type ReportingControllerGetCashFlowTrendsData = {
6211
- /**
6212
- * Data granularity (accepted for API symmetry; v1 returns month buckets)
6213
- */
6214
- granularity?: 'day' | 'week' | 'month';
6215
- /**
6216
- * Time period
6217
- */
6218
- period?: '1m' | '3m' | '6m' | '1y';
6591
+ type DashboardControllerGetExpensesResponse = ExpensesByCategoryResponseDto;
6592
+ type HoldingPnlControllerGetHoldingPnlData = {
6219
6593
  /**
6220
- * Region code for tenant context
6594
+ * Scope to a single account
6221
6595
  */
6222
- region: 'cn' | 'us' | 'de' | 'gb';
6223
- };
6224
- type ReportingControllerGetCashFlowTrendsResponse = CashFlowTrendsResponseDto;
6225
- type ReportingControllerGenerateSnapshotData = {
6596
+ accountId?: string;
6226
6597
  /**
6227
- * Region code for tenant context
6598
+ * As-of date (ISO 8601), defaults to today
6228
6599
  */
6229
- region: 'cn' | 'us' | 'de' | 'gb';
6600
+ asOf?: string;
6230
6601
  /**
6231
- * Optional date (defaults to today)
6602
+ * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6232
6603
  */
6233
- requestBody: GenerateSnapshotBody;
6234
- };
6235
- type ReportingControllerGenerateSnapshotResponse = GenerateSnapshotResponse;
6236
- type ReportingControllerBackfillSnapshotsData = {
6604
+ method?: 'FIFO' | 'average';
6237
6605
  /**
6238
6606
  * Region code for tenant context
6239
6607
  */
6240
6608
  region: 'cn' | 'us' | 'de' | 'gb';
6241
- requestBody: BackfillSnapshotsBody;
6242
6609
  };
6243
- type ReportingControllerBackfillSnapshotsResponse = BackfillSnapshotsResponse;
6610
+ type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6244
6611
  type ApiKeysControllerCreateApiKeyResponse = unknown;
6245
6612
  type AuthControllerAccessTokenLoginData = {
6246
6613
  requestBody: AnonymousLoginDto;
6247
6614
  };
6248
- type AuthControllerAccessTokenLoginResponse = unknown;
6615
+ type AuthControllerAccessTokenLoginResponse = AnonymousLoginResponseDto;
6249
6616
  type CacheControllerFlushCacheResponse = unknown;
6250
6617
  type ExchangeRateControllerGetExchangeRateData = {
6251
6618
  /**
@@ -6272,6 +6639,29 @@ type HealthControllerResetCircuitBreakerData = {
6272
6639
  type HealthControllerResetCircuitBreakerResponse = unknown;
6273
6640
  type HealthControllerGetMetricsResponse = unknown;
6274
6641
  type InfoControllerGetInfoResponse = unknown;
6642
+ type SymbolControllerSearchData = {
6643
+ /**
6644
+ * Filter by OpenBB asset_type (e.g. stock, etf)
6645
+ */
6646
+ assetType?: string;
6647
+ /**
6648
+ * Filter by exchange code (e.g. US, HK, SS, SZ)
6649
+ */
6650
+ exchange?: string;
6651
+ /**
6652
+ * Maximum number of results (clamped 1..50)
6653
+ */
6654
+ limit?: number;
6655
+ /**
6656
+ * Search term — matched against symbol and instrument name. Empty string returns [].
6657
+ */
6658
+ q: string;
6659
+ };
6660
+ type SymbolControllerSearchResponse = Array<SymbolSearchResultDto>;
6661
+ type SymbolControllerGetQuoteData = {
6662
+ symbol: string;
6663
+ };
6664
+ type SymbolControllerGetQuoteResponse = SymbolQuoteDto;
6275
6665
  type $OpenApiTs = {
6276
6666
  '/api/v1/{region}/bean/accounts': {
6277
6667
  post: {
@@ -6380,6 +6770,25 @@ type $OpenApiTs = {
6380
6770
  };
6381
6771
  };
6382
6772
  };
6773
+ '/api/v1/{region}/bean/accounts/{id}/opening-balance': {
6774
+ post: {
6775
+ req: AccountControllerAddOpeningBalanceData;
6776
+ res: {
6777
+ /**
6778
+ * Opening-balance transaction created
6779
+ */
6780
+ 201: OpeningBalanceResultDto;
6781
+ /**
6782
+ * Account not found
6783
+ */
6784
+ 404: unknown;
6785
+ /**
6786
+ * An opening balance already exists for this account
6787
+ */
6788
+ 409: unknown;
6789
+ };
6790
+ };
6791
+ };
6383
6792
  '/api/v1/{region}/bean/account-standards': {
6384
6793
  get: {
6385
6794
  req: AccountStandardsControllerGetTemplatesData;
@@ -6988,6 +7397,90 @@ type $OpenApiTs = {
6988
7397
  };
6989
7398
  };
6990
7399
  };
7400
+ '/api/v1/{region}/bean/prices': {
7401
+ post: {
7402
+ req: PriceControllerCreateData;
7403
+ res: {
7404
+ /**
7405
+ * Price created successfully
7406
+ */
7407
+ 201: PriceResponseDto;
7408
+ /**
7409
+ * Currency or quoteCurrency commodity not found
7410
+ */
7411
+ 404: unknown;
7412
+ /**
7413
+ * Price already exists for this currency pair and date
7414
+ */
7415
+ 409: unknown;
7416
+ };
7417
+ };
7418
+ get: {
7419
+ req: PriceControllerFindAllData;
7420
+ res: {
7421
+ /**
7422
+ * Prices retrieved successfully
7423
+ */
7424
+ 200: PriceListResponseDto;
7425
+ };
7426
+ };
7427
+ };
7428
+ '/api/v1/{region}/bean/prices/{id}': {
7429
+ get: {
7430
+ req: PriceControllerFindOneData;
7431
+ res: {
7432
+ /**
7433
+ * Price retrieved successfully
7434
+ */
7435
+ 200: PriceResponseDto;
7436
+ /**
7437
+ * Price not found
7438
+ */
7439
+ 404: unknown;
7440
+ };
7441
+ };
7442
+ put: {
7443
+ req: PriceControllerUpdateData;
7444
+ res: {
7445
+ /**
7446
+ * Price updated successfully
7447
+ */
7448
+ 200: PriceResponseDto;
7449
+ /**
7450
+ * Price not found
7451
+ */
7452
+ 404: unknown;
7453
+ /**
7454
+ * Updated price conflicts with existing price
7455
+ */
7456
+ 409: unknown;
7457
+ };
7458
+ };
7459
+ delete: {
7460
+ req: PriceControllerDeleteData;
7461
+ res: {
7462
+ /**
7463
+ * Price deleted successfully
7464
+ */
7465
+ 204: void;
7466
+ /**
7467
+ * Price not found
7468
+ */
7469
+ 404: unknown;
7470
+ };
7471
+ };
7472
+ };
7473
+ '/api/v1/{region}/bean/prices/bulk': {
7474
+ post: {
7475
+ req: PriceControllerBulkCreateData;
7476
+ res: {
7477
+ /**
7478
+ * Prices created successfully
7479
+ */
7480
+ 201: Array<PriceResponseDto>;
7481
+ };
7482
+ };
7483
+ };
6991
7484
  '/api/v1/{region}/bean/recurring-rules': {
6992
7485
  post: {
6993
7486
  req: RecurringRuleControllerCreateData;
@@ -7196,439 +7689,511 @@ type $OpenApiTs = {
7196
7689
  /**
7197
7690
  * Match removed successfully
7198
7691
  */
7199
- 200: unknown;
7692
+ 200: unknown;
7693
+ /**
7694
+ * Cannot unmatch - not in COMPLETED status
7695
+ */
7696
+ 400: unknown;
7697
+ /**
7698
+ * Expected transaction not found
7699
+ */
7700
+ 404: unknown;
7701
+ };
7702
+ };
7703
+ };
7704
+ '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
7705
+ post: {
7706
+ req: ExpectedTransactionControllerEnterNowData;
7707
+ res: {
7708
+ /**
7709
+ * Transaction created successfully
7710
+ */
7711
+ 201: unknown;
7712
+ /**
7713
+ * Cannot enter - not in PENDING status or missing accounts
7714
+ */
7715
+ 400: unknown;
7716
+ /**
7717
+ * Expected transaction or accounts not found
7718
+ */
7719
+ 404: unknown;
7720
+ };
7721
+ };
7722
+ };
7723
+ '/api/v1/{region}/bean/recurring/forecast': {
7724
+ get: {
7725
+ req: ForecastControllerGetForecastData;
7726
+ res: {
7727
+ /**
7728
+ * Forecast retrieved successfully
7729
+ */
7730
+ 200: ForecastResponseDto;
7731
+ };
7732
+ };
7733
+ };
7734
+ '/api/v1/{region}/reporting/portfolio/trends': {
7735
+ get: {
7736
+ req: ReportingControllerGetPortfolioTrendsData;
7737
+ res: {
7738
+ /**
7739
+ * Trends retrieved successfully
7740
+ */
7741
+ 200: PortfolioTrendsResponseDto;
7742
+ /**
7743
+ * User not authenticated
7744
+ */
7745
+ 401: unknown;
7746
+ };
7747
+ };
7748
+ };
7749
+ '/api/v1/{region}/reporting/cash-flow/trends': {
7750
+ get: {
7751
+ req: ReportingControllerGetCashFlowTrendsData;
7752
+ res: {
7753
+ /**
7754
+ * Cash-flow trends retrieved successfully
7755
+ */
7756
+ 200: CashFlowTrendsResponseDto;
7757
+ /**
7758
+ * User not authenticated
7759
+ */
7760
+ 401: unknown;
7761
+ };
7762
+ };
7763
+ };
7764
+ '/api/v1/{region}/reporting/snapshots/generate': {
7765
+ post: {
7766
+ req: ReportingControllerGenerateSnapshotData;
7767
+ res: {
7768
+ /**
7769
+ * Snapshot generated successfully
7770
+ */
7771
+ 200: GenerateSnapshotResponse;
7200
7772
  /**
7201
- * Cannot unmatch - not in COMPLETED status
7773
+ * Invalid date format
7202
7774
  */
7203
7775
  400: unknown;
7204
7776
  /**
7205
- * Expected transaction not found
7777
+ * User not authenticated
7206
7778
  */
7207
- 404: unknown;
7779
+ 401: unknown;
7208
7780
  };
7209
7781
  };
7210
7782
  };
7211
- '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
7783
+ '/api/v1/{region}/reporting/snapshots/backfill': {
7212
7784
  post: {
7213
- req: ExpectedTransactionControllerEnterNowData;
7785
+ req: ReportingControllerBackfillSnapshotsData;
7214
7786
  res: {
7215
7787
  /**
7216
- * Transaction created successfully
7788
+ * Backfill completed successfully
7217
7789
  */
7218
- 201: unknown;
7790
+ 200: BackfillSnapshotsResponse;
7219
7791
  /**
7220
- * Cannot enter - not in PENDING status or missing accounts
7792
+ * Invalid date format or range
7221
7793
  */
7222
7794
  400: unknown;
7223
7795
  /**
7224
- * Expected transaction or accounts not found
7796
+ * User not authenticated
7225
7797
  */
7226
- 404: unknown;
7227
- };
7228
- };
7229
- };
7230
- '/api/v1/{region}/bean/recurring/forecast': {
7231
- get: {
7232
- req: ForecastControllerGetForecastData;
7233
- res: {
7798
+ 401: unknown;
7234
7799
  /**
7235
- * Forecast retrieved successfully
7800
+ * Backfill already in progress for this user
7236
7801
  */
7237
- 200: ForecastResponseDto;
7802
+ 409: unknown;
7238
7803
  };
7239
7804
  };
7240
7805
  };
7241
- '/api/v1/{region}/bean/transaction-rules': {
7242
- post: {
7243
- req: TransactionRuleControllerCreateData;
7806
+ '/api/v1/users': {
7807
+ delete: {
7808
+ req: UserControllerDeleteOwnUserData;
7244
7809
  res: {
7245
7810
  /**
7246
- * Rule updated successfully (upsert mode)
7247
- */
7248
- 200: TransactionRuleResponseDto;
7249
- /**
7250
- * Validation failed
7251
- */
7252
- 400: ApiProblemResponseDto;
7253
- /**
7254
- * Unauthorized
7811
+ * User deleted successfully
7255
7812
  */
7256
- 401: ApiProblemResponseDto;
7813
+ 204: void;
7257
7814
  /**
7258
- * Resource conflict - another process is updating this rule
7815
+ * Invalid access token
7259
7816
  */
7260
- 409: ApiProblemResponseDto;
7817
+ 403: unknown;
7261
7818
  };
7262
7819
  };
7263
7820
  get: {
7264
- req: TransactionRuleControllerListData;
7821
+ req: UserControllerGetUserData;
7265
7822
  res: {
7266
7823
  /**
7267
- * List of rules
7268
- */
7269
- 200: TransactionRuleListResponseDto;
7270
- /**
7271
- * Unauthorized
7824
+ * User retrieved successfully
7272
7825
  */
7273
- 401: ApiProblemResponseDto;
7826
+ 200: unknown;
7274
7827
  };
7275
7828
  };
7276
- };
7277
- '/api/v1/{region}/bean/transaction-rules/validate': {
7278
7829
  post: {
7279
- req: TransactionRuleControllerValidateData;
7830
+ req: UserControllerSignupUserData;
7280
7831
  res: {
7281
7832
  /**
7282
- * Validation result
7833
+ * User created successfully
7283
7834
  */
7284
- 200: ValidateRuleResponseDto;
7835
+ 201: SignupResponseDto;
7285
7836
  /**
7286
- * Validation failed
7837
+ * Invalid Turnstile token (when Turnstile is enabled)
7287
7838
  */
7288
- 400: ApiProblemResponseDto;
7839
+ 400: unknown;
7289
7840
  /**
7290
- * Unauthorized
7841
+ * User signup is disabled
7291
7842
  */
7292
- 401: ApiProblemResponseDto;
7843
+ 403: unknown;
7293
7844
  };
7294
7845
  };
7295
7846
  };
7296
- '/api/v1/{region}/bean/transaction-rules/bulk': {
7297
- post: {
7298
- req: TransactionRuleControllerBulkCreateData;
7847
+ '/api/v1/users/{id}': {
7848
+ delete: {
7849
+ req: UserControllerDeleteUserData;
7299
7850
  res: {
7300
7851
  /**
7301
- * Bulk create completed
7302
- */
7303
- 201: BulkCreateRulesResponseDto;
7304
- /**
7305
- * Invalid bulk create data
7852
+ * User deleted successfully
7306
7853
  */
7307
- 400: ApiProblemResponseDto;
7854
+ 204: void;
7308
7855
  /**
7309
- * Unauthorized
7856
+ * Cannot delete own account or insufficient permissions
7310
7857
  */
7311
- 401: ApiProblemResponseDto;
7858
+ 403: unknown;
7312
7859
  };
7313
7860
  };
7314
7861
  };
7315
- '/api/v1/{region}/bean/transaction-rules/export/{format}': {
7862
+ '/api/v1/users/{id}/info': {
7316
7863
  get: {
7317
- req: TransactionRuleControllerExportData;
7864
+ req: UserControllerGetUserInfoData;
7318
7865
  res: {
7319
7866
  /**
7320
- * Exported rules
7321
- */
7322
- 200: ExportRulesResponseDto;
7323
- /**
7324
- * Unsupported format
7867
+ * User info retrieved successfully
7325
7868
  */
7326
- 400: ApiProblemResponseDto;
7869
+ 200: unknown;
7327
7870
  /**
7328
- * Unauthorized
7871
+ * Cannot access other user info without admin permission
7329
7872
  */
7330
- 401: ApiProblemResponseDto;
7873
+ 403: unknown;
7331
7874
  };
7332
7875
  };
7333
7876
  };
7334
- '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
7335
- get: {
7336
- req: TransactionRuleControllerGetStatisticsData;
7877
+ '/api/v1/users/setting': {
7878
+ put: {
7879
+ req: UserControllerUpdateUserSettingData;
7337
7880
  res: {
7338
7881
  /**
7339
- * Rule statistics
7882
+ * Settings updated successfully
7340
7883
  */
7341
- 200: RuleStatisticsResponseDto;
7884
+ 200: unknown;
7342
7885
  /**
7343
- * Unauthorized
7886
+ * Insufficient permissions
7344
7887
  */
7345
- 401: ApiProblemResponseDto;
7888
+ 403: unknown;
7346
7889
  };
7347
7890
  };
7348
7891
  };
7349
- '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
7892
+ '/api/v1/users/settings-by-page': {
7350
7893
  get: {
7351
- req: TransactionRuleControllerGetDetailData;
7894
+ req: UserControllerGetAllUserSettingsByPageData;
7352
7895
  res: {
7353
7896
  /**
7354
- * Rule details
7355
- */
7356
- 200: TransactionRuleResponseDto;
7357
- /**
7358
- * Unauthorized
7359
- */
7360
- 401: ApiProblemResponseDto;
7361
- /**
7362
- * Forbidden - not owner of rule
7363
- */
7364
- 403: ApiProblemResponseDto;
7365
- /**
7366
- * Rule not found
7897
+ * Settings list retrieved successfully
7367
7898
  */
7368
- 404: ApiProblemResponseDto;
7899
+ 200: unknown;
7369
7900
  };
7370
7901
  };
7371
- put: {
7372
- req: TransactionRuleControllerUpdateData;
7902
+ };
7903
+ '/api/v1/users/asset-liability-summary': {
7904
+ get: {
7373
7905
  res: {
7374
7906
  /**
7375
- * Rule updated successfully
7907
+ * Summary retrieved successfully
7376
7908
  */
7377
- 200: TransactionRuleResponseDto;
7909
+ 200: unknown;
7910
+ };
7911
+ };
7912
+ };
7913
+ '/api/v1/admin/properties': {
7914
+ get: {
7915
+ res: {
7378
7916
  /**
7379
- * Validation failed
7917
+ * Properties retrieved successfully
7380
7918
  */
7381
- 400: ApiProblemResponseDto;
7919
+ 200: unknown;
7382
7920
  /**
7383
7921
  * Unauthorized
7384
7922
  */
7385
- 401: ApiProblemResponseDto;
7386
- /**
7387
- * Forbidden - not owner of rule
7388
- */
7389
- 403: ApiProblemResponseDto;
7390
- /**
7391
- * Rule not found
7392
- */
7393
- 404: ApiProblemResponseDto;
7923
+ 401: unknown;
7394
7924
  /**
7395
- * Resource conflict - rule is being modified by another process
7925
+ * Forbidden - insufficient permissions
7396
7926
  */
7397
- 409: ApiProblemResponseDto;
7927
+ 403: unknown;
7398
7928
  };
7399
7929
  };
7400
- delete: {
7401
- req: TransactionRuleControllerDeleteData;
7930
+ };
7931
+ '/api/v1/admin/properties/{key}': {
7932
+ get: {
7933
+ req: PropertyControllerGetByKeyData;
7402
7934
  res: {
7403
7935
  /**
7404
- * Rule deleted successfully
7936
+ * Property retrieved successfully
7405
7937
  */
7406
- 204: void;
7938
+ 200: unknown;
7407
7939
  /**
7408
7940
  * Unauthorized
7409
7941
  */
7410
- 401: ApiProblemResponseDto;
7411
- /**
7412
- * Forbidden - not owner of rule
7413
- */
7414
- 403: ApiProblemResponseDto;
7942
+ 401: unknown;
7415
7943
  /**
7416
- * Rule not found
7944
+ * Forbidden - insufficient permissions
7417
7945
  */
7418
- 404: ApiProblemResponseDto;
7946
+ 403: unknown;
7419
7947
  /**
7420
- * Resource conflict - rule is being modified by another process
7948
+ * Property not found
7421
7949
  */
7422
- 409: ApiProblemResponseDto;
7950
+ 404: unknown;
7423
7951
  };
7424
7952
  };
7425
- };
7426
- '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
7427
- post: {
7428
- req: TransactionRuleControllerTestData;
7953
+ put: {
7954
+ req: PropertyControllerUpdateData;
7429
7955
  res: {
7430
7956
  /**
7431
- * Test result
7957
+ * Property updated successfully
7432
7958
  */
7433
- 200: TestRuleResponseDto;
7959
+ 200: unknown;
7434
7960
  /**
7435
7961
  * Unauthorized
7436
7962
  */
7437
- 401: ApiProblemResponseDto;
7438
- /**
7439
- * Forbidden - not owner of rule
7440
- */
7441
- 403: ApiProblemResponseDto;
7963
+ 401: unknown;
7442
7964
  /**
7443
- * Rule not found
7965
+ * Forbidden - insufficient permissions
7444
7966
  */
7445
- 404: ApiProblemResponseDto;
7967
+ 403: unknown;
7446
7968
  };
7447
7969
  };
7448
- };
7449
- '/api/v1/users': {
7450
7970
  delete: {
7451
- req: UserControllerDeleteOwnUserData;
7971
+ req: PropertyControllerDeleteData;
7452
7972
  res: {
7453
7973
  /**
7454
- * User deleted successfully
7974
+ * Property deleted successfully
7455
7975
  */
7456
7976
  204: void;
7457
7977
  /**
7458
- * Invalid access token
7978
+ * Unauthorized
7979
+ */
7980
+ 401: unknown;
7981
+ /**
7982
+ * Forbidden - insufficient permissions
7459
7983
  */
7460
7984
  403: unknown;
7461
- };
7462
- };
7463
- get: {
7464
- req: UserControllerGetUserData;
7465
- res: {
7466
7985
  /**
7467
- * User retrieved successfully
7986
+ * Property not found
7468
7987
  */
7469
- 200: unknown;
7988
+ 404: unknown;
7470
7989
  };
7471
7990
  };
7991
+ };
7992
+ '/api/v1/{region}/bean/transaction-rules': {
7472
7993
  post: {
7473
- req: UserControllerSignupUserData;
7994
+ req: TransactionRuleControllerCreateData;
7474
7995
  res: {
7475
7996
  /**
7476
- * User created successfully
7997
+ * Rule updated successfully (upsert mode)
7998
+ */
7999
+ 200: TransactionRuleResponseDto;
8000
+ /**
8001
+ * Validation failed
7477
8002
  */
7478
- 201: unknown;
8003
+ 400: ApiProblemResponseDto;
7479
8004
  /**
7480
- * Invalid Turnstile token (when Turnstile is enabled)
8005
+ * Unauthorized
7481
8006
  */
7482
- 400: unknown;
8007
+ 401: ApiProblemResponseDto;
7483
8008
  /**
7484
- * User signup is disabled
8009
+ * Resource conflict - another process is updating this rule
7485
8010
  */
7486
- 403: unknown;
8011
+ 409: ApiProblemResponseDto;
7487
8012
  };
7488
8013
  };
7489
- };
7490
- '/api/v1/users/{id}': {
7491
- delete: {
7492
- req: UserControllerDeleteUserData;
8014
+ get: {
8015
+ req: TransactionRuleControllerListData;
7493
8016
  res: {
7494
8017
  /**
7495
- * User deleted successfully
8018
+ * List of rules
7496
8019
  */
7497
- 204: void;
8020
+ 200: TransactionRuleListResponseDto;
7498
8021
  /**
7499
- * Cannot delete own account or insufficient permissions
8022
+ * Unauthorized
7500
8023
  */
7501
- 403: unknown;
8024
+ 401: ApiProblemResponseDto;
7502
8025
  };
7503
8026
  };
7504
8027
  };
7505
- '/api/v1/users/{id}/info': {
7506
- get: {
7507
- req: UserControllerGetUserInfoData;
8028
+ '/api/v1/{region}/bean/transaction-rules/validate': {
8029
+ post: {
8030
+ req: TransactionRuleControllerValidateData;
7508
8031
  res: {
7509
8032
  /**
7510
- * User info retrieved successfully
8033
+ * Validation result
7511
8034
  */
7512
- 200: unknown;
8035
+ 200: ValidateRuleResponseDto;
7513
8036
  /**
7514
- * Cannot access other user info without admin permission
8037
+ * Validation failed
7515
8038
  */
7516
- 403: unknown;
8039
+ 400: ApiProblemResponseDto;
8040
+ /**
8041
+ * Unauthorized
8042
+ */
8043
+ 401: ApiProblemResponseDto;
7517
8044
  };
7518
8045
  };
7519
8046
  };
7520
- '/api/v1/users/setting': {
7521
- put: {
7522
- req: UserControllerUpdateUserSettingData;
8047
+ '/api/v1/{region}/bean/transaction-rules/bulk': {
8048
+ post: {
8049
+ req: TransactionRuleControllerBulkCreateData;
7523
8050
  res: {
7524
8051
  /**
7525
- * Settings updated successfully
8052
+ * Bulk create completed
7526
8053
  */
7527
- 200: unknown;
8054
+ 201: BulkCreateRulesResponseDto;
7528
8055
  /**
7529
- * Insufficient permissions
8056
+ * Invalid bulk create data
7530
8057
  */
7531
- 403: unknown;
8058
+ 400: ApiProblemResponseDto;
8059
+ /**
8060
+ * Unauthorized
8061
+ */
8062
+ 401: ApiProblemResponseDto;
7532
8063
  };
7533
8064
  };
7534
8065
  };
7535
- '/api/v1/users/settings-by-page': {
8066
+ '/api/v1/{region}/bean/transaction-rules/export/{format}': {
7536
8067
  get: {
7537
- req: UserControllerGetAllUserSettingsByPageData;
8068
+ req: TransactionRuleControllerExportData;
7538
8069
  res: {
7539
8070
  /**
7540
- * Settings list retrieved successfully
8071
+ * Exported rules
7541
8072
  */
7542
- 200: unknown;
8073
+ 200: ExportRulesResponseDto;
8074
+ /**
8075
+ * Unsupported format
8076
+ */
8077
+ 400: ApiProblemResponseDto;
8078
+ /**
8079
+ * Unauthorized
8080
+ */
8081
+ 401: ApiProblemResponseDto;
7543
8082
  };
7544
8083
  };
7545
8084
  };
7546
- '/api/v1/users/asset-liability-summary': {
8085
+ '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
7547
8086
  get: {
8087
+ req: TransactionRuleControllerGetStatisticsData;
7548
8088
  res: {
7549
8089
  /**
7550
- * Summary retrieved successfully
8090
+ * Rule statistics
7551
8091
  */
7552
- 200: unknown;
8092
+ 200: RuleStatisticsResponseDto;
8093
+ /**
8094
+ * Unauthorized
8095
+ */
8096
+ 401: ApiProblemResponseDto;
7553
8097
  };
7554
8098
  };
7555
8099
  };
7556
- '/api/v1/admin/properties': {
8100
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
7557
8101
  get: {
8102
+ req: TransactionRuleControllerGetDetailData;
7558
8103
  res: {
7559
8104
  /**
7560
- * Properties retrieved successfully
8105
+ * Rule details
7561
8106
  */
7562
- 200: unknown;
8107
+ 200: TransactionRuleResponseDto;
7563
8108
  /**
7564
8109
  * Unauthorized
7565
8110
  */
7566
- 401: unknown;
8111
+ 401: ApiProblemResponseDto;
7567
8112
  /**
7568
- * Forbidden - insufficient permissions
8113
+ * Forbidden - not owner of rule
7569
8114
  */
7570
- 403: unknown;
8115
+ 403: ApiProblemResponseDto;
8116
+ /**
8117
+ * Rule not found
8118
+ */
8119
+ 404: ApiProblemResponseDto;
7571
8120
  };
7572
8121
  };
7573
- };
7574
- '/api/v1/admin/properties/{key}': {
7575
- get: {
7576
- req: PropertyControllerGetByKeyData;
8122
+ put: {
8123
+ req: TransactionRuleControllerUpdateData;
7577
8124
  res: {
7578
8125
  /**
7579
- * Property retrieved successfully
8126
+ * Rule updated successfully
7580
8127
  */
7581
- 200: unknown;
8128
+ 200: TransactionRuleResponseDto;
8129
+ /**
8130
+ * Validation failed
8131
+ */
8132
+ 400: ApiProblemResponseDto;
7582
8133
  /**
7583
8134
  * Unauthorized
7584
8135
  */
7585
- 401: unknown;
8136
+ 401: ApiProblemResponseDto;
7586
8137
  /**
7587
- * Forbidden - insufficient permissions
8138
+ * Forbidden - not owner of rule
7588
8139
  */
7589
- 403: unknown;
8140
+ 403: ApiProblemResponseDto;
7590
8141
  /**
7591
- * Property not found
8142
+ * Rule not found
7592
8143
  */
7593
- 404: unknown;
8144
+ 404: ApiProblemResponseDto;
8145
+ /**
8146
+ * Resource conflict - rule is being modified by another process
8147
+ */
8148
+ 409: ApiProblemResponseDto;
7594
8149
  };
7595
8150
  };
7596
- put: {
7597
- req: PropertyControllerUpdateData;
8151
+ delete: {
8152
+ req: TransactionRuleControllerDeleteData;
7598
8153
  res: {
7599
8154
  /**
7600
- * Property updated successfully
8155
+ * Rule deleted successfully
7601
8156
  */
7602
- 200: unknown;
8157
+ 204: void;
7603
8158
  /**
7604
8159
  * Unauthorized
7605
8160
  */
7606
- 401: unknown;
8161
+ 401: ApiProblemResponseDto;
7607
8162
  /**
7608
- * Forbidden - insufficient permissions
8163
+ * Forbidden - not owner of rule
7609
8164
  */
7610
- 403: unknown;
8165
+ 403: ApiProblemResponseDto;
8166
+ /**
8167
+ * Rule not found
8168
+ */
8169
+ 404: ApiProblemResponseDto;
8170
+ /**
8171
+ * Resource conflict - rule is being modified by another process
8172
+ */
8173
+ 409: ApiProblemResponseDto;
7611
8174
  };
7612
8175
  };
7613
- delete: {
7614
- req: PropertyControllerDeleteData;
8176
+ };
8177
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
8178
+ post: {
8179
+ req: TransactionRuleControllerTestData;
7615
8180
  res: {
7616
8181
  /**
7617
- * Property deleted successfully
8182
+ * Test result
7618
8183
  */
7619
- 204: void;
8184
+ 200: TestRuleResponseDto;
7620
8185
  /**
7621
8186
  * Unauthorized
7622
8187
  */
7623
- 401: unknown;
8188
+ 401: ApiProblemResponseDto;
7624
8189
  /**
7625
- * Forbidden - insufficient permissions
8190
+ * Forbidden - not owner of rule
7626
8191
  */
7627
- 403: unknown;
8192
+ 403: ApiProblemResponseDto;
7628
8193
  /**
7629
- * Property not found
8194
+ * Rule not found
7630
8195
  */
7631
- 404: unknown;
8196
+ 404: ApiProblemResponseDto;
7632
8197
  };
7633
8198
  };
7634
8199
  };
@@ -7728,6 +8293,21 @@ type $OpenApiTs = {
7728
8293
  };
7729
8294
  };
7730
8295
  };
8296
+ '/api/v1/{region}/bean/onboarding': {
8297
+ post: {
8298
+ req: OnboardingControllerBootstrapData;
8299
+ res: {
8300
+ /**
8301
+ * Onboarding bootstrap result.
8302
+ */
8303
+ 201: unknown;
8304
+ /**
8305
+ * Invalid region/account path/duplicate paths.
8306
+ */
8307
+ 422: unknown;
8308
+ };
8309
+ };
8310
+ };
7731
8311
  '/api/v1/{region}/bean/reconciliations': {
7732
8312
  post: {
7733
8313
  req: ReconciliationControllerComputeData;
@@ -7934,83 +8514,11 @@ type $OpenApiTs = {
7934
8514
  /**
7935
8515
  * Configuration reset successfully
7936
8516
  */
7937
- 200: ImporterConfigDto;
7938
- /**
7939
- * Invalid input - Unsupported importer
7940
- */
7941
- 400: ApiProblemResponseDto;
7942
- };
7943
- };
7944
- };
7945
- '/api/v1/bean/platforms': {
7946
- get: {
7947
- res: {
7948
- /**
7949
- * List of platforms with binding and account counts
7950
- */
7951
- 200: unknown;
7952
- };
7953
- };
7954
- post: {
7955
- req: PlatformControllerCreateData;
7956
- res: {
7957
- /**
7958
- * Platform created successfully
7959
- */
7960
- 201: unknown;
7961
- /**
7962
- * Platform already exists
7963
- */
7964
- 409: unknown;
7965
- };
7966
- };
7967
- };
7968
- '/api/v1/bean/platforms/list': {
7969
- get: {
7970
- res: {
7971
- /**
7972
- * List of platforms with user binding status
7973
- */
7974
- 200: unknown;
7975
- };
7976
- };
7977
- };
7978
- '/api/v1/bean/platforms/match': {
7979
- get: {
7980
- req: PlatformControllerMatchPlatformsData;
7981
- res: {
7982
- /**
7983
- * List of matching platforms with suggested segment names
7984
- */
7985
- 200: unknown;
7986
- };
7987
- };
7988
- };
7989
- '/api/v1/bean/platforms/{id}': {
7990
- put: {
7991
- req: PlatformControllerUpdateData;
7992
- res: {
7993
- /**
7994
- * Platform updated successfully
7995
- */
7996
- 200: unknown;
7997
- /**
7998
- * Platform not found
7999
- */
8000
- 404: unknown;
8001
- };
8002
- };
8003
- delete: {
8004
- req: PlatformControllerDeleteData;
8005
- res: {
8006
- /**
8007
- * Platform deleted successfully
8008
- */
8009
- 204: void;
8517
+ 200: ImporterConfigDto;
8010
8518
  /**
8011
- * Platform not found
8519
+ * Invalid input - Unsupported importer
8012
8520
  */
8013
- 404: unknown;
8521
+ 400: ApiProblemResponseDto;
8014
8522
  };
8015
8523
  };
8016
8524
  };
@@ -8067,6 +8575,54 @@ type $OpenApiTs = {
8067
8575
  };
8068
8576
  };
8069
8577
  };
8578
+ '/api/v1/{region}/bean/external-account-links': {
8579
+ post: {
8580
+ req: ExternalAccountLinkControllerCreateData;
8581
+ res: {
8582
+ /**
8583
+ * Link created.
8584
+ */
8585
+ 201: ExternalAccountLinkResponseDto;
8586
+ /**
8587
+ * beanAccountId not owned, or an active link already exists.
8588
+ */
8589
+ 422: unknown;
8590
+ };
8591
+ };
8592
+ get: {
8593
+ req: ExternalAccountLinkControllerFindAllData;
8594
+ res: {
8595
+ /**
8596
+ * Links retrieved.
8597
+ */
8598
+ 200: ExternalAccountLinkListResponseDto;
8599
+ };
8600
+ };
8601
+ };
8602
+ '/api/v1/{region}/bean/external-account-links/{id}': {
8603
+ get: {
8604
+ req: ExternalAccountLinkControllerFindOneData;
8605
+ res: {
8606
+ /**
8607
+ * Link retrieved.
8608
+ */
8609
+ 200: ExternalAccountLinkResponseDto;
8610
+ /**
8611
+ * Link not found or not owned by the user.
8612
+ */
8613
+ 422: unknown;
8614
+ };
8615
+ };
8616
+ delete: {
8617
+ req: ExternalAccountLinkControllerRemoveData;
8618
+ res: {
8619
+ /**
8620
+ * Link soft-deleted; historical transactions are unaffected.
8621
+ */
8622
+ 204: void;
8623
+ };
8624
+ };
8625
+ };
8070
8626
  '/api/v1/{region}/bean/import/parser-telemetry': {
8071
8627
  post: {
8072
8628
  req: TelemetryControllerReportTelemetryData;
@@ -8155,185 +8711,101 @@ type $OpenApiTs = {
8155
8711
  };
8156
8712
  };
8157
8713
  };
8158
- '/api/v1/{region}/dashboard/net-worth': {
8159
- get: {
8160
- req: DashboardControllerGetNetWorthData;
8161
- res: {
8162
- /**
8163
- * Net worth retrieved successfully
8164
- */
8165
- 200: NetWorthResponseDto;
8166
- /**
8167
- * User not authenticated
8168
- */
8169
- 401: unknown;
8170
- };
8171
- };
8172
- };
8173
- '/api/v1/{region}/dashboard/accounts': {
8174
- get: {
8175
- req: DashboardControllerGetAccountsData;
8176
- res: {
8177
- /**
8178
- * Accounts retrieved successfully. Response type depends on groupBy parameter.
8179
- */
8180
- 200: AccountsResponseDto | AssetClassAccountsResponseDto | HoldingAssetClassCrossAccountResponseDto;
8181
- /**
8182
- * User not authenticated
8183
- */
8184
- 401: unknown;
8185
- };
8186
- };
8187
- };
8188
- '/api/v1/{region}/dashboard/cash-flow': {
8189
- get: {
8190
- req: DashboardControllerGetCashFlowData;
8191
- res: {
8192
- /**
8193
- * Cash flow retrieved successfully
8194
- */
8195
- 200: CashFlowResponseDto;
8196
- /**
8197
- * Invalid period format
8198
- */
8199
- 400: unknown;
8200
- /**
8201
- * User not authenticated
8202
- */
8203
- 401: unknown;
8204
- };
8205
- };
8206
- };
8207
- '/api/v1/{region}/dashboard/expenses': {
8208
- get: {
8209
- req: DashboardControllerGetExpensesData;
8210
- res: {
8211
- /**
8212
- * Expenses retrieved successfully
8213
- */
8214
- 200: ExpensesByCategoryResponseDto;
8215
- /**
8216
- * Invalid groupBy or period
8217
- */
8218
- 400: unknown;
8219
- /**
8220
- * User not authenticated
8221
- */
8222
- 401: unknown;
8223
- };
8224
- };
8225
- };
8226
- '/api/v1/{region}/investment/holdings/pnl': {
8714
+ '/api/v1/bean/platforms': {
8227
8715
  get: {
8228
- req: HoldingPnlControllerGetHoldingPnlData;
8229
8716
  res: {
8230
8717
  /**
8231
- * Holding P&L retrieved successfully
8232
- */
8233
- 200: HoldingPnlResponseDto;
8234
- /**
8235
- * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
8236
- */
8237
- 400: unknown;
8238
- /**
8239
- * User not authenticated
8718
+ * List of platforms with binding and account counts
8240
8719
  */
8241
- 401: unknown;
8720
+ 200: unknown;
8242
8721
  };
8243
8722
  };
8244
- };
8245
- '/api/v1/{region}/bean/prices': {
8246
8723
  post: {
8247
- req: PriceControllerCreateData;
8724
+ req: PlatformControllerCreateData;
8248
8725
  res: {
8249
8726
  /**
8250
- * Price created successfully
8251
- */
8252
- 201: PriceResponseDto;
8253
- /**
8254
- * Currency or quoteCurrency commodity not found
8727
+ * Platform created successfully
8255
8728
  */
8256
- 404: unknown;
8729
+ 201: unknown;
8257
8730
  /**
8258
- * Price already exists for this currency pair and date
8731
+ * Platform already exists
8259
8732
  */
8260
8733
  409: unknown;
8261
8734
  };
8262
8735
  };
8736
+ };
8737
+ '/api/v1/bean/platforms/list': {
8263
8738
  get: {
8264
- req: PriceControllerFindAllData;
8265
8739
  res: {
8266
8740
  /**
8267
- * Prices retrieved successfully
8741
+ * List of platforms with user binding status
8268
8742
  */
8269
- 200: PriceListResponseDto;
8743
+ 200: Array<PlatformListItemDto>;
8270
8744
  };
8271
8745
  };
8272
8746
  };
8273
- '/api/v1/{region}/bean/prices/{id}': {
8747
+ '/api/v1/bean/platforms/match': {
8274
8748
  get: {
8275
- req: PriceControllerFindOneData;
8749
+ req: PlatformControllerMatchPlatformsData;
8276
8750
  res: {
8277
8751
  /**
8278
- * Price retrieved successfully
8279
- */
8280
- 200: PriceResponseDto;
8281
- /**
8282
- * Price not found
8752
+ * Matching platforms with overall match type and truncation flag
8283
8753
  */
8284
- 404: unknown;
8754
+ 200: PlatformMatchResponseDto;
8285
8755
  };
8286
8756
  };
8757
+ };
8758
+ '/api/v1/bean/platforms/{id}': {
8287
8759
  put: {
8288
- req: PriceControllerUpdateData;
8760
+ req: PlatformControllerUpdateData;
8289
8761
  res: {
8290
8762
  /**
8291
- * Price updated successfully
8763
+ * Platform updated successfully
8292
8764
  */
8293
- 200: PriceResponseDto;
8765
+ 200: unknown;
8294
8766
  /**
8295
- * Price not found
8767
+ * Platform not found
8296
8768
  */
8297
8769
  404: unknown;
8298
- /**
8299
- * Updated price conflicts with existing price
8300
- */
8301
- 409: unknown;
8302
8770
  };
8303
8771
  };
8304
8772
  delete: {
8305
- req: PriceControllerDeleteData;
8773
+ req: PlatformControllerDeleteData;
8306
8774
  res: {
8307
8775
  /**
8308
- * Price deleted successfully
8776
+ * Platform deleted successfully
8309
8777
  */
8310
8778
  204: void;
8311
8779
  /**
8312
- * Price not found
8780
+ * Platform not found
8313
8781
  */
8314
8782
  404: unknown;
8315
8783
  };
8316
8784
  };
8317
8785
  };
8318
- '/api/v1/{region}/bean/prices/bulk': {
8319
- post: {
8320
- req: PriceControllerBulkCreateData;
8786
+ '/api/v1/{region}/dashboard/net-worth': {
8787
+ get: {
8788
+ req: DashboardControllerGetNetWorthData;
8321
8789
  res: {
8322
8790
  /**
8323
- * Prices created successfully
8791
+ * Net worth retrieved successfully
8324
8792
  */
8325
- 201: Array<PriceResponseDto>;
8793
+ 200: NetWorthResponseDto;
8794
+ /**
8795
+ * User not authenticated
8796
+ */
8797
+ 401: unknown;
8326
8798
  };
8327
8799
  };
8328
8800
  };
8329
- '/api/v1/{region}/reporting/portfolio/trends': {
8801
+ '/api/v1/{region}/dashboard/accounts': {
8330
8802
  get: {
8331
- req: ReportingControllerGetPortfolioTrendsData;
8803
+ req: DashboardControllerGetAccountsData;
8332
8804
  res: {
8333
8805
  /**
8334
- * Trends retrieved successfully
8806
+ * Accounts retrieved successfully. Response type depends on groupBy parameter.
8335
8807
  */
8336
- 200: PortfolioTrendsResponseDto;
8808
+ 200: AccountsResponseDto | AssetClassAccountsResponseDto | HoldingAssetClassCrossAccountResponseDto;
8337
8809
  /**
8338
8810
  * User not authenticated
8339
8811
  */
@@ -8341,14 +8813,18 @@ type $OpenApiTs = {
8341
8813
  };
8342
8814
  };
8343
8815
  };
8344
- '/api/v1/{region}/reporting/cash-flow/trends': {
8816
+ '/api/v1/{region}/dashboard/cash-flow': {
8345
8817
  get: {
8346
- req: ReportingControllerGetCashFlowTrendsData;
8818
+ req: DashboardControllerGetCashFlowData;
8347
8819
  res: {
8348
8820
  /**
8349
- * Cash-flow trends retrieved successfully
8821
+ * Cash flow retrieved successfully
8350
8822
  */
8351
- 200: CashFlowTrendsResponseDto;
8823
+ 200: CashFlowResponseDto;
8824
+ /**
8825
+ * Invalid period format
8826
+ */
8827
+ 400: unknown;
8352
8828
  /**
8353
8829
  * User not authenticated
8354
8830
  */
@@ -8356,16 +8832,16 @@ type $OpenApiTs = {
8356
8832
  };
8357
8833
  };
8358
8834
  };
8359
- '/api/v1/{region}/reporting/snapshots/generate': {
8360
- post: {
8361
- req: ReportingControllerGenerateSnapshotData;
8835
+ '/api/v1/{region}/dashboard/expenses': {
8836
+ get: {
8837
+ req: DashboardControllerGetExpensesData;
8362
8838
  res: {
8363
8839
  /**
8364
- * Snapshot generated successfully
8840
+ * Expenses retrieved successfully
8365
8841
  */
8366
- 200: GenerateSnapshotResponse;
8842
+ 200: ExpensesByCategoryResponseDto;
8367
8843
  /**
8368
- * Invalid date format
8844
+ * Invalid groupBy or period
8369
8845
  */
8370
8846
  400: unknown;
8371
8847
  /**
@@ -8375,26 +8851,22 @@ type $OpenApiTs = {
8375
8851
  };
8376
8852
  };
8377
8853
  };
8378
- '/api/v1/{region}/reporting/snapshots/backfill': {
8379
- post: {
8380
- req: ReportingControllerBackfillSnapshotsData;
8854
+ '/api/v1/{region}/investment/holdings/pnl': {
8855
+ get: {
8856
+ req: HoldingPnlControllerGetHoldingPnlData;
8381
8857
  res: {
8382
8858
  /**
8383
- * Backfill completed successfully
8859
+ * Holding P&L retrieved successfully
8384
8860
  */
8385
- 200: BackfillSnapshotsResponse;
8861
+ 200: HoldingPnlResponseDto;
8386
8862
  /**
8387
- * Invalid date format or range
8863
+ * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
8388
8864
  */
8389
8865
  400: unknown;
8390
8866
  /**
8391
8867
  * User not authenticated
8392
8868
  */
8393
8869
  401: unknown;
8394
- /**
8395
- * Backfill already in progress for this user
8396
- */
8397
- 409: unknown;
8398
8870
  };
8399
8871
  };
8400
8872
  };
@@ -8419,7 +8891,7 @@ type $OpenApiTs = {
8419
8891
  /**
8420
8892
  * Login successful
8421
8893
  */
8422
- 200: unknown;
8894
+ 200: AnonymousLoginResponseDto;
8423
8895
  /**
8424
8896
  * Invalid access token
8425
8897
  */
@@ -8566,6 +9038,32 @@ type $OpenApiTs = {
8566
9038
  };
8567
9039
  };
8568
9040
  };
9041
+ '/api/v1/market/symbols/search': {
9042
+ get: {
9043
+ req: SymbolControllerSearchData;
9044
+ res: {
9045
+ /**
9046
+ * Ranked search results
9047
+ */
9048
+ 200: Array<SymbolSearchResultDto>;
9049
+ };
9050
+ };
9051
+ };
9052
+ '/api/v1/market/symbols/{symbol}/quote': {
9053
+ get: {
9054
+ req: SymbolControllerGetQuoteData;
9055
+ res: {
9056
+ /**
9057
+ * Symbol quote
9058
+ */
9059
+ 200: SymbolQuoteDto;
9060
+ /**
9061
+ * Symbol not found in the openbb catalog
9062
+ */
9063
+ 404: unknown;
9064
+ };
9065
+ };
9066
+ };
8569
9067
  };
8570
9068
 
8571
9069
  declare class BeanAccountsService {
@@ -8587,7 +9085,7 @@ declare class BeanAccountsService {
8587
9085
  * @param data.type Filter by account type
8588
9086
  * @param data.status Filter by status
8589
9087
  * @param data.isCustom Filter by custom (user-created) accounts only
8590
- * @param data.search Search term for path or i18nKey
9088
+ * @param data.search Search term for account path
8591
9089
  * @param data.limit Maximum number of results
8592
9090
  * @param data.offset Number of results to skip
8593
9091
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -8647,6 +9145,17 @@ declare class BeanAccountsService {
8647
9145
  * @throws ApiError
8648
9146
  */
8649
9147
  static accountControllerReopen(data: AccountControllerReopenData): CancelablePromise<AccountControllerReopenResponse>;
9148
+ /**
9149
+ * Post an opening-balance transaction
9150
+ * 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.
9151
+ * @param data The data for the request.
9152
+ * @param data.id Account UUID
9153
+ * @param data.region Region code for tenant context
9154
+ * @param data.requestBody
9155
+ * @returns OpeningBalanceResultDto Opening-balance transaction created
9156
+ * @throws ApiError
9157
+ */
9158
+ static accountControllerAddOpeningBalance(data: AccountControllerAddOpeningBalanceData): CancelablePromise<AccountControllerAddOpeningBalanceResponse>;
8650
9159
  }
8651
9160
  declare class BeanTransactionsService {
8652
9161
  /**
@@ -8748,7 +9257,7 @@ declare class BeanBalancesService {
8748
9257
  * Query account balance
8749
9258
  * Calculate account balance at a specific date for a single currency
8750
9259
  * @param data The data for the request.
8751
- * @param data.account Account name (e.g., "Assets:Bank:Checking")
9260
+ * @param data.account Account name (e.g., "Assets:Checking")
8752
9261
  * @param data.region Region code for tenant context
8753
9262
  * @param data.date Date to calculate balance at (ISO 8601 format)
8754
9263
  * @param data.currency Currency to query (e.g., "USD", "CNY")
@@ -8978,4 +9487,4 @@ type OpenAPIConfig = {
8978
9487
  };
8979
9488
  declare const OpenAPI: OpenAPIConfig;
8980
9489
 
8981
- 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 ActualBalanceDto, type AmountDto, type AmountRangeDto, type AnonymousLoginDto, 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 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 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 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 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 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 suggestedAction, type suggestedFrequency, type type, type type2, type type3, type type4, type value, type viewMode };
9490
+ 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 SymbolControllerGetQuoteData, type SymbolControllerGetQuoteResponse, type SymbolControllerSearchData, type SymbolControllerSearchResponse, type SymbolQuoteDto, type SymbolSearchResultDto, 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 };