@firela/api-types 0.0.0-canary.b3b7767b → 0.0.0-canary.b3e2bcf7

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