@firela/api-types 0.0.0-canary.7cd70834 → 0.0.0-canary.7f2ecc16

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.
@@ -17,23 +17,33 @@ import type {
17
17
  AccountControllerCloseResponse,
18
18
  AccountControllerReopenData,
19
19
  AccountControllerReopenResponse,
20
+ AccountControllerAddOpeningBalanceData,
21
+ AccountControllerAddOpeningBalanceResponse,
22
+ AccountStandardsControllerGetTemplatesData,
23
+ AccountStandardsControllerGetTemplatesResponse,
24
+ AccountStandardsControllerGetTemplateMetadataData,
25
+ AccountStandardsControllerGetTemplateMetadataResponse,
26
+ AccountStandardsControllerGetRegionsData,
27
+ AccountStandardsControllerGetRegionsResponse,
20
28
  TransactionControllerCreateData,
21
29
  TransactionControllerCreateResponse,
22
30
  TransactionControllerListData,
23
31
  TransactionControllerListResponse,
24
- TransactionControllerData,
25
- TransactionControllerResponse,
32
+ TransactionControllerCreateBatchData,
33
+ TransactionControllerCreateBatchResponse,
34
+ TransactionControllerCorrectData,
35
+ TransactionControllerCorrectResponse,
36
+ TransactionControllerSuggestTagsData,
37
+ TransactionControllerSuggestTagsResponse,
26
38
  TransactionControllerGetDetailData,
27
39
  TransactionControllerGetDetailResponse,
28
40
  TransactionControllerUpdateData,
29
41
  TransactionControllerUpdateResponse,
30
- TransactionController1Data,
31
- TransactionController1Response,
32
- AccountStandardsControllerGetTemplatesData,
33
- AccountStandardsControllerGetTemplatesResponse,
34
- AccountStandardsControllerGetRegionsResponse,
42
+ TransactionControllerDeleteData,
43
+ TransactionControllerDeleteResponse,
35
44
  BalanceControllerGetBalanceData,
36
45
  BalanceControllerGetBalanceResponse,
46
+ BalanceControllerGetMultiCurrencyBalanceData,
37
47
  BalanceControllerGetMultiCurrencyBalanceResponse,
38
48
  ReviewControllerFindAllData,
39
49
  ReviewControllerFindAllResponse,
@@ -41,13 +51,14 @@ import type {
41
51
  ReviewControllerGetStatsResponse,
42
52
  ReviewControllerFindOneData,
43
53
  ReviewControllerFindOneResponse,
44
- ReviewControllerData,
45
- ReviewControllerResponse,
46
- ReviewController1Data,
47
- ReviewController1Response,
48
- ReviewController2Data,
49
- ReviewController2Response,
50
- PayeeControllerResponse,
54
+ ReviewControllerResolveData,
55
+ ReviewControllerResolveResponse,
56
+ ReviewControllerUndoData,
57
+ ReviewControllerUndoResponse,
58
+ ReviewControllerBatchResolveData,
59
+ ReviewControllerBatchResolveResponse,
60
+ PayeeControllerCreateData,
61
+ PayeeControllerCreateResponse,
51
62
  PayeeControllerFindAllData,
52
63
  PayeeControllerFindAllResponse,
53
64
  PayeeControllerAutocompleteData,
@@ -56,43 +67,62 @@ import type {
56
67
  PayeeControllerGetTopPayeesResponse,
57
68
  PayeeControllerFindOneData,
58
69
  PayeeControllerFindOneResponse,
59
- PayeeController1Response,
60
- PayeeController2Response,
61
- PayeeProfileAdminControllerResponse,
70
+ PayeeControllerUpdateData,
71
+ PayeeControllerUpdateResponse,
72
+ PayeeControllerDeleteData,
73
+ PayeeControllerDeleteResponse,
74
+ PayeeProfileAdminControllerCreateData,
75
+ PayeeProfileAdminControllerCreateResponse,
62
76
  PayeeProfileAdminControllerFindAllData,
63
77
  PayeeProfileAdminControllerFindAllResponse,
64
78
  PayeeProfileAdminControllerFindOneData,
65
79
  PayeeProfileAdminControllerFindOneResponse,
66
- PayeeProfileAdminController1Response,
67
- PayeeProfileAdminController2Response,
68
- PayeeProfileAdminController3Response,
69
- PayeeProfileAdminController4Response,
70
- CommodityControllerData,
71
- CommodityControllerResponse,
80
+ PayeeProfileAdminControllerUpdateData,
81
+ PayeeProfileAdminControllerUpdateResponse,
82
+ PayeeProfileAdminControllerDeleteData,
83
+ PayeeProfileAdminControllerDeleteResponse,
84
+ PayeeProfileAdminControllerVerifyData,
85
+ PayeeProfileAdminControllerVerifyResponse,
86
+ PayeeProfileAdminControllerUnverifyData,
87
+ PayeeProfileAdminControllerUnverifyResponse,
88
+ CommodityControllerCreateData,
89
+ CommodityControllerCreateResponse,
72
90
  CommodityControllerFindAllData,
73
91
  CommodityControllerFindAllResponse,
74
92
  CommodityControllerFindOneData,
75
93
  CommodityControllerFindOneResponse,
76
- CommodityController1Data,
77
- CommodityController1Response,
78
- CommodityController2Data,
79
- CommodityController2Response,
80
- CommodityController3Data,
81
- CommodityController3Response,
82
- CommodityController4Data,
83
- CommodityController4Response,
84
- RecurringRuleControllerData,
85
- RecurringRuleControllerResponse,
94
+ CommodityControllerUpdateData,
95
+ CommodityControllerUpdateResponse,
96
+ CommodityControllerDeleteData,
97
+ CommodityControllerDeleteResponse,
98
+ CommodityControllerGetOrCreateData,
99
+ CommodityControllerGetOrCreateResponse,
100
+ CommodityControllerBulkCreateData,
101
+ CommodityControllerBulkCreateResponse,
102
+ PriceControllerCreateData,
103
+ PriceControllerCreateResponse,
104
+ PriceControllerFindAllData,
105
+ PriceControllerFindAllResponse,
106
+ PriceControllerFindOneData,
107
+ PriceControllerFindOneResponse,
108
+ PriceControllerUpdateData,
109
+ PriceControllerUpdateResponse,
110
+ PriceControllerDeleteData,
111
+ PriceControllerDeleteResponse,
112
+ PriceControllerBulkCreateData,
113
+ PriceControllerBulkCreateResponse,
114
+ RecurringRuleControllerCreateData,
115
+ RecurringRuleControllerCreateResponse,
86
116
  RecurringRuleControllerFindAllData,
87
117
  RecurringRuleControllerFindAllResponse,
88
- RecurringRuleController1Data,
89
- RecurringRuleController1Response,
118
+ RecurringRuleControllerCreateFromTransactionData,
119
+ RecurringRuleControllerCreateFromTransactionResponse,
90
120
  RecurringRuleControllerFindOneData,
91
121
  RecurringRuleControllerFindOneResponse,
92
- RecurringRuleController2Data,
93
- RecurringRuleController2Response,
94
- RecurringRuleController3Data,
95
- RecurringRuleController3Response,
122
+ RecurringRuleControllerUpdateData,
123
+ RecurringRuleControllerUpdateResponse,
124
+ RecurringRuleControllerDeleteData,
125
+ RecurringRuleControllerDeleteResponse,
96
126
  RecurringRuleControllerGetWithStatsData,
97
127
  RecurringRuleControllerGetWithStatsResponse,
98
128
  ExpectedTransactionControllerFindAllData,
@@ -101,38 +131,26 @@ import type {
101
131
  ExpectedTransactionControllerFindOverdueResponse,
102
132
  ExpectedTransactionControllerFindOneData,
103
133
  ExpectedTransactionControllerFindOneResponse,
104
- ExpectedTransactionControllerData,
105
- ExpectedTransactionControllerResponse,
106
- ExpectedTransactionController1Data,
107
- ExpectedTransactionController1Response,
108
- ExpectedTransactionController2Data,
109
- ExpectedTransactionController2Response,
110
- ExpectedTransactionController3Data,
111
- ExpectedTransactionController3Response,
112
- ExpectedTransactionController4Data,
113
- ExpectedTransactionController4Response,
134
+ ExpectedTransactionControllerSkipData,
135
+ ExpectedTransactionControllerSkipResponse,
136
+ ExpectedTransactionControllerUndoSkipData,
137
+ ExpectedTransactionControllerUndoSkipResponse,
138
+ ExpectedTransactionControllerConfirmMatchData,
139
+ ExpectedTransactionControllerConfirmMatchResponse,
140
+ ExpectedTransactionControllerUnmatchData,
141
+ ExpectedTransactionControllerUnmatchResponse,
142
+ ExpectedTransactionControllerEnterNowData,
143
+ ExpectedTransactionControllerEnterNowResponse,
114
144
  ForecastControllerGetForecastData,
115
145
  ForecastControllerGetForecastResponse,
116
- TransactionRuleControllerData,
117
- TransactionRuleControllerResponse,
118
- TransactionRuleControllerListData,
119
- TransactionRuleControllerListResponse,
120
- TransactionRuleControllerValidateData,
121
- TransactionRuleControllerValidateResponse,
122
- TransactionRuleController1Data,
123
- TransactionRuleController1Response,
124
- TransactionRuleControllerExportData,
125
- TransactionRuleControllerExportResponse,
126
- TransactionRuleControllerGetStatisticsData,
127
- TransactionRuleControllerGetStatisticsResponse,
128
- TransactionRuleControllerGetDetailData,
129
- TransactionRuleControllerGetDetailResponse,
130
- TransactionRuleController2Data,
131
- TransactionRuleController2Response,
132
- TransactionRuleController3Data,
133
- TransactionRuleController3Response,
134
- TransactionRuleControllerTestData,
135
- TransactionRuleControllerTestResponse,
146
+ ReportingControllerGetPortfolioTrendsData,
147
+ ReportingControllerGetPortfolioTrendsResponse,
148
+ ReportingControllerGetCashFlowTrendsData,
149
+ ReportingControllerGetCashFlowTrendsResponse,
150
+ ReportingControllerGenerateSnapshotData,
151
+ ReportingControllerGenerateSnapshotResponse,
152
+ ReportingControllerBackfillSnapshotsData,
153
+ ReportingControllerBackfillSnapshotsResponse,
136
154
  UserControllerDeleteOwnUserData,
137
155
  UserControllerDeleteOwnUserResponse,
138
156
  UserControllerGetUserData,
@@ -151,25 +169,85 @@ import type {
151
169
  PropertyControllerGetAllResponse,
152
170
  PropertyControllerGetByKeyData,
153
171
  PropertyControllerGetByKeyResponse,
154
- PropertyControllerResponse,
155
- PropertyController1Response,
172
+ PropertyControllerUpdateData,
173
+ PropertyControllerUpdateResponse,
174
+ PropertyControllerDeleteData,
175
+ PropertyControllerDeleteResponse,
176
+ TransactionRuleControllerCreateData,
177
+ TransactionRuleControllerCreateResponse,
178
+ TransactionRuleControllerListData,
179
+ TransactionRuleControllerListResponse,
180
+ TransactionRuleControllerValidateData,
181
+ TransactionRuleControllerValidateResponse,
182
+ TransactionRuleControllerBulkCreateData,
183
+ TransactionRuleControllerBulkCreateResponse,
184
+ TransactionRuleControllerExportData,
185
+ TransactionRuleControllerExportResponse,
186
+ TransactionRuleControllerGetStatisticsData,
187
+ TransactionRuleControllerGetStatisticsResponse,
188
+ TransactionRuleControllerGetDetailData,
189
+ TransactionRuleControllerGetDetailResponse,
190
+ TransactionRuleControllerUpdateData,
191
+ TransactionRuleControllerUpdateResponse,
192
+ TransactionRuleControllerDeleteData,
193
+ TransactionRuleControllerDeleteResponse,
194
+ TransactionRuleControllerTestData,
195
+ TransactionRuleControllerTestResponse,
196
+ EventControllerCreateData,
197
+ EventControllerCreateResponse,
198
+ EventControllerFindAllData,
199
+ EventControllerFindAllResponse,
200
+ EventControllerFindOneData,
201
+ EventControllerFindOneResponse,
202
+ EventControllerUpdateData,
203
+ EventControllerUpdateResponse,
204
+ EventControllerDeleteData,
205
+ EventControllerDeleteResponse,
206
+ EventControllerGetSliceData,
207
+ EventControllerGetSliceResponse,
208
+ OnboardingControllerBootstrapData,
209
+ OnboardingControllerBootstrapResponse,
210
+ ReconciliationControllerComputeData,
211
+ ReconciliationControllerComputeResponse,
212
+ ReconciliationControllerAssertData,
213
+ ReconciliationControllerAssertResponse,
214
+ ReconciliationControllerPadData,
215
+ ReconciliationControllerPadResponse,
216
+ ReconciliationControllerHistoryData,
217
+ ReconciliationControllerHistoryResponse,
218
+ ExportControllerExportBeancountResponse,
156
219
  FileImportControllerImportFileData,
157
220
  FileImportControllerImportFileResponse,
158
221
  FileImportControllerIdentifyFileData,
159
222
  FileImportControllerIdentifyFileResponse,
223
+ FileImportControllerImportBeancountData,
224
+ FileImportControllerImportBeancountResponse,
160
225
  ImporterConfigControllerGetConfigData,
161
226
  ImporterConfigControllerGetConfigResponse,
162
- ImporterConfigControllerData,
163
- ImporterConfigControllerResponse,
164
- ImporterConfigController1Data,
165
- ImporterConfigController1Response,
227
+ ImporterConfigControllerUpdateConfigData,
228
+ ImporterConfigControllerUpdateConfigResponse,
229
+ ImporterConfigControllerResetConfigData,
230
+ ImporterConfigControllerResetConfigResponse,
166
231
  ProviderSyncControllerSyncData,
167
232
  ProviderSyncControllerSyncResponse,
233
+ ProviderSyncControllerGetSupportedProvidersData,
168
234
  ProviderSyncControllerGetSupportedProvidersResponse,
169
235
  ProviderSyncControllerIsProviderSupportedData,
170
236
  ProviderSyncControllerIsProviderSupportedResponse,
237
+ ExternalAccountLinkControllerCreateData,
238
+ ExternalAccountLinkControllerCreateResponse,
239
+ ExternalAccountLinkControllerFindAllData,
240
+ ExternalAccountLinkControllerFindAllResponse,
241
+ ExternalAccountLinkControllerFindOneData,
242
+ ExternalAccountLinkControllerFindOneResponse,
243
+ ExternalAccountLinkControllerRemoveData,
244
+ ExternalAccountLinkControllerRemoveResponse,
171
245
  TelemetryControllerReportTelemetryData,
172
246
  TelemetryControllerReportTelemetryResponse,
247
+ TelemetryControllerReportCoverageMissData,
248
+ TelemetryControllerReportCoverageMissResponse,
249
+ TelemetryControllerGetCoverageMetricsData,
250
+ TelemetryControllerGetCoverageMetricsResponse,
173
251
  NlpControllerProcessNaturalLanguageData,
174
252
  NlpControllerProcessNaturalLanguageResponse,
175
253
  NlpControllerClearSessionData,
@@ -177,55 +255,44 @@ import type {
177
255
  NlpControllerGetSessionData,
178
256
  NlpControllerGetSessionResponse,
179
257
  PlatformControllerFindAllResponse,
180
- PlatformControllerResponse,
258
+ PlatformControllerCreateData,
259
+ PlatformControllerCreateResponse,
181
260
  PlatformControllerGetPlatformListResponse,
182
- PlatformController1Response,
183
- PlatformController2Response,
184
- SymbolControllerLookupSymbolData,
185
- SymbolControllerLookupSymbolResponse,
186
- SymbolControllerGetSymbolDataData,
187
- SymbolControllerGetSymbolDataResponse,
188
- SymbolControllerGatherSymbolForDateData,
189
- SymbolControllerGatherSymbolForDateResponse,
190
- SymbolControllerResponse,
191
- CacheControllerFlushCacheResponse,
261
+ PlatformControllerMatchPlatformsData,
262
+ PlatformControllerMatchPlatformsResponse,
263
+ PlatformControllerUpdateData,
264
+ PlatformControllerUpdateResponse,
265
+ PlatformControllerDeleteData,
266
+ PlatformControllerDeleteResponse,
192
267
  DashboardControllerGetNetWorthData,
193
268
  DashboardControllerGetNetWorthResponse,
194
269
  DashboardControllerGetAccountsData,
195
270
  DashboardControllerGetAccountsResponse,
196
271
  DashboardControllerGetCashFlowData,
197
272
  DashboardControllerGetCashFlowResponse,
198
- ReportingControllerGetPortfolioTrendsData,
199
- ReportingControllerGetPortfolioTrendsResponse,
200
- ReportingControllerGenerateSnapshotData,
201
- ReportingControllerGenerateSnapshotResponse,
202
- ReportingControllerBackfillSnapshotsData,
203
- ReportingControllerBackfillSnapshotsResponse,
204
- ApiKeysControllerResponse,
273
+ DashboardControllerGetExpensesData,
274
+ DashboardControllerGetExpensesResponse,
275
+ HoldingPnlControllerGetHoldingPnlData,
276
+ HoldingPnlControllerGetHoldingPnlResponse,
277
+ ApiKeysControllerCreateApiKeyResponse,
205
278
  AuthControllerAccessTokenLoginData,
206
279
  AuthControllerAccessTokenLoginResponse,
280
+ CacheControllerFlushCacheResponse,
207
281
  ExchangeRateControllerGetExchangeRateData,
208
282
  ExchangeRateControllerGetExchangeRateResponse,
209
283
  HealthControllerGetHealthResponse,
210
284
  HealthControllerCheckDatabaseResponse,
285
+ HealthControllerCheckOpenBbResponse,
211
286
  HealthControllerCheckRedisResponse,
212
287
  HealthControllerGetCircuitBreakersHealthResponse,
213
288
  HealthControllerResetCircuitBreakerData,
214
289
  HealthControllerResetCircuitBreakerResponse,
215
290
  HealthControllerGetMetricsResponse,
216
- HealthControllerGetHealthOfDataEnhancerData,
217
- HealthControllerGetHealthOfDataEnhancerResponse,
218
- HealthControllerCheckDataProvidersResponse,
219
- HealthControllerGetHealthOfDataProviderData,
220
- HealthControllerGetHealthOfDataProviderResponse,
221
291
  InfoControllerGetInfoResponse,
222
- LogoControllerGetLogoByDataSourceAndSymbolData,
223
- LogoControllerGetLogoByDataSourceAndSymbolResponse,
224
- LogoControllerGetLogoByUrlData,
225
- LogoControllerGetLogoByUrlResponse,
226
- MarketDataControllerGetMarketDataBySymbolData,
227
- MarketDataControllerGetMarketDataBySymbolResponse,
228
- MarketDataControllerResponse
292
+ SymbolControllerSearchData,
293
+ SymbolControllerSearchResponse,
294
+ SymbolControllerGetQuoteData,
295
+ SymbolControllerGetQuoteResponse
229
296
  } from './types.gen';
230
297
 
231
298
  export class BeanAccountsService {
@@ -263,7 +330,7 @@ export class BeanAccountsService {
263
330
  * @param data.type Filter by account type
264
331
  * @param data.status Filter by status
265
332
  * @param data.isCustom Filter by custom (user-created) accounts only
266
- * @param data.search Search term for path or i18nKey
333
+ * @param data.search Search term for account path
267
334
  * @param data.limit Maximum number of results
268
335
  * @param data.offset Number of results to skip
269
336
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -344,7 +411,7 @@ export class BeanAccountsService {
344
411
 
345
412
  /**
346
413
  * Delete account
347
- * Deletes an account (only if no transactions)
414
+ * Deletes an account (only if no active transactions; voided/superseded residual postings are cleaned up)
348
415
  * @param data The data for the request.
349
416
  * @param data.id Account UUID
350
417
  * @param data.region Region code for tenant context
@@ -363,7 +430,7 @@ export class BeanAccountsService {
363
430
  },
364
431
  errors: {
365
432
  404: 'Account not found',
366
- 409: 'Account has transactions and cannot be deleted'
433
+ 409: 'Account has active transactions and cannot be deleted'
367
434
  }
368
435
  });
369
436
  }
@@ -425,6 +492,107 @@ export class BeanAccountsService {
425
492
  }
426
493
  });
427
494
  }
495
+
496
+ /**
497
+ * Post an opening-balance transaction
498
+ * 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.
499
+ * @param data The data for the request.
500
+ * @param data.id Account UUID
501
+ * @param data.region Region code for tenant context
502
+ * @param data.requestBody
503
+ * @returns OpeningBalanceResultDto Opening-balance transaction created
504
+ * @throws ApiError
505
+ */
506
+ public static accountControllerAddOpeningBalance(
507
+ data: AccountControllerAddOpeningBalanceData
508
+ ): CancelablePromise<AccountControllerAddOpeningBalanceResponse> {
509
+ return __request(OpenAPI, {
510
+ method: 'POST',
511
+ url: '/api/v1/{region}/bean/accounts/{id}/opening-balance',
512
+ path: {
513
+ id: data.id,
514
+ region: data.region
515
+ },
516
+ body: data.requestBody,
517
+ mediaType: 'application/json',
518
+ errors: {
519
+ 404: 'Account not found',
520
+ 409: 'An opening balance already exists for this account'
521
+ }
522
+ });
523
+ }
524
+ }
525
+
526
+ export class BeanAccountStandardsService {
527
+ /**
528
+ * Get account templates
529
+ * Returns predefined account templates for a region. Supports filtering by account type and search term.
530
+ * @param data The data for the request.
531
+ * @param data.region Region code (cn, us, de)
532
+ * @param data.type Filter by account type
533
+ * @param data.search Search term for path or description
534
+ * @returns AccountStandardListResponseDto Account templates retrieved successfully
535
+ * @throws ApiError
536
+ */
537
+ public static accountStandardsControllerGetTemplates(
538
+ data: AccountStandardsControllerGetTemplatesData
539
+ ): CancelablePromise<AccountStandardsControllerGetTemplatesResponse> {
540
+ return __request(OpenAPI, {
541
+ method: 'GET',
542
+ url: '/api/v1/{region}/bean/account-standards',
543
+ path: {
544
+ region: data.region
545
+ },
546
+ query: {
547
+ type: data.type,
548
+ search: data.search
549
+ }
550
+ });
551
+ }
552
+
553
+ /**
554
+ * Get template metadata for an account path
555
+ * Returns root type for a template path.
556
+ * @param data The data for the request.
557
+ * @param data.region Region code for tenant context
558
+ * @param data.path Account path to check
559
+ * @returns TemplateMetadataResponseDto Template metadata retrieved successfully
560
+ * @throws ApiError
561
+ */
562
+ public static accountStandardsControllerGetTemplateMetadata(
563
+ data: AccountStandardsControllerGetTemplateMetadataData
564
+ ): CancelablePromise<AccountStandardsControllerGetTemplateMetadataResponse> {
565
+ return __request(OpenAPI, {
566
+ method: 'GET',
567
+ url: '/api/v1/{region}/bean/account-standards/template-metadata',
568
+ path: {
569
+ region: data.region
570
+ },
571
+ query: {
572
+ path: data.path
573
+ }
574
+ });
575
+ }
576
+
577
+ /**
578
+ * Get available regions with hierarchy
579
+ * Returns supported regions with inheritance metadata
580
+ * @param data The data for the request.
581
+ * @param data.region Region code for tenant context
582
+ * @returns RegionsMetadataResponseDto Regions metadata retrieved successfully
583
+ * @throws ApiError
584
+ */
585
+ public static accountStandardsControllerGetRegions(
586
+ data: AccountStandardsControllerGetRegionsData
587
+ ): CancelablePromise<AccountStandardsControllerGetRegionsResponse> {
588
+ return __request(OpenAPI, {
589
+ method: 'GET',
590
+ url: '/api/v1/{region}/bean/account-standards/regions',
591
+ path: {
592
+ region: data.region
593
+ }
594
+ });
595
+ }
428
596
  }
429
597
 
430
598
  export class BeanTransactionsService {
@@ -470,6 +638,7 @@ export class BeanTransactionsService {
470
638
  * @param data.status Filter by transaction status
471
639
  * @param data.search Search in narration and payee fields (max 200 chars)
472
640
  * @param data.accountId Filter by account ID (transactions with postings to this account)
641
+ * @param data.category Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
473
642
  * @returns TransactionListResponseDto Transaction list
474
643
  * @throws ApiError
475
644
  */
@@ -489,28 +658,102 @@ export class BeanTransactionsService {
489
658
  dateTo: data.dateTo,
490
659
  status: data.status,
491
660
  search: data.search,
492
- accountId: data.accountId
661
+ accountId: data.accountId,
662
+ category: data.category
493
663
  },
494
664
  errors: {
665
+ 400: 'Validation failed',
495
666
  401: 'Authentication required'
496
667
  }
497
668
  });
498
669
  }
499
670
 
500
671
  /**
672
+ * @deprecated
673
+ * Batch create transactions (DEPRECATED)
674
+ * DEPRECATED: Use POST /:region/bean/import/provider/:name/sync instead. This endpoint skips dedup, rule matching, and review branching.
501
675
  * @param data The data for the request.
502
676
  * @param data.region Region code for tenant context
503
- * @returns unknown
677
+ * @param data.requestBody
678
+ * @returns BatchTransactionResponseDto Transactions processed
504
679
  * @throws ApiError
505
680
  */
506
- public static transactionController(
507
- data: TransactionControllerData
508
- ): CancelablePromise<TransactionControllerResponse> {
681
+ public static transactionControllerCreateBatch(
682
+ data: TransactionControllerCreateBatchData
683
+ ): CancelablePromise<TransactionControllerCreateBatchResponse> {
509
684
  return __request(OpenAPI, {
510
685
  method: 'POST',
511
686
  url: '/api/v1/{region}/bean/transactions/batch',
512
687
  path: {
513
688
  region: data.region
689
+ },
690
+ body: data.requestBody,
691
+ mediaType: 'application/json',
692
+ errors: {
693
+ 400: 'Invalid input',
694
+ 401: 'Authentication required'
695
+ }
696
+ });
697
+ }
698
+
699
+ /**
700
+ * Correct (supersede) a transaction
701
+ * Atomically voids the original (SUPERSEDED) and creates a replacement through the full validation pipeline.
702
+ * @param data The data for the request.
703
+ * @param data.id Original transaction ID to correct
704
+ * @param data.region Region code for tenant context
705
+ * @param data.requestBody
706
+ * @returns TransactionDetailDto Corrected transaction created
707
+ * @throws ApiError
708
+ */
709
+ public static transactionControllerCorrect(
710
+ data: TransactionControllerCorrectData
711
+ ): CancelablePromise<TransactionControllerCorrectResponse> {
712
+ return __request(OpenAPI, {
713
+ method: 'POST',
714
+ url: '/api/v1/{region}/bean/transactions/{id}/correct',
715
+ path: {
716
+ id: data.id,
717
+ region: data.region
718
+ },
719
+ body: data.requestBody,
720
+ mediaType: 'application/json',
721
+ errors: {
722
+ 404: 'Original transaction not found',
723
+ 409: 'Original no longer ACTIVE (concurrent modification)',
724
+ 422: 'Pipeline validation failed (does not balance, invalid accounts)'
725
+ }
726
+ });
727
+ }
728
+
729
+ /**
730
+ * Suggest transaction tags
731
+ * Returns distinct tags from the user ACTIVE transactions, sorted by usage, for autocomplete. Optional q performs a case-insensitive prefix match.
732
+ * @param data The data for the request.
733
+ * @param data.region Region code for tenant context
734
+ * @param data.q Prefix match, case-insensitive (max 50 chars)
735
+ * @param data.sort usage (default) or name
736
+ * @param data.limit Max suggestions (1-100, default 10)
737
+ * @returns TagSuggestionsResponseDto Tag suggestions
738
+ * @throws ApiError
739
+ */
740
+ public static transactionControllerSuggestTags(
741
+ data: TransactionControllerSuggestTagsData
742
+ ): CancelablePromise<TransactionControllerSuggestTagsResponse> {
743
+ return __request(OpenAPI, {
744
+ method: 'GET',
745
+ url: '/api/v1/{region}/bean/transactions/tags',
746
+ path: {
747
+ region: data.region
748
+ },
749
+ query: {
750
+ q: data.q,
751
+ sort: data.sort,
752
+ limit: data.limit
753
+ },
754
+ errors: {
755
+ 400: 'Validation failed',
756
+ 401: 'Authentication required'
514
757
  }
515
758
  });
516
759
  }
@@ -572,63 +815,31 @@ export class BeanTransactionsService {
572
815
  }
573
816
 
574
817
  /**
818
+ * Void transaction
819
+ * Soft-deletes a transaction by marking it as VOIDED
575
820
  * @param data The data for the request.
821
+ * @param data.id Transaction ID
576
822
  * @param data.region Region code for tenant context
577
- * @returns void
823
+ * @returns void Transaction voided successfully
578
824
  * @throws ApiError
579
825
  */
580
- public static transactionController1(
581
- data: TransactionController1Data
582
- ): CancelablePromise<TransactionController1Response> {
826
+ public static transactionControllerDelete(
827
+ data: TransactionControllerDeleteData
828
+ ): CancelablePromise<TransactionControllerDeleteResponse> {
583
829
  return __request(OpenAPI, {
584
830
  method: 'DELETE',
585
831
  url: '/api/v1/{region}/bean/transactions/{id}',
586
832
  path: {
587
- region: data.region
588
- }
589
- });
590
- }
591
- }
592
-
593
- export class BeanAccountStandardsService {
594
- /**
595
- * Get account templates
596
- * Returns predefined account templates for a region. Supports filtering by account type and search term.
597
- * @param data The data for the request.
598
- * @param data.region Region code (cn, us, de)
599
- * @param data.type Filter by account type
600
- * @param data.search Search term for path or description
601
- * @returns AccountStandardListResponseDto Account templates retrieved successfully
602
- * @throws ApiError
603
- */
604
- public static accountStandardsControllerGetTemplates(
605
- data: AccountStandardsControllerGetTemplatesData
606
- ): CancelablePromise<AccountStandardsControllerGetTemplatesResponse> {
607
- return __request(OpenAPI, {
608
- method: 'GET',
609
- url: '/api/v1/{region}/bean/account-standards',
610
- path: {
833
+ id: data.id,
611
834
  region: data.region
612
835
  },
613
- query: {
614
- type: data.type,
615
- search: data.search
836
+ errors: {
837
+ 400: 'Transaction already voided',
838
+ 401: 'Authentication required',
839
+ 404: 'Transaction not found'
616
840
  }
617
841
  });
618
842
  }
619
-
620
- /**
621
- * Get available regions with hierarchy
622
- * Returns supported regions with inheritance metadata
623
- * @returns RegionsMetadataResponseDto Regions metadata retrieved successfully
624
- * @throws ApiError
625
- */
626
- public static accountStandardsControllerGetRegions(): CancelablePromise<AccountStandardsControllerGetRegionsResponse> {
627
- return __request(OpenAPI, {
628
- method: 'GET',
629
- url: '/api/v1/{region}/bean/account-standards/regions'
630
- });
631
- }
632
843
  }
633
844
 
634
845
  export class BeanBalancesService {
@@ -636,7 +847,8 @@ export class BeanBalancesService {
636
847
  * Query account balance
637
848
  * Calculate account balance at a specific date for a single currency
638
849
  * @param data The data for the request.
639
- * @param data.account Account name (e.g., "Assets:Bank:Checking")
850
+ * @param data.account Account name (e.g., "Assets:Checking")
851
+ * @param data.region Region code for tenant context
640
852
  * @param data.date Date to calculate balance at (ISO 8601 format)
641
853
  * @param data.currency Currency to query (e.g., "USD", "CNY")
642
854
  * @returns BalanceResponseDto Balance calculated successfully
@@ -648,6 +860,9 @@ export class BeanBalancesService {
648
860
  return __request(OpenAPI, {
649
861
  method: 'GET',
650
862
  url: '/api/v1/{region}/bean/balances',
863
+ path: {
864
+ region: data.region
865
+ },
651
866
  query: {
652
867
  account: data.account,
653
868
  date: data.date,
@@ -663,13 +878,20 @@ export class BeanBalancesService {
663
878
  /**
664
879
  * Query multi-currency account balance
665
880
  * Calculate account balances for all currencies at a specific date
881
+ * @param data The data for the request.
882
+ * @param data.region Region code for tenant context
666
883
  * @returns MultiCurrencyBalanceResponseDto Balances calculated successfully
667
884
  * @throws ApiError
668
885
  */
669
- public static balanceControllerGetMultiCurrencyBalance(): CancelablePromise<BalanceControllerGetMultiCurrencyBalanceResponse> {
886
+ public static balanceControllerGetMultiCurrencyBalance(
887
+ data: BalanceControllerGetMultiCurrencyBalanceData
888
+ ): CancelablePromise<BalanceControllerGetMultiCurrencyBalanceResponse> {
670
889
  return __request(OpenAPI, {
671
890
  method: 'GET',
672
891
  url: '/api/v1/{region}/bean/balances/multi-currency',
892
+ path: {
893
+ region: data.region
894
+ },
673
895
  errors: {
674
896
  400: 'Invalid query parameters',
675
897
  401: 'User not authenticated'
@@ -751,69 +973,94 @@ export class BeanReviewsService {
751
973
  }
752
974
 
753
975
  /**
976
+ * Resolve a review item
754
977
  * @param data The data for the request.
978
+ * @param data.id Review ID
755
979
  * @param data.region Region code for tenant context
756
- * @returns unknown
980
+ * @param data.requestBody
981
+ * @returns ResolveResultDto
757
982
  * @throws ApiError
758
983
  */
759
- public static reviewController(
760
- data: ReviewControllerData
761
- ): CancelablePromise<ReviewControllerResponse> {
984
+ public static reviewControllerResolve(
985
+ data: ReviewControllerResolveData
986
+ ): CancelablePromise<ReviewControllerResolveResponse> {
762
987
  return __request(OpenAPI, {
763
988
  method: 'POST',
764
989
  url: '/api/v1/{region}/bean/reviews/{id}/resolve',
765
990
  path: {
991
+ id: data.id,
766
992
  region: data.region
767
- }
993
+ },
994
+ body: data.requestBody,
995
+ mediaType: 'application/json'
768
996
  });
769
997
  }
770
998
 
771
999
  /**
1000
+ * Undo a resolution (within 24h)
772
1001
  * @param data The data for the request.
1002
+ * @param data.id Review ID
773
1003
  * @param data.region Region code for tenant context
774
- * @returns unknown
1004
+ * @returns UndoResultDto
775
1005
  * @throws ApiError
776
1006
  */
777
- public static reviewController1(
778
- data: ReviewController1Data
779
- ): CancelablePromise<ReviewController1Response> {
1007
+ public static reviewControllerUndo(
1008
+ data: ReviewControllerUndoData
1009
+ ): CancelablePromise<ReviewControllerUndoResponse> {
780
1010
  return __request(OpenAPI, {
781
1011
  method: 'POST',
782
1012
  url: '/api/v1/{region}/bean/reviews/{id}/undo',
783
1013
  path: {
1014
+ id: data.id,
784
1015
  region: data.region
785
1016
  }
786
1017
  });
787
1018
  }
788
1019
 
789
1020
  /**
1021
+ * Batch resolve multiple reviews
790
1022
  * @param data The data for the request.
791
1023
  * @param data.region Region code for tenant context
792
- * @returns unknown
1024
+ * @param data.requestBody Batch resolution request containing review IDs and action
1025
+ * @returns BatchResolveResultDto
793
1026
  * @throws ApiError
794
1027
  */
795
- public static reviewController2(
796
- data: ReviewController2Data
797
- ): CancelablePromise<ReviewController2Response> {
1028
+ public static reviewControllerBatchResolve(
1029
+ data: ReviewControllerBatchResolveData
1030
+ ): CancelablePromise<ReviewControllerBatchResolveResponse> {
798
1031
  return __request(OpenAPI, {
799
1032
  method: 'POST',
800
1033
  url: '/api/v1/{region}/bean/reviews/batch-resolve',
801
1034
  path: {
802
1035
  region: data.region
803
- }
1036
+ },
1037
+ body: data.requestBody,
1038
+ mediaType: 'application/json'
804
1039
  });
805
1040
  }
806
1041
  }
807
1042
 
808
1043
  export class BeanPayeesService {
809
1044
  /**
810
- * @returns unknown
1045
+ * Create a new payee
1046
+ * Creates a new payee mapping for the authenticated user. The payee name must be unique within the user's account.
1047
+ * @param data The data for the request.
1048
+ * @param data.requestBody
1049
+ * @returns PayeeResponseDto Payee created successfully
811
1050
  * @throws ApiError
812
1051
  */
813
- public static payeeController(): CancelablePromise<PayeeControllerResponse> {
1052
+ public static payeeControllerCreate(
1053
+ data: PayeeControllerCreateData
1054
+ ): CancelablePromise<PayeeControllerCreateResponse> {
814
1055
  return __request(OpenAPI, {
815
1056
  method: 'POST',
816
- url: '/api/v1/bean/payees'
1057
+ url: '/api/v1/bean/payees',
1058
+ body: data.requestBody,
1059
+ mediaType: 'application/json',
1060
+ errors: {
1061
+ 400: 'Invalid input data',
1062
+ 409: 'Payee already exists'
1063
+ }
817
1064
  });
818
1065
  }
819
1066
 
@@ -912,37 +1159,78 @@ export class BeanPayeesService {
912
1159
  }
913
1160
 
914
1161
  /**
915
- * @returns unknown
1162
+ * Update payee
1163
+ * Updates a payee mapping. The payee name cannot be changed after creation.
1164
+ * @param data The data for the request.
1165
+ * @param data.id Payee UUID
1166
+ * @param data.requestBody
1167
+ * @returns PayeeResponseDto Payee updated successfully
916
1168
  * @throws ApiError
917
1169
  */
918
- public static payeeController1(): CancelablePromise<PayeeController1Response> {
1170
+ public static payeeControllerUpdate(
1171
+ data: PayeeControllerUpdateData
1172
+ ): CancelablePromise<PayeeControllerUpdateResponse> {
919
1173
  return __request(OpenAPI, {
920
1174
  method: 'PUT',
921
- url: '/api/v1/bean/payees/{id}'
922
- });
923
- }
1175
+ url: '/api/v1/bean/payees/{id}',
1176
+ path: {
1177
+ id: data.id
1178
+ },
1179
+ body: data.requestBody,
1180
+ mediaType: 'application/json',
1181
+ errors: {
1182
+ 400: 'Invalid input data',
1183
+ 404: 'Payee not found'
1184
+ }
1185
+ });
1186
+ }
924
1187
 
925
1188
  /**
926
- * @returns void
1189
+ * Delete payee
1190
+ * Soft deletes a payee by marking it as inactive. Inactive payees will not appear in autocomplete suggestions.
1191
+ * @param data The data for the request.
1192
+ * @param data.id Payee UUID
1193
+ * @returns void Payee deleted successfully
927
1194
  * @throws ApiError
928
1195
  */
929
- public static payeeController2(): CancelablePromise<PayeeController2Response> {
1196
+ public static payeeControllerDelete(
1197
+ data: PayeeControllerDeleteData
1198
+ ): CancelablePromise<PayeeControllerDeleteResponse> {
930
1199
  return __request(OpenAPI, {
931
1200
  method: 'DELETE',
932
- url: '/api/v1/bean/payees/{id}'
1201
+ url: '/api/v1/bean/payees/{id}',
1202
+ path: {
1203
+ id: data.id
1204
+ },
1205
+ errors: {
1206
+ 404: 'Payee not found'
1207
+ }
933
1208
  });
934
1209
  }
935
1210
  }
936
1211
 
937
1212
  export class AdminPayeeProfilesService {
938
1213
  /**
939
- * @returns unknown
1214
+ * Create payee profile (Admin only)
1215
+ * Creates a new global payee profile. The canonical name must be unique (case-insensitive).
1216
+ * @param data The data for the request.
1217
+ * @param data.requestBody
1218
+ * @returns PayeeProfileResponseDto Payee profile created successfully
940
1219
  * @throws ApiError
941
1220
  */
942
- public static payeeProfileAdminController(): CancelablePromise<PayeeProfileAdminControllerResponse> {
1221
+ public static payeeProfileAdminControllerCreate(
1222
+ data: PayeeProfileAdminControllerCreateData
1223
+ ): CancelablePromise<PayeeProfileAdminControllerCreateResponse> {
943
1224
  return __request(OpenAPI, {
944
1225
  method: 'POST',
945
- url: '/api/v1/admin/payee-profiles'
1226
+ url: '/api/v1/admin/payee-profiles',
1227
+ body: data.requestBody,
1228
+ mediaType: 'application/json',
1229
+ errors: {
1230
+ 400: 'Validation failed',
1231
+ 403: 'Admin access required',
1232
+ 409: 'Payee profile already exists'
1233
+ }
946
1234
  });
947
1235
  }
948
1236
 
@@ -1004,65 +1292,130 @@ export class AdminPayeeProfilesService {
1004
1292
  }
1005
1293
 
1006
1294
  /**
1007
- * @returns unknown
1295
+ * Update payee profile (Admin only)
1296
+ * Updates an existing payee profile. The canonical name cannot be changed.
1297
+ * @param data The data for the request.
1298
+ * @param data.id Payee profile ID (UUID)
1299
+ * @param data.requestBody
1300
+ * @returns PayeeProfileResponseDto Payee profile updated successfully
1008
1301
  * @throws ApiError
1009
1302
  */
1010
- public static payeeProfileAdminController1(): CancelablePromise<PayeeProfileAdminController1Response> {
1303
+ public static payeeProfileAdminControllerUpdate(
1304
+ data: PayeeProfileAdminControllerUpdateData
1305
+ ): CancelablePromise<PayeeProfileAdminControllerUpdateResponse> {
1011
1306
  return __request(OpenAPI, {
1012
1307
  method: 'PUT',
1013
- url: '/api/v1/admin/payee-profiles/{id}'
1308
+ url: '/api/v1/admin/payee-profiles/{id}',
1309
+ path: {
1310
+ id: data.id
1311
+ },
1312
+ body: data.requestBody,
1313
+ mediaType: 'application/json',
1314
+ errors: {
1315
+ 403: 'Admin access required',
1316
+ 404: 'Payee profile not found'
1317
+ }
1014
1318
  });
1015
1319
  }
1016
1320
 
1017
1321
  /**
1018
- * @returns void
1322
+ * Soft delete payee profile (Admin only)
1323
+ * Marks a payee profile as inactive (soft delete). The profile cannot be deleted if it is referenced by user payees.
1324
+ * @param data The data for the request.
1325
+ * @param data.id Payee profile ID (UUID)
1326
+ * @returns void Payee profile deleted successfully
1019
1327
  * @throws ApiError
1020
1328
  */
1021
- public static payeeProfileAdminController2(): CancelablePromise<PayeeProfileAdminController2Response> {
1329
+ public static payeeProfileAdminControllerDelete(
1330
+ data: PayeeProfileAdminControllerDeleteData
1331
+ ): CancelablePromise<PayeeProfileAdminControllerDeleteResponse> {
1022
1332
  return __request(OpenAPI, {
1023
1333
  method: 'DELETE',
1024
- url: '/api/v1/admin/payee-profiles/{id}'
1334
+ url: '/api/v1/admin/payee-profiles/{id}',
1335
+ path: {
1336
+ id: data.id
1337
+ },
1338
+ errors: {
1339
+ 403: 'Admin access required',
1340
+ 404: 'Payee profile not found',
1341
+ 409: 'Payee profile is in use and cannot be deleted'
1342
+ }
1025
1343
  });
1026
1344
  }
1027
1345
 
1028
1346
  /**
1029
- * @returns unknown
1347
+ * Verify payee profile (Admin only)
1348
+ * Marks a payee profile as verified by setting verifiedAt to current timestamp.
1349
+ * @param data The data for the request.
1350
+ * @param data.id Payee profile ID (UUID)
1351
+ * @returns PayeeProfileResponseDto Payee profile verified successfully
1030
1352
  * @throws ApiError
1031
1353
  */
1032
- public static payeeProfileAdminController3(): CancelablePromise<PayeeProfileAdminController3Response> {
1354
+ public static payeeProfileAdminControllerVerify(
1355
+ data: PayeeProfileAdminControllerVerifyData
1356
+ ): CancelablePromise<PayeeProfileAdminControllerVerifyResponse> {
1033
1357
  return __request(OpenAPI, {
1034
1358
  method: 'POST',
1035
- url: '/api/v1/admin/payee-profiles/{id}/verify'
1359
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1360
+ path: {
1361
+ id: data.id
1362
+ },
1363
+ errors: {
1364
+ 403: 'Admin access required',
1365
+ 404: 'Payee profile not found'
1366
+ }
1036
1367
  });
1037
1368
  }
1038
1369
 
1039
1370
  /**
1040
- * @returns unknown
1371
+ * Unverify payee profile (Admin only)
1372
+ * Removes verification status by setting verifiedAt to null.
1373
+ * @param data The data for the request.
1374
+ * @param data.id Payee profile ID (UUID)
1375
+ * @returns PayeeProfileResponseDto Payee profile unverified successfully
1041
1376
  * @throws ApiError
1042
1377
  */
1043
- public static payeeProfileAdminController4(): CancelablePromise<PayeeProfileAdminController4Response> {
1378
+ public static payeeProfileAdminControllerUnverify(
1379
+ data: PayeeProfileAdminControllerUnverifyData
1380
+ ): CancelablePromise<PayeeProfileAdminControllerUnverifyResponse> {
1044
1381
  return __request(OpenAPI, {
1045
1382
  method: 'DELETE',
1046
- url: '/api/v1/admin/payee-profiles/{id}/verify'
1383
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1384
+ path: {
1385
+ id: data.id
1386
+ },
1387
+ errors: {
1388
+ 403: 'Admin access required',
1389
+ 404: 'Payee profile not found'
1390
+ }
1047
1391
  });
1048
1392
  }
1049
1393
  }
1050
1394
 
1051
1395
  export class BeanCommoditiesService {
1052
1396
  /**
1397
+ * Create a new commodity
1398
+ * Creates a new commodity definition for the authenticated user
1053
1399
  * @param data The data for the request.
1054
1400
  * @param data.region Region code for tenant context
1055
- * @returns unknown
1401
+ * @param data.requestBody
1402
+ * @returns CommodityResponseDto Commodity created successfully
1056
1403
  * @throws ApiError
1057
1404
  */
1058
- public static commodityController(
1059
- data: CommodityControllerData
1060
- ): CancelablePromise<CommodityControllerResponse> {
1405
+ public static commodityControllerCreate(
1406
+ data: CommodityControllerCreateData
1407
+ ): CancelablePromise<CommodityControllerCreateResponse> {
1061
1408
  return __request(OpenAPI, {
1062
1409
  method: 'POST',
1063
1410
  url: '/api/v1/{region}/bean/commodities',
1064
1411
  path: {
1065
1412
  region: data.region
1413
+ },
1414
+ body: data.requestBody,
1415
+ mediaType: 'application/json',
1416
+ errors: {
1417
+ 400: 'Invalid input data',
1418
+ 409: 'Commodity already exists'
1066
1419
  }
1067
1420
  });
1068
1421
  }
@@ -1119,68 +1472,92 @@ export class BeanCommoditiesService {
1119
1472
  }
1120
1473
 
1121
1474
  /**
1475
+ * Update commodity
1476
+ * Updates an existing commodity definition. Symbol cannot be changed.
1122
1477
  * @param data The data for the request.
1478
+ * @param data.symbol Commodity symbol
1123
1479
  * @param data.region Region code for tenant context
1124
- * @returns unknown
1480
+ * @param data.requestBody
1481
+ * @returns CommodityResponseDto Commodity updated successfully
1125
1482
  * @throws ApiError
1126
1483
  */
1127
- public static commodityController1(
1128
- data: CommodityController1Data
1129
- ): CancelablePromise<CommodityController1Response> {
1484
+ public static commodityControllerUpdate(
1485
+ data: CommodityControllerUpdateData
1486
+ ): CancelablePromise<CommodityControllerUpdateResponse> {
1130
1487
  return __request(OpenAPI, {
1131
1488
  method: 'PUT',
1132
1489
  url: '/api/v1/{region}/bean/commodities/{symbol}',
1133
1490
  path: {
1491
+ symbol: data.symbol,
1134
1492
  region: data.region
1493
+ },
1494
+ body: data.requestBody,
1495
+ mediaType: 'application/json',
1496
+ errors: {
1497
+ 400: 'Invalid input data',
1498
+ 404: 'Commodity not found'
1135
1499
  }
1136
1500
  });
1137
1501
  }
1138
1502
 
1139
1503
  /**
1504
+ * Delete commodity
1505
+ * Deletes a commodity definition
1140
1506
  * @param data The data for the request.
1507
+ * @param data.symbol Commodity symbol
1141
1508
  * @param data.region Region code for tenant context
1142
- * @returns void
1509
+ * @returns void Commodity deleted successfully
1143
1510
  * @throws ApiError
1144
1511
  */
1145
- public static commodityController2(
1146
- data: CommodityController2Data
1147
- ): CancelablePromise<CommodityController2Response> {
1512
+ public static commodityControllerDelete(
1513
+ data: CommodityControllerDeleteData
1514
+ ): CancelablePromise<CommodityControllerDeleteResponse> {
1148
1515
  return __request(OpenAPI, {
1149
1516
  method: 'DELETE',
1150
1517
  url: '/api/v1/{region}/bean/commodities/{symbol}',
1151
1518
  path: {
1519
+ symbol: data.symbol,
1152
1520
  region: data.region
1521
+ },
1522
+ errors: {
1523
+ 404: 'Commodity not found'
1153
1524
  }
1154
1525
  });
1155
1526
  }
1156
1527
 
1157
1528
  /**
1529
+ * Ensure commodity exists
1530
+ * Gets existing commodity or creates it with automatic initialization from OpenBB
1158
1531
  * @param data The data for the request.
1532
+ * @param data.symbol Commodity symbol
1159
1533
  * @param data.region Region code for tenant context
1160
- * @returns unknown
1534
+ * @returns CommodityResponseDto Commodity retrieved or created
1161
1535
  * @throws ApiError
1162
1536
  */
1163
- public static commodityController3(
1164
- data: CommodityController3Data
1165
- ): CancelablePromise<CommodityController3Response> {
1537
+ public static commodityControllerGetOrCreate(
1538
+ data: CommodityControllerGetOrCreateData
1539
+ ): CancelablePromise<CommodityControllerGetOrCreateResponse> {
1166
1540
  return __request(OpenAPI, {
1167
1541
  method: 'POST',
1168
1542
  url: '/api/v1/{region}/bean/commodities/{symbol}/ensure',
1169
1543
  path: {
1544
+ symbol: data.symbol,
1170
1545
  region: data.region
1171
1546
  }
1172
1547
  });
1173
1548
  }
1174
1549
 
1175
1550
  /**
1551
+ * Bulk create commodities
1552
+ * Creates multiple commodities from a list of symbols, useful for initialization
1176
1553
  * @param data The data for the request.
1177
1554
  * @param data.region Region code for tenant context
1178
- * @returns unknown
1555
+ * @returns CommodityResponseDto Commodities created successfully
1179
1556
  * @throws ApiError
1180
1557
  */
1181
- public static commodityController4(
1182
- data: CommodityController4Data
1183
- ): CancelablePromise<CommodityController4Response> {
1558
+ public static commodityControllerBulkCreate(
1559
+ data: CommodityControllerBulkCreateData
1560
+ ): CancelablePromise<CommodityControllerBulkCreateResponse> {
1184
1561
  return __request(OpenAPI, {
1185
1562
  method: 'POST',
1186
1563
  url: '/api/v1/{region}/bean/commodities/bulk',
@@ -1191,21 +1568,197 @@ export class BeanCommoditiesService {
1191
1568
  }
1192
1569
  }
1193
1570
 
1571
+ export class BeanPricesService {
1572
+ /**
1573
+ * Create a new price
1574
+ * Creates a new price entry for the authenticated user
1575
+ * @param data The data for the request.
1576
+ * @param data.region Region code for tenant context
1577
+ * @param data.requestBody
1578
+ * @returns PriceResponseDto Price created successfully
1579
+ * @throws ApiError
1580
+ */
1581
+ public static priceControllerCreate(
1582
+ data: PriceControllerCreateData
1583
+ ): CancelablePromise<PriceControllerCreateResponse> {
1584
+ return __request(OpenAPI, {
1585
+ method: 'POST',
1586
+ url: '/api/v1/{region}/bean/prices',
1587
+ path: {
1588
+ region: data.region
1589
+ },
1590
+ body: data.requestBody,
1591
+ mediaType: 'application/json',
1592
+ errors: {
1593
+ 404: 'Currency or quoteCurrency commodity not found',
1594
+ 409: 'Price already exists for this currency pair and date'
1595
+ }
1596
+ });
1597
+ }
1598
+
1599
+ /**
1600
+ * List user prices
1601
+ * Returns all price entries for the authenticated user with optional filtering
1602
+ * @param data The data for the request.
1603
+ * @param data.region Region code for tenant context
1604
+ * @param data.currency Filter by currency (e.g., BTC, AAPL, USD)
1605
+ * @param data.quoteCurrency Filter by quote currency (pricing currency, e.g., USD, CNY)
1606
+ * @param data.dateFrom Filter prices from this date (ISO 8601 format)
1607
+ * @param data.dateTo Filter prices to this date (ISO 8601 format)
1608
+ * @param data.search Search term for currency or quoteCurrency (case-insensitive partial match)
1609
+ * @param data.page Page number for pagination (default: 1)
1610
+ * @param data.limit Number of items per page (default: 20, max: 100)
1611
+ * @returns PriceListResponseDto Prices retrieved successfully
1612
+ * @throws ApiError
1613
+ */
1614
+ public static priceControllerFindAll(
1615
+ data: PriceControllerFindAllData
1616
+ ): CancelablePromise<PriceControllerFindAllResponse> {
1617
+ return __request(OpenAPI, {
1618
+ method: 'GET',
1619
+ url: '/api/v1/{region}/bean/prices',
1620
+ path: {
1621
+ region: data.region
1622
+ },
1623
+ query: {
1624
+ currency: data.currency,
1625
+ quoteCurrency: data.quoteCurrency,
1626
+ dateFrom: data.dateFrom,
1627
+ dateTo: data.dateTo,
1628
+ search: data.search,
1629
+ page: data.page,
1630
+ limit: data.limit
1631
+ }
1632
+ });
1633
+ }
1634
+
1635
+ /**
1636
+ * Get price by ID
1637
+ * Returns a single price entry by its ID
1638
+ * @param data The data for the request.
1639
+ * @param data.id Price ID
1640
+ * @param data.region Region code for tenant context
1641
+ * @returns PriceResponseDto Price retrieved successfully
1642
+ * @throws ApiError
1643
+ */
1644
+ public static priceControllerFindOne(
1645
+ data: PriceControllerFindOneData
1646
+ ): CancelablePromise<PriceControllerFindOneResponse> {
1647
+ return __request(OpenAPI, {
1648
+ method: 'GET',
1649
+ url: '/api/v1/{region}/bean/prices/{id}',
1650
+ path: {
1651
+ id: data.id,
1652
+ region: data.region
1653
+ },
1654
+ errors: {
1655
+ 404: 'Price not found'
1656
+ }
1657
+ });
1658
+ }
1659
+
1660
+ /**
1661
+ * Update a price
1662
+ * Updates an existing price entry
1663
+ * @param data The data for the request.
1664
+ * @param data.id Price ID
1665
+ * @param data.region Region code for tenant context
1666
+ * @param data.requestBody
1667
+ * @returns PriceResponseDto Price updated successfully
1668
+ * @throws ApiError
1669
+ */
1670
+ public static priceControllerUpdate(
1671
+ data: PriceControllerUpdateData
1672
+ ): CancelablePromise<PriceControllerUpdateResponse> {
1673
+ return __request(OpenAPI, {
1674
+ method: 'PUT',
1675
+ url: '/api/v1/{region}/bean/prices/{id}',
1676
+ path: {
1677
+ id: data.id,
1678
+ region: data.region
1679
+ },
1680
+ body: data.requestBody,
1681
+ mediaType: 'application/json',
1682
+ errors: {
1683
+ 404: 'Price not found',
1684
+ 409: 'Updated price conflicts with existing price'
1685
+ }
1686
+ });
1687
+ }
1688
+
1689
+ /**
1690
+ * Delete a price
1691
+ * Deletes a price entry (hard delete)
1692
+ * @param data The data for the request.
1693
+ * @param data.id Price ID
1694
+ * @param data.region Region code for tenant context
1695
+ * @returns void Price deleted successfully
1696
+ * @throws ApiError
1697
+ */
1698
+ public static priceControllerDelete(
1699
+ data: PriceControllerDeleteData
1700
+ ): CancelablePromise<PriceControllerDeleteResponse> {
1701
+ return __request(OpenAPI, {
1702
+ method: 'DELETE',
1703
+ url: '/api/v1/{region}/bean/prices/{id}',
1704
+ path: {
1705
+ id: data.id,
1706
+ region: data.region
1707
+ },
1708
+ errors: {
1709
+ 404: 'Price not found'
1710
+ }
1711
+ });
1712
+ }
1713
+
1714
+ /**
1715
+ * Bulk create prices
1716
+ * Creates multiple price entries at once (skips duplicates)
1717
+ * @param data The data for the request.
1718
+ * @param data.region Region code for tenant context
1719
+ * @param data.requestBody
1720
+ * @returns PriceResponseDto Prices created successfully
1721
+ * @throws ApiError
1722
+ */
1723
+ public static priceControllerBulkCreate(
1724
+ data: PriceControllerBulkCreateData
1725
+ ): CancelablePromise<PriceControllerBulkCreateResponse> {
1726
+ return __request(OpenAPI, {
1727
+ method: 'POST',
1728
+ url: '/api/v1/{region}/bean/prices/bulk',
1729
+ path: {
1730
+ region: data.region
1731
+ },
1732
+ body: data.requestBody,
1733
+ mediaType: 'application/json'
1734
+ });
1735
+ }
1736
+ }
1737
+
1194
1738
  export class RecurringRulesService {
1195
1739
  /**
1740
+ * Create a new recurring rule
1741
+ * Creates a new recurring transaction rule for the authenticated user
1196
1742
  * @param data The data for the request.
1197
1743
  * @param data.region Region code for tenant context
1198
- * @returns unknown
1744
+ * @param data.requestBody
1745
+ * @returns RecurringRuleResponseDto Rule created successfully
1199
1746
  * @throws ApiError
1200
1747
  */
1201
- public static recurringRuleController(
1202
- data: RecurringRuleControllerData
1203
- ): CancelablePromise<RecurringRuleControllerResponse> {
1748
+ public static recurringRuleControllerCreate(
1749
+ data: RecurringRuleControllerCreateData
1750
+ ): CancelablePromise<RecurringRuleControllerCreateResponse> {
1204
1751
  return __request(OpenAPI, {
1205
1752
  method: 'POST',
1206
1753
  url: '/api/v1/{region}/bean/recurring-rules',
1207
1754
  path: {
1208
1755
  region: data.region
1756
+ },
1757
+ body: data.requestBody,
1758
+ mediaType: 'application/json',
1759
+ errors: {
1760
+ 400: 'Invalid input data (e.g., autoCreate without accounts)',
1761
+ 409: 'Rule with same name already exists'
1209
1762
  }
1210
1763
  });
1211
1764
  }
@@ -1239,19 +1792,30 @@ export class RecurringRulesService {
1239
1792
  }
1240
1793
 
1241
1794
  /**
1795
+ * Create recurring rule from transaction
1796
+ * Auto-creates a recurring rule using transaction data. User only confirms frequency.
1242
1797
  * @param data The data for the request.
1798
+ * @param data.transactionId Source transaction ID
1243
1799
  * @param data.region Region code for tenant context
1244
- * @returns unknown
1800
+ * @param data.requestBody
1801
+ * @returns RecurringRuleResponseDto Rule created successfully
1245
1802
  * @throws ApiError
1246
1803
  */
1247
- public static recurringRuleController1(
1248
- data: RecurringRuleController1Data
1249
- ): CancelablePromise<RecurringRuleController1Response> {
1804
+ public static recurringRuleControllerCreateFromTransaction(
1805
+ data: RecurringRuleControllerCreateFromTransactionData
1806
+ ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
1250
1807
  return __request(OpenAPI, {
1251
1808
  method: 'POST',
1252
1809
  url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
1253
1810
  path: {
1811
+ transactionId: data.transactionId,
1254
1812
  region: data.region
1813
+ },
1814
+ body: data.requestBody,
1815
+ mediaType: 'application/json',
1816
+ errors: {
1817
+ 404: 'Transaction not found',
1818
+ 409: 'Rule with same name already exists or transaction already linked'
1255
1819
  }
1256
1820
  });
1257
1821
  }
@@ -1282,37 +1846,55 @@ export class RecurringRulesService {
1282
1846
  }
1283
1847
 
1284
1848
  /**
1849
+ * Update recurring rule
1850
+ * Updates an existing recurring rule
1285
1851
  * @param data The data for the request.
1852
+ * @param data.id Rule ID
1286
1853
  * @param data.region Region code for tenant context
1287
- * @returns unknown
1854
+ * @param data.requestBody
1855
+ * @returns RecurringRuleResponseDto Rule updated successfully
1288
1856
  * @throws ApiError
1289
1857
  */
1290
- public static recurringRuleController2(
1291
- data: RecurringRuleController2Data
1292
- ): CancelablePromise<RecurringRuleController2Response> {
1858
+ public static recurringRuleControllerUpdate(
1859
+ data: RecurringRuleControllerUpdateData
1860
+ ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
1293
1861
  return __request(OpenAPI, {
1294
1862
  method: 'PATCH',
1295
1863
  url: '/api/v1/{region}/bean/recurring-rules/{id}',
1296
1864
  path: {
1865
+ id: data.id,
1297
1866
  region: data.region
1867
+ },
1868
+ body: data.requestBody,
1869
+ mediaType: 'application/json',
1870
+ errors: {
1871
+ 400: 'Invalid input data',
1872
+ 404: 'Rule not found'
1298
1873
  }
1299
1874
  });
1300
1875
  }
1301
1876
 
1302
1877
  /**
1878
+ * Delete recurring rule
1879
+ * Soft deletes a recurring rule (sets isActive to false)
1303
1880
  * @param data The data for the request.
1881
+ * @param data.id Rule ID
1304
1882
  * @param data.region Region code for tenant context
1305
- * @returns void
1883
+ * @returns void Rule deleted successfully
1306
1884
  * @throws ApiError
1307
1885
  */
1308
- public static recurringRuleController3(
1309
- data: RecurringRuleController3Data
1310
- ): CancelablePromise<RecurringRuleController3Response> {
1886
+ public static recurringRuleControllerDelete(
1887
+ data: RecurringRuleControllerDeleteData
1888
+ ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
1311
1889
  return __request(OpenAPI, {
1312
1890
  method: 'DELETE',
1313
1891
  url: '/api/v1/{region}/bean/recurring-rules/{id}',
1314
1892
  path: {
1893
+ id: data.id,
1315
1894
  region: data.region
1895
+ },
1896
+ errors: {
1897
+ 404: 'Rule not found'
1316
1898
  }
1317
1899
  });
1318
1900
  }
@@ -1420,113 +2002,576 @@ export class ExpectedTransactionsService {
1420
2002
  }
1421
2003
 
1422
2004
  /**
2005
+ * Skip expected transaction
2006
+ * Marks an expected transaction as skipped (PENDING -> SKIPPED)
1423
2007
  * @param data The data for the request.
2008
+ * @param data.id Expected transaction ID
1424
2009
  * @param data.region Region code for tenant context
1425
- * @returns unknown
2010
+ * @returns ExpectedTransactionResponseDto Expected transaction skipped successfully
1426
2011
  * @throws ApiError
1427
2012
  */
1428
- public static expectedTransactionController(
1429
- data: ExpectedTransactionControllerData
1430
- ): CancelablePromise<ExpectedTransactionControllerResponse> {
2013
+ public static expectedTransactionControllerSkip(
2014
+ data: ExpectedTransactionControllerSkipData
2015
+ ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
1431
2016
  return __request(OpenAPI, {
1432
2017
  method: 'POST',
1433
2018
  url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
1434
2019
  path: {
2020
+ id: data.id,
1435
2021
  region: data.region
2022
+ },
2023
+ errors: {
2024
+ 400: 'Cannot skip - not in PENDING status',
2025
+ 404: 'Expected transaction not found'
1436
2026
  }
1437
2027
  });
1438
2028
  }
1439
2029
 
1440
2030
  /**
2031
+ * Undo skip
2032
+ * Reverses a skip operation (SKIPPED -> PENDING)
1441
2033
  * @param data The data for the request.
2034
+ * @param data.id Expected transaction ID
1442
2035
  * @param data.region Region code for tenant context
1443
- * @returns unknown
2036
+ * @returns ExpectedTransactionResponseDto Skip undone successfully
1444
2037
  * @throws ApiError
1445
2038
  */
1446
- public static expectedTransactionController1(
1447
- data: ExpectedTransactionController1Data
1448
- ): CancelablePromise<ExpectedTransactionController1Response> {
2039
+ public static expectedTransactionControllerUndoSkip(
2040
+ data: ExpectedTransactionControllerUndoSkipData
2041
+ ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
1449
2042
  return __request(OpenAPI, {
1450
2043
  method: 'DELETE',
1451
2044
  url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
1452
2045
  path: {
2046
+ id: data.id,
1453
2047
  region: data.region
2048
+ },
2049
+ errors: {
2050
+ 400: 'Cannot undo - not in SKIPPED status',
2051
+ 404: 'Expected transaction not found'
1454
2052
  }
1455
2053
  });
1456
2054
  }
1457
2055
 
1458
2056
  /**
2057
+ * Confirm transaction match
2058
+ * Manually matches an expected transaction with an actual transaction
1459
2059
  * @param data The data for the request.
2060
+ * @param data.id Expected transaction ID
1460
2061
  * @param data.region Region code for tenant context
1461
- * @returns unknown
2062
+ * @param data.requestBody
2063
+ * @returns unknown Match confirmed successfully
1462
2064
  * @throws ApiError
1463
2065
  */
1464
- public static expectedTransactionController2(
1465
- data: ExpectedTransactionController2Data
1466
- ): CancelablePromise<ExpectedTransactionController2Response> {
2066
+ public static expectedTransactionControllerConfirmMatch(
2067
+ data: ExpectedTransactionControllerConfirmMatchData
2068
+ ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
1467
2069
  return __request(OpenAPI, {
1468
2070
  method: 'POST',
1469
2071
  url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
1470
2072
  path: {
2073
+ id: data.id,
1471
2074
  region: data.region
2075
+ },
2076
+ body: data.requestBody,
2077
+ mediaType: 'application/json',
2078
+ errors: {
2079
+ 400: 'Cannot match - not in PENDING status',
2080
+ 404: 'Expected or actual transaction not found',
2081
+ 409: 'Actual transaction already matched to another rule'
1472
2082
  }
1473
2083
  });
1474
2084
  }
1475
2085
 
1476
2086
  /**
2087
+ * Unmatch transaction
2088
+ * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
1477
2089
  * @param data The data for the request.
2090
+ * @param data.id Expected transaction ID
1478
2091
  * @param data.region Region code for tenant context
1479
- * @returns unknown
2092
+ * @returns unknown Match removed successfully
1480
2093
  * @throws ApiError
1481
2094
  */
1482
- public static expectedTransactionController3(
1483
- data: ExpectedTransactionController3Data
1484
- ): CancelablePromise<ExpectedTransactionController3Response> {
2095
+ public static expectedTransactionControllerUnmatch(
2096
+ data: ExpectedTransactionControllerUnmatchData
2097
+ ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
1485
2098
  return __request(OpenAPI, {
1486
2099
  method: 'DELETE',
1487
2100
  url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
1488
2101
  path: {
2102
+ id: data.id,
1489
2103
  region: data.region
2104
+ },
2105
+ errors: {
2106
+ 400: 'Cannot unmatch - not in COMPLETED status',
2107
+ 404: 'Expected transaction not found'
1490
2108
  }
1491
2109
  });
1492
2110
  }
1493
2111
 
1494
2112
  /**
2113
+ * Enter Now
2114
+ * Creates an actual transaction for an expected transaction (YNAB-style Enter Now)
1495
2115
  * @param data The data for the request.
2116
+ * @param data.id Expected transaction ID
1496
2117
  * @param data.region Region code for tenant context
1497
- * @returns unknown
2118
+ * @param data.requestBody
2119
+ * @returns unknown Transaction created successfully
2120
+ * @throws ApiError
2121
+ */
2122
+ public static expectedTransactionControllerEnterNow(
2123
+ data: ExpectedTransactionControllerEnterNowData
2124
+ ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
2125
+ return __request(OpenAPI, {
2126
+ method: 'POST',
2127
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
2128
+ path: {
2129
+ id: data.id,
2130
+ region: data.region
2131
+ },
2132
+ body: data.requestBody,
2133
+ mediaType: 'application/json',
2134
+ errors: {
2135
+ 400: 'Cannot enter - not in PENDING status or missing accounts',
2136
+ 404: 'Expected transaction or accounts not found'
2137
+ }
2138
+ });
2139
+ }
2140
+ }
2141
+
2142
+ export class RecurringForecastService {
2143
+ /**
2144
+ * Get cash flow forecast
2145
+ * Returns predicted outflows for the next N months based on active recurring rules
2146
+ * @param data The data for the request.
2147
+ * @param data.region Region code for tenant context
2148
+ * @param data.months Number of months to forecast (1-12, default 3)
2149
+ * @returns ForecastResponseDto Forecast retrieved successfully
2150
+ * @throws ApiError
2151
+ */
2152
+ public static forecastControllerGetForecast(
2153
+ data: ForecastControllerGetForecastData
2154
+ ): CancelablePromise<ForecastControllerGetForecastResponse> {
2155
+ return __request(OpenAPI, {
2156
+ method: 'GET',
2157
+ url: '/api/v1/{region}/bean/recurring/forecast',
2158
+ path: {
2159
+ region: data.region
2160
+ },
2161
+ query: {
2162
+ months: data.months
2163
+ }
2164
+ });
2165
+ }
2166
+ }
2167
+
2168
+ export class ReportingService {
2169
+ /**
2170
+ * Get portfolio value trends
2171
+ *
2172
+ * Returns time series data of portfolio net worth.
2173
+ *
2174
+ * **Multi-currency Support:**
2175
+ * - `series[].byCurrency` - Currency breakdown for each data point
2176
+ * - `byCurrency` - Separate time series grouped by currency
2177
+ * - `warnings` - Exchange rate warnings if conversion failed
2178
+ *
2179
+ * **Parameters:**
2180
+ * - `period`: Time period (1m, 3m, 6m, 1y)
2181
+ * - `granularity`: Data granularity (day, week, month)
2182
+ *
2183
+ * @param data The data for the request.
2184
+ * @param data.region Region code for tenant context
2185
+ * @param data.period Time period
2186
+ * @param data.granularity Data granularity
2187
+ * @returns PortfolioTrendsResponseDto Trends retrieved successfully
2188
+ * @throws ApiError
2189
+ */
2190
+ public static reportingControllerGetPortfolioTrends(
2191
+ data: ReportingControllerGetPortfolioTrendsData
2192
+ ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
2193
+ return __request(OpenAPI, {
2194
+ method: 'GET',
2195
+ url: '/api/v1/{region}/reporting/portfolio/trends',
2196
+ path: {
2197
+ region: data.region
2198
+ },
2199
+ query: {
2200
+ period: data.period,
2201
+ granularity: data.granularity
2202
+ },
2203
+ errors: {
2204
+ 401: 'User not authenticated'
2205
+ }
2206
+ });
2207
+ }
2208
+
2209
+ /**
2210
+ * Get cash-flow trends
2211
+ *
2212
+ * Monthly income / expense / netSavings over a fixed N-month window
2213
+ * (current month + N−1 prior). Missing months are zero-filled (flow metric).
2214
+ *
2215
+ * **Parameters:**
2216
+ * - `period`: 1m | 3m | 6m | 1y (default 6m)
2217
+ * - `granularity`: accepted for API symmetry; v1 returns month buckets
2218
+ *
2219
+ * @param data The data for the request.
2220
+ * @param data.region Region code for tenant context
2221
+ * @param data.period Time period
2222
+ * @param data.granularity Data granularity (accepted for API symmetry; v1 returns month buckets)
2223
+ * @returns CashFlowTrendsResponseDto Cash-flow trends retrieved successfully
2224
+ * @throws ApiError
2225
+ */
2226
+ public static reportingControllerGetCashFlowTrends(
2227
+ data: ReportingControllerGetCashFlowTrendsData
2228
+ ): CancelablePromise<ReportingControllerGetCashFlowTrendsResponse> {
2229
+ return __request(OpenAPI, {
2230
+ method: 'GET',
2231
+ url: '/api/v1/{region}/reporting/cash-flow/trends',
2232
+ path: {
2233
+ region: data.region
2234
+ },
2235
+ query: {
2236
+ period: data.period,
2237
+ granularity: data.granularity
2238
+ },
2239
+ errors: {
2240
+ 401: 'User not authenticated'
2241
+ }
2242
+ });
2243
+ }
2244
+
2245
+ /**
2246
+ * Generate portfolio snapshot
2247
+ *
2248
+ * Manually generate a portfolio snapshot for a specific date.
2249
+ *
2250
+ * **Multi-currency Support:**
2251
+ * - Fetches balances grouped by currency
2252
+ * - Uses user's baseCurrency setting for conversion
2253
+ * - Stores exchange rates and warnings
2254
+ *
2255
+ * **Use Cases:**
2256
+ * - Testing snapshot generation
2257
+ * - Force regeneration after data correction
2258
+ * - Initial setup for new users
2259
+ *
2260
+ * @param data The data for the request.
2261
+ * @param data.region Region code for tenant context
2262
+ * @param data.requestBody Optional date (defaults to today)
2263
+ * @returns GenerateSnapshotResponse Snapshot generated successfully
2264
+ * @throws ApiError
2265
+ */
2266
+ public static reportingControllerGenerateSnapshot(
2267
+ data: ReportingControllerGenerateSnapshotData
2268
+ ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
2269
+ return __request(OpenAPI, {
2270
+ method: 'POST',
2271
+ url: '/api/v1/{region}/reporting/snapshots/generate',
2272
+ path: {
2273
+ region: data.region
2274
+ },
2275
+ body: data.requestBody,
2276
+ mediaType: 'application/json',
2277
+ errors: {
2278
+ 400: 'Invalid date format',
2279
+ 401: 'User not authenticated'
2280
+ }
2281
+ });
2282
+ }
2283
+
2284
+ /**
2285
+ * Backfill portfolio snapshots
2286
+ *
2287
+ * Generate snapshots for a date range (historical data backfill).
2288
+ *
2289
+ * **Multi-currency Support:**
2290
+ * - Each snapshot includes multi-currency data
2291
+ * - Uses exchange rates available at generation time
2292
+ * - Warnings stored for missing exchange rates
2293
+ *
2294
+ * **Best Practices:**
2295
+ * - Use for initial setup after account configuration
2296
+ * - Run during low-traffic periods for large date ranges
2297
+ * - Existing snapshots are skipped (not regenerated)
2298
+ *
2299
+ * @param data The data for the request.
2300
+ * @param data.region Region code for tenant context
2301
+ * @param data.requestBody
2302
+ * @returns BackfillSnapshotsResponse Backfill completed successfully
2303
+ * @throws ApiError
2304
+ */
2305
+ public static reportingControllerBackfillSnapshots(
2306
+ data: ReportingControllerBackfillSnapshotsData
2307
+ ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
2308
+ return __request(OpenAPI, {
2309
+ method: 'POST',
2310
+ url: '/api/v1/{region}/reporting/snapshots/backfill',
2311
+ path: {
2312
+ region: data.region
2313
+ },
2314
+ body: data.requestBody,
2315
+ mediaType: 'application/json',
2316
+ errors: {
2317
+ 400: 'Invalid date format or range',
2318
+ 401: 'User not authenticated',
2319
+ 409: 'Backfill already in progress for this user'
2320
+ }
2321
+ });
2322
+ }
2323
+ }
2324
+
2325
+ export class UsersService {
2326
+ /**
2327
+ * Delete own user account
2328
+ * @param data The data for the request.
2329
+ * @param data.requestBody
2330
+ * @returns void User deleted successfully
2331
+ * @throws ApiError
2332
+ */
2333
+ public static userControllerDeleteOwnUser(
2334
+ data: UserControllerDeleteOwnUserData
2335
+ ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
2336
+ return __request(OpenAPI, {
2337
+ method: 'DELETE',
2338
+ url: '/api/v1/users',
2339
+ body: data.requestBody,
2340
+ mediaType: 'application/json',
2341
+ errors: {
2342
+ 403: 'Invalid access token'
2343
+ }
2344
+ });
2345
+ }
2346
+
2347
+ /**
2348
+ * Get current authenticated user
2349
+ * @param data The data for the request.
2350
+ * @param data.acceptLanguage
2351
+ * @returns unknown User retrieved successfully
2352
+ * @throws ApiError
2353
+ */
2354
+ public static userControllerGetUser(
2355
+ data: UserControllerGetUserData
2356
+ ): CancelablePromise<UserControllerGetUserResponse> {
2357
+ return __request(OpenAPI, {
2358
+ method: 'GET',
2359
+ url: '/api/v1/users',
2360
+ headers: {
2361
+ 'accept-language': data.acceptLanguage
2362
+ }
2363
+ });
2364
+ }
2365
+
2366
+ /**
2367
+ * Sign up new user
2368
+ * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
2369
+ * @param data The data for the request.
2370
+ * @param data.requestBody
2371
+ * @returns SignupResponseDto User created successfully
2372
+ * @throws ApiError
2373
+ */
2374
+ public static userControllerSignupUser(
2375
+ data: UserControllerSignupUserData
2376
+ ): CancelablePromise<UserControllerSignupUserResponse> {
2377
+ return __request(OpenAPI, {
2378
+ method: 'POST',
2379
+ url: '/api/v1/users',
2380
+ body: data.requestBody,
2381
+ mediaType: 'application/json',
2382
+ errors: {
2383
+ 400: 'Invalid Turnstile token (when Turnstile is enabled)',
2384
+ 403: 'User signup is disabled'
2385
+ }
2386
+ });
2387
+ }
2388
+
2389
+ /**
2390
+ * Delete user by ID (admin only)
2391
+ * @param data The data for the request.
2392
+ * @param data.id User ID to delete
2393
+ * @returns void User deleted successfully
2394
+ * @throws ApiError
2395
+ */
2396
+ public static userControllerDeleteUser(
2397
+ data: UserControllerDeleteUserData
2398
+ ): CancelablePromise<UserControllerDeleteUserResponse> {
2399
+ return __request(OpenAPI, {
2400
+ method: 'DELETE',
2401
+ url: '/api/v1/users/{id}',
2402
+ path: {
2403
+ id: data.id
2404
+ },
2405
+ errors: {
2406
+ 403: 'Cannot delete own account or insufficient permissions'
2407
+ }
2408
+ });
2409
+ }
2410
+
2411
+ /**
2412
+ * Get user info by user ID
2413
+ * @param data The data for the request.
2414
+ * @param data.id User ID
2415
+ * @returns unknown User info retrieved successfully
2416
+ * @throws ApiError
2417
+ */
2418
+ public static userControllerGetUserInfo(
2419
+ data: UserControllerGetUserInfoData
2420
+ ): CancelablePromise<UserControllerGetUserInfoResponse> {
2421
+ return __request(OpenAPI, {
2422
+ method: 'GET',
2423
+ url: '/api/v1/users/{id}/info',
2424
+ path: {
2425
+ id: data.id
2426
+ },
2427
+ errors: {
2428
+ 403: 'Cannot access other user info without admin permission'
2429
+ }
2430
+ });
2431
+ }
2432
+
2433
+ /**
2434
+ * Update user settings
2435
+ * @param data The data for the request.
2436
+ * @param data.requestBody
2437
+ * @returns unknown Settings updated successfully
2438
+ * @throws ApiError
2439
+ */
2440
+ public static userControllerUpdateUserSetting(
2441
+ data: UserControllerUpdateUserSettingData
2442
+ ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
2443
+ return __request(OpenAPI, {
2444
+ method: 'PUT',
2445
+ url: '/api/v1/users/setting',
2446
+ body: data.requestBody,
2447
+ mediaType: 'application/json',
2448
+ errors: {
2449
+ 403: 'Insufficient permissions'
2450
+ }
2451
+ });
2452
+ }
2453
+
2454
+ /**
2455
+ * Get all user settings paginated (admin only)
2456
+ * @param data The data for the request.
2457
+ * @param data.pageNo Page number
2458
+ * @param data.pageSize Page size
2459
+ * @returns unknown Settings list retrieved successfully
1498
2460
  * @throws ApiError
1499
2461
  */
1500
- public static expectedTransactionController4(
1501
- data: ExpectedTransactionController4Data
1502
- ): CancelablePromise<ExpectedTransactionController4Response> {
2462
+ public static userControllerGetAllUserSettingsByPage(
2463
+ data: UserControllerGetAllUserSettingsByPageData
2464
+ ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
1503
2465
  return __request(OpenAPI, {
1504
- method: 'POST',
1505
- url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
1506
- path: {
1507
- region: data.region
2466
+ method: 'GET',
2467
+ url: '/api/v1/users/settings-by-page',
2468
+ query: {
2469
+ pageNo: data.pageNo,
2470
+ pageSize: data.pageSize
1508
2471
  }
1509
2472
  });
1510
2473
  }
2474
+
2475
+ /**
2476
+ * Get asset and liability summary for current user
2477
+ * @returns unknown Summary retrieved successfully
2478
+ * @throws ApiError
2479
+ */
2480
+ public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
2481
+ return __request(OpenAPI, {
2482
+ method: 'GET',
2483
+ url: '/api/v1/users/asset-liability-summary'
2484
+ });
2485
+ }
1511
2486
  }
1512
2487
 
1513
- export class RecurringForecastService {
2488
+ export class PropertiesService {
1514
2489
  /**
1515
- * Get cash flow forecast
1516
- * Returns predicted outflows for the next N months based on active recurring rules
2490
+ * Get all system properties
2491
+ * @returns unknown Properties retrieved successfully
2492
+ * @throws ApiError
2493
+ */
2494
+ public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
2495
+ return __request(OpenAPI, {
2496
+ method: 'GET',
2497
+ url: '/api/v1/admin/properties',
2498
+ errors: {
2499
+ 401: 'Unauthorized',
2500
+ 403: 'Forbidden - insufficient permissions'
2501
+ }
2502
+ });
2503
+ }
2504
+
2505
+ /**
2506
+ * Get property by key
1517
2507
  * @param data The data for the request.
1518
- * @param data.months Number of months to forecast (1-12, default 3)
1519
- * @returns ForecastResponseDto Forecast retrieved successfully
2508
+ * @param data.key Property key
2509
+ * @returns unknown Property retrieved successfully
1520
2510
  * @throws ApiError
1521
2511
  */
1522
- public static forecastControllerGetForecast(
1523
- data: ForecastControllerGetForecastData = {}
1524
- ): CancelablePromise<ForecastControllerGetForecastResponse> {
2512
+ public static propertyControllerGetByKey(
2513
+ data: PropertyControllerGetByKeyData
2514
+ ): CancelablePromise<PropertyControllerGetByKeyResponse> {
1525
2515
  return __request(OpenAPI, {
1526
2516
  method: 'GET',
1527
- url: '/api/v1/{region}/bean/recurring/forecast',
1528
- query: {
1529
- months: data.months
2517
+ url: '/api/v1/admin/properties/{key}',
2518
+ path: {
2519
+ key: data.key
2520
+ },
2521
+ errors: {
2522
+ 401: 'Unauthorized',
2523
+ 403: 'Forbidden - insufficient permissions',
2524
+ 404: 'Property not found'
2525
+ }
2526
+ });
2527
+ }
2528
+
2529
+ /**
2530
+ * Update a system property
2531
+ * @param data The data for the request.
2532
+ * @param data.key Property key
2533
+ * @param data.requestBody
2534
+ * @returns unknown Property updated successfully
2535
+ * @throws ApiError
2536
+ */
2537
+ public static propertyControllerUpdate(
2538
+ data: PropertyControllerUpdateData
2539
+ ): CancelablePromise<PropertyControllerUpdateResponse> {
2540
+ return __request(OpenAPI, {
2541
+ method: 'PUT',
2542
+ url: '/api/v1/admin/properties/{key}',
2543
+ path: {
2544
+ key: data.key
2545
+ },
2546
+ body: data.requestBody,
2547
+ mediaType: 'application/json',
2548
+ errors: {
2549
+ 401: 'Unauthorized',
2550
+ 403: 'Forbidden - insufficient permissions'
2551
+ }
2552
+ });
2553
+ }
2554
+
2555
+ /**
2556
+ * Delete a system property
2557
+ * @param data The data for the request.
2558
+ * @param data.key Property key
2559
+ * @returns void Property deleted successfully
2560
+ * @throws ApiError
2561
+ */
2562
+ public static propertyControllerDelete(
2563
+ data: PropertyControllerDeleteData
2564
+ ): CancelablePromise<PropertyControllerDeleteResponse> {
2565
+ return __request(OpenAPI, {
2566
+ method: 'DELETE',
2567
+ url: '/api/v1/admin/properties/{key}',
2568
+ path: {
2569
+ key: data.key
2570
+ },
2571
+ errors: {
2572
+ 401: 'Unauthorized',
2573
+ 403: 'Forbidden - insufficient permissions',
2574
+ 404: 'Property not found'
1530
2575
  }
1531
2576
  });
1532
2577
  }
@@ -1534,19 +2579,29 @@ export class RecurringForecastService {
1534
2579
 
1535
2580
  export class BeanTransactionRulesService {
1536
2581
  /**
2582
+ * Create a new transaction rule (or upsert if upsertByPayee=true)
2583
+ * Creates a new rule. If upsertByPayee=true, updates existing rule matching payeeKeywords[0] instead of creating duplicate.
1537
2584
  * @param data The data for the request.
1538
2585
  * @param data.region Region code for tenant context
1539
- * @returns unknown
2586
+ * @param data.requestBody
2587
+ * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
1540
2588
  * @throws ApiError
1541
2589
  */
1542
- public static transactionRuleController(
1543
- data: TransactionRuleControllerData
1544
- ): CancelablePromise<TransactionRuleControllerResponse> {
2590
+ public static transactionRuleControllerCreate(
2591
+ data: TransactionRuleControllerCreateData
2592
+ ): CancelablePromise<TransactionRuleControllerCreateResponse> {
1545
2593
  return __request(OpenAPI, {
1546
2594
  method: 'POST',
1547
2595
  url: '/api/v1/{region}/bean/transaction-rules',
1548
2596
  path: {
1549
2597
  region: data.region
2598
+ },
2599
+ body: data.requestBody,
2600
+ mediaType: 'application/json',
2601
+ errors: {
2602
+ 400: 'Validation failed',
2603
+ 401: 'Unauthorized',
2604
+ 409: 'Resource conflict - another process is updating this rule'
1550
2605
  }
1551
2606
  });
1552
2607
  }
@@ -1605,25 +2660,34 @@ export class BeanTransactionRulesService {
1605
2660
  body: data.requestBody,
1606
2661
  mediaType: 'application/json',
1607
2662
  errors: {
2663
+ 400: 'Validation failed',
1608
2664
  401: 'Unauthorized'
1609
2665
  }
1610
2666
  });
1611
2667
  }
1612
2668
 
1613
2669
  /**
2670
+ * Bulk create transaction rules
1614
2671
  * @param data The data for the request.
1615
2672
  * @param data.region Region code for tenant context
1616
- * @returns unknown
2673
+ * @param data.requestBody
2674
+ * @returns BulkCreateRulesResponseDto Bulk create completed
1617
2675
  * @throws ApiError
1618
2676
  */
1619
- public static transactionRuleController1(
1620
- data: TransactionRuleController1Data
1621
- ): CancelablePromise<TransactionRuleController1Response> {
2677
+ public static transactionRuleControllerBulkCreate(
2678
+ data: TransactionRuleControllerBulkCreateData
2679
+ ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
1622
2680
  return __request(OpenAPI, {
1623
2681
  method: 'POST',
1624
2682
  url: '/api/v1/{region}/bean/transaction-rules/bulk',
1625
2683
  path: {
1626
2684
  region: data.region
2685
+ },
2686
+ body: data.requestBody,
2687
+ mediaType: 'application/json',
2688
+ errors: {
2689
+ 400: 'Invalid bulk create data',
2690
+ 401: 'Unauthorized'
1627
2691
  }
1628
2692
  });
1629
2693
  }
@@ -1704,37 +2768,59 @@ export class BeanTransactionRulesService {
1704
2768
  }
1705
2769
 
1706
2770
  /**
2771
+ * Update a transaction rule
1707
2772
  * @param data The data for the request.
2773
+ * @param data.ruleId Rule ID to update
1708
2774
  * @param data.region Region code for tenant context
1709
- * @returns unknown
2775
+ * @param data.requestBody
2776
+ * @returns TransactionRuleResponseDto Rule updated successfully
1710
2777
  * @throws ApiError
1711
2778
  */
1712
- public static transactionRuleController2(
1713
- data: TransactionRuleController2Data
1714
- ): CancelablePromise<TransactionRuleController2Response> {
2779
+ public static transactionRuleControllerUpdate(
2780
+ data: TransactionRuleControllerUpdateData
2781
+ ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
1715
2782
  return __request(OpenAPI, {
1716
2783
  method: 'PUT',
1717
2784
  url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1718
2785
  path: {
2786
+ ruleId: data.ruleId,
1719
2787
  region: data.region
2788
+ },
2789
+ body: data.requestBody,
2790
+ mediaType: 'application/json',
2791
+ errors: {
2792
+ 400: 'Validation failed',
2793
+ 401: 'Unauthorized',
2794
+ 403: 'Forbidden - not owner of rule',
2795
+ 404: 'Rule not found',
2796
+ 409: 'Resource conflict - rule is being modified by another process'
1720
2797
  }
1721
2798
  });
1722
2799
  }
1723
2800
 
1724
2801
  /**
2802
+ * Delete a transaction rule
1725
2803
  * @param data The data for the request.
2804
+ * @param data.ruleId Rule ID to delete
1726
2805
  * @param data.region Region code for tenant context
1727
- * @returns void
2806
+ * @returns void Rule deleted successfully
1728
2807
  * @throws ApiError
1729
2808
  */
1730
- public static transactionRuleController3(
1731
- data: TransactionRuleController3Data
1732
- ): CancelablePromise<TransactionRuleController3Response> {
2809
+ public static transactionRuleControllerDelete(
2810
+ data: TransactionRuleControllerDeleteData
2811
+ ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
1733
2812
  return __request(OpenAPI, {
1734
2813
  method: 'DELETE',
1735
2814
  url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1736
2815
  path: {
2816
+ ruleId: data.ruleId,
1737
2817
  region: data.region
2818
+ },
2819
+ errors: {
2820
+ 401: 'Unauthorized',
2821
+ 403: 'Forbidden - not owner of rule',
2822
+ 404: 'Rule not found',
2823
+ 409: 'Resource conflict - rule is being modified by another process'
1738
2824
  }
1739
2825
  });
1740
2826
  }
@@ -1769,229 +2855,325 @@ export class BeanTransactionRulesService {
1769
2855
  }
1770
2856
  }
1771
2857
 
1772
- export class UsersService {
2858
+ export class LifeEventsService {
1773
2859
  /**
1774
- * Delete own user account
2860
+ * Create a new life event
2861
+ * Creates a new life event entry for the authenticated user. Returns ETag header carrying the row updatedAt.
1775
2862
  * @param data The data for the request.
2863
+ * @param data.region Region code for tenant context (decorative for life events)
1776
2864
  * @param data.requestBody
1777
- * @returns void User deleted successfully
2865
+ * @returns EventResponseDto Life event created successfully
1778
2866
  * @throws ApiError
1779
2867
  */
1780
- public static userControllerDeleteOwnUser(
1781
- data: UserControllerDeleteOwnUserData
1782
- ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
2868
+ public static eventControllerCreate(
2869
+ data: EventControllerCreateData
2870
+ ): CancelablePromise<EventControllerCreateResponse> {
1783
2871
  return __request(OpenAPI, {
1784
- method: 'DELETE',
1785
- url: '/api/v1/users',
2872
+ method: 'POST',
2873
+ url: '/api/v1/{region}/bean/events',
2874
+ path: {
2875
+ region: data.region
2876
+ },
1786
2877
  body: data.requestBody,
1787
2878
  mediaType: 'application/json',
1788
2879
  errors: {
1789
- 403: 'Invalid access token'
2880
+ 409: 'Life event already exists for this (userId, type, date) combination'
1790
2881
  }
1791
2882
  });
1792
2883
  }
1793
2884
 
1794
2885
  /**
1795
- * Get current authenticated user
2886
+ * List user life events
2887
+ * Returns life events for the authenticated user with optional filtering by type, description search, and date range.
1796
2888
  * @param data The data for the request.
1797
- * @param data.acceptLanguage
1798
- * @returns unknown User retrieved successfully
2889
+ * @param data.region Region code for tenant context (decorative for life events)
2890
+ * @param data.type Filter by life event type (exact match)
2891
+ * @param data.q Search term for description (case-insensitive partial match)
2892
+ * @param data.from Filter life events from this date (ISO 8601 format)
2893
+ * @param data.to Filter life events to this date (ISO 8601 format)
2894
+ * @param data.page Page number for pagination (default: 1)
2895
+ * @param data.limit Number of items per page (default: 20, max: 100)
2896
+ * @returns EventListResponseDto Life events retrieved successfully
1799
2897
  * @throws ApiError
1800
2898
  */
1801
- public static userControllerGetUser(
1802
- data: UserControllerGetUserData
1803
- ): CancelablePromise<UserControllerGetUserResponse> {
2899
+ public static eventControllerFindAll(
2900
+ data: EventControllerFindAllData
2901
+ ): CancelablePromise<EventControllerFindAllResponse> {
1804
2902
  return __request(OpenAPI, {
1805
2903
  method: 'GET',
1806
- url: '/api/v1/users',
1807
- headers: {
1808
- 'accept-language': data.acceptLanguage
2904
+ url: '/api/v1/{region}/bean/events',
2905
+ path: {
2906
+ region: data.region
2907
+ },
2908
+ query: {
2909
+ type: data.type,
2910
+ q: data.q,
2911
+ from: data.from,
2912
+ to: data.to,
2913
+ page: data.page,
2914
+ limit: data.limit
1809
2915
  }
1810
2916
  });
1811
2917
  }
1812
2918
 
1813
2919
  /**
1814
- * Sign up new user
1815
- * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
2920
+ * Get life event by ID
2921
+ * Returns a single life event by its ID. Returns ETag header.
1816
2922
  * @param data The data for the request.
1817
- * @param data.requestBody
1818
- * @returns unknown User created successfully
2923
+ * @param data.id Life event ID
2924
+ * @param data.region Region code for tenant context (decorative for life events)
2925
+ * @returns EventResponseDto Life event retrieved successfully
1819
2926
  * @throws ApiError
1820
2927
  */
1821
- public static userControllerSignupUser(
1822
- data: UserControllerSignupUserData
1823
- ): CancelablePromise<UserControllerSignupUserResponse> {
2928
+ public static eventControllerFindOne(
2929
+ data: EventControllerFindOneData
2930
+ ): CancelablePromise<EventControllerFindOneResponse> {
1824
2931
  return __request(OpenAPI, {
1825
- method: 'POST',
1826
- url: '/api/v1/users',
1827
- body: data.requestBody,
1828
- mediaType: 'application/json',
2932
+ method: 'GET',
2933
+ url: '/api/v1/{region}/bean/events/{id}',
2934
+ path: {
2935
+ id: data.id,
2936
+ region: data.region
2937
+ },
1829
2938
  errors: {
1830
- 400: 'Invalid Turnstile token (when Turnstile is enabled)',
1831
- 403: 'User signup is disabled'
2939
+ 404: 'Life event not found'
1832
2940
  }
1833
2941
  });
1834
2942
  }
1835
2943
 
1836
2944
  /**
1837
- * Delete user by ID (admin only)
2945
+ * Update a life event
2946
+ * Updates an existing life event. If If-Match header is provided, performs optimistic concurrency check; mismatched updatedAt returns 412.
1838
2947
  * @param data The data for the request.
1839
- * @param data.id User ID to delete
1840
- * @returns void User deleted successfully
2948
+ * @param data.id Life event ID
2949
+ * @param data.region Region code for tenant context (decorative for life events)
2950
+ * @param data.requestBody
2951
+ * @returns EventResponseDto Life event updated successfully
1841
2952
  * @throws ApiError
1842
2953
  */
1843
- public static userControllerDeleteUser(
1844
- data: UserControllerDeleteUserData
1845
- ): CancelablePromise<UserControllerDeleteUserResponse> {
2954
+ public static eventControllerUpdate(
2955
+ data: EventControllerUpdateData
2956
+ ): CancelablePromise<EventControllerUpdateResponse> {
1846
2957
  return __request(OpenAPI, {
1847
- method: 'DELETE',
1848
- url: '/api/v1/users/{id}',
2958
+ method: 'PUT',
2959
+ url: '/api/v1/{region}/bean/events/{id}',
1849
2960
  path: {
1850
- id: data.id
2961
+ id: data.id,
2962
+ region: data.region
1851
2963
  },
2964
+ body: data.requestBody,
2965
+ mediaType: 'application/json',
1852
2966
  errors: {
1853
- 403: 'Cannot delete own account or insufficient permissions'
2967
+ 400: 'If-Match header is not a valid ISO 8601 date',
2968
+ 404: 'Life event not found',
2969
+ 409: 'Updated event conflicts with an existing (userId, type, date) combination',
2970
+ 412: 'If-Match precondition failed (updatedAt mismatch)'
1854
2971
  }
1855
2972
  });
1856
2973
  }
1857
2974
 
1858
2975
  /**
1859
- * Get user info by user ID
2976
+ * Delete a life event
2977
+ * Deletes a life event entry (hard delete). Returns 204.
1860
2978
  * @param data The data for the request.
1861
- * @param data.id User ID
1862
- * @returns unknown User info retrieved successfully
2979
+ * @param data.id Life event ID
2980
+ * @param data.region Region code for tenant context (decorative for life events)
2981
+ * @returns void Life event deleted successfully
1863
2982
  * @throws ApiError
1864
2983
  */
1865
- public static userControllerGetUserInfo(
1866
- data: UserControllerGetUserInfoData
1867
- ): CancelablePromise<UserControllerGetUserInfoResponse> {
2984
+ public static eventControllerDelete(
2985
+ data: EventControllerDeleteData
2986
+ ): CancelablePromise<EventControllerDeleteResponse> {
1868
2987
  return __request(OpenAPI, {
1869
- method: 'GET',
1870
- url: '/api/v1/users/{id}/info',
2988
+ method: 'DELETE',
2989
+ url: '/api/v1/{region}/bean/events/{id}',
1871
2990
  path: {
1872
- id: data.id
2991
+ id: data.id,
2992
+ region: data.region
1873
2993
  },
1874
2994
  errors: {
1875
- 403: 'Cannot access other user info without admin permission'
2995
+ 404: 'Life event not found'
1876
2996
  }
1877
2997
  });
1878
2998
  }
1879
2999
 
1880
3000
  /**
1881
- * Update user settings
3001
+ * Slice time-series by a life event (Phase 79)
3002
+ * Returns aggregated time-series for postings matching accountPattern within the half-open date range of the given life event.
1882
3003
  * @param data The data for the request.
1883
- * @param data.requestBody
1884
- * @returns unknown Settings updated successfully
3004
+ * @param data.id Life event ID
3005
+ * @param data.accountPattern
3006
+ * @param data.granularity
3007
+ * @param data.region Region code for tenant context (decorative for life events)
3008
+ * @returns unknown Time-series sliced by the life event range
1885
3009
  * @throws ApiError
1886
3010
  */
1887
- public static userControllerUpdateUserSetting(
1888
- data: UserControllerUpdateUserSettingData
1889
- ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
3011
+ public static eventControllerGetSlice(
3012
+ data: EventControllerGetSliceData
3013
+ ): CancelablePromise<EventControllerGetSliceResponse> {
1890
3014
  return __request(OpenAPI, {
1891
- method: 'PUT',
1892
- url: '/api/v1/users/setting',
1893
- body: data.requestBody,
1894
- mediaType: 'application/json',
3015
+ method: 'GET',
3016
+ url: '/api/v1/{region}/bean/events/{id}/slice',
3017
+ path: {
3018
+ id: data.id,
3019
+ region: data.region
3020
+ },
3021
+ query: {
3022
+ accountPattern: data.accountPattern,
3023
+ granularity: data.granularity
3024
+ },
1895
3025
  errors: {
1896
- 403: 'Insufficient permissions'
3026
+ 400: 'accountPattern query param is empty',
3027
+ 404: 'Life event not found'
1897
3028
  }
1898
3029
  });
1899
3030
  }
3031
+ }
1900
3032
 
3033
+ export class OnboardingService {
1901
3034
  /**
1902
- * Get all user settings paginated (admin only)
3035
+ * Bootstrap core accounts + register asset accounts with opening balances (ADR-0113)
1903
3036
  * @param data The data for the request.
1904
- * @param data.pageNo Page number
1905
- * @param data.pageSize Page size
1906
- * @returns unknown Settings list retrieved successfully
3037
+ * @param data.region Region code for tenant context
3038
+ * @param data.requestBody
3039
+ * @returns unknown Onboarding bootstrap result.
1907
3040
  * @throws ApiError
1908
3041
  */
1909
- public static userControllerGetAllUserSettingsByPage(
1910
- data: UserControllerGetAllUserSettingsByPageData
1911
- ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
3042
+ public static onboardingControllerBootstrap(
3043
+ data: OnboardingControllerBootstrapData
3044
+ ): CancelablePromise<OnboardingControllerBootstrapResponse> {
1912
3045
  return __request(OpenAPI, {
1913
- method: 'GET',
1914
- url: '/api/v1/users/settings-by-page',
1915
- query: {
1916
- pageNo: data.pageNo,
1917
- pageSize: data.pageSize
3046
+ method: 'POST',
3047
+ url: '/api/v1/{region}/bean/onboarding',
3048
+ path: {
3049
+ region: data.region
3050
+ },
3051
+ body: data.requestBody,
3052
+ mediaType: 'application/json',
3053
+ errors: {
3054
+ 422: 'Invalid region/account path/duplicate paths.'
1918
3055
  }
1919
3056
  });
1920
3057
  }
3058
+ }
1921
3059
 
3060
+ export class BalanceReconciliationService {
1922
3061
  /**
1923
- * Get asset and liability summary for current user
1924
- * @returns unknown Summary retrieved successfully
3062
+ * Preview reconciliation (book vs actual)
3063
+ * Computes book balance, diff, Beancount-inferred tolerance, and suggested action without persisting.
3064
+ * @param data The data for the request.
3065
+ * @param data.region Region code for tenant context (decorative for reconciliation)
3066
+ * @param data.requestBody
3067
+ * @returns ReconciliationComputeResultDto Reconciliation preview
1925
3068
  * @throws ApiError
1926
3069
  */
1927
- public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
3070
+ public static reconciliationControllerCompute(
3071
+ data: ReconciliationControllerComputeData
3072
+ ): CancelablePromise<ReconciliationControllerComputeResponse> {
1928
3073
  return __request(OpenAPI, {
1929
- method: 'GET',
1930
- url: '/api/v1/users/asset-liability-summary'
3074
+ method: 'POST',
3075
+ url: '/api/v1/{region}/bean/reconciliations',
3076
+ path: {
3077
+ region: data.region
3078
+ },
3079
+ body: data.requestBody,
3080
+ mediaType: 'application/json',
3081
+ errors: {
3082
+ 404: 'Account not found'
3083
+ }
1931
3084
  });
1932
3085
  }
1933
- }
1934
3086
 
1935
- export class PropertiesService {
1936
3087
  /**
1937
- * Get all system properties
1938
- * @returns unknown Properties retrieved successfully
3088
+ * Record a balance assertion
3089
+ * Persists the reconciliation as a BeanBalance assertion (amount = actual, diffAmount = book − actual). Re-reconciling the same day/currency upserts.
3090
+ * @param data The data for the request.
3091
+ * @param data.region Region code for tenant context (decorative for reconciliation)
3092
+ * @param data.requestBody
3093
+ * @returns ReconciliationRecordDto Balance assertion recorded
1939
3094
  * @throws ApiError
1940
3095
  */
1941
- public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
3096
+ public static reconciliationControllerAssert(
3097
+ data: ReconciliationControllerAssertData
3098
+ ): CancelablePromise<ReconciliationControllerAssertResponse> {
1942
3099
  return __request(OpenAPI, {
1943
- method: 'GET',
1944
- url: '/api/v1/admin/properties',
3100
+ method: 'POST',
3101
+ url: '/api/v1/{region}/bean/reconciliations/assert',
3102
+ path: {
3103
+ region: data.region
3104
+ },
3105
+ body: data.requestBody,
3106
+ mediaType: 'application/json',
1945
3107
  errors: {
1946
- 401: 'Unauthorized',
1947
- 403: 'Forbidden - insufficient permissions'
3108
+ 404: 'Account not found'
1948
3109
  }
1949
3110
  });
1950
3111
  }
1951
3112
 
1952
3113
  /**
1953
- * Get property by key
3114
+ * Generate a pad adjusting entry
3115
+ * When book is outside tolerance, synthesizes a Beancount pad transaction (flag P) booking the diff from source_account and persists it. Source defaults to Equity:Opening-Balances.
1954
3116
  * @param data The data for the request.
1955
- * @param data.key Property key
1956
- * @returns unknown Property retrieved successfully
3117
+ * @param data.region Region code for tenant context (decorative for reconciliation)
3118
+ * @param data.requestBody
3119
+ * @returns PadResultDto Pad adjusting entry generated
1957
3120
  * @throws ApiError
1958
3121
  */
1959
- public static propertyControllerGetByKey(
1960
- data: PropertyControllerGetByKeyData
1961
- ): CancelablePromise<PropertyControllerGetByKeyResponse> {
3122
+ public static reconciliationControllerPad(
3123
+ data: ReconciliationControllerPadData
3124
+ ): CancelablePromise<ReconciliationControllerPadResponse> {
1962
3125
  return __request(OpenAPI, {
1963
- method: 'GET',
1964
- url: '/api/v1/admin/properties/{key}',
3126
+ method: 'POST',
3127
+ url: '/api/v1/{region}/bean/reconciliations/pad',
1965
3128
  path: {
1966
- key: data.key
3129
+ region: data.region
1967
3130
  },
3131
+ body: data.requestBody,
3132
+ mediaType: 'application/json',
1968
3133
  errors: {
1969
- 401: 'Unauthorized',
1970
- 403: 'Forbidden - insufficient permissions',
1971
- 404: 'Property not found'
3134
+ 400: 'Book already within tolerance — no pad needed',
3135
+ 404: 'Account not found'
1972
3136
  }
1973
3137
  });
1974
3138
  }
1975
3139
 
1976
3140
  /**
1977
- * @returns unknown
3141
+ * List reconciliation history for an account
3142
+ * Returns recorded balance assertions (most recent first). The latest drives the account-detail "Last <date>" badge.
3143
+ * @param data The data for the request.
3144
+ * @param data.accountId BeanAccount id
3145
+ * @param data.region Region code for tenant context (decorative for reconciliation)
3146
+ * @returns ReconciliationRecordDto Reconciliation history
1978
3147
  * @throws ApiError
1979
3148
  */
1980
- public static propertyController(): CancelablePromise<PropertyControllerResponse> {
3149
+ public static reconciliationControllerHistory(
3150
+ data: ReconciliationControllerHistoryData
3151
+ ): CancelablePromise<ReconciliationControllerHistoryResponse> {
1981
3152
  return __request(OpenAPI, {
1982
- method: 'PUT',
1983
- url: '/api/v1/admin/properties/{key}'
3153
+ method: 'GET',
3154
+ url: '/api/v1/{region}/bean/accounts/{accountId}/reconciliations',
3155
+ path: {
3156
+ accountId: data.accountId,
3157
+ region: data.region
3158
+ },
3159
+ errors: {
3160
+ 404: 'Account not found'
3161
+ }
1984
3162
  });
1985
3163
  }
3164
+ }
1986
3165
 
3166
+ export class BeanExportService {
1987
3167
  /**
1988
- * @returns void
3168
+ * Export Beancount ledger as ZIP
3169
+ * Export all user Beancount data as a ZIP file containing ledger.beancount and yearly files in community format.
3170
+ * @returns unknown
1989
3171
  * @throws ApiError
1990
3172
  */
1991
- public static propertyController1(): CancelablePromise<PropertyController1Response> {
3173
+ public static exportControllerExportBeancount(): CancelablePromise<ExportControllerExportBeancountResponse> {
1992
3174
  return __request(OpenAPI, {
1993
- method: 'DELETE',
1994
- url: '/api/v1/admin/properties/{key}'
3175
+ method: 'GET',
3176
+ url: '/api/v1/{region}/bean/export/beancount'
1995
3177
  });
1996
3178
  }
1997
3179
  }
@@ -2001,6 +3183,7 @@ export class BeanImportService {
2001
3183
  * Import a bill file
2002
3184
  * Upload and process a bill file (CSV, PDF, OFX, etc.). The system automatically identifies the file type, extracts transactions, validates them, and stores only validated transactions to the database. Maximum file size: 50MB. Only 1 import per user at a time (concurrent imports rejected with 429).
2003
3185
  * @param data The data for the request.
3186
+ * @param data.region Region code for tenant context
2004
3187
  * @param data.formData Bill file to import
2005
3188
  * @returns ImportResultDto File imported successfully
2006
3189
  * @throws ApiError
@@ -2011,6 +3194,9 @@ export class BeanImportService {
2011
3194
  return __request(OpenAPI, {
2012
3195
  method: 'POST',
2013
3196
  url: '/api/v1/{region}/bean/import/file',
3197
+ path: {
3198
+ region: data.region
3199
+ },
2014
3200
  formData: data.formData,
2015
3201
  mediaType: 'multipart/form-data',
2016
3202
  errors: {
@@ -2026,6 +3212,7 @@ export class BeanImportService {
2026
3212
  * Identify file type
2027
3213
  * Upload a file to check if it can be processed by any registered importer. Does not perform actual import - useful for pre-validation. Uses user-specific importer configuration.
2028
3214
  * @param data The data for the request.
3215
+ * @param data.region Region code for tenant context
2029
3216
  * @param data.formData File to identify
2030
3217
  * @returns IdentifyResultDto File identification result
2031
3218
  * @throws ApiError
@@ -2036,6 +3223,9 @@ export class BeanImportService {
2036
3223
  return __request(OpenAPI, {
2037
3224
  method: 'POST',
2038
3225
  url: '/api/v1/{region}/bean/import/identify',
3226
+ path: {
3227
+ region: data.region
3228
+ },
2039
3229
  formData: data.formData,
2040
3230
  mediaType: 'multipart/form-data',
2041
3231
  errors: {
@@ -2044,6 +3234,32 @@ export class BeanImportService {
2044
3234
  });
2045
3235
  }
2046
3236
 
3237
+ /**
3238
+ * Import a Beancount file in community format
3239
+ * Upload a .beancount file to import. The system parses community-format paths, converts to internal format using category metadata, auto-creates accounts, and imports transactions with deduplication. Maximum file size: 50MB. Only 1 import per user at a time.
3240
+ * @param data The data for the request.
3241
+ * @param data.region Region code for tenant context
3242
+ * @param data.formData Beancount file to import
3243
+ * @returns unknown Beancount file imported successfully
3244
+ * @throws ApiError
3245
+ */
3246
+ public static fileImportControllerImportBeancount(
3247
+ data: FileImportControllerImportBeancountData
3248
+ ): CancelablePromise<FileImportControllerImportBeancountResponse> {
3249
+ return __request(OpenAPI, {
3250
+ method: 'POST',
3251
+ url: '/api/v1/{region}/bean/import/beancount',
3252
+ path: {
3253
+ region: data.region
3254
+ },
3255
+ formData: data.formData,
3256
+ mediaType: 'multipart/form-data',
3257
+ errors: {
3258
+ 400: 'Bad request - invalid file or no file uploaded'
3259
+ }
3260
+ });
3261
+ }
3262
+
2047
3263
  /**
2048
3264
  * Get importer configuration
2049
3265
  * Returns the current configuration for the specified importer. Creates default configuration if none exists.
@@ -2071,37 +3287,55 @@ export class BeanImportService {
2071
3287
  }
2072
3288
 
2073
3289
  /**
3290
+ * Update importer configuration
3291
+ * Updates the configuration for the specified importer. Partial updates are supported.
2074
3292
  * @param data The data for the request.
3293
+ * @param data.importerId Importer identifier. Supported importers: alipay, alipay-web, wechat, boc, boc-credit, ccb, cmb, cmbc, cmbc-credit, icbc, icbc-credit, hsbc-hk-credit, hsbc-hk-debit
2075
3294
  * @param data.region Region code for tenant context
2076
- * @returns unknown
3295
+ * @param data.requestBody Partial configuration update. Only provided fields will be updated.
3296
+ * @returns ImporterConfigDto Configuration updated successfully
2077
3297
  * @throws ApiError
2078
3298
  */
2079
- public static importerConfigController(
2080
- data: ImporterConfigControllerData
2081
- ): CancelablePromise<ImporterConfigControllerResponse> {
3299
+ public static importerConfigControllerUpdateConfig(
3300
+ data: ImporterConfigControllerUpdateConfigData
3301
+ ): CancelablePromise<ImporterConfigControllerUpdateConfigResponse> {
2082
3302
  return __request(OpenAPI, {
2083
3303
  method: 'PUT',
2084
3304
  url: '/api/v1/{region}/bean/import/config/{importerId}',
2085
3305
  path: {
3306
+ importerId: data.importerId,
2086
3307
  region: data.region
3308
+ },
3309
+ body: data.requestBody,
3310
+ mediaType: 'application/json',
3311
+ errors: {
3312
+ 400: 'Invalid input - Validation failed',
3313
+ 404: 'Configuration not found'
2087
3314
  }
2088
3315
  });
2089
3316
  }
2090
3317
 
2091
3318
  /**
3319
+ * Reset configuration to default
3320
+ * Resets the configuration for the specified importer to default values. This operation overwrites all existing configuration.
2092
3321
  * @param data The data for the request.
3322
+ * @param data.importerId Importer identifier. Supported importers: alipay, alipay-web, wechat, boc, boc-credit, ccb, cmb, cmbc, cmbc-credit, icbc, icbc-credit, hsbc-hk-credit, hsbc-hk-debit
2093
3323
  * @param data.region Region code for tenant context
2094
- * @returns unknown
3324
+ * @returns ImporterConfigDto Configuration reset successfully
2095
3325
  * @throws ApiError
2096
3326
  */
2097
- public static importerConfigController1(
2098
- data: ImporterConfigController1Data
2099
- ): CancelablePromise<ImporterConfigController1Response> {
3327
+ public static importerConfigControllerResetConfig(
3328
+ data: ImporterConfigControllerResetConfigData
3329
+ ): CancelablePromise<ImporterConfigControllerResetConfigResponse> {
2100
3330
  return __request(OpenAPI, {
2101
3331
  method: 'POST',
2102
3332
  url: '/api/v1/{region}/bean/import/config/{importerId}/reset',
2103
3333
  path: {
3334
+ importerId: data.importerId,
2104
3335
  region: data.region
3336
+ },
3337
+ errors: {
3338
+ 400: 'Invalid input - Unsupported importer'
2105
3339
  }
2106
3340
  });
2107
3341
  }
@@ -2133,7 +3367,7 @@ export class ProviderSyncService {
2133
3367
  *
2134
3368
  * @param data The data for the request.
2135
3369
  * @param data.providerName Provider name
2136
- * @param data.region Region code
3370
+ * @param data.region Region code for tenant context
2137
3371
  * @param data.requestBody
2138
3372
  * @returns ProviderSyncResponseDto Sync completed successfully
2139
3373
  * @throws ApiError
@@ -2161,13 +3395,20 @@ export class ProviderSyncService {
2161
3395
  /**
2162
3396
  * Get supported providers
2163
3397
  * Returns a list of all providers supported by the sync endpoint.
3398
+ * @param data The data for the request.
3399
+ * @param data.region Region code for tenant context
2164
3400
  * @returns SupportedProvidersResponseDto List of supported providers
2165
3401
  * @throws ApiError
2166
3402
  */
2167
- public static providerSyncControllerGetSupportedProviders(): CancelablePromise<ProviderSyncControllerGetSupportedProvidersResponse> {
3403
+ public static providerSyncControllerGetSupportedProviders(
3404
+ data: ProviderSyncControllerGetSupportedProvidersData
3405
+ ): CancelablePromise<ProviderSyncControllerGetSupportedProvidersResponse> {
2168
3406
  return __request(OpenAPI, {
2169
3407
  method: 'GET',
2170
3408
  url: '/api/v1/{region}/bean/import/provider/supported',
3409
+ path: {
3410
+ region: data.region
3411
+ },
2171
3412
  errors: {
2172
3413
  401: 'Missing or invalid authentication'
2173
3414
  }
@@ -2179,6 +3420,7 @@ export class ProviderSyncService {
2179
3420
  * Returns whether a specific provider is supported.
2180
3421
  * @param data The data for the request.
2181
3422
  * @param data.providerName Provider name to check
3423
+ * @param data.region Region code for tenant context
2182
3424
  * @returns unknown Provider support status
2183
3425
  * @throws ApiError
2184
3426
  */
@@ -2189,7 +3431,8 @@ export class ProviderSyncService {
2189
3431
  method: 'GET',
2190
3432
  url: '/api/v1/{region}/bean/import/provider/{providerName}/supported',
2191
3433
  path: {
2192
- providerName: data.providerName
3434
+ providerName: data.providerName,
3435
+ region: data.region
2193
3436
  },
2194
3437
  errors: {
2195
3438
  401: 'Missing or invalid authentication'
@@ -2198,10 +3441,106 @@ export class ProviderSyncService {
2198
3441
  }
2199
3442
  }
2200
3443
 
3444
+ export class ExternalAccountLinksService {
3445
+ /**
3446
+ * Create an external account → BeanAccount mapping (ADR-0113)
3447
+ * @param data The data for the request.
3448
+ * @param data.region Region code for tenant context
3449
+ * @param data.requestBody
3450
+ * @returns ExternalAccountLinkResponseDto Link created.
3451
+ * @throws ApiError
3452
+ */
3453
+ public static externalAccountLinkControllerCreate(
3454
+ data: ExternalAccountLinkControllerCreateData
3455
+ ): CancelablePromise<ExternalAccountLinkControllerCreateResponse> {
3456
+ return __request(OpenAPI, {
3457
+ method: 'POST',
3458
+ url: '/api/v1/{region}/bean/external-account-links',
3459
+ path: {
3460
+ region: data.region
3461
+ },
3462
+ body: data.requestBody,
3463
+ mediaType: 'application/json',
3464
+ errors: {
3465
+ 422: 'beanAccountId not owned, or an active link already exists.'
3466
+ }
3467
+ });
3468
+ }
3469
+
3470
+ /**
3471
+ * List the user's active external account links
3472
+ * @param data The data for the request.
3473
+ * @param data.provider
3474
+ * @param data.region Region code for tenant context
3475
+ * @returns ExternalAccountLinkListResponseDto Links retrieved.
3476
+ * @throws ApiError
3477
+ */
3478
+ public static externalAccountLinkControllerFindAll(
3479
+ data: ExternalAccountLinkControllerFindAllData
3480
+ ): CancelablePromise<ExternalAccountLinkControllerFindAllResponse> {
3481
+ return __request(OpenAPI, {
3482
+ method: 'GET',
3483
+ url: '/api/v1/{region}/bean/external-account-links',
3484
+ path: {
3485
+ region: data.region
3486
+ },
3487
+ query: {
3488
+ provider: data.provider
3489
+ }
3490
+ });
3491
+ }
3492
+
3493
+ /**
3494
+ * Get a single external account link
3495
+ * @param data The data for the request.
3496
+ * @param data.id
3497
+ * @param data.region Region code for tenant context
3498
+ * @returns ExternalAccountLinkResponseDto Link retrieved.
3499
+ * @throws ApiError
3500
+ */
3501
+ public static externalAccountLinkControllerFindOne(
3502
+ data: ExternalAccountLinkControllerFindOneData
3503
+ ): CancelablePromise<ExternalAccountLinkControllerFindOneResponse> {
3504
+ return __request(OpenAPI, {
3505
+ method: 'GET',
3506
+ url: '/api/v1/{region}/bean/external-account-links/{id}',
3507
+ path: {
3508
+ id: data.id,
3509
+ region: data.region
3510
+ },
3511
+ errors: {
3512
+ 422: 'Link not found or not owned by the user.'
3513
+ }
3514
+ });
3515
+ }
3516
+
3517
+ /**
3518
+ * Soft-delete (disconnect) an external account link
3519
+ * @param data The data for the request.
3520
+ * @param data.id
3521
+ * @param data.region Region code for tenant context
3522
+ * @returns void Link soft-deleted; historical transactions are unaffected.
3523
+ * @throws ApiError
3524
+ */
3525
+ public static externalAccountLinkControllerRemove(
3526
+ data: ExternalAccountLinkControllerRemoveData
3527
+ ): CancelablePromise<ExternalAccountLinkControllerRemoveResponse> {
3528
+ return __request(OpenAPI, {
3529
+ method: 'DELETE',
3530
+ url: '/api/v1/{region}/bean/external-account-links/{id}',
3531
+ path: {
3532
+ id: data.id,
3533
+ region: data.region
3534
+ }
3535
+ });
3536
+ }
3537
+ }
3538
+
2201
3539
  export class ImportTelemetryService {
2202
3540
  /**
2203
3541
  * Receive anonymous parser failure telemetry
2204
3542
  * @param data The data for the request.
3543
+ * @param data.region Region code for tenant context
2205
3544
  * @param data.requestBody
2206
3545
  * @returns unknown Telemetry report received
2207
3546
  * @throws ApiError
@@ -2212,6 +3551,34 @@ export class ImportTelemetryService {
2212
3551
  return __request(OpenAPI, {
2213
3552
  method: 'POST',
2214
3553
  url: '/api/v1/{region}/bean/import/parser-telemetry',
3554
+ path: {
3555
+ region: data.region
3556
+ },
3557
+ body: data.requestBody,
3558
+ mediaType: 'application/json',
3559
+ errors: {
3560
+ 401: 'Unauthorized'
3561
+ }
3562
+ });
3563
+ }
3564
+
3565
+ /**
3566
+ * Receive anonymous zero-hit coverage miss report
3567
+ * @param data The data for the request.
3568
+ * @param data.region Region code for tenant context
3569
+ * @param data.requestBody
3570
+ * @returns unknown Coverage miss report received
3571
+ * @throws ApiError
3572
+ */
3573
+ public static telemetryControllerReportCoverageMiss(
3574
+ data: TelemetryControllerReportCoverageMissData
3575
+ ): CancelablePromise<TelemetryControllerReportCoverageMissResponse> {
3576
+ return __request(OpenAPI, {
3577
+ method: 'POST',
3578
+ url: '/api/v1/{region}/bean/import/parser-coverage-miss',
3579
+ path: {
3580
+ region: data.region
3581
+ },
2215
3582
  body: data.requestBody,
2216
3583
  mediaType: 'application/json',
2217
3584
  errors: {
@@ -2219,6 +3586,29 @@ export class ImportTelemetryService {
2219
3586
  }
2220
3587
  });
2221
3588
  }
3589
+
3590
+ /**
3591
+ * Coverage metrics (uncovered format aggregation)
3592
+ * @param data The data for the request.
3593
+ * @param data.region Region code for tenant context
3594
+ * @param data.topN Top-N uncovered formats (default 10)
3595
+ * @returns unknown Coverage metrics
3596
+ * @throws ApiError
3597
+ */
3598
+ public static telemetryControllerGetCoverageMetrics(
3599
+ data: TelemetryControllerGetCoverageMetricsData
3600
+ ): CancelablePromise<TelemetryControllerGetCoverageMetricsResponse> {
3601
+ return __request(OpenAPI, {
3602
+ method: 'GET',
3603
+ url: '/api/v1/{region}/bean/import/parser-coverage-metrics',
3604
+ path: {
3605
+ region: data.region
3606
+ },
3607
+ query: {
3608
+ topN: data.topN
3609
+ }
3610
+ });
3611
+ }
2222
3612
  }
2223
3613
 
2224
3614
  export class BeanNlpService {
@@ -2226,6 +3616,7 @@ export class BeanNlpService {
2226
3616
  * Process natural language input
2227
3617
  * Parse natural language text (Chinese/English) describing a transaction. Supports multi-turn dialogue for collecting missing information. When confidence < 0.75, returns "confirm" action requiring user verification. User can reply with confirmation words (确认/yes/ok) or provide corrections. Examples: "yesterday Starbucks spent 35 yuan", "today lunch 28 yuan", "spent $50 at Walmart"
2228
3618
  * @param data The data for the request.
3619
+ * @param data.region Region code for tenant context
2229
3620
  * @param data.requestBody Natural language transaction input with optional session ID
2230
3621
  * @returns NlpResponseDto NLP processing result - either created transaction or asking for more info
2231
3622
  * @throws ApiError
@@ -2236,6 +3627,9 @@ export class BeanNlpService {
2236
3627
  return __request(OpenAPI, {
2237
3628
  method: 'POST',
2238
3629
  url: '/api/v1/{region}/bean/nlp/process',
3630
+ path: {
3631
+ region: data.region
3632
+ },
2239
3633
  body: data.requestBody,
2240
3634
  mediaType: 'application/json',
2241
3635
  errors: {
@@ -2249,16 +3643,20 @@ export class BeanNlpService {
2249
3643
  * Clear dialogue session
2250
3644
  * Clear the current NLP dialogue session. Use this to cancel an ongoing multi-turn dialogue.
2251
3645
  * @param data The data for the request.
3646
+ * @param data.region Region code for tenant context
2252
3647
  * @param data.sessionId Specific session ID to clear (defaults to user session)
2253
3648
  * @returns void Session cleared successfully
2254
3649
  * @throws ApiError
2255
3650
  */
2256
3651
  public static nlpControllerClearSession(
2257
- data: NlpControllerClearSessionData = {}
3652
+ data: NlpControllerClearSessionData
2258
3653
  ): CancelablePromise<NlpControllerClearSessionResponse> {
2259
3654
  return __request(OpenAPI, {
2260
3655
  method: 'DELETE',
2261
3656
  url: '/api/v1/{region}/bean/nlp/session',
3657
+ path: {
3658
+ region: data.region
3659
+ },
2262
3660
  query: {
2263
3661
  sessionId: data.sessionId
2264
3662
  },
@@ -2272,16 +3670,20 @@ export class BeanNlpService {
2272
3670
  * Get current session state
2273
3671
  * Get the current NLP dialogue session state. Useful for debugging and displaying session context in UI.
2274
3672
  * @param data The data for the request.
3673
+ * @param data.region Region code for tenant context
2275
3674
  * @param data.sessionId Specific session ID to get (defaults to user session)
2276
3675
  * @returns unknown Current session state (or null if no active session)
2277
3676
  * @throws ApiError
2278
3677
  */
2279
3678
  public static nlpControllerGetSession(
2280
- data: NlpControllerGetSessionData = {}
3679
+ data: NlpControllerGetSessionData
2281
3680
  ): CancelablePromise<NlpControllerGetSessionResponse> {
2282
3681
  return __request(OpenAPI, {
2283
3682
  method: 'GET',
2284
3683
  url: '/api/v1/{region}/bean/nlp/session',
3684
+ path: {
3685
+ region: data.region
3686
+ },
2285
3687
  query: {
2286
3688
  sessionId: data.sessionId
2287
3689
  },
@@ -2306,164 +3708,105 @@ export class BeanPlatformsService {
2306
3708
  }
2307
3709
 
2308
3710
  /**
2309
- * @returns unknown
3711
+ * Create a new platform
3712
+ * @param data The data for the request.
3713
+ * @param data.requestBody
3714
+ * @returns unknown Platform created successfully
2310
3715
  * @throws ApiError
2311
3716
  */
2312
- public static platformController(): CancelablePromise<PlatformControllerResponse> {
3717
+ public static platformControllerCreate(
3718
+ data: PlatformControllerCreateData
3719
+ ): CancelablePromise<PlatformControllerCreateResponse> {
2313
3720
  return __request(OpenAPI, {
2314
3721
  method: 'POST',
2315
- url: '/api/v1/bean/platforms'
3722
+ url: '/api/v1/bean/platforms',
3723
+ body: data.requestBody,
3724
+ mediaType: 'application/json',
3725
+ errors: {
3726
+ 409: 'Platform already exists'
3727
+ }
2316
3728
  });
2317
3729
  }
2318
3730
 
2319
3731
  /**
2320
3732
  * Get platform list for current user
2321
- * @returns unknown List of platforms with user binding status
3733
+ * @returns PlatformListItemDto List of platforms with user binding status
2322
3734
  * @throws ApiError
2323
3735
  */
2324
3736
  public static platformControllerGetPlatformList(): CancelablePromise<PlatformControllerGetPlatformListResponse> {
2325
3737
  return __request(OpenAPI, {
2326
- method: 'GET',
2327
- url: '/api/v1/bean/platforms/list'
2328
- });
2329
- }
2330
-
2331
- /**
2332
- * @returns unknown
2333
- * @throws ApiError
2334
- */
2335
- public static platformController1(): CancelablePromise<PlatformController1Response> {
2336
- return __request(OpenAPI, {
2337
- method: 'PUT',
2338
- url: '/api/v1/bean/platforms/{id}'
2339
- });
2340
- }
2341
-
2342
- /**
2343
- * @returns void
2344
- * @throws ApiError
2345
- */
2346
- public static platformController2(): CancelablePromise<PlatformController2Response> {
2347
- return __request(OpenAPI, {
2348
- method: 'DELETE',
2349
- url: '/api/v1/bean/platforms/{id}'
3738
+ method: 'GET',
3739
+ url: '/api/v1/bean/platforms/list'
2350
3740
  });
2351
3741
  }
2352
- }
2353
3742
 
2354
- export class SymbolsService {
2355
3743
  /**
2356
- * Search for symbols
2357
- * Search symbols by query with optional filters for asset class, area, and indices
3744
+ * Match platforms by name or alias
2358
3745
  * @param data The data for the request.
2359
- * @param data.includeIndices Include index symbols in results
2360
- * @param data.assetSubClass Asset sub-class filter
2361
- * @param data.assetClass Asset class filter
2362
- * @param data.area Geographic area filter (e.g., CN, US)
2363
- * @param data.query Search query string
2364
- * @returns unknown Symbols found successfully
3746
+ * @param data.q Search query — Chinese name, English name, or abbreviation
3747
+ * @param data.region Region code for category override lookup
3748
+ * @returns PlatformMatchResponseDto Matching platforms with overall match type and truncation flag
2365
3749
  * @throws ApiError
2366
3750
  */
2367
- public static symbolControllerLookupSymbol(
2368
- data: SymbolControllerLookupSymbolData = {}
2369
- ): CancelablePromise<SymbolControllerLookupSymbolResponse> {
3751
+ public static platformControllerMatchPlatforms(
3752
+ data: PlatformControllerMatchPlatformsData
3753
+ ): CancelablePromise<PlatformControllerMatchPlatformsResponse> {
2370
3754
  return __request(OpenAPI, {
2371
3755
  method: 'GET',
2372
- url: '/api/v1/market/symbols/lookup',
3756
+ url: '/api/v1/bean/platforms/match',
2373
3757
  query: {
2374
- includeIndices: data.includeIndices,
2375
- assetSubClass: data.assetSubClass,
2376
- assetClass: data.assetClass,
2377
- area: data.area,
2378
- query: data.query
2379
- },
2380
- errors: {
2381
- 400: 'Invalid query parameters'
3758
+ q: data.q,
3759
+ region: data.region
2382
3760
  }
2383
3761
  });
2384
3762
  }
2385
3763
 
2386
3764
  /**
2387
- * Get symbol data
2388
- * Retrieve detailed symbol information including optional historical data
3765
+ * Update a platform
2389
3766
  * @param data The data for the request.
2390
- * @param data.dataSource Data source provider
2391
- * @param data.symbol Symbol identifier (e.g., ticker code)
2392
- * @param data.includeHistoricalData Include historical price data (0 or 1)
2393
- * @returns unknown Symbol data retrieved successfully
3767
+ * @param data.id Platform ID
3768
+ * @param data.requestBody
3769
+ * @returns unknown Platform updated successfully
2394
3770
  * @throws ApiError
2395
3771
  */
2396
- public static symbolControllerGetSymbolData(
2397
- data: SymbolControllerGetSymbolDataData
2398
- ): CancelablePromise<SymbolControllerGetSymbolDataResponse> {
3772
+ public static platformControllerUpdate(
3773
+ data: PlatformControllerUpdateData
3774
+ ): CancelablePromise<PlatformControllerUpdateResponse> {
2399
3775
  return __request(OpenAPI, {
2400
- method: 'GET',
2401
- url: '/api/v1/market/symbols/{dataSource}/{symbol}',
3776
+ method: 'PUT',
3777
+ url: '/api/v1/bean/platforms/{id}',
2402
3778
  path: {
2403
- dataSource: data.dataSource,
2404
- symbol: data.symbol
2405
- },
2406
- query: {
2407
- includeHistoricalData: data.includeHistoricalData
3779
+ id: data.id
2408
3780
  },
3781
+ body: data.requestBody,
3782
+ mediaType: 'application/json',
2409
3783
  errors: {
2410
- 400: 'Invalid data source',
2411
- 404: 'Symbol not found'
3784
+ 404: 'Platform not found'
2412
3785
  }
2413
3786
  });
2414
3787
  }
2415
3788
 
2416
3789
  /**
2417
- * Gather symbol data for specific date
2418
- * Retrieve historical symbol data for a specific date
3790
+ * Delete a platform
2419
3791
  * @param data The data for the request.
2420
- * @param data.dataSource Data source provider
2421
- * @param data.dateString Date in ISO 8601 format (YYYY-MM-DD)
2422
- * @param data.symbol Symbol identifier (e.g., ticker code)
2423
- * @returns unknown Historical data retrieved successfully
3792
+ * @param data.id Platform ID
3793
+ * @returns void Platform deleted successfully
2424
3794
  * @throws ApiError
2425
3795
  */
2426
- public static symbolControllerGatherSymbolForDate(
2427
- data: SymbolControllerGatherSymbolForDateData
2428
- ): CancelablePromise<SymbolControllerGatherSymbolForDateResponse> {
3796
+ public static platformControllerDelete(
3797
+ data: PlatformControllerDeleteData
3798
+ ): CancelablePromise<PlatformControllerDeleteResponse> {
2429
3799
  return __request(OpenAPI, {
2430
- method: 'GET',
2431
- url: '/api/v1/market/symbols/{dataSource}/{symbol}/{dateString}',
3800
+ method: 'DELETE',
3801
+ url: '/api/v1/bean/platforms/{id}',
2432
3802
  path: {
2433
- dataSource: data.dataSource,
2434
- dateString: data.dateString,
2435
- symbol: data.symbol
3803
+ id: data.id
2436
3804
  },
2437
3805
  errors: {
2438
- 400: 'Invalid date format',
2439
- 404: 'Symbol data not found for specified date'
3806
+ 404: 'Platform not found'
2440
3807
  }
2441
3808
  });
2442
3809
  }
2443
-
2444
- /**
2445
- * @returns unknown
2446
- * @throws ApiError
2447
- */
2448
- public static symbolController(): CancelablePromise<SymbolControllerResponse> {
2449
- return __request(OpenAPI, {
2450
- method: 'PUT',
2451
- url: '/api/v1/market/symbols/yahoo/batch-update'
2452
- });
2453
- }
2454
- }
2455
-
2456
- export class DefaultService {
2457
- /**
2458
- * @returns unknown
2459
- * @throws ApiError
2460
- */
2461
- public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
2462
- return __request(OpenAPI, {
2463
- method: 'POST',
2464
- url: '/api/v1/cache/flush'
2465
- });
2466
- }
2467
3810
  }
2468
3811
 
2469
3812
  export class DashboardService {
@@ -2471,16 +3814,20 @@ export class DashboardService {
2471
3814
  * Get net worth overview
2472
3815
  * Returns total net worth with breakdown of assets and liabilities
2473
3816
  * @param data The data for the request.
3817
+ * @param data.region Region code for tenant context
2474
3818
  * @param data.date Date for balance calculation (ISO 8601 format)
2475
3819
  * @returns NetWorthResponseDto Net worth retrieved successfully
2476
3820
  * @throws ApiError
2477
3821
  */
2478
3822
  public static dashboardControllerGetNetWorth(
2479
- data: DashboardControllerGetNetWorthData = {}
3823
+ data: DashboardControllerGetNetWorthData
2480
3824
  ): CancelablePromise<DashboardControllerGetNetWorthResponse> {
2481
3825
  return __request(OpenAPI, {
2482
3826
  method: 'GET',
2483
3827
  url: '/api/v1/{region}/dashboard/net-worth',
3828
+ path: {
3829
+ region: data.region
3830
+ },
2484
3831
  query: {
2485
3832
  date: data.date
2486
3833
  },
@@ -2494,20 +3841,26 @@ export class DashboardService {
2494
3841
  * Get accounts grouped by platform
2495
3842
  * Returns accounts with balances grouped by financial platform
2496
3843
  * @param data The data for the request.
3844
+ * @param data.region Region code for tenant context
2497
3845
  * @param data.groupBy Grouping strategy
2498
3846
  * @param data.date Date for balance calculation (ISO 8601 format)
3847
+ * @param data.accountId Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
2499
3848
  * @returns unknown Accounts retrieved successfully. Response type depends on groupBy parameter.
2500
3849
  * @throws ApiError
2501
3850
  */
2502
3851
  public static dashboardControllerGetAccounts(
2503
- data: DashboardControllerGetAccountsData = {}
3852
+ data: DashboardControllerGetAccountsData
2504
3853
  ): CancelablePromise<DashboardControllerGetAccountsResponse> {
2505
3854
  return __request(OpenAPI, {
2506
3855
  method: 'GET',
2507
3856
  url: '/api/v1/{region}/dashboard/accounts',
3857
+ path: {
3858
+ region: data.region
3859
+ },
2508
3860
  query: {
2509
3861
  groupBy: data.groupBy,
2510
- date: data.date
3862
+ date: data.date,
3863
+ accountId: data.accountId
2511
3864
  },
2512
3865
  errors: {
2513
3866
  401: 'User not authenticated'
@@ -2520,6 +3873,7 @@ export class DashboardService {
2520
3873
  * Returns income, expenses, and savings for a monthly period
2521
3874
  * @param data The data for the request.
2522
3875
  * @param data.period Period in YYYY-MM format
3876
+ * @param data.region Region code for tenant context
2523
3877
  * @returns CashFlowResponseDto Cash flow retrieved successfully
2524
3878
  * @throws ApiError
2525
3879
  */
@@ -2529,6 +3883,9 @@ export class DashboardService {
2529
3883
  return __request(OpenAPI, {
2530
3884
  method: 'GET',
2531
3885
  url: '/api/v1/{region}/dashboard/cash-flow',
3886
+ path: {
3887
+ region: data.region
3888
+ },
2532
3889
  query: {
2533
3890
  period: data.period
2534
3891
  },
@@ -2538,126 +3895,88 @@ export class DashboardService {
2538
3895
  }
2539
3896
  });
2540
3897
  }
2541
- }
2542
3898
 
2543
- export class ReportingService {
2544
3899
  /**
2545
- * Get portfolio value trends
2546
- *
2547
- * Returns time series data of portfolio net worth.
2548
- *
2549
- * **Multi-currency Support:**
2550
- * - `series[].byCurrency` - Currency breakdown for each data point
2551
- * - `byCurrency` - Separate time series grouped by currency
2552
- * - `warnings` - Exchange rate warnings if conversion failed
2553
- *
2554
- * **Parameters:**
2555
- * - `period`: Time period (1m, 3m, 6m, 1y)
2556
- * - `granularity`: Data granularity (day, week, month)
2557
- *
3900
+ * Get expenses/income grouped by functional category
3901
+ * Returns amounts pre-aggregated by functional category (account-path Group segment) with server-side multi-currency conversion. flow=expense (default) aggregates ^Expenses: accounts; flow=income aggregates ^Income: accounts (issue #518)
2558
3902
  * @param data The data for the request.
2559
- * @param data.period Time period
2560
- * @param data.granularity Data granularity
2561
- * @returns PortfolioTrendsResponseDto Trends retrieved successfully
3903
+ * @param data.region Region code for tenant context
3904
+ * @param data.groupBy Grouping strategy
3905
+ * @param data.period Time window (1m = current calendar month)
3906
+ * @param data.flow Account root to aggregate (expense → ^Expenses:, income → ^Income:)
3907
+ * @returns ExpensesByCategoryResponseDto Expenses retrieved successfully
2562
3908
  * @throws ApiError
2563
3909
  */
2564
- public static reportingControllerGetPortfolioTrends(
2565
- data: ReportingControllerGetPortfolioTrendsData = {}
2566
- ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
3910
+ public static dashboardControllerGetExpenses(
3911
+ data: DashboardControllerGetExpensesData
3912
+ ): CancelablePromise<DashboardControllerGetExpensesResponse> {
2567
3913
  return __request(OpenAPI, {
2568
3914
  method: 'GET',
2569
- url: '/api/v1/{region}/reporting/portfolio/trends',
3915
+ url: '/api/v1/{region}/dashboard/expenses',
3916
+ path: {
3917
+ region: data.region
3918
+ },
2570
3919
  query: {
3920
+ groupBy: data.groupBy,
2571
3921
  period: data.period,
2572
- granularity: data.granularity
3922
+ flow: data.flow
2573
3923
  },
2574
3924
  errors: {
3925
+ 400: 'Invalid groupBy or period',
2575
3926
  401: 'User not authenticated'
2576
3927
  }
2577
3928
  });
2578
3929
  }
3930
+ }
2579
3931
 
3932
+ export class InvestmentService {
2580
3933
  /**
2581
- * Generate portfolio snapshot
2582
- *
2583
- * Manually generate a portfolio snapshot for a specific date.
2584
- *
2585
- * **Multi-currency Support:**
2586
- * - Fetches balances grouped by currency
2587
- * - Uses user's baseCurrency setting for conversion
2588
- * - Stores exchange rates and warnings
2589
- *
2590
- * **Use Cases:**
2591
- * - Testing snapshot generation
2592
- * - Force regeneration after data correction
2593
- * - Initial setup for new users
2594
- *
3934
+ * Get per-holding unrealized + realized P&L
3935
+ * Average-cost unrealized P&L per account × commodity, plus cumulative realized P&L on sold lots (method = FIFO | average, default average).
2595
3936
  * @param data The data for the request.
2596
- * @param data.requestBody Optional date (defaults to today)
2597
- * @returns GenerateSnapshotResponse Snapshot generated successfully
3937
+ * @param data.region Region code for tenant context
3938
+ * @param data.asOf As-of date (ISO 8601), defaults to today
3939
+ * @param data.accountId Scope to a single account
3940
+ * @param data.method Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
3941
+ * @returns HoldingPnlResponseDto Holding P&L retrieved successfully
2598
3942
  * @throws ApiError
2599
3943
  */
2600
- public static reportingControllerGenerateSnapshot(
2601
- data: ReportingControllerGenerateSnapshotData
2602
- ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
3944
+ public static holdingPnlControllerGetHoldingPnl(
3945
+ data: HoldingPnlControllerGetHoldingPnlData
3946
+ ): CancelablePromise<HoldingPnlControllerGetHoldingPnlResponse> {
2603
3947
  return __request(OpenAPI, {
2604
- method: 'POST',
2605
- url: '/api/v1/{region}/reporting/snapshots/generate',
2606
- body: data.requestBody,
2607
- mediaType: 'application/json',
3948
+ method: 'GET',
3949
+ url: '/api/v1/{region}/investment/holdings/pnl',
3950
+ path: {
3951
+ region: data.region
3952
+ },
3953
+ query: {
3954
+ asOf: data.asOf,
3955
+ accountId: data.accountId,
3956
+ method: data.method
3957
+ },
2608
3958
  errors: {
2609
- 400: 'Invalid date format',
3959
+ 400: 'Invalid asOf format/value/future date, invalid accountId format, or unsupported method',
2610
3960
  401: 'User not authenticated'
2611
3961
  }
2612
3962
  });
2613
3963
  }
2614
-
2615
- /**
2616
- * Backfill portfolio snapshots
2617
- *
2618
- * Generate snapshots for a date range (historical data backfill).
2619
- *
2620
- * **Multi-currency Support:**
2621
- * - Each snapshot includes multi-currency data
2622
- * - Uses exchange rates available at generation time
2623
- * - Warnings stored for missing exchange rates
2624
- *
2625
- * **Best Practices:**
2626
- * - Use for initial setup after account configuration
2627
- * - Run during low-traffic periods for large date ranges
2628
- * - Existing snapshots are skipped (not regenerated)
2629
- *
2630
- * @param data The data for the request.
2631
- * @param data.requestBody
2632
- * @returns BackfillSnapshotsResponse Backfill completed successfully
2633
- * @throws ApiError
2634
- */
2635
- public static reportingControllerBackfillSnapshots(
2636
- data: ReportingControllerBackfillSnapshotsData
2637
- ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
2638
- return __request(OpenAPI, {
2639
- method: 'POST',
2640
- url: '/api/v1/{region}/reporting/snapshots/backfill',
2641
- body: data.requestBody,
2642
- mediaType: 'application/json',
2643
- errors: {
2644
- 400: 'Invalid date format or range',
2645
- 401: 'User not authenticated',
2646
- 409: 'Backfill already in progress for this user'
2647
- }
2648
- });
2649
- }
2650
3964
  }
2651
3965
 
2652
3966
  export class ApiKeysService {
2653
3967
  /**
2654
- * @returns unknown
3968
+ * Create API key
3969
+ * Generates a new API key for the authenticated user
3970
+ * @returns unknown API key created successfully
2655
3971
  * @throws ApiError
2656
3972
  */
2657
- public static apiKeysController(): CancelablePromise<ApiKeysControllerResponse> {
3973
+ public static apiKeysControllerCreateApiKey(): CancelablePromise<ApiKeysControllerCreateApiKeyResponse> {
2658
3974
  return __request(OpenAPI, {
2659
3975
  method: 'POST',
2660
- url: '/api/v1/auth/api-keys'
3976
+ url: '/api/v1/auth/api-keys',
3977
+ errors: {
3978
+ 403: 'Insufficient permissions to create API key'
3979
+ }
2661
3980
  });
2662
3981
  }
2663
3982
  }
@@ -2667,7 +3986,7 @@ export class AuthService {
2667
3986
  * Anonymous login with access token
2668
3987
  * @param data The data for the request.
2669
3988
  * @param data.requestBody
2670
- * @returns unknown Login successful
3989
+ * @returns AnonymousLoginResponseDto Login successful
2671
3990
  * @throws ApiError
2672
3991
  */
2673
3992
  public static authControllerAccessTokenLogin(
@@ -2685,6 +4004,19 @@ export class AuthService {
2685
4004
  }
2686
4005
  }
2687
4006
 
4007
+ export class DefaultService {
4008
+ /**
4009
+ * @returns unknown
4010
+ * @throws ApiError
4011
+ */
4012
+ public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
4013
+ return __request(OpenAPI, {
4014
+ method: 'POST',
4015
+ url: '/api/v1/cache/flush'
4016
+ });
4017
+ }
4018
+ }
4019
+
2688
4020
  export class ExchangeRateService {
2689
4021
  /**
2690
4022
  * Get exchange rate for currency pair
@@ -2743,6 +4075,21 @@ export class HealthService {
2743
4075
  });
2744
4076
  }
2745
4077
 
4078
+ /**
4079
+ * Check OpenBB schema status
4080
+ * @returns unknown OpenBB status
4081
+ * @throws ApiError
4082
+ */
4083
+ public static healthControllerCheckOpenBb(): CancelablePromise<HealthControllerCheckOpenBbResponse> {
4084
+ return __request(OpenAPI, {
4085
+ method: 'GET',
4086
+ url: '/api/v1/health/openbb',
4087
+ errors: {
4088
+ 503: 'OpenBB unavailable'
4089
+ }
4090
+ });
4091
+ }
4092
+
2746
4093
  /**
2747
4094
  * Check Redis connection health
2748
4095
  * @returns unknown Redis is healthy
@@ -2811,69 +4158,6 @@ export class HealthService {
2811
4158
  }
2812
4159
  });
2813
4160
  }
2814
-
2815
- /**
2816
- * Check health of a specific data enhancer
2817
- * @param data The data for the request.
2818
- * @param data.name Data enhancer name
2819
- * @returns unknown Data enhancer is healthy
2820
- * @throws ApiError
2821
- */
2822
- public static healthControllerGetHealthOfDataEnhancer(
2823
- data: HealthControllerGetHealthOfDataEnhancerData
2824
- ): CancelablePromise<HealthControllerGetHealthOfDataEnhancerResponse> {
2825
- return __request(OpenAPI, {
2826
- method: 'GET',
2827
- url: '/api/v1/health/data-enhancer/{name}',
2828
- path: {
2829
- name: data.name
2830
- },
2831
- errors: {
2832
- 401: 'Unauthorized',
2833
- 503: 'Data enhancer unavailable'
2834
- }
2835
- });
2836
- }
2837
-
2838
- /**
2839
- * Check health of all data providers
2840
- * @returns unknown Data providers health status
2841
- * @throws ApiError
2842
- */
2843
- public static healthControllerCheckDataProviders(): CancelablePromise<HealthControllerCheckDataProvidersResponse> {
2844
- return __request(OpenAPI, {
2845
- method: 'GET',
2846
- url: '/api/v1/health/data-providers',
2847
- errors: {
2848
- 401: 'Unauthorized',
2849
- 503: 'Data providers check failed'
2850
- }
2851
- });
2852
- }
2853
-
2854
- /**
2855
- * Check health of a specific data provider
2856
- * @param data The data for the request.
2857
- * @param data.dataSource Data source identifier
2858
- * @returns unknown Data provider is healthy
2859
- * @throws ApiError
2860
- */
2861
- public static healthControllerGetHealthOfDataProvider(
2862
- data: HealthControllerGetHealthOfDataProviderData
2863
- ): CancelablePromise<HealthControllerGetHealthOfDataProviderResponse> {
2864
- return __request(OpenAPI, {
2865
- method: 'GET',
2866
- url: '/api/v1/health/data-provider/{dataSource}',
2867
- path: {
2868
- dataSource: data.dataSource
2869
- },
2870
- errors: {
2871
- 400: 'Invalid data source',
2872
- 401: 'Unauthorized',
2873
- 503: 'Data provider unavailable'
2874
- }
2875
- });
2876
- }
2877
4161
  }
2878
4162
 
2879
4163
  export class InfoService {
@@ -2890,92 +4174,52 @@ export class InfoService {
2890
4174
  }
2891
4175
  }
2892
4176
 
2893
- export class LogosService {
2894
- /**
2895
- * Get asset logo by data source and symbol
2896
- * @param data The data for the request.
2897
- * @param data.dataSource Data source identifier (e.g., YAHOO, COINGECKO)
2898
- * @param data.symbol Asset symbol (e.g., AAPL, BTC)
2899
- * @returns unknown Logo image stream (favicon)
2900
- * @throws ApiError
2901
- */
2902
- public static logoControllerGetLogoByDataSourceAndSymbol(
2903
- data: LogoControllerGetLogoByDataSourceAndSymbolData
2904
- ): CancelablePromise<LogoControllerGetLogoByDataSourceAndSymbolResponse> {
2905
- return __request(OpenAPI, {
2906
- method: 'GET',
2907
- url: '/api/v1/market/logos/{dataSource}/{symbol}',
2908
- path: {
2909
- dataSource: data.dataSource,
2910
- symbol: data.symbol
2911
- },
2912
- errors: {
2913
- 401: 'Unauthorized',
2914
- 404: 'Logo not found for the specified asset',
2915
- 503: 'Service unavailable'
2916
- }
2917
- });
2918
- }
2919
-
4177
+ export class MarketDataService {
2920
4178
  /**
2921
- * Get website favicon by URL
4179
+ * Search market symbols by name or code
4180
+ * Ranked search over the openbb catalog. Empty `q` returns [].
2922
4181
  * @param data The data for the request.
2923
- * @param data.url Website URL to fetch favicon from
2924
- * @returns unknown Logo image stream (favicon)
4182
+ * @param data.q Search term — matched against symbol and instrument name. Empty string returns [].
4183
+ * @param data.limit Maximum number of results (clamped 1..50)
4184
+ * @param data.exchange Filter by exchange code (e.g. US, HK, SS, SZ)
4185
+ * @param data.assetType Filter by OpenBB asset_type (e.g. stock, etf)
4186
+ * @returns SymbolSearchResultDto Ranked search results
2925
4187
  * @throws ApiError
2926
4188
  */
2927
- public static logoControllerGetLogoByUrl(
2928
- data: LogoControllerGetLogoByUrlData
2929
- ): CancelablePromise<LogoControllerGetLogoByUrlResponse> {
4189
+ public static symbolControllerSearch(
4190
+ data: SymbolControllerSearchData
4191
+ ): CancelablePromise<SymbolControllerSearchResponse> {
2930
4192
  return __request(OpenAPI, {
2931
4193
  method: 'GET',
2932
- url: '/api/v1/market/logos',
4194
+ url: '/api/v1/market/symbols/search',
2933
4195
  query: {
2934
- url: data.url
2935
- },
2936
- errors: {
2937
- 401: 'Unauthorized',
2938
- 503: 'Service unavailable'
4196
+ q: data.q,
4197
+ limit: data.limit,
4198
+ exchange: data.exchange,
4199
+ assetType: data.assetType
2939
4200
  }
2940
4201
  });
2941
4202
  }
2942
- }
2943
4203
 
2944
- export class MarketDataService {
2945
4204
  /**
2946
- * Get market data by symbol
2947
- * Retrieves market data and asset profile for a given symbol and data source
4205
+ * Get a market symbol quote
2948
4206
  * @param data The data for the request.
2949
- * @param data.dataSource Data source provider
2950
- * @param data.symbol Symbol code
2951
- * @returns unknown Market data retrieved successfully
4207
+ * @param data.symbol
4208
+ * @returns SymbolQuoteDto Symbol quote
2952
4209
  * @throws ApiError
2953
4210
  */
2954
- public static marketDataControllerGetMarketDataBySymbol(
2955
- data: MarketDataControllerGetMarketDataBySymbolData
2956
- ): CancelablePromise<MarketDataControllerGetMarketDataBySymbolResponse> {
4211
+ public static symbolControllerGetQuote(
4212
+ data: SymbolControllerGetQuoteData
4213
+ ): CancelablePromise<SymbolControllerGetQuoteResponse> {
2957
4214
  return __request(OpenAPI, {
2958
4215
  method: 'GET',
2959
- url: '/api/v1/market-data/{dataSource}/{symbol}',
4216
+ url: '/api/v1/market/symbols/{symbol}/quote',
2960
4217
  path: {
2961
- dataSource: data.dataSource,
2962
4218
  symbol: data.symbol
2963
4219
  },
2964
4220
  errors: {
2965
- 403: 'Insufficient permissions to read market data',
2966
- 404: 'Market data not found'
4221
+ 404: 'Symbol not found in the openbb catalog'
2967
4222
  }
2968
4223
  });
2969
4224
  }
2970
-
2971
- /**
2972
- * @returns unknown
2973
- * @throws ApiError
2974
- */
2975
- public static marketDataController(): CancelablePromise<MarketDataControllerResponse> {
2976
- return __request(OpenAPI, {
2977
- method: 'POST',
2978
- url: '/api/v1/market-data/{dataSource}/{symbol}'
2979
- });
2980
- }
2981
4225
  }