@firela/api-types 0.0.0-canary.c79f5035 → 0.0.0-canary.c7e4ab1

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.
@@ -31,6 +31,8 @@ import type {
31
31
  TransactionControllerListResponse,
32
32
  TransactionControllerCreateBatchData,
33
33
  TransactionControllerCreateBatchResponse,
34
+ TransactionControllerBatchVoidData,
35
+ TransactionControllerBatchVoidResponse,
34
36
  TransactionControllerCorrectData,
35
37
  TransactionControllerCorrectResponse,
36
38
  TransactionControllerSuggestTagsData,
@@ -57,6 +59,48 @@ import type {
57
59
  ReviewControllerUndoResponse,
58
60
  ReviewControllerBatchResolveData,
59
61
  ReviewControllerBatchResolveResponse,
62
+ TransactionRuleControllerCreateData,
63
+ TransactionRuleControllerCreateResponse,
64
+ TransactionRuleControllerListData,
65
+ TransactionRuleControllerListResponse,
66
+ TransactionRuleControllerValidateData,
67
+ TransactionRuleControllerValidateResponse,
68
+ TransactionRuleControllerBulkCreateData,
69
+ TransactionRuleControllerBulkCreateResponse,
70
+ TransactionRuleControllerExportData,
71
+ TransactionRuleControllerExportResponse,
72
+ TransactionRuleControllerGetStatisticsData,
73
+ TransactionRuleControllerGetStatisticsResponse,
74
+ TransactionRuleControllerGetDetailData,
75
+ TransactionRuleControllerGetDetailResponse,
76
+ TransactionRuleControllerUpdateData,
77
+ TransactionRuleControllerUpdateResponse,
78
+ TransactionRuleControllerDeleteData,
79
+ TransactionRuleControllerDeleteResponse,
80
+ TransactionRuleControllerTestData,
81
+ TransactionRuleControllerTestResponse,
82
+ UserControllerDeleteOwnUserData,
83
+ UserControllerDeleteOwnUserResponse,
84
+ UserControllerGetUserData,
85
+ UserControllerGetUserResponse,
86
+ UserControllerSignupUserData,
87
+ UserControllerSignupUserResponse,
88
+ UserControllerDeleteUserData,
89
+ UserControllerDeleteUserResponse,
90
+ UserControllerGetUserInfoData,
91
+ UserControllerGetUserInfoResponse,
92
+ UserControllerUpdateUserSettingData,
93
+ UserControllerUpdateUserSettingResponse,
94
+ UserControllerGetAllUserSettingsByPageData,
95
+ UserControllerGetAllUserSettingsByPageResponse,
96
+ UserControllerGetAssetLiabilitySummaryResponse,
97
+ PropertyControllerGetAllResponse,
98
+ PropertyControllerGetByKeyData,
99
+ PropertyControllerGetByKeyResponse,
100
+ PropertyControllerUpdateData,
101
+ PropertyControllerUpdateResponse,
102
+ PropertyControllerDeleteData,
103
+ PropertyControllerDeleteResponse,
60
104
  PayeeControllerCreateData,
61
105
  PayeeControllerCreateResponse,
62
106
  PayeeControllerFindAllData,
@@ -85,6 +129,7 @@ import type {
85
129
  PayeeProfileAdminControllerVerifyResponse,
86
130
  PayeeProfileAdminControllerUnverifyData,
87
131
  PayeeProfileAdminControllerUnverifyResponse,
132
+ PayeeProfileControllerListActiveResponse,
88
133
  CommodityControllerCreateData,
89
134
  CommodityControllerCreateResponse,
90
135
  CommodityControllerFindAllData,
@@ -99,6 +144,14 @@ import type {
99
144
  CommodityControllerGetOrCreateResponse,
100
145
  CommodityControllerBulkCreateData,
101
146
  CommodityControllerBulkCreateResponse,
147
+ ReportingControllerGetPortfolioTrendsData,
148
+ ReportingControllerGetPortfolioTrendsResponse,
149
+ ReportingControllerGetCashFlowTrendsData,
150
+ ReportingControllerGetCashFlowTrendsResponse,
151
+ ReportingControllerGenerateSnapshotData,
152
+ ReportingControllerGenerateSnapshotResponse,
153
+ ReportingControllerBackfillSnapshotsData,
154
+ ReportingControllerBackfillSnapshotsResponse,
102
155
  PriceControllerCreateData,
103
156
  PriceControllerCreateResponse,
104
157
  PriceControllerFindAllData,
@@ -143,56 +196,8 @@ import type {
143
196
  ExpectedTransactionControllerEnterNowResponse,
144
197
  ForecastControllerGetForecastData,
145
198
  ForecastControllerGetForecastResponse,
146
- ReportingControllerGetPortfolioTrendsData,
147
- ReportingControllerGetPortfolioTrendsResponse,
148
- ReportingControllerGetCashFlowTrendsData,
149
- ReportingControllerGetCashFlowTrendsResponse,
150
- ReportingControllerGenerateSnapshotData,
151
- ReportingControllerGenerateSnapshotResponse,
152
- ReportingControllerBackfillSnapshotsData,
153
- ReportingControllerBackfillSnapshotsResponse,
154
- UserControllerDeleteOwnUserData,
155
- UserControllerDeleteOwnUserResponse,
156
- UserControllerGetUserData,
157
- UserControllerGetUserResponse,
158
- UserControllerSignupUserData,
159
- UserControllerSignupUserResponse,
160
- UserControllerDeleteUserData,
161
- UserControllerDeleteUserResponse,
162
- UserControllerGetUserInfoData,
163
- UserControllerGetUserInfoResponse,
164
- UserControllerUpdateUserSettingData,
165
- UserControllerUpdateUserSettingResponse,
166
- UserControllerGetAllUserSettingsByPageData,
167
- UserControllerGetAllUserSettingsByPageResponse,
168
- UserControllerGetAssetLiabilitySummaryResponse,
169
- PropertyControllerGetAllResponse,
170
- PropertyControllerGetByKeyData,
171
- PropertyControllerGetByKeyResponse,
172
- PropertyControllerUpdateData,
173
- PropertyControllerUpdateResponse,
174
- PropertyControllerDeleteData,
175
- PropertyControllerDeleteResponse,
176
- TransactionRuleControllerCreateData,
177
- TransactionRuleControllerCreateResponse,
178
- TransactionRuleControllerListData,
179
- TransactionRuleControllerListResponse,
180
- TransactionRuleControllerValidateData,
181
- TransactionRuleControllerValidateResponse,
182
- TransactionRuleControllerBulkCreateData,
183
- TransactionRuleControllerBulkCreateResponse,
184
- TransactionRuleControllerExportData,
185
- TransactionRuleControllerExportResponse,
186
- TransactionRuleControllerGetStatisticsData,
187
- TransactionRuleControllerGetStatisticsResponse,
188
- TransactionRuleControllerGetDetailData,
189
- TransactionRuleControllerGetDetailResponse,
190
- TransactionRuleControllerUpdateData,
191
- TransactionRuleControllerUpdateResponse,
192
- TransactionRuleControllerDeleteData,
193
- TransactionRuleControllerDeleteResponse,
194
- TransactionRuleControllerTestData,
195
- TransactionRuleControllerTestResponse,
199
+ CategoryCatalogControllerListData,
200
+ CategoryCatalogControllerListResponse,
196
201
  EventControllerCreateData,
197
202
  EventControllerCreateResponse,
198
203
  EventControllerFindAllData,
@@ -215,6 +220,7 @@ import type {
215
220
  ReconciliationControllerPadResponse,
216
221
  ReconciliationControllerHistoryData,
217
222
  ReconciliationControllerHistoryResponse,
223
+ ExportControllerExportBeancountData,
218
224
  ExportControllerExportBeancountResponse,
219
225
  FileImportControllerImportFileData,
220
226
  FileImportControllerImportFileResponse,
@@ -257,9 +263,12 @@ import type {
257
263
  PlatformControllerFindAllResponse,
258
264
  PlatformControllerCreateData,
259
265
  PlatformControllerCreateResponse,
266
+ PlatformControllerGetPlatformListData,
260
267
  PlatformControllerGetPlatformListResponse,
261
268
  PlatformControllerMatchPlatformsData,
262
269
  PlatformControllerMatchPlatformsResponse,
270
+ PlatformControllerGetPlatformStandardsData,
271
+ PlatformControllerGetPlatformStandardsResponse,
263
272
  PlatformControllerUpdateData,
264
273
  PlatformControllerUpdateResponse,
265
274
  PlatformControllerDeleteData,
@@ -272,11 +281,17 @@ import type {
272
281
  DashboardControllerGetCashFlowResponse,
273
282
  DashboardControllerGetExpensesData,
274
283
  DashboardControllerGetExpensesResponse,
284
+ DashboardControllerGetAdvisorContextData,
285
+ DashboardControllerGetAdvisorContextResponse,
275
286
  HoldingPnlControllerGetHoldingPnlData,
276
287
  HoldingPnlControllerGetHoldingPnlResponse,
277
288
  ApiKeysControllerCreateApiKeyResponse,
278
289
  AuthControllerAccessTokenLoginData,
279
290
  AuthControllerAccessTokenLoginResponse,
291
+ AuthControllerAdvisorTokenLoginData,
292
+ AuthControllerAdvisorTokenLoginResponse,
293
+ ParserContributionControllerCreateData,
294
+ ParserContributionControllerCreateResponse,
280
295
  CacheControllerFlushCacheResponse,
281
296
  ExchangeRateControllerGetExchangeRateData,
282
297
  ExchangeRateControllerGetExchangeRateResponse,
@@ -330,7 +345,7 @@ export class BeanAccountsService {
330
345
  * @param data.type Filter by account type
331
346
  * @param data.status Filter by status
332
347
  * @param data.isCustom Filter by custom (user-created) accounts only
333
- * @param data.search Search term for account path
348
+ * @param data.search Search term matched against account path and user-set display name (case-insensitive)
334
349
  * @param data.limit Maximum number of results
335
350
  * @param data.offset Number of results to skip
336
351
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -526,11 +541,11 @@ export class BeanAccountsService {
526
541
  export class BeanAccountStandardsService {
527
542
  /**
528
543
  * Get account templates
529
- * Returns predefined account templates for a region. Supports filtering by account type and search term.
544
+ * 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).
530
545
  * @param data The data for the request.
531
- * @param data.region Region code (cn, us, de)
546
+ * @param data.region Region code (any ISO alpha-2; not-yet-open codes return the universal-only catalog)
532
547
  * @param data.type Filter by account type
533
- * @param data.search Search term for path or description
548
+ * @param data.search Search term for path, description, aliases, or localized display name
534
549
  * @returns AccountStandardListResponseDto Account templates retrieved successfully
535
550
  * @throws ApiError
536
551
  */
@@ -554,7 +569,7 @@ export class BeanAccountStandardsService {
554
569
  * Get template metadata for an account path
555
570
  * Returns root type for a template path.
556
571
  * @param data The data for the request.
557
- * @param data.region Region code for tenant context
572
+ * @param data.region Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
558
573
  * @param data.path Account path to check
559
574
  * @returns TemplateMetadataResponseDto Template metadata retrieved successfully
560
575
  * @throws ApiError
@@ -576,9 +591,9 @@ export class BeanAccountStandardsService {
576
591
 
577
592
  /**
578
593
  * Get available regions with hierarchy
579
- * Returns supported regions with inheritance metadata
594
+ * Returns the full region catalog (every ISO 3166-1 entry) with an 'open' flag and inheritance metadata (#759)
580
595
  * @param data The data for the request.
581
- * @param data.region Region code for tenant context
596
+ * @param data.region Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
582
597
  * @returns RegionsMetadataResponseDto Regions metadata retrieved successfully
583
598
  * @throws ApiError
584
599
  */
@@ -635,10 +650,11 @@ export class BeanTransactionsService {
635
650
  * @param data.offset Number of items to skip (default: 0)
636
651
  * @param data.dateFrom Filter by start date (inclusive), format: YYYY-MM-DD
637
652
  * @param data.dateTo Filter by end date (inclusive), format: YYYY-MM-DD
638
- * @param data.status Filter by transaction status
653
+ * @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).
639
654
  * @param data.search Search in narration and payee fields (max 200 chars)
640
655
  * @param data.accountId Filter by account ID (transactions with postings to this account)
641
- * @param data.category Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
656
+ * @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).
657
+ * @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.
642
658
  * @returns TransactionListResponseDto Transaction list
643
659
  * @throws ApiError
644
660
  */
@@ -659,7 +675,8 @@ export class BeanTransactionsService {
659
675
  status: data.status,
660
676
  search: data.search,
661
677
  accountId: data.accountId,
662
- category: data.category
678
+ category: data.category,
679
+ flow: data.flow
663
680
  },
664
681
  errors: {
665
682
  400: 'Validation failed',
@@ -696,6 +713,34 @@ export class BeanTransactionsService {
696
713
  });
697
714
  }
698
715
 
716
+ /**
717
+ * Batch void transactions
718
+ * Soft-deletes (VOIDED) a batch of the caller's ACTIVE transactions in one DB transaction. Voiding releases each row's importId dedup slot, so re-importing the same file after an undo batch-void imports every row again instead of skipping them as duplicates.
719
+ * @param data The data for the request.
720
+ * @param data.region Region code for tenant context
721
+ * @param data.requestBody Batch void request (1-500 unique transaction IDs)
722
+ * @returns BatchVoidResultDto Batch void result: count of rows voided plus ids not found / no longer ACTIVE
723
+ * @throws ApiError
724
+ */
725
+ public static transactionControllerBatchVoid(
726
+ data: TransactionControllerBatchVoidData
727
+ ): CancelablePromise<TransactionControllerBatchVoidResponse> {
728
+ return __request(OpenAPI, {
729
+ method: 'POST',
730
+ url: '/api/v1/{region}/bean/transactions/batch-void',
731
+ path: {
732
+ region: data.region
733
+ },
734
+ body: data.requestBody,
735
+ mediaType: 'application/json',
736
+ errors: {
737
+ 400: 'Validation failed (empty, over 500, duplicate or non-string ids)',
738
+ 401: 'Authentication required',
739
+ 403: 'Batch contains ids owned by another user — whole request rejected, nothing committed'
740
+ }
741
+ });
742
+ }
743
+
699
744
  /**
700
745
  * Correct (supersede) a transaction
701
746
  * Atomically voids the original (SUPERSEDED) and creates a replacement through the full validation pipeline.
@@ -1040,1126 +1085,1080 @@ export class BeanReviewsService {
1040
1085
  }
1041
1086
  }
1042
1087
 
1043
- export class BeanPayeesService {
1088
+ export class BeanTransactionRulesService {
1044
1089
  /**
1045
- * Create a new payee
1046
- * Creates a new payee mapping for the authenticated user. The payee name must be unique within the user's account.
1090
+ * Create a new transaction rule (or upsert if upsertByPayee=true)
1091
+ * Creates a new rule. If upsertByPayee=true, updates existing rule matching payeeKeywords[0] instead of creating duplicate.
1047
1092
  * @param data The data for the request.
1093
+ * @param data.region Region code for tenant context
1048
1094
  * @param data.requestBody
1049
- * @returns PayeeResponseDto Payee created successfully
1095
+ * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
1050
1096
  * @throws ApiError
1051
1097
  */
1052
- public static payeeControllerCreate(
1053
- data: PayeeControllerCreateData
1054
- ): CancelablePromise<PayeeControllerCreateResponse> {
1098
+ public static transactionRuleControllerCreate(
1099
+ data: TransactionRuleControllerCreateData
1100
+ ): CancelablePromise<TransactionRuleControllerCreateResponse> {
1055
1101
  return __request(OpenAPI, {
1056
1102
  method: 'POST',
1057
- url: '/api/v1/bean/payees',
1103
+ url: '/api/v1/{region}/bean/transaction-rules',
1104
+ path: {
1105
+ region: data.region
1106
+ },
1058
1107
  body: data.requestBody,
1059
1108
  mediaType: 'application/json',
1060
1109
  errors: {
1061
- 400: 'Invalid input data',
1062
- 409: 'Payee already exists'
1110
+ 400: 'Validation failed',
1111
+ 401: 'Unauthorized',
1112
+ 409: 'Resource conflict - another process is updating this rule'
1063
1113
  }
1064
1114
  });
1065
1115
  }
1066
1116
 
1067
1117
  /**
1068
- * List user payees
1069
- * Returns all payee mappings for the authenticated user with optional filtering
1118
+ * Get all transaction rules for user
1070
1119
  * @param data The data for the request.
1071
- * @param data.search Search term for payee name (partial match, case-insensitive). Useful for autocomplete.
1072
- * @param data.payee Filter by exact payee name match
1073
- * @param data.category Filter by custom category
1074
- * @param data.tag Filter by custom tag (returns payees that have this tag)
1075
- * @param data.isActive Filter by active status. Defaults to true (show only active payees).
1076
- * @returns PayeeListResponseDto Payees retrieved successfully
1120
+ * @param data.region Region code for tenant context
1121
+ * @param data.limit Max results per page (default: 20, max: 100)
1122
+ * @param data.offset Pagination offset (default: 0)
1123
+ * @param data.enabled Filter by enabled status
1124
+ * @param data.learningSource Filter by learning source. Omit this parameter or pass empty string to get manually created rules (learningSource is null in database).
1125
+ * @param data.autoApplyEnabled Filter by auto-apply status
1126
+ * @returns TransactionRuleListResponseDto List of rules
1077
1127
  * @throws ApiError
1078
1128
  */
1079
- public static payeeControllerFindAll(
1080
- data: PayeeControllerFindAllData = {}
1081
- ): CancelablePromise<PayeeControllerFindAllResponse> {
1129
+ public static transactionRuleControllerList(
1130
+ data: TransactionRuleControllerListData
1131
+ ): CancelablePromise<TransactionRuleControllerListResponse> {
1082
1132
  return __request(OpenAPI, {
1083
1133
  method: 'GET',
1084
- url: '/api/v1/bean/payees',
1134
+ url: '/api/v1/{region}/bean/transaction-rules',
1135
+ path: {
1136
+ region: data.region
1137
+ },
1085
1138
  query: {
1086
- search: data.search,
1087
- payee: data.payee,
1088
- category: data.category,
1089
- tag: data.tag,
1090
- isActive: data.isActive
1139
+ limit: data.limit,
1140
+ offset: data.offset,
1141
+ enabled: data.enabled,
1142
+ learningSource: data.learningSource,
1143
+ autoApplyEnabled: data.autoApplyEnabled
1144
+ },
1145
+ errors: {
1146
+ 401: 'Unauthorized'
1091
1147
  }
1092
1148
  });
1093
1149
  }
1094
1150
 
1095
1151
  /**
1096
- * Get payee autocomplete suggestions
1097
- * Returns active payee names matching the query, sorted by recent usage. Used for transaction input autocomplete.
1152
+ * Validate transaction rule configuration
1098
1153
  * @param data The data for the request.
1099
- * @param data.q Search query for payee name (partial match, case-insensitive)
1100
- * @param data.limit Maximum number of suggestions
1101
- * @returns PayeeAutocompleteResponseDto Autocomplete suggestions retrieved successfully
1154
+ * @param data.region Region code for tenant context
1155
+ * @param data.requestBody
1156
+ * @returns ValidateRuleResponseDto Validation result
1102
1157
  * @throws ApiError
1103
1158
  */
1104
- public static payeeControllerAutocomplete(
1105
- data: PayeeControllerAutocompleteData
1106
- ): CancelablePromise<PayeeControllerAutocompleteResponse> {
1159
+ public static transactionRuleControllerValidate(
1160
+ data: TransactionRuleControllerValidateData
1161
+ ): CancelablePromise<TransactionRuleControllerValidateResponse> {
1107
1162
  return __request(OpenAPI, {
1108
- method: 'GET',
1109
- url: '/api/v1/bean/payees/autocomplete',
1110
- query: {
1111
- q: data.q,
1112
- limit: data.limit
1163
+ method: 'POST',
1164
+ url: '/api/v1/{region}/bean/transaction-rules/validate',
1165
+ path: {
1166
+ region: data.region
1167
+ },
1168
+ body: data.requestBody,
1169
+ mediaType: 'application/json',
1170
+ errors: {
1171
+ 400: 'Validation failed',
1172
+ 401: 'Unauthorized'
1113
1173
  }
1114
1174
  });
1115
1175
  }
1116
1176
 
1117
1177
  /**
1118
- * Get top payees by usage
1119
- * Returns the most frequently used payees, sorted by use count. Used for statistics and analytics.
1178
+ * Bulk create transaction rules
1120
1179
  * @param data The data for the request.
1121
- * @param data.limit Maximum number of results
1122
- * @returns PayeeStatsResponseDto Top payees retrieved successfully
1180
+ * @param data.region Region code for tenant context
1181
+ * @param data.requestBody
1182
+ * @returns BulkCreateRulesResponseDto Bulk create completed
1123
1183
  * @throws ApiError
1124
1184
  */
1125
- public static payeeControllerGetTopPayees(
1126
- data: PayeeControllerGetTopPayeesData = {}
1127
- ): CancelablePromise<PayeeControllerGetTopPayeesResponse> {
1185
+ public static transactionRuleControllerBulkCreate(
1186
+ data: TransactionRuleControllerBulkCreateData
1187
+ ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
1128
1188
  return __request(OpenAPI, {
1129
- method: 'GET',
1130
- url: '/api/v1/bean/payees/top',
1131
- query: {
1132
- limit: data.limit
1189
+ method: 'POST',
1190
+ url: '/api/v1/{region}/bean/transaction-rules/bulk',
1191
+ path: {
1192
+ region: data.region
1193
+ },
1194
+ body: data.requestBody,
1195
+ mediaType: 'application/json',
1196
+ errors: {
1197
+ 400: 'Invalid bulk create data',
1198
+ 401: 'Unauthorized'
1133
1199
  }
1134
1200
  });
1135
1201
  }
1136
1202
 
1137
1203
  /**
1138
- * Get payee by ID
1139
- * Returns a specific payee mapping by its UUID
1204
+ * Export transaction rules
1140
1205
  * @param data The data for the request.
1141
- * @param data.id Payee UUID
1142
- * @returns PayeeResponseDto Payee retrieved successfully
1206
+ * @param data.format Export format (currently only JSON supported)
1207
+ * @param data.region Region code for tenant context
1208
+ * @returns ExportRulesResponseDto Exported rules
1143
1209
  * @throws ApiError
1144
1210
  */
1145
- public static payeeControllerFindOne(
1146
- data: PayeeControllerFindOneData
1147
- ): CancelablePromise<PayeeControllerFindOneResponse> {
1211
+ public static transactionRuleControllerExport(
1212
+ data: TransactionRuleControllerExportData
1213
+ ): CancelablePromise<TransactionRuleControllerExportResponse> {
1148
1214
  return __request(OpenAPI, {
1149
1215
  method: 'GET',
1150
- url: '/api/v1/bean/payees/{id}',
1216
+ url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
1151
1217
  path: {
1152
- id: data.id
1218
+ format: data.format,
1219
+ region: data.region
1153
1220
  },
1154
1221
  errors: {
1155
- 403: 'Payee belongs to another user',
1156
- 404: 'Payee not found'
1222
+ 400: 'Unsupported format',
1223
+ 401: 'Unauthorized'
1157
1224
  }
1158
1225
  });
1159
1226
  }
1160
1227
 
1161
1228
  /**
1162
- * Update payee
1163
- * Updates a payee mapping. The payee name cannot be changed after creation.
1229
+ * Get transaction rule statistics
1164
1230
  * @param data The data for the request.
1165
- * @param data.id Payee UUID
1166
- * @param data.requestBody
1167
- * @returns PayeeResponseDto Payee updated successfully
1231
+ * @param data.period Statistics time period
1232
+ * @param data.region Region code for tenant context
1233
+ * @returns RuleStatisticsResponseDto Rule statistics
1168
1234
  * @throws ApiError
1169
1235
  */
1170
- public static payeeControllerUpdate(
1171
- data: PayeeControllerUpdateData
1172
- ): CancelablePromise<PayeeControllerUpdateResponse> {
1236
+ public static transactionRuleControllerGetStatistics(
1237
+ data: TransactionRuleControllerGetStatisticsData
1238
+ ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
1173
1239
  return __request(OpenAPI, {
1174
- method: 'PUT',
1175
- url: '/api/v1/bean/payees/{id}',
1240
+ method: 'GET',
1241
+ url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
1176
1242
  path: {
1177
- id: data.id
1243
+ period: data.period,
1244
+ region: data.region
1178
1245
  },
1179
- body: data.requestBody,
1180
- mediaType: 'application/json',
1181
1246
  errors: {
1182
- 400: 'Invalid input data',
1183
- 404: 'Payee not found'
1247
+ 401: 'Unauthorized'
1184
1248
  }
1185
1249
  });
1186
1250
  }
1187
1251
 
1188
1252
  /**
1189
- * Delete payee
1190
- * Soft deletes a payee by marking it as inactive. Inactive payees will not appear in autocomplete suggestions.
1253
+ * Get transaction rule detail
1191
1254
  * @param data The data for the request.
1192
- * @param data.id Payee UUID
1193
- * @returns void Payee deleted successfully
1255
+ * @param data.ruleId Rule ID
1256
+ * @param data.region Region code for tenant context
1257
+ * @returns TransactionRuleResponseDto Rule details
1194
1258
  * @throws ApiError
1195
1259
  */
1196
- public static payeeControllerDelete(
1197
- data: PayeeControllerDeleteData
1198
- ): CancelablePromise<PayeeControllerDeleteResponse> {
1260
+ public static transactionRuleControllerGetDetail(
1261
+ data: TransactionRuleControllerGetDetailData
1262
+ ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
1199
1263
  return __request(OpenAPI, {
1200
- method: 'DELETE',
1201
- url: '/api/v1/bean/payees/{id}',
1264
+ method: 'GET',
1265
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1202
1266
  path: {
1203
- id: data.id
1267
+ ruleId: data.ruleId,
1268
+ region: data.region
1204
1269
  },
1205
1270
  errors: {
1206
- 404: 'Payee not found'
1271
+ 401: 'Unauthorized',
1272
+ 403: 'Forbidden - not owner of rule',
1273
+ 404: 'Rule not found'
1207
1274
  }
1208
1275
  });
1209
1276
  }
1210
- }
1211
1277
 
1212
- export class AdminPayeeProfilesService {
1213
1278
  /**
1214
- * Create payee profile (Admin only)
1215
- * Creates a new global payee profile. The canonical name must be unique (case-insensitive).
1279
+ * Update a transaction rule
1216
1280
  * @param data The data for the request.
1281
+ * @param data.ruleId Rule ID to update
1282
+ * @param data.region Region code for tenant context
1217
1283
  * @param data.requestBody
1218
- * @returns PayeeProfileResponseDto Payee profile created successfully
1284
+ * @returns TransactionRuleResponseDto Rule updated successfully
1219
1285
  * @throws ApiError
1220
1286
  */
1221
- public static payeeProfileAdminControllerCreate(
1222
- data: PayeeProfileAdminControllerCreateData
1223
- ): CancelablePromise<PayeeProfileAdminControllerCreateResponse> {
1287
+ public static transactionRuleControllerUpdate(
1288
+ data: TransactionRuleControllerUpdateData
1289
+ ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
1224
1290
  return __request(OpenAPI, {
1225
- method: 'POST',
1226
- url: '/api/v1/admin/payee-profiles',
1291
+ method: 'PUT',
1292
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1293
+ path: {
1294
+ ruleId: data.ruleId,
1295
+ region: data.region
1296
+ },
1227
1297
  body: data.requestBody,
1228
1298
  mediaType: 'application/json',
1229
1299
  errors: {
1230
1300
  400: 'Validation failed',
1231
- 403: 'Admin access required',
1232
- 409: 'Payee profile already exists'
1301
+ 401: 'Unauthorized',
1302
+ 403: 'Forbidden - not owner of rule',
1303
+ 404: 'Rule not found',
1304
+ 409: 'Resource conflict - rule is being modified by another process'
1233
1305
  }
1234
1306
  });
1235
1307
  }
1236
1308
 
1237
1309
  /**
1238
- * List payee profiles (Admin only)
1239
- * Returns all payee profiles with optional filtering by category, country, verification status, etc.
1310
+ * Delete a transaction rule
1240
1311
  * @param data The data for the request.
1241
- * @param data.search Search term for canonical name and aliases (case-insensitive)
1242
- * @param data.category Filter by category
1243
- * @param data.country Filter by country (ISO 3166-1 alpha-2)
1244
- * @param data.isActive Filter by active status (default: true - show only active)
1245
- * @param data.verified Filter by verification status. true = verified only, false = unverified only
1246
- * @param data.dataSource Filter by data source
1247
- * @returns PayeeProfileListResponseDto Payee profiles retrieved successfully
1312
+ * @param data.ruleId Rule ID to delete
1313
+ * @param data.region Region code for tenant context
1314
+ * @returns void Rule deleted successfully
1248
1315
  * @throws ApiError
1249
1316
  */
1250
- public static payeeProfileAdminControllerFindAll(
1251
- data: PayeeProfileAdminControllerFindAllData = {}
1252
- ): CancelablePromise<PayeeProfileAdminControllerFindAllResponse> {
1317
+ public static transactionRuleControllerDelete(
1318
+ data: TransactionRuleControllerDeleteData
1319
+ ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
1253
1320
  return __request(OpenAPI, {
1254
- method: 'GET',
1255
- url: '/api/v1/admin/payee-profiles',
1256
- query: {
1257
- search: data.search,
1258
- category: data.category,
1259
- country: data.country,
1260
- isActive: data.isActive,
1261
- verified: data.verified,
1262
- dataSource: data.dataSource
1321
+ method: 'DELETE',
1322
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1323
+ path: {
1324
+ ruleId: data.ruleId,
1325
+ region: data.region
1263
1326
  },
1264
1327
  errors: {
1265
- 403: 'Admin access required'
1328
+ 401: 'Unauthorized',
1329
+ 403: 'Forbidden - not owner of rule',
1330
+ 404: 'Rule not found',
1331
+ 409: 'Resource conflict - rule is being modified by another process'
1266
1332
  }
1267
1333
  });
1268
1334
  }
1269
1335
 
1270
1336
  /**
1271
- * Get payee profile by ID (Admin only)
1272
- * Returns a single payee profile by its ID.
1337
+ * Test rule matching
1273
1338
  * @param data The data for the request.
1274
- * @param data.id Payee profile ID (UUID)
1275
- * @returns PayeeProfileResponseDto Payee profile retrieved successfully
1339
+ * @param data.ruleId Rule ID to test
1340
+ * @param data.region Region code for tenant context
1341
+ * @param data.requestBody
1342
+ * @returns TestRuleResponseDto Test result
1276
1343
  * @throws ApiError
1277
1344
  */
1278
- public static payeeProfileAdminControllerFindOne(
1279
- data: PayeeProfileAdminControllerFindOneData
1280
- ): CancelablePromise<PayeeProfileAdminControllerFindOneResponse> {
1345
+ public static transactionRuleControllerTest(
1346
+ data: TransactionRuleControllerTestData
1347
+ ): CancelablePromise<TransactionRuleControllerTestResponse> {
1281
1348
  return __request(OpenAPI, {
1282
- method: 'GET',
1283
- url: '/api/v1/admin/payee-profiles/{id}',
1349
+ method: 'POST',
1350
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
1284
1351
  path: {
1285
- id: data.id
1352
+ ruleId: data.ruleId,
1353
+ region: data.region
1286
1354
  },
1355
+ body: data.requestBody,
1356
+ mediaType: 'application/json',
1287
1357
  errors: {
1288
- 403: 'Admin access required',
1289
- 404: 'Payee profile not found'
1358
+ 401: 'Unauthorized',
1359
+ 403: 'Forbidden - not owner of rule',
1360
+ 404: 'Rule not found'
1290
1361
  }
1291
1362
  });
1292
1363
  }
1364
+ }
1293
1365
 
1366
+ export class UsersService {
1294
1367
  /**
1295
- * Update payee profile (Admin only)
1296
- * Updates an existing payee profile. The canonical name cannot be changed.
1368
+ * Delete own user account
1297
1369
  * @param data The data for the request.
1298
- * @param data.id Payee profile ID (UUID)
1299
1370
  * @param data.requestBody
1300
- * @returns PayeeProfileResponseDto Payee profile updated successfully
1371
+ * @returns void User deleted successfully
1301
1372
  * @throws ApiError
1302
1373
  */
1303
- public static payeeProfileAdminControllerUpdate(
1304
- data: PayeeProfileAdminControllerUpdateData
1305
- ): CancelablePromise<PayeeProfileAdminControllerUpdateResponse> {
1374
+ public static userControllerDeleteOwnUser(
1375
+ data: UserControllerDeleteOwnUserData
1376
+ ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
1306
1377
  return __request(OpenAPI, {
1307
- method: 'PUT',
1308
- url: '/api/v1/admin/payee-profiles/{id}',
1309
- path: {
1310
- id: data.id
1311
- },
1378
+ method: 'DELETE',
1379
+ url: '/api/v1/users',
1312
1380
  body: data.requestBody,
1313
1381
  mediaType: 'application/json',
1314
1382
  errors: {
1315
- 403: 'Admin access required',
1316
- 404: 'Payee profile not found'
1383
+ 403: 'Invalid access token'
1317
1384
  }
1318
1385
  });
1319
1386
  }
1320
1387
 
1321
1388
  /**
1322
- * Soft delete payee profile (Admin only)
1323
- * Marks a payee profile as inactive (soft delete). The profile cannot be deleted if it is referenced by user payees.
1389
+ * Get current authenticated user
1324
1390
  * @param data The data for the request.
1325
- * @param data.id Payee profile ID (UUID)
1326
- * @returns void Payee profile deleted successfully
1391
+ * @param data.acceptLanguage
1392
+ * @returns UserResponseDto User retrieved successfully
1327
1393
  * @throws ApiError
1328
1394
  */
1329
- public static payeeProfileAdminControllerDelete(
1330
- data: PayeeProfileAdminControllerDeleteData
1331
- ): CancelablePromise<PayeeProfileAdminControllerDeleteResponse> {
1395
+ public static userControllerGetUser(
1396
+ data: UserControllerGetUserData
1397
+ ): CancelablePromise<UserControllerGetUserResponse> {
1332
1398
  return __request(OpenAPI, {
1333
- method: 'DELETE',
1334
- url: '/api/v1/admin/payee-profiles/{id}',
1335
- path: {
1336
- id: data.id
1337
- },
1338
- errors: {
1339
- 403: 'Admin access required',
1340
- 404: 'Payee profile not found',
1341
- 409: 'Payee profile is in use and cannot be deleted'
1399
+ method: 'GET',
1400
+ url: '/api/v1/users',
1401
+ headers: {
1402
+ 'accept-language': data.acceptLanguage
1342
1403
  }
1343
1404
  });
1344
1405
  }
1345
1406
 
1346
1407
  /**
1347
- * Verify payee profile (Admin only)
1348
- * Marks a payee profile as verified by setting verifiedAt to current timestamp.
1408
+ * Sign up new user
1409
+ * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
1349
1410
  * @param data The data for the request.
1350
- * @param data.id Payee profile ID (UUID)
1351
- * @returns PayeeProfileResponseDto Payee profile verified successfully
1411
+ * @param data.requestBody
1412
+ * @returns SignupResponseDto User created successfully
1352
1413
  * @throws ApiError
1353
1414
  */
1354
- public static payeeProfileAdminControllerVerify(
1355
- data: PayeeProfileAdminControllerVerifyData
1356
- ): CancelablePromise<PayeeProfileAdminControllerVerifyResponse> {
1415
+ public static userControllerSignupUser(
1416
+ data: UserControllerSignupUserData
1417
+ ): CancelablePromise<UserControllerSignupUserResponse> {
1357
1418
  return __request(OpenAPI, {
1358
1419
  method: 'POST',
1359
- url: '/api/v1/admin/payee-profiles/{id}/verify',
1360
- path: {
1361
- id: data.id
1362
- },
1420
+ url: '/api/v1/users',
1421
+ body: data.requestBody,
1422
+ mediaType: 'application/json',
1363
1423
  errors: {
1364
- 403: 'Admin access required',
1365
- 404: 'Payee profile not found'
1424
+ 400: 'Invalid Turnstile token (when Turnstile is enabled)',
1425
+ 403: 'User signup is disabled'
1366
1426
  }
1367
1427
  });
1368
1428
  }
1369
1429
 
1370
1430
  /**
1371
- * Unverify payee profile (Admin only)
1372
- * Removes verification status by setting verifiedAt to null.
1431
+ * Delete user by ID (admin only)
1373
1432
  * @param data The data for the request.
1374
- * @param data.id Payee profile ID (UUID)
1375
- * @returns PayeeProfileResponseDto Payee profile unverified successfully
1433
+ * @param data.id User ID to delete
1434
+ * @returns void User deleted successfully
1376
1435
  * @throws ApiError
1377
1436
  */
1378
- public static payeeProfileAdminControllerUnverify(
1379
- data: PayeeProfileAdminControllerUnverifyData
1380
- ): CancelablePromise<PayeeProfileAdminControllerUnverifyResponse> {
1437
+ public static userControllerDeleteUser(
1438
+ data: UserControllerDeleteUserData
1439
+ ): CancelablePromise<UserControllerDeleteUserResponse> {
1381
1440
  return __request(OpenAPI, {
1382
1441
  method: 'DELETE',
1383
- url: '/api/v1/admin/payee-profiles/{id}/verify',
1442
+ url: '/api/v1/users/{id}',
1384
1443
  path: {
1385
1444
  id: data.id
1386
1445
  },
1387
1446
  errors: {
1388
- 403: 'Admin access required',
1389
- 404: 'Payee profile not found'
1447
+ 403: 'Cannot delete own account or insufficient permissions'
1390
1448
  }
1391
1449
  });
1392
1450
  }
1393
- }
1394
1451
 
1395
- export class BeanCommoditiesService {
1396
1452
  /**
1397
- * Create a new commodity
1398
- * Creates a new commodity definition for the authenticated user
1453
+ * Get user info by user ID
1399
1454
  * @param data The data for the request.
1400
- * @param data.region Region code for tenant context
1401
- * @param data.requestBody
1402
- * @returns CommodityResponseDto Commodity created successfully
1455
+ * @param data.id User ID
1456
+ * @returns unknown User info retrieved successfully
1403
1457
  * @throws ApiError
1404
1458
  */
1405
- public static commodityControllerCreate(
1406
- data: CommodityControllerCreateData
1407
- ): CancelablePromise<CommodityControllerCreateResponse> {
1459
+ public static userControllerGetUserInfo(
1460
+ data: UserControllerGetUserInfoData
1461
+ ): CancelablePromise<UserControllerGetUserInfoResponse> {
1408
1462
  return __request(OpenAPI, {
1409
- method: 'POST',
1410
- url: '/api/v1/{region}/bean/commodities',
1463
+ method: 'GET',
1464
+ url: '/api/v1/users/{id}/info',
1411
1465
  path: {
1412
- region: data.region
1466
+ id: data.id
1413
1467
  },
1468
+ errors: {
1469
+ 403: 'Cannot access other user info without admin permission'
1470
+ }
1471
+ });
1472
+ }
1473
+
1474
+ /**
1475
+ * Update user settings
1476
+ * @param data The data for the request.
1477
+ * @param data.requestBody
1478
+ * @returns unknown Settings updated successfully
1479
+ * @throws ApiError
1480
+ */
1481
+ public static userControllerUpdateUserSetting(
1482
+ data: UserControllerUpdateUserSettingData
1483
+ ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
1484
+ return __request(OpenAPI, {
1485
+ method: 'PUT',
1486
+ url: '/api/v1/users/setting',
1414
1487
  body: data.requestBody,
1415
1488
  mediaType: 'application/json',
1416
1489
  errors: {
1417
- 400: 'Invalid input data',
1418
- 409: 'Commodity already exists'
1490
+ 403: 'Insufficient permissions'
1419
1491
  }
1420
1492
  });
1421
1493
  }
1422
1494
 
1423
1495
  /**
1424
- * List user commodities
1425
- * Returns all commodity definitions for the authenticated user with optional filtering
1496
+ * Get all user settings paginated (admin only)
1426
1497
  * @param data The data for the request.
1427
- * @param data.region Region code for tenant context
1428
- * @param data.search Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
1429
- * @param data.symbol Filter by exact symbol match
1430
- * @returns CommodityListResponseDto Commodities retrieved successfully
1498
+ * @param data.pageNo Page number
1499
+ * @param data.pageSize Page size
1500
+ * @returns unknown Settings list retrieved successfully
1431
1501
  * @throws ApiError
1432
1502
  */
1433
- public static commodityControllerFindAll(
1434
- data: CommodityControllerFindAllData
1435
- ): CancelablePromise<CommodityControllerFindAllResponse> {
1503
+ public static userControllerGetAllUserSettingsByPage(
1504
+ data: UserControllerGetAllUserSettingsByPageData
1505
+ ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
1436
1506
  return __request(OpenAPI, {
1437
1507
  method: 'GET',
1438
- url: '/api/v1/{region}/bean/commodities',
1439
- path: {
1440
- region: data.region
1441
- },
1508
+ url: '/api/v1/users/settings-by-page',
1442
1509
  query: {
1443
- search: data.search,
1444
- symbol: data.symbol
1510
+ pageNo: data.pageNo,
1511
+ pageSize: data.pageSize
1445
1512
  }
1446
1513
  });
1447
1514
  }
1448
1515
 
1449
1516
  /**
1450
- * Get commodity by symbol
1451
- * Returns a specific commodity definition by its symbol
1452
- * @param data The data for the request.
1453
- * @param data.symbol Commodity symbol
1454
- * @param data.region Region code for tenant context
1455
- * @returns CommodityResponseDto Commodity retrieved successfully
1517
+ * Get asset and liability summary for current user
1518
+ * @returns unknown Summary retrieved successfully
1456
1519
  * @throws ApiError
1457
1520
  */
1458
- public static commodityControllerFindOne(
1459
- data: CommodityControllerFindOneData
1460
- ): CancelablePromise<CommodityControllerFindOneResponse> {
1521
+ public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
1461
1522
  return __request(OpenAPI, {
1462
1523
  method: 'GET',
1463
- url: '/api/v1/{region}/bean/commodities/{symbol}',
1464
- path: {
1465
- symbol: data.symbol,
1466
- region: data.region
1467
- },
1468
- errors: {
1469
- 404: 'Commodity not found'
1470
- }
1524
+ url: '/api/v1/users/asset-liability-summary'
1471
1525
  });
1472
1526
  }
1527
+ }
1473
1528
 
1529
+ export class PropertiesService {
1474
1530
  /**
1475
- * Update commodity
1476
- * Updates an existing commodity definition. Symbol cannot be changed.
1477
- * @param data The data for the request.
1478
- * @param data.symbol Commodity symbol
1479
- * @param data.region Region code for tenant context
1480
- * @param data.requestBody
1481
- * @returns CommodityResponseDto Commodity updated successfully
1531
+ * Get all system properties
1532
+ * @returns unknown Properties retrieved successfully
1482
1533
  * @throws ApiError
1483
1534
  */
1484
- public static commodityControllerUpdate(
1485
- data: CommodityControllerUpdateData
1486
- ): CancelablePromise<CommodityControllerUpdateResponse> {
1535
+ public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
1487
1536
  return __request(OpenAPI, {
1488
- method: 'PUT',
1489
- url: '/api/v1/{region}/bean/commodities/{symbol}',
1490
- path: {
1491
- symbol: data.symbol,
1492
- region: data.region
1493
- },
1494
- body: data.requestBody,
1495
- mediaType: 'application/json',
1537
+ method: 'GET',
1538
+ url: '/api/v1/admin/properties',
1496
1539
  errors: {
1497
- 400: 'Invalid input data',
1498
- 404: 'Commodity not found'
1540
+ 401: 'Unauthorized',
1541
+ 403: 'Forbidden - insufficient permissions'
1499
1542
  }
1500
1543
  });
1501
1544
  }
1502
1545
 
1503
1546
  /**
1504
- * Delete commodity
1505
- * Deletes a commodity definition
1547
+ * Get property by key
1506
1548
  * @param data The data for the request.
1507
- * @param data.symbol Commodity symbol
1508
- * @param data.region Region code for tenant context
1509
- * @returns void Commodity deleted successfully
1549
+ * @param data.key Property key
1550
+ * @returns unknown Property retrieved successfully
1510
1551
  * @throws ApiError
1511
1552
  */
1512
- public static commodityControllerDelete(
1513
- data: CommodityControllerDeleteData
1514
- ): CancelablePromise<CommodityControllerDeleteResponse> {
1553
+ public static propertyControllerGetByKey(
1554
+ data: PropertyControllerGetByKeyData
1555
+ ): CancelablePromise<PropertyControllerGetByKeyResponse> {
1515
1556
  return __request(OpenAPI, {
1516
- method: 'DELETE',
1517
- url: '/api/v1/{region}/bean/commodities/{symbol}',
1557
+ method: 'GET',
1558
+ url: '/api/v1/admin/properties/{key}',
1518
1559
  path: {
1519
- symbol: data.symbol,
1520
- region: data.region
1560
+ key: data.key
1521
1561
  },
1522
1562
  errors: {
1523
- 404: 'Commodity not found'
1563
+ 401: 'Unauthorized',
1564
+ 403: 'Forbidden - insufficient permissions',
1565
+ 404: 'Property not found'
1524
1566
  }
1525
1567
  });
1526
1568
  }
1527
1569
 
1528
1570
  /**
1529
- * Ensure commodity exists
1530
- * Gets existing commodity or creates it with automatic initialization from OpenBB
1571
+ * Update a system property
1531
1572
  * @param data The data for the request.
1532
- * @param data.symbol Commodity symbol
1533
- * @param data.region Region code for tenant context
1534
- * @returns CommodityResponseDto Commodity retrieved or created
1573
+ * @param data.key Property key
1574
+ * @param data.requestBody
1575
+ * @returns unknown Property updated successfully
1535
1576
  * @throws ApiError
1536
1577
  */
1537
- public static commodityControllerGetOrCreate(
1538
- data: CommodityControllerGetOrCreateData
1539
- ): CancelablePromise<CommodityControllerGetOrCreateResponse> {
1578
+ public static propertyControllerUpdate(
1579
+ data: PropertyControllerUpdateData
1580
+ ): CancelablePromise<PropertyControllerUpdateResponse> {
1540
1581
  return __request(OpenAPI, {
1541
- method: 'POST',
1542
- url: '/api/v1/{region}/bean/commodities/{symbol}/ensure',
1582
+ method: 'PUT',
1583
+ url: '/api/v1/admin/properties/{key}',
1543
1584
  path: {
1544
- symbol: data.symbol,
1545
- region: data.region
1585
+ key: data.key
1586
+ },
1587
+ body: data.requestBody,
1588
+ mediaType: 'application/json',
1589
+ errors: {
1590
+ 401: 'Unauthorized',
1591
+ 403: 'Forbidden - insufficient permissions'
1546
1592
  }
1547
1593
  });
1548
1594
  }
1549
1595
 
1550
1596
  /**
1551
- * Bulk create commodities
1552
- * Creates multiple commodities from a list of symbols, useful for initialization
1597
+ * Delete a system property
1553
1598
  * @param data The data for the request.
1554
- * @param data.region Region code for tenant context
1555
- * @returns CommodityResponseDto Commodities created successfully
1599
+ * @param data.key Property key
1600
+ * @returns void Property deleted successfully
1556
1601
  * @throws ApiError
1557
1602
  */
1558
- public static commodityControllerBulkCreate(
1559
- data: CommodityControllerBulkCreateData
1560
- ): CancelablePromise<CommodityControllerBulkCreateResponse> {
1603
+ public static propertyControllerDelete(
1604
+ data: PropertyControllerDeleteData
1605
+ ): CancelablePromise<PropertyControllerDeleteResponse> {
1561
1606
  return __request(OpenAPI, {
1562
- method: 'POST',
1563
- url: '/api/v1/{region}/bean/commodities/bulk',
1607
+ method: 'DELETE',
1608
+ url: '/api/v1/admin/properties/{key}',
1564
1609
  path: {
1565
- region: data.region
1610
+ key: data.key
1611
+ },
1612
+ errors: {
1613
+ 401: 'Unauthorized',
1614
+ 403: 'Forbidden - insufficient permissions',
1615
+ 404: 'Property not found'
1566
1616
  }
1567
1617
  });
1568
1618
  }
1569
1619
  }
1570
1620
 
1571
- export class BeanPricesService {
1621
+ export class BeanPayeesService {
1572
1622
  /**
1573
- * Create a new price
1574
- * Creates a new price entry for the authenticated user
1623
+ * Create a new payee
1624
+ * Creates a new payee mapping for the authenticated user. The payee name must be unique within the user's account.
1575
1625
  * @param data The data for the request.
1576
- * @param data.region Region code for tenant context
1577
1626
  * @param data.requestBody
1578
- * @returns PriceResponseDto Price created successfully
1627
+ * @returns PayeeResponseDto Payee created successfully
1579
1628
  * @throws ApiError
1580
1629
  */
1581
- public static priceControllerCreate(
1582
- data: PriceControllerCreateData
1583
- ): CancelablePromise<PriceControllerCreateResponse> {
1630
+ public static payeeControllerCreate(
1631
+ data: PayeeControllerCreateData
1632
+ ): CancelablePromise<PayeeControllerCreateResponse> {
1584
1633
  return __request(OpenAPI, {
1585
1634
  method: 'POST',
1586
- url: '/api/v1/{region}/bean/prices',
1587
- path: {
1588
- region: data.region
1589
- },
1635
+ url: '/api/v1/bean/payees',
1590
1636
  body: data.requestBody,
1591
1637
  mediaType: 'application/json',
1592
1638
  errors: {
1593
- 404: 'Currency or quoteCurrency commodity not found',
1594
- 409: 'Price already exists for this currency pair and date'
1639
+ 400: 'Invalid input data',
1640
+ 409: 'Payee already exists'
1595
1641
  }
1596
1642
  });
1597
1643
  }
1598
1644
 
1599
1645
  /**
1600
- * List user prices
1601
- * Returns all price entries for the authenticated user with optional filtering
1646
+ * List user payees
1647
+ * Returns all payee mappings for the authenticated user with optional filtering
1602
1648
  * @param data The data for the request.
1603
- * @param data.region Region code for tenant context
1604
- * @param data.currency Filter by currency (e.g., BTC, AAPL, USD)
1605
- * @param data.quoteCurrency Filter by quote currency (pricing currency, e.g., USD, CNY)
1606
- * @param data.dateFrom Filter prices from this date (ISO 8601 format)
1607
- * @param data.dateTo Filter prices to this date (ISO 8601 format)
1608
- * @param data.search Search term for currency or quoteCurrency (case-insensitive partial match)
1609
- * @param data.page Page number for pagination (default: 1)
1610
- * @param data.limit Number of items per page (default: 20, max: 100)
1611
- * @returns PriceListResponseDto Prices retrieved successfully
1649
+ * @param data.search Search term for payee name (partial match, case-insensitive). Useful for autocomplete.
1650
+ * @param data.payee Filter by exact payee name match
1651
+ * @param data.category Filter by custom category
1652
+ * @param data.tag Filter by custom tag (returns payees that have this tag)
1653
+ * @param data.isActive Filter by active status. Defaults to true (show only active payees).
1654
+ * @returns PayeeListResponseDto Payees retrieved successfully
1612
1655
  * @throws ApiError
1613
1656
  */
1614
- public static priceControllerFindAll(
1615
- data: PriceControllerFindAllData
1616
- ): CancelablePromise<PriceControllerFindAllResponse> {
1657
+ public static payeeControllerFindAll(
1658
+ data: PayeeControllerFindAllData = {}
1659
+ ): CancelablePromise<PayeeControllerFindAllResponse> {
1617
1660
  return __request(OpenAPI, {
1618
1661
  method: 'GET',
1619
- url: '/api/v1/{region}/bean/prices',
1620
- path: {
1621
- region: data.region
1622
- },
1662
+ url: '/api/v1/bean/payees',
1623
1663
  query: {
1624
- currency: data.currency,
1625
- quoteCurrency: data.quoteCurrency,
1626
- dateFrom: data.dateFrom,
1627
- dateTo: data.dateTo,
1628
1664
  search: data.search,
1629
- page: data.page,
1630
- limit: data.limit
1665
+ payee: data.payee,
1666
+ category: data.category,
1667
+ tag: data.tag,
1668
+ isActive: data.isActive
1631
1669
  }
1632
1670
  });
1633
1671
  }
1634
1672
 
1635
1673
  /**
1636
- * Get price by ID
1637
- * Returns a single price entry by its ID
1674
+ * Get payee autocomplete suggestions
1675
+ * Returns active payee names matching the query, sorted by recent usage. Used for transaction input autocomplete.
1638
1676
  * @param data The data for the request.
1639
- * @param data.id Price ID
1640
- * @param data.region Region code for tenant context
1641
- * @returns PriceResponseDto Price retrieved successfully
1677
+ * @param data.q Search query for payee name (partial match, case-insensitive)
1678
+ * @param data.limit Maximum number of suggestions
1679
+ * @returns PayeeAutocompleteResponseDto Autocomplete suggestions retrieved successfully
1642
1680
  * @throws ApiError
1643
1681
  */
1644
- public static priceControllerFindOne(
1645
- data: PriceControllerFindOneData
1646
- ): CancelablePromise<PriceControllerFindOneResponse> {
1682
+ public static payeeControllerAutocomplete(
1683
+ data: PayeeControllerAutocompleteData
1684
+ ): CancelablePromise<PayeeControllerAutocompleteResponse> {
1647
1685
  return __request(OpenAPI, {
1648
1686
  method: 'GET',
1649
- url: '/api/v1/{region}/bean/prices/{id}',
1650
- path: {
1651
- id: data.id,
1652
- region: data.region
1653
- },
1654
- errors: {
1655
- 404: 'Price not found'
1687
+ url: '/api/v1/bean/payees/autocomplete',
1688
+ query: {
1689
+ q: data.q,
1690
+ limit: data.limit
1656
1691
  }
1657
1692
  });
1658
1693
  }
1659
1694
 
1660
1695
  /**
1661
- * Update a price
1662
- * Updates an existing price entry
1696
+ * Get top payees by usage
1697
+ * Returns the most frequently used payees, sorted by use count. Used for statistics and analytics.
1663
1698
  * @param data The data for the request.
1664
- * @param data.id Price ID
1665
- * @param data.region Region code for tenant context
1666
- * @param data.requestBody
1667
- * @returns PriceResponseDto Price updated successfully
1699
+ * @param data.limit Maximum number of results
1700
+ * @returns PayeeStatsResponseDto Top payees retrieved successfully
1668
1701
  * @throws ApiError
1669
1702
  */
1670
- public static priceControllerUpdate(
1671
- data: PriceControllerUpdateData
1672
- ): CancelablePromise<PriceControllerUpdateResponse> {
1703
+ public static payeeControllerGetTopPayees(
1704
+ data: PayeeControllerGetTopPayeesData = {}
1705
+ ): CancelablePromise<PayeeControllerGetTopPayeesResponse> {
1673
1706
  return __request(OpenAPI, {
1674
- method: 'PUT',
1675
- url: '/api/v1/{region}/bean/prices/{id}',
1676
- path: {
1677
- id: data.id,
1678
- region: data.region
1679
- },
1680
- body: data.requestBody,
1681
- mediaType: 'application/json',
1682
- errors: {
1683
- 404: 'Price not found',
1684
- 409: 'Updated price conflicts with existing price'
1707
+ method: 'GET',
1708
+ url: '/api/v1/bean/payees/top',
1709
+ query: {
1710
+ limit: data.limit
1685
1711
  }
1686
1712
  });
1687
1713
  }
1688
1714
 
1689
1715
  /**
1690
- * Delete a price
1691
- * Deletes a price entry (hard delete)
1716
+ * Get payee by ID
1717
+ * Returns a specific payee mapping by its UUID
1692
1718
  * @param data The data for the request.
1693
- * @param data.id Price ID
1694
- * @param data.region Region code for tenant context
1695
- * @returns void Price deleted successfully
1719
+ * @param data.id Payee UUID
1720
+ * @returns PayeeResponseDto Payee retrieved successfully
1696
1721
  * @throws ApiError
1697
1722
  */
1698
- public static priceControllerDelete(
1699
- data: PriceControllerDeleteData
1700
- ): CancelablePromise<PriceControllerDeleteResponse> {
1723
+ public static payeeControllerFindOne(
1724
+ data: PayeeControllerFindOneData
1725
+ ): CancelablePromise<PayeeControllerFindOneResponse> {
1701
1726
  return __request(OpenAPI, {
1702
- method: 'DELETE',
1703
- url: '/api/v1/{region}/bean/prices/{id}',
1727
+ method: 'GET',
1728
+ url: '/api/v1/bean/payees/{id}',
1704
1729
  path: {
1705
- id: data.id,
1706
- region: data.region
1730
+ id: data.id
1707
1731
  },
1708
1732
  errors: {
1709
- 404: 'Price not found'
1733
+ 403: 'Payee belongs to another user',
1734
+ 404: 'Payee not found'
1710
1735
  }
1711
1736
  });
1712
1737
  }
1713
1738
 
1714
1739
  /**
1715
- * Bulk create prices
1716
- * Creates multiple price entries at once (skips duplicates)
1740
+ * Update payee
1741
+ * Updates a payee mapping. The payee name cannot be changed after creation.
1717
1742
  * @param data The data for the request.
1718
- * @param data.region Region code for tenant context
1743
+ * @param data.id Payee UUID
1719
1744
  * @param data.requestBody
1720
- * @returns PriceResponseDto Prices created successfully
1745
+ * @returns PayeeResponseDto Payee updated successfully
1721
1746
  * @throws ApiError
1722
1747
  */
1723
- public static priceControllerBulkCreate(
1724
- data: PriceControllerBulkCreateData
1725
- ): CancelablePromise<PriceControllerBulkCreateResponse> {
1748
+ public static payeeControllerUpdate(
1749
+ data: PayeeControllerUpdateData
1750
+ ): CancelablePromise<PayeeControllerUpdateResponse> {
1726
1751
  return __request(OpenAPI, {
1727
- method: 'POST',
1728
- url: '/api/v1/{region}/bean/prices/bulk',
1752
+ method: 'PUT',
1753
+ url: '/api/v1/bean/payees/{id}',
1729
1754
  path: {
1730
- region: data.region
1755
+ id: data.id
1731
1756
  },
1732
1757
  body: data.requestBody,
1733
- mediaType: 'application/json'
1758
+ mediaType: 'application/json',
1759
+ errors: {
1760
+ 400: 'Invalid input data',
1761
+ 404: 'Payee not found'
1762
+ }
1734
1763
  });
1735
1764
  }
1736
- }
1737
1765
 
1738
- export class RecurringRulesService {
1739
1766
  /**
1740
- * Create a new recurring rule
1741
- * Creates a new recurring transaction rule for the authenticated user
1767
+ * Delete payee
1768
+ * Soft deletes a payee by marking it as inactive. Inactive payees will not appear in autocomplete suggestions.
1742
1769
  * @param data The data for the request.
1743
- * @param data.region Region code for tenant context
1744
- * @param data.requestBody
1745
- * @returns RecurringRuleResponseDto Rule created successfully
1770
+ * @param data.id Payee UUID
1771
+ * @returns void Payee deleted successfully
1746
1772
  * @throws ApiError
1747
1773
  */
1748
- public static recurringRuleControllerCreate(
1749
- data: RecurringRuleControllerCreateData
1750
- ): CancelablePromise<RecurringRuleControllerCreateResponse> {
1774
+ public static payeeControllerDelete(
1775
+ data: PayeeControllerDeleteData
1776
+ ): CancelablePromise<PayeeControllerDeleteResponse> {
1751
1777
  return __request(OpenAPI, {
1752
- method: 'POST',
1753
- url: '/api/v1/{region}/bean/recurring-rules',
1778
+ method: 'DELETE',
1779
+ url: '/api/v1/bean/payees/{id}',
1754
1780
  path: {
1755
- region: data.region
1781
+ id: data.id
1756
1782
  },
1757
- body: data.requestBody,
1758
- mediaType: 'application/json',
1759
1783
  errors: {
1760
- 400: 'Invalid input data (e.g., autoCreate without accounts)',
1761
- 409: 'Rule with same name already exists'
1784
+ 404: 'Payee not found'
1762
1785
  }
1763
1786
  });
1764
1787
  }
1788
+ }
1765
1789
 
1790
+ export class AdminPayeeProfilesService {
1766
1791
  /**
1767
- * List recurring rules
1768
- * Returns all recurring rules for the authenticated user with optional filtering
1792
+ * Create payee profile (Admin only)
1793
+ * Creates a new global payee profile. The canonical name must be unique (case-insensitive).
1769
1794
  * @param data The data for the request.
1770
- * @param data.region Region code for tenant context
1771
- * @param data.isActive Filter by active status
1772
- * @param data.frequency Filter by frequency (WEEKLY, MONTHLY, etc.)
1773
- * @param data.hasAutoCreate Filter by autoCreate enabled
1774
- * @returns RecurringRuleResponseDto Rules retrieved successfully
1795
+ * @param data.requestBody
1796
+ * @returns PayeeProfileResponseDto Payee profile created successfully
1775
1797
  * @throws ApiError
1776
1798
  */
1777
- public static recurringRuleControllerFindAll(
1778
- data: RecurringRuleControllerFindAllData
1779
- ): CancelablePromise<RecurringRuleControllerFindAllResponse> {
1799
+ public static payeeProfileAdminControllerCreate(
1800
+ data: PayeeProfileAdminControllerCreateData
1801
+ ): CancelablePromise<PayeeProfileAdminControllerCreateResponse> {
1780
1802
  return __request(OpenAPI, {
1781
- method: 'GET',
1782
- url: '/api/v1/{region}/bean/recurring-rules',
1783
- path: {
1784
- region: data.region
1785
- },
1786
- query: {
1787
- isActive: data.isActive,
1788
- frequency: data.frequency,
1789
- hasAutoCreate: data.hasAutoCreate
1803
+ method: 'POST',
1804
+ url: '/api/v1/admin/payee-profiles',
1805
+ body: data.requestBody,
1806
+ mediaType: 'application/json',
1807
+ errors: {
1808
+ 400: 'Validation failed',
1809
+ 403: 'Admin access required',
1810
+ 409: 'Payee profile already exists'
1790
1811
  }
1791
1812
  });
1792
1813
  }
1793
1814
 
1794
1815
  /**
1795
- * Create recurring rule from transaction
1796
- * Auto-creates a recurring rule using transaction data. User only confirms frequency.
1816
+ * List payee profiles (Admin only)
1817
+ * Returns all payee profiles with optional filtering by category, country, verification status, etc.
1797
1818
  * @param data The data for the request.
1798
- * @param data.transactionId Source transaction ID
1799
- * @param data.region Region code for tenant context
1800
- * @param data.requestBody
1801
- * @returns RecurringRuleResponseDto Rule created successfully
1819
+ * @param data.search Search term for canonical name and aliases (case-insensitive)
1820
+ * @param data.category Filter by category
1821
+ * @param data.country Filter by country (ISO 3166-1 alpha-2)
1822
+ * @param data.isActive Filter by active status (default: true - show only active)
1823
+ * @param data.verified Filter by verification status. true = verified only, false = unverified only
1824
+ * @param data.dataSource Filter by data source
1825
+ * @returns PayeeProfileListResponseDto Payee profiles retrieved successfully
1802
1826
  * @throws ApiError
1803
1827
  */
1804
- public static recurringRuleControllerCreateFromTransaction(
1805
- data: RecurringRuleControllerCreateFromTransactionData
1806
- ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
1828
+ public static payeeProfileAdminControllerFindAll(
1829
+ data: PayeeProfileAdminControllerFindAllData = {}
1830
+ ): CancelablePromise<PayeeProfileAdminControllerFindAllResponse> {
1807
1831
  return __request(OpenAPI, {
1808
- method: 'POST',
1809
- url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
1810
- path: {
1811
- transactionId: data.transactionId,
1812
- region: data.region
1832
+ method: 'GET',
1833
+ url: '/api/v1/admin/payee-profiles',
1834
+ query: {
1835
+ search: data.search,
1836
+ category: data.category,
1837
+ country: data.country,
1838
+ isActive: data.isActive,
1839
+ verified: data.verified,
1840
+ dataSource: data.dataSource
1813
1841
  },
1814
- body: data.requestBody,
1815
- mediaType: 'application/json',
1816
1842
  errors: {
1817
- 404: 'Transaction not found',
1818
- 409: 'Rule with same name already exists or transaction already linked'
1843
+ 403: 'Admin access required'
1819
1844
  }
1820
1845
  });
1821
1846
  }
1822
1847
 
1823
1848
  /**
1824
- * Get recurring rule by ID
1825
- * Returns a specific recurring rule with its details
1849
+ * Get payee profile by ID (Admin only)
1850
+ * Returns a single payee profile by its ID.
1826
1851
  * @param data The data for the request.
1827
- * @param data.id Rule ID
1828
- * @param data.region Region code for tenant context
1829
- * @returns RecurringRuleResponseDto Rule retrieved successfully
1852
+ * @param data.id Payee profile ID (UUID)
1853
+ * @returns PayeeProfileResponseDto Payee profile retrieved successfully
1830
1854
  * @throws ApiError
1831
1855
  */
1832
- public static recurringRuleControllerFindOne(
1833
- data: RecurringRuleControllerFindOneData
1834
- ): CancelablePromise<RecurringRuleControllerFindOneResponse> {
1856
+ public static payeeProfileAdminControllerFindOne(
1857
+ data: PayeeProfileAdminControllerFindOneData
1858
+ ): CancelablePromise<PayeeProfileAdminControllerFindOneResponse> {
1835
1859
  return __request(OpenAPI, {
1836
1860
  method: 'GET',
1837
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1861
+ url: '/api/v1/admin/payee-profiles/{id}',
1838
1862
  path: {
1839
- id: data.id,
1840
- region: data.region
1863
+ id: data.id
1841
1864
  },
1842
1865
  errors: {
1843
- 404: 'Rule not found'
1866
+ 403: 'Admin access required',
1867
+ 404: 'Payee profile not found'
1844
1868
  }
1845
1869
  });
1846
1870
  }
1847
1871
 
1848
1872
  /**
1849
- * Update recurring rule
1850
- * Updates an existing recurring rule
1873
+ * Update payee profile (Admin only)
1874
+ * Updates an existing payee profile. The canonical name cannot be changed.
1851
1875
  * @param data The data for the request.
1852
- * @param data.id Rule ID
1853
- * @param data.region Region code for tenant context
1876
+ * @param data.id Payee profile ID (UUID)
1854
1877
  * @param data.requestBody
1855
- * @returns RecurringRuleResponseDto Rule updated successfully
1878
+ * @returns PayeeProfileResponseDto Payee profile updated successfully
1856
1879
  * @throws ApiError
1857
1880
  */
1858
- public static recurringRuleControllerUpdate(
1859
- data: RecurringRuleControllerUpdateData
1860
- ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
1881
+ public static payeeProfileAdminControllerUpdate(
1882
+ data: PayeeProfileAdminControllerUpdateData
1883
+ ): CancelablePromise<PayeeProfileAdminControllerUpdateResponse> {
1861
1884
  return __request(OpenAPI, {
1862
- method: 'PATCH',
1863
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1885
+ method: 'PUT',
1886
+ url: '/api/v1/admin/payee-profiles/{id}',
1864
1887
  path: {
1865
- id: data.id,
1866
- region: data.region
1888
+ id: data.id
1867
1889
  },
1868
1890
  body: data.requestBody,
1869
1891
  mediaType: 'application/json',
1870
1892
  errors: {
1871
- 400: 'Invalid input data',
1872
- 404: 'Rule not found'
1893
+ 403: 'Admin access required',
1894
+ 404: 'Payee profile not found'
1873
1895
  }
1874
1896
  });
1875
1897
  }
1876
1898
 
1877
1899
  /**
1878
- * Delete recurring rule
1879
- * Soft deletes a recurring rule (sets isActive to false)
1900
+ * Soft delete payee profile (Admin only)
1901
+ * Marks a payee profile as inactive (soft delete). The profile cannot be deleted if it is referenced by user payees.
1880
1902
  * @param data The data for the request.
1881
- * @param data.id Rule ID
1882
- * @param data.region Region code for tenant context
1883
- * @returns void Rule deleted successfully
1903
+ * @param data.id Payee profile ID (UUID)
1904
+ * @returns void Payee profile deleted successfully
1884
1905
  * @throws ApiError
1885
1906
  */
1886
- public static recurringRuleControllerDelete(
1887
- data: RecurringRuleControllerDeleteData
1888
- ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
1907
+ public static payeeProfileAdminControllerDelete(
1908
+ data: PayeeProfileAdminControllerDeleteData
1909
+ ): CancelablePromise<PayeeProfileAdminControllerDeleteResponse> {
1889
1910
  return __request(OpenAPI, {
1890
1911
  method: 'DELETE',
1891
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1912
+ url: '/api/v1/admin/payee-profiles/{id}',
1892
1913
  path: {
1893
- id: data.id,
1894
- region: data.region
1914
+ id: data.id
1895
1915
  },
1896
1916
  errors: {
1897
- 404: 'Rule not found'
1917
+ 403: 'Admin access required',
1918
+ 404: 'Payee profile not found',
1919
+ 409: 'Payee profile is in use and cannot be deleted'
1898
1920
  }
1899
1921
  });
1900
1922
  }
1901
1923
 
1902
1924
  /**
1903
- * Get rule with statistics
1904
- * Returns a rule with pending/overdue counts and next expected date
1925
+ * Verify payee profile (Admin only)
1926
+ * Marks a payee profile as verified by setting verifiedAt to current timestamp.
1905
1927
  * @param data The data for the request.
1906
- * @param data.id Rule ID
1907
- * @param data.region Region code for tenant context
1908
- * @returns RecurringRuleWithStatsResponseDto Rule with stats retrieved successfully
1928
+ * @param data.id Payee profile ID (UUID)
1929
+ * @returns PayeeProfileResponseDto Payee profile verified successfully
1909
1930
  * @throws ApiError
1910
1931
  */
1911
- public static recurringRuleControllerGetWithStats(
1912
- data: RecurringRuleControllerGetWithStatsData
1913
- ): CancelablePromise<RecurringRuleControllerGetWithStatsResponse> {
1932
+ public static payeeProfileAdminControllerVerify(
1933
+ data: PayeeProfileAdminControllerVerifyData
1934
+ ): CancelablePromise<PayeeProfileAdminControllerVerifyResponse> {
1914
1935
  return __request(OpenAPI, {
1915
- method: 'GET',
1916
- url: '/api/v1/{region}/bean/recurring-rules/{id}/stats',
1936
+ method: 'POST',
1937
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1917
1938
  path: {
1918
- id: data.id,
1919
- region: data.region
1939
+ id: data.id
1920
1940
  },
1921
1941
  errors: {
1922
- 404: 'Rule not found'
1942
+ 403: 'Admin access required',
1943
+ 404: 'Payee profile not found'
1923
1944
  }
1924
1945
  });
1925
1946
  }
1926
- }
1927
1947
 
1928
- export class ExpectedTransactionsService {
1929
1948
  /**
1930
- * List expected transactions
1931
- * Returns expected transactions for the authenticated user with optional filtering
1949
+ * Unverify payee profile (Admin only)
1950
+ * Removes verification status by setting verifiedAt to null.
1932
1951
  * @param data The data for the request.
1933
- * @param data.region Region code for tenant context
1934
- * @param data.ruleId Filter by recurring rule ID
1935
- * @param data.status Filter by status (PENDING, COMPLETED, SKIPPED)
1936
- * @param data.fromDate Filter by date range start (YYYY-MM-DD)
1937
- * @param data.toDate Filter by date range end (YYYY-MM-DD)
1938
- * @returns ExpectedTransactionListResponseDto Expected transactions retrieved successfully
1952
+ * @param data.id Payee profile ID (UUID)
1953
+ * @returns void Payee profile unverified successfully
1939
1954
  * @throws ApiError
1940
1955
  */
1941
- public static expectedTransactionControllerFindAll(
1942
- data: ExpectedTransactionControllerFindAllData
1943
- ): CancelablePromise<ExpectedTransactionControllerFindAllResponse> {
1956
+ public static payeeProfileAdminControllerUnverify(
1957
+ data: PayeeProfileAdminControllerUnverifyData
1958
+ ): CancelablePromise<PayeeProfileAdminControllerUnverifyResponse> {
1944
1959
  return __request(OpenAPI, {
1945
- method: 'GET',
1946
- url: '/api/v1/{region}/bean/expected-transactions',
1960
+ method: 'DELETE',
1961
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1947
1962
  path: {
1948
- region: data.region
1963
+ id: data.id
1949
1964
  },
1950
- query: {
1951
- ruleId: data.ruleId,
1952
- status: data.status,
1953
- fromDate: data.fromDate,
1954
- toDate: data.toDate
1965
+ errors: {
1966
+ 403: 'Admin access required',
1967
+ 404: 'Payee profile not found'
1955
1968
  }
1956
1969
  });
1957
1970
  }
1971
+ }
1958
1972
 
1973
+ export class PayeeProfilesService {
1959
1974
  /**
1960
- * List overdue expected transactions
1961
- * Returns all overdue expected transactions (PENDING past tolerance)
1962
- * @param data The data for the request.
1963
- * @param data.region Region code for tenant context
1964
- * @returns ExpectedTransactionListResponseDto Overdue transactions retrieved successfully
1975
+ * List active payee profiles (directory dump)
1976
+ * 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.
1977
+ * @returns PayeeProfileDirectoryResponseDto Active payee profiles
1965
1978
  * @throws ApiError
1966
1979
  */
1967
- public static expectedTransactionControllerFindOverdue(
1968
- data: ExpectedTransactionControllerFindOverdueData
1969
- ): CancelablePromise<ExpectedTransactionControllerFindOverdueResponse> {
1980
+ public static payeeProfileControllerListActive(): CancelablePromise<PayeeProfileControllerListActiveResponse> {
1970
1981
  return __request(OpenAPI, {
1971
1982
  method: 'GET',
1972
- url: '/api/v1/{region}/bean/expected-transactions/overdue',
1973
- path: {
1974
- region: data.region
1983
+ url: '/api/v1/bean/payee-profiles',
1984
+ errors: {
1985
+ 401: 'Missing or invalid token'
1975
1986
  }
1976
1987
  });
1977
1988
  }
1989
+ }
1978
1990
 
1991
+ export class BeanCommoditiesService {
1979
1992
  /**
1980
- * Get expected transaction by ID
1981
- * Returns a specific expected transaction with rule details
1993
+ * Create a new commodity
1994
+ * Creates a new commodity definition for the authenticated user
1982
1995
  * @param data The data for the request.
1983
- * @param data.id Expected transaction ID
1984
1996
  * @param data.region Region code for tenant context
1985
- * @returns ExpectedTransactionResponseDto Expected transaction retrieved successfully
1997
+ * @param data.requestBody
1998
+ * @returns CommodityResponseDto Commodity created successfully
1986
1999
  * @throws ApiError
1987
2000
  */
1988
- public static expectedTransactionControllerFindOne(
1989
- data: ExpectedTransactionControllerFindOneData
1990
- ): CancelablePromise<ExpectedTransactionControllerFindOneResponse> {
2001
+ public static commodityControllerCreate(
2002
+ data: CommodityControllerCreateData
2003
+ ): CancelablePromise<CommodityControllerCreateResponse> {
1991
2004
  return __request(OpenAPI, {
1992
- method: 'GET',
1993
- url: '/api/v1/{region}/bean/expected-transactions/{id}',
2005
+ method: 'POST',
2006
+ url: '/api/v1/{region}/bean/commodities',
1994
2007
  path: {
1995
- id: data.id,
1996
2008
  region: data.region
1997
2009
  },
2010
+ body: data.requestBody,
2011
+ mediaType: 'application/json',
1998
2012
  errors: {
1999
- 404: 'Expected transaction not found'
2013
+ 400: 'Invalid input data',
2014
+ 409: 'Commodity already exists'
2000
2015
  }
2001
2016
  });
2002
2017
  }
2003
2018
 
2004
2019
  /**
2005
- * Skip expected transaction
2006
- * Marks an expected transaction as skipped (PENDING -> SKIPPED)
2020
+ * List user commodities
2021
+ * Returns all commodity definitions for the authenticated user with optional filtering
2007
2022
  * @param data The data for the request.
2008
- * @param data.id Expected transaction ID
2009
2023
  * @param data.region Region code for tenant context
2010
- * @returns ExpectedTransactionResponseDto Expected transaction skipped successfully
2024
+ * @param data.search Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
2025
+ * @param data.symbol Filter by exact symbol match
2026
+ * @returns CommodityListResponseDto Commodities retrieved successfully
2011
2027
  * @throws ApiError
2012
2028
  */
2013
- public static expectedTransactionControllerSkip(
2014
- data: ExpectedTransactionControllerSkipData
2015
- ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
2029
+ public static commodityControllerFindAll(
2030
+ data: CommodityControllerFindAllData
2031
+ ): CancelablePromise<CommodityControllerFindAllResponse> {
2016
2032
  return __request(OpenAPI, {
2017
- method: 'POST',
2018
- url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2033
+ method: 'GET',
2034
+ url: '/api/v1/{region}/bean/commodities',
2019
2035
  path: {
2020
- id: data.id,
2021
2036
  region: data.region
2022
2037
  },
2023
- errors: {
2024
- 400: 'Cannot skip - not in PENDING status',
2025
- 404: 'Expected transaction not found'
2038
+ query: {
2039
+ search: data.search,
2040
+ symbol: data.symbol
2026
2041
  }
2027
2042
  });
2028
2043
  }
2029
2044
 
2030
2045
  /**
2031
- * Undo skip
2032
- * Reverses a skip operation (SKIPPED -> PENDING)
2046
+ * Get commodity by symbol
2047
+ * Returns a specific commodity definition by its symbol
2033
2048
  * @param data The data for the request.
2034
- * @param data.id Expected transaction ID
2049
+ * @param data.symbol Commodity symbol
2035
2050
  * @param data.region Region code for tenant context
2036
- * @returns ExpectedTransactionResponseDto Skip undone successfully
2051
+ * @returns CommodityResponseDto Commodity retrieved successfully
2037
2052
  * @throws ApiError
2038
2053
  */
2039
- public static expectedTransactionControllerUndoSkip(
2040
- data: ExpectedTransactionControllerUndoSkipData
2041
- ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
2054
+ public static commodityControllerFindOne(
2055
+ data: CommodityControllerFindOneData
2056
+ ): CancelablePromise<CommodityControllerFindOneResponse> {
2042
2057
  return __request(OpenAPI, {
2043
- method: 'DELETE',
2044
- url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2058
+ method: 'GET',
2059
+ url: '/api/v1/{region}/bean/commodities/{symbol}',
2045
2060
  path: {
2046
- id: data.id,
2061
+ symbol: data.symbol,
2047
2062
  region: data.region
2048
2063
  },
2049
2064
  errors: {
2050
- 400: 'Cannot undo - not in SKIPPED status',
2051
- 404: 'Expected transaction not found'
2065
+ 404: 'Commodity not found'
2052
2066
  }
2053
2067
  });
2054
2068
  }
2055
2069
 
2056
2070
  /**
2057
- * Confirm transaction match
2058
- * Manually matches an expected transaction with an actual transaction
2071
+ * Update commodity
2072
+ * Updates an existing commodity definition. Symbol cannot be changed.
2059
2073
  * @param data The data for the request.
2060
- * @param data.id Expected transaction ID
2074
+ * @param data.symbol Commodity symbol
2061
2075
  * @param data.region Region code for tenant context
2062
2076
  * @param data.requestBody
2063
- * @returns unknown Match confirmed successfully
2077
+ * @returns CommodityResponseDto Commodity updated successfully
2064
2078
  * @throws ApiError
2065
2079
  */
2066
- public static expectedTransactionControllerConfirmMatch(
2067
- data: ExpectedTransactionControllerConfirmMatchData
2068
- ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
2080
+ public static commodityControllerUpdate(
2081
+ data: CommodityControllerUpdateData
2082
+ ): CancelablePromise<CommodityControllerUpdateResponse> {
2069
2083
  return __request(OpenAPI, {
2070
- method: 'POST',
2071
- url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2084
+ method: 'PUT',
2085
+ url: '/api/v1/{region}/bean/commodities/{symbol}',
2072
2086
  path: {
2073
- id: data.id,
2087
+ symbol: data.symbol,
2074
2088
  region: data.region
2075
2089
  },
2076
2090
  body: data.requestBody,
2077
2091
  mediaType: 'application/json',
2078
2092
  errors: {
2079
- 400: 'Cannot match - not in PENDING status',
2080
- 404: 'Expected or actual transaction not found',
2081
- 409: 'Actual transaction already matched to another rule'
2093
+ 400: 'Invalid input data',
2094
+ 404: 'Commodity not found'
2082
2095
  }
2083
2096
  });
2084
2097
  }
2085
2098
 
2086
2099
  /**
2087
- * Unmatch transaction
2088
- * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
2100
+ * Delete commodity
2101
+ * Deletes a commodity definition
2089
2102
  * @param data The data for the request.
2090
- * @param data.id Expected transaction ID
2103
+ * @param data.symbol Commodity symbol
2091
2104
  * @param data.region Region code for tenant context
2092
- * @returns unknown Match removed successfully
2105
+ * @returns void Commodity deleted successfully
2093
2106
  * @throws ApiError
2094
2107
  */
2095
- public static expectedTransactionControllerUnmatch(
2096
- data: ExpectedTransactionControllerUnmatchData
2097
- ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
2108
+ public static commodityControllerDelete(
2109
+ data: CommodityControllerDeleteData
2110
+ ): CancelablePromise<CommodityControllerDeleteResponse> {
2098
2111
  return __request(OpenAPI, {
2099
2112
  method: 'DELETE',
2100
- url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2113
+ url: '/api/v1/{region}/bean/commodities/{symbol}',
2101
2114
  path: {
2102
- id: data.id,
2115
+ symbol: data.symbol,
2103
2116
  region: data.region
2104
2117
  },
2105
2118
  errors: {
2106
- 400: 'Cannot unmatch - not in COMPLETED status',
2107
- 404: 'Expected transaction not found'
2119
+ 404: 'Commodity not found'
2108
2120
  }
2109
2121
  });
2110
2122
  }
2111
2123
 
2112
2124
  /**
2113
- * Enter Now
2114
- * Creates an actual transaction for an expected transaction (YNAB-style Enter Now)
2125
+ * Ensure commodity exists
2126
+ * Gets existing commodity or creates it with automatic initialization from OpenBB
2115
2127
  * @param data The data for the request.
2116
- * @param data.id Expected transaction ID
2128
+ * @param data.symbol Commodity symbol
2117
2129
  * @param data.region Region code for tenant context
2118
- * @param data.requestBody
2119
- * @returns unknown Transaction created successfully
2130
+ * @returns CommodityResponseDto Commodity retrieved or created
2120
2131
  * @throws ApiError
2121
2132
  */
2122
- public static expectedTransactionControllerEnterNow(
2123
- data: ExpectedTransactionControllerEnterNowData
2124
- ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
2133
+ public static commodityControllerGetOrCreate(
2134
+ data: CommodityControllerGetOrCreateData
2135
+ ): CancelablePromise<CommodityControllerGetOrCreateResponse> {
2125
2136
  return __request(OpenAPI, {
2126
2137
  method: 'POST',
2127
- url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
2138
+ url: '/api/v1/{region}/bean/commodities/{symbol}/ensure',
2128
2139
  path: {
2129
- id: data.id,
2140
+ symbol: data.symbol,
2130
2141
  region: data.region
2131
- },
2132
- body: data.requestBody,
2133
- mediaType: 'application/json',
2134
- errors: {
2135
- 400: 'Cannot enter - not in PENDING status or missing accounts',
2136
- 404: 'Expected transaction or accounts not found'
2137
2142
  }
2138
2143
  });
2139
2144
  }
2140
- }
2141
2145
 
2142
- export class RecurringForecastService {
2143
2146
  /**
2144
- * Get cash flow forecast
2145
- * Returns predicted outflows for the next N months based on active recurring rules
2147
+ * Bulk create commodities
2148
+ * Creates multiple commodities from a list of symbols, useful for initialization
2146
2149
  * @param data The data for the request.
2147
2150
  * @param data.region Region code for tenant context
2148
- * @param data.months Number of months to forecast (1-12, default 3)
2149
- * @returns ForecastResponseDto Forecast retrieved successfully
2151
+ * @returns CommodityResponseDto Commodities created successfully
2150
2152
  * @throws ApiError
2151
2153
  */
2152
- public static forecastControllerGetForecast(
2153
- data: ForecastControllerGetForecastData
2154
- ): CancelablePromise<ForecastControllerGetForecastResponse> {
2154
+ public static commodityControllerBulkCreate(
2155
+ data: CommodityControllerBulkCreateData
2156
+ ): CancelablePromise<CommodityControllerBulkCreateResponse> {
2155
2157
  return __request(OpenAPI, {
2156
- method: 'GET',
2157
- url: '/api/v1/{region}/bean/recurring/forecast',
2158
+ method: 'POST',
2159
+ url: '/api/v1/{region}/bean/commodities/bulk',
2158
2160
  path: {
2159
2161
  region: data.region
2160
- },
2161
- query: {
2162
- months: data.months
2163
2162
  }
2164
2163
  });
2165
2164
  }
@@ -2322,534 +2321,626 @@ export class ReportingService {
2322
2321
  }
2323
2322
  }
2324
2323
 
2325
- export class UsersService {
2324
+ export class BeanPricesService {
2326
2325
  /**
2327
- * Delete own user account
2326
+ * Create a new price
2327
+ * Creates a new price entry for the authenticated user
2328
2328
  * @param data The data for the request.
2329
+ * @param data.region Region code for tenant context
2329
2330
  * @param data.requestBody
2330
- * @returns void User deleted successfully
2331
+ * @returns PriceResponseDto Price created successfully
2331
2332
  * @throws ApiError
2332
2333
  */
2333
- public static userControllerDeleteOwnUser(
2334
- data: UserControllerDeleteOwnUserData
2335
- ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
2334
+ public static priceControllerCreate(
2335
+ data: PriceControllerCreateData
2336
+ ): CancelablePromise<PriceControllerCreateResponse> {
2336
2337
  return __request(OpenAPI, {
2337
- method: 'DELETE',
2338
- url: '/api/v1/users',
2338
+ method: 'POST',
2339
+ url: '/api/v1/{region}/bean/prices',
2340
+ path: {
2341
+ region: data.region
2342
+ },
2339
2343
  body: data.requestBody,
2340
2344
  mediaType: 'application/json',
2341
2345
  errors: {
2342
- 403: 'Invalid access token'
2346
+ 404: 'Currency or quoteCurrency commodity not found',
2347
+ 409: 'Price already exists for this currency pair and date'
2343
2348
  }
2344
2349
  });
2345
2350
  }
2346
2351
 
2347
2352
  /**
2348
- * Get current authenticated user
2353
+ * List user prices
2354
+ * Returns all price entries for the authenticated user with optional filtering
2349
2355
  * @param data The data for the request.
2350
- * @param data.acceptLanguage
2351
- * @returns unknown User retrieved successfully
2356
+ * @param data.region Region code for tenant context
2357
+ * @param data.currency Filter by currency (e.g., BTC, AAPL, USD)
2358
+ * @param data.quoteCurrency Filter by quote currency (pricing currency, e.g., USD, CNY)
2359
+ * @param data.dateFrom Filter prices from this date (ISO 8601 format)
2360
+ * @param data.dateTo Filter prices to this date (ISO 8601 format)
2361
+ * @param data.search Search term for currency or quoteCurrency (case-insensitive partial match)
2362
+ * @param data.page Page number for pagination (default: 1)
2363
+ * @param data.limit Number of items per page (default: 20, max: 100)
2364
+ * @returns PriceListResponseDto Prices retrieved successfully
2352
2365
  * @throws ApiError
2353
2366
  */
2354
- public static userControllerGetUser(
2355
- data: UserControllerGetUserData
2356
- ): CancelablePromise<UserControllerGetUserResponse> {
2367
+ public static priceControllerFindAll(
2368
+ data: PriceControllerFindAllData
2369
+ ): CancelablePromise<PriceControllerFindAllResponse> {
2357
2370
  return __request(OpenAPI, {
2358
2371
  method: 'GET',
2359
- url: '/api/v1/users',
2360
- headers: {
2361
- 'accept-language': data.acceptLanguage
2372
+ url: '/api/v1/{region}/bean/prices',
2373
+ path: {
2374
+ region: data.region
2375
+ },
2376
+ query: {
2377
+ currency: data.currency,
2378
+ quoteCurrency: data.quoteCurrency,
2379
+ dateFrom: data.dateFrom,
2380
+ dateTo: data.dateTo,
2381
+ search: data.search,
2382
+ page: data.page,
2383
+ limit: data.limit
2362
2384
  }
2363
2385
  });
2364
2386
  }
2365
2387
 
2366
2388
  /**
2367
- * Sign up new user
2368
- * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
2389
+ * Get price by ID
2390
+ * Returns a single price entry by its ID
2391
+ * @param data The data for the request.
2392
+ * @param data.id Price ID
2393
+ * @param data.region Region code for tenant context
2394
+ * @returns PriceResponseDto Price retrieved successfully
2395
+ * @throws ApiError
2396
+ */
2397
+ public static priceControllerFindOne(
2398
+ data: PriceControllerFindOneData
2399
+ ): CancelablePromise<PriceControllerFindOneResponse> {
2400
+ return __request(OpenAPI, {
2401
+ method: 'GET',
2402
+ url: '/api/v1/{region}/bean/prices/{id}',
2403
+ path: {
2404
+ id: data.id,
2405
+ region: data.region
2406
+ },
2407
+ errors: {
2408
+ 404: 'Price not found'
2409
+ }
2410
+ });
2411
+ }
2412
+
2413
+ /**
2414
+ * Update a price
2415
+ * Updates an existing price entry
2369
2416
  * @param data The data for the request.
2417
+ * @param data.id Price ID
2418
+ * @param data.region Region code for tenant context
2370
2419
  * @param data.requestBody
2371
- * @returns SignupResponseDto User created successfully
2420
+ * @returns PriceResponseDto Price updated successfully
2372
2421
  * @throws ApiError
2373
2422
  */
2374
- public static userControllerSignupUser(
2375
- data: UserControllerSignupUserData
2376
- ): CancelablePromise<UserControllerSignupUserResponse> {
2423
+ public static priceControllerUpdate(
2424
+ data: PriceControllerUpdateData
2425
+ ): CancelablePromise<PriceControllerUpdateResponse> {
2377
2426
  return __request(OpenAPI, {
2378
- method: 'POST',
2379
- url: '/api/v1/users',
2427
+ method: 'PUT',
2428
+ url: '/api/v1/{region}/bean/prices/{id}',
2429
+ path: {
2430
+ id: data.id,
2431
+ region: data.region
2432
+ },
2380
2433
  body: data.requestBody,
2381
2434
  mediaType: 'application/json',
2382
2435
  errors: {
2383
- 400: 'Invalid Turnstile token (when Turnstile is enabled)',
2384
- 403: 'User signup is disabled'
2436
+ 404: 'Price not found',
2437
+ 409: 'Updated price conflicts with existing price'
2385
2438
  }
2386
2439
  });
2387
2440
  }
2388
2441
 
2389
2442
  /**
2390
- * Delete user by ID (admin only)
2443
+ * Delete a price
2444
+ * Deletes a price entry (hard delete)
2391
2445
  * @param data The data for the request.
2392
- * @param data.id User ID to delete
2393
- * @returns void User deleted successfully
2446
+ * @param data.id Price ID
2447
+ * @param data.region Region code for tenant context
2448
+ * @returns void Price deleted successfully
2394
2449
  * @throws ApiError
2395
2450
  */
2396
- public static userControllerDeleteUser(
2397
- data: UserControllerDeleteUserData
2398
- ): CancelablePromise<UserControllerDeleteUserResponse> {
2451
+ public static priceControllerDelete(
2452
+ data: PriceControllerDeleteData
2453
+ ): CancelablePromise<PriceControllerDeleteResponse> {
2399
2454
  return __request(OpenAPI, {
2400
2455
  method: 'DELETE',
2401
- url: '/api/v1/users/{id}',
2456
+ url: '/api/v1/{region}/bean/prices/{id}',
2402
2457
  path: {
2403
- id: data.id
2458
+ id: data.id,
2459
+ region: data.region
2404
2460
  },
2405
2461
  errors: {
2406
- 403: 'Cannot delete own account or insufficient permissions'
2462
+ 404: 'Price not found'
2407
2463
  }
2408
2464
  });
2409
2465
  }
2410
2466
 
2411
2467
  /**
2412
- * Get user info by user ID
2468
+ * Bulk create prices
2469
+ * Creates multiple price entries at once (skips duplicates)
2413
2470
  * @param data The data for the request.
2414
- * @param data.id User ID
2415
- * @returns unknown User info retrieved successfully
2471
+ * @param data.region Region code for tenant context
2472
+ * @param data.requestBody
2473
+ * @returns PriceResponseDto Prices created successfully
2416
2474
  * @throws ApiError
2417
2475
  */
2418
- public static userControllerGetUserInfo(
2419
- data: UserControllerGetUserInfoData
2420
- ): CancelablePromise<UserControllerGetUserInfoResponse> {
2476
+ public static priceControllerBulkCreate(
2477
+ data: PriceControllerBulkCreateData
2478
+ ): CancelablePromise<PriceControllerBulkCreateResponse> {
2421
2479
  return __request(OpenAPI, {
2422
- method: 'GET',
2423
- url: '/api/v1/users/{id}/info',
2480
+ method: 'POST',
2481
+ url: '/api/v1/{region}/bean/prices/bulk',
2424
2482
  path: {
2425
- id: data.id
2483
+ region: data.region
2426
2484
  },
2427
- errors: {
2428
- 403: 'Cannot access other user info without admin permission'
2429
- }
2485
+ body: data.requestBody,
2486
+ mediaType: 'application/json'
2430
2487
  });
2431
2488
  }
2489
+ }
2432
2490
 
2491
+ export class RecurringRulesService {
2433
2492
  /**
2434
- * Update user settings
2493
+ * Create a new recurring rule
2494
+ * Creates a new recurring transaction rule for the authenticated user
2435
2495
  * @param data The data for the request.
2496
+ * @param data.region Region code for tenant context
2436
2497
  * @param data.requestBody
2437
- * @returns unknown Settings updated successfully
2498
+ * @returns RecurringRuleResponseDto Rule created successfully
2438
2499
  * @throws ApiError
2439
2500
  */
2440
- public static userControllerUpdateUserSetting(
2441
- data: UserControllerUpdateUserSettingData
2442
- ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
2501
+ public static recurringRuleControllerCreate(
2502
+ data: RecurringRuleControllerCreateData
2503
+ ): CancelablePromise<RecurringRuleControllerCreateResponse> {
2443
2504
  return __request(OpenAPI, {
2444
- method: 'PUT',
2445
- url: '/api/v1/users/setting',
2505
+ method: 'POST',
2506
+ url: '/api/v1/{region}/bean/recurring-rules',
2507
+ path: {
2508
+ region: data.region
2509
+ },
2446
2510
  body: data.requestBody,
2447
2511
  mediaType: 'application/json',
2448
2512
  errors: {
2449
- 403: 'Insufficient permissions'
2513
+ 400: 'Invalid input data (e.g., autoCreate without accounts)',
2514
+ 409: 'Rule with same name already exists'
2450
2515
  }
2451
2516
  });
2452
2517
  }
2453
2518
 
2454
2519
  /**
2455
- * Get all user settings paginated (admin only)
2520
+ * List recurring rules
2521
+ * Returns all recurring rules for the authenticated user with optional filtering
2456
2522
  * @param data The data for the request.
2457
- * @param data.pageNo Page number
2458
- * @param data.pageSize Page size
2459
- * @returns unknown Settings list retrieved successfully
2523
+ * @param data.region Region code for tenant context
2524
+ * @param data.isActive Filter by active status
2525
+ * @param data.frequency Filter by frequency (WEEKLY, MONTHLY, etc.)
2526
+ * @param data.hasAutoCreate Filter by autoCreate enabled
2527
+ * @returns RecurringRuleResponseDto Rules retrieved successfully
2460
2528
  * @throws ApiError
2461
2529
  */
2462
- public static userControllerGetAllUserSettingsByPage(
2463
- data: UserControllerGetAllUserSettingsByPageData
2464
- ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
2530
+ public static recurringRuleControllerFindAll(
2531
+ data: RecurringRuleControllerFindAllData
2532
+ ): CancelablePromise<RecurringRuleControllerFindAllResponse> {
2465
2533
  return __request(OpenAPI, {
2466
2534
  method: 'GET',
2467
- url: '/api/v1/users/settings-by-page',
2535
+ url: '/api/v1/{region}/bean/recurring-rules',
2536
+ path: {
2537
+ region: data.region
2538
+ },
2468
2539
  query: {
2469
- pageNo: data.pageNo,
2470
- pageSize: data.pageSize
2540
+ isActive: data.isActive,
2541
+ frequency: data.frequency,
2542
+ hasAutoCreate: data.hasAutoCreate
2471
2543
  }
2472
2544
  });
2473
2545
  }
2474
2546
 
2475
2547
  /**
2476
- * Get asset and liability summary for current user
2477
- * @returns unknown Summary retrieved successfully
2548
+ * Create recurring rule from transaction
2549
+ * Auto-creates a recurring rule using transaction data. User only confirms frequency.
2550
+ * @param data The data for the request.
2551
+ * @param data.transactionId Source transaction ID
2552
+ * @param data.region Region code for tenant context
2553
+ * @param data.requestBody
2554
+ * @returns RecurringRuleResponseDto Rule created successfully
2478
2555
  * @throws ApiError
2479
2556
  */
2480
- public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
2557
+ public static recurringRuleControllerCreateFromTransaction(
2558
+ data: RecurringRuleControllerCreateFromTransactionData
2559
+ ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
2481
2560
  return __request(OpenAPI, {
2482
- method: 'GET',
2483
- url: '/api/v1/users/asset-liability-summary'
2561
+ method: 'POST',
2562
+ url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
2563
+ path: {
2564
+ transactionId: data.transactionId,
2565
+ region: data.region
2566
+ },
2567
+ body: data.requestBody,
2568
+ mediaType: 'application/json',
2569
+ errors: {
2570
+ 404: 'Transaction not found',
2571
+ 409: 'Rule with same name already exists or transaction already linked'
2572
+ }
2484
2573
  });
2485
2574
  }
2486
- }
2487
2575
 
2488
- export class PropertiesService {
2489
2576
  /**
2490
- * Get all system properties
2491
- * @returns unknown Properties retrieved successfully
2577
+ * Get recurring rule by ID
2578
+ * Returns a specific recurring rule with its details
2579
+ * @param data The data for the request.
2580
+ * @param data.id Rule ID
2581
+ * @param data.region Region code for tenant context
2582
+ * @returns RecurringRuleResponseDto Rule retrieved successfully
2492
2583
  * @throws ApiError
2493
2584
  */
2494
- public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
2585
+ public static recurringRuleControllerFindOne(
2586
+ data: RecurringRuleControllerFindOneData
2587
+ ): CancelablePromise<RecurringRuleControllerFindOneResponse> {
2495
2588
  return __request(OpenAPI, {
2496
2589
  method: 'GET',
2497
- url: '/api/v1/admin/properties',
2590
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2591
+ path: {
2592
+ id: data.id,
2593
+ region: data.region
2594
+ },
2498
2595
  errors: {
2499
- 401: 'Unauthorized',
2500
- 403: 'Forbidden - insufficient permissions'
2596
+ 404: 'Rule not found'
2501
2597
  }
2502
2598
  });
2503
2599
  }
2504
2600
 
2505
2601
  /**
2506
- * Get property by key
2602
+ * Update recurring rule
2603
+ * Updates an existing recurring rule
2507
2604
  * @param data The data for the request.
2508
- * @param data.key Property key
2509
- * @returns unknown Property retrieved successfully
2605
+ * @param data.id Rule ID
2606
+ * @param data.region Region code for tenant context
2607
+ * @param data.requestBody
2608
+ * @returns RecurringRuleResponseDto Rule updated successfully
2510
2609
  * @throws ApiError
2511
2610
  */
2512
- public static propertyControllerGetByKey(
2513
- data: PropertyControllerGetByKeyData
2514
- ): CancelablePromise<PropertyControllerGetByKeyResponse> {
2611
+ public static recurringRuleControllerUpdate(
2612
+ data: RecurringRuleControllerUpdateData
2613
+ ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
2515
2614
  return __request(OpenAPI, {
2516
- method: 'GET',
2517
- url: '/api/v1/admin/properties/{key}',
2615
+ method: 'PATCH',
2616
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2518
2617
  path: {
2519
- key: data.key
2618
+ id: data.id,
2619
+ region: data.region
2520
2620
  },
2621
+ body: data.requestBody,
2622
+ mediaType: 'application/json',
2521
2623
  errors: {
2522
- 401: 'Unauthorized',
2523
- 403: 'Forbidden - insufficient permissions',
2524
- 404: 'Property not found'
2624
+ 400: 'Invalid input data',
2625
+ 404: 'Rule not found'
2525
2626
  }
2526
2627
  });
2527
2628
  }
2528
2629
 
2529
2630
  /**
2530
- * Update a system property
2631
+ * Delete recurring rule
2632
+ * Soft deletes a recurring rule (sets isActive to false)
2531
2633
  * @param data The data for the request.
2532
- * @param data.key Property key
2533
- * @param data.requestBody
2534
- * @returns unknown Property updated successfully
2634
+ * @param data.id Rule ID
2635
+ * @param data.region Region code for tenant context
2636
+ * @returns void Rule deleted successfully
2535
2637
  * @throws ApiError
2536
2638
  */
2537
- public static propertyControllerUpdate(
2538
- data: PropertyControllerUpdateData
2539
- ): CancelablePromise<PropertyControllerUpdateResponse> {
2639
+ public static recurringRuleControllerDelete(
2640
+ data: RecurringRuleControllerDeleteData
2641
+ ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
2540
2642
  return __request(OpenAPI, {
2541
- method: 'PUT',
2542
- url: '/api/v1/admin/properties/{key}',
2643
+ method: 'DELETE',
2644
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2543
2645
  path: {
2544
- key: data.key
2646
+ id: data.id,
2647
+ region: data.region
2545
2648
  },
2546
- body: data.requestBody,
2547
- mediaType: 'application/json',
2548
2649
  errors: {
2549
- 401: 'Unauthorized',
2550
- 403: 'Forbidden - insufficient permissions'
2650
+ 404: 'Rule not found'
2551
2651
  }
2552
2652
  });
2553
2653
  }
2554
2654
 
2555
2655
  /**
2556
- * Delete a system property
2656
+ * Get rule with statistics
2657
+ * Returns a rule with pending/overdue counts and next expected date
2557
2658
  * @param data The data for the request.
2558
- * @param data.key Property key
2559
- * @returns void Property deleted successfully
2659
+ * @param data.id Rule ID
2660
+ * @param data.region Region code for tenant context
2661
+ * @returns RecurringRuleWithStatsResponseDto Rule with stats retrieved successfully
2560
2662
  * @throws ApiError
2561
2663
  */
2562
- public static propertyControllerDelete(
2563
- data: PropertyControllerDeleteData
2564
- ): CancelablePromise<PropertyControllerDeleteResponse> {
2664
+ public static recurringRuleControllerGetWithStats(
2665
+ data: RecurringRuleControllerGetWithStatsData
2666
+ ): CancelablePromise<RecurringRuleControllerGetWithStatsResponse> {
2565
2667
  return __request(OpenAPI, {
2566
- method: 'DELETE',
2567
- url: '/api/v1/admin/properties/{key}',
2668
+ method: 'GET',
2669
+ url: '/api/v1/{region}/bean/recurring-rules/{id}/stats',
2568
2670
  path: {
2569
- key: data.key
2671
+ id: data.id,
2672
+ region: data.region
2570
2673
  },
2571
2674
  errors: {
2572
- 401: 'Unauthorized',
2573
- 403: 'Forbidden - insufficient permissions',
2574
- 404: 'Property not found'
2675
+ 404: 'Rule not found'
2575
2676
  }
2576
2677
  });
2577
2678
  }
2578
2679
  }
2579
2680
 
2580
- export class BeanTransactionRulesService {
2681
+ export class ExpectedTransactionsService {
2581
2682
  /**
2582
- * Create a new transaction rule (or upsert if upsertByPayee=true)
2583
- * Creates a new rule. If upsertByPayee=true, updates existing rule matching payeeKeywords[0] instead of creating duplicate.
2683
+ * List expected transactions
2684
+ * Returns expected transactions for the authenticated user with optional filtering
2584
2685
  * @param data The data for the request.
2585
2686
  * @param data.region Region code for tenant context
2586
- * @param data.requestBody
2587
- * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
2687
+ * @param data.ruleId Filter by recurring rule ID
2688
+ * @param data.status Filter by status (PENDING, COMPLETED, SKIPPED)
2689
+ * @param data.fromDate Filter by date range start (YYYY-MM-DD)
2690
+ * @param data.toDate Filter by date range end (YYYY-MM-DD)
2691
+ * @returns ExpectedTransactionListResponseDto Expected transactions retrieved successfully
2588
2692
  * @throws ApiError
2589
2693
  */
2590
- public static transactionRuleControllerCreate(
2591
- data: TransactionRuleControllerCreateData
2592
- ): CancelablePromise<TransactionRuleControllerCreateResponse> {
2694
+ public static expectedTransactionControllerFindAll(
2695
+ data: ExpectedTransactionControllerFindAllData
2696
+ ): CancelablePromise<ExpectedTransactionControllerFindAllResponse> {
2593
2697
  return __request(OpenAPI, {
2594
- method: 'POST',
2595
- url: '/api/v1/{region}/bean/transaction-rules',
2698
+ method: 'GET',
2699
+ url: '/api/v1/{region}/bean/expected-transactions',
2596
2700
  path: {
2597
2701
  region: data.region
2598
2702
  },
2599
- body: data.requestBody,
2600
- mediaType: 'application/json',
2601
- errors: {
2602
- 400: 'Validation failed',
2603
- 401: 'Unauthorized',
2604
- 409: 'Resource conflict - another process is updating this rule'
2703
+ query: {
2704
+ ruleId: data.ruleId,
2705
+ status: data.status,
2706
+ fromDate: data.fromDate,
2707
+ toDate: data.toDate
2605
2708
  }
2606
2709
  });
2607
2710
  }
2608
2711
 
2609
2712
  /**
2610
- * Get all transaction rules for user
2713
+ * List overdue expected transactions
2714
+ * Returns all overdue expected transactions (PENDING past tolerance)
2611
2715
  * @param data The data for the request.
2612
2716
  * @param data.region Region code for tenant context
2613
- * @param data.limit Max results per page (default: 20, max: 100)
2614
- * @param data.offset Pagination offset (default: 0)
2615
- * @param data.enabled Filter by enabled status
2616
- * @param data.learningSource Filter by learning source. Omit this parameter or pass empty string to get manually created rules (learningSource is null in database).
2617
- * @param data.autoApplyEnabled Filter by auto-apply status
2618
- * @returns TransactionRuleListResponseDto List of rules
2717
+ * @returns ExpectedTransactionListResponseDto Overdue transactions retrieved successfully
2619
2718
  * @throws ApiError
2620
2719
  */
2621
- public static transactionRuleControllerList(
2622
- data: TransactionRuleControllerListData
2623
- ): CancelablePromise<TransactionRuleControllerListResponse> {
2720
+ public static expectedTransactionControllerFindOverdue(
2721
+ data: ExpectedTransactionControllerFindOverdueData
2722
+ ): CancelablePromise<ExpectedTransactionControllerFindOverdueResponse> {
2624
2723
  return __request(OpenAPI, {
2625
2724
  method: 'GET',
2626
- url: '/api/v1/{region}/bean/transaction-rules',
2725
+ url: '/api/v1/{region}/bean/expected-transactions/overdue',
2627
2726
  path: {
2628
2727
  region: data.region
2629
- },
2630
- query: {
2631
- limit: data.limit,
2632
- offset: data.offset,
2633
- enabled: data.enabled,
2634
- learningSource: data.learningSource,
2635
- autoApplyEnabled: data.autoApplyEnabled
2636
- },
2637
- errors: {
2638
- 401: 'Unauthorized'
2639
2728
  }
2640
2729
  });
2641
2730
  }
2642
2731
 
2643
2732
  /**
2644
- * Validate transaction rule configuration
2733
+ * Get expected transaction by ID
2734
+ * Returns a specific expected transaction with rule details
2645
2735
  * @param data The data for the request.
2736
+ * @param data.id Expected transaction ID
2646
2737
  * @param data.region Region code for tenant context
2647
- * @param data.requestBody
2648
- * @returns ValidateRuleResponseDto Validation result
2738
+ * @returns ExpectedTransactionResponseDto Expected transaction retrieved successfully
2649
2739
  * @throws ApiError
2650
2740
  */
2651
- public static transactionRuleControllerValidate(
2652
- data: TransactionRuleControllerValidateData
2653
- ): CancelablePromise<TransactionRuleControllerValidateResponse> {
2741
+ public static expectedTransactionControllerFindOne(
2742
+ data: ExpectedTransactionControllerFindOneData
2743
+ ): CancelablePromise<ExpectedTransactionControllerFindOneResponse> {
2654
2744
  return __request(OpenAPI, {
2655
- method: 'POST',
2656
- url: '/api/v1/{region}/bean/transaction-rules/validate',
2745
+ method: 'GET',
2746
+ url: '/api/v1/{region}/bean/expected-transactions/{id}',
2657
2747
  path: {
2748
+ id: data.id,
2658
2749
  region: data.region
2659
2750
  },
2660
- body: data.requestBody,
2661
- mediaType: 'application/json',
2662
2751
  errors: {
2663
- 400: 'Validation failed',
2664
- 401: 'Unauthorized'
2752
+ 404: 'Expected transaction not found'
2665
2753
  }
2666
2754
  });
2667
2755
  }
2668
2756
 
2669
2757
  /**
2670
- * Bulk create transaction rules
2758
+ * Skip expected transaction
2759
+ * Marks an expected transaction as skipped (PENDING -> SKIPPED)
2671
2760
  * @param data The data for the request.
2761
+ * @param data.id Expected transaction ID
2672
2762
  * @param data.region Region code for tenant context
2673
- * @param data.requestBody
2674
- * @returns BulkCreateRulesResponseDto Bulk create completed
2763
+ * @returns ExpectedTransactionResponseDto Expected transaction skipped successfully
2675
2764
  * @throws ApiError
2676
2765
  */
2677
- public static transactionRuleControllerBulkCreate(
2678
- data: TransactionRuleControllerBulkCreateData
2679
- ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
2766
+ public static expectedTransactionControllerSkip(
2767
+ data: ExpectedTransactionControllerSkipData
2768
+ ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
2680
2769
  return __request(OpenAPI, {
2681
2770
  method: 'POST',
2682
- url: '/api/v1/{region}/bean/transaction-rules/bulk',
2771
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2683
2772
  path: {
2773
+ id: data.id,
2684
2774
  region: data.region
2685
2775
  },
2686
- body: data.requestBody,
2687
- mediaType: 'application/json',
2688
2776
  errors: {
2689
- 400: 'Invalid bulk create data',
2690
- 401: 'Unauthorized'
2777
+ 400: 'Cannot skip - not in PENDING status',
2778
+ 404: 'Expected transaction not found'
2691
2779
  }
2692
2780
  });
2693
2781
  }
2694
2782
 
2695
2783
  /**
2696
- * Export transaction rules
2784
+ * Undo skip
2785
+ * Reverses a skip operation (SKIPPED -> PENDING)
2697
2786
  * @param data The data for the request.
2698
- * @param data.format Export format (currently only JSON supported)
2787
+ * @param data.id Expected transaction ID
2699
2788
  * @param data.region Region code for tenant context
2700
- * @returns ExportRulesResponseDto Exported rules
2789
+ * @returns void Skip undone successfully
2701
2790
  * @throws ApiError
2702
2791
  */
2703
- public static transactionRuleControllerExport(
2704
- data: TransactionRuleControllerExportData
2705
- ): CancelablePromise<TransactionRuleControllerExportResponse> {
2792
+ public static expectedTransactionControllerUndoSkip(
2793
+ data: ExpectedTransactionControllerUndoSkipData
2794
+ ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
2706
2795
  return __request(OpenAPI, {
2707
- method: 'GET',
2708
- url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
2796
+ method: 'DELETE',
2797
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2709
2798
  path: {
2710
- format: data.format,
2799
+ id: data.id,
2711
2800
  region: data.region
2712
2801
  },
2713
2802
  errors: {
2714
- 400: 'Unsupported format',
2715
- 401: 'Unauthorized'
2803
+ 400: 'Cannot undo - not in SKIPPED status',
2804
+ 404: 'Expected transaction not found'
2716
2805
  }
2717
2806
  });
2718
2807
  }
2719
2808
 
2720
2809
  /**
2721
- * Get transaction rule statistics
2810
+ * Confirm transaction match
2811
+ * Manually matches an expected transaction with an actual transaction
2722
2812
  * @param data The data for the request.
2723
- * @param data.period Statistics time period
2813
+ * @param data.id Expected transaction ID
2724
2814
  * @param data.region Region code for tenant context
2725
- * @returns RuleStatisticsResponseDto Rule statistics
2815
+ * @param data.requestBody
2816
+ * @returns unknown Match confirmed successfully
2726
2817
  * @throws ApiError
2727
2818
  */
2728
- public static transactionRuleControllerGetStatistics(
2729
- data: TransactionRuleControllerGetStatisticsData
2730
- ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
2819
+ public static expectedTransactionControllerConfirmMatch(
2820
+ data: ExpectedTransactionControllerConfirmMatchData
2821
+ ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
2731
2822
  return __request(OpenAPI, {
2732
- method: 'GET',
2733
- url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
2823
+ method: 'POST',
2824
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2734
2825
  path: {
2735
- period: data.period,
2826
+ id: data.id,
2736
2827
  region: data.region
2737
2828
  },
2829
+ body: data.requestBody,
2830
+ mediaType: 'application/json',
2738
2831
  errors: {
2739
- 401: 'Unauthorized'
2832
+ 400: 'Cannot match - not in PENDING status',
2833
+ 404: 'Expected or actual transaction not found',
2834
+ 409: 'Actual transaction already matched to another rule'
2740
2835
  }
2741
2836
  });
2742
2837
  }
2743
2838
 
2744
2839
  /**
2745
- * Get transaction rule detail
2840
+ * Unmatch transaction
2841
+ * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
2746
2842
  * @param data The data for the request.
2747
- * @param data.ruleId Rule ID
2843
+ * @param data.id Expected transaction ID
2748
2844
  * @param data.region Region code for tenant context
2749
- * @returns TransactionRuleResponseDto Rule details
2845
+ * @returns void Match removed successfully
2750
2846
  * @throws ApiError
2751
2847
  */
2752
- public static transactionRuleControllerGetDetail(
2753
- data: TransactionRuleControllerGetDetailData
2754
- ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
2848
+ public static expectedTransactionControllerUnmatch(
2849
+ data: ExpectedTransactionControllerUnmatchData
2850
+ ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
2755
2851
  return __request(OpenAPI, {
2756
- method: 'GET',
2757
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2852
+ method: 'DELETE',
2853
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2758
2854
  path: {
2759
- ruleId: data.ruleId,
2855
+ id: data.id,
2760
2856
  region: data.region
2761
2857
  },
2762
2858
  errors: {
2763
- 401: 'Unauthorized',
2764
- 403: 'Forbidden - not owner of rule',
2765
- 404: 'Rule not found'
2859
+ 400: 'Cannot unmatch - not in COMPLETED status',
2860
+ 404: 'Expected transaction not found'
2766
2861
  }
2767
2862
  });
2768
2863
  }
2769
2864
 
2770
2865
  /**
2771
- * Update a transaction rule
2866
+ * Enter Now
2867
+ * Creates an actual transaction for an expected transaction (YNAB-style Enter Now)
2772
2868
  * @param data The data for the request.
2773
- * @param data.ruleId Rule ID to update
2869
+ * @param data.id Expected transaction ID
2774
2870
  * @param data.region Region code for tenant context
2775
2871
  * @param data.requestBody
2776
- * @returns TransactionRuleResponseDto Rule updated successfully
2872
+ * @returns unknown Transaction created successfully
2777
2873
  * @throws ApiError
2778
2874
  */
2779
- public static transactionRuleControllerUpdate(
2780
- data: TransactionRuleControllerUpdateData
2781
- ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
2875
+ public static expectedTransactionControllerEnterNow(
2876
+ data: ExpectedTransactionControllerEnterNowData
2877
+ ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
2782
2878
  return __request(OpenAPI, {
2783
- method: 'PUT',
2784
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2879
+ method: 'POST',
2880
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
2785
2881
  path: {
2786
- ruleId: data.ruleId,
2882
+ id: data.id,
2787
2883
  region: data.region
2788
2884
  },
2789
2885
  body: data.requestBody,
2790
2886
  mediaType: 'application/json',
2791
2887
  errors: {
2792
- 400: 'Validation failed',
2793
- 401: 'Unauthorized',
2794
- 403: 'Forbidden - not owner of rule',
2795
- 404: 'Rule not found',
2796
- 409: 'Resource conflict - rule is being modified by another process'
2888
+ 400: 'Cannot enter - not in PENDING status or missing accounts',
2889
+ 404: 'Expected transaction or accounts not found'
2797
2890
  }
2798
2891
  });
2799
2892
  }
2893
+ }
2800
2894
 
2895
+ export class RecurringForecastService {
2801
2896
  /**
2802
- * Delete a transaction rule
2897
+ * Get cash flow forecast
2898
+ * Returns predicted outflows for the next N months based on active recurring rules
2803
2899
  * @param data The data for the request.
2804
- * @param data.ruleId Rule ID to delete
2805
2900
  * @param data.region Region code for tenant context
2806
- * @returns void Rule deleted successfully
2901
+ * @param data.months Number of months to forecast (1-12, default 3)
2902
+ * @returns ForecastResponseDto Forecast retrieved successfully
2807
2903
  * @throws ApiError
2808
2904
  */
2809
- public static transactionRuleControllerDelete(
2810
- data: TransactionRuleControllerDeleteData
2811
- ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
2905
+ public static forecastControllerGetForecast(
2906
+ data: ForecastControllerGetForecastData
2907
+ ): CancelablePromise<ForecastControllerGetForecastResponse> {
2812
2908
  return __request(OpenAPI, {
2813
- method: 'DELETE',
2814
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2909
+ method: 'GET',
2910
+ url: '/api/v1/{region}/bean/recurring/forecast',
2815
2911
  path: {
2816
- ruleId: data.ruleId,
2817
2912
  region: data.region
2818
2913
  },
2819
- errors: {
2820
- 401: 'Unauthorized',
2821
- 403: 'Forbidden - not owner of rule',
2822
- 404: 'Rule not found',
2823
- 409: 'Resource conflict - rule is being modified by another process'
2914
+ query: {
2915
+ months: data.months
2824
2916
  }
2825
2917
  });
2826
2918
  }
2919
+ }
2827
2920
 
2921
+ export class BeanCategoryCatalogService {
2828
2922
  /**
2829
- * Test rule matching
2923
+ * List category catalog for a region
2924
+ * 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.
2830
2925
  * @param data The data for the request.
2831
- * @param data.ruleId Rule ID to test
2832
2926
  * @param data.region Region code for tenant context
2833
- * @param data.requestBody
2834
- * @returns TestRuleResponseDto Test result
2927
+ * @param data.scenario Filter by scenario
2928
+ * @param data.routeBearing Filter by routeBearing (entity-router route() consumes it)
2929
+ * @returns CategoryCatalogListResponseDto Category catalog retrieved successfully
2835
2930
  * @throws ApiError
2836
2931
  */
2837
- public static transactionRuleControllerTest(
2838
- data: TransactionRuleControllerTestData
2839
- ): CancelablePromise<TransactionRuleControllerTestResponse> {
2932
+ public static categoryCatalogControllerList(
2933
+ data: CategoryCatalogControllerListData
2934
+ ): CancelablePromise<CategoryCatalogControllerListResponse> {
2840
2935
  return __request(OpenAPI, {
2841
- method: 'POST',
2842
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2936
+ method: 'GET',
2937
+ url: '/api/v1/{region}/bean/categories',
2843
2938
  path: {
2844
- ruleId: data.ruleId,
2845
2939
  region: data.region
2846
2940
  },
2847
- body: data.requestBody,
2848
- mediaType: 'application/json',
2849
- errors: {
2850
- 401: 'Unauthorized',
2851
- 403: 'Forbidden - not owner of rule',
2852
- 404: 'Rule not found'
2941
+ query: {
2942
+ scenario: data.scenario,
2943
+ routeBearing: data.routeBearing
2853
2944
  }
2854
2945
  });
2855
2946
  }
@@ -3034,7 +3125,7 @@ export class OnboardingService {
3034
3125
  /**
3035
3126
  * Bootstrap core accounts + register asset accounts with opening balances (ADR-0113)
3036
3127
  * @param data The data for the request.
3037
- * @param data.region Region code for tenant context
3128
+ * @param data.region Region code for tenant context. Not-yet-open codes are accepted: the universal catalog backs onboarding regardless of region (#759)
3038
3129
  * @param data.requestBody
3039
3130
  * @returns unknown Onboarding bootstrap result.
3040
3131
  * @throws ApiError
@@ -3167,13 +3258,20 @@ export class BeanExportService {
3167
3258
  /**
3168
3259
  * Export Beancount ledger as ZIP
3169
3260
  * Export all user Beancount data as a ZIP file containing ledger.beancount and yearly files in community format.
3170
- * @returns unknown
3261
+ * @param data The data for the request.
3262
+ * @param data.region Region code for tenant context
3263
+ * @returns binary ZIP archive (application/zip) streamed as an attachment
3171
3264
  * @throws ApiError
3172
3265
  */
3173
- public static exportControllerExportBeancount(): CancelablePromise<ExportControllerExportBeancountResponse> {
3266
+ public static exportControllerExportBeancount(
3267
+ data: ExportControllerExportBeancountData
3268
+ ): CancelablePromise<ExportControllerExportBeancountResponse> {
3174
3269
  return __request(OpenAPI, {
3175
3270
  method: 'GET',
3176
- url: '/api/v1/{region}/bean/export/beancount'
3271
+ url: '/api/v1/{region}/bean/export/beancount',
3272
+ path: {
3273
+ region: data.region
3274
+ }
3177
3275
  });
3178
3276
  }
3179
3277
  }
@@ -3210,7 +3308,7 @@ export class BeanImportService {
3210
3308
 
3211
3309
  /**
3212
3310
  * Identify file type
3213
- * Upload a file to check if it can be processed by any registered importer. Does not perform actual import - useful for pre-validation. Uses user-specific importer configuration.
3311
+ * Server-side importer identification has been removed (ADR-0101); file matching is handled client-side via the community parser pipeline. Always returns identified=false with an explanatory message; kept for backward compatibility. Does not perform actual import.
3214
3312
  * @param data The data for the request.
3215
3313
  * @param data.region Region code for tenant context
3216
3314
  * @param data.formData File to identify
@@ -3730,13 +3828,20 @@ export class BeanPlatformsService {
3730
3828
 
3731
3829
  /**
3732
3830
  * Get platform list for current user
3831
+ * @param data The data for the request.
3832
+ * @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").
3733
3833
  * @returns PlatformListItemDto List of platforms with user binding status
3734
3834
  * @throws ApiError
3735
3835
  */
3736
- public static platformControllerGetPlatformList(): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3836
+ public static platformControllerGetPlatformList(
3837
+ data: PlatformControllerGetPlatformListData = {}
3838
+ ): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3737
3839
  return __request(OpenAPI, {
3738
3840
  method: 'GET',
3739
- url: '/api/v1/bean/platforms/list'
3841
+ url: '/api/v1/bean/platforms/list',
3842
+ query: {
3843
+ region: data.region
3844
+ }
3740
3845
  });
3741
3846
  }
3742
3847
 
@@ -3744,7 +3849,7 @@ export class BeanPlatformsService {
3744
3849
  * Match platforms by name or alias
3745
3850
  * @param data The data for the request.
3746
3851
  * @param data.q Search query — Chinese name, English name, or abbreviation
3747
- * @param data.region Region code for category override lookup
3852
+ * @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").
3748
3853
  * @returns PlatformMatchResponseDto Matching platforms with overall match type and truncation flag
3749
3854
  * @throws ApiError
3750
3855
  */
@@ -3761,6 +3866,31 @@ export class BeanPlatformsService {
3761
3866
  });
3762
3867
  }
3763
3868
 
3869
+ /**
3870
+ * Get the region and candidate account standards for a platform
3871
+ * @param data The data for the request.
3872
+ * @param data.id Platform ID (from a match result)
3873
+ * @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.
3874
+ * @param data.type Filter templates by account type (path first segment)
3875
+ * @returns PlatformStandardsResponseDto Resolved region plus the merged account-standard catalog of that region (groupable by productCategory client-side)
3876
+ * @throws ApiError
3877
+ */
3878
+ public static platformControllerGetPlatformStandards(
3879
+ data: PlatformControllerGetPlatformStandardsData
3880
+ ): CancelablePromise<PlatformControllerGetPlatformStandardsResponse> {
3881
+ return __request(OpenAPI, {
3882
+ method: 'GET',
3883
+ url: '/api/v1/bean/platforms/{id}/standards',
3884
+ path: {
3885
+ id: data.id
3886
+ },
3887
+ query: {
3888
+ region: data.region,
3889
+ type: data.type
3890
+ }
3891
+ });
3892
+ }
3893
+
3764
3894
  /**
3765
3895
  * Update a platform
3766
3896
  * @param data The data for the request.
@@ -3927,6 +4057,34 @@ export class DashboardService {
3927
4057
  }
3928
4058
  });
3929
4059
  }
4060
+
4061
+ /**
4062
+ * Get the composite P8 advisor context
4063
+ * 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
4064
+ * @param data The data for the request.
4065
+ * @param data.region Region code for tenant context
4066
+ * @param data.date As-of date for the snapshot and the trailing-12m window anchor (ISO 8601 format)
4067
+ * @returns AdvisorContextResponseDto Advisor context retrieved successfully
4068
+ * @throws ApiError
4069
+ */
4070
+ public static dashboardControllerGetAdvisorContext(
4071
+ data: DashboardControllerGetAdvisorContextData
4072
+ ): CancelablePromise<DashboardControllerGetAdvisorContextResponse> {
4073
+ return __request(OpenAPI, {
4074
+ method: 'GET',
4075
+ url: '/api/v1/{region}/dashboard/advisor-context',
4076
+ path: {
4077
+ region: data.region
4078
+ },
4079
+ query: {
4080
+ date: data.date
4081
+ },
4082
+ errors: {
4083
+ 400: 'Invalid date format',
4084
+ 401: 'User not authenticated, or the token is not advisor-scoped (exchange via POST /auth/sessions/advisor, #1512)'
4085
+ }
4086
+ });
4087
+ }
3930
4088
  }
3931
4089
 
3932
4090
  export class InvestmentService {
@@ -4002,17 +4160,75 @@ export class AuthService {
4002
4160
  }
4003
4161
  });
4004
4162
  }
4163
+
4164
+ /**
4165
+ * Exchange an access token for an advisor-scoped, short-TTL JWT (#1512)
4166
+ * @param data The data for the request.
4167
+ * @param data.requestBody
4168
+ * @returns AdvisorLoginResponseDto Advisor-scope login successful — the token is valid only on advisor tool-face endpoints (e.g. GET /:region/dashboard/advisor-context)
4169
+ * @throws ApiError
4170
+ */
4171
+ public static authControllerAdvisorTokenLogin(
4172
+ data: AuthControllerAdvisorTokenLoginData
4173
+ ): CancelablePromise<AuthControllerAdvisorTokenLoginResponse> {
4174
+ return __request(OpenAPI, {
4175
+ method: 'POST',
4176
+ url: '/api/v1/auth/sessions/advisor',
4177
+ body: data.requestBody,
4178
+ mediaType: 'application/json',
4179
+ errors: {
4180
+ 401: 'Invalid access token'
4181
+ }
4182
+ });
4183
+ }
4184
+ }
4185
+
4186
+ export class CommunityService {
4187
+ /**
4188
+ * Relay a sanitized parser-contribution payload
4189
+ * 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).
4190
+ * @param data The data for the request.
4191
+ * @param data.region Region code for tenant context (routing only; the institution region rides in the payload meta)
4192
+ * @param data.requestBody
4193
+ * @returns ParserContributionRelayResponseDto Issue created by the bot
4194
+ * @throws ApiError
4195
+ */
4196
+ public static parserContributionControllerCreate(
4197
+ data: ParserContributionControllerCreateData
4198
+ ): CancelablePromise<ParserContributionControllerCreateResponse> {
4199
+ return __request(OpenAPI, {
4200
+ method: 'POST',
4201
+ url: '/api/v1/{region}/community/parser-contributions',
4202
+ path: {
4203
+ region: data.region
4204
+ },
4205
+ body: data.requestBody,
4206
+ mediaType: 'application/json',
4207
+ errors: {
4208
+ 401: 'Unauthorized',
4209
+ 422: 'Validation failed (institution slug, empty samples, row/cell size limits)',
4210
+ 429: 'Rate limited (5 submissions per user per hour)',
4211
+ 501: 'Relay not configured on this deployment — clients fall back to the clipboard flow',
4212
+ 502: 'GitHub bot failure (upstream), safe to retry'
4213
+ }
4214
+ });
4215
+ }
4005
4216
  }
4006
4217
 
4007
- export class DefaultService {
4218
+ export class AdminCacheService {
4008
4219
  /**
4009
- * @returns unknown
4220
+ * Flush entire cache (L1 + L2)
4221
+ * Clears ALL cache entries across ALL namespaces and users. Use only for emergency cache corruption recovery, maintenance-window refresh, or development resets.
4222
+ * @returns unknown Cache flushed successfully
4010
4223
  * @throws ApiError
4011
4224
  */
4012
4225
  public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
4013
4226
  return __request(OpenAPI, {
4014
4227
  method: 'POST',
4015
- url: '/api/v1/cache/flush'
4228
+ url: '/api/v1/cache/flush',
4229
+ errors: {
4230
+ 403: 'Admin access required'
4231
+ }
4016
4232
  });
4017
4233
  }
4018
4234
  }
@@ -4181,7 +4397,7 @@ export class MarketDataService {
4181
4397
  * @param data The data for the request.
4182
4398
  * @param data.q Search term — matched against symbol and instrument name. Empty string returns [].
4183
4399
  * @param data.limit Maximum number of results (clamped 1..50)
4184
- * @param data.exchange Filter by exchange code (e.g. US, HK, SS, SZ)
4400
+ * @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)
4185
4401
  * @param data.assetType Filter by OpenBB asset_type (e.g. stock, etf)
4186
4402
  * @returns SymbolSearchResultDto Ranked search results
4187
4403
  * @throws ApiError