@firela/api-types 0.0.0-canary.63a53b7d → 0.0.0-canary.6823575

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.
@@ -57,6 +57,48 @@ import type {
57
57
  ReviewControllerUndoResponse,
58
58
  ReviewControllerBatchResolveData,
59
59
  ReviewControllerBatchResolveResponse,
60
+ TransactionRuleControllerCreateData,
61
+ TransactionRuleControllerCreateResponse,
62
+ TransactionRuleControllerListData,
63
+ TransactionRuleControllerListResponse,
64
+ TransactionRuleControllerValidateData,
65
+ TransactionRuleControllerValidateResponse,
66
+ TransactionRuleControllerBulkCreateData,
67
+ TransactionRuleControllerBulkCreateResponse,
68
+ TransactionRuleControllerExportData,
69
+ TransactionRuleControllerExportResponse,
70
+ TransactionRuleControllerGetStatisticsData,
71
+ TransactionRuleControllerGetStatisticsResponse,
72
+ TransactionRuleControllerGetDetailData,
73
+ TransactionRuleControllerGetDetailResponse,
74
+ TransactionRuleControllerUpdateData,
75
+ TransactionRuleControllerUpdateResponse,
76
+ TransactionRuleControllerDeleteData,
77
+ TransactionRuleControllerDeleteResponse,
78
+ TransactionRuleControllerTestData,
79
+ TransactionRuleControllerTestResponse,
80
+ UserControllerDeleteOwnUserData,
81
+ UserControllerDeleteOwnUserResponse,
82
+ UserControllerGetUserData,
83
+ UserControllerGetUserResponse,
84
+ UserControllerSignupUserData,
85
+ UserControllerSignupUserResponse,
86
+ UserControllerDeleteUserData,
87
+ UserControllerDeleteUserResponse,
88
+ UserControllerGetUserInfoData,
89
+ UserControllerGetUserInfoResponse,
90
+ UserControllerUpdateUserSettingData,
91
+ UserControllerUpdateUserSettingResponse,
92
+ UserControllerGetAllUserSettingsByPageData,
93
+ UserControllerGetAllUserSettingsByPageResponse,
94
+ UserControllerGetAssetLiabilitySummaryResponse,
95
+ PropertyControllerGetAllResponse,
96
+ PropertyControllerGetByKeyData,
97
+ PropertyControllerGetByKeyResponse,
98
+ PropertyControllerUpdateData,
99
+ PropertyControllerUpdateResponse,
100
+ PropertyControllerDeleteData,
101
+ PropertyControllerDeleteResponse,
60
102
  PayeeControllerCreateData,
61
103
  PayeeControllerCreateResponse,
62
104
  PayeeControllerFindAllData,
@@ -85,6 +127,7 @@ import type {
85
127
  PayeeProfileAdminControllerVerifyResponse,
86
128
  PayeeProfileAdminControllerUnverifyData,
87
129
  PayeeProfileAdminControllerUnverifyResponse,
130
+ PayeeProfileControllerListActiveResponse,
88
131
  CommodityControllerCreateData,
89
132
  CommodityControllerCreateResponse,
90
133
  CommodityControllerFindAllData,
@@ -99,6 +142,14 @@ import type {
99
142
  CommodityControllerGetOrCreateResponse,
100
143
  CommodityControllerBulkCreateData,
101
144
  CommodityControllerBulkCreateResponse,
145
+ ReportingControllerGetPortfolioTrendsData,
146
+ ReportingControllerGetPortfolioTrendsResponse,
147
+ ReportingControllerGetCashFlowTrendsData,
148
+ ReportingControllerGetCashFlowTrendsResponse,
149
+ ReportingControllerGenerateSnapshotData,
150
+ ReportingControllerGenerateSnapshotResponse,
151
+ ReportingControllerBackfillSnapshotsData,
152
+ ReportingControllerBackfillSnapshotsResponse,
102
153
  PriceControllerCreateData,
103
154
  PriceControllerCreateResponse,
104
155
  PriceControllerFindAllData,
@@ -143,48 +194,8 @@ import type {
143
194
  ExpectedTransactionControllerEnterNowResponse,
144
195
  ForecastControllerGetForecastData,
145
196
  ForecastControllerGetForecastResponse,
146
- TransactionRuleControllerCreateData,
147
- TransactionRuleControllerCreateResponse,
148
- TransactionRuleControllerListData,
149
- TransactionRuleControllerListResponse,
150
- TransactionRuleControllerValidateData,
151
- TransactionRuleControllerValidateResponse,
152
- TransactionRuleControllerBulkCreateData,
153
- TransactionRuleControllerBulkCreateResponse,
154
- TransactionRuleControllerExportData,
155
- TransactionRuleControllerExportResponse,
156
- TransactionRuleControllerGetStatisticsData,
157
- TransactionRuleControllerGetStatisticsResponse,
158
- TransactionRuleControllerGetDetailData,
159
- TransactionRuleControllerGetDetailResponse,
160
- TransactionRuleControllerUpdateData,
161
- TransactionRuleControllerUpdateResponse,
162
- TransactionRuleControllerDeleteData,
163
- TransactionRuleControllerDeleteResponse,
164
- TransactionRuleControllerTestData,
165
- TransactionRuleControllerTestResponse,
166
- UserControllerDeleteOwnUserData,
167
- UserControllerDeleteOwnUserResponse,
168
- UserControllerGetUserData,
169
- UserControllerGetUserResponse,
170
- UserControllerSignupUserData,
171
- UserControllerSignupUserResponse,
172
- UserControllerDeleteUserData,
173
- UserControllerDeleteUserResponse,
174
- UserControllerGetUserInfoData,
175
- UserControllerGetUserInfoResponse,
176
- UserControllerUpdateUserSettingData,
177
- UserControllerUpdateUserSettingResponse,
178
- UserControllerGetAllUserSettingsByPageData,
179
- UserControllerGetAllUserSettingsByPageResponse,
180
- UserControllerGetAssetLiabilitySummaryResponse,
181
- PropertyControllerGetAllResponse,
182
- PropertyControllerGetByKeyData,
183
- PropertyControllerGetByKeyResponse,
184
- PropertyControllerUpdateData,
185
- PropertyControllerUpdateResponse,
186
- PropertyControllerDeleteData,
187
- PropertyControllerDeleteResponse,
197
+ CategoryCatalogControllerListData,
198
+ CategoryCatalogControllerListResponse,
188
199
  EventControllerCreateData,
189
200
  EventControllerCreateResponse,
190
201
  EventControllerFindAllData,
@@ -207,6 +218,7 @@ import type {
207
218
  ReconciliationControllerPadResponse,
208
219
  ReconciliationControllerHistoryData,
209
220
  ReconciliationControllerHistoryResponse,
221
+ ExportControllerExportBeancountData,
210
222
  ExportControllerExportBeancountResponse,
211
223
  FileImportControllerImportFileData,
212
224
  FileImportControllerImportFileResponse,
@@ -249,9 +261,12 @@ import type {
249
261
  PlatformControllerFindAllResponse,
250
262
  PlatformControllerCreateData,
251
263
  PlatformControllerCreateResponse,
264
+ PlatformControllerGetPlatformListData,
252
265
  PlatformControllerGetPlatformListResponse,
253
266
  PlatformControllerMatchPlatformsData,
254
267
  PlatformControllerMatchPlatformsResponse,
268
+ PlatformControllerGetPlatformStandardsData,
269
+ PlatformControllerGetPlatformStandardsResponse,
255
270
  PlatformControllerUpdateData,
256
271
  PlatformControllerUpdateResponse,
257
272
  PlatformControllerDeleteData,
@@ -264,19 +279,17 @@ import type {
264
279
  DashboardControllerGetCashFlowResponse,
265
280
  DashboardControllerGetExpensesData,
266
281
  DashboardControllerGetExpensesResponse,
282
+ DashboardControllerGetAdvisorContextData,
283
+ DashboardControllerGetAdvisorContextResponse,
267
284
  HoldingPnlControllerGetHoldingPnlData,
268
285
  HoldingPnlControllerGetHoldingPnlResponse,
269
- ReportingControllerGetPortfolioTrendsData,
270
- ReportingControllerGetPortfolioTrendsResponse,
271
- ReportingControllerGetCashFlowTrendsData,
272
- ReportingControllerGetCashFlowTrendsResponse,
273
- ReportingControllerGenerateSnapshotData,
274
- ReportingControllerGenerateSnapshotResponse,
275
- ReportingControllerBackfillSnapshotsData,
276
- ReportingControllerBackfillSnapshotsResponse,
277
286
  ApiKeysControllerCreateApiKeyResponse,
278
287
  AuthControllerAccessTokenLoginData,
279
288
  AuthControllerAccessTokenLoginResponse,
289
+ AuthControllerAdvisorTokenLoginData,
290
+ AuthControllerAdvisorTokenLoginResponse,
291
+ ParserContributionControllerCreateData,
292
+ ParserContributionControllerCreateResponse,
280
293
  CacheControllerFlushCacheResponse,
281
294
  ExchangeRateControllerGetExchangeRateData,
282
295
  ExchangeRateControllerGetExchangeRateResponse,
@@ -288,7 +301,11 @@ import type {
288
301
  HealthControllerResetCircuitBreakerData,
289
302
  HealthControllerResetCircuitBreakerResponse,
290
303
  HealthControllerGetMetricsResponse,
291
- InfoControllerGetInfoResponse
304
+ InfoControllerGetInfoResponse,
305
+ SymbolControllerSearchData,
306
+ SymbolControllerSearchResponse,
307
+ SymbolControllerGetQuoteData,
308
+ SymbolControllerGetQuoteResponse
292
309
  } from './types.gen';
293
310
 
294
311
  export class BeanAccountsService {
@@ -326,7 +343,7 @@ export class BeanAccountsService {
326
343
  * @param data.type Filter by account type
327
344
  * @param data.status Filter by status
328
345
  * @param data.isCustom Filter by custom (user-created) accounts only
329
- * @param data.search Search term for account path
346
+ * @param data.search Search term matched against account path and user-set display name (case-insensitive)
330
347
  * @param data.limit Maximum number of results
331
348
  * @param data.offset Number of results to skip
332
349
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -407,7 +424,7 @@ export class BeanAccountsService {
407
424
 
408
425
  /**
409
426
  * Delete account
410
- * Deletes an account (only if no transactions)
427
+ * Deletes an account (only if no active transactions; voided/superseded residual postings are cleaned up)
411
428
  * @param data The data for the request.
412
429
  * @param data.id Account UUID
413
430
  * @param data.region Region code for tenant context
@@ -426,7 +443,7 @@ export class BeanAccountsService {
426
443
  },
427
444
  errors: {
428
445
  404: 'Account not found',
429
- 409: 'Account has transactions and cannot be deleted'
446
+ 409: 'Account has active transactions and cannot be deleted'
430
447
  }
431
448
  });
432
449
  }
@@ -522,11 +539,11 @@ export class BeanAccountsService {
522
539
  export class BeanAccountStandardsService {
523
540
  /**
524
541
  * Get account templates
525
- * Returns predefined account templates for a region. Supports filtering by account type and search term.
542
+ * Returns predefined account templates for a region. Supports filtering by account type and search term. Not-yet-open region codes return the universal-only catalog (#759).
526
543
  * @param data The data for the request.
527
- * @param data.region Region code (cn, us, de)
544
+ * @param data.region Region code (any ISO alpha-2; not-yet-open codes return the universal-only catalog)
528
545
  * @param data.type Filter by account type
529
- * @param data.search Search term for path or description
546
+ * @param data.search Search term for path, description, aliases, or localized display name
530
547
  * @returns AccountStandardListResponseDto Account templates retrieved successfully
531
548
  * @throws ApiError
532
549
  */
@@ -550,7 +567,7 @@ export class BeanAccountStandardsService {
550
567
  * Get template metadata for an account path
551
568
  * Returns root type for a template path.
552
569
  * @param data The data for the request.
553
- * @param data.region Region code for tenant context
570
+ * @param data.region Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
554
571
  * @param data.path Account path to check
555
572
  * @returns TemplateMetadataResponseDto Template metadata retrieved successfully
556
573
  * @throws ApiError
@@ -572,9 +589,9 @@ export class BeanAccountStandardsService {
572
589
 
573
590
  /**
574
591
  * Get available regions with hierarchy
575
- * Returns supported regions with inheritance metadata
592
+ * Returns the full region catalog (every ISO 3166-1 entry) with an 'open' flag and inheritance metadata (#759)
576
593
  * @param data The data for the request.
577
- * @param data.region Region code for tenant context
594
+ * @param data.region Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
578
595
  * @returns RegionsMetadataResponseDto Regions metadata retrieved successfully
579
596
  * @throws ApiError
580
597
  */
@@ -631,10 +648,11 @@ export class BeanTransactionsService {
631
648
  * @param data.offset Number of items to skip (default: 0)
632
649
  * @param data.dateFrom Filter by start date (inclusive), format: YYYY-MM-DD
633
650
  * @param data.dateTo Filter by end date (inclusive), format: YYYY-MM-DD
634
- * @param data.status Filter by transaction status
651
+ * @param data.status Filter by transaction status: single value, comma-separated multi-value (e.g. VOIDED,SUPERSEDED), or ALL to include audit rows. Defaults to ACTIVE-only (ADR-0128; previously unfiltered — breaking change).
635
652
  * @param data.search Search in narration and payee fields (max 200 chars)
636
653
  * @param data.accountId Filter by account ID (transactions with postings to this account)
637
- * @param data.category Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
654
+ * @param data.category Filter by ADR-0075 functional category (Group segment); matches any posting to an account whose derived Group segment equals this value. Must be accompanied by flow (ADR-0126).
655
+ * @param data.flow Required when category is present (400 otherwise) and vice versa (ADR-0126). Restricts the category account set to the flow root (income → Income:, expense → Expenses:) and drives the per-leg sign normalization of row viewpointAmount and the summary. OpenAPI cannot express conditional requiredness — the pairing is enforced at runtime.
638
656
  * @returns TransactionListResponseDto Transaction list
639
657
  * @throws ApiError
640
658
  */
@@ -655,7 +673,8 @@ export class BeanTransactionsService {
655
673
  status: data.status,
656
674
  search: data.search,
657
675
  accountId: data.accountId,
658
- category: data.category
676
+ category: data.category,
677
+ flow: data.flow
659
678
  },
660
679
  errors: {
661
680
  400: 'Validation failed',
@@ -1036,1659 +1055,1862 @@ export class BeanReviewsService {
1036
1055
  }
1037
1056
  }
1038
1057
 
1039
- export class BeanPayeesService {
1058
+ export class BeanTransactionRulesService {
1040
1059
  /**
1041
- * Create a new payee
1042
- * Creates a new payee mapping for the authenticated user. The payee name must be unique within the user's account.
1060
+ * Create a new transaction rule (or upsert if upsertByPayee=true)
1061
+ * Creates a new rule. If upsertByPayee=true, updates existing rule matching payeeKeywords[0] instead of creating duplicate.
1043
1062
  * @param data The data for the request.
1063
+ * @param data.region Region code for tenant context
1044
1064
  * @param data.requestBody
1045
- * @returns PayeeResponseDto Payee created successfully
1065
+ * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
1046
1066
  * @throws ApiError
1047
1067
  */
1048
- public static payeeControllerCreate(
1049
- data: PayeeControllerCreateData
1050
- ): CancelablePromise<PayeeControllerCreateResponse> {
1068
+ public static transactionRuleControllerCreate(
1069
+ data: TransactionRuleControllerCreateData
1070
+ ): CancelablePromise<TransactionRuleControllerCreateResponse> {
1051
1071
  return __request(OpenAPI, {
1052
1072
  method: 'POST',
1053
- url: '/api/v1/bean/payees',
1073
+ url: '/api/v1/{region}/bean/transaction-rules',
1074
+ path: {
1075
+ region: data.region
1076
+ },
1054
1077
  body: data.requestBody,
1055
1078
  mediaType: 'application/json',
1056
1079
  errors: {
1057
- 400: 'Invalid input data',
1058
- 409: 'Payee already exists'
1080
+ 400: 'Validation failed',
1081
+ 401: 'Unauthorized',
1082
+ 409: 'Resource conflict - another process is updating this rule'
1059
1083
  }
1060
1084
  });
1061
1085
  }
1062
1086
 
1063
1087
  /**
1064
- * List user payees
1065
- * Returns all payee mappings for the authenticated user with optional filtering
1088
+ * Get all transaction rules for user
1066
1089
  * @param data The data for the request.
1067
- * @param data.search Search term for payee name (partial match, case-insensitive). Useful for autocomplete.
1068
- * @param data.payee Filter by exact payee name match
1069
- * @param data.category Filter by custom category
1070
- * @param data.tag Filter by custom tag (returns payees that have this tag)
1071
- * @param data.isActive Filter by active status. Defaults to true (show only active payees).
1072
- * @returns PayeeListResponseDto Payees retrieved successfully
1090
+ * @param data.region Region code for tenant context
1091
+ * @param data.limit Max results per page (default: 20, max: 100)
1092
+ * @param data.offset Pagination offset (default: 0)
1093
+ * @param data.enabled Filter by enabled status
1094
+ * @param data.learningSource Filter by learning source. Omit this parameter or pass empty string to get manually created rules (learningSource is null in database).
1095
+ * @param data.autoApplyEnabled Filter by auto-apply status
1096
+ * @returns TransactionRuleListResponseDto List of rules
1073
1097
  * @throws ApiError
1074
1098
  */
1075
- public static payeeControllerFindAll(
1076
- data: PayeeControllerFindAllData = {}
1077
- ): CancelablePromise<PayeeControllerFindAllResponse> {
1099
+ public static transactionRuleControllerList(
1100
+ data: TransactionRuleControllerListData
1101
+ ): CancelablePromise<TransactionRuleControllerListResponse> {
1078
1102
  return __request(OpenAPI, {
1079
1103
  method: 'GET',
1080
- url: '/api/v1/bean/payees',
1104
+ url: '/api/v1/{region}/bean/transaction-rules',
1105
+ path: {
1106
+ region: data.region
1107
+ },
1081
1108
  query: {
1082
- search: data.search,
1083
- payee: data.payee,
1084
- category: data.category,
1085
- tag: data.tag,
1086
- isActive: data.isActive
1109
+ limit: data.limit,
1110
+ offset: data.offset,
1111
+ enabled: data.enabled,
1112
+ learningSource: data.learningSource,
1113
+ autoApplyEnabled: data.autoApplyEnabled
1114
+ },
1115
+ errors: {
1116
+ 401: 'Unauthorized'
1087
1117
  }
1088
1118
  });
1089
1119
  }
1090
1120
 
1091
1121
  /**
1092
- * Get payee autocomplete suggestions
1093
- * Returns active payee names matching the query, sorted by recent usage. Used for transaction input autocomplete.
1122
+ * Validate transaction rule configuration
1094
1123
  * @param data The data for the request.
1095
- * @param data.q Search query for payee name (partial match, case-insensitive)
1096
- * @param data.limit Maximum number of suggestions
1097
- * @returns PayeeAutocompleteResponseDto Autocomplete suggestions retrieved successfully
1124
+ * @param data.region Region code for tenant context
1125
+ * @param data.requestBody
1126
+ * @returns ValidateRuleResponseDto Validation result
1098
1127
  * @throws ApiError
1099
1128
  */
1100
- public static payeeControllerAutocomplete(
1101
- data: PayeeControllerAutocompleteData
1102
- ): CancelablePromise<PayeeControllerAutocompleteResponse> {
1129
+ public static transactionRuleControllerValidate(
1130
+ data: TransactionRuleControllerValidateData
1131
+ ): CancelablePromise<TransactionRuleControllerValidateResponse> {
1103
1132
  return __request(OpenAPI, {
1104
- method: 'GET',
1105
- url: '/api/v1/bean/payees/autocomplete',
1106
- query: {
1107
- q: data.q,
1108
- limit: data.limit
1133
+ method: 'POST',
1134
+ url: '/api/v1/{region}/bean/transaction-rules/validate',
1135
+ path: {
1136
+ region: data.region
1137
+ },
1138
+ body: data.requestBody,
1139
+ mediaType: 'application/json',
1140
+ errors: {
1141
+ 400: 'Validation failed',
1142
+ 401: 'Unauthorized'
1109
1143
  }
1110
1144
  });
1111
1145
  }
1112
1146
 
1113
1147
  /**
1114
- * Get top payees by usage
1115
- * Returns the most frequently used payees, sorted by use count. Used for statistics and analytics.
1148
+ * Bulk create transaction rules
1116
1149
  * @param data The data for the request.
1117
- * @param data.limit Maximum number of results
1118
- * @returns PayeeStatsResponseDto Top payees retrieved successfully
1150
+ * @param data.region Region code for tenant context
1151
+ * @param data.requestBody
1152
+ * @returns BulkCreateRulesResponseDto Bulk create completed
1119
1153
  * @throws ApiError
1120
1154
  */
1121
- public static payeeControllerGetTopPayees(
1122
- data: PayeeControllerGetTopPayeesData = {}
1123
- ): CancelablePromise<PayeeControllerGetTopPayeesResponse> {
1155
+ public static transactionRuleControllerBulkCreate(
1156
+ data: TransactionRuleControllerBulkCreateData
1157
+ ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
1124
1158
  return __request(OpenAPI, {
1125
- method: 'GET',
1126
- url: '/api/v1/bean/payees/top',
1127
- query: {
1128
- limit: data.limit
1159
+ method: 'POST',
1160
+ url: '/api/v1/{region}/bean/transaction-rules/bulk',
1161
+ path: {
1162
+ region: data.region
1163
+ },
1164
+ body: data.requestBody,
1165
+ mediaType: 'application/json',
1166
+ errors: {
1167
+ 400: 'Invalid bulk create data',
1168
+ 401: 'Unauthorized'
1129
1169
  }
1130
1170
  });
1131
1171
  }
1132
1172
 
1133
1173
  /**
1134
- * Get payee by ID
1135
- * Returns a specific payee mapping by its UUID
1174
+ * Export transaction rules
1136
1175
  * @param data The data for the request.
1137
- * @param data.id Payee UUID
1138
- * @returns PayeeResponseDto Payee retrieved successfully
1176
+ * @param data.format Export format (currently only JSON supported)
1177
+ * @param data.region Region code for tenant context
1178
+ * @returns ExportRulesResponseDto Exported rules
1139
1179
  * @throws ApiError
1140
1180
  */
1141
- public static payeeControllerFindOne(
1142
- data: PayeeControllerFindOneData
1143
- ): CancelablePromise<PayeeControllerFindOneResponse> {
1181
+ public static transactionRuleControllerExport(
1182
+ data: TransactionRuleControllerExportData
1183
+ ): CancelablePromise<TransactionRuleControllerExportResponse> {
1144
1184
  return __request(OpenAPI, {
1145
1185
  method: 'GET',
1146
- url: '/api/v1/bean/payees/{id}',
1186
+ url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
1147
1187
  path: {
1148
- id: data.id
1188
+ format: data.format,
1189
+ region: data.region
1149
1190
  },
1150
1191
  errors: {
1151
- 403: 'Payee belongs to another user',
1152
- 404: 'Payee not found'
1192
+ 400: 'Unsupported format',
1193
+ 401: 'Unauthorized'
1153
1194
  }
1154
1195
  });
1155
1196
  }
1156
1197
 
1157
1198
  /**
1158
- * Update payee
1159
- * Updates a payee mapping. The payee name cannot be changed after creation.
1199
+ * Get transaction rule statistics
1160
1200
  * @param data The data for the request.
1161
- * @param data.id Payee UUID
1162
- * @param data.requestBody
1163
- * @returns PayeeResponseDto Payee updated successfully
1201
+ * @param data.period Statistics time period
1202
+ * @param data.region Region code for tenant context
1203
+ * @returns RuleStatisticsResponseDto Rule statistics
1164
1204
  * @throws ApiError
1165
1205
  */
1166
- public static payeeControllerUpdate(
1167
- data: PayeeControllerUpdateData
1168
- ): CancelablePromise<PayeeControllerUpdateResponse> {
1206
+ public static transactionRuleControllerGetStatistics(
1207
+ data: TransactionRuleControllerGetStatisticsData
1208
+ ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
1169
1209
  return __request(OpenAPI, {
1170
- method: 'PUT',
1171
- url: '/api/v1/bean/payees/{id}',
1210
+ method: 'GET',
1211
+ url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
1172
1212
  path: {
1173
- id: data.id
1213
+ period: data.period,
1214
+ region: data.region
1174
1215
  },
1175
- body: data.requestBody,
1176
- mediaType: 'application/json',
1177
1216
  errors: {
1178
- 400: 'Invalid input data',
1179
- 404: 'Payee not found'
1217
+ 401: 'Unauthorized'
1180
1218
  }
1181
1219
  });
1182
1220
  }
1183
1221
 
1184
1222
  /**
1185
- * Delete payee
1186
- * Soft deletes a payee by marking it as inactive. Inactive payees will not appear in autocomplete suggestions.
1223
+ * Get transaction rule detail
1187
1224
  * @param data The data for the request.
1188
- * @param data.id Payee UUID
1189
- * @returns void Payee deleted successfully
1225
+ * @param data.ruleId Rule ID
1226
+ * @param data.region Region code for tenant context
1227
+ * @returns TransactionRuleResponseDto Rule details
1190
1228
  * @throws ApiError
1191
1229
  */
1192
- public static payeeControllerDelete(
1193
- data: PayeeControllerDeleteData
1194
- ): CancelablePromise<PayeeControllerDeleteResponse> {
1230
+ public static transactionRuleControllerGetDetail(
1231
+ data: TransactionRuleControllerGetDetailData
1232
+ ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
1195
1233
  return __request(OpenAPI, {
1196
- method: 'DELETE',
1197
- url: '/api/v1/bean/payees/{id}',
1234
+ method: 'GET',
1235
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1198
1236
  path: {
1199
- id: data.id
1237
+ ruleId: data.ruleId,
1238
+ region: data.region
1200
1239
  },
1201
1240
  errors: {
1202
- 404: 'Payee not found'
1241
+ 401: 'Unauthorized',
1242
+ 403: 'Forbidden - not owner of rule',
1243
+ 404: 'Rule not found'
1203
1244
  }
1204
1245
  });
1205
1246
  }
1206
- }
1207
1247
 
1208
- export class AdminPayeeProfilesService {
1209
1248
  /**
1210
- * Create payee profile (Admin only)
1211
- * Creates a new global payee profile. The canonical name must be unique (case-insensitive).
1249
+ * Update a transaction rule
1212
1250
  * @param data The data for the request.
1251
+ * @param data.ruleId Rule ID to update
1252
+ * @param data.region Region code for tenant context
1213
1253
  * @param data.requestBody
1214
- * @returns PayeeProfileResponseDto Payee profile created successfully
1254
+ * @returns TransactionRuleResponseDto Rule updated successfully
1215
1255
  * @throws ApiError
1216
1256
  */
1217
- public static payeeProfileAdminControllerCreate(
1218
- data: PayeeProfileAdminControllerCreateData
1219
- ): CancelablePromise<PayeeProfileAdminControllerCreateResponse> {
1257
+ public static transactionRuleControllerUpdate(
1258
+ data: TransactionRuleControllerUpdateData
1259
+ ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
1220
1260
  return __request(OpenAPI, {
1221
- method: 'POST',
1222
- url: '/api/v1/admin/payee-profiles',
1261
+ method: 'PUT',
1262
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1263
+ path: {
1264
+ ruleId: data.ruleId,
1265
+ region: data.region
1266
+ },
1223
1267
  body: data.requestBody,
1224
1268
  mediaType: 'application/json',
1225
1269
  errors: {
1226
1270
  400: 'Validation failed',
1227
- 403: 'Admin access required',
1228
- 409: 'Payee profile already exists'
1271
+ 401: 'Unauthorized',
1272
+ 403: 'Forbidden - not owner of rule',
1273
+ 404: 'Rule not found',
1274
+ 409: 'Resource conflict - rule is being modified by another process'
1229
1275
  }
1230
1276
  });
1231
1277
  }
1232
1278
 
1233
1279
  /**
1234
- * List payee profiles (Admin only)
1235
- * Returns all payee profiles with optional filtering by category, country, verification status, etc.
1280
+ * Delete a transaction rule
1236
1281
  * @param data The data for the request.
1237
- * @param data.search Search term for canonical name and aliases (case-insensitive)
1238
- * @param data.category Filter by category
1239
- * @param data.country Filter by country (ISO 3166-1 alpha-2)
1240
- * @param data.isActive Filter by active status (default: true - show only active)
1241
- * @param data.verified Filter by verification status. true = verified only, false = unverified only
1242
- * @param data.dataSource Filter by data source
1243
- * @returns PayeeProfileListResponseDto Payee profiles retrieved successfully
1282
+ * @param data.ruleId Rule ID to delete
1283
+ * @param data.region Region code for tenant context
1284
+ * @returns void Rule deleted successfully
1244
1285
  * @throws ApiError
1245
1286
  */
1246
- public static payeeProfileAdminControllerFindAll(
1247
- data: PayeeProfileAdminControllerFindAllData = {}
1248
- ): CancelablePromise<PayeeProfileAdminControllerFindAllResponse> {
1287
+ public static transactionRuleControllerDelete(
1288
+ data: TransactionRuleControllerDeleteData
1289
+ ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
1249
1290
  return __request(OpenAPI, {
1250
- method: 'GET',
1251
- url: '/api/v1/admin/payee-profiles',
1252
- query: {
1253
- search: data.search,
1254
- category: data.category,
1255
- country: data.country,
1256
- isActive: data.isActive,
1257
- verified: data.verified,
1258
- dataSource: data.dataSource
1291
+ method: 'DELETE',
1292
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1293
+ path: {
1294
+ ruleId: data.ruleId,
1295
+ region: data.region
1259
1296
  },
1260
1297
  errors: {
1261
- 403: 'Admin access required'
1298
+ 401: 'Unauthorized',
1299
+ 403: 'Forbidden - not owner of rule',
1300
+ 404: 'Rule not found',
1301
+ 409: 'Resource conflict - rule is being modified by another process'
1262
1302
  }
1263
1303
  });
1264
1304
  }
1265
1305
 
1266
1306
  /**
1267
- * Get payee profile by ID (Admin only)
1268
- * Returns a single payee profile by its ID.
1307
+ * Test rule matching
1269
1308
  * @param data The data for the request.
1270
- * @param data.id Payee profile ID (UUID)
1271
- * @returns PayeeProfileResponseDto Payee profile retrieved successfully
1309
+ * @param data.ruleId Rule ID to test
1310
+ * @param data.region Region code for tenant context
1311
+ * @param data.requestBody
1312
+ * @returns TestRuleResponseDto Test result
1272
1313
  * @throws ApiError
1273
1314
  */
1274
- public static payeeProfileAdminControllerFindOne(
1275
- data: PayeeProfileAdminControllerFindOneData
1276
- ): CancelablePromise<PayeeProfileAdminControllerFindOneResponse> {
1315
+ public static transactionRuleControllerTest(
1316
+ data: TransactionRuleControllerTestData
1317
+ ): CancelablePromise<TransactionRuleControllerTestResponse> {
1277
1318
  return __request(OpenAPI, {
1278
- method: 'GET',
1279
- url: '/api/v1/admin/payee-profiles/{id}',
1319
+ method: 'POST',
1320
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
1280
1321
  path: {
1281
- id: data.id
1322
+ ruleId: data.ruleId,
1323
+ region: data.region
1282
1324
  },
1325
+ body: data.requestBody,
1326
+ mediaType: 'application/json',
1283
1327
  errors: {
1284
- 403: 'Admin access required',
1285
- 404: 'Payee profile not found'
1328
+ 401: 'Unauthorized',
1329
+ 403: 'Forbidden - not owner of rule',
1330
+ 404: 'Rule not found'
1286
1331
  }
1287
1332
  });
1288
1333
  }
1334
+ }
1289
1335
 
1336
+ export class UsersService {
1290
1337
  /**
1291
- * Update payee profile (Admin only)
1292
- * Updates an existing payee profile. The canonical name cannot be changed.
1338
+ * Delete own user account
1293
1339
  * @param data The data for the request.
1294
- * @param data.id Payee profile ID (UUID)
1295
1340
  * @param data.requestBody
1296
- * @returns PayeeProfileResponseDto Payee profile updated successfully
1341
+ * @returns void User deleted successfully
1297
1342
  * @throws ApiError
1298
1343
  */
1299
- public static payeeProfileAdminControllerUpdate(
1300
- data: PayeeProfileAdminControllerUpdateData
1301
- ): CancelablePromise<PayeeProfileAdminControllerUpdateResponse> {
1344
+ public static userControllerDeleteOwnUser(
1345
+ data: UserControllerDeleteOwnUserData
1346
+ ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
1302
1347
  return __request(OpenAPI, {
1303
- method: 'PUT',
1304
- url: '/api/v1/admin/payee-profiles/{id}',
1305
- path: {
1306
- id: data.id
1307
- },
1348
+ method: 'DELETE',
1349
+ url: '/api/v1/users',
1308
1350
  body: data.requestBody,
1309
1351
  mediaType: 'application/json',
1310
1352
  errors: {
1311
- 403: 'Admin access required',
1312
- 404: 'Payee profile not found'
1353
+ 403: 'Invalid access token'
1313
1354
  }
1314
1355
  });
1315
1356
  }
1316
1357
 
1317
1358
  /**
1318
- * Soft delete payee profile (Admin only)
1319
- * Marks a payee profile as inactive (soft delete). The profile cannot be deleted if it is referenced by user payees.
1359
+ * Get current authenticated user
1320
1360
  * @param data The data for the request.
1321
- * @param data.id Payee profile ID (UUID)
1322
- * @returns void Payee profile deleted successfully
1361
+ * @param data.acceptLanguage
1362
+ * @returns UserResponseDto User retrieved successfully
1323
1363
  * @throws ApiError
1324
1364
  */
1325
- public static payeeProfileAdminControllerDelete(
1326
- data: PayeeProfileAdminControllerDeleteData
1327
- ): CancelablePromise<PayeeProfileAdminControllerDeleteResponse> {
1365
+ public static userControllerGetUser(
1366
+ data: UserControllerGetUserData
1367
+ ): CancelablePromise<UserControllerGetUserResponse> {
1328
1368
  return __request(OpenAPI, {
1329
- method: 'DELETE',
1330
- url: '/api/v1/admin/payee-profiles/{id}',
1331
- path: {
1332
- id: data.id
1333
- },
1334
- errors: {
1335
- 403: 'Admin access required',
1336
- 404: 'Payee profile not found',
1337
- 409: 'Payee profile is in use and cannot be deleted'
1369
+ method: 'GET',
1370
+ url: '/api/v1/users',
1371
+ headers: {
1372
+ 'accept-language': data.acceptLanguage
1338
1373
  }
1339
1374
  });
1340
1375
  }
1341
1376
 
1342
1377
  /**
1343
- * Verify payee profile (Admin only)
1344
- * Marks a payee profile as verified by setting verifiedAt to current timestamp.
1378
+ * Sign up new user
1379
+ * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
1345
1380
  * @param data The data for the request.
1346
- * @param data.id Payee profile ID (UUID)
1347
- * @returns PayeeProfileResponseDto Payee profile verified successfully
1381
+ * @param data.requestBody
1382
+ * @returns SignupResponseDto User created successfully
1348
1383
  * @throws ApiError
1349
1384
  */
1350
- public static payeeProfileAdminControllerVerify(
1351
- data: PayeeProfileAdminControllerVerifyData
1352
- ): CancelablePromise<PayeeProfileAdminControllerVerifyResponse> {
1385
+ public static userControllerSignupUser(
1386
+ data: UserControllerSignupUserData
1387
+ ): CancelablePromise<UserControllerSignupUserResponse> {
1353
1388
  return __request(OpenAPI, {
1354
1389
  method: 'POST',
1355
- url: '/api/v1/admin/payee-profiles/{id}/verify',
1356
- path: {
1357
- id: data.id
1358
- },
1390
+ url: '/api/v1/users',
1391
+ body: data.requestBody,
1392
+ mediaType: 'application/json',
1359
1393
  errors: {
1360
- 403: 'Admin access required',
1361
- 404: 'Payee profile not found'
1394
+ 400: 'Invalid Turnstile token (when Turnstile is enabled)',
1395
+ 403: 'User signup is disabled'
1362
1396
  }
1363
1397
  });
1364
1398
  }
1365
1399
 
1366
1400
  /**
1367
- * Unverify payee profile (Admin only)
1368
- * Removes verification status by setting verifiedAt to null.
1401
+ * Delete user by ID (admin only)
1369
1402
  * @param data The data for the request.
1370
- * @param data.id Payee profile ID (UUID)
1371
- * @returns PayeeProfileResponseDto Payee profile unverified successfully
1403
+ * @param data.id User ID to delete
1404
+ * @returns void User deleted successfully
1372
1405
  * @throws ApiError
1373
1406
  */
1374
- public static payeeProfileAdminControllerUnverify(
1375
- data: PayeeProfileAdminControllerUnverifyData
1376
- ): CancelablePromise<PayeeProfileAdminControllerUnverifyResponse> {
1407
+ public static userControllerDeleteUser(
1408
+ data: UserControllerDeleteUserData
1409
+ ): CancelablePromise<UserControllerDeleteUserResponse> {
1377
1410
  return __request(OpenAPI, {
1378
1411
  method: 'DELETE',
1379
- url: '/api/v1/admin/payee-profiles/{id}/verify',
1412
+ url: '/api/v1/users/{id}',
1380
1413
  path: {
1381
1414
  id: data.id
1382
1415
  },
1383
1416
  errors: {
1384
- 403: 'Admin access required',
1385
- 404: 'Payee profile not found'
1417
+ 403: 'Cannot delete own account or insufficient permissions'
1386
1418
  }
1387
1419
  });
1388
1420
  }
1389
- }
1390
1421
 
1391
- export class BeanCommoditiesService {
1392
1422
  /**
1393
- * Create a new commodity
1394
- * Creates a new commodity definition for the authenticated user
1423
+ * Get user info by user ID
1395
1424
  * @param data The data for the request.
1396
- * @param data.region Region code for tenant context
1397
- * @param data.requestBody
1398
- * @returns CommodityResponseDto Commodity created successfully
1425
+ * @param data.id User ID
1426
+ * @returns unknown User info retrieved successfully
1399
1427
  * @throws ApiError
1400
1428
  */
1401
- public static commodityControllerCreate(
1402
- data: CommodityControllerCreateData
1403
- ): CancelablePromise<CommodityControllerCreateResponse> {
1429
+ public static userControllerGetUserInfo(
1430
+ data: UserControllerGetUserInfoData
1431
+ ): CancelablePromise<UserControllerGetUserInfoResponse> {
1404
1432
  return __request(OpenAPI, {
1405
- method: 'POST',
1406
- url: '/api/v1/{region}/bean/commodities',
1433
+ method: 'GET',
1434
+ url: '/api/v1/users/{id}/info',
1407
1435
  path: {
1408
- region: data.region
1436
+ id: data.id
1409
1437
  },
1410
- body: data.requestBody,
1411
- mediaType: 'application/json',
1412
1438
  errors: {
1413
- 400: 'Invalid input data',
1414
- 409: 'Commodity already exists'
1439
+ 403: 'Cannot access other user info without admin permission'
1415
1440
  }
1416
1441
  });
1417
1442
  }
1418
1443
 
1419
1444
  /**
1420
- * List user commodities
1421
- * Returns all commodity definitions for the authenticated user with optional filtering
1445
+ * Update user settings
1422
1446
  * @param data The data for the request.
1423
- * @param data.region Region code for tenant context
1424
- * @param data.search Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
1425
- * @param data.symbol Filter by exact symbol match
1426
- * @returns CommodityListResponseDto Commodities retrieved successfully
1447
+ * @param data.requestBody
1448
+ * @returns unknown Settings updated successfully
1427
1449
  * @throws ApiError
1428
1450
  */
1429
- public static commodityControllerFindAll(
1430
- data: CommodityControllerFindAllData
1431
- ): CancelablePromise<CommodityControllerFindAllResponse> {
1451
+ public static userControllerUpdateUserSetting(
1452
+ data: UserControllerUpdateUserSettingData
1453
+ ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
1432
1454
  return __request(OpenAPI, {
1433
- method: 'GET',
1434
- url: '/api/v1/{region}/bean/commodities',
1435
- path: {
1436
- region: data.region
1437
- },
1438
- query: {
1439
- search: data.search,
1440
- symbol: data.symbol
1455
+ method: 'PUT',
1456
+ url: '/api/v1/users/setting',
1457
+ body: data.requestBody,
1458
+ mediaType: 'application/json',
1459
+ errors: {
1460
+ 403: 'Insufficient permissions'
1441
1461
  }
1442
1462
  });
1443
1463
  }
1444
1464
 
1445
1465
  /**
1446
- * Get commodity by symbol
1447
- * Returns a specific commodity definition by its symbol
1466
+ * Get all user settings paginated (admin only)
1448
1467
  * @param data The data for the request.
1449
- * @param data.symbol Commodity symbol
1450
- * @param data.region Region code for tenant context
1451
- * @returns CommodityResponseDto Commodity retrieved successfully
1468
+ * @param data.pageNo Page number
1469
+ * @param data.pageSize Page size
1470
+ * @returns unknown Settings list retrieved successfully
1452
1471
  * @throws ApiError
1453
1472
  */
1454
- public static commodityControllerFindOne(
1455
- data: CommodityControllerFindOneData
1456
- ): CancelablePromise<CommodityControllerFindOneResponse> {
1473
+ public static userControllerGetAllUserSettingsByPage(
1474
+ data: UserControllerGetAllUserSettingsByPageData
1475
+ ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
1457
1476
  return __request(OpenAPI, {
1458
1477
  method: 'GET',
1459
- url: '/api/v1/{region}/bean/commodities/{symbol}',
1460
- path: {
1461
- symbol: data.symbol,
1462
- region: data.region
1463
- },
1464
- errors: {
1465
- 404: 'Commodity not found'
1478
+ url: '/api/v1/users/settings-by-page',
1479
+ query: {
1480
+ pageNo: data.pageNo,
1481
+ pageSize: data.pageSize
1466
1482
  }
1467
1483
  });
1468
1484
  }
1469
1485
 
1470
1486
  /**
1471
- * Update commodity
1472
- * Updates an existing commodity definition. Symbol cannot be changed.
1473
- * @param data The data for the request.
1474
- * @param data.symbol Commodity symbol
1475
- * @param data.region Region code for tenant context
1476
- * @param data.requestBody
1477
- * @returns CommodityResponseDto Commodity updated successfully
1487
+ * Get asset and liability summary for current user
1488
+ * @returns unknown Summary retrieved successfully
1478
1489
  * @throws ApiError
1479
1490
  */
1480
- public static commodityControllerUpdate(
1481
- data: CommodityControllerUpdateData
1482
- ): CancelablePromise<CommodityControllerUpdateResponse> {
1491
+ public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
1483
1492
  return __request(OpenAPI, {
1484
- method: 'PUT',
1485
- url: '/api/v1/{region}/bean/commodities/{symbol}',
1486
- path: {
1487
- symbol: data.symbol,
1488
- region: data.region
1489
- },
1490
- body: data.requestBody,
1491
- mediaType: 'application/json',
1493
+ method: 'GET',
1494
+ url: '/api/v1/users/asset-liability-summary'
1495
+ });
1496
+ }
1497
+ }
1498
+
1499
+ export class PropertiesService {
1500
+ /**
1501
+ * Get all system properties
1502
+ * @returns unknown Properties retrieved successfully
1503
+ * @throws ApiError
1504
+ */
1505
+ public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
1506
+ return __request(OpenAPI, {
1507
+ method: 'GET',
1508
+ url: '/api/v1/admin/properties',
1492
1509
  errors: {
1493
- 400: 'Invalid input data',
1494
- 404: 'Commodity not found'
1510
+ 401: 'Unauthorized',
1511
+ 403: 'Forbidden - insufficient permissions'
1495
1512
  }
1496
1513
  });
1497
1514
  }
1498
1515
 
1499
1516
  /**
1500
- * Delete commodity
1501
- * Deletes a commodity definition
1517
+ * Get property by key
1502
1518
  * @param data The data for the request.
1503
- * @param data.symbol Commodity symbol
1504
- * @param data.region Region code for tenant context
1505
- * @returns void Commodity deleted successfully
1519
+ * @param data.key Property key
1520
+ * @returns unknown Property retrieved successfully
1506
1521
  * @throws ApiError
1507
1522
  */
1508
- public static commodityControllerDelete(
1509
- data: CommodityControllerDeleteData
1510
- ): CancelablePromise<CommodityControllerDeleteResponse> {
1523
+ public static propertyControllerGetByKey(
1524
+ data: PropertyControllerGetByKeyData
1525
+ ): CancelablePromise<PropertyControllerGetByKeyResponse> {
1511
1526
  return __request(OpenAPI, {
1512
- method: 'DELETE',
1513
- url: '/api/v1/{region}/bean/commodities/{symbol}',
1527
+ method: 'GET',
1528
+ url: '/api/v1/admin/properties/{key}',
1514
1529
  path: {
1515
- symbol: data.symbol,
1516
- region: data.region
1530
+ key: data.key
1517
1531
  },
1518
1532
  errors: {
1519
- 404: 'Commodity not found'
1533
+ 401: 'Unauthorized',
1534
+ 403: 'Forbidden - insufficient permissions',
1535
+ 404: 'Property not found'
1520
1536
  }
1521
1537
  });
1522
1538
  }
1523
1539
 
1524
1540
  /**
1525
- * Ensure commodity exists
1526
- * Gets existing commodity or creates it with automatic initialization from OpenBB
1541
+ * Update a system property
1527
1542
  * @param data The data for the request.
1528
- * @param data.symbol Commodity symbol
1529
- * @param data.region Region code for tenant context
1530
- * @returns CommodityResponseDto Commodity retrieved or created
1543
+ * @param data.key Property key
1544
+ * @param data.requestBody
1545
+ * @returns unknown Property updated successfully
1531
1546
  * @throws ApiError
1532
1547
  */
1533
- public static commodityControllerGetOrCreate(
1534
- data: CommodityControllerGetOrCreateData
1535
- ): CancelablePromise<CommodityControllerGetOrCreateResponse> {
1548
+ public static propertyControllerUpdate(
1549
+ data: PropertyControllerUpdateData
1550
+ ): CancelablePromise<PropertyControllerUpdateResponse> {
1536
1551
  return __request(OpenAPI, {
1537
- method: 'POST',
1538
- url: '/api/v1/{region}/bean/commodities/{symbol}/ensure',
1552
+ method: 'PUT',
1553
+ url: '/api/v1/admin/properties/{key}',
1539
1554
  path: {
1540
- symbol: data.symbol,
1541
- region: data.region
1555
+ key: data.key
1556
+ },
1557
+ body: data.requestBody,
1558
+ mediaType: 'application/json',
1559
+ errors: {
1560
+ 401: 'Unauthorized',
1561
+ 403: 'Forbidden - insufficient permissions'
1542
1562
  }
1543
1563
  });
1544
1564
  }
1545
1565
 
1546
1566
  /**
1547
- * Bulk create commodities
1548
- * Creates multiple commodities from a list of symbols, useful for initialization
1567
+ * Delete a system property
1549
1568
  * @param data The data for the request.
1550
- * @param data.region Region code for tenant context
1551
- * @returns CommodityResponseDto Commodities created successfully
1569
+ * @param data.key Property key
1570
+ * @returns void Property deleted successfully
1552
1571
  * @throws ApiError
1553
1572
  */
1554
- public static commodityControllerBulkCreate(
1555
- data: CommodityControllerBulkCreateData
1556
- ): CancelablePromise<CommodityControllerBulkCreateResponse> {
1573
+ public static propertyControllerDelete(
1574
+ data: PropertyControllerDeleteData
1575
+ ): CancelablePromise<PropertyControllerDeleteResponse> {
1557
1576
  return __request(OpenAPI, {
1558
- method: 'POST',
1559
- url: '/api/v1/{region}/bean/commodities/bulk',
1577
+ method: 'DELETE',
1578
+ url: '/api/v1/admin/properties/{key}',
1560
1579
  path: {
1561
- region: data.region
1580
+ key: data.key
1581
+ },
1582
+ errors: {
1583
+ 401: 'Unauthorized',
1584
+ 403: 'Forbidden - insufficient permissions',
1585
+ 404: 'Property not found'
1562
1586
  }
1563
1587
  });
1564
1588
  }
1565
1589
  }
1566
1590
 
1567
- export class BeanPricesService {
1591
+ export class BeanPayeesService {
1568
1592
  /**
1569
- * Create a new price
1570
- * Creates a new price entry for the authenticated user
1593
+ * Create a new payee
1594
+ * Creates a new payee mapping for the authenticated user. The payee name must be unique within the user's account.
1571
1595
  * @param data The data for the request.
1572
- * @param data.region Region code for tenant context
1573
1596
  * @param data.requestBody
1574
- * @returns PriceResponseDto Price created successfully
1597
+ * @returns PayeeResponseDto Payee created successfully
1575
1598
  * @throws ApiError
1576
1599
  */
1577
- public static priceControllerCreate(
1578
- data: PriceControllerCreateData
1579
- ): CancelablePromise<PriceControllerCreateResponse> {
1600
+ public static payeeControllerCreate(
1601
+ data: PayeeControllerCreateData
1602
+ ): CancelablePromise<PayeeControllerCreateResponse> {
1580
1603
  return __request(OpenAPI, {
1581
1604
  method: 'POST',
1582
- url: '/api/v1/{region}/bean/prices',
1583
- path: {
1584
- region: data.region
1585
- },
1605
+ url: '/api/v1/bean/payees',
1586
1606
  body: data.requestBody,
1587
1607
  mediaType: 'application/json',
1588
1608
  errors: {
1589
- 404: 'Currency or quoteCurrency commodity not found',
1590
- 409: 'Price already exists for this currency pair and date'
1609
+ 400: 'Invalid input data',
1610
+ 409: 'Payee already exists'
1591
1611
  }
1592
1612
  });
1593
1613
  }
1594
1614
 
1595
1615
  /**
1596
- * List user prices
1597
- * Returns all price entries for the authenticated user with optional filtering
1616
+ * List user payees
1617
+ * Returns all payee mappings for the authenticated user with optional filtering
1598
1618
  * @param data The data for the request.
1599
- * @param data.region Region code for tenant context
1600
- * @param data.currency Filter by currency (e.g., BTC, AAPL, USD)
1601
- * @param data.quoteCurrency Filter by quote currency (pricing currency, e.g., USD, CNY)
1602
- * @param data.dateFrom Filter prices from this date (ISO 8601 format)
1603
- * @param data.dateTo Filter prices to this date (ISO 8601 format)
1604
- * @param data.search Search term for currency or quoteCurrency (case-insensitive partial match)
1605
- * @param data.page Page number for pagination (default: 1)
1606
- * @param data.limit Number of items per page (default: 20, max: 100)
1607
- * @returns PriceListResponseDto Prices retrieved successfully
1619
+ * @param data.search Search term for payee name (partial match, case-insensitive). Useful for autocomplete.
1620
+ * @param data.payee Filter by exact payee name match
1621
+ * @param data.category Filter by custom category
1622
+ * @param data.tag Filter by custom tag (returns payees that have this tag)
1623
+ * @param data.isActive Filter by active status. Defaults to true (show only active payees).
1624
+ * @returns PayeeListResponseDto Payees retrieved successfully
1608
1625
  * @throws ApiError
1609
1626
  */
1610
- public static priceControllerFindAll(
1611
- data: PriceControllerFindAllData
1612
- ): CancelablePromise<PriceControllerFindAllResponse> {
1627
+ public static payeeControllerFindAll(
1628
+ data: PayeeControllerFindAllData = {}
1629
+ ): CancelablePromise<PayeeControllerFindAllResponse> {
1613
1630
  return __request(OpenAPI, {
1614
1631
  method: 'GET',
1615
- url: '/api/v1/{region}/bean/prices',
1616
- path: {
1617
- region: data.region
1618
- },
1632
+ url: '/api/v1/bean/payees',
1619
1633
  query: {
1620
- currency: data.currency,
1621
- quoteCurrency: data.quoteCurrency,
1622
- dateFrom: data.dateFrom,
1623
- dateTo: data.dateTo,
1624
1634
  search: data.search,
1625
- page: data.page,
1626
- limit: data.limit
1635
+ payee: data.payee,
1636
+ category: data.category,
1637
+ tag: data.tag,
1638
+ isActive: data.isActive
1627
1639
  }
1628
1640
  });
1629
1641
  }
1630
1642
 
1631
1643
  /**
1632
- * Get price by ID
1633
- * Returns a single price entry by its ID
1644
+ * Get payee autocomplete suggestions
1645
+ * Returns active payee names matching the query, sorted by recent usage. Used for transaction input autocomplete.
1634
1646
  * @param data The data for the request.
1635
- * @param data.id Price ID
1636
- * @param data.region Region code for tenant context
1637
- * @returns PriceResponseDto Price retrieved successfully
1647
+ * @param data.q Search query for payee name (partial match, case-insensitive)
1648
+ * @param data.limit Maximum number of suggestions
1649
+ * @returns PayeeAutocompleteResponseDto Autocomplete suggestions retrieved successfully
1638
1650
  * @throws ApiError
1639
1651
  */
1640
- public static priceControllerFindOne(
1641
- data: PriceControllerFindOneData
1642
- ): CancelablePromise<PriceControllerFindOneResponse> {
1652
+ public static payeeControllerAutocomplete(
1653
+ data: PayeeControllerAutocompleteData
1654
+ ): CancelablePromise<PayeeControllerAutocompleteResponse> {
1643
1655
  return __request(OpenAPI, {
1644
1656
  method: 'GET',
1645
- url: '/api/v1/{region}/bean/prices/{id}',
1646
- path: {
1647
- id: data.id,
1648
- region: data.region
1649
- },
1650
- errors: {
1651
- 404: 'Price not found'
1657
+ url: '/api/v1/bean/payees/autocomplete',
1658
+ query: {
1659
+ q: data.q,
1660
+ limit: data.limit
1652
1661
  }
1653
1662
  });
1654
1663
  }
1655
1664
 
1656
1665
  /**
1657
- * Update a price
1658
- * Updates an existing price entry
1666
+ * Get top payees by usage
1667
+ * Returns the most frequently used payees, sorted by use count. Used for statistics and analytics.
1659
1668
  * @param data The data for the request.
1660
- * @param data.id Price ID
1661
- * @param data.region Region code for tenant context
1662
- * @param data.requestBody
1663
- * @returns PriceResponseDto Price updated successfully
1669
+ * @param data.limit Maximum number of results
1670
+ * @returns PayeeStatsResponseDto Top payees retrieved successfully
1664
1671
  * @throws ApiError
1665
1672
  */
1666
- public static priceControllerUpdate(
1667
- data: PriceControllerUpdateData
1668
- ): CancelablePromise<PriceControllerUpdateResponse> {
1673
+ public static payeeControllerGetTopPayees(
1674
+ data: PayeeControllerGetTopPayeesData = {}
1675
+ ): CancelablePromise<PayeeControllerGetTopPayeesResponse> {
1669
1676
  return __request(OpenAPI, {
1670
- method: 'PUT',
1671
- url: '/api/v1/{region}/bean/prices/{id}',
1672
- path: {
1673
- id: data.id,
1674
- region: data.region
1675
- },
1676
- body: data.requestBody,
1677
- mediaType: 'application/json',
1678
- errors: {
1679
- 404: 'Price not found',
1680
- 409: 'Updated price conflicts with existing price'
1677
+ method: 'GET',
1678
+ url: '/api/v1/bean/payees/top',
1679
+ query: {
1680
+ limit: data.limit
1681
1681
  }
1682
1682
  });
1683
1683
  }
1684
1684
 
1685
1685
  /**
1686
- * Delete a price
1687
- * Deletes a price entry (hard delete)
1686
+ * Get payee by ID
1687
+ * Returns a specific payee mapping by its UUID
1688
1688
  * @param data The data for the request.
1689
- * @param data.id Price ID
1690
- * @param data.region Region code for tenant context
1691
- * @returns void Price deleted successfully
1689
+ * @param data.id Payee UUID
1690
+ * @returns PayeeResponseDto Payee retrieved successfully
1692
1691
  * @throws ApiError
1693
1692
  */
1694
- public static priceControllerDelete(
1695
- data: PriceControllerDeleteData
1696
- ): CancelablePromise<PriceControllerDeleteResponse> {
1693
+ public static payeeControllerFindOne(
1694
+ data: PayeeControllerFindOneData
1695
+ ): CancelablePromise<PayeeControllerFindOneResponse> {
1697
1696
  return __request(OpenAPI, {
1698
- method: 'DELETE',
1699
- url: '/api/v1/{region}/bean/prices/{id}',
1697
+ method: 'GET',
1698
+ url: '/api/v1/bean/payees/{id}',
1700
1699
  path: {
1701
- id: data.id,
1702
- region: data.region
1700
+ id: data.id
1703
1701
  },
1704
1702
  errors: {
1705
- 404: 'Price not found'
1703
+ 403: 'Payee belongs to another user',
1704
+ 404: 'Payee not found'
1706
1705
  }
1707
1706
  });
1708
1707
  }
1709
1708
 
1710
1709
  /**
1711
- * Bulk create prices
1712
- * Creates multiple price entries at once (skips duplicates)
1710
+ * Update payee
1711
+ * Updates a payee mapping. The payee name cannot be changed after creation.
1713
1712
  * @param data The data for the request.
1714
- * @param data.region Region code for tenant context
1713
+ * @param data.id Payee UUID
1715
1714
  * @param data.requestBody
1716
- * @returns PriceResponseDto Prices created successfully
1715
+ * @returns PayeeResponseDto Payee updated successfully
1717
1716
  * @throws ApiError
1718
1717
  */
1719
- public static priceControllerBulkCreate(
1720
- data: PriceControllerBulkCreateData
1721
- ): CancelablePromise<PriceControllerBulkCreateResponse> {
1718
+ public static payeeControllerUpdate(
1719
+ data: PayeeControllerUpdateData
1720
+ ): CancelablePromise<PayeeControllerUpdateResponse> {
1722
1721
  return __request(OpenAPI, {
1723
- method: 'POST',
1724
- url: '/api/v1/{region}/bean/prices/bulk',
1722
+ method: 'PUT',
1723
+ url: '/api/v1/bean/payees/{id}',
1725
1724
  path: {
1726
- region: data.region
1725
+ id: data.id
1727
1726
  },
1728
1727
  body: data.requestBody,
1729
- mediaType: 'application/json'
1728
+ mediaType: 'application/json',
1729
+ errors: {
1730
+ 400: 'Invalid input data',
1731
+ 404: 'Payee not found'
1732
+ }
1730
1733
  });
1731
1734
  }
1732
- }
1733
1735
 
1734
- export class RecurringRulesService {
1735
1736
  /**
1736
- * Create a new recurring rule
1737
- * Creates a new recurring transaction rule for the authenticated user
1737
+ * Delete payee
1738
+ * Soft deletes a payee by marking it as inactive. Inactive payees will not appear in autocomplete suggestions.
1738
1739
  * @param data The data for the request.
1739
- * @param data.region Region code for tenant context
1740
- * @param data.requestBody
1741
- * @returns RecurringRuleResponseDto Rule created successfully
1740
+ * @param data.id Payee UUID
1741
+ * @returns void Payee deleted successfully
1742
1742
  * @throws ApiError
1743
1743
  */
1744
- public static recurringRuleControllerCreate(
1745
- data: RecurringRuleControllerCreateData
1746
- ): CancelablePromise<RecurringRuleControllerCreateResponse> {
1744
+ public static payeeControllerDelete(
1745
+ data: PayeeControllerDeleteData
1746
+ ): CancelablePromise<PayeeControllerDeleteResponse> {
1747
1747
  return __request(OpenAPI, {
1748
- method: 'POST',
1749
- url: '/api/v1/{region}/bean/recurring-rules',
1748
+ method: 'DELETE',
1749
+ url: '/api/v1/bean/payees/{id}',
1750
1750
  path: {
1751
- region: data.region
1751
+ id: data.id
1752
1752
  },
1753
- body: data.requestBody,
1754
- mediaType: 'application/json',
1755
1753
  errors: {
1756
- 400: 'Invalid input data (e.g., autoCreate without accounts)',
1757
- 409: 'Rule with same name already exists'
1754
+ 404: 'Payee not found'
1758
1755
  }
1759
1756
  });
1760
1757
  }
1758
+ }
1761
1759
 
1760
+ export class AdminPayeeProfilesService {
1762
1761
  /**
1763
- * List recurring rules
1764
- * Returns all recurring rules for the authenticated user with optional filtering
1762
+ * Create payee profile (Admin only)
1763
+ * Creates a new global payee profile. The canonical name must be unique (case-insensitive).
1765
1764
  * @param data The data for the request.
1766
- * @param data.region Region code for tenant context
1767
- * @param data.isActive Filter by active status
1768
- * @param data.frequency Filter by frequency (WEEKLY, MONTHLY, etc.)
1769
- * @param data.hasAutoCreate Filter by autoCreate enabled
1770
- * @returns RecurringRuleResponseDto Rules retrieved successfully
1765
+ * @param data.requestBody
1766
+ * @returns PayeeProfileResponseDto Payee profile created successfully
1771
1767
  * @throws ApiError
1772
1768
  */
1773
- public static recurringRuleControllerFindAll(
1774
- data: RecurringRuleControllerFindAllData
1775
- ): CancelablePromise<RecurringRuleControllerFindAllResponse> {
1769
+ public static payeeProfileAdminControllerCreate(
1770
+ data: PayeeProfileAdminControllerCreateData
1771
+ ): CancelablePromise<PayeeProfileAdminControllerCreateResponse> {
1776
1772
  return __request(OpenAPI, {
1777
- method: 'GET',
1778
- url: '/api/v1/{region}/bean/recurring-rules',
1779
- path: {
1780
- region: data.region
1781
- },
1782
- query: {
1783
- isActive: data.isActive,
1784
- frequency: data.frequency,
1785
- hasAutoCreate: data.hasAutoCreate
1773
+ method: 'POST',
1774
+ url: '/api/v1/admin/payee-profiles',
1775
+ body: data.requestBody,
1776
+ mediaType: 'application/json',
1777
+ errors: {
1778
+ 400: 'Validation failed',
1779
+ 403: 'Admin access required',
1780
+ 409: 'Payee profile already exists'
1786
1781
  }
1787
1782
  });
1788
1783
  }
1789
1784
 
1790
1785
  /**
1791
- * Create recurring rule from transaction
1792
- * Auto-creates a recurring rule using transaction data. User only confirms frequency.
1786
+ * List payee profiles (Admin only)
1787
+ * Returns all payee profiles with optional filtering by category, country, verification status, etc.
1793
1788
  * @param data The data for the request.
1794
- * @param data.transactionId Source transaction ID
1795
- * @param data.region Region code for tenant context
1796
- * @param data.requestBody
1797
- * @returns RecurringRuleResponseDto Rule created successfully
1789
+ * @param data.search Search term for canonical name and aliases (case-insensitive)
1790
+ * @param data.category Filter by category
1791
+ * @param data.country Filter by country (ISO 3166-1 alpha-2)
1792
+ * @param data.isActive Filter by active status (default: true - show only active)
1793
+ * @param data.verified Filter by verification status. true = verified only, false = unverified only
1794
+ * @param data.dataSource Filter by data source
1795
+ * @returns PayeeProfileListResponseDto Payee profiles retrieved successfully
1798
1796
  * @throws ApiError
1799
1797
  */
1800
- public static recurringRuleControllerCreateFromTransaction(
1801
- data: RecurringRuleControllerCreateFromTransactionData
1802
- ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
1798
+ public static payeeProfileAdminControllerFindAll(
1799
+ data: PayeeProfileAdminControllerFindAllData = {}
1800
+ ): CancelablePromise<PayeeProfileAdminControllerFindAllResponse> {
1803
1801
  return __request(OpenAPI, {
1804
- method: 'POST',
1805
- url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
1806
- path: {
1807
- transactionId: data.transactionId,
1808
- region: data.region
1802
+ method: 'GET',
1803
+ url: '/api/v1/admin/payee-profiles',
1804
+ query: {
1805
+ search: data.search,
1806
+ category: data.category,
1807
+ country: data.country,
1808
+ isActive: data.isActive,
1809
+ verified: data.verified,
1810
+ dataSource: data.dataSource
1809
1811
  },
1810
- body: data.requestBody,
1811
- mediaType: 'application/json',
1812
1812
  errors: {
1813
- 404: 'Transaction not found',
1814
- 409: 'Rule with same name already exists or transaction already linked'
1813
+ 403: 'Admin access required'
1815
1814
  }
1816
1815
  });
1817
1816
  }
1818
1817
 
1819
1818
  /**
1820
- * Get recurring rule by ID
1821
- * Returns a specific recurring rule with its details
1819
+ * Get payee profile by ID (Admin only)
1820
+ * Returns a single payee profile by its ID.
1822
1821
  * @param data The data for the request.
1823
- * @param data.id Rule ID
1824
- * @param data.region Region code for tenant context
1825
- * @returns RecurringRuleResponseDto Rule retrieved successfully
1822
+ * @param data.id Payee profile ID (UUID)
1823
+ * @returns PayeeProfileResponseDto Payee profile retrieved successfully
1826
1824
  * @throws ApiError
1827
1825
  */
1828
- public static recurringRuleControllerFindOne(
1829
- data: RecurringRuleControllerFindOneData
1830
- ): CancelablePromise<RecurringRuleControllerFindOneResponse> {
1826
+ public static payeeProfileAdminControllerFindOne(
1827
+ data: PayeeProfileAdminControllerFindOneData
1828
+ ): CancelablePromise<PayeeProfileAdminControllerFindOneResponse> {
1831
1829
  return __request(OpenAPI, {
1832
1830
  method: 'GET',
1833
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1831
+ url: '/api/v1/admin/payee-profiles/{id}',
1834
1832
  path: {
1835
- id: data.id,
1836
- region: data.region
1833
+ id: data.id
1837
1834
  },
1838
1835
  errors: {
1839
- 404: 'Rule not found'
1836
+ 403: 'Admin access required',
1837
+ 404: 'Payee profile not found'
1840
1838
  }
1841
1839
  });
1842
1840
  }
1843
1841
 
1844
1842
  /**
1845
- * Update recurring rule
1846
- * Updates an existing recurring rule
1843
+ * Update payee profile (Admin only)
1844
+ * Updates an existing payee profile. The canonical name cannot be changed.
1847
1845
  * @param data The data for the request.
1848
- * @param data.id Rule ID
1849
- * @param data.region Region code for tenant context
1846
+ * @param data.id Payee profile ID (UUID)
1850
1847
  * @param data.requestBody
1851
- * @returns RecurringRuleResponseDto Rule updated successfully
1848
+ * @returns PayeeProfileResponseDto Payee profile updated successfully
1852
1849
  * @throws ApiError
1853
1850
  */
1854
- public static recurringRuleControllerUpdate(
1855
- data: RecurringRuleControllerUpdateData
1856
- ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
1851
+ public static payeeProfileAdminControllerUpdate(
1852
+ data: PayeeProfileAdminControllerUpdateData
1853
+ ): CancelablePromise<PayeeProfileAdminControllerUpdateResponse> {
1857
1854
  return __request(OpenAPI, {
1858
- method: 'PATCH',
1859
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1855
+ method: 'PUT',
1856
+ url: '/api/v1/admin/payee-profiles/{id}',
1860
1857
  path: {
1861
- id: data.id,
1862
- region: data.region
1858
+ id: data.id
1863
1859
  },
1864
1860
  body: data.requestBody,
1865
1861
  mediaType: 'application/json',
1866
1862
  errors: {
1867
- 400: 'Invalid input data',
1868
- 404: 'Rule not found'
1863
+ 403: 'Admin access required',
1864
+ 404: 'Payee profile not found'
1869
1865
  }
1870
1866
  });
1871
1867
  }
1872
1868
 
1873
1869
  /**
1874
- * Delete recurring rule
1875
- * Soft deletes a recurring rule (sets isActive to false)
1870
+ * Soft delete payee profile (Admin only)
1871
+ * Marks a payee profile as inactive (soft delete). The profile cannot be deleted if it is referenced by user payees.
1876
1872
  * @param data The data for the request.
1877
- * @param data.id Rule ID
1878
- * @param data.region Region code for tenant context
1879
- * @returns void Rule deleted successfully
1873
+ * @param data.id Payee profile ID (UUID)
1874
+ * @returns void Payee profile deleted successfully
1880
1875
  * @throws ApiError
1881
1876
  */
1882
- public static recurringRuleControllerDelete(
1883
- data: RecurringRuleControllerDeleteData
1884
- ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
1877
+ public static payeeProfileAdminControllerDelete(
1878
+ data: PayeeProfileAdminControllerDeleteData
1879
+ ): CancelablePromise<PayeeProfileAdminControllerDeleteResponse> {
1885
1880
  return __request(OpenAPI, {
1886
1881
  method: 'DELETE',
1887
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1882
+ url: '/api/v1/admin/payee-profiles/{id}',
1888
1883
  path: {
1889
- id: data.id,
1890
- region: data.region
1884
+ id: data.id
1891
1885
  },
1892
1886
  errors: {
1893
- 404: 'Rule not found'
1887
+ 403: 'Admin access required',
1888
+ 404: 'Payee profile not found',
1889
+ 409: 'Payee profile is in use and cannot be deleted'
1894
1890
  }
1895
1891
  });
1896
1892
  }
1897
1893
 
1898
1894
  /**
1899
- * Get rule with statistics
1900
- * Returns a rule with pending/overdue counts and next expected date
1895
+ * Verify payee profile (Admin only)
1896
+ * Marks a payee profile as verified by setting verifiedAt to current timestamp.
1901
1897
  * @param data The data for the request.
1902
- * @param data.id Rule ID
1903
- * @param data.region Region code for tenant context
1904
- * @returns RecurringRuleWithStatsResponseDto Rule with stats retrieved successfully
1898
+ * @param data.id Payee profile ID (UUID)
1899
+ * @returns PayeeProfileResponseDto Payee profile verified successfully
1905
1900
  * @throws ApiError
1906
1901
  */
1907
- public static recurringRuleControllerGetWithStats(
1908
- data: RecurringRuleControllerGetWithStatsData
1909
- ): CancelablePromise<RecurringRuleControllerGetWithStatsResponse> {
1902
+ public static payeeProfileAdminControllerVerify(
1903
+ data: PayeeProfileAdminControllerVerifyData
1904
+ ): CancelablePromise<PayeeProfileAdminControllerVerifyResponse> {
1910
1905
  return __request(OpenAPI, {
1911
- method: 'GET',
1912
- url: '/api/v1/{region}/bean/recurring-rules/{id}/stats',
1906
+ method: 'POST',
1907
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1913
1908
  path: {
1914
- id: data.id,
1915
- region: data.region
1909
+ id: data.id
1916
1910
  },
1917
1911
  errors: {
1918
- 404: 'Rule not found'
1912
+ 403: 'Admin access required',
1913
+ 404: 'Payee profile not found'
1919
1914
  }
1920
1915
  });
1921
1916
  }
1922
- }
1923
1917
 
1924
- export class ExpectedTransactionsService {
1925
1918
  /**
1926
- * List expected transactions
1927
- * Returns expected transactions for the authenticated user with optional filtering
1919
+ * Unverify payee profile (Admin only)
1920
+ * Removes verification status by setting verifiedAt to null.
1928
1921
  * @param data The data for the request.
1929
- * @param data.region Region code for tenant context
1930
- * @param data.ruleId Filter by recurring rule ID
1931
- * @param data.status Filter by status (PENDING, COMPLETED, SKIPPED)
1932
- * @param data.fromDate Filter by date range start (YYYY-MM-DD)
1933
- * @param data.toDate Filter by date range end (YYYY-MM-DD)
1934
- * @returns ExpectedTransactionListResponseDto Expected transactions retrieved successfully
1922
+ * @param data.id Payee profile ID (UUID)
1923
+ * @returns void Payee profile unverified successfully
1935
1924
  * @throws ApiError
1936
1925
  */
1937
- public static expectedTransactionControllerFindAll(
1938
- data: ExpectedTransactionControllerFindAllData
1939
- ): CancelablePromise<ExpectedTransactionControllerFindAllResponse> {
1926
+ public static payeeProfileAdminControllerUnverify(
1927
+ data: PayeeProfileAdminControllerUnverifyData
1928
+ ): CancelablePromise<PayeeProfileAdminControllerUnverifyResponse> {
1940
1929
  return __request(OpenAPI, {
1941
- method: 'GET',
1942
- url: '/api/v1/{region}/bean/expected-transactions',
1930
+ method: 'DELETE',
1931
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1943
1932
  path: {
1944
- region: data.region
1933
+ id: data.id
1945
1934
  },
1946
- query: {
1947
- ruleId: data.ruleId,
1948
- status: data.status,
1949
- fromDate: data.fromDate,
1950
- toDate: data.toDate
1935
+ errors: {
1936
+ 403: 'Admin access required',
1937
+ 404: 'Payee profile not found'
1951
1938
  }
1952
1939
  });
1953
1940
  }
1941
+ }
1954
1942
 
1943
+ export class PayeeProfilesService {
1955
1944
  /**
1956
- * List overdue expected transactions
1957
- * Returns all overdue expected transactions (PENDING past tolerance)
1958
- * @param data The data for the request.
1959
- * @param data.region Region code for tenant context
1960
- * @returns ExpectedTransactionListResponseDto Overdue transactions retrieved successfully
1945
+ * List active payee profiles (directory dump)
1946
+ * Returns the full active PayeeProfile set as a trimmed projection for client-side dictionary caching. Aliases are verbatim as stored; clients normalize on their side.
1947
+ * @returns PayeeProfileDirectoryResponseDto Active payee profiles
1961
1948
  * @throws ApiError
1962
1949
  */
1963
- public static expectedTransactionControllerFindOverdue(
1964
- data: ExpectedTransactionControllerFindOverdueData
1965
- ): CancelablePromise<ExpectedTransactionControllerFindOverdueResponse> {
1950
+ public static payeeProfileControllerListActive(): CancelablePromise<PayeeProfileControllerListActiveResponse> {
1966
1951
  return __request(OpenAPI, {
1967
1952
  method: 'GET',
1968
- url: '/api/v1/{region}/bean/expected-transactions/overdue',
1969
- path: {
1970
- region: data.region
1953
+ url: '/api/v1/bean/payee-profiles',
1954
+ errors: {
1955
+ 401: 'Missing or invalid token'
1971
1956
  }
1972
1957
  });
1973
1958
  }
1959
+ }
1974
1960
 
1961
+ export class BeanCommoditiesService {
1975
1962
  /**
1976
- * Get expected transaction by ID
1977
- * Returns a specific expected transaction with rule details
1963
+ * Create a new commodity
1964
+ * Creates a new commodity definition for the authenticated user
1978
1965
  * @param data The data for the request.
1979
- * @param data.id Expected transaction ID
1980
1966
  * @param data.region Region code for tenant context
1981
- * @returns ExpectedTransactionResponseDto Expected transaction retrieved successfully
1967
+ * @param data.requestBody
1968
+ * @returns CommodityResponseDto Commodity created successfully
1982
1969
  * @throws ApiError
1983
1970
  */
1984
- public static expectedTransactionControllerFindOne(
1985
- data: ExpectedTransactionControllerFindOneData
1986
- ): CancelablePromise<ExpectedTransactionControllerFindOneResponse> {
1971
+ public static commodityControllerCreate(
1972
+ data: CommodityControllerCreateData
1973
+ ): CancelablePromise<CommodityControllerCreateResponse> {
1987
1974
  return __request(OpenAPI, {
1988
- method: 'GET',
1989
- url: '/api/v1/{region}/bean/expected-transactions/{id}',
1975
+ method: 'POST',
1976
+ url: '/api/v1/{region}/bean/commodities',
1990
1977
  path: {
1991
- id: data.id,
1992
1978
  region: data.region
1993
1979
  },
1980
+ body: data.requestBody,
1981
+ mediaType: 'application/json',
1994
1982
  errors: {
1995
- 404: 'Expected transaction not found'
1983
+ 400: 'Invalid input data',
1984
+ 409: 'Commodity already exists'
1996
1985
  }
1997
1986
  });
1998
1987
  }
1999
1988
 
2000
1989
  /**
2001
- * Skip expected transaction
2002
- * Marks an expected transaction as skipped (PENDING -> SKIPPED)
1990
+ * List user commodities
1991
+ * Returns all commodity definitions for the authenticated user with optional filtering
2003
1992
  * @param data The data for the request.
2004
- * @param data.id Expected transaction ID
2005
1993
  * @param data.region Region code for tenant context
2006
- * @returns ExpectedTransactionResponseDto Expected transaction skipped successfully
1994
+ * @param data.search Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
1995
+ * @param data.symbol Filter by exact symbol match
1996
+ * @returns CommodityListResponseDto Commodities retrieved successfully
2007
1997
  * @throws ApiError
2008
1998
  */
2009
- public static expectedTransactionControllerSkip(
2010
- data: ExpectedTransactionControllerSkipData
2011
- ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
1999
+ public static commodityControllerFindAll(
2000
+ data: CommodityControllerFindAllData
2001
+ ): CancelablePromise<CommodityControllerFindAllResponse> {
2012
2002
  return __request(OpenAPI, {
2013
- method: 'POST',
2014
- url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2003
+ method: 'GET',
2004
+ url: '/api/v1/{region}/bean/commodities',
2015
2005
  path: {
2016
- id: data.id,
2017
2006
  region: data.region
2018
2007
  },
2019
- errors: {
2020
- 400: 'Cannot skip - not in PENDING status',
2021
- 404: 'Expected transaction not found'
2008
+ query: {
2009
+ search: data.search,
2010
+ symbol: data.symbol
2022
2011
  }
2023
2012
  });
2024
2013
  }
2025
2014
 
2026
2015
  /**
2027
- * Undo skip
2028
- * Reverses a skip operation (SKIPPED -> PENDING)
2016
+ * Get commodity by symbol
2017
+ * Returns a specific commodity definition by its symbol
2029
2018
  * @param data The data for the request.
2030
- * @param data.id Expected transaction ID
2019
+ * @param data.symbol Commodity symbol
2031
2020
  * @param data.region Region code for tenant context
2032
- * @returns ExpectedTransactionResponseDto Skip undone successfully
2021
+ * @returns CommodityResponseDto Commodity retrieved successfully
2033
2022
  * @throws ApiError
2034
2023
  */
2035
- public static expectedTransactionControllerUndoSkip(
2036
- data: ExpectedTransactionControllerUndoSkipData
2037
- ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
2024
+ public static commodityControllerFindOne(
2025
+ data: CommodityControllerFindOneData
2026
+ ): CancelablePromise<CommodityControllerFindOneResponse> {
2038
2027
  return __request(OpenAPI, {
2039
- method: 'DELETE',
2040
- url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2028
+ method: 'GET',
2029
+ url: '/api/v1/{region}/bean/commodities/{symbol}',
2041
2030
  path: {
2042
- id: data.id,
2031
+ symbol: data.symbol,
2043
2032
  region: data.region
2044
2033
  },
2045
2034
  errors: {
2046
- 400: 'Cannot undo - not in SKIPPED status',
2047
- 404: 'Expected transaction not found'
2035
+ 404: 'Commodity not found'
2048
2036
  }
2049
2037
  });
2050
2038
  }
2051
2039
 
2052
2040
  /**
2053
- * Confirm transaction match
2054
- * Manually matches an expected transaction with an actual transaction
2041
+ * Update commodity
2042
+ * Updates an existing commodity definition. Symbol cannot be changed.
2055
2043
  * @param data The data for the request.
2056
- * @param data.id Expected transaction ID
2044
+ * @param data.symbol Commodity symbol
2057
2045
  * @param data.region Region code for tenant context
2058
2046
  * @param data.requestBody
2059
- * @returns unknown Match confirmed successfully
2047
+ * @returns CommodityResponseDto Commodity updated successfully
2060
2048
  * @throws ApiError
2061
2049
  */
2062
- public static expectedTransactionControllerConfirmMatch(
2063
- data: ExpectedTransactionControllerConfirmMatchData
2064
- ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
2050
+ public static commodityControllerUpdate(
2051
+ data: CommodityControllerUpdateData
2052
+ ): CancelablePromise<CommodityControllerUpdateResponse> {
2065
2053
  return __request(OpenAPI, {
2066
- method: 'POST',
2067
- url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2054
+ method: 'PUT',
2055
+ url: '/api/v1/{region}/bean/commodities/{symbol}',
2068
2056
  path: {
2069
- id: data.id,
2057
+ symbol: data.symbol,
2070
2058
  region: data.region
2071
2059
  },
2072
2060
  body: data.requestBody,
2073
2061
  mediaType: 'application/json',
2074
2062
  errors: {
2075
- 400: 'Cannot match - not in PENDING status',
2076
- 404: 'Expected or actual transaction not found',
2077
- 409: 'Actual transaction already matched to another rule'
2063
+ 400: 'Invalid input data',
2064
+ 404: 'Commodity not found'
2078
2065
  }
2079
2066
  });
2080
2067
  }
2081
2068
 
2082
2069
  /**
2083
- * Unmatch transaction
2084
- * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
2070
+ * Delete commodity
2071
+ * Deletes a commodity definition
2085
2072
  * @param data The data for the request.
2086
- * @param data.id Expected transaction ID
2073
+ * @param data.symbol Commodity symbol
2087
2074
  * @param data.region Region code for tenant context
2088
- * @returns unknown Match removed successfully
2075
+ * @returns void Commodity deleted successfully
2089
2076
  * @throws ApiError
2090
2077
  */
2091
- public static expectedTransactionControllerUnmatch(
2092
- data: ExpectedTransactionControllerUnmatchData
2093
- ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
2078
+ public static commodityControllerDelete(
2079
+ data: CommodityControllerDeleteData
2080
+ ): CancelablePromise<CommodityControllerDeleteResponse> {
2094
2081
  return __request(OpenAPI, {
2095
2082
  method: 'DELETE',
2096
- url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2083
+ url: '/api/v1/{region}/bean/commodities/{symbol}',
2097
2084
  path: {
2098
- id: data.id,
2085
+ symbol: data.symbol,
2099
2086
  region: data.region
2100
2087
  },
2101
2088
  errors: {
2102
- 400: 'Cannot unmatch - not in COMPLETED status',
2103
- 404: 'Expected transaction not found'
2089
+ 404: 'Commodity not found'
2104
2090
  }
2105
2091
  });
2106
2092
  }
2107
2093
 
2108
2094
  /**
2109
- * Enter Now
2110
- * Creates an actual transaction for an expected transaction (YNAB-style Enter Now)
2095
+ * Ensure commodity exists
2096
+ * Gets existing commodity or creates it with automatic initialization from OpenBB
2111
2097
  * @param data The data for the request.
2112
- * @param data.id Expected transaction ID
2098
+ * @param data.symbol Commodity symbol
2113
2099
  * @param data.region Region code for tenant context
2114
- * @param data.requestBody
2115
- * @returns unknown Transaction created successfully
2100
+ * @returns CommodityResponseDto Commodity retrieved or created
2116
2101
  * @throws ApiError
2117
2102
  */
2118
- public static expectedTransactionControllerEnterNow(
2119
- data: ExpectedTransactionControllerEnterNowData
2120
- ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
2103
+ public static commodityControllerGetOrCreate(
2104
+ data: CommodityControllerGetOrCreateData
2105
+ ): CancelablePromise<CommodityControllerGetOrCreateResponse> {
2121
2106
  return __request(OpenAPI, {
2122
2107
  method: 'POST',
2123
- url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
2108
+ url: '/api/v1/{region}/bean/commodities/{symbol}/ensure',
2124
2109
  path: {
2125
- id: data.id,
2110
+ symbol: data.symbol,
2126
2111
  region: data.region
2127
- },
2128
- body: data.requestBody,
2129
- mediaType: 'application/json',
2130
- errors: {
2131
- 400: 'Cannot enter - not in PENDING status or missing accounts',
2132
- 404: 'Expected transaction or accounts not found'
2133
2112
  }
2134
2113
  });
2135
2114
  }
2136
- }
2137
2115
 
2138
- export class RecurringForecastService {
2139
2116
  /**
2140
- * Get cash flow forecast
2141
- * Returns predicted outflows for the next N months based on active recurring rules
2117
+ * Bulk create commodities
2118
+ * Creates multiple commodities from a list of symbols, useful for initialization
2142
2119
  * @param data The data for the request.
2143
2120
  * @param data.region Region code for tenant context
2144
- * @param data.months Number of months to forecast (1-12, default 3)
2145
- * @returns ForecastResponseDto Forecast retrieved successfully
2121
+ * @returns CommodityResponseDto Commodities created successfully
2146
2122
  * @throws ApiError
2147
2123
  */
2148
- public static forecastControllerGetForecast(
2149
- data: ForecastControllerGetForecastData
2150
- ): CancelablePromise<ForecastControllerGetForecastResponse> {
2124
+ public static commodityControllerBulkCreate(
2125
+ data: CommodityControllerBulkCreateData
2126
+ ): CancelablePromise<CommodityControllerBulkCreateResponse> {
2151
2127
  return __request(OpenAPI, {
2152
- method: 'GET',
2153
- url: '/api/v1/{region}/bean/recurring/forecast',
2128
+ method: 'POST',
2129
+ url: '/api/v1/{region}/bean/commodities/bulk',
2154
2130
  path: {
2155
2131
  region: data.region
2156
- },
2157
- query: {
2158
- months: data.months
2159
2132
  }
2160
2133
  });
2161
2134
  }
2162
2135
  }
2163
2136
 
2164
- export class BeanTransactionRulesService {
2137
+ export class ReportingService {
2165
2138
  /**
2166
- * Create a new transaction rule (or upsert if upsertByPayee=true)
2167
- * Creates a new rule. If upsertByPayee=true, updates existing rule matching payeeKeywords[0] instead of creating duplicate.
2168
- * @param data The data for the request.
2139
+ * Get portfolio value trends
2140
+ *
2141
+ * Returns time series data of portfolio net worth.
2142
+ *
2143
+ * **Multi-currency Support:**
2144
+ * - `series[].byCurrency` - Currency breakdown for each data point
2145
+ * - `byCurrency` - Separate time series grouped by currency
2146
+ * - `warnings` - Exchange rate warnings if conversion failed
2147
+ *
2148
+ * **Parameters:**
2149
+ * - `period`: Time period (1m, 3m, 6m, 1y)
2150
+ * - `granularity`: Data granularity (day, week, month)
2151
+ *
2152
+ * @param data The data for the request.
2169
2153
  * @param data.region Region code for tenant context
2170
- * @param data.requestBody
2171
- * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
2154
+ * @param data.period Time period
2155
+ * @param data.granularity Data granularity
2156
+ * @returns PortfolioTrendsResponseDto Trends retrieved successfully
2172
2157
  * @throws ApiError
2173
2158
  */
2174
- public static transactionRuleControllerCreate(
2175
- data: TransactionRuleControllerCreateData
2176
- ): CancelablePromise<TransactionRuleControllerCreateResponse> {
2159
+ public static reportingControllerGetPortfolioTrends(
2160
+ data: ReportingControllerGetPortfolioTrendsData
2161
+ ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
2177
2162
  return __request(OpenAPI, {
2178
- method: 'POST',
2179
- url: '/api/v1/{region}/bean/transaction-rules',
2163
+ method: 'GET',
2164
+ url: '/api/v1/{region}/reporting/portfolio/trends',
2180
2165
  path: {
2181
2166
  region: data.region
2182
2167
  },
2183
- body: data.requestBody,
2184
- mediaType: 'application/json',
2168
+ query: {
2169
+ period: data.period,
2170
+ granularity: data.granularity
2171
+ },
2185
2172
  errors: {
2186
- 400: 'Validation failed',
2187
- 401: 'Unauthorized',
2188
- 409: 'Resource conflict - another process is updating this rule'
2173
+ 401: 'User not authenticated'
2189
2174
  }
2190
2175
  });
2191
2176
  }
2192
2177
 
2193
2178
  /**
2194
- * Get all transaction rules for user
2179
+ * Get cash-flow trends
2180
+ *
2181
+ * Monthly income / expense / netSavings over a fixed N-month window
2182
+ * (current month + N−1 prior). Missing months are zero-filled (flow metric).
2183
+ *
2184
+ * **Parameters:**
2185
+ * - `period`: 1m | 3m | 6m | 1y (default 6m)
2186
+ * - `granularity`: accepted for API symmetry; v1 returns month buckets
2187
+ *
2195
2188
  * @param data The data for the request.
2196
2189
  * @param data.region Region code for tenant context
2197
- * @param data.limit Max results per page (default: 20, max: 100)
2198
- * @param data.offset Pagination offset (default: 0)
2199
- * @param data.enabled Filter by enabled status
2200
- * @param data.learningSource Filter by learning source. Omit this parameter or pass empty string to get manually created rules (learningSource is null in database).
2201
- * @param data.autoApplyEnabled Filter by auto-apply status
2202
- * @returns TransactionRuleListResponseDto List of rules
2190
+ * @param data.period Time period
2191
+ * @param data.granularity Data granularity (accepted for API symmetry; v1 returns month buckets)
2192
+ * @returns CashFlowTrendsResponseDto Cash-flow trends retrieved successfully
2203
2193
  * @throws ApiError
2204
2194
  */
2205
- public static transactionRuleControllerList(
2206
- data: TransactionRuleControllerListData
2207
- ): CancelablePromise<TransactionRuleControllerListResponse> {
2195
+ public static reportingControllerGetCashFlowTrends(
2196
+ data: ReportingControllerGetCashFlowTrendsData
2197
+ ): CancelablePromise<ReportingControllerGetCashFlowTrendsResponse> {
2208
2198
  return __request(OpenAPI, {
2209
2199
  method: 'GET',
2210
- url: '/api/v1/{region}/bean/transaction-rules',
2200
+ url: '/api/v1/{region}/reporting/cash-flow/trends',
2211
2201
  path: {
2212
2202
  region: data.region
2213
2203
  },
2214
2204
  query: {
2215
- limit: data.limit,
2216
- offset: data.offset,
2217
- enabled: data.enabled,
2218
- learningSource: data.learningSource,
2219
- autoApplyEnabled: data.autoApplyEnabled
2205
+ period: data.period,
2206
+ granularity: data.granularity
2220
2207
  },
2221
2208
  errors: {
2222
- 401: 'Unauthorized'
2209
+ 401: 'User not authenticated'
2223
2210
  }
2224
2211
  });
2225
2212
  }
2226
2213
 
2227
2214
  /**
2228
- * Validate transaction rule configuration
2215
+ * Generate portfolio snapshot
2216
+ *
2217
+ * Manually generate a portfolio snapshot for a specific date.
2218
+ *
2219
+ * **Multi-currency Support:**
2220
+ * - Fetches balances grouped by currency
2221
+ * - Uses user's baseCurrency setting for conversion
2222
+ * - Stores exchange rates and warnings
2223
+ *
2224
+ * **Use Cases:**
2225
+ * - Testing snapshot generation
2226
+ * - Force regeneration after data correction
2227
+ * - Initial setup for new users
2228
+ *
2229
2229
  * @param data The data for the request.
2230
2230
  * @param data.region Region code for tenant context
2231
- * @param data.requestBody
2232
- * @returns ValidateRuleResponseDto Validation result
2231
+ * @param data.requestBody Optional date (defaults to today)
2232
+ * @returns GenerateSnapshotResponse Snapshot generated successfully
2233
2233
  * @throws ApiError
2234
2234
  */
2235
- public static transactionRuleControllerValidate(
2236
- data: TransactionRuleControllerValidateData
2237
- ): CancelablePromise<TransactionRuleControllerValidateResponse> {
2235
+ public static reportingControllerGenerateSnapshot(
2236
+ data: ReportingControllerGenerateSnapshotData
2237
+ ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
2238
2238
  return __request(OpenAPI, {
2239
2239
  method: 'POST',
2240
- url: '/api/v1/{region}/bean/transaction-rules/validate',
2240
+ url: '/api/v1/{region}/reporting/snapshots/generate',
2241
2241
  path: {
2242
2242
  region: data.region
2243
2243
  },
2244
2244
  body: data.requestBody,
2245
2245
  mediaType: 'application/json',
2246
2246
  errors: {
2247
- 400: 'Validation failed',
2248
- 401: 'Unauthorized'
2247
+ 400: 'Invalid date format',
2248
+ 401: 'User not authenticated'
2249
2249
  }
2250
2250
  });
2251
2251
  }
2252
2252
 
2253
2253
  /**
2254
- * Bulk create transaction rules
2254
+ * Backfill portfolio snapshots
2255
+ *
2256
+ * Generate snapshots for a date range (historical data backfill).
2257
+ *
2258
+ * **Multi-currency Support:**
2259
+ * - Each snapshot includes multi-currency data
2260
+ * - Uses exchange rates available at generation time
2261
+ * - Warnings stored for missing exchange rates
2262
+ *
2263
+ * **Best Practices:**
2264
+ * - Use for initial setup after account configuration
2265
+ * - Run during low-traffic periods for large date ranges
2266
+ * - Existing snapshots are skipped (not regenerated)
2267
+ *
2255
2268
  * @param data The data for the request.
2256
2269
  * @param data.region Region code for tenant context
2257
2270
  * @param data.requestBody
2258
- * @returns BulkCreateRulesResponseDto Bulk create completed
2271
+ * @returns BackfillSnapshotsResponse Backfill completed successfully
2259
2272
  * @throws ApiError
2260
2273
  */
2261
- public static transactionRuleControllerBulkCreate(
2262
- data: TransactionRuleControllerBulkCreateData
2263
- ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
2274
+ public static reportingControllerBackfillSnapshots(
2275
+ data: ReportingControllerBackfillSnapshotsData
2276
+ ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
2264
2277
  return __request(OpenAPI, {
2265
2278
  method: 'POST',
2266
- url: '/api/v1/{region}/bean/transaction-rules/bulk',
2279
+ url: '/api/v1/{region}/reporting/snapshots/backfill',
2267
2280
  path: {
2268
2281
  region: data.region
2269
2282
  },
2270
2283
  body: data.requestBody,
2271
2284
  mediaType: 'application/json',
2272
2285
  errors: {
2273
- 400: 'Invalid bulk create data',
2274
- 401: 'Unauthorized'
2286
+ 400: 'Invalid date format or range',
2287
+ 401: 'User not authenticated',
2288
+ 409: 'Backfill already in progress for this user'
2275
2289
  }
2276
2290
  });
2277
2291
  }
2292
+ }
2278
2293
 
2294
+ export class BeanPricesService {
2279
2295
  /**
2280
- * Export transaction rules
2296
+ * Create a new price
2297
+ * Creates a new price entry for the authenticated user
2281
2298
  * @param data The data for the request.
2282
- * @param data.format Export format (currently only JSON supported)
2283
2299
  * @param data.region Region code for tenant context
2284
- * @returns ExportRulesResponseDto Exported rules
2300
+ * @param data.requestBody
2301
+ * @returns PriceResponseDto Price created successfully
2285
2302
  * @throws ApiError
2286
2303
  */
2287
- public static transactionRuleControllerExport(
2288
- data: TransactionRuleControllerExportData
2289
- ): CancelablePromise<TransactionRuleControllerExportResponse> {
2304
+ public static priceControllerCreate(
2305
+ data: PriceControllerCreateData
2306
+ ): CancelablePromise<PriceControllerCreateResponse> {
2290
2307
  return __request(OpenAPI, {
2291
- method: 'GET',
2292
- url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
2308
+ method: 'POST',
2309
+ url: '/api/v1/{region}/bean/prices',
2293
2310
  path: {
2294
- format: data.format,
2295
2311
  region: data.region
2296
2312
  },
2313
+ body: data.requestBody,
2314
+ mediaType: 'application/json',
2297
2315
  errors: {
2298
- 400: 'Unsupported format',
2299
- 401: 'Unauthorized'
2316
+ 404: 'Currency or quoteCurrency commodity not found',
2317
+ 409: 'Price already exists for this currency pair and date'
2300
2318
  }
2301
2319
  });
2302
2320
  }
2303
2321
 
2304
2322
  /**
2305
- * Get transaction rule statistics
2323
+ * List user prices
2324
+ * Returns all price entries for the authenticated user with optional filtering
2306
2325
  * @param data The data for the request.
2307
- * @param data.period Statistics time period
2308
2326
  * @param data.region Region code for tenant context
2309
- * @returns RuleStatisticsResponseDto Rule statistics
2327
+ * @param data.currency Filter by currency (e.g., BTC, AAPL, USD)
2328
+ * @param data.quoteCurrency Filter by quote currency (pricing currency, e.g., USD, CNY)
2329
+ * @param data.dateFrom Filter prices from this date (ISO 8601 format)
2330
+ * @param data.dateTo Filter prices to this date (ISO 8601 format)
2331
+ * @param data.search Search term for currency or quoteCurrency (case-insensitive partial match)
2332
+ * @param data.page Page number for pagination (default: 1)
2333
+ * @param data.limit Number of items per page (default: 20, max: 100)
2334
+ * @returns PriceListResponseDto Prices retrieved successfully
2310
2335
  * @throws ApiError
2311
2336
  */
2312
- public static transactionRuleControllerGetStatistics(
2313
- data: TransactionRuleControllerGetStatisticsData
2314
- ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
2337
+ public static priceControllerFindAll(
2338
+ data: PriceControllerFindAllData
2339
+ ): CancelablePromise<PriceControllerFindAllResponse> {
2315
2340
  return __request(OpenAPI, {
2316
2341
  method: 'GET',
2317
- url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
2342
+ url: '/api/v1/{region}/bean/prices',
2318
2343
  path: {
2319
- period: data.period,
2320
2344
  region: data.region
2321
2345
  },
2322
- errors: {
2323
- 401: 'Unauthorized'
2346
+ query: {
2347
+ currency: data.currency,
2348
+ quoteCurrency: data.quoteCurrency,
2349
+ dateFrom: data.dateFrom,
2350
+ dateTo: data.dateTo,
2351
+ search: data.search,
2352
+ page: data.page,
2353
+ limit: data.limit
2324
2354
  }
2325
2355
  });
2326
2356
  }
2327
2357
 
2328
2358
  /**
2329
- * Get transaction rule detail
2359
+ * Get price by ID
2360
+ * Returns a single price entry by its ID
2330
2361
  * @param data The data for the request.
2331
- * @param data.ruleId Rule ID
2362
+ * @param data.id Price ID
2332
2363
  * @param data.region Region code for tenant context
2333
- * @returns TransactionRuleResponseDto Rule details
2364
+ * @returns PriceResponseDto Price retrieved successfully
2334
2365
  * @throws ApiError
2335
2366
  */
2336
- public static transactionRuleControllerGetDetail(
2337
- data: TransactionRuleControllerGetDetailData
2338
- ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
2367
+ public static priceControllerFindOne(
2368
+ data: PriceControllerFindOneData
2369
+ ): CancelablePromise<PriceControllerFindOneResponse> {
2339
2370
  return __request(OpenAPI, {
2340
2371
  method: 'GET',
2341
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2372
+ url: '/api/v1/{region}/bean/prices/{id}',
2342
2373
  path: {
2343
- ruleId: data.ruleId,
2374
+ id: data.id,
2344
2375
  region: data.region
2345
2376
  },
2346
2377
  errors: {
2347
- 401: 'Unauthorized',
2348
- 403: 'Forbidden - not owner of rule',
2349
- 404: 'Rule not found'
2378
+ 404: 'Price not found'
2350
2379
  }
2351
2380
  });
2352
2381
  }
2353
2382
 
2354
2383
  /**
2355
- * Update a transaction rule
2384
+ * Update a price
2385
+ * Updates an existing price entry
2356
2386
  * @param data The data for the request.
2357
- * @param data.ruleId Rule ID to update
2387
+ * @param data.id Price ID
2358
2388
  * @param data.region Region code for tenant context
2359
2389
  * @param data.requestBody
2360
- * @returns TransactionRuleResponseDto Rule updated successfully
2390
+ * @returns PriceResponseDto Price updated successfully
2361
2391
  * @throws ApiError
2362
2392
  */
2363
- public static transactionRuleControllerUpdate(
2364
- data: TransactionRuleControllerUpdateData
2365
- ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
2393
+ public static priceControllerUpdate(
2394
+ data: PriceControllerUpdateData
2395
+ ): CancelablePromise<PriceControllerUpdateResponse> {
2366
2396
  return __request(OpenAPI, {
2367
2397
  method: 'PUT',
2368
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2398
+ url: '/api/v1/{region}/bean/prices/{id}',
2369
2399
  path: {
2370
- ruleId: data.ruleId,
2400
+ id: data.id,
2371
2401
  region: data.region
2372
2402
  },
2373
2403
  body: data.requestBody,
2374
2404
  mediaType: 'application/json',
2375
2405
  errors: {
2376
- 400: 'Validation failed',
2377
- 401: 'Unauthorized',
2378
- 403: 'Forbidden - not owner of rule',
2379
- 404: 'Rule not found',
2380
- 409: 'Resource conflict - rule is being modified by another process'
2406
+ 404: 'Price not found',
2407
+ 409: 'Updated price conflicts with existing price'
2381
2408
  }
2382
2409
  });
2383
2410
  }
2384
2411
 
2385
2412
  /**
2386
- * Delete a transaction rule
2413
+ * Delete a price
2414
+ * Deletes a price entry (hard delete)
2387
2415
  * @param data The data for the request.
2388
- * @param data.ruleId Rule ID to delete
2416
+ * @param data.id Price ID
2389
2417
  * @param data.region Region code for tenant context
2390
- * @returns void Rule deleted successfully
2418
+ * @returns void Price deleted successfully
2391
2419
  * @throws ApiError
2392
2420
  */
2393
- public static transactionRuleControllerDelete(
2394
- data: TransactionRuleControllerDeleteData
2395
- ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
2421
+ public static priceControllerDelete(
2422
+ data: PriceControllerDeleteData
2423
+ ): CancelablePromise<PriceControllerDeleteResponse> {
2396
2424
  return __request(OpenAPI, {
2397
2425
  method: 'DELETE',
2398
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2426
+ url: '/api/v1/{region}/bean/prices/{id}',
2399
2427
  path: {
2400
- ruleId: data.ruleId,
2428
+ id: data.id,
2401
2429
  region: data.region
2402
2430
  },
2403
2431
  errors: {
2404
- 401: 'Unauthorized',
2405
- 403: 'Forbidden - not owner of rule',
2406
- 404: 'Rule not found',
2407
- 409: 'Resource conflict - rule is being modified by another process'
2432
+ 404: 'Price not found'
2408
2433
  }
2409
2434
  });
2410
2435
  }
2411
2436
 
2412
2437
  /**
2413
- * Test rule matching
2438
+ * Bulk create prices
2439
+ * Creates multiple price entries at once (skips duplicates)
2414
2440
  * @param data The data for the request.
2415
- * @param data.ruleId Rule ID to test
2416
2441
  * @param data.region Region code for tenant context
2417
2442
  * @param data.requestBody
2418
- * @returns TestRuleResponseDto Test result
2443
+ * @returns PriceResponseDto Prices created successfully
2419
2444
  * @throws ApiError
2420
2445
  */
2421
- public static transactionRuleControllerTest(
2422
- data: TransactionRuleControllerTestData
2423
- ): CancelablePromise<TransactionRuleControllerTestResponse> {
2446
+ public static priceControllerBulkCreate(
2447
+ data: PriceControllerBulkCreateData
2448
+ ): CancelablePromise<PriceControllerBulkCreateResponse> {
2424
2449
  return __request(OpenAPI, {
2425
2450
  method: 'POST',
2426
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2451
+ url: '/api/v1/{region}/bean/prices/bulk',
2427
2452
  path: {
2428
- ruleId: data.ruleId,
2429
2453
  region: data.region
2430
2454
  },
2431
2455
  body: data.requestBody,
2432
- mediaType: 'application/json',
2433
- errors: {
2434
- 401: 'Unauthorized',
2435
- 403: 'Forbidden - not owner of rule',
2436
- 404: 'Rule not found'
2437
- }
2456
+ mediaType: 'application/json'
2438
2457
  });
2439
2458
  }
2440
2459
  }
2441
2460
 
2442
- export class UsersService {
2461
+ export class RecurringRulesService {
2443
2462
  /**
2444
- * Delete own user account
2463
+ * Create a new recurring rule
2464
+ * Creates a new recurring transaction rule for the authenticated user
2445
2465
  * @param data The data for the request.
2466
+ * @param data.region Region code for tenant context
2446
2467
  * @param data.requestBody
2447
- * @returns void User deleted successfully
2468
+ * @returns RecurringRuleResponseDto Rule created successfully
2448
2469
  * @throws ApiError
2449
2470
  */
2450
- public static userControllerDeleteOwnUser(
2451
- data: UserControllerDeleteOwnUserData
2452
- ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
2471
+ public static recurringRuleControllerCreate(
2472
+ data: RecurringRuleControllerCreateData
2473
+ ): CancelablePromise<RecurringRuleControllerCreateResponse> {
2453
2474
  return __request(OpenAPI, {
2454
- method: 'DELETE',
2455
- url: '/api/v1/users',
2475
+ method: 'POST',
2476
+ url: '/api/v1/{region}/bean/recurring-rules',
2477
+ path: {
2478
+ region: data.region
2479
+ },
2456
2480
  body: data.requestBody,
2457
2481
  mediaType: 'application/json',
2458
2482
  errors: {
2459
- 403: 'Invalid access token'
2483
+ 400: 'Invalid input data (e.g., autoCreate without accounts)',
2484
+ 409: 'Rule with same name already exists'
2460
2485
  }
2461
2486
  });
2462
2487
  }
2463
2488
 
2464
2489
  /**
2465
- * Get current authenticated user
2490
+ * List recurring rules
2491
+ * Returns all recurring rules for the authenticated user with optional filtering
2466
2492
  * @param data The data for the request.
2467
- * @param data.acceptLanguage
2468
- * @returns unknown User retrieved successfully
2493
+ * @param data.region Region code for tenant context
2494
+ * @param data.isActive Filter by active status
2495
+ * @param data.frequency Filter by frequency (WEEKLY, MONTHLY, etc.)
2496
+ * @param data.hasAutoCreate Filter by autoCreate enabled
2497
+ * @returns RecurringRuleResponseDto Rules retrieved successfully
2469
2498
  * @throws ApiError
2470
2499
  */
2471
- public static userControllerGetUser(
2472
- data: UserControllerGetUserData
2473
- ): CancelablePromise<UserControllerGetUserResponse> {
2500
+ public static recurringRuleControllerFindAll(
2501
+ data: RecurringRuleControllerFindAllData
2502
+ ): CancelablePromise<RecurringRuleControllerFindAllResponse> {
2474
2503
  return __request(OpenAPI, {
2475
2504
  method: 'GET',
2476
- url: '/api/v1/users',
2477
- headers: {
2478
- 'accept-language': data.acceptLanguage
2505
+ url: '/api/v1/{region}/bean/recurring-rules',
2506
+ path: {
2507
+ region: data.region
2508
+ },
2509
+ query: {
2510
+ isActive: data.isActive,
2511
+ frequency: data.frequency,
2512
+ hasAutoCreate: data.hasAutoCreate
2479
2513
  }
2480
2514
  });
2481
2515
  }
2482
2516
 
2483
2517
  /**
2484
- * Sign up new user
2485
- * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
2518
+ * Create recurring rule from transaction
2519
+ * Auto-creates a recurring rule using transaction data. User only confirms frequency.
2486
2520
  * @param data The data for the request.
2521
+ * @param data.transactionId Source transaction ID
2522
+ * @param data.region Region code for tenant context
2487
2523
  * @param data.requestBody
2488
- * @returns unknown User created successfully
2524
+ * @returns RecurringRuleResponseDto Rule created successfully
2489
2525
  * @throws ApiError
2490
2526
  */
2491
- public static userControllerSignupUser(
2492
- data: UserControllerSignupUserData
2493
- ): CancelablePromise<UserControllerSignupUserResponse> {
2527
+ public static recurringRuleControllerCreateFromTransaction(
2528
+ data: RecurringRuleControllerCreateFromTransactionData
2529
+ ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
2494
2530
  return __request(OpenAPI, {
2495
2531
  method: 'POST',
2496
- url: '/api/v1/users',
2532
+ url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
2533
+ path: {
2534
+ transactionId: data.transactionId,
2535
+ region: data.region
2536
+ },
2497
2537
  body: data.requestBody,
2498
2538
  mediaType: 'application/json',
2499
2539
  errors: {
2500
- 400: 'Invalid Turnstile token (when Turnstile is enabled)',
2501
- 403: 'User signup is disabled'
2540
+ 404: 'Transaction not found',
2541
+ 409: 'Rule with same name already exists or transaction already linked'
2502
2542
  }
2503
2543
  });
2504
2544
  }
2505
2545
 
2506
2546
  /**
2507
- * Delete user by ID (admin only)
2547
+ * Get recurring rule by ID
2548
+ * Returns a specific recurring rule with its details
2508
2549
  * @param data The data for the request.
2509
- * @param data.id User ID to delete
2510
- * @returns void User deleted successfully
2550
+ * @param data.id Rule ID
2551
+ * @param data.region Region code for tenant context
2552
+ * @returns RecurringRuleResponseDto Rule retrieved successfully
2511
2553
  * @throws ApiError
2512
2554
  */
2513
- public static userControllerDeleteUser(
2514
- data: UserControllerDeleteUserData
2515
- ): CancelablePromise<UserControllerDeleteUserResponse> {
2555
+ public static recurringRuleControllerFindOne(
2556
+ data: RecurringRuleControllerFindOneData
2557
+ ): CancelablePromise<RecurringRuleControllerFindOneResponse> {
2516
2558
  return __request(OpenAPI, {
2517
- method: 'DELETE',
2518
- url: '/api/v1/users/{id}',
2559
+ method: 'GET',
2560
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2519
2561
  path: {
2520
- id: data.id
2562
+ id: data.id,
2563
+ region: data.region
2521
2564
  },
2522
2565
  errors: {
2523
- 403: 'Cannot delete own account or insufficient permissions'
2566
+ 404: 'Rule not found'
2524
2567
  }
2525
2568
  });
2526
2569
  }
2527
2570
 
2528
2571
  /**
2529
- * Get user info by user ID
2572
+ * Update recurring rule
2573
+ * Updates an existing recurring rule
2530
2574
  * @param data The data for the request.
2531
- * @param data.id User ID
2532
- * @returns unknown User info retrieved successfully
2575
+ * @param data.id Rule ID
2576
+ * @param data.region Region code for tenant context
2577
+ * @param data.requestBody
2578
+ * @returns RecurringRuleResponseDto Rule updated successfully
2533
2579
  * @throws ApiError
2534
2580
  */
2535
- public static userControllerGetUserInfo(
2536
- data: UserControllerGetUserInfoData
2537
- ): CancelablePromise<UserControllerGetUserInfoResponse> {
2581
+ public static recurringRuleControllerUpdate(
2582
+ data: RecurringRuleControllerUpdateData
2583
+ ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
2538
2584
  return __request(OpenAPI, {
2539
- method: 'GET',
2540
- url: '/api/v1/users/{id}/info',
2585
+ method: 'PATCH',
2586
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2541
2587
  path: {
2542
- id: data.id
2588
+ id: data.id,
2589
+ region: data.region
2543
2590
  },
2591
+ body: data.requestBody,
2592
+ mediaType: 'application/json',
2544
2593
  errors: {
2545
- 403: 'Cannot access other user info without admin permission'
2594
+ 400: 'Invalid input data',
2595
+ 404: 'Rule not found'
2546
2596
  }
2547
2597
  });
2548
2598
  }
2549
2599
 
2550
2600
  /**
2551
- * Update user settings
2601
+ * Delete recurring rule
2602
+ * Soft deletes a recurring rule (sets isActive to false)
2552
2603
  * @param data The data for the request.
2553
- * @param data.requestBody
2554
- * @returns unknown Settings updated successfully
2604
+ * @param data.id Rule ID
2605
+ * @param data.region Region code for tenant context
2606
+ * @returns void Rule deleted successfully
2555
2607
  * @throws ApiError
2556
2608
  */
2557
- public static userControllerUpdateUserSetting(
2558
- data: UserControllerUpdateUserSettingData
2559
- ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
2609
+ public static recurringRuleControllerDelete(
2610
+ data: RecurringRuleControllerDeleteData
2611
+ ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
2560
2612
  return __request(OpenAPI, {
2561
- method: 'PUT',
2562
- url: '/api/v1/users/setting',
2563
- body: data.requestBody,
2564
- mediaType: 'application/json',
2613
+ method: 'DELETE',
2614
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2615
+ path: {
2616
+ id: data.id,
2617
+ region: data.region
2618
+ },
2565
2619
  errors: {
2566
- 403: 'Insufficient permissions'
2620
+ 404: 'Rule not found'
2567
2621
  }
2568
2622
  });
2569
2623
  }
2570
2624
 
2571
2625
  /**
2572
- * Get all user settings paginated (admin only)
2626
+ * Get rule with statistics
2627
+ * Returns a rule with pending/overdue counts and next expected date
2573
2628
  * @param data The data for the request.
2574
- * @param data.pageNo Page number
2575
- * @param data.pageSize Page size
2576
- * @returns unknown Settings list retrieved successfully
2629
+ * @param data.id Rule ID
2630
+ * @param data.region Region code for tenant context
2631
+ * @returns RecurringRuleWithStatsResponseDto Rule with stats retrieved successfully
2577
2632
  * @throws ApiError
2578
2633
  */
2579
- public static userControllerGetAllUserSettingsByPage(
2580
- data: UserControllerGetAllUserSettingsByPageData
2581
- ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
2634
+ public static recurringRuleControllerGetWithStats(
2635
+ data: RecurringRuleControllerGetWithStatsData
2636
+ ): CancelablePromise<RecurringRuleControllerGetWithStatsResponse> {
2582
2637
  return __request(OpenAPI, {
2583
2638
  method: 'GET',
2584
- url: '/api/v1/users/settings-by-page',
2639
+ url: '/api/v1/{region}/bean/recurring-rules/{id}/stats',
2640
+ path: {
2641
+ id: data.id,
2642
+ region: data.region
2643
+ },
2644
+ errors: {
2645
+ 404: 'Rule not found'
2646
+ }
2647
+ });
2648
+ }
2649
+ }
2650
+
2651
+ export class ExpectedTransactionsService {
2652
+ /**
2653
+ * List expected transactions
2654
+ * Returns expected transactions for the authenticated user with optional filtering
2655
+ * @param data The data for the request.
2656
+ * @param data.region Region code for tenant context
2657
+ * @param data.ruleId Filter by recurring rule ID
2658
+ * @param data.status Filter by status (PENDING, COMPLETED, SKIPPED)
2659
+ * @param data.fromDate Filter by date range start (YYYY-MM-DD)
2660
+ * @param data.toDate Filter by date range end (YYYY-MM-DD)
2661
+ * @returns ExpectedTransactionListResponseDto Expected transactions retrieved successfully
2662
+ * @throws ApiError
2663
+ */
2664
+ public static expectedTransactionControllerFindAll(
2665
+ data: ExpectedTransactionControllerFindAllData
2666
+ ): CancelablePromise<ExpectedTransactionControllerFindAllResponse> {
2667
+ return __request(OpenAPI, {
2668
+ method: 'GET',
2669
+ url: '/api/v1/{region}/bean/expected-transactions',
2670
+ path: {
2671
+ region: data.region
2672
+ },
2585
2673
  query: {
2586
- pageNo: data.pageNo,
2587
- pageSize: data.pageSize
2674
+ ruleId: data.ruleId,
2675
+ status: data.status,
2676
+ fromDate: data.fromDate,
2677
+ toDate: data.toDate
2588
2678
  }
2589
2679
  });
2590
2680
  }
2591
2681
 
2592
2682
  /**
2593
- * Get asset and liability summary for current user
2594
- * @returns unknown Summary retrieved successfully
2683
+ * List overdue expected transactions
2684
+ * Returns all overdue expected transactions (PENDING past tolerance)
2685
+ * @param data The data for the request.
2686
+ * @param data.region Region code for tenant context
2687
+ * @returns ExpectedTransactionListResponseDto Overdue transactions retrieved successfully
2595
2688
  * @throws ApiError
2596
2689
  */
2597
- public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
2690
+ public static expectedTransactionControllerFindOverdue(
2691
+ data: ExpectedTransactionControllerFindOverdueData
2692
+ ): CancelablePromise<ExpectedTransactionControllerFindOverdueResponse> {
2598
2693
  return __request(OpenAPI, {
2599
2694
  method: 'GET',
2600
- url: '/api/v1/users/asset-liability-summary'
2695
+ url: '/api/v1/{region}/bean/expected-transactions/overdue',
2696
+ path: {
2697
+ region: data.region
2698
+ }
2601
2699
  });
2602
2700
  }
2603
- }
2604
2701
 
2605
- export class PropertiesService {
2606
2702
  /**
2607
- * Get all system properties
2608
- * @returns unknown Properties retrieved successfully
2703
+ * Get expected transaction by ID
2704
+ * Returns a specific expected transaction with rule details
2705
+ * @param data The data for the request.
2706
+ * @param data.id Expected transaction ID
2707
+ * @param data.region Region code for tenant context
2708
+ * @returns ExpectedTransactionResponseDto Expected transaction retrieved successfully
2609
2709
  * @throws ApiError
2610
2710
  */
2611
- public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
2711
+ public static expectedTransactionControllerFindOne(
2712
+ data: ExpectedTransactionControllerFindOneData
2713
+ ): CancelablePromise<ExpectedTransactionControllerFindOneResponse> {
2612
2714
  return __request(OpenAPI, {
2613
2715
  method: 'GET',
2614
- url: '/api/v1/admin/properties',
2716
+ url: '/api/v1/{region}/bean/expected-transactions/{id}',
2717
+ path: {
2718
+ id: data.id,
2719
+ region: data.region
2720
+ },
2615
2721
  errors: {
2616
- 401: 'Unauthorized',
2617
- 403: 'Forbidden - insufficient permissions'
2722
+ 404: 'Expected transaction not found'
2618
2723
  }
2619
2724
  });
2620
2725
  }
2621
2726
 
2622
2727
  /**
2623
- * Get property by key
2728
+ * Skip expected transaction
2729
+ * Marks an expected transaction as skipped (PENDING -> SKIPPED)
2624
2730
  * @param data The data for the request.
2625
- * @param data.key Property key
2626
- * @returns unknown Property retrieved successfully
2731
+ * @param data.id Expected transaction ID
2732
+ * @param data.region Region code for tenant context
2733
+ * @returns ExpectedTransactionResponseDto Expected transaction skipped successfully
2627
2734
  * @throws ApiError
2628
2735
  */
2629
- public static propertyControllerGetByKey(
2630
- data: PropertyControllerGetByKeyData
2631
- ): CancelablePromise<PropertyControllerGetByKeyResponse> {
2736
+ public static expectedTransactionControllerSkip(
2737
+ data: ExpectedTransactionControllerSkipData
2738
+ ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
2632
2739
  return __request(OpenAPI, {
2633
- method: 'GET',
2634
- url: '/api/v1/admin/properties/{key}',
2740
+ method: 'POST',
2741
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2635
2742
  path: {
2636
- key: data.key
2743
+ id: data.id,
2744
+ region: data.region
2637
2745
  },
2638
2746
  errors: {
2639
- 401: 'Unauthorized',
2640
- 403: 'Forbidden - insufficient permissions',
2641
- 404: 'Property not found'
2747
+ 400: 'Cannot skip - not in PENDING status',
2748
+ 404: 'Expected transaction not found'
2642
2749
  }
2643
2750
  });
2644
2751
  }
2645
2752
 
2646
2753
  /**
2647
- * Update a system property
2754
+ * Undo skip
2755
+ * Reverses a skip operation (SKIPPED -> PENDING)
2648
2756
  * @param data The data for the request.
2649
- * @param data.key Property key
2757
+ * @param data.id Expected transaction ID
2758
+ * @param data.region Region code for tenant context
2759
+ * @returns void Skip undone successfully
2760
+ * @throws ApiError
2761
+ */
2762
+ public static expectedTransactionControllerUndoSkip(
2763
+ data: ExpectedTransactionControllerUndoSkipData
2764
+ ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
2765
+ return __request(OpenAPI, {
2766
+ method: 'DELETE',
2767
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2768
+ path: {
2769
+ id: data.id,
2770
+ region: data.region
2771
+ },
2772
+ errors: {
2773
+ 400: 'Cannot undo - not in SKIPPED status',
2774
+ 404: 'Expected transaction not found'
2775
+ }
2776
+ });
2777
+ }
2778
+
2779
+ /**
2780
+ * Confirm transaction match
2781
+ * Manually matches an expected transaction with an actual transaction
2782
+ * @param data The data for the request.
2783
+ * @param data.id Expected transaction ID
2784
+ * @param data.region Region code for tenant context
2650
2785
  * @param data.requestBody
2651
- * @returns unknown Property updated successfully
2786
+ * @returns unknown Match confirmed successfully
2652
2787
  * @throws ApiError
2653
2788
  */
2654
- public static propertyControllerUpdate(
2655
- data: PropertyControllerUpdateData
2656
- ): CancelablePromise<PropertyControllerUpdateResponse> {
2789
+ public static expectedTransactionControllerConfirmMatch(
2790
+ data: ExpectedTransactionControllerConfirmMatchData
2791
+ ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
2657
2792
  return __request(OpenAPI, {
2658
- method: 'PUT',
2659
- url: '/api/v1/admin/properties/{key}',
2793
+ method: 'POST',
2794
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2660
2795
  path: {
2661
- key: data.key
2796
+ id: data.id,
2797
+ region: data.region
2662
2798
  },
2663
2799
  body: data.requestBody,
2664
2800
  mediaType: 'application/json',
2665
2801
  errors: {
2666
- 401: 'Unauthorized',
2667
- 403: 'Forbidden - insufficient permissions'
2802
+ 400: 'Cannot match - not in PENDING status',
2803
+ 404: 'Expected or actual transaction not found',
2804
+ 409: 'Actual transaction already matched to another rule'
2805
+ }
2806
+ });
2807
+ }
2808
+
2809
+ /**
2810
+ * Unmatch transaction
2811
+ * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
2812
+ * @param data The data for the request.
2813
+ * @param data.id Expected transaction ID
2814
+ * @param data.region Region code for tenant context
2815
+ * @returns void Match removed successfully
2816
+ * @throws ApiError
2817
+ */
2818
+ public static expectedTransactionControllerUnmatch(
2819
+ data: ExpectedTransactionControllerUnmatchData
2820
+ ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
2821
+ return __request(OpenAPI, {
2822
+ method: 'DELETE',
2823
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2824
+ path: {
2825
+ id: data.id,
2826
+ region: data.region
2827
+ },
2828
+ errors: {
2829
+ 400: 'Cannot unmatch - not in COMPLETED status',
2830
+ 404: 'Expected transaction not found'
2668
2831
  }
2669
2832
  });
2670
2833
  }
2671
2834
 
2672
2835
  /**
2673
- * Delete a system property
2836
+ * Enter Now
2837
+ * Creates an actual transaction for an expected transaction (YNAB-style Enter Now)
2838
+ * @param data The data for the request.
2839
+ * @param data.id Expected transaction ID
2840
+ * @param data.region Region code for tenant context
2841
+ * @param data.requestBody
2842
+ * @returns unknown Transaction created successfully
2843
+ * @throws ApiError
2844
+ */
2845
+ public static expectedTransactionControllerEnterNow(
2846
+ data: ExpectedTransactionControllerEnterNowData
2847
+ ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
2848
+ return __request(OpenAPI, {
2849
+ method: 'POST',
2850
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
2851
+ path: {
2852
+ id: data.id,
2853
+ region: data.region
2854
+ },
2855
+ body: data.requestBody,
2856
+ mediaType: 'application/json',
2857
+ errors: {
2858
+ 400: 'Cannot enter - not in PENDING status or missing accounts',
2859
+ 404: 'Expected transaction or accounts not found'
2860
+ }
2861
+ });
2862
+ }
2863
+ }
2864
+
2865
+ export class RecurringForecastService {
2866
+ /**
2867
+ * Get cash flow forecast
2868
+ * Returns predicted outflows for the next N months based on active recurring rules
2869
+ * @param data The data for the request.
2870
+ * @param data.region Region code for tenant context
2871
+ * @param data.months Number of months to forecast (1-12, default 3)
2872
+ * @returns ForecastResponseDto Forecast retrieved successfully
2873
+ * @throws ApiError
2874
+ */
2875
+ public static forecastControllerGetForecast(
2876
+ data: ForecastControllerGetForecastData
2877
+ ): CancelablePromise<ForecastControllerGetForecastResponse> {
2878
+ return __request(OpenAPI, {
2879
+ method: 'GET',
2880
+ url: '/api/v1/{region}/bean/recurring/forecast',
2881
+ path: {
2882
+ region: data.region
2883
+ },
2884
+ query: {
2885
+ months: data.months
2886
+ }
2887
+ });
2888
+ }
2889
+ }
2890
+
2891
+ export class BeanCategoryCatalogService {
2892
+ /**
2893
+ * List category catalog for a region
2894
+ * Returns the region-scoped category slugs (expense/income/investment/banking/transfer/payment) for the NLP result picker, each with the categoryAccount paths the region-enabled system rules map it to (#816). CN-exclusive payment instruments (huabei/baitiao) appear only under /cn.
2674
2895
  * @param data The data for the request.
2675
- * @param data.key Property key
2676
- * @returns void Property deleted successfully
2896
+ * @param data.region Region code for tenant context
2897
+ * @param data.scenario Filter by scenario
2898
+ * @param data.routeBearing Filter by routeBearing (entity-router route() consumes it)
2899
+ * @returns CategoryCatalogListResponseDto Category catalog retrieved successfully
2677
2900
  * @throws ApiError
2678
2901
  */
2679
- public static propertyControllerDelete(
2680
- data: PropertyControllerDeleteData
2681
- ): CancelablePromise<PropertyControllerDeleteResponse> {
2902
+ public static categoryCatalogControllerList(
2903
+ data: CategoryCatalogControllerListData
2904
+ ): CancelablePromise<CategoryCatalogControllerListResponse> {
2682
2905
  return __request(OpenAPI, {
2683
- method: 'DELETE',
2684
- url: '/api/v1/admin/properties/{key}',
2906
+ method: 'GET',
2907
+ url: '/api/v1/{region}/bean/categories',
2685
2908
  path: {
2686
- key: data.key
2909
+ region: data.region
2687
2910
  },
2688
- errors: {
2689
- 401: 'Unauthorized',
2690
- 403: 'Forbidden - insufficient permissions',
2691
- 404: 'Property not found'
2911
+ query: {
2912
+ scenario: data.scenario,
2913
+ routeBearing: data.routeBearing
2692
2914
  }
2693
2915
  });
2694
2916
  }
@@ -2873,7 +3095,7 @@ export class OnboardingService {
2873
3095
  /**
2874
3096
  * Bootstrap core accounts + register asset accounts with opening balances (ADR-0113)
2875
3097
  * @param data The data for the request.
2876
- * @param data.region Region code for tenant context
3098
+ * @param data.region Region code for tenant context. Not-yet-open codes are accepted: the universal catalog backs onboarding regardless of region (#759)
2877
3099
  * @param data.requestBody
2878
3100
  * @returns unknown Onboarding bootstrap result.
2879
3101
  * @throws ApiError
@@ -3006,13 +3228,20 @@ export class BeanExportService {
3006
3228
  /**
3007
3229
  * Export Beancount ledger as ZIP
3008
3230
  * Export all user Beancount data as a ZIP file containing ledger.beancount and yearly files in community format.
3009
- * @returns unknown
3231
+ * @param data The data for the request.
3232
+ * @param data.region Region code for tenant context
3233
+ * @returns binary ZIP archive (application/zip) streamed as an attachment
3010
3234
  * @throws ApiError
3011
3235
  */
3012
- public static exportControllerExportBeancount(): CancelablePromise<ExportControllerExportBeancountResponse> {
3236
+ public static exportControllerExportBeancount(
3237
+ data: ExportControllerExportBeancountData
3238
+ ): CancelablePromise<ExportControllerExportBeancountResponse> {
3013
3239
  return __request(OpenAPI, {
3014
3240
  method: 'GET',
3015
- url: '/api/v1/{region}/bean/export/beancount'
3241
+ url: '/api/v1/{region}/bean/export/beancount',
3242
+ path: {
3243
+ region: data.region
3244
+ }
3016
3245
  });
3017
3246
  }
3018
3247
  }
@@ -3569,13 +3798,20 @@ export class BeanPlatformsService {
3569
3798
 
3570
3799
  /**
3571
3800
  * Get platform list for current user
3572
- * @returns unknown List of platforms with user binding status
3801
+ * @param data The data for the request.
3802
+ * @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").
3803
+ * @returns PlatformListItemDto List of platforms with user binding status
3573
3804
  * @throws ApiError
3574
3805
  */
3575
- public static platformControllerGetPlatformList(): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3806
+ public static platformControllerGetPlatformList(
3807
+ data: PlatformControllerGetPlatformListData = {}
3808
+ ): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3576
3809
  return __request(OpenAPI, {
3577
3810
  method: 'GET',
3578
- url: '/api/v1/bean/platforms/list'
3811
+ url: '/api/v1/bean/platforms/list',
3812
+ query: {
3813
+ region: data.region
3814
+ }
3579
3815
  });
3580
3816
  }
3581
3817
 
@@ -3583,8 +3819,8 @@ export class BeanPlatformsService {
3583
3819
  * Match platforms by name or alias
3584
3820
  * @param data The data for the request.
3585
3821
  * @param data.q Search query — Chinese name, English name, or abbreviation
3586
- * @param data.region Region code for category override lookup
3587
- * @returns unknown List of matching platforms with suggested segment names
3822
+ * @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").
3823
+ * @returns PlatformMatchResponseDto Matching platforms with overall match type and truncation flag
3588
3824
  * @throws ApiError
3589
3825
  */
3590
3826
  public static platformControllerMatchPlatforms(
@@ -3600,6 +3836,31 @@ export class BeanPlatformsService {
3600
3836
  });
3601
3837
  }
3602
3838
 
3839
+ /**
3840
+ * Get the region and candidate account standards for a platform
3841
+ * @param data The data for the request.
3842
+ * @param data.id Platform ID (from a match result)
3843
+ * @param data.region Region code (ISO 3166-1 alpha-2, case-insensitive). Required for global platforms (countryCode null) — resolved as their template region; ignored when the platform has its own countryCode.
3844
+ * @param data.type Filter templates by account type (path first segment)
3845
+ * @returns PlatformStandardsResponseDto Resolved region plus the merged account-standard catalog of that region (groupable by productCategory client-side)
3846
+ * @throws ApiError
3847
+ */
3848
+ public static platformControllerGetPlatformStandards(
3849
+ data: PlatformControllerGetPlatformStandardsData
3850
+ ): CancelablePromise<PlatformControllerGetPlatformStandardsResponse> {
3851
+ return __request(OpenAPI, {
3852
+ method: 'GET',
3853
+ url: '/api/v1/bean/platforms/{id}/standards',
3854
+ path: {
3855
+ id: data.id
3856
+ },
3857
+ query: {
3858
+ region: data.region,
3859
+ type: data.type
3860
+ }
3861
+ });
3862
+ }
3863
+
3603
3864
  /**
3604
3865
  * Update a platform
3605
3866
  * @param data The data for the request.
@@ -3766,249 +4027,178 @@ export class DashboardService {
3766
4027
  }
3767
4028
  });
3768
4029
  }
3769
- }
3770
4030
 
3771
- export class InvestmentService {
3772
4031
  /**
3773
- * Get per-holding unrealized + realized P&L
3774
- * Average-cost unrealized P&L per account × commodity, plus cumulative realized P&L on sold lots (method = FIFO | average, default average).
4032
+ * Get the composite P8 advisor context
4033
+ * Assembles the P8 data context in one call: net worth (verbatim GET /dashboard/net-worth shape, user base currency semantics per ADR-0070), trailing-12m flow totals over the 12 calendar months including the as-of month, and top-3 expense categories by account-path leaf key — both flow blocks priced in CNY per the P8 contract. The P8 snake_case field spellings (as_of, net_worth, trailing_12m) are mapped by the consumer; the wire keeps the family camelCase
3775
4034
  * @param data The data for the request.
3776
4035
  * @param data.region Region code for tenant context
3777
- * @param data.asOf As-of date (ISO 8601), defaults to today
3778
- * @param data.accountId Scope to a single account
3779
- * @param data.method Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
3780
- * @returns HoldingPnlResponseDto Holding P&L retrieved successfully
4036
+ * @param data.date As-of date for the snapshot and the trailing-12m window anchor (ISO 8601 format)
4037
+ * @returns AdvisorContextResponseDto Advisor context retrieved successfully
3781
4038
  * @throws ApiError
3782
4039
  */
3783
- public static holdingPnlControllerGetHoldingPnl(
3784
- data: HoldingPnlControllerGetHoldingPnlData
3785
- ): CancelablePromise<HoldingPnlControllerGetHoldingPnlResponse> {
4040
+ public static dashboardControllerGetAdvisorContext(
4041
+ data: DashboardControllerGetAdvisorContextData
4042
+ ): CancelablePromise<DashboardControllerGetAdvisorContextResponse> {
3786
4043
  return __request(OpenAPI, {
3787
4044
  method: 'GET',
3788
- url: '/api/v1/{region}/investment/holdings/pnl',
4045
+ url: '/api/v1/{region}/dashboard/advisor-context',
3789
4046
  path: {
3790
4047
  region: data.region
3791
4048
  },
3792
4049
  query: {
3793
- asOf: data.asOf,
3794
- accountId: data.accountId,
3795
- method: data.method
4050
+ date: data.date
3796
4051
  },
3797
4052
  errors: {
3798
- 400: 'Invalid asOf format/value/future date, invalid accountId format, or unsupported method',
3799
- 401: 'User not authenticated'
4053
+ 400: 'Invalid date format',
4054
+ 401: 'User not authenticated, or the token is not advisor-scoped (exchange via POST /auth/sessions/advisor, #1512)'
3800
4055
  }
3801
4056
  });
3802
4057
  }
3803
4058
  }
3804
4059
 
3805
- export class ReportingService {
4060
+ export class InvestmentService {
3806
4061
  /**
3807
- * Get portfolio value trends
3808
- *
3809
- * Returns time series data of portfolio net worth.
3810
- *
3811
- * **Multi-currency Support:**
3812
- * - `series[].byCurrency` - Currency breakdown for each data point
3813
- * - `byCurrency` - Separate time series grouped by currency
3814
- * - `warnings` - Exchange rate warnings if conversion failed
3815
- *
3816
- * **Parameters:**
3817
- * - `period`: Time period (1m, 3m, 6m, 1y)
3818
- * - `granularity`: Data granularity (day, week, month)
3819
- *
4062
+ * Get per-holding unrealized + realized P&L
4063
+ * Average-cost unrealized P&L per account × commodity, plus cumulative realized P&L on sold lots (method = FIFO | average, default average).
3820
4064
  * @param data The data for the request.
3821
4065
  * @param data.region Region code for tenant context
3822
- * @param data.period Time period
3823
- * @param data.granularity Data granularity
3824
- * @returns PortfolioTrendsResponseDto Trends retrieved successfully
4066
+ * @param data.asOf As-of date (ISO 8601), defaults to today
4067
+ * @param data.accountId Scope to a single account
4068
+ * @param data.method Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
4069
+ * @returns HoldingPnlResponseDto Holding P&L retrieved successfully
3825
4070
  * @throws ApiError
3826
4071
  */
3827
- public static reportingControllerGetPortfolioTrends(
3828
- data: ReportingControllerGetPortfolioTrendsData
3829
- ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
4072
+ public static holdingPnlControllerGetHoldingPnl(
4073
+ data: HoldingPnlControllerGetHoldingPnlData
4074
+ ): CancelablePromise<HoldingPnlControllerGetHoldingPnlResponse> {
3830
4075
  return __request(OpenAPI, {
3831
4076
  method: 'GET',
3832
- url: '/api/v1/{region}/reporting/portfolio/trends',
4077
+ url: '/api/v1/{region}/investment/holdings/pnl',
3833
4078
  path: {
3834
4079
  region: data.region
3835
4080
  },
3836
4081
  query: {
3837
- period: data.period,
3838
- granularity: data.granularity
4082
+ asOf: data.asOf,
4083
+ accountId: data.accountId,
4084
+ method: data.method
3839
4085
  },
3840
4086
  errors: {
4087
+ 400: 'Invalid asOf format/value/future date, invalid accountId format, or unsupported method',
3841
4088
  401: 'User not authenticated'
3842
4089
  }
3843
4090
  });
3844
4091
  }
4092
+ }
3845
4093
 
4094
+ export class ApiKeysService {
3846
4095
  /**
3847
- * Get cash-flow trends
3848
- *
3849
- * Monthly income / expense / netSavings over a fixed N-month window
3850
- * (current month + N−1 prior). Missing months are zero-filled (flow metric).
3851
- *
3852
- * **Parameters:**
3853
- * - `period`: 1m | 3m | 6m | 1y (default 6m)
3854
- * - `granularity`: accepted for API symmetry; v1 returns month buckets
3855
- *
3856
- * @param data The data for the request.
3857
- * @param data.region Region code for tenant context
3858
- * @param data.period Time period
3859
- * @param data.granularity Data granularity (accepted for API symmetry; v1 returns month buckets)
3860
- * @returns CashFlowTrendsResponseDto Cash-flow trends retrieved successfully
4096
+ * Create API key
4097
+ * Generates a new API key for the authenticated user
4098
+ * @returns unknown API key created successfully
3861
4099
  * @throws ApiError
3862
4100
  */
3863
- public static reportingControllerGetCashFlowTrends(
3864
- data: ReportingControllerGetCashFlowTrendsData
3865
- ): CancelablePromise<ReportingControllerGetCashFlowTrendsResponse> {
4101
+ public static apiKeysControllerCreateApiKey(): CancelablePromise<ApiKeysControllerCreateApiKeyResponse> {
3866
4102
  return __request(OpenAPI, {
3867
- method: 'GET',
3868
- url: '/api/v1/{region}/reporting/cash-flow/trends',
3869
- path: {
3870
- region: data.region
3871
- },
3872
- query: {
3873
- period: data.period,
3874
- granularity: data.granularity
3875
- },
4103
+ method: 'POST',
4104
+ url: '/api/v1/auth/api-keys',
3876
4105
  errors: {
3877
- 401: 'User not authenticated'
4106
+ 403: 'Insufficient permissions to create API key'
3878
4107
  }
3879
4108
  });
3880
4109
  }
4110
+ }
3881
4111
 
4112
+ export class AuthService {
3882
4113
  /**
3883
- * Generate portfolio snapshot
3884
- *
3885
- * Manually generate a portfolio snapshot for a specific date.
3886
- *
3887
- * **Multi-currency Support:**
3888
- * - Fetches balances grouped by currency
3889
- * - Uses user's baseCurrency setting for conversion
3890
- * - Stores exchange rates and warnings
3891
- *
3892
- * **Use Cases:**
3893
- * - Testing snapshot generation
3894
- * - Force regeneration after data correction
3895
- * - Initial setup for new users
3896
- *
4114
+ * Anonymous login with access token
3897
4115
  * @param data The data for the request.
3898
- * @param data.region Region code for tenant context
3899
- * @param data.requestBody Optional date (defaults to today)
3900
- * @returns GenerateSnapshotResponse Snapshot generated successfully
4116
+ * @param data.requestBody
4117
+ * @returns AnonymousLoginResponseDto Login successful
3901
4118
  * @throws ApiError
3902
4119
  */
3903
- public static reportingControllerGenerateSnapshot(
3904
- data: ReportingControllerGenerateSnapshotData
3905
- ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
4120
+ public static authControllerAccessTokenLogin(
4121
+ data: AuthControllerAccessTokenLoginData
4122
+ ): CancelablePromise<AuthControllerAccessTokenLoginResponse> {
3906
4123
  return __request(OpenAPI, {
3907
4124
  method: 'POST',
3908
- url: '/api/v1/{region}/reporting/snapshots/generate',
3909
- path: {
3910
- region: data.region
3911
- },
4125
+ url: '/api/v1/auth/sessions/anonymous',
3912
4126
  body: data.requestBody,
3913
4127
  mediaType: 'application/json',
3914
4128
  errors: {
3915
- 400: 'Invalid date format',
3916
- 401: 'User not authenticated'
4129
+ 401: 'Invalid access token'
3917
4130
  }
3918
4131
  });
3919
4132
  }
3920
4133
 
3921
4134
  /**
3922
- * Backfill portfolio snapshots
3923
- *
3924
- * Generate snapshots for a date range (historical data backfill).
3925
- *
3926
- * **Multi-currency Support:**
3927
- * - Each snapshot includes multi-currency data
3928
- * - Uses exchange rates available at generation time
3929
- * - Warnings stored for missing exchange rates
3930
- *
3931
- * **Best Practices:**
3932
- * - Use for initial setup after account configuration
3933
- * - Run during low-traffic periods for large date ranges
3934
- * - Existing snapshots are skipped (not regenerated)
3935
- *
4135
+ * Exchange an access token for an advisor-scoped, short-TTL JWT (#1512)
3936
4136
  * @param data The data for the request.
3937
- * @param data.region Region code for tenant context
3938
4137
  * @param data.requestBody
3939
- * @returns BackfillSnapshotsResponse Backfill completed successfully
4138
+ * @returns AdvisorLoginResponseDto Advisor-scope login successful — the token is valid only on advisor tool-face endpoints (e.g. GET /:region/dashboard/advisor-context)
3940
4139
  * @throws ApiError
3941
4140
  */
3942
- public static reportingControllerBackfillSnapshots(
3943
- data: ReportingControllerBackfillSnapshotsData
3944
- ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
4141
+ public static authControllerAdvisorTokenLogin(
4142
+ data: AuthControllerAdvisorTokenLoginData
4143
+ ): CancelablePromise<AuthControllerAdvisorTokenLoginResponse> {
3945
4144
  return __request(OpenAPI, {
3946
4145
  method: 'POST',
3947
- url: '/api/v1/{region}/reporting/snapshots/backfill',
3948
- path: {
3949
- region: data.region
3950
- },
4146
+ url: '/api/v1/auth/sessions/advisor',
3951
4147
  body: data.requestBody,
3952
4148
  mediaType: 'application/json',
3953
4149
  errors: {
3954
- 400: 'Invalid date format or range',
3955
- 401: 'User not authenticated',
3956
- 409: 'Backfill already in progress for this user'
3957
- }
3958
- });
3959
- }
3960
- }
3961
-
3962
- export class ApiKeysService {
3963
- /**
3964
- * Create API key
3965
- * Generates a new API key for the authenticated user
3966
- * @returns unknown API key created successfully
3967
- * @throws ApiError
3968
- */
3969
- public static apiKeysControllerCreateApiKey(): CancelablePromise<ApiKeysControllerCreateApiKeyResponse> {
3970
- return __request(OpenAPI, {
3971
- method: 'POST',
3972
- url: '/api/v1/auth/api-keys',
3973
- errors: {
3974
- 403: 'Insufficient permissions to create API key'
4150
+ 401: 'Invalid access token'
3975
4151
  }
3976
4152
  });
3977
4153
  }
3978
4154
  }
3979
4155
 
3980
- export class AuthService {
4156
+ export class CommunityService {
3981
4157
  /**
3982
- * Anonymous login with access token
4158
+ * Relay a sanitized parser-contribution payload
4159
+ * A server-side bot re-sanitizes the payload and opens an issue on the target repository; the issue URL is returned. The payload is never persisted or logged (forward-and-drop).
3983
4160
  * @param data The data for the request.
4161
+ * @param data.region Region code for tenant context (routing only; the institution region rides in the payload meta)
3984
4162
  * @param data.requestBody
3985
- * @returns unknown Login successful
4163
+ * @returns ParserContributionRelayResponseDto Issue created by the bot
3986
4164
  * @throws ApiError
3987
4165
  */
3988
- public static authControllerAccessTokenLogin(
3989
- data: AuthControllerAccessTokenLoginData
3990
- ): CancelablePromise<AuthControllerAccessTokenLoginResponse> {
4166
+ public static parserContributionControllerCreate(
4167
+ data: ParserContributionControllerCreateData
4168
+ ): CancelablePromise<ParserContributionControllerCreateResponse> {
3991
4169
  return __request(OpenAPI, {
3992
4170
  method: 'POST',
3993
- url: '/api/v1/auth/sessions/anonymous',
4171
+ url: '/api/v1/{region}/community/parser-contributions',
4172
+ path: {
4173
+ region: data.region
4174
+ },
3994
4175
  body: data.requestBody,
3995
4176
  mediaType: 'application/json',
3996
4177
  errors: {
3997
- 401: 'Invalid access token'
4178
+ 401: 'Unauthorized',
4179
+ 422: 'Validation failed (institution slug, empty samples, row/cell size limits)',
4180
+ 429: 'Rate limited (5 submissions per user per hour)',
4181
+ 501: 'Relay not configured on this deployment — clients fall back to the clipboard flow',
4182
+ 502: 'GitHub bot failure (upstream), safe to retry'
3998
4183
  }
3999
4184
  });
4000
4185
  }
4001
4186
  }
4002
4187
 
4003
- export class DefaultService {
4188
+ export class AdminCacheService {
4004
4189
  /**
4005
- * @returns unknown
4190
+ * Flush entire cache (L1 + L2)
4191
+ * Clears ALL cache entries across ALL namespaces and users. Use only for emergency cache corruption recovery, maintenance-window refresh, or development resets.
4192
+ * @returns unknown Cache flushed successfully
4006
4193
  * @throws ApiError
4007
4194
  */
4008
4195
  public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
4009
4196
  return __request(OpenAPI, {
4010
4197
  method: 'POST',
4011
- url: '/api/v1/cache/flush'
4198
+ url: '/api/v1/cache/flush',
4199
+ errors: {
4200
+ 403: 'Admin access required'
4201
+ }
4012
4202
  });
4013
4203
  }
4014
4204
  }
@@ -4169,3 +4359,53 @@ export class InfoService {
4169
4359
  });
4170
4360
  }
4171
4361
  }
4362
+
4363
+ export class MarketDataService {
4364
+ /**
4365
+ * Search market symbols by name or code
4366
+ * Ranked search over the openbb catalog. Empty `q` returns [].
4367
+ * @param data The data for the request.
4368
+ * @param data.q Search term — matched against symbol and instrument name. Empty string returns [].
4369
+ * @param data.limit Maximum number of results (clamped 1..50)
4370
+ * @param data.exchange Filter by exchange code (e.g. US, HK, SS, SZ). A-share codes also match symbol notations and venue-code aliases (exchange=SS matches SH/SHH column values and bare 6-digit Shanghai symbols; SZ likewise)
4371
+ * @param data.assetType Filter by OpenBB asset_type (e.g. stock, etf)
4372
+ * @returns SymbolSearchResultDto Ranked search results
4373
+ * @throws ApiError
4374
+ */
4375
+ public static symbolControllerSearch(
4376
+ data: SymbolControllerSearchData
4377
+ ): CancelablePromise<SymbolControllerSearchResponse> {
4378
+ return __request(OpenAPI, {
4379
+ method: 'GET',
4380
+ url: '/api/v1/market/symbols/search',
4381
+ query: {
4382
+ q: data.q,
4383
+ limit: data.limit,
4384
+ exchange: data.exchange,
4385
+ assetType: data.assetType
4386
+ }
4387
+ });
4388
+ }
4389
+
4390
+ /**
4391
+ * Get a market symbol quote
4392
+ * @param data The data for the request.
4393
+ * @param data.symbol
4394
+ * @returns SymbolQuoteDto Symbol quote
4395
+ * @throws ApiError
4396
+ */
4397
+ public static symbolControllerGetQuote(
4398
+ data: SymbolControllerGetQuoteData
4399
+ ): CancelablePromise<SymbolControllerGetQuoteResponse> {
4400
+ return __request(OpenAPI, {
4401
+ method: 'GET',
4402
+ url: '/api/v1/market/symbols/{symbol}/quote',
4403
+ path: {
4404
+ symbol: data.symbol
4405
+ },
4406
+ errors: {
4407
+ 404: 'Symbol not found in the openbb catalog'
4408
+ }
4409
+ });
4410
+ }
4411
+ }