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

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,40 @@ 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
- InfoControllerGetInfoResponse,
222
- LogoControllerGetLogoByDataSourceAndSymbolData,
223
- LogoControllerGetLogoByDataSourceAndSymbolResponse,
224
- LogoControllerGetLogoByUrlData,
225
- LogoControllerGetLogoByUrlResponse,
226
- MarketDataControllerGetMarketDataBySymbolData,
227
- MarketDataControllerGetMarketDataBySymbolResponse,
228
- MarketDataControllerResponse
291
+ InfoControllerGetInfoResponse
229
292
  } from './types.gen';
230
293
 
231
294
  export class BeanAccountsService {
@@ -263,7 +326,7 @@ export class BeanAccountsService {
263
326
  * @param data.type Filter by account type
264
327
  * @param data.status Filter by status
265
328
  * @param data.isCustom Filter by custom (user-created) accounts only
266
- * @param data.search Search term for path or i18nKey
329
+ * @param data.search Search term for account path
267
330
  * @param data.limit Maximum number of results
268
331
  * @param data.offset Number of results to skip
269
332
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -425,6 +488,107 @@ export class BeanAccountsService {
425
488
  }
426
489
  });
427
490
  }
491
+
492
+ /**
493
+ * Post an opening-balance transaction
494
+ * 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.
495
+ * @param data The data for the request.
496
+ * @param data.id Account UUID
497
+ * @param data.region Region code for tenant context
498
+ * @param data.requestBody
499
+ * @returns OpeningBalanceResultDto Opening-balance transaction created
500
+ * @throws ApiError
501
+ */
502
+ public static accountControllerAddOpeningBalance(
503
+ data: AccountControllerAddOpeningBalanceData
504
+ ): CancelablePromise<AccountControllerAddOpeningBalanceResponse> {
505
+ return __request(OpenAPI, {
506
+ method: 'POST',
507
+ url: '/api/v1/{region}/bean/accounts/{id}/opening-balance',
508
+ path: {
509
+ id: data.id,
510
+ region: data.region
511
+ },
512
+ body: data.requestBody,
513
+ mediaType: 'application/json',
514
+ errors: {
515
+ 404: 'Account not found',
516
+ 409: 'An opening balance already exists for this account'
517
+ }
518
+ });
519
+ }
520
+ }
521
+
522
+ export class BeanAccountStandardsService {
523
+ /**
524
+ * Get account templates
525
+ * Returns predefined account templates for a region. Supports filtering by account type and search term.
526
+ * @param data The data for the request.
527
+ * @param data.region Region code (cn, us, de)
528
+ * @param data.type Filter by account type
529
+ * @param data.search Search term for path or description
530
+ * @returns AccountStandardListResponseDto Account templates retrieved successfully
531
+ * @throws ApiError
532
+ */
533
+ public static accountStandardsControllerGetTemplates(
534
+ data: AccountStandardsControllerGetTemplatesData
535
+ ): CancelablePromise<AccountStandardsControllerGetTemplatesResponse> {
536
+ return __request(OpenAPI, {
537
+ method: 'GET',
538
+ url: '/api/v1/{region}/bean/account-standards',
539
+ path: {
540
+ region: data.region
541
+ },
542
+ query: {
543
+ type: data.type,
544
+ search: data.search
545
+ }
546
+ });
547
+ }
548
+
549
+ /**
550
+ * Get template metadata for an account path
551
+ * Returns root type for a template path.
552
+ * @param data The data for the request.
553
+ * @param data.region Region code for tenant context
554
+ * @param data.path Account path to check
555
+ * @returns TemplateMetadataResponseDto Template metadata retrieved successfully
556
+ * @throws ApiError
557
+ */
558
+ public static accountStandardsControllerGetTemplateMetadata(
559
+ data: AccountStandardsControllerGetTemplateMetadataData
560
+ ): CancelablePromise<AccountStandardsControllerGetTemplateMetadataResponse> {
561
+ return __request(OpenAPI, {
562
+ method: 'GET',
563
+ url: '/api/v1/{region}/bean/account-standards/template-metadata',
564
+ path: {
565
+ region: data.region
566
+ },
567
+ query: {
568
+ path: data.path
569
+ }
570
+ });
571
+ }
572
+
573
+ /**
574
+ * Get available regions with hierarchy
575
+ * Returns supported regions with inheritance metadata
576
+ * @param data The data for the request.
577
+ * @param data.region Region code for tenant context
578
+ * @returns RegionsMetadataResponseDto Regions metadata retrieved successfully
579
+ * @throws ApiError
580
+ */
581
+ public static accountStandardsControllerGetRegions(
582
+ data: AccountStandardsControllerGetRegionsData
583
+ ): CancelablePromise<AccountStandardsControllerGetRegionsResponse> {
584
+ return __request(OpenAPI, {
585
+ method: 'GET',
586
+ url: '/api/v1/{region}/bean/account-standards/regions',
587
+ path: {
588
+ region: data.region
589
+ }
590
+ });
591
+ }
428
592
  }
429
593
 
430
594
  export class BeanTransactionsService {
@@ -470,6 +634,7 @@ export class BeanTransactionsService {
470
634
  * @param data.status Filter by transaction status
471
635
  * @param data.search Search in narration and payee fields (max 200 chars)
472
636
  * @param data.accountId Filter by account ID (transactions with postings to this account)
637
+ * @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
638
  * @returns TransactionListResponseDto Transaction list
474
639
  * @throws ApiError
475
640
  */
@@ -489,28 +654,102 @@ export class BeanTransactionsService {
489
654
  dateTo: data.dateTo,
490
655
  status: data.status,
491
656
  search: data.search,
492
- accountId: data.accountId
657
+ accountId: data.accountId,
658
+ category: data.category
493
659
  },
494
660
  errors: {
661
+ 400: 'Validation failed',
495
662
  401: 'Authentication required'
496
663
  }
497
664
  });
498
665
  }
499
666
 
500
667
  /**
668
+ * @deprecated
669
+ * Batch create transactions (DEPRECATED)
670
+ * DEPRECATED: Use POST /:region/bean/import/provider/:name/sync instead. This endpoint skips dedup, rule matching, and review branching.
501
671
  * @param data The data for the request.
502
672
  * @param data.region Region code for tenant context
503
- * @returns unknown
673
+ * @param data.requestBody
674
+ * @returns BatchTransactionResponseDto Transactions processed
504
675
  * @throws ApiError
505
676
  */
506
- public static transactionController(
507
- data: TransactionControllerData
508
- ): CancelablePromise<TransactionControllerResponse> {
677
+ public static transactionControllerCreateBatch(
678
+ data: TransactionControllerCreateBatchData
679
+ ): CancelablePromise<TransactionControllerCreateBatchResponse> {
509
680
  return __request(OpenAPI, {
510
681
  method: 'POST',
511
682
  url: '/api/v1/{region}/bean/transactions/batch',
512
683
  path: {
513
684
  region: data.region
685
+ },
686
+ body: data.requestBody,
687
+ mediaType: 'application/json',
688
+ errors: {
689
+ 400: 'Invalid input',
690
+ 401: 'Authentication required'
691
+ }
692
+ });
693
+ }
694
+
695
+ /**
696
+ * Correct (supersede) a transaction
697
+ * Atomically voids the original (SUPERSEDED) and creates a replacement through the full validation pipeline.
698
+ * @param data The data for the request.
699
+ * @param data.id Original transaction ID to correct
700
+ * @param data.region Region code for tenant context
701
+ * @param data.requestBody
702
+ * @returns TransactionDetailDto Corrected transaction created
703
+ * @throws ApiError
704
+ */
705
+ public static transactionControllerCorrect(
706
+ data: TransactionControllerCorrectData
707
+ ): CancelablePromise<TransactionControllerCorrectResponse> {
708
+ return __request(OpenAPI, {
709
+ method: 'POST',
710
+ url: '/api/v1/{region}/bean/transactions/{id}/correct',
711
+ path: {
712
+ id: data.id,
713
+ region: data.region
714
+ },
715
+ body: data.requestBody,
716
+ mediaType: 'application/json',
717
+ errors: {
718
+ 404: 'Original transaction not found',
719
+ 409: 'Original no longer ACTIVE (concurrent modification)',
720
+ 422: 'Pipeline validation failed (does not balance, invalid accounts)'
721
+ }
722
+ });
723
+ }
724
+
725
+ /**
726
+ * Suggest transaction tags
727
+ * Returns distinct tags from the user ACTIVE transactions, sorted by usage, for autocomplete. Optional q performs a case-insensitive prefix match.
728
+ * @param data The data for the request.
729
+ * @param data.region Region code for tenant context
730
+ * @param data.q Prefix match, case-insensitive (max 50 chars)
731
+ * @param data.sort usage (default) or name
732
+ * @param data.limit Max suggestions (1-100, default 10)
733
+ * @returns TagSuggestionsResponseDto Tag suggestions
734
+ * @throws ApiError
735
+ */
736
+ public static transactionControllerSuggestTags(
737
+ data: TransactionControllerSuggestTagsData
738
+ ): CancelablePromise<TransactionControllerSuggestTagsResponse> {
739
+ return __request(OpenAPI, {
740
+ method: 'GET',
741
+ url: '/api/v1/{region}/bean/transactions/tags',
742
+ path: {
743
+ region: data.region
744
+ },
745
+ query: {
746
+ q: data.q,
747
+ sort: data.sort,
748
+ limit: data.limit
749
+ },
750
+ errors: {
751
+ 400: 'Validation failed',
752
+ 401: 'Authentication required'
514
753
  }
515
754
  });
516
755
  }
@@ -572,63 +811,31 @@ export class BeanTransactionsService {
572
811
  }
573
812
 
574
813
  /**
814
+ * Void transaction
815
+ * Soft-deletes a transaction by marking it as VOIDED
575
816
  * @param data The data for the request.
817
+ * @param data.id Transaction ID
576
818
  * @param data.region Region code for tenant context
577
- * @returns void
819
+ * @returns void Transaction voided successfully
578
820
  * @throws ApiError
579
821
  */
580
- public static transactionController1(
581
- data: TransactionController1Data
582
- ): CancelablePromise<TransactionController1Response> {
822
+ public static transactionControllerDelete(
823
+ data: TransactionControllerDeleteData
824
+ ): CancelablePromise<TransactionControllerDeleteResponse> {
583
825
  return __request(OpenAPI, {
584
826
  method: 'DELETE',
585
827
  url: '/api/v1/{region}/bean/transactions/{id}',
586
828
  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: {
829
+ id: data.id,
611
830
  region: data.region
612
831
  },
613
- query: {
614
- type: data.type,
615
- search: data.search
832
+ errors: {
833
+ 400: 'Transaction already voided',
834
+ 401: 'Authentication required',
835
+ 404: 'Transaction not found'
616
836
  }
617
837
  });
618
838
  }
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
839
  }
633
840
 
634
841
  export class BeanBalancesService {
@@ -636,7 +843,8 @@ export class BeanBalancesService {
636
843
  * Query account balance
637
844
  * Calculate account balance at a specific date for a single currency
638
845
  * @param data The data for the request.
639
- * @param data.account Account name (e.g., "Assets:Bank:Checking")
846
+ * @param data.account Account name (e.g., "Assets:Checking")
847
+ * @param data.region Region code for tenant context
640
848
  * @param data.date Date to calculate balance at (ISO 8601 format)
641
849
  * @param data.currency Currency to query (e.g., "USD", "CNY")
642
850
  * @returns BalanceResponseDto Balance calculated successfully
@@ -648,6 +856,9 @@ export class BeanBalancesService {
648
856
  return __request(OpenAPI, {
649
857
  method: 'GET',
650
858
  url: '/api/v1/{region}/bean/balances',
859
+ path: {
860
+ region: data.region
861
+ },
651
862
  query: {
652
863
  account: data.account,
653
864
  date: data.date,
@@ -663,13 +874,20 @@ export class BeanBalancesService {
663
874
  /**
664
875
  * Query multi-currency account balance
665
876
  * Calculate account balances for all currencies at a specific date
877
+ * @param data The data for the request.
878
+ * @param data.region Region code for tenant context
666
879
  * @returns MultiCurrencyBalanceResponseDto Balances calculated successfully
667
880
  * @throws ApiError
668
881
  */
669
- public static balanceControllerGetMultiCurrencyBalance(): CancelablePromise<BalanceControllerGetMultiCurrencyBalanceResponse> {
882
+ public static balanceControllerGetMultiCurrencyBalance(
883
+ data: BalanceControllerGetMultiCurrencyBalanceData
884
+ ): CancelablePromise<BalanceControllerGetMultiCurrencyBalanceResponse> {
670
885
  return __request(OpenAPI, {
671
886
  method: 'GET',
672
887
  url: '/api/v1/{region}/bean/balances/multi-currency',
888
+ path: {
889
+ region: data.region
890
+ },
673
891
  errors: {
674
892
  400: 'Invalid query parameters',
675
893
  401: 'User not authenticated'
@@ -751,69 +969,94 @@ export class BeanReviewsService {
751
969
  }
752
970
 
753
971
  /**
972
+ * Resolve a review item
754
973
  * @param data The data for the request.
974
+ * @param data.id Review ID
755
975
  * @param data.region Region code for tenant context
756
- * @returns unknown
976
+ * @param data.requestBody
977
+ * @returns ResolveResultDto
757
978
  * @throws ApiError
758
979
  */
759
- public static reviewController(
760
- data: ReviewControllerData
761
- ): CancelablePromise<ReviewControllerResponse> {
980
+ public static reviewControllerResolve(
981
+ data: ReviewControllerResolveData
982
+ ): CancelablePromise<ReviewControllerResolveResponse> {
762
983
  return __request(OpenAPI, {
763
984
  method: 'POST',
764
985
  url: '/api/v1/{region}/bean/reviews/{id}/resolve',
765
986
  path: {
987
+ id: data.id,
766
988
  region: data.region
767
- }
989
+ },
990
+ body: data.requestBody,
991
+ mediaType: 'application/json'
768
992
  });
769
993
  }
770
994
 
771
995
  /**
996
+ * Undo a resolution (within 24h)
772
997
  * @param data The data for the request.
998
+ * @param data.id Review ID
773
999
  * @param data.region Region code for tenant context
774
- * @returns unknown
1000
+ * @returns UndoResultDto
775
1001
  * @throws ApiError
776
1002
  */
777
- public static reviewController1(
778
- data: ReviewController1Data
779
- ): CancelablePromise<ReviewController1Response> {
1003
+ public static reviewControllerUndo(
1004
+ data: ReviewControllerUndoData
1005
+ ): CancelablePromise<ReviewControllerUndoResponse> {
780
1006
  return __request(OpenAPI, {
781
1007
  method: 'POST',
782
1008
  url: '/api/v1/{region}/bean/reviews/{id}/undo',
783
1009
  path: {
1010
+ id: data.id,
784
1011
  region: data.region
785
1012
  }
786
1013
  });
787
1014
  }
788
1015
 
789
1016
  /**
1017
+ * Batch resolve multiple reviews
790
1018
  * @param data The data for the request.
791
1019
  * @param data.region Region code for tenant context
792
- * @returns unknown
1020
+ * @param data.requestBody Batch resolution request containing review IDs and action
1021
+ * @returns BatchResolveResultDto
793
1022
  * @throws ApiError
794
1023
  */
795
- public static reviewController2(
796
- data: ReviewController2Data
797
- ): CancelablePromise<ReviewController2Response> {
1024
+ public static reviewControllerBatchResolve(
1025
+ data: ReviewControllerBatchResolveData
1026
+ ): CancelablePromise<ReviewControllerBatchResolveResponse> {
798
1027
  return __request(OpenAPI, {
799
1028
  method: 'POST',
800
1029
  url: '/api/v1/{region}/bean/reviews/batch-resolve',
801
1030
  path: {
802
1031
  region: data.region
803
- }
1032
+ },
1033
+ body: data.requestBody,
1034
+ mediaType: 'application/json'
804
1035
  });
805
1036
  }
806
1037
  }
807
1038
 
808
1039
  export class BeanPayeesService {
809
1040
  /**
810
- * @returns unknown
1041
+ * Create a new payee
1042
+ * Creates a new payee mapping for the authenticated user. The payee name must be unique within the user's account.
1043
+ * @param data The data for the request.
1044
+ * @param data.requestBody
1045
+ * @returns PayeeResponseDto Payee created successfully
811
1046
  * @throws ApiError
812
1047
  */
813
- public static payeeController(): CancelablePromise<PayeeControllerResponse> {
1048
+ public static payeeControllerCreate(
1049
+ data: PayeeControllerCreateData
1050
+ ): CancelablePromise<PayeeControllerCreateResponse> {
814
1051
  return __request(OpenAPI, {
815
1052
  method: 'POST',
816
- url: '/api/v1/bean/payees'
1053
+ url: '/api/v1/bean/payees',
1054
+ body: data.requestBody,
1055
+ mediaType: 'application/json',
1056
+ errors: {
1057
+ 400: 'Invalid input data',
1058
+ 409: 'Payee already exists'
1059
+ }
817
1060
  });
818
1061
  }
819
1062
 
@@ -912,37 +1155,78 @@ export class BeanPayeesService {
912
1155
  }
913
1156
 
914
1157
  /**
915
- * @returns unknown
1158
+ * Update payee
1159
+ * Updates a payee mapping. The payee name cannot be changed after creation.
1160
+ * @param data The data for the request.
1161
+ * @param data.id Payee UUID
1162
+ * @param data.requestBody
1163
+ * @returns PayeeResponseDto Payee updated successfully
916
1164
  * @throws ApiError
917
1165
  */
918
- public static payeeController1(): CancelablePromise<PayeeController1Response> {
1166
+ public static payeeControllerUpdate(
1167
+ data: PayeeControllerUpdateData
1168
+ ): CancelablePromise<PayeeControllerUpdateResponse> {
919
1169
  return __request(OpenAPI, {
920
1170
  method: 'PUT',
921
- url: '/api/v1/bean/payees/{id}'
922
- });
923
- }
1171
+ url: '/api/v1/bean/payees/{id}',
1172
+ path: {
1173
+ id: data.id
1174
+ },
1175
+ body: data.requestBody,
1176
+ mediaType: 'application/json',
1177
+ errors: {
1178
+ 400: 'Invalid input data',
1179
+ 404: 'Payee not found'
1180
+ }
1181
+ });
1182
+ }
924
1183
 
925
1184
  /**
926
- * @returns void
1185
+ * Delete payee
1186
+ * Soft deletes a payee by marking it as inactive. Inactive payees will not appear in autocomplete suggestions.
1187
+ * @param data The data for the request.
1188
+ * @param data.id Payee UUID
1189
+ * @returns void Payee deleted successfully
927
1190
  * @throws ApiError
928
1191
  */
929
- public static payeeController2(): CancelablePromise<PayeeController2Response> {
1192
+ public static payeeControllerDelete(
1193
+ data: PayeeControllerDeleteData
1194
+ ): CancelablePromise<PayeeControllerDeleteResponse> {
930
1195
  return __request(OpenAPI, {
931
1196
  method: 'DELETE',
932
- url: '/api/v1/bean/payees/{id}'
1197
+ url: '/api/v1/bean/payees/{id}',
1198
+ path: {
1199
+ id: data.id
1200
+ },
1201
+ errors: {
1202
+ 404: 'Payee not found'
1203
+ }
933
1204
  });
934
1205
  }
935
1206
  }
936
1207
 
937
1208
  export class AdminPayeeProfilesService {
938
1209
  /**
939
- * @returns unknown
1210
+ * Create payee profile (Admin only)
1211
+ * Creates a new global payee profile. The canonical name must be unique (case-insensitive).
1212
+ * @param data The data for the request.
1213
+ * @param data.requestBody
1214
+ * @returns PayeeProfileResponseDto Payee profile created successfully
940
1215
  * @throws ApiError
941
1216
  */
942
- public static payeeProfileAdminController(): CancelablePromise<PayeeProfileAdminControllerResponse> {
1217
+ public static payeeProfileAdminControllerCreate(
1218
+ data: PayeeProfileAdminControllerCreateData
1219
+ ): CancelablePromise<PayeeProfileAdminControllerCreateResponse> {
943
1220
  return __request(OpenAPI, {
944
1221
  method: 'POST',
945
- url: '/api/v1/admin/payee-profiles'
1222
+ url: '/api/v1/admin/payee-profiles',
1223
+ body: data.requestBody,
1224
+ mediaType: 'application/json',
1225
+ errors: {
1226
+ 400: 'Validation failed',
1227
+ 403: 'Admin access required',
1228
+ 409: 'Payee profile already exists'
1229
+ }
946
1230
  });
947
1231
  }
948
1232
 
@@ -1004,65 +1288,130 @@ export class AdminPayeeProfilesService {
1004
1288
  }
1005
1289
 
1006
1290
  /**
1007
- * @returns unknown
1291
+ * Update payee profile (Admin only)
1292
+ * Updates an existing payee profile. The canonical name cannot be changed.
1293
+ * @param data The data for the request.
1294
+ * @param data.id Payee profile ID (UUID)
1295
+ * @param data.requestBody
1296
+ * @returns PayeeProfileResponseDto Payee profile updated successfully
1008
1297
  * @throws ApiError
1009
1298
  */
1010
- public static payeeProfileAdminController1(): CancelablePromise<PayeeProfileAdminController1Response> {
1299
+ public static payeeProfileAdminControllerUpdate(
1300
+ data: PayeeProfileAdminControllerUpdateData
1301
+ ): CancelablePromise<PayeeProfileAdminControllerUpdateResponse> {
1011
1302
  return __request(OpenAPI, {
1012
1303
  method: 'PUT',
1013
- url: '/api/v1/admin/payee-profiles/{id}'
1304
+ url: '/api/v1/admin/payee-profiles/{id}',
1305
+ path: {
1306
+ id: data.id
1307
+ },
1308
+ body: data.requestBody,
1309
+ mediaType: 'application/json',
1310
+ errors: {
1311
+ 403: 'Admin access required',
1312
+ 404: 'Payee profile not found'
1313
+ }
1014
1314
  });
1015
1315
  }
1016
1316
 
1017
1317
  /**
1018
- * @returns void
1318
+ * Soft delete payee profile (Admin only)
1319
+ * Marks a payee profile as inactive (soft delete). The profile cannot be deleted if it is referenced by user payees.
1320
+ * @param data The data for the request.
1321
+ * @param data.id Payee profile ID (UUID)
1322
+ * @returns void Payee profile deleted successfully
1019
1323
  * @throws ApiError
1020
1324
  */
1021
- public static payeeProfileAdminController2(): CancelablePromise<PayeeProfileAdminController2Response> {
1325
+ public static payeeProfileAdminControllerDelete(
1326
+ data: PayeeProfileAdminControllerDeleteData
1327
+ ): CancelablePromise<PayeeProfileAdminControllerDeleteResponse> {
1022
1328
  return __request(OpenAPI, {
1023
1329
  method: 'DELETE',
1024
- url: '/api/v1/admin/payee-profiles/{id}'
1330
+ url: '/api/v1/admin/payee-profiles/{id}',
1331
+ path: {
1332
+ id: data.id
1333
+ },
1334
+ errors: {
1335
+ 403: 'Admin access required',
1336
+ 404: 'Payee profile not found',
1337
+ 409: 'Payee profile is in use and cannot be deleted'
1338
+ }
1025
1339
  });
1026
1340
  }
1027
1341
 
1028
1342
  /**
1029
- * @returns unknown
1343
+ * Verify payee profile (Admin only)
1344
+ * Marks a payee profile as verified by setting verifiedAt to current timestamp.
1345
+ * @param data The data for the request.
1346
+ * @param data.id Payee profile ID (UUID)
1347
+ * @returns PayeeProfileResponseDto Payee profile verified successfully
1030
1348
  * @throws ApiError
1031
1349
  */
1032
- public static payeeProfileAdminController3(): CancelablePromise<PayeeProfileAdminController3Response> {
1350
+ public static payeeProfileAdminControllerVerify(
1351
+ data: PayeeProfileAdminControllerVerifyData
1352
+ ): CancelablePromise<PayeeProfileAdminControllerVerifyResponse> {
1033
1353
  return __request(OpenAPI, {
1034
1354
  method: 'POST',
1035
- url: '/api/v1/admin/payee-profiles/{id}/verify'
1355
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1356
+ path: {
1357
+ id: data.id
1358
+ },
1359
+ errors: {
1360
+ 403: 'Admin access required',
1361
+ 404: 'Payee profile not found'
1362
+ }
1036
1363
  });
1037
1364
  }
1038
1365
 
1039
1366
  /**
1040
- * @returns unknown
1367
+ * Unverify payee profile (Admin only)
1368
+ * Removes verification status by setting verifiedAt to null.
1369
+ * @param data The data for the request.
1370
+ * @param data.id Payee profile ID (UUID)
1371
+ * @returns PayeeProfileResponseDto Payee profile unverified successfully
1041
1372
  * @throws ApiError
1042
1373
  */
1043
- public static payeeProfileAdminController4(): CancelablePromise<PayeeProfileAdminController4Response> {
1374
+ public static payeeProfileAdminControllerUnverify(
1375
+ data: PayeeProfileAdminControllerUnverifyData
1376
+ ): CancelablePromise<PayeeProfileAdminControllerUnverifyResponse> {
1044
1377
  return __request(OpenAPI, {
1045
1378
  method: 'DELETE',
1046
- url: '/api/v1/admin/payee-profiles/{id}/verify'
1379
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1380
+ path: {
1381
+ id: data.id
1382
+ },
1383
+ errors: {
1384
+ 403: 'Admin access required',
1385
+ 404: 'Payee profile not found'
1386
+ }
1047
1387
  });
1048
1388
  }
1049
1389
  }
1050
1390
 
1051
1391
  export class BeanCommoditiesService {
1052
1392
  /**
1393
+ * Create a new commodity
1394
+ * Creates a new commodity definition for the authenticated user
1053
1395
  * @param data The data for the request.
1054
1396
  * @param data.region Region code for tenant context
1055
- * @returns unknown
1397
+ * @param data.requestBody
1398
+ * @returns CommodityResponseDto Commodity created successfully
1056
1399
  * @throws ApiError
1057
1400
  */
1058
- public static commodityController(
1059
- data: CommodityControllerData
1060
- ): CancelablePromise<CommodityControllerResponse> {
1401
+ public static commodityControllerCreate(
1402
+ data: CommodityControllerCreateData
1403
+ ): CancelablePromise<CommodityControllerCreateResponse> {
1061
1404
  return __request(OpenAPI, {
1062
1405
  method: 'POST',
1063
1406
  url: '/api/v1/{region}/bean/commodities',
1064
1407
  path: {
1065
1408
  region: data.region
1409
+ },
1410
+ body: data.requestBody,
1411
+ mediaType: 'application/json',
1412
+ errors: {
1413
+ 400: 'Invalid input data',
1414
+ 409: 'Commodity already exists'
1066
1415
  }
1067
1416
  });
1068
1417
  }
@@ -1119,68 +1468,92 @@ export class BeanCommoditiesService {
1119
1468
  }
1120
1469
 
1121
1470
  /**
1471
+ * Update commodity
1472
+ * Updates an existing commodity definition. Symbol cannot be changed.
1122
1473
  * @param data The data for the request.
1474
+ * @param data.symbol Commodity symbol
1123
1475
  * @param data.region Region code for tenant context
1124
- * @returns unknown
1476
+ * @param data.requestBody
1477
+ * @returns CommodityResponseDto Commodity updated successfully
1125
1478
  * @throws ApiError
1126
1479
  */
1127
- public static commodityController1(
1128
- data: CommodityController1Data
1129
- ): CancelablePromise<CommodityController1Response> {
1480
+ public static commodityControllerUpdate(
1481
+ data: CommodityControllerUpdateData
1482
+ ): CancelablePromise<CommodityControllerUpdateResponse> {
1130
1483
  return __request(OpenAPI, {
1131
1484
  method: 'PUT',
1132
1485
  url: '/api/v1/{region}/bean/commodities/{symbol}',
1133
1486
  path: {
1487
+ symbol: data.symbol,
1134
1488
  region: data.region
1489
+ },
1490
+ body: data.requestBody,
1491
+ mediaType: 'application/json',
1492
+ errors: {
1493
+ 400: 'Invalid input data',
1494
+ 404: 'Commodity not found'
1135
1495
  }
1136
1496
  });
1137
1497
  }
1138
1498
 
1139
1499
  /**
1500
+ * Delete commodity
1501
+ * Deletes a commodity definition
1140
1502
  * @param data The data for the request.
1503
+ * @param data.symbol Commodity symbol
1141
1504
  * @param data.region Region code for tenant context
1142
- * @returns void
1505
+ * @returns void Commodity deleted successfully
1143
1506
  * @throws ApiError
1144
1507
  */
1145
- public static commodityController2(
1146
- data: CommodityController2Data
1147
- ): CancelablePromise<CommodityController2Response> {
1508
+ public static commodityControllerDelete(
1509
+ data: CommodityControllerDeleteData
1510
+ ): CancelablePromise<CommodityControllerDeleteResponse> {
1148
1511
  return __request(OpenAPI, {
1149
1512
  method: 'DELETE',
1150
1513
  url: '/api/v1/{region}/bean/commodities/{symbol}',
1151
1514
  path: {
1515
+ symbol: data.symbol,
1152
1516
  region: data.region
1517
+ },
1518
+ errors: {
1519
+ 404: 'Commodity not found'
1153
1520
  }
1154
1521
  });
1155
1522
  }
1156
1523
 
1157
1524
  /**
1525
+ * Ensure commodity exists
1526
+ * Gets existing commodity or creates it with automatic initialization from OpenBB
1158
1527
  * @param data The data for the request.
1528
+ * @param data.symbol Commodity symbol
1159
1529
  * @param data.region Region code for tenant context
1160
- * @returns unknown
1530
+ * @returns CommodityResponseDto Commodity retrieved or created
1161
1531
  * @throws ApiError
1162
1532
  */
1163
- public static commodityController3(
1164
- data: CommodityController3Data
1165
- ): CancelablePromise<CommodityController3Response> {
1533
+ public static commodityControllerGetOrCreate(
1534
+ data: CommodityControllerGetOrCreateData
1535
+ ): CancelablePromise<CommodityControllerGetOrCreateResponse> {
1166
1536
  return __request(OpenAPI, {
1167
1537
  method: 'POST',
1168
1538
  url: '/api/v1/{region}/bean/commodities/{symbol}/ensure',
1169
1539
  path: {
1540
+ symbol: data.symbol,
1170
1541
  region: data.region
1171
1542
  }
1172
1543
  });
1173
1544
  }
1174
1545
 
1175
1546
  /**
1547
+ * Bulk create commodities
1548
+ * Creates multiple commodities from a list of symbols, useful for initialization
1176
1549
  * @param data The data for the request.
1177
1550
  * @param data.region Region code for tenant context
1178
- * @returns unknown
1551
+ * @returns CommodityResponseDto Commodities created successfully
1179
1552
  * @throws ApiError
1180
1553
  */
1181
- public static commodityController4(
1182
- data: CommodityController4Data
1183
- ): CancelablePromise<CommodityController4Response> {
1554
+ public static commodityControllerBulkCreate(
1555
+ data: CommodityControllerBulkCreateData
1556
+ ): CancelablePromise<CommodityControllerBulkCreateResponse> {
1184
1557
  return __request(OpenAPI, {
1185
1558
  method: 'POST',
1186
1559
  url: '/api/v1/{region}/bean/commodities/bulk',
@@ -1191,21 +1564,197 @@ export class BeanCommoditiesService {
1191
1564
  }
1192
1565
  }
1193
1566
 
1567
+ export class BeanPricesService {
1568
+ /**
1569
+ * Create a new price
1570
+ * Creates a new price entry for the authenticated user
1571
+ * @param data The data for the request.
1572
+ * @param data.region Region code for tenant context
1573
+ * @param data.requestBody
1574
+ * @returns PriceResponseDto Price created successfully
1575
+ * @throws ApiError
1576
+ */
1577
+ public static priceControllerCreate(
1578
+ data: PriceControllerCreateData
1579
+ ): CancelablePromise<PriceControllerCreateResponse> {
1580
+ return __request(OpenAPI, {
1581
+ method: 'POST',
1582
+ url: '/api/v1/{region}/bean/prices',
1583
+ path: {
1584
+ region: data.region
1585
+ },
1586
+ body: data.requestBody,
1587
+ mediaType: 'application/json',
1588
+ errors: {
1589
+ 404: 'Currency or quoteCurrency commodity not found',
1590
+ 409: 'Price already exists for this currency pair and date'
1591
+ }
1592
+ });
1593
+ }
1594
+
1595
+ /**
1596
+ * List user prices
1597
+ * Returns all price entries for the authenticated user with optional filtering
1598
+ * @param data The data for the request.
1599
+ * @param data.region Region code for tenant context
1600
+ * @param data.currency Filter by currency (e.g., BTC, AAPL, USD)
1601
+ * @param data.quoteCurrency Filter by quote currency (pricing currency, e.g., USD, CNY)
1602
+ * @param data.dateFrom Filter prices from this date (ISO 8601 format)
1603
+ * @param data.dateTo Filter prices to this date (ISO 8601 format)
1604
+ * @param data.search Search term for currency or quoteCurrency (case-insensitive partial match)
1605
+ * @param data.page Page number for pagination (default: 1)
1606
+ * @param data.limit Number of items per page (default: 20, max: 100)
1607
+ * @returns PriceListResponseDto Prices retrieved successfully
1608
+ * @throws ApiError
1609
+ */
1610
+ public static priceControllerFindAll(
1611
+ data: PriceControllerFindAllData
1612
+ ): CancelablePromise<PriceControllerFindAllResponse> {
1613
+ return __request(OpenAPI, {
1614
+ method: 'GET',
1615
+ url: '/api/v1/{region}/bean/prices',
1616
+ path: {
1617
+ region: data.region
1618
+ },
1619
+ query: {
1620
+ currency: data.currency,
1621
+ quoteCurrency: data.quoteCurrency,
1622
+ dateFrom: data.dateFrom,
1623
+ dateTo: data.dateTo,
1624
+ search: data.search,
1625
+ page: data.page,
1626
+ limit: data.limit
1627
+ }
1628
+ });
1629
+ }
1630
+
1631
+ /**
1632
+ * Get price by ID
1633
+ * Returns a single price entry by its ID
1634
+ * @param data The data for the request.
1635
+ * @param data.id Price ID
1636
+ * @param data.region Region code for tenant context
1637
+ * @returns PriceResponseDto Price retrieved successfully
1638
+ * @throws ApiError
1639
+ */
1640
+ public static priceControllerFindOne(
1641
+ data: PriceControllerFindOneData
1642
+ ): CancelablePromise<PriceControllerFindOneResponse> {
1643
+ return __request(OpenAPI, {
1644
+ method: 'GET',
1645
+ url: '/api/v1/{region}/bean/prices/{id}',
1646
+ path: {
1647
+ id: data.id,
1648
+ region: data.region
1649
+ },
1650
+ errors: {
1651
+ 404: 'Price not found'
1652
+ }
1653
+ });
1654
+ }
1655
+
1656
+ /**
1657
+ * Update a price
1658
+ * Updates an existing price entry
1659
+ * @param data The data for the request.
1660
+ * @param data.id Price ID
1661
+ * @param data.region Region code for tenant context
1662
+ * @param data.requestBody
1663
+ * @returns PriceResponseDto Price updated successfully
1664
+ * @throws ApiError
1665
+ */
1666
+ public static priceControllerUpdate(
1667
+ data: PriceControllerUpdateData
1668
+ ): CancelablePromise<PriceControllerUpdateResponse> {
1669
+ return __request(OpenAPI, {
1670
+ method: 'PUT',
1671
+ url: '/api/v1/{region}/bean/prices/{id}',
1672
+ path: {
1673
+ id: data.id,
1674
+ region: data.region
1675
+ },
1676
+ body: data.requestBody,
1677
+ mediaType: 'application/json',
1678
+ errors: {
1679
+ 404: 'Price not found',
1680
+ 409: 'Updated price conflicts with existing price'
1681
+ }
1682
+ });
1683
+ }
1684
+
1685
+ /**
1686
+ * Delete a price
1687
+ * Deletes a price entry (hard delete)
1688
+ * @param data The data for the request.
1689
+ * @param data.id Price ID
1690
+ * @param data.region Region code for tenant context
1691
+ * @returns void Price deleted successfully
1692
+ * @throws ApiError
1693
+ */
1694
+ public static priceControllerDelete(
1695
+ data: PriceControllerDeleteData
1696
+ ): CancelablePromise<PriceControllerDeleteResponse> {
1697
+ return __request(OpenAPI, {
1698
+ method: 'DELETE',
1699
+ url: '/api/v1/{region}/bean/prices/{id}',
1700
+ path: {
1701
+ id: data.id,
1702
+ region: data.region
1703
+ },
1704
+ errors: {
1705
+ 404: 'Price not found'
1706
+ }
1707
+ });
1708
+ }
1709
+
1710
+ /**
1711
+ * Bulk create prices
1712
+ * Creates multiple price entries at once (skips duplicates)
1713
+ * @param data The data for the request.
1714
+ * @param data.region Region code for tenant context
1715
+ * @param data.requestBody
1716
+ * @returns PriceResponseDto Prices created successfully
1717
+ * @throws ApiError
1718
+ */
1719
+ public static priceControllerBulkCreate(
1720
+ data: PriceControllerBulkCreateData
1721
+ ): CancelablePromise<PriceControllerBulkCreateResponse> {
1722
+ return __request(OpenAPI, {
1723
+ method: 'POST',
1724
+ url: '/api/v1/{region}/bean/prices/bulk',
1725
+ path: {
1726
+ region: data.region
1727
+ },
1728
+ body: data.requestBody,
1729
+ mediaType: 'application/json'
1730
+ });
1731
+ }
1732
+ }
1733
+
1194
1734
  export class RecurringRulesService {
1195
1735
  /**
1736
+ * Create a new recurring rule
1737
+ * Creates a new recurring transaction rule for the authenticated user
1196
1738
  * @param data The data for the request.
1197
1739
  * @param data.region Region code for tenant context
1198
- * @returns unknown
1740
+ * @param data.requestBody
1741
+ * @returns RecurringRuleResponseDto Rule created successfully
1199
1742
  * @throws ApiError
1200
1743
  */
1201
- public static recurringRuleController(
1202
- data: RecurringRuleControllerData
1203
- ): CancelablePromise<RecurringRuleControllerResponse> {
1744
+ public static recurringRuleControllerCreate(
1745
+ data: RecurringRuleControllerCreateData
1746
+ ): CancelablePromise<RecurringRuleControllerCreateResponse> {
1204
1747
  return __request(OpenAPI, {
1205
1748
  method: 'POST',
1206
1749
  url: '/api/v1/{region}/bean/recurring-rules',
1207
1750
  path: {
1208
1751
  region: data.region
1752
+ },
1753
+ body: data.requestBody,
1754
+ mediaType: 'application/json',
1755
+ errors: {
1756
+ 400: 'Invalid input data (e.g., autoCreate without accounts)',
1757
+ 409: 'Rule with same name already exists'
1209
1758
  }
1210
1759
  });
1211
1760
  }
@@ -1239,19 +1788,30 @@ export class RecurringRulesService {
1239
1788
  }
1240
1789
 
1241
1790
  /**
1791
+ * Create recurring rule from transaction
1792
+ * Auto-creates a recurring rule using transaction data. User only confirms frequency.
1242
1793
  * @param data The data for the request.
1794
+ * @param data.transactionId Source transaction ID
1243
1795
  * @param data.region Region code for tenant context
1244
- * @returns unknown
1796
+ * @param data.requestBody
1797
+ * @returns RecurringRuleResponseDto Rule created successfully
1245
1798
  * @throws ApiError
1246
1799
  */
1247
- public static recurringRuleController1(
1248
- data: RecurringRuleController1Data
1249
- ): CancelablePromise<RecurringRuleController1Response> {
1800
+ public static recurringRuleControllerCreateFromTransaction(
1801
+ data: RecurringRuleControllerCreateFromTransactionData
1802
+ ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
1250
1803
  return __request(OpenAPI, {
1251
1804
  method: 'POST',
1252
1805
  url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
1253
1806
  path: {
1807
+ transactionId: data.transactionId,
1254
1808
  region: data.region
1809
+ },
1810
+ body: data.requestBody,
1811
+ mediaType: 'application/json',
1812
+ errors: {
1813
+ 404: 'Transaction not found',
1814
+ 409: 'Rule with same name already exists or transaction already linked'
1255
1815
  }
1256
1816
  });
1257
1817
  }
@@ -1282,37 +1842,55 @@ export class RecurringRulesService {
1282
1842
  }
1283
1843
 
1284
1844
  /**
1845
+ * Update recurring rule
1846
+ * Updates an existing recurring rule
1285
1847
  * @param data The data for the request.
1848
+ * @param data.id Rule ID
1286
1849
  * @param data.region Region code for tenant context
1287
- * @returns unknown
1850
+ * @param data.requestBody
1851
+ * @returns RecurringRuleResponseDto Rule updated successfully
1288
1852
  * @throws ApiError
1289
1853
  */
1290
- public static recurringRuleController2(
1291
- data: RecurringRuleController2Data
1292
- ): CancelablePromise<RecurringRuleController2Response> {
1854
+ public static recurringRuleControllerUpdate(
1855
+ data: RecurringRuleControllerUpdateData
1856
+ ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
1293
1857
  return __request(OpenAPI, {
1294
1858
  method: 'PATCH',
1295
1859
  url: '/api/v1/{region}/bean/recurring-rules/{id}',
1296
1860
  path: {
1861
+ id: data.id,
1297
1862
  region: data.region
1863
+ },
1864
+ body: data.requestBody,
1865
+ mediaType: 'application/json',
1866
+ errors: {
1867
+ 400: 'Invalid input data',
1868
+ 404: 'Rule not found'
1298
1869
  }
1299
1870
  });
1300
1871
  }
1301
1872
 
1302
1873
  /**
1874
+ * Delete recurring rule
1875
+ * Soft deletes a recurring rule (sets isActive to false)
1303
1876
  * @param data The data for the request.
1877
+ * @param data.id Rule ID
1304
1878
  * @param data.region Region code for tenant context
1305
- * @returns void
1879
+ * @returns void Rule deleted successfully
1306
1880
  * @throws ApiError
1307
1881
  */
1308
- public static recurringRuleController3(
1309
- data: RecurringRuleController3Data
1310
- ): CancelablePromise<RecurringRuleController3Response> {
1882
+ public static recurringRuleControllerDelete(
1883
+ data: RecurringRuleControllerDeleteData
1884
+ ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
1311
1885
  return __request(OpenAPI, {
1312
1886
  method: 'DELETE',
1313
1887
  url: '/api/v1/{region}/bean/recurring-rules/{id}',
1314
1888
  path: {
1889
+ id: data.id,
1315
1890
  region: data.region
1891
+ },
1892
+ errors: {
1893
+ 404: 'Rule not found'
1316
1894
  }
1317
1895
  });
1318
1896
  }
@@ -1420,91 +1998,138 @@ export class ExpectedTransactionsService {
1420
1998
  }
1421
1999
 
1422
2000
  /**
2001
+ * Skip expected transaction
2002
+ * Marks an expected transaction as skipped (PENDING -> SKIPPED)
1423
2003
  * @param data The data for the request.
2004
+ * @param data.id Expected transaction ID
1424
2005
  * @param data.region Region code for tenant context
1425
- * @returns unknown
2006
+ * @returns ExpectedTransactionResponseDto Expected transaction skipped successfully
1426
2007
  * @throws ApiError
1427
2008
  */
1428
- public static expectedTransactionController(
1429
- data: ExpectedTransactionControllerData
1430
- ): CancelablePromise<ExpectedTransactionControllerResponse> {
2009
+ public static expectedTransactionControllerSkip(
2010
+ data: ExpectedTransactionControllerSkipData
2011
+ ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
1431
2012
  return __request(OpenAPI, {
1432
2013
  method: 'POST',
1433
2014
  url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
1434
2015
  path: {
2016
+ id: data.id,
1435
2017
  region: data.region
2018
+ },
2019
+ errors: {
2020
+ 400: 'Cannot skip - not in PENDING status',
2021
+ 404: 'Expected transaction not found'
1436
2022
  }
1437
2023
  });
1438
2024
  }
1439
2025
 
1440
2026
  /**
2027
+ * Undo skip
2028
+ * Reverses a skip operation (SKIPPED -> PENDING)
1441
2029
  * @param data The data for the request.
2030
+ * @param data.id Expected transaction ID
1442
2031
  * @param data.region Region code for tenant context
1443
- * @returns unknown
2032
+ * @returns ExpectedTransactionResponseDto Skip undone successfully
1444
2033
  * @throws ApiError
1445
2034
  */
1446
- public static expectedTransactionController1(
1447
- data: ExpectedTransactionController1Data
1448
- ): CancelablePromise<ExpectedTransactionController1Response> {
2035
+ public static expectedTransactionControllerUndoSkip(
2036
+ data: ExpectedTransactionControllerUndoSkipData
2037
+ ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
1449
2038
  return __request(OpenAPI, {
1450
2039
  method: 'DELETE',
1451
2040
  url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
1452
2041
  path: {
2042
+ id: data.id,
1453
2043
  region: data.region
2044
+ },
2045
+ errors: {
2046
+ 400: 'Cannot undo - not in SKIPPED status',
2047
+ 404: 'Expected transaction not found'
1454
2048
  }
1455
2049
  });
1456
2050
  }
1457
2051
 
1458
2052
  /**
2053
+ * Confirm transaction match
2054
+ * Manually matches an expected transaction with an actual transaction
1459
2055
  * @param data The data for the request.
2056
+ * @param data.id Expected transaction ID
1460
2057
  * @param data.region Region code for tenant context
1461
- * @returns unknown
2058
+ * @param data.requestBody
2059
+ * @returns unknown Match confirmed successfully
1462
2060
  * @throws ApiError
1463
2061
  */
1464
- public static expectedTransactionController2(
1465
- data: ExpectedTransactionController2Data
1466
- ): CancelablePromise<ExpectedTransactionController2Response> {
2062
+ public static expectedTransactionControllerConfirmMatch(
2063
+ data: ExpectedTransactionControllerConfirmMatchData
2064
+ ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
1467
2065
  return __request(OpenAPI, {
1468
2066
  method: 'POST',
1469
2067
  url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
1470
2068
  path: {
2069
+ id: data.id,
1471
2070
  region: data.region
2071
+ },
2072
+ body: data.requestBody,
2073
+ mediaType: 'application/json',
2074
+ errors: {
2075
+ 400: 'Cannot match - not in PENDING status',
2076
+ 404: 'Expected or actual transaction not found',
2077
+ 409: 'Actual transaction already matched to another rule'
1472
2078
  }
1473
2079
  });
1474
2080
  }
1475
2081
 
1476
2082
  /**
2083
+ * Unmatch transaction
2084
+ * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
1477
2085
  * @param data The data for the request.
2086
+ * @param data.id Expected transaction ID
1478
2087
  * @param data.region Region code for tenant context
1479
- * @returns unknown
2088
+ * @returns unknown Match removed successfully
1480
2089
  * @throws ApiError
1481
2090
  */
1482
- public static expectedTransactionController3(
1483
- data: ExpectedTransactionController3Data
1484
- ): CancelablePromise<ExpectedTransactionController3Response> {
2091
+ public static expectedTransactionControllerUnmatch(
2092
+ data: ExpectedTransactionControllerUnmatchData
2093
+ ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
1485
2094
  return __request(OpenAPI, {
1486
2095
  method: 'DELETE',
1487
2096
  url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
1488
2097
  path: {
2098
+ id: data.id,
1489
2099
  region: data.region
2100
+ },
2101
+ errors: {
2102
+ 400: 'Cannot unmatch - not in COMPLETED status',
2103
+ 404: 'Expected transaction not found'
1490
2104
  }
1491
2105
  });
1492
2106
  }
1493
2107
 
1494
2108
  /**
2109
+ * Enter Now
2110
+ * Creates an actual transaction for an expected transaction (YNAB-style Enter Now)
1495
2111
  * @param data The data for the request.
2112
+ * @param data.id Expected transaction ID
1496
2113
  * @param data.region Region code for tenant context
1497
- * @returns unknown
2114
+ * @param data.requestBody
2115
+ * @returns unknown Transaction created successfully
1498
2116
  * @throws ApiError
1499
2117
  */
1500
- public static expectedTransactionController4(
1501
- data: ExpectedTransactionController4Data
1502
- ): CancelablePromise<ExpectedTransactionController4Response> {
2118
+ public static expectedTransactionControllerEnterNow(
2119
+ data: ExpectedTransactionControllerEnterNowData
2120
+ ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
1503
2121
  return __request(OpenAPI, {
1504
2122
  method: 'POST',
1505
2123
  url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
1506
2124
  path: {
2125
+ id: data.id,
1507
2126
  region: data.region
2127
+ },
2128
+ body: data.requestBody,
2129
+ mediaType: 'application/json',
2130
+ errors: {
2131
+ 400: 'Cannot enter - not in PENDING status or missing accounts',
2132
+ 404: 'Expected transaction or accounts not found'
1508
2133
  }
1509
2134
  });
1510
2135
  }
@@ -1515,16 +2140,20 @@ export class RecurringForecastService {
1515
2140
  * Get cash flow forecast
1516
2141
  * Returns predicted outflows for the next N months based on active recurring rules
1517
2142
  * @param data The data for the request.
2143
+ * @param data.region Region code for tenant context
1518
2144
  * @param data.months Number of months to forecast (1-12, default 3)
1519
2145
  * @returns ForecastResponseDto Forecast retrieved successfully
1520
2146
  * @throws ApiError
1521
2147
  */
1522
2148
  public static forecastControllerGetForecast(
1523
- data: ForecastControllerGetForecastData = {}
2149
+ data: ForecastControllerGetForecastData
1524
2150
  ): CancelablePromise<ForecastControllerGetForecastResponse> {
1525
2151
  return __request(OpenAPI, {
1526
2152
  method: 'GET',
1527
2153
  url: '/api/v1/{region}/bean/recurring/forecast',
2154
+ path: {
2155
+ region: data.region
2156
+ },
1528
2157
  query: {
1529
2158
  months: data.months
1530
2159
  }
@@ -1532,238 +2161,158 @@ export class RecurringForecastService {
1532
2161
  }
1533
2162
  }
1534
2163
 
1535
- export class BeanTransactionRulesService {
1536
- /**
1537
- * @param data The data for the request.
1538
- * @param data.region Region code for tenant context
1539
- * @returns unknown
1540
- * @throws ApiError
1541
- */
1542
- public static transactionRuleController(
1543
- data: TransactionRuleControllerData
1544
- ): CancelablePromise<TransactionRuleControllerResponse> {
1545
- return __request(OpenAPI, {
1546
- method: 'POST',
1547
- url: '/api/v1/{region}/bean/transaction-rules',
1548
- path: {
1549
- region: data.region
1550
- }
1551
- });
1552
- }
1553
-
2164
+ export class ReportingService {
1554
2165
  /**
1555
- * Get all transaction rules for user
2166
+ * Get portfolio value trends
2167
+ *
2168
+ * Returns time series data of portfolio net worth.
2169
+ *
2170
+ * **Multi-currency Support:**
2171
+ * - `series[].byCurrency` - Currency breakdown for each data point
2172
+ * - `byCurrency` - Separate time series grouped by currency
2173
+ * - `warnings` - Exchange rate warnings if conversion failed
2174
+ *
2175
+ * **Parameters:**
2176
+ * - `period`: Time period (1m, 3m, 6m, 1y)
2177
+ * - `granularity`: Data granularity (day, week, month)
2178
+ *
1556
2179
  * @param data The data for the request.
1557
2180
  * @param data.region Region code for tenant context
1558
- * @param data.limit Max results per page (default: 20, max: 100)
1559
- * @param data.offset Pagination offset (default: 0)
1560
- * @param data.enabled Filter by enabled status
1561
- * @param data.learningSource Filter by learning source. Omit this parameter or pass empty string to get manually created rules (learningSource is null in database).
1562
- * @param data.autoApplyEnabled Filter by auto-apply status
1563
- * @returns TransactionRuleListResponseDto List of rules
2181
+ * @param data.period Time period
2182
+ * @param data.granularity Data granularity
2183
+ * @returns PortfolioTrendsResponseDto Trends retrieved successfully
1564
2184
  * @throws ApiError
1565
2185
  */
1566
- public static transactionRuleControllerList(
1567
- data: TransactionRuleControllerListData
1568
- ): CancelablePromise<TransactionRuleControllerListResponse> {
2186
+ public static reportingControllerGetPortfolioTrends(
2187
+ data: ReportingControllerGetPortfolioTrendsData
2188
+ ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
1569
2189
  return __request(OpenAPI, {
1570
2190
  method: 'GET',
1571
- url: '/api/v1/{region}/bean/transaction-rules',
2191
+ url: '/api/v1/{region}/reporting/portfolio/trends',
1572
2192
  path: {
1573
2193
  region: data.region
1574
2194
  },
1575
2195
  query: {
1576
- limit: data.limit,
1577
- offset: data.offset,
1578
- enabled: data.enabled,
1579
- learningSource: data.learningSource,
1580
- autoApplyEnabled: data.autoApplyEnabled
1581
- },
1582
- errors: {
1583
- 401: 'Unauthorized'
1584
- }
1585
- });
1586
- }
1587
-
1588
- /**
1589
- * Validate transaction rule configuration
1590
- * @param data The data for the request.
1591
- * @param data.region Region code for tenant context
1592
- * @param data.requestBody
1593
- * @returns ValidateRuleResponseDto Validation result
1594
- * @throws ApiError
1595
- */
1596
- public static transactionRuleControllerValidate(
1597
- data: TransactionRuleControllerValidateData
1598
- ): CancelablePromise<TransactionRuleControllerValidateResponse> {
1599
- return __request(OpenAPI, {
1600
- method: 'POST',
1601
- url: '/api/v1/{region}/bean/transaction-rules/validate',
1602
- path: {
1603
- region: data.region
2196
+ period: data.period,
2197
+ granularity: data.granularity
1604
2198
  },
1605
- body: data.requestBody,
1606
- mediaType: 'application/json',
1607
2199
  errors: {
1608
- 401: 'Unauthorized'
1609
- }
1610
- });
1611
- }
1612
-
1613
- /**
1614
- * @param data The data for the request.
1615
- * @param data.region Region code for tenant context
1616
- * @returns unknown
1617
- * @throws ApiError
1618
- */
1619
- public static transactionRuleController1(
1620
- data: TransactionRuleController1Data
1621
- ): CancelablePromise<TransactionRuleController1Response> {
1622
- return __request(OpenAPI, {
1623
- method: 'POST',
1624
- url: '/api/v1/{region}/bean/transaction-rules/bulk',
1625
- path: {
1626
- region: data.region
2200
+ 401: 'User not authenticated'
1627
2201
  }
1628
2202
  });
1629
2203
  }
1630
2204
 
1631
2205
  /**
1632
- * Export transaction rules
2206
+ * Get cash-flow trends
2207
+ *
2208
+ * Monthly income / expense / netSavings over a fixed N-month window
2209
+ * (current month + N−1 prior). Missing months are zero-filled (flow metric).
2210
+ *
2211
+ * **Parameters:**
2212
+ * - `period`: 1m | 3m | 6m | 1y (default 6m)
2213
+ * - `granularity`: accepted for API symmetry; v1 returns month buckets
2214
+ *
1633
2215
  * @param data The data for the request.
1634
- * @param data.format Export format (currently only JSON supported)
1635
2216
  * @param data.region Region code for tenant context
1636
- * @returns ExportRulesResponseDto Exported rules
2217
+ * @param data.period Time period
2218
+ * @param data.granularity Data granularity (accepted for API symmetry; v1 returns month buckets)
2219
+ * @returns CashFlowTrendsResponseDto Cash-flow trends retrieved successfully
1637
2220
  * @throws ApiError
1638
2221
  */
1639
- public static transactionRuleControllerExport(
1640
- data: TransactionRuleControllerExportData
1641
- ): CancelablePromise<TransactionRuleControllerExportResponse> {
2222
+ public static reportingControllerGetCashFlowTrends(
2223
+ data: ReportingControllerGetCashFlowTrendsData
2224
+ ): CancelablePromise<ReportingControllerGetCashFlowTrendsResponse> {
1642
2225
  return __request(OpenAPI, {
1643
2226
  method: 'GET',
1644
- url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
2227
+ url: '/api/v1/{region}/reporting/cash-flow/trends',
1645
2228
  path: {
1646
- format: data.format,
1647
2229
  region: data.region
1648
2230
  },
1649
- errors: {
1650
- 400: 'Unsupported format',
1651
- 401: 'Unauthorized'
1652
- }
1653
- });
1654
- }
1655
-
1656
- /**
1657
- * Get transaction rule statistics
1658
- * @param data The data for the request.
1659
- * @param data.period Statistics time period
1660
- * @param data.region Region code for tenant context
1661
- * @returns RuleStatisticsResponseDto Rule statistics
1662
- * @throws ApiError
1663
- */
1664
- public static transactionRuleControllerGetStatistics(
1665
- data: TransactionRuleControllerGetStatisticsData
1666
- ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
1667
- return __request(OpenAPI, {
1668
- method: 'GET',
1669
- url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
1670
- path: {
2231
+ query: {
1671
2232
  period: data.period,
1672
- region: data.region
2233
+ granularity: data.granularity
1673
2234
  },
1674
2235
  errors: {
1675
- 401: 'Unauthorized'
2236
+ 401: 'User not authenticated'
1676
2237
  }
1677
2238
  });
1678
2239
  }
1679
2240
 
1680
2241
  /**
1681
- * Get transaction rule detail
2242
+ * Generate portfolio snapshot
2243
+ *
2244
+ * Manually generate a portfolio snapshot for a specific date.
2245
+ *
2246
+ * **Multi-currency Support:**
2247
+ * - Fetches balances grouped by currency
2248
+ * - Uses user's baseCurrency setting for conversion
2249
+ * - Stores exchange rates and warnings
2250
+ *
2251
+ * **Use Cases:**
2252
+ * - Testing snapshot generation
2253
+ * - Force regeneration after data correction
2254
+ * - Initial setup for new users
2255
+ *
1682
2256
  * @param data The data for the request.
1683
- * @param data.ruleId Rule ID
1684
2257
  * @param data.region Region code for tenant context
1685
- * @returns TransactionRuleResponseDto Rule details
2258
+ * @param data.requestBody Optional date (defaults to today)
2259
+ * @returns GenerateSnapshotResponse Snapshot generated successfully
1686
2260
  * @throws ApiError
1687
2261
  */
1688
- public static transactionRuleControllerGetDetail(
1689
- data: TransactionRuleControllerGetDetailData
1690
- ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
2262
+ public static reportingControllerGenerateSnapshot(
2263
+ data: ReportingControllerGenerateSnapshotData
2264
+ ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
1691
2265
  return __request(OpenAPI, {
1692
- method: 'GET',
1693
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2266
+ method: 'POST',
2267
+ url: '/api/v1/{region}/reporting/snapshots/generate',
1694
2268
  path: {
1695
- ruleId: data.ruleId,
1696
2269
  region: data.region
1697
2270
  },
2271
+ body: data.requestBody,
2272
+ mediaType: 'application/json',
1698
2273
  errors: {
1699
- 401: 'Unauthorized',
1700
- 403: 'Forbidden - not owner of rule',
1701
- 404: 'Rule not found'
1702
- }
1703
- });
1704
- }
1705
-
1706
- /**
1707
- * @param data The data for the request.
1708
- * @param data.region Region code for tenant context
1709
- * @returns unknown
1710
- * @throws ApiError
1711
- */
1712
- public static transactionRuleController2(
1713
- data: TransactionRuleController2Data
1714
- ): CancelablePromise<TransactionRuleController2Response> {
1715
- return __request(OpenAPI, {
1716
- method: 'PUT',
1717
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1718
- path: {
1719
- region: data.region
1720
- }
1721
- });
1722
- }
1723
-
1724
- /**
1725
- * @param data The data for the request.
1726
- * @param data.region Region code for tenant context
1727
- * @returns void
1728
- * @throws ApiError
1729
- */
1730
- public static transactionRuleController3(
1731
- data: TransactionRuleController3Data
1732
- ): CancelablePromise<TransactionRuleController3Response> {
1733
- return __request(OpenAPI, {
1734
- method: 'DELETE',
1735
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1736
- path: {
1737
- region: data.region
2274
+ 400: 'Invalid date format',
2275
+ 401: 'User not authenticated'
1738
2276
  }
1739
2277
  });
1740
2278
  }
1741
2279
 
1742
2280
  /**
1743
- * Test rule matching
2281
+ * Backfill portfolio snapshots
2282
+ *
2283
+ * Generate snapshots for a date range (historical data backfill).
2284
+ *
2285
+ * **Multi-currency Support:**
2286
+ * - Each snapshot includes multi-currency data
2287
+ * - Uses exchange rates available at generation time
2288
+ * - Warnings stored for missing exchange rates
2289
+ *
2290
+ * **Best Practices:**
2291
+ * - Use for initial setup after account configuration
2292
+ * - Run during low-traffic periods for large date ranges
2293
+ * - Existing snapshots are skipped (not regenerated)
2294
+ *
1744
2295
  * @param data The data for the request.
1745
- * @param data.ruleId Rule ID to test
1746
2296
  * @param data.region Region code for tenant context
1747
2297
  * @param data.requestBody
1748
- * @returns TestRuleResponseDto Test result
2298
+ * @returns BackfillSnapshotsResponse Backfill completed successfully
1749
2299
  * @throws ApiError
1750
2300
  */
1751
- public static transactionRuleControllerTest(
1752
- data: TransactionRuleControllerTestData
1753
- ): CancelablePromise<TransactionRuleControllerTestResponse> {
2301
+ public static reportingControllerBackfillSnapshots(
2302
+ data: ReportingControllerBackfillSnapshotsData
2303
+ ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
1754
2304
  return __request(OpenAPI, {
1755
2305
  method: 'POST',
1756
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2306
+ url: '/api/v1/{region}/reporting/snapshots/backfill',
1757
2307
  path: {
1758
- ruleId: data.ruleId,
1759
2308
  region: data.region
1760
2309
  },
1761
2310
  body: data.requestBody,
1762
2311
  mediaType: 'application/json',
1763
2312
  errors: {
1764
- 401: 'Unauthorized',
1765
- 403: 'Forbidden - not owner of rule',
1766
- 404: 'Rule not found'
2313
+ 400: 'Invalid date format or range',
2314
+ 401: 'User not authenticated',
2315
+ 409: 'Backfill already in progress for this user'
1767
2316
  }
1768
2317
  });
1769
2318
  }
@@ -1815,7 +2364,7 @@ export class UsersService {
1815
2364
  * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
1816
2365
  * @param data The data for the request.
1817
2366
  * @param data.requestBody
1818
- * @returns unknown User created successfully
2367
+ * @returns SignupResponseDto User created successfully
1819
2368
  * @throws ApiError
1820
2369
  */
1821
2370
  public static userControllerSignupUser(
@@ -1974,24 +2523,653 @@ export class PropertiesService {
1974
2523
  }
1975
2524
 
1976
2525
  /**
1977
- * @returns unknown
2526
+ * Update a system property
2527
+ * @param data The data for the request.
2528
+ * @param data.key Property key
2529
+ * @param data.requestBody
2530
+ * @returns unknown Property updated successfully
1978
2531
  * @throws ApiError
1979
2532
  */
1980
- public static propertyController(): CancelablePromise<PropertyControllerResponse> {
2533
+ public static propertyControllerUpdate(
2534
+ data: PropertyControllerUpdateData
2535
+ ): CancelablePromise<PropertyControllerUpdateResponse> {
1981
2536
  return __request(OpenAPI, {
1982
2537
  method: 'PUT',
1983
- url: '/api/v1/admin/properties/{key}'
1984
- });
1985
- }
1986
-
1987
- /**
1988
- * @returns void
1989
- * @throws ApiError
1990
- */
1991
- public static propertyController1(): CancelablePromise<PropertyController1Response> {
1992
- return __request(OpenAPI, {
2538
+ url: '/api/v1/admin/properties/{key}',
2539
+ path: {
2540
+ key: data.key
2541
+ },
2542
+ body: data.requestBody,
2543
+ mediaType: 'application/json',
2544
+ errors: {
2545
+ 401: 'Unauthorized',
2546
+ 403: 'Forbidden - insufficient permissions'
2547
+ }
2548
+ });
2549
+ }
2550
+
2551
+ /**
2552
+ * Delete a system property
2553
+ * @param data The data for the request.
2554
+ * @param data.key Property key
2555
+ * @returns void Property deleted successfully
2556
+ * @throws ApiError
2557
+ */
2558
+ public static propertyControllerDelete(
2559
+ data: PropertyControllerDeleteData
2560
+ ): CancelablePromise<PropertyControllerDeleteResponse> {
2561
+ return __request(OpenAPI, {
2562
+ method: 'DELETE',
2563
+ url: '/api/v1/admin/properties/{key}',
2564
+ path: {
2565
+ key: data.key
2566
+ },
2567
+ errors: {
2568
+ 401: 'Unauthorized',
2569
+ 403: 'Forbidden - insufficient permissions',
2570
+ 404: 'Property not found'
2571
+ }
2572
+ });
2573
+ }
2574
+ }
2575
+
2576
+ export class BeanTransactionRulesService {
2577
+ /**
2578
+ * Create a new transaction rule (or upsert if upsertByPayee=true)
2579
+ * Creates a new rule. If upsertByPayee=true, updates existing rule matching payeeKeywords[0] instead of creating duplicate.
2580
+ * @param data The data for the request.
2581
+ * @param data.region Region code for tenant context
2582
+ * @param data.requestBody
2583
+ * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
2584
+ * @throws ApiError
2585
+ */
2586
+ public static transactionRuleControllerCreate(
2587
+ data: TransactionRuleControllerCreateData
2588
+ ): CancelablePromise<TransactionRuleControllerCreateResponse> {
2589
+ return __request(OpenAPI, {
2590
+ method: 'POST',
2591
+ url: '/api/v1/{region}/bean/transaction-rules',
2592
+ path: {
2593
+ region: data.region
2594
+ },
2595
+ body: data.requestBody,
2596
+ mediaType: 'application/json',
2597
+ errors: {
2598
+ 400: 'Validation failed',
2599
+ 401: 'Unauthorized',
2600
+ 409: 'Resource conflict - another process is updating this rule'
2601
+ }
2602
+ });
2603
+ }
2604
+
2605
+ /**
2606
+ * Get all transaction rules for user
2607
+ * @param data The data for the request.
2608
+ * @param data.region Region code for tenant context
2609
+ * @param data.limit Max results per page (default: 20, max: 100)
2610
+ * @param data.offset Pagination offset (default: 0)
2611
+ * @param data.enabled Filter by enabled status
2612
+ * @param data.learningSource Filter by learning source. Omit this parameter or pass empty string to get manually created rules (learningSource is null in database).
2613
+ * @param data.autoApplyEnabled Filter by auto-apply status
2614
+ * @returns TransactionRuleListResponseDto List of rules
2615
+ * @throws ApiError
2616
+ */
2617
+ public static transactionRuleControllerList(
2618
+ data: TransactionRuleControllerListData
2619
+ ): CancelablePromise<TransactionRuleControllerListResponse> {
2620
+ return __request(OpenAPI, {
2621
+ method: 'GET',
2622
+ url: '/api/v1/{region}/bean/transaction-rules',
2623
+ path: {
2624
+ region: data.region
2625
+ },
2626
+ query: {
2627
+ limit: data.limit,
2628
+ offset: data.offset,
2629
+ enabled: data.enabled,
2630
+ learningSource: data.learningSource,
2631
+ autoApplyEnabled: data.autoApplyEnabled
2632
+ },
2633
+ errors: {
2634
+ 401: 'Unauthorized'
2635
+ }
2636
+ });
2637
+ }
2638
+
2639
+ /**
2640
+ * Validate transaction rule configuration
2641
+ * @param data The data for the request.
2642
+ * @param data.region Region code for tenant context
2643
+ * @param data.requestBody
2644
+ * @returns ValidateRuleResponseDto Validation result
2645
+ * @throws ApiError
2646
+ */
2647
+ public static transactionRuleControllerValidate(
2648
+ data: TransactionRuleControllerValidateData
2649
+ ): CancelablePromise<TransactionRuleControllerValidateResponse> {
2650
+ return __request(OpenAPI, {
2651
+ method: 'POST',
2652
+ url: '/api/v1/{region}/bean/transaction-rules/validate',
2653
+ path: {
2654
+ region: data.region
2655
+ },
2656
+ body: data.requestBody,
2657
+ mediaType: 'application/json',
2658
+ errors: {
2659
+ 400: 'Validation failed',
2660
+ 401: 'Unauthorized'
2661
+ }
2662
+ });
2663
+ }
2664
+
2665
+ /**
2666
+ * Bulk create transaction rules
2667
+ * @param data The data for the request.
2668
+ * @param data.region Region code for tenant context
2669
+ * @param data.requestBody
2670
+ * @returns BulkCreateRulesResponseDto Bulk create completed
2671
+ * @throws ApiError
2672
+ */
2673
+ public static transactionRuleControllerBulkCreate(
2674
+ data: TransactionRuleControllerBulkCreateData
2675
+ ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
2676
+ return __request(OpenAPI, {
2677
+ method: 'POST',
2678
+ url: '/api/v1/{region}/bean/transaction-rules/bulk',
2679
+ path: {
2680
+ region: data.region
2681
+ },
2682
+ body: data.requestBody,
2683
+ mediaType: 'application/json',
2684
+ errors: {
2685
+ 400: 'Invalid bulk create data',
2686
+ 401: 'Unauthorized'
2687
+ }
2688
+ });
2689
+ }
2690
+
2691
+ /**
2692
+ * Export transaction rules
2693
+ * @param data The data for the request.
2694
+ * @param data.format Export format (currently only JSON supported)
2695
+ * @param data.region Region code for tenant context
2696
+ * @returns ExportRulesResponseDto Exported rules
2697
+ * @throws ApiError
2698
+ */
2699
+ public static transactionRuleControllerExport(
2700
+ data: TransactionRuleControllerExportData
2701
+ ): CancelablePromise<TransactionRuleControllerExportResponse> {
2702
+ return __request(OpenAPI, {
2703
+ method: 'GET',
2704
+ url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
2705
+ path: {
2706
+ format: data.format,
2707
+ region: data.region
2708
+ },
2709
+ errors: {
2710
+ 400: 'Unsupported format',
2711
+ 401: 'Unauthorized'
2712
+ }
2713
+ });
2714
+ }
2715
+
2716
+ /**
2717
+ * Get transaction rule statistics
2718
+ * @param data The data for the request.
2719
+ * @param data.period Statistics time period
2720
+ * @param data.region Region code for tenant context
2721
+ * @returns RuleStatisticsResponseDto Rule statistics
2722
+ * @throws ApiError
2723
+ */
2724
+ public static transactionRuleControllerGetStatistics(
2725
+ data: TransactionRuleControllerGetStatisticsData
2726
+ ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
2727
+ return __request(OpenAPI, {
2728
+ method: 'GET',
2729
+ url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
2730
+ path: {
2731
+ period: data.period,
2732
+ region: data.region
2733
+ },
2734
+ errors: {
2735
+ 401: 'Unauthorized'
2736
+ }
2737
+ });
2738
+ }
2739
+
2740
+ /**
2741
+ * Get transaction rule detail
2742
+ * @param data The data for the request.
2743
+ * @param data.ruleId Rule ID
2744
+ * @param data.region Region code for tenant context
2745
+ * @returns TransactionRuleResponseDto Rule details
2746
+ * @throws ApiError
2747
+ */
2748
+ public static transactionRuleControllerGetDetail(
2749
+ data: TransactionRuleControllerGetDetailData
2750
+ ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
2751
+ return __request(OpenAPI, {
2752
+ method: 'GET',
2753
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2754
+ path: {
2755
+ ruleId: data.ruleId,
2756
+ region: data.region
2757
+ },
2758
+ errors: {
2759
+ 401: 'Unauthorized',
2760
+ 403: 'Forbidden - not owner of rule',
2761
+ 404: 'Rule not found'
2762
+ }
2763
+ });
2764
+ }
2765
+
2766
+ /**
2767
+ * Update a transaction rule
2768
+ * @param data The data for the request.
2769
+ * @param data.ruleId Rule ID to update
2770
+ * @param data.region Region code for tenant context
2771
+ * @param data.requestBody
2772
+ * @returns TransactionRuleResponseDto Rule updated successfully
2773
+ * @throws ApiError
2774
+ */
2775
+ public static transactionRuleControllerUpdate(
2776
+ data: TransactionRuleControllerUpdateData
2777
+ ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
2778
+ return __request(OpenAPI, {
2779
+ method: 'PUT',
2780
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2781
+ path: {
2782
+ ruleId: data.ruleId,
2783
+ region: data.region
2784
+ },
2785
+ body: data.requestBody,
2786
+ mediaType: 'application/json',
2787
+ errors: {
2788
+ 400: 'Validation failed',
2789
+ 401: 'Unauthorized',
2790
+ 403: 'Forbidden - not owner of rule',
2791
+ 404: 'Rule not found',
2792
+ 409: 'Resource conflict - rule is being modified by another process'
2793
+ }
2794
+ });
2795
+ }
2796
+
2797
+ /**
2798
+ * Delete a transaction rule
2799
+ * @param data The data for the request.
2800
+ * @param data.ruleId Rule ID to delete
2801
+ * @param data.region Region code for tenant context
2802
+ * @returns void Rule deleted successfully
2803
+ * @throws ApiError
2804
+ */
2805
+ public static transactionRuleControllerDelete(
2806
+ data: TransactionRuleControllerDeleteData
2807
+ ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
2808
+ return __request(OpenAPI, {
2809
+ method: 'DELETE',
2810
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2811
+ path: {
2812
+ ruleId: data.ruleId,
2813
+ region: data.region
2814
+ },
2815
+ errors: {
2816
+ 401: 'Unauthorized',
2817
+ 403: 'Forbidden - not owner of rule',
2818
+ 404: 'Rule not found',
2819
+ 409: 'Resource conflict - rule is being modified by another process'
2820
+ }
2821
+ });
2822
+ }
2823
+
2824
+ /**
2825
+ * Test rule matching
2826
+ * @param data The data for the request.
2827
+ * @param data.ruleId Rule ID to test
2828
+ * @param data.region Region code for tenant context
2829
+ * @param data.requestBody
2830
+ * @returns TestRuleResponseDto Test result
2831
+ * @throws ApiError
2832
+ */
2833
+ public static transactionRuleControllerTest(
2834
+ data: TransactionRuleControllerTestData
2835
+ ): CancelablePromise<TransactionRuleControllerTestResponse> {
2836
+ return __request(OpenAPI, {
2837
+ method: 'POST',
2838
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2839
+ path: {
2840
+ ruleId: data.ruleId,
2841
+ region: data.region
2842
+ },
2843
+ body: data.requestBody,
2844
+ mediaType: 'application/json',
2845
+ errors: {
2846
+ 401: 'Unauthorized',
2847
+ 403: 'Forbidden - not owner of rule',
2848
+ 404: 'Rule not found'
2849
+ }
2850
+ });
2851
+ }
2852
+ }
2853
+
2854
+ export class LifeEventsService {
2855
+ /**
2856
+ * Create a new life event
2857
+ * Creates a new life event entry for the authenticated user. Returns ETag header carrying the row updatedAt.
2858
+ * @param data The data for the request.
2859
+ * @param data.region Region code for tenant context (decorative for life events)
2860
+ * @param data.requestBody
2861
+ * @returns EventResponseDto Life event created successfully
2862
+ * @throws ApiError
2863
+ */
2864
+ public static eventControllerCreate(
2865
+ data: EventControllerCreateData
2866
+ ): CancelablePromise<EventControllerCreateResponse> {
2867
+ return __request(OpenAPI, {
2868
+ method: 'POST',
2869
+ url: '/api/v1/{region}/bean/events',
2870
+ path: {
2871
+ region: data.region
2872
+ },
2873
+ body: data.requestBody,
2874
+ mediaType: 'application/json',
2875
+ errors: {
2876
+ 409: 'Life event already exists for this (userId, type, date) combination'
2877
+ }
2878
+ });
2879
+ }
2880
+
2881
+ /**
2882
+ * List user life events
2883
+ * Returns life events for the authenticated user with optional filtering by type, description search, and date range.
2884
+ * @param data The data for the request.
2885
+ * @param data.region Region code for tenant context (decorative for life events)
2886
+ * @param data.type Filter by life event type (exact match)
2887
+ * @param data.q Search term for description (case-insensitive partial match)
2888
+ * @param data.from Filter life events from this date (ISO 8601 format)
2889
+ * @param data.to Filter life events to this date (ISO 8601 format)
2890
+ * @param data.page Page number for pagination (default: 1)
2891
+ * @param data.limit Number of items per page (default: 20, max: 100)
2892
+ * @returns EventListResponseDto Life events retrieved successfully
2893
+ * @throws ApiError
2894
+ */
2895
+ public static eventControllerFindAll(
2896
+ data: EventControllerFindAllData
2897
+ ): CancelablePromise<EventControllerFindAllResponse> {
2898
+ return __request(OpenAPI, {
2899
+ method: 'GET',
2900
+ url: '/api/v1/{region}/bean/events',
2901
+ path: {
2902
+ region: data.region
2903
+ },
2904
+ query: {
2905
+ type: data.type,
2906
+ q: data.q,
2907
+ from: data.from,
2908
+ to: data.to,
2909
+ page: data.page,
2910
+ limit: data.limit
2911
+ }
2912
+ });
2913
+ }
2914
+
2915
+ /**
2916
+ * Get life event by ID
2917
+ * Returns a single life event by its ID. Returns ETag header.
2918
+ * @param data The data for the request.
2919
+ * @param data.id Life event ID
2920
+ * @param data.region Region code for tenant context (decorative for life events)
2921
+ * @returns EventResponseDto Life event retrieved successfully
2922
+ * @throws ApiError
2923
+ */
2924
+ public static eventControllerFindOne(
2925
+ data: EventControllerFindOneData
2926
+ ): CancelablePromise<EventControllerFindOneResponse> {
2927
+ return __request(OpenAPI, {
2928
+ method: 'GET',
2929
+ url: '/api/v1/{region}/bean/events/{id}',
2930
+ path: {
2931
+ id: data.id,
2932
+ region: data.region
2933
+ },
2934
+ errors: {
2935
+ 404: 'Life event not found'
2936
+ }
2937
+ });
2938
+ }
2939
+
2940
+ /**
2941
+ * Update a life event
2942
+ * Updates an existing life event. If If-Match header is provided, performs optimistic concurrency check; mismatched updatedAt returns 412.
2943
+ * @param data The data for the request.
2944
+ * @param data.id Life event ID
2945
+ * @param data.region Region code for tenant context (decorative for life events)
2946
+ * @param data.requestBody
2947
+ * @returns EventResponseDto Life event updated successfully
2948
+ * @throws ApiError
2949
+ */
2950
+ public static eventControllerUpdate(
2951
+ data: EventControllerUpdateData
2952
+ ): CancelablePromise<EventControllerUpdateResponse> {
2953
+ return __request(OpenAPI, {
2954
+ method: 'PUT',
2955
+ url: '/api/v1/{region}/bean/events/{id}',
2956
+ path: {
2957
+ id: data.id,
2958
+ region: data.region
2959
+ },
2960
+ body: data.requestBody,
2961
+ mediaType: 'application/json',
2962
+ errors: {
2963
+ 400: 'If-Match header is not a valid ISO 8601 date',
2964
+ 404: 'Life event not found',
2965
+ 409: 'Updated event conflicts with an existing (userId, type, date) combination',
2966
+ 412: 'If-Match precondition failed (updatedAt mismatch)'
2967
+ }
2968
+ });
2969
+ }
2970
+
2971
+ /**
2972
+ * Delete a life event
2973
+ * Deletes a life event entry (hard delete). Returns 204.
2974
+ * @param data The data for the request.
2975
+ * @param data.id Life event ID
2976
+ * @param data.region Region code for tenant context (decorative for life events)
2977
+ * @returns void Life event deleted successfully
2978
+ * @throws ApiError
2979
+ */
2980
+ public static eventControllerDelete(
2981
+ data: EventControllerDeleteData
2982
+ ): CancelablePromise<EventControllerDeleteResponse> {
2983
+ return __request(OpenAPI, {
1993
2984
  method: 'DELETE',
1994
- url: '/api/v1/admin/properties/{key}'
2985
+ url: '/api/v1/{region}/bean/events/{id}',
2986
+ path: {
2987
+ id: data.id,
2988
+ region: data.region
2989
+ },
2990
+ errors: {
2991
+ 404: 'Life event not found'
2992
+ }
2993
+ });
2994
+ }
2995
+
2996
+ /**
2997
+ * Slice time-series by a life event (Phase 79)
2998
+ * Returns aggregated time-series for postings matching accountPattern within the half-open date range of the given life event.
2999
+ * @param data The data for the request.
3000
+ * @param data.id Life event ID
3001
+ * @param data.accountPattern
3002
+ * @param data.granularity
3003
+ * @param data.region Region code for tenant context (decorative for life events)
3004
+ * @returns unknown Time-series sliced by the life event range
3005
+ * @throws ApiError
3006
+ */
3007
+ public static eventControllerGetSlice(
3008
+ data: EventControllerGetSliceData
3009
+ ): CancelablePromise<EventControllerGetSliceResponse> {
3010
+ return __request(OpenAPI, {
3011
+ method: 'GET',
3012
+ url: '/api/v1/{region}/bean/events/{id}/slice',
3013
+ path: {
3014
+ id: data.id,
3015
+ region: data.region
3016
+ },
3017
+ query: {
3018
+ accountPattern: data.accountPattern,
3019
+ granularity: data.granularity
3020
+ },
3021
+ errors: {
3022
+ 400: 'accountPattern query param is empty',
3023
+ 404: 'Life event not found'
3024
+ }
3025
+ });
3026
+ }
3027
+ }
3028
+
3029
+ export class OnboardingService {
3030
+ /**
3031
+ * Bootstrap core accounts + register asset accounts with opening balances (ADR-0113)
3032
+ * @param data The data for the request.
3033
+ * @param data.region Region code for tenant context
3034
+ * @param data.requestBody
3035
+ * @returns unknown Onboarding bootstrap result.
3036
+ * @throws ApiError
3037
+ */
3038
+ public static onboardingControllerBootstrap(
3039
+ data: OnboardingControllerBootstrapData
3040
+ ): CancelablePromise<OnboardingControllerBootstrapResponse> {
3041
+ return __request(OpenAPI, {
3042
+ method: 'POST',
3043
+ url: '/api/v1/{region}/bean/onboarding',
3044
+ path: {
3045
+ region: data.region
3046
+ },
3047
+ body: data.requestBody,
3048
+ mediaType: 'application/json',
3049
+ errors: {
3050
+ 422: 'Invalid region/account path/duplicate paths.'
3051
+ }
3052
+ });
3053
+ }
3054
+ }
3055
+
3056
+ export class BalanceReconciliationService {
3057
+ /**
3058
+ * Preview reconciliation (book vs actual)
3059
+ * Computes book balance, diff, Beancount-inferred tolerance, and suggested action without persisting.
3060
+ * @param data The data for the request.
3061
+ * @param data.region Region code for tenant context (decorative for reconciliation)
3062
+ * @param data.requestBody
3063
+ * @returns ReconciliationComputeResultDto Reconciliation preview
3064
+ * @throws ApiError
3065
+ */
3066
+ public static reconciliationControllerCompute(
3067
+ data: ReconciliationControllerComputeData
3068
+ ): CancelablePromise<ReconciliationControllerComputeResponse> {
3069
+ return __request(OpenAPI, {
3070
+ method: 'POST',
3071
+ url: '/api/v1/{region}/bean/reconciliations',
3072
+ path: {
3073
+ region: data.region
3074
+ },
3075
+ body: data.requestBody,
3076
+ mediaType: 'application/json',
3077
+ errors: {
3078
+ 404: 'Account not found'
3079
+ }
3080
+ });
3081
+ }
3082
+
3083
+ /**
3084
+ * Record a balance assertion
3085
+ * Persists the reconciliation as a BeanBalance assertion (amount = actual, diffAmount = book − actual). Re-reconciling the same day/currency upserts.
3086
+ * @param data The data for the request.
3087
+ * @param data.region Region code for tenant context (decorative for reconciliation)
3088
+ * @param data.requestBody
3089
+ * @returns ReconciliationRecordDto Balance assertion recorded
3090
+ * @throws ApiError
3091
+ */
3092
+ public static reconciliationControllerAssert(
3093
+ data: ReconciliationControllerAssertData
3094
+ ): CancelablePromise<ReconciliationControllerAssertResponse> {
3095
+ return __request(OpenAPI, {
3096
+ method: 'POST',
3097
+ url: '/api/v1/{region}/bean/reconciliations/assert',
3098
+ path: {
3099
+ region: data.region
3100
+ },
3101
+ body: data.requestBody,
3102
+ mediaType: 'application/json',
3103
+ errors: {
3104
+ 404: 'Account not found'
3105
+ }
3106
+ });
3107
+ }
3108
+
3109
+ /**
3110
+ * Generate a pad adjusting entry
3111
+ * 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.
3112
+ * @param data The data for the request.
3113
+ * @param data.region Region code for tenant context (decorative for reconciliation)
3114
+ * @param data.requestBody
3115
+ * @returns PadResultDto Pad adjusting entry generated
3116
+ * @throws ApiError
3117
+ */
3118
+ public static reconciliationControllerPad(
3119
+ data: ReconciliationControllerPadData
3120
+ ): CancelablePromise<ReconciliationControllerPadResponse> {
3121
+ return __request(OpenAPI, {
3122
+ method: 'POST',
3123
+ url: '/api/v1/{region}/bean/reconciliations/pad',
3124
+ path: {
3125
+ region: data.region
3126
+ },
3127
+ body: data.requestBody,
3128
+ mediaType: 'application/json',
3129
+ errors: {
3130
+ 400: 'Book already within tolerance — no pad needed',
3131
+ 404: 'Account not found'
3132
+ }
3133
+ });
3134
+ }
3135
+
3136
+ /**
3137
+ * List reconciliation history for an account
3138
+ * Returns recorded balance assertions (most recent first). The latest drives the account-detail "Last <date>" badge.
3139
+ * @param data The data for the request.
3140
+ * @param data.accountId BeanAccount id
3141
+ * @param data.region Region code for tenant context (decorative for reconciliation)
3142
+ * @returns ReconciliationRecordDto Reconciliation history
3143
+ * @throws ApiError
3144
+ */
3145
+ public static reconciliationControllerHistory(
3146
+ data: ReconciliationControllerHistoryData
3147
+ ): CancelablePromise<ReconciliationControllerHistoryResponse> {
3148
+ return __request(OpenAPI, {
3149
+ method: 'GET',
3150
+ url: '/api/v1/{region}/bean/accounts/{accountId}/reconciliations',
3151
+ path: {
3152
+ accountId: data.accountId,
3153
+ region: data.region
3154
+ },
3155
+ errors: {
3156
+ 404: 'Account not found'
3157
+ }
3158
+ });
3159
+ }
3160
+ }
3161
+
3162
+ export class BeanExportService {
3163
+ /**
3164
+ * Export Beancount ledger as ZIP
3165
+ * Export all user Beancount data as a ZIP file containing ledger.beancount and yearly files in community format.
3166
+ * @returns unknown
3167
+ * @throws ApiError
3168
+ */
3169
+ public static exportControllerExportBeancount(): CancelablePromise<ExportControllerExportBeancountResponse> {
3170
+ return __request(OpenAPI, {
3171
+ method: 'GET',
3172
+ url: '/api/v1/{region}/bean/export/beancount'
1995
3173
  });
1996
3174
  }
1997
3175
  }
@@ -2001,6 +3179,7 @@ export class BeanImportService {
2001
3179
  * Import a bill file
2002
3180
  * 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
3181
  * @param data The data for the request.
3182
+ * @param data.region Region code for tenant context
2004
3183
  * @param data.formData Bill file to import
2005
3184
  * @returns ImportResultDto File imported successfully
2006
3185
  * @throws ApiError
@@ -2011,6 +3190,9 @@ export class BeanImportService {
2011
3190
  return __request(OpenAPI, {
2012
3191
  method: 'POST',
2013
3192
  url: '/api/v1/{region}/bean/import/file',
3193
+ path: {
3194
+ region: data.region
3195
+ },
2014
3196
  formData: data.formData,
2015
3197
  mediaType: 'multipart/form-data',
2016
3198
  errors: {
@@ -2026,6 +3208,7 @@ export class BeanImportService {
2026
3208
  * Identify file type
2027
3209
  * 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
3210
  * @param data The data for the request.
3211
+ * @param data.region Region code for tenant context
2029
3212
  * @param data.formData File to identify
2030
3213
  * @returns IdentifyResultDto File identification result
2031
3214
  * @throws ApiError
@@ -2036,6 +3219,9 @@ export class BeanImportService {
2036
3219
  return __request(OpenAPI, {
2037
3220
  method: 'POST',
2038
3221
  url: '/api/v1/{region}/bean/import/identify',
3222
+ path: {
3223
+ region: data.region
3224
+ },
2039
3225
  formData: data.formData,
2040
3226
  mediaType: 'multipart/form-data',
2041
3227
  errors: {
@@ -2044,6 +3230,32 @@ export class BeanImportService {
2044
3230
  });
2045
3231
  }
2046
3232
 
3233
+ /**
3234
+ * Import a Beancount file in community format
3235
+ * 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.
3236
+ * @param data The data for the request.
3237
+ * @param data.region Region code for tenant context
3238
+ * @param data.formData Beancount file to import
3239
+ * @returns unknown Beancount file imported successfully
3240
+ * @throws ApiError
3241
+ */
3242
+ public static fileImportControllerImportBeancount(
3243
+ data: FileImportControllerImportBeancountData
3244
+ ): CancelablePromise<FileImportControllerImportBeancountResponse> {
3245
+ return __request(OpenAPI, {
3246
+ method: 'POST',
3247
+ url: '/api/v1/{region}/bean/import/beancount',
3248
+ path: {
3249
+ region: data.region
3250
+ },
3251
+ formData: data.formData,
3252
+ mediaType: 'multipart/form-data',
3253
+ errors: {
3254
+ 400: 'Bad request - invalid file or no file uploaded'
3255
+ }
3256
+ });
3257
+ }
3258
+
2047
3259
  /**
2048
3260
  * Get importer configuration
2049
3261
  * Returns the current configuration for the specified importer. Creates default configuration if none exists.
@@ -2071,37 +3283,55 @@ export class BeanImportService {
2071
3283
  }
2072
3284
 
2073
3285
  /**
3286
+ * Update importer configuration
3287
+ * Updates the configuration for the specified importer. Partial updates are supported.
2074
3288
  * @param data The data for the request.
3289
+ * @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
3290
  * @param data.region Region code for tenant context
2076
- * @returns unknown
3291
+ * @param data.requestBody Partial configuration update. Only provided fields will be updated.
3292
+ * @returns ImporterConfigDto Configuration updated successfully
2077
3293
  * @throws ApiError
2078
3294
  */
2079
- public static importerConfigController(
2080
- data: ImporterConfigControllerData
2081
- ): CancelablePromise<ImporterConfigControllerResponse> {
3295
+ public static importerConfigControllerUpdateConfig(
3296
+ data: ImporterConfigControllerUpdateConfigData
3297
+ ): CancelablePromise<ImporterConfigControllerUpdateConfigResponse> {
2082
3298
  return __request(OpenAPI, {
2083
3299
  method: 'PUT',
2084
3300
  url: '/api/v1/{region}/bean/import/config/{importerId}',
2085
3301
  path: {
3302
+ importerId: data.importerId,
2086
3303
  region: data.region
3304
+ },
3305
+ body: data.requestBody,
3306
+ mediaType: 'application/json',
3307
+ errors: {
3308
+ 400: 'Invalid input - Validation failed',
3309
+ 404: 'Configuration not found'
2087
3310
  }
2088
3311
  });
2089
3312
  }
2090
3313
 
2091
3314
  /**
3315
+ * Reset configuration to default
3316
+ * Resets the configuration for the specified importer to default values. This operation overwrites all existing configuration.
2092
3317
  * @param data The data for the request.
3318
+ * @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
3319
  * @param data.region Region code for tenant context
2094
- * @returns unknown
3320
+ * @returns ImporterConfigDto Configuration reset successfully
2095
3321
  * @throws ApiError
2096
3322
  */
2097
- public static importerConfigController1(
2098
- data: ImporterConfigController1Data
2099
- ): CancelablePromise<ImporterConfigController1Response> {
3323
+ public static importerConfigControllerResetConfig(
3324
+ data: ImporterConfigControllerResetConfigData
3325
+ ): CancelablePromise<ImporterConfigControllerResetConfigResponse> {
2100
3326
  return __request(OpenAPI, {
2101
3327
  method: 'POST',
2102
3328
  url: '/api/v1/{region}/bean/import/config/{importerId}/reset',
2103
3329
  path: {
3330
+ importerId: data.importerId,
2104
3331
  region: data.region
3332
+ },
3333
+ errors: {
3334
+ 400: 'Invalid input - Unsupported importer'
2105
3335
  }
2106
3336
  });
2107
3337
  }
@@ -2133,7 +3363,7 @@ export class ProviderSyncService {
2133
3363
  *
2134
3364
  * @param data The data for the request.
2135
3365
  * @param data.providerName Provider name
2136
- * @param data.region Region code
3366
+ * @param data.region Region code for tenant context
2137
3367
  * @param data.requestBody
2138
3368
  * @returns ProviderSyncResponseDto Sync completed successfully
2139
3369
  * @throws ApiError
@@ -2161,13 +3391,20 @@ export class ProviderSyncService {
2161
3391
  /**
2162
3392
  * Get supported providers
2163
3393
  * Returns a list of all providers supported by the sync endpoint.
3394
+ * @param data The data for the request.
3395
+ * @param data.region Region code for tenant context
2164
3396
  * @returns SupportedProvidersResponseDto List of supported providers
2165
3397
  * @throws ApiError
2166
3398
  */
2167
- public static providerSyncControllerGetSupportedProviders(): CancelablePromise<ProviderSyncControllerGetSupportedProvidersResponse> {
3399
+ public static providerSyncControllerGetSupportedProviders(
3400
+ data: ProviderSyncControllerGetSupportedProvidersData
3401
+ ): CancelablePromise<ProviderSyncControllerGetSupportedProvidersResponse> {
2168
3402
  return __request(OpenAPI, {
2169
3403
  method: 'GET',
2170
3404
  url: '/api/v1/{region}/bean/import/provider/supported',
3405
+ path: {
3406
+ region: data.region
3407
+ },
2171
3408
  errors: {
2172
3409
  401: 'Missing or invalid authentication'
2173
3410
  }
@@ -2179,6 +3416,7 @@ export class ProviderSyncService {
2179
3416
  * Returns whether a specific provider is supported.
2180
3417
  * @param data The data for the request.
2181
3418
  * @param data.providerName Provider name to check
3419
+ * @param data.region Region code for tenant context
2182
3420
  * @returns unknown Provider support status
2183
3421
  * @throws ApiError
2184
3422
  */
@@ -2189,7 +3427,8 @@ export class ProviderSyncService {
2189
3427
  method: 'GET',
2190
3428
  url: '/api/v1/{region}/bean/import/provider/{providerName}/supported',
2191
3429
  path: {
2192
- providerName: data.providerName
3430
+ providerName: data.providerName,
3431
+ region: data.region
2193
3432
  },
2194
3433
  errors: {
2195
3434
  401: 'Missing or invalid authentication'
@@ -2198,10 +3437,106 @@ export class ProviderSyncService {
2198
3437
  }
2199
3438
  }
2200
3439
 
3440
+ export class ExternalAccountLinksService {
3441
+ /**
3442
+ * Create an external account → BeanAccount mapping (ADR-0113)
3443
+ * @param data The data for the request.
3444
+ * @param data.region Region code for tenant context
3445
+ * @param data.requestBody
3446
+ * @returns ExternalAccountLinkResponseDto Link created.
3447
+ * @throws ApiError
3448
+ */
3449
+ public static externalAccountLinkControllerCreate(
3450
+ data: ExternalAccountLinkControllerCreateData
3451
+ ): CancelablePromise<ExternalAccountLinkControllerCreateResponse> {
3452
+ return __request(OpenAPI, {
3453
+ method: 'POST',
3454
+ url: '/api/v1/{region}/bean/external-account-links',
3455
+ path: {
3456
+ region: data.region
3457
+ },
3458
+ body: data.requestBody,
3459
+ mediaType: 'application/json',
3460
+ errors: {
3461
+ 422: 'beanAccountId not owned, or an active link already exists.'
3462
+ }
3463
+ });
3464
+ }
3465
+
3466
+ /**
3467
+ * List the user's active external account links
3468
+ * @param data The data for the request.
3469
+ * @param data.provider
3470
+ * @param data.region Region code for tenant context
3471
+ * @returns ExternalAccountLinkListResponseDto Links retrieved.
3472
+ * @throws ApiError
3473
+ */
3474
+ public static externalAccountLinkControllerFindAll(
3475
+ data: ExternalAccountLinkControllerFindAllData
3476
+ ): CancelablePromise<ExternalAccountLinkControllerFindAllResponse> {
3477
+ return __request(OpenAPI, {
3478
+ method: 'GET',
3479
+ url: '/api/v1/{region}/bean/external-account-links',
3480
+ path: {
3481
+ region: data.region
3482
+ },
3483
+ query: {
3484
+ provider: data.provider
3485
+ }
3486
+ });
3487
+ }
3488
+
3489
+ /**
3490
+ * Get a single external account link
3491
+ * @param data The data for the request.
3492
+ * @param data.id
3493
+ * @param data.region Region code for tenant context
3494
+ * @returns ExternalAccountLinkResponseDto Link retrieved.
3495
+ * @throws ApiError
3496
+ */
3497
+ public static externalAccountLinkControllerFindOne(
3498
+ data: ExternalAccountLinkControllerFindOneData
3499
+ ): CancelablePromise<ExternalAccountLinkControllerFindOneResponse> {
3500
+ return __request(OpenAPI, {
3501
+ method: 'GET',
3502
+ url: '/api/v1/{region}/bean/external-account-links/{id}',
3503
+ path: {
3504
+ id: data.id,
3505
+ region: data.region
3506
+ },
3507
+ errors: {
3508
+ 422: 'Link not found or not owned by the user.'
3509
+ }
3510
+ });
3511
+ }
3512
+
3513
+ /**
3514
+ * Soft-delete (disconnect) an external account link
3515
+ * @param data The data for the request.
3516
+ * @param data.id
3517
+ * @param data.region Region code for tenant context
3518
+ * @returns void Link soft-deleted; historical transactions are unaffected.
3519
+ * @throws ApiError
3520
+ */
3521
+ public static externalAccountLinkControllerRemove(
3522
+ data: ExternalAccountLinkControllerRemoveData
3523
+ ): CancelablePromise<ExternalAccountLinkControllerRemoveResponse> {
3524
+ return __request(OpenAPI, {
3525
+ method: 'DELETE',
3526
+ url: '/api/v1/{region}/bean/external-account-links/{id}',
3527
+ path: {
3528
+ id: data.id,
3529
+ region: data.region
3530
+ }
3531
+ });
3532
+ }
3533
+ }
3534
+
2201
3535
  export class ImportTelemetryService {
2202
3536
  /**
2203
3537
  * Receive anonymous parser failure telemetry
2204
3538
  * @param data The data for the request.
3539
+ * @param data.region Region code for tenant context
2205
3540
  * @param data.requestBody
2206
3541
  * @returns unknown Telemetry report received
2207
3542
  * @throws ApiError
@@ -2212,6 +3547,34 @@ export class ImportTelemetryService {
2212
3547
  return __request(OpenAPI, {
2213
3548
  method: 'POST',
2214
3549
  url: '/api/v1/{region}/bean/import/parser-telemetry',
3550
+ path: {
3551
+ region: data.region
3552
+ },
3553
+ body: data.requestBody,
3554
+ mediaType: 'application/json',
3555
+ errors: {
3556
+ 401: 'Unauthorized'
3557
+ }
3558
+ });
3559
+ }
3560
+
3561
+ /**
3562
+ * Receive anonymous zero-hit coverage miss report
3563
+ * @param data The data for the request.
3564
+ * @param data.region Region code for tenant context
3565
+ * @param data.requestBody
3566
+ * @returns unknown Coverage miss report received
3567
+ * @throws ApiError
3568
+ */
3569
+ public static telemetryControllerReportCoverageMiss(
3570
+ data: TelemetryControllerReportCoverageMissData
3571
+ ): CancelablePromise<TelemetryControllerReportCoverageMissResponse> {
3572
+ return __request(OpenAPI, {
3573
+ method: 'POST',
3574
+ url: '/api/v1/{region}/bean/import/parser-coverage-miss',
3575
+ path: {
3576
+ region: data.region
3577
+ },
2215
3578
  body: data.requestBody,
2216
3579
  mediaType: 'application/json',
2217
3580
  errors: {
@@ -2219,6 +3582,29 @@ export class ImportTelemetryService {
2219
3582
  }
2220
3583
  });
2221
3584
  }
3585
+
3586
+ /**
3587
+ * Coverage metrics (uncovered format aggregation)
3588
+ * @param data The data for the request.
3589
+ * @param data.region Region code for tenant context
3590
+ * @param data.topN Top-N uncovered formats (default 10)
3591
+ * @returns unknown Coverage metrics
3592
+ * @throws ApiError
3593
+ */
3594
+ public static telemetryControllerGetCoverageMetrics(
3595
+ data: TelemetryControllerGetCoverageMetricsData
3596
+ ): CancelablePromise<TelemetryControllerGetCoverageMetricsResponse> {
3597
+ return __request(OpenAPI, {
3598
+ method: 'GET',
3599
+ url: '/api/v1/{region}/bean/import/parser-coverage-metrics',
3600
+ path: {
3601
+ region: data.region
3602
+ },
3603
+ query: {
3604
+ topN: data.topN
3605
+ }
3606
+ });
3607
+ }
2222
3608
  }
2223
3609
 
2224
3610
  export class BeanNlpService {
@@ -2226,6 +3612,7 @@ export class BeanNlpService {
2226
3612
  * Process natural language input
2227
3613
  * 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
3614
  * @param data The data for the request.
3615
+ * @param data.region Region code for tenant context
2229
3616
  * @param data.requestBody Natural language transaction input with optional session ID
2230
3617
  * @returns NlpResponseDto NLP processing result - either created transaction or asking for more info
2231
3618
  * @throws ApiError
@@ -2236,6 +3623,9 @@ export class BeanNlpService {
2236
3623
  return __request(OpenAPI, {
2237
3624
  method: 'POST',
2238
3625
  url: '/api/v1/{region}/bean/nlp/process',
3626
+ path: {
3627
+ region: data.region
3628
+ },
2239
3629
  body: data.requestBody,
2240
3630
  mediaType: 'application/json',
2241
3631
  errors: {
@@ -2249,16 +3639,20 @@ export class BeanNlpService {
2249
3639
  * Clear dialogue session
2250
3640
  * Clear the current NLP dialogue session. Use this to cancel an ongoing multi-turn dialogue.
2251
3641
  * @param data The data for the request.
3642
+ * @param data.region Region code for tenant context
2252
3643
  * @param data.sessionId Specific session ID to clear (defaults to user session)
2253
3644
  * @returns void Session cleared successfully
2254
3645
  * @throws ApiError
2255
3646
  */
2256
3647
  public static nlpControllerClearSession(
2257
- data: NlpControllerClearSessionData = {}
3648
+ data: NlpControllerClearSessionData
2258
3649
  ): CancelablePromise<NlpControllerClearSessionResponse> {
2259
3650
  return __request(OpenAPI, {
2260
3651
  method: 'DELETE',
2261
3652
  url: '/api/v1/{region}/bean/nlp/session',
3653
+ path: {
3654
+ region: data.region
3655
+ },
2262
3656
  query: {
2263
3657
  sessionId: data.sessionId
2264
3658
  },
@@ -2272,16 +3666,20 @@ export class BeanNlpService {
2272
3666
  * Get current session state
2273
3667
  * Get the current NLP dialogue session state. Useful for debugging and displaying session context in UI.
2274
3668
  * @param data The data for the request.
3669
+ * @param data.region Region code for tenant context
2275
3670
  * @param data.sessionId Specific session ID to get (defaults to user session)
2276
3671
  * @returns unknown Current session state (or null if no active session)
2277
3672
  * @throws ApiError
2278
3673
  */
2279
3674
  public static nlpControllerGetSession(
2280
- data: NlpControllerGetSessionData = {}
3675
+ data: NlpControllerGetSessionData
2281
3676
  ): CancelablePromise<NlpControllerGetSessionResponse> {
2282
3677
  return __request(OpenAPI, {
2283
3678
  method: 'GET',
2284
3679
  url: '/api/v1/{region}/bean/nlp/session',
3680
+ path: {
3681
+ region: data.region
3682
+ },
2285
3683
  query: {
2286
3684
  sessionId: data.sessionId
2287
3685
  },
@@ -2306,19 +3704,29 @@ export class BeanPlatformsService {
2306
3704
  }
2307
3705
 
2308
3706
  /**
2309
- * @returns unknown
3707
+ * Create a new platform
3708
+ * @param data The data for the request.
3709
+ * @param data.requestBody
3710
+ * @returns unknown Platform created successfully
2310
3711
  * @throws ApiError
2311
3712
  */
2312
- public static platformController(): CancelablePromise<PlatformControllerResponse> {
3713
+ public static platformControllerCreate(
3714
+ data: PlatformControllerCreateData
3715
+ ): CancelablePromise<PlatformControllerCreateResponse> {
2313
3716
  return __request(OpenAPI, {
2314
3717
  method: 'POST',
2315
- url: '/api/v1/bean/platforms'
3718
+ url: '/api/v1/bean/platforms',
3719
+ body: data.requestBody,
3720
+ mediaType: 'application/json',
3721
+ errors: {
3722
+ 409: 'Platform already exists'
3723
+ }
2316
3724
  });
2317
3725
  }
2318
3726
 
2319
3727
  /**
2320
3728
  * Get platform list for current user
2321
- * @returns unknown List of platforms with user binding status
3729
+ * @returns PlatformListItemDto List of platforms with user binding status
2322
3730
  * @throws ApiError
2323
3731
  */
2324
3732
  public static platformControllerGetPlatformList(): CancelablePromise<PlatformControllerGetPlatformListResponse> {
@@ -2329,139 +3737,70 @@ export class BeanPlatformsService {
2329
3737
  }
2330
3738
 
2331
3739
  /**
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}'
2350
- });
2351
- }
2352
- }
2353
-
2354
- export class SymbolsService {
2355
- /**
2356
- * Search for symbols
2357
- * Search symbols by query with optional filters for asset class, area, and indices
2358
- * @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
2365
- * @throws ApiError
2366
- */
2367
- public static symbolControllerLookupSymbol(
2368
- data: SymbolControllerLookupSymbolData = {}
2369
- ): CancelablePromise<SymbolControllerLookupSymbolResponse> {
2370
- return __request(OpenAPI, {
2371
- method: 'GET',
2372
- url: '/api/v1/market/symbols/lookup',
2373
- 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'
2382
- }
2383
- });
2384
- }
2385
-
2386
- /**
2387
- * Get symbol data
2388
- * Retrieve detailed symbol information including optional historical data
3740
+ * Match platforms by name or alias
2389
3741
  * @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
3742
+ * @param data.q Search query — Chinese name, English name, or abbreviation
3743
+ * @param data.region Region code for category override lookup
3744
+ * @returns PlatformMatchResponseDto Matching platforms with overall match type and truncation flag
2394
3745
  * @throws ApiError
2395
3746
  */
2396
- public static symbolControllerGetSymbolData(
2397
- data: SymbolControllerGetSymbolDataData
2398
- ): CancelablePromise<SymbolControllerGetSymbolDataResponse> {
3747
+ public static platformControllerMatchPlatforms(
3748
+ data: PlatformControllerMatchPlatformsData
3749
+ ): CancelablePromise<PlatformControllerMatchPlatformsResponse> {
2399
3750
  return __request(OpenAPI, {
2400
3751
  method: 'GET',
2401
- url: '/api/v1/market/symbols/{dataSource}/{symbol}',
2402
- path: {
2403
- dataSource: data.dataSource,
2404
- symbol: data.symbol
2405
- },
3752
+ url: '/api/v1/bean/platforms/match',
2406
3753
  query: {
2407
- includeHistoricalData: data.includeHistoricalData
2408
- },
2409
- errors: {
2410
- 400: 'Invalid data source',
2411
- 404: 'Symbol not found'
2412
- }
2413
- });
2414
- }
2415
-
2416
- /**
2417
- * Gather symbol data for specific date
2418
- * Retrieve historical symbol data for a specific date
2419
- * @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
2424
- * @throws ApiError
2425
- */
2426
- public static symbolControllerGatherSymbolForDate(
2427
- data: SymbolControllerGatherSymbolForDateData
2428
- ): CancelablePromise<SymbolControllerGatherSymbolForDateResponse> {
2429
- return __request(OpenAPI, {
2430
- method: 'GET',
2431
- url: '/api/v1/market/symbols/{dataSource}/{symbol}/{dateString}',
2432
- path: {
2433
- dataSource: data.dataSource,
2434
- dateString: data.dateString,
2435
- symbol: data.symbol
2436
- },
2437
- errors: {
2438
- 400: 'Invalid date format',
2439
- 404: 'Symbol data not found for specified date'
3754
+ q: data.q,
3755
+ region: data.region
2440
3756
  }
2441
3757
  });
2442
3758
  }
2443
3759
 
2444
3760
  /**
2445
- * @returns unknown
3761
+ * Update a platform
3762
+ * @param data The data for the request.
3763
+ * @param data.id Platform ID
3764
+ * @param data.requestBody
3765
+ * @returns unknown Platform updated successfully
2446
3766
  * @throws ApiError
2447
3767
  */
2448
- public static symbolController(): CancelablePromise<SymbolControllerResponse> {
3768
+ public static platformControllerUpdate(
3769
+ data: PlatformControllerUpdateData
3770
+ ): CancelablePromise<PlatformControllerUpdateResponse> {
2449
3771
  return __request(OpenAPI, {
2450
3772
  method: 'PUT',
2451
- url: '/api/v1/market/symbols/yahoo/batch-update'
3773
+ url: '/api/v1/bean/platforms/{id}',
3774
+ path: {
3775
+ id: data.id
3776
+ },
3777
+ body: data.requestBody,
3778
+ mediaType: 'application/json',
3779
+ errors: {
3780
+ 404: 'Platform not found'
3781
+ }
2452
3782
  });
2453
3783
  }
2454
- }
2455
3784
 
2456
- export class DefaultService {
2457
3785
  /**
2458
- * @returns unknown
3786
+ * Delete a platform
3787
+ * @param data The data for the request.
3788
+ * @param data.id Platform ID
3789
+ * @returns void Platform deleted successfully
2459
3790
  * @throws ApiError
2460
3791
  */
2461
- public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
3792
+ public static platformControllerDelete(
3793
+ data: PlatformControllerDeleteData
3794
+ ): CancelablePromise<PlatformControllerDeleteResponse> {
2462
3795
  return __request(OpenAPI, {
2463
- method: 'POST',
2464
- url: '/api/v1/cache/flush'
3796
+ method: 'DELETE',
3797
+ url: '/api/v1/bean/platforms/{id}',
3798
+ path: {
3799
+ id: data.id
3800
+ },
3801
+ errors: {
3802
+ 404: 'Platform not found'
3803
+ }
2465
3804
  });
2466
3805
  }
2467
3806
  }
@@ -2471,16 +3810,20 @@ export class DashboardService {
2471
3810
  * Get net worth overview
2472
3811
  * Returns total net worth with breakdown of assets and liabilities
2473
3812
  * @param data The data for the request.
3813
+ * @param data.region Region code for tenant context
2474
3814
  * @param data.date Date for balance calculation (ISO 8601 format)
2475
3815
  * @returns NetWorthResponseDto Net worth retrieved successfully
2476
3816
  * @throws ApiError
2477
3817
  */
2478
3818
  public static dashboardControllerGetNetWorth(
2479
- data: DashboardControllerGetNetWorthData = {}
3819
+ data: DashboardControllerGetNetWorthData
2480
3820
  ): CancelablePromise<DashboardControllerGetNetWorthResponse> {
2481
3821
  return __request(OpenAPI, {
2482
3822
  method: 'GET',
2483
3823
  url: '/api/v1/{region}/dashboard/net-worth',
3824
+ path: {
3825
+ region: data.region
3826
+ },
2484
3827
  query: {
2485
3828
  date: data.date
2486
3829
  },
@@ -2494,20 +3837,26 @@ export class DashboardService {
2494
3837
  * Get accounts grouped by platform
2495
3838
  * Returns accounts with balances grouped by financial platform
2496
3839
  * @param data The data for the request.
3840
+ * @param data.region Region code for tenant context
2497
3841
  * @param data.groupBy Grouping strategy
2498
3842
  * @param data.date Date for balance calculation (ISO 8601 format)
3843
+ * @param data.accountId Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
2499
3844
  * @returns unknown Accounts retrieved successfully. Response type depends on groupBy parameter.
2500
3845
  * @throws ApiError
2501
3846
  */
2502
3847
  public static dashboardControllerGetAccounts(
2503
- data: DashboardControllerGetAccountsData = {}
3848
+ data: DashboardControllerGetAccountsData
2504
3849
  ): CancelablePromise<DashboardControllerGetAccountsResponse> {
2505
3850
  return __request(OpenAPI, {
2506
3851
  method: 'GET',
2507
3852
  url: '/api/v1/{region}/dashboard/accounts',
3853
+ path: {
3854
+ region: data.region
3855
+ },
2508
3856
  query: {
2509
3857
  groupBy: data.groupBy,
2510
- date: data.date
3858
+ date: data.date,
3859
+ accountId: data.accountId
2511
3860
  },
2512
3861
  errors: {
2513
3862
  401: 'User not authenticated'
@@ -2520,6 +3869,7 @@ export class DashboardService {
2520
3869
  * Returns income, expenses, and savings for a monthly period
2521
3870
  * @param data The data for the request.
2522
3871
  * @param data.period Period in YYYY-MM format
3872
+ * @param data.region Region code for tenant context
2523
3873
  * @returns CashFlowResponseDto Cash flow retrieved successfully
2524
3874
  * @throws ApiError
2525
3875
  */
@@ -2529,6 +3879,9 @@ export class DashboardService {
2529
3879
  return __request(OpenAPI, {
2530
3880
  method: 'GET',
2531
3881
  url: '/api/v1/{region}/dashboard/cash-flow',
3882
+ path: {
3883
+ region: data.region
3884
+ },
2532
3885
  query: {
2533
3886
  period: data.period
2534
3887
  },
@@ -2538,126 +3891,88 @@ export class DashboardService {
2538
3891
  }
2539
3892
  });
2540
3893
  }
2541
- }
2542
3894
 
2543
- export class ReportingService {
2544
3895
  /**
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
- *
3896
+ * Get expenses/income grouped by functional category
3897
+ * 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
3898
  * @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
3899
+ * @param data.region Region code for tenant context
3900
+ * @param data.groupBy Grouping strategy
3901
+ * @param data.period Time window (1m = current calendar month)
3902
+ * @param data.flow Account root to aggregate (expense → ^Expenses:, income → ^Income:)
3903
+ * @returns ExpensesByCategoryResponseDto Expenses retrieved successfully
2562
3904
  * @throws ApiError
2563
3905
  */
2564
- public static reportingControllerGetPortfolioTrends(
2565
- data: ReportingControllerGetPortfolioTrendsData = {}
2566
- ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
3906
+ public static dashboardControllerGetExpenses(
3907
+ data: DashboardControllerGetExpensesData
3908
+ ): CancelablePromise<DashboardControllerGetExpensesResponse> {
2567
3909
  return __request(OpenAPI, {
2568
3910
  method: 'GET',
2569
- url: '/api/v1/{region}/reporting/portfolio/trends',
3911
+ url: '/api/v1/{region}/dashboard/expenses',
3912
+ path: {
3913
+ region: data.region
3914
+ },
2570
3915
  query: {
3916
+ groupBy: data.groupBy,
2571
3917
  period: data.period,
2572
- granularity: data.granularity
3918
+ flow: data.flow
2573
3919
  },
2574
3920
  errors: {
3921
+ 400: 'Invalid groupBy or period',
2575
3922
  401: 'User not authenticated'
2576
3923
  }
2577
3924
  });
2578
3925
  }
3926
+ }
2579
3927
 
3928
+ export class InvestmentService {
2580
3929
  /**
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
- *
3930
+ * Get per-holding unrealized + realized P&L
3931
+ * Average-cost unrealized P&L per account × commodity, plus cumulative realized P&L on sold lots (method = FIFO | average, default average).
2595
3932
  * @param data The data for the request.
2596
- * @param data.requestBody Optional date (defaults to today)
2597
- * @returns GenerateSnapshotResponse Snapshot generated successfully
3933
+ * @param data.region Region code for tenant context
3934
+ * @param data.asOf As-of date (ISO 8601), defaults to today
3935
+ * @param data.accountId Scope to a single account
3936
+ * @param data.method Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
3937
+ * @returns HoldingPnlResponseDto Holding P&L retrieved successfully
2598
3938
  * @throws ApiError
2599
3939
  */
2600
- public static reportingControllerGenerateSnapshot(
2601
- data: ReportingControllerGenerateSnapshotData
2602
- ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
3940
+ public static holdingPnlControllerGetHoldingPnl(
3941
+ data: HoldingPnlControllerGetHoldingPnlData
3942
+ ): CancelablePromise<HoldingPnlControllerGetHoldingPnlResponse> {
2603
3943
  return __request(OpenAPI, {
2604
- method: 'POST',
2605
- url: '/api/v1/{region}/reporting/snapshots/generate',
2606
- body: data.requestBody,
2607
- mediaType: 'application/json',
3944
+ method: 'GET',
3945
+ url: '/api/v1/{region}/investment/holdings/pnl',
3946
+ path: {
3947
+ region: data.region
3948
+ },
3949
+ query: {
3950
+ asOf: data.asOf,
3951
+ accountId: data.accountId,
3952
+ method: data.method
3953
+ },
2608
3954
  errors: {
2609
- 400: 'Invalid date format',
3955
+ 400: 'Invalid asOf format/value/future date, invalid accountId format, or unsupported method',
2610
3956
  401: 'User not authenticated'
2611
3957
  }
2612
3958
  });
2613
3959
  }
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
3960
  }
2651
3961
 
2652
3962
  export class ApiKeysService {
2653
3963
  /**
2654
- * @returns unknown
3964
+ * Create API key
3965
+ * Generates a new API key for the authenticated user
3966
+ * @returns unknown API key created successfully
2655
3967
  * @throws ApiError
2656
3968
  */
2657
- public static apiKeysController(): CancelablePromise<ApiKeysControllerResponse> {
3969
+ public static apiKeysControllerCreateApiKey(): CancelablePromise<ApiKeysControllerCreateApiKeyResponse> {
2658
3970
  return __request(OpenAPI, {
2659
3971
  method: 'POST',
2660
- url: '/api/v1/auth/api-keys'
3972
+ url: '/api/v1/auth/api-keys',
3973
+ errors: {
3974
+ 403: 'Insufficient permissions to create API key'
3975
+ }
2661
3976
  });
2662
3977
  }
2663
3978
  }
@@ -2667,7 +3982,7 @@ export class AuthService {
2667
3982
  * Anonymous login with access token
2668
3983
  * @param data The data for the request.
2669
3984
  * @param data.requestBody
2670
- * @returns unknown Login successful
3985
+ * @returns AnonymousLoginResponseDto Login successful
2671
3986
  * @throws ApiError
2672
3987
  */
2673
3988
  public static authControllerAccessTokenLogin(
@@ -2685,6 +4000,19 @@ export class AuthService {
2685
4000
  }
2686
4001
  }
2687
4002
 
4003
+ export class DefaultService {
4004
+ /**
4005
+ * @returns unknown
4006
+ * @throws ApiError
4007
+ */
4008
+ public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
4009
+ return __request(OpenAPI, {
4010
+ method: 'POST',
4011
+ url: '/api/v1/cache/flush'
4012
+ });
4013
+ }
4014
+ }
4015
+
2688
4016
  export class ExchangeRateService {
2689
4017
  /**
2690
4018
  * Get exchange rate for currency pair
@@ -2743,6 +4071,21 @@ export class HealthService {
2743
4071
  });
2744
4072
  }
2745
4073
 
4074
+ /**
4075
+ * Check OpenBB schema status
4076
+ * @returns unknown OpenBB status
4077
+ * @throws ApiError
4078
+ */
4079
+ public static healthControllerCheckOpenBb(): CancelablePromise<HealthControllerCheckOpenBbResponse> {
4080
+ return __request(OpenAPI, {
4081
+ method: 'GET',
4082
+ url: '/api/v1/health/openbb',
4083
+ errors: {
4084
+ 503: 'OpenBB unavailable'
4085
+ }
4086
+ });
4087
+ }
4088
+
2746
4089
  /**
2747
4090
  * Check Redis connection health
2748
4091
  * @returns unknown Redis is healthy
@@ -2811,69 +4154,6 @@ export class HealthService {
2811
4154
  }
2812
4155
  });
2813
4156
  }
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
4157
  }
2878
4158
 
2879
4159
  export class InfoService {
@@ -2889,93 +4169,3 @@ export class InfoService {
2889
4169
  });
2890
4170
  }
2891
4171
  }
2892
-
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
-
2920
- /**
2921
- * Get website favicon by URL
2922
- * @param data The data for the request.
2923
- * @param data.url Website URL to fetch favicon from
2924
- * @returns unknown Logo image stream (favicon)
2925
- * @throws ApiError
2926
- */
2927
- public static logoControllerGetLogoByUrl(
2928
- data: LogoControllerGetLogoByUrlData
2929
- ): CancelablePromise<LogoControllerGetLogoByUrlResponse> {
2930
- return __request(OpenAPI, {
2931
- method: 'GET',
2932
- url: '/api/v1/market/logos',
2933
- query: {
2934
- url: data.url
2935
- },
2936
- errors: {
2937
- 401: 'Unauthorized',
2938
- 503: 'Service unavailable'
2939
- }
2940
- });
2941
- }
2942
- }
2943
-
2944
- export class MarketDataService {
2945
- /**
2946
- * Get market data by symbol
2947
- * Retrieves market data and asset profile for a given symbol and data source
2948
- * @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
2952
- * @throws ApiError
2953
- */
2954
- public static marketDataControllerGetMarketDataBySymbol(
2955
- data: MarketDataControllerGetMarketDataBySymbolData
2956
- ): CancelablePromise<MarketDataControllerGetMarketDataBySymbolResponse> {
2957
- return __request(OpenAPI, {
2958
- method: 'GET',
2959
- url: '/api/v1/market-data/{dataSource}/{symbol}',
2960
- path: {
2961
- dataSource: data.dataSource,
2962
- symbol: data.symbol
2963
- },
2964
- errors: {
2965
- 403: 'Insufficient permissions to read market data',
2966
- 404: 'Market data not found'
2967
- }
2968
- });
2969
- }
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
- }