@firela/api-types 0.0.0-canary.a54e3c73 → 0.0.0-canary.a7aa3a7

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,6 @@ 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,
196
199
  CategoryCatalogControllerListData,
197
200
  CategoryCatalogControllerListResponse,
198
201
  EventControllerCreateData,
@@ -217,6 +220,7 @@ import type {
217
220
  ReconciliationControllerPadResponse,
218
221
  ReconciliationControllerHistoryData,
219
222
  ReconciliationControllerHistoryResponse,
223
+ ExportControllerExportBeancountData,
220
224
  ExportControllerExportBeancountResponse,
221
225
  FileImportControllerImportFileData,
222
226
  FileImportControllerImportFileResponse,
@@ -263,6 +267,8 @@ import type {
263
267
  PlatformControllerGetPlatformListResponse,
264
268
  PlatformControllerMatchPlatformsData,
265
269
  PlatformControllerMatchPlatformsResponse,
270
+ PlatformControllerGetPlatformStandardsData,
271
+ PlatformControllerGetPlatformStandardsResponse,
266
272
  PlatformControllerUpdateData,
267
273
  PlatformControllerUpdateResponse,
268
274
  PlatformControllerDeleteData,
@@ -275,11 +281,17 @@ import type {
275
281
  DashboardControllerGetCashFlowResponse,
276
282
  DashboardControllerGetExpensesData,
277
283
  DashboardControllerGetExpensesResponse,
284
+ DashboardControllerGetAdvisorContextData,
285
+ DashboardControllerGetAdvisorContextResponse,
278
286
  HoldingPnlControllerGetHoldingPnlData,
279
287
  HoldingPnlControllerGetHoldingPnlResponse,
280
288
  ApiKeysControllerCreateApiKeyResponse,
281
289
  AuthControllerAccessTokenLoginData,
282
290
  AuthControllerAccessTokenLoginResponse,
291
+ AuthControllerAdvisorTokenLoginData,
292
+ AuthControllerAdvisorTokenLoginResponse,
293
+ ParserContributionControllerCreateData,
294
+ ParserContributionControllerCreateResponse,
283
295
  CacheControllerFlushCacheResponse,
284
296
  ExchangeRateControllerGetExchangeRateData,
285
297
  ExchangeRateControllerGetExchangeRateResponse,
@@ -333,7 +345,7 @@ export class BeanAccountsService {
333
345
  * @param data.type Filter by account type
334
346
  * @param data.status Filter by status
335
347
  * @param data.isCustom Filter by custom (user-created) accounts only
336
- * @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)
337
349
  * @param data.limit Maximum number of results
338
350
  * @param data.offset Number of results to skip
339
351
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -529,11 +541,11 @@ export class BeanAccountsService {
529
541
  export class BeanAccountStandardsService {
530
542
  /**
531
543
  * Get account templates
532
- * 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).
533
545
  * @param data The data for the request.
534
- * @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)
535
547
  * @param data.type Filter by account type
536
- * @param data.search Search term for path or description
548
+ * @param data.search Search term for path, description, aliases, or localized display name
537
549
  * @returns AccountStandardListResponseDto Account templates retrieved successfully
538
550
  * @throws ApiError
539
551
  */
@@ -557,7 +569,7 @@ export class BeanAccountStandardsService {
557
569
  * Get template metadata for an account path
558
570
  * Returns root type for a template path.
559
571
  * @param data The data for the request.
560
- * @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)
561
573
  * @param data.path Account path to check
562
574
  * @returns TemplateMetadataResponseDto Template metadata retrieved successfully
563
575
  * @throws ApiError
@@ -579,9 +591,9 @@ export class BeanAccountStandardsService {
579
591
 
580
592
  /**
581
593
  * Get available regions with hierarchy
582
- * 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)
583
595
  * @param data The data for the request.
584
- * @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)
585
597
  * @returns RegionsMetadataResponseDto Regions metadata retrieved successfully
586
598
  * @throws ApiError
587
599
  */
@@ -638,10 +650,11 @@ export class BeanTransactionsService {
638
650
  * @param data.offset Number of items to skip (default: 0)
639
651
  * @param data.dateFrom Filter by start date (inclusive), format: YYYY-MM-DD
640
652
  * @param data.dateTo Filter by end date (inclusive), format: YYYY-MM-DD
641
- * @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).
642
654
  * @param data.search Search in narration and payee fields (max 200 chars)
643
655
  * @param data.accountId Filter by account ID (transactions with postings to this account)
644
- * @param data.category Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
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.
645
658
  * @returns TransactionListResponseDto Transaction list
646
659
  * @throws ApiError
647
660
  */
@@ -662,7 +675,8 @@ export class BeanTransactionsService {
662
675
  status: data.status,
663
676
  search: data.search,
664
677
  accountId: data.accountId,
665
- category: data.category
678
+ category: data.category,
679
+ flow: data.flow
666
680
  },
667
681
  errors: {
668
682
  400: 'Validation failed',
@@ -699,6 +713,34 @@ export class BeanTransactionsService {
699
713
  });
700
714
  }
701
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
+
702
744
  /**
703
745
  * Correct (supersede) a transaction
704
746
  * Atomically voids the original (SUPERSEDED) and creates a replacement through the full validation pipeline.
@@ -1043,1126 +1085,1080 @@ export class BeanReviewsService {
1043
1085
  }
1044
1086
  }
1045
1087
 
1046
- export class BeanPayeesService {
1088
+ export class BeanTransactionRulesService {
1047
1089
  /**
1048
- * Create a new payee
1049
- * Creates a new payee mapping for the authenticated user. The payee name must be unique within the user's account.
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.
1050
1092
  * @param data The data for the request.
1093
+ * @param data.region Region code for tenant context
1051
1094
  * @param data.requestBody
1052
- * @returns PayeeResponseDto Payee created successfully
1095
+ * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
1053
1096
  * @throws ApiError
1054
1097
  */
1055
- public static payeeControllerCreate(
1056
- data: PayeeControllerCreateData
1057
- ): CancelablePromise<PayeeControllerCreateResponse> {
1098
+ public static transactionRuleControllerCreate(
1099
+ data: TransactionRuleControllerCreateData
1100
+ ): CancelablePromise<TransactionRuleControllerCreateResponse> {
1058
1101
  return __request(OpenAPI, {
1059
1102
  method: 'POST',
1060
- url: '/api/v1/bean/payees',
1103
+ url: '/api/v1/{region}/bean/transaction-rules',
1104
+ path: {
1105
+ region: data.region
1106
+ },
1061
1107
  body: data.requestBody,
1062
1108
  mediaType: 'application/json',
1063
1109
  errors: {
1064
- 400: 'Invalid input data',
1065
- 409: 'Payee already exists'
1110
+ 400: 'Validation failed',
1111
+ 401: 'Unauthorized',
1112
+ 409: 'Resource conflict - another process is updating this rule'
1066
1113
  }
1067
1114
  });
1068
1115
  }
1069
1116
 
1070
1117
  /**
1071
- * List user payees
1072
- * Returns all payee mappings for the authenticated user with optional filtering
1118
+ * Get all transaction rules for user
1073
1119
  * @param data The data for the request.
1074
- * @param data.search Search term for payee name (partial match, case-insensitive). Useful for autocomplete.
1075
- * @param data.payee Filter by exact payee name match
1076
- * @param data.category Filter by custom category
1077
- * @param data.tag Filter by custom tag (returns payees that have this tag)
1078
- * @param data.isActive Filter by active status. Defaults to true (show only active payees).
1079
- * @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
1080
1127
  * @throws ApiError
1081
1128
  */
1082
- public static payeeControllerFindAll(
1083
- data: PayeeControllerFindAllData = {}
1084
- ): CancelablePromise<PayeeControllerFindAllResponse> {
1129
+ public static transactionRuleControllerList(
1130
+ data: TransactionRuleControllerListData
1131
+ ): CancelablePromise<TransactionRuleControllerListResponse> {
1085
1132
  return __request(OpenAPI, {
1086
1133
  method: 'GET',
1087
- url: '/api/v1/bean/payees',
1134
+ url: '/api/v1/{region}/bean/transaction-rules',
1135
+ path: {
1136
+ region: data.region
1137
+ },
1088
1138
  query: {
1089
- search: data.search,
1090
- payee: data.payee,
1091
- category: data.category,
1092
- tag: data.tag,
1093
- 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'
1094
1147
  }
1095
1148
  });
1096
1149
  }
1097
1150
 
1098
1151
  /**
1099
- * Get payee autocomplete suggestions
1100
- * Returns active payee names matching the query, sorted by recent usage. Used for transaction input autocomplete.
1152
+ * Validate transaction rule configuration
1101
1153
  * @param data The data for the request.
1102
- * @param data.q Search query for payee name (partial match, case-insensitive)
1103
- * @param data.limit Maximum number of suggestions
1104
- * @returns PayeeAutocompleteResponseDto Autocomplete suggestions retrieved successfully
1154
+ * @param data.region Region code for tenant context
1155
+ * @param data.requestBody
1156
+ * @returns ValidateRuleResponseDto Validation result
1105
1157
  * @throws ApiError
1106
1158
  */
1107
- public static payeeControllerAutocomplete(
1108
- data: PayeeControllerAutocompleteData
1109
- ): CancelablePromise<PayeeControllerAutocompleteResponse> {
1159
+ public static transactionRuleControllerValidate(
1160
+ data: TransactionRuleControllerValidateData
1161
+ ): CancelablePromise<TransactionRuleControllerValidateResponse> {
1110
1162
  return __request(OpenAPI, {
1111
- method: 'GET',
1112
- url: '/api/v1/bean/payees/autocomplete',
1113
- query: {
1114
- q: data.q,
1115
- 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'
1116
1173
  }
1117
1174
  });
1118
1175
  }
1119
1176
 
1120
1177
  /**
1121
- * Get top payees by usage
1122
- * Returns the most frequently used payees, sorted by use count. Used for statistics and analytics.
1178
+ * Bulk create transaction rules
1123
1179
  * @param data The data for the request.
1124
- * @param data.limit Maximum number of results
1125
- * @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
1126
1183
  * @throws ApiError
1127
1184
  */
1128
- public static payeeControllerGetTopPayees(
1129
- data: PayeeControllerGetTopPayeesData = {}
1130
- ): CancelablePromise<PayeeControllerGetTopPayeesResponse> {
1185
+ public static transactionRuleControllerBulkCreate(
1186
+ data: TransactionRuleControllerBulkCreateData
1187
+ ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
1131
1188
  return __request(OpenAPI, {
1132
- method: 'GET',
1133
- url: '/api/v1/bean/payees/top',
1134
- query: {
1135
- 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'
1136
1199
  }
1137
1200
  });
1138
1201
  }
1139
1202
 
1140
1203
  /**
1141
- * Get payee by ID
1142
- * Returns a specific payee mapping by its UUID
1204
+ * Export transaction rules
1143
1205
  * @param data The data for the request.
1144
- * @param data.id Payee UUID
1145
- * @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
1146
1209
  * @throws ApiError
1147
1210
  */
1148
- public static payeeControllerFindOne(
1149
- data: PayeeControllerFindOneData
1150
- ): CancelablePromise<PayeeControllerFindOneResponse> {
1211
+ public static transactionRuleControllerExport(
1212
+ data: TransactionRuleControllerExportData
1213
+ ): CancelablePromise<TransactionRuleControllerExportResponse> {
1151
1214
  return __request(OpenAPI, {
1152
1215
  method: 'GET',
1153
- url: '/api/v1/bean/payees/{id}',
1216
+ url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
1154
1217
  path: {
1155
- id: data.id
1218
+ format: data.format,
1219
+ region: data.region
1156
1220
  },
1157
1221
  errors: {
1158
- 403: 'Payee belongs to another user',
1159
- 404: 'Payee not found'
1222
+ 400: 'Unsupported format',
1223
+ 401: 'Unauthorized'
1160
1224
  }
1161
1225
  });
1162
1226
  }
1163
1227
 
1164
1228
  /**
1165
- * Update payee
1166
- * Updates a payee mapping. The payee name cannot be changed after creation.
1229
+ * Get transaction rule statistics
1167
1230
  * @param data The data for the request.
1168
- * @param data.id Payee UUID
1169
- * @param data.requestBody
1170
- * @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
1171
1234
  * @throws ApiError
1172
1235
  */
1173
- public static payeeControllerUpdate(
1174
- data: PayeeControllerUpdateData
1175
- ): CancelablePromise<PayeeControllerUpdateResponse> {
1236
+ public static transactionRuleControllerGetStatistics(
1237
+ data: TransactionRuleControllerGetStatisticsData
1238
+ ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
1176
1239
  return __request(OpenAPI, {
1177
- method: 'PUT',
1178
- url: '/api/v1/bean/payees/{id}',
1240
+ method: 'GET',
1241
+ url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
1179
1242
  path: {
1180
- id: data.id
1243
+ period: data.period,
1244
+ region: data.region
1181
1245
  },
1182
- body: data.requestBody,
1183
- mediaType: 'application/json',
1184
1246
  errors: {
1185
- 400: 'Invalid input data',
1186
- 404: 'Payee not found'
1247
+ 401: 'Unauthorized'
1187
1248
  }
1188
1249
  });
1189
1250
  }
1190
1251
 
1191
1252
  /**
1192
- * Delete payee
1193
- * Soft deletes a payee by marking it as inactive. Inactive payees will not appear in autocomplete suggestions.
1253
+ * Get transaction rule detail
1194
1254
  * @param data The data for the request.
1195
- * @param data.id Payee UUID
1196
- * @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
1197
1258
  * @throws ApiError
1198
1259
  */
1199
- public static payeeControllerDelete(
1200
- data: PayeeControllerDeleteData
1201
- ): CancelablePromise<PayeeControllerDeleteResponse> {
1260
+ public static transactionRuleControllerGetDetail(
1261
+ data: TransactionRuleControllerGetDetailData
1262
+ ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
1202
1263
  return __request(OpenAPI, {
1203
- method: 'DELETE',
1204
- url: '/api/v1/bean/payees/{id}',
1264
+ method: 'GET',
1265
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
1205
1266
  path: {
1206
- id: data.id
1267
+ ruleId: data.ruleId,
1268
+ region: data.region
1207
1269
  },
1208
1270
  errors: {
1209
- 404: 'Payee not found'
1271
+ 401: 'Unauthorized',
1272
+ 403: 'Forbidden - not owner of rule',
1273
+ 404: 'Rule not found'
1210
1274
  }
1211
1275
  });
1212
1276
  }
1213
- }
1214
1277
 
1215
- export class AdminPayeeProfilesService {
1216
1278
  /**
1217
- * Create payee profile (Admin only)
1218
- * Creates a new global payee profile. The canonical name must be unique (case-insensitive).
1279
+ * Update a transaction rule
1219
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
1220
1283
  * @param data.requestBody
1221
- * @returns PayeeProfileResponseDto Payee profile created successfully
1284
+ * @returns TransactionRuleResponseDto Rule updated successfully
1222
1285
  * @throws ApiError
1223
1286
  */
1224
- public static payeeProfileAdminControllerCreate(
1225
- data: PayeeProfileAdminControllerCreateData
1226
- ): CancelablePromise<PayeeProfileAdminControllerCreateResponse> {
1287
+ public static transactionRuleControllerUpdate(
1288
+ data: TransactionRuleControllerUpdateData
1289
+ ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
1227
1290
  return __request(OpenAPI, {
1228
- method: 'POST',
1229
- 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
+ },
1230
1297
  body: data.requestBody,
1231
1298
  mediaType: 'application/json',
1232
1299
  errors: {
1233
1300
  400: 'Validation failed',
1234
- 403: 'Admin access required',
1235
- 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'
1236
1305
  }
1237
1306
  });
1238
1307
  }
1239
1308
 
1240
1309
  /**
1241
- * List payee profiles (Admin only)
1242
- * Returns all payee profiles with optional filtering by category, country, verification status, etc.
1310
+ * Delete a transaction rule
1243
1311
  * @param data The data for the request.
1244
- * @param data.search Search term for canonical name and aliases (case-insensitive)
1245
- * @param data.category Filter by category
1246
- * @param data.country Filter by country (ISO 3166-1 alpha-2)
1247
- * @param data.isActive Filter by active status (default: true - show only active)
1248
- * @param data.verified Filter by verification status. true = verified only, false = unverified only
1249
- * @param data.dataSource Filter by data source
1250
- * @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
1251
1315
  * @throws ApiError
1252
1316
  */
1253
- public static payeeProfileAdminControllerFindAll(
1254
- data: PayeeProfileAdminControllerFindAllData = {}
1255
- ): CancelablePromise<PayeeProfileAdminControllerFindAllResponse> {
1317
+ public static transactionRuleControllerDelete(
1318
+ data: TransactionRuleControllerDeleteData
1319
+ ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
1256
1320
  return __request(OpenAPI, {
1257
- method: 'GET',
1258
- url: '/api/v1/admin/payee-profiles',
1259
- query: {
1260
- search: data.search,
1261
- category: data.category,
1262
- country: data.country,
1263
- isActive: data.isActive,
1264
- verified: data.verified,
1265
- 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
1266
1326
  },
1267
1327
  errors: {
1268
- 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'
1269
1332
  }
1270
1333
  });
1271
1334
  }
1272
1335
 
1273
1336
  /**
1274
- * Get payee profile by ID (Admin only)
1275
- * Returns a single payee profile by its ID.
1337
+ * Test rule matching
1276
1338
  * @param data The data for the request.
1277
- * @param data.id Payee profile ID (UUID)
1278
- * @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
1279
1343
  * @throws ApiError
1280
1344
  */
1281
- public static payeeProfileAdminControllerFindOne(
1282
- data: PayeeProfileAdminControllerFindOneData
1283
- ): CancelablePromise<PayeeProfileAdminControllerFindOneResponse> {
1345
+ public static transactionRuleControllerTest(
1346
+ data: TransactionRuleControllerTestData
1347
+ ): CancelablePromise<TransactionRuleControllerTestResponse> {
1284
1348
  return __request(OpenAPI, {
1285
- method: 'GET',
1286
- url: '/api/v1/admin/payee-profiles/{id}',
1349
+ method: 'POST',
1350
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
1287
1351
  path: {
1288
- id: data.id
1352
+ ruleId: data.ruleId,
1353
+ region: data.region
1289
1354
  },
1355
+ body: data.requestBody,
1356
+ mediaType: 'application/json',
1290
1357
  errors: {
1291
- 403: 'Admin access required',
1292
- 404: 'Payee profile not found'
1358
+ 401: 'Unauthorized',
1359
+ 403: 'Forbidden - not owner of rule',
1360
+ 404: 'Rule not found'
1293
1361
  }
1294
1362
  });
1295
1363
  }
1364
+ }
1296
1365
 
1366
+ export class UsersService {
1297
1367
  /**
1298
- * Update payee profile (Admin only)
1299
- * Updates an existing payee profile. The canonical name cannot be changed.
1368
+ * Delete own user account
1300
1369
  * @param data The data for the request.
1301
- * @param data.id Payee profile ID (UUID)
1302
1370
  * @param data.requestBody
1303
- * @returns PayeeProfileResponseDto Payee profile updated successfully
1371
+ * @returns void User deleted successfully
1304
1372
  * @throws ApiError
1305
1373
  */
1306
- public static payeeProfileAdminControllerUpdate(
1307
- data: PayeeProfileAdminControllerUpdateData
1308
- ): CancelablePromise<PayeeProfileAdminControllerUpdateResponse> {
1374
+ public static userControllerDeleteOwnUser(
1375
+ data: UserControllerDeleteOwnUserData
1376
+ ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
1309
1377
  return __request(OpenAPI, {
1310
- method: 'PUT',
1311
- url: '/api/v1/admin/payee-profiles/{id}',
1312
- path: {
1313
- id: data.id
1314
- },
1378
+ method: 'DELETE',
1379
+ url: '/api/v1/users',
1315
1380
  body: data.requestBody,
1316
1381
  mediaType: 'application/json',
1317
1382
  errors: {
1318
- 403: 'Admin access required',
1319
- 404: 'Payee profile not found'
1383
+ 403: 'Invalid access token'
1320
1384
  }
1321
1385
  });
1322
1386
  }
1323
1387
 
1324
1388
  /**
1325
- * Soft delete payee profile (Admin only)
1326
- * Marks a payee profile as inactive (soft delete). The profile cannot be deleted if it is referenced by user payees.
1389
+ * Get current authenticated user
1327
1390
  * @param data The data for the request.
1328
- * @param data.id Payee profile ID (UUID)
1329
- * @returns void Payee profile deleted successfully
1391
+ * @param data.acceptLanguage
1392
+ * @returns UserResponseDto User retrieved successfully
1330
1393
  * @throws ApiError
1331
1394
  */
1332
- public static payeeProfileAdminControllerDelete(
1333
- data: PayeeProfileAdminControllerDeleteData
1334
- ): CancelablePromise<PayeeProfileAdminControllerDeleteResponse> {
1395
+ public static userControllerGetUser(
1396
+ data: UserControllerGetUserData
1397
+ ): CancelablePromise<UserControllerGetUserResponse> {
1335
1398
  return __request(OpenAPI, {
1336
- method: 'DELETE',
1337
- url: '/api/v1/admin/payee-profiles/{id}',
1338
- path: {
1339
- id: data.id
1340
- },
1341
- errors: {
1342
- 403: 'Admin access required',
1343
- 404: 'Payee profile not found',
1344
- 409: 'Payee profile is in use and cannot be deleted'
1399
+ method: 'GET',
1400
+ url: '/api/v1/users',
1401
+ headers: {
1402
+ 'accept-language': data.acceptLanguage
1345
1403
  }
1346
1404
  });
1347
1405
  }
1348
1406
 
1349
1407
  /**
1350
- * Verify payee profile (Admin only)
1351
- * 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).
1352
1410
  * @param data The data for the request.
1353
- * @param data.id Payee profile ID (UUID)
1354
- * @returns PayeeProfileResponseDto Payee profile verified successfully
1411
+ * @param data.requestBody
1412
+ * @returns SignupResponseDto User created successfully
1355
1413
  * @throws ApiError
1356
1414
  */
1357
- public static payeeProfileAdminControllerVerify(
1358
- data: PayeeProfileAdminControllerVerifyData
1359
- ): CancelablePromise<PayeeProfileAdminControllerVerifyResponse> {
1415
+ public static userControllerSignupUser(
1416
+ data: UserControllerSignupUserData
1417
+ ): CancelablePromise<UserControllerSignupUserResponse> {
1360
1418
  return __request(OpenAPI, {
1361
1419
  method: 'POST',
1362
- url: '/api/v1/admin/payee-profiles/{id}/verify',
1363
- path: {
1364
- id: data.id
1365
- },
1420
+ url: '/api/v1/users',
1421
+ body: data.requestBody,
1422
+ mediaType: 'application/json',
1366
1423
  errors: {
1367
- 403: 'Admin access required',
1368
- 404: 'Payee profile not found'
1424
+ 400: 'Invalid Turnstile token (when Turnstile is enabled)',
1425
+ 403: 'User signup is disabled'
1369
1426
  }
1370
1427
  });
1371
1428
  }
1372
1429
 
1373
1430
  /**
1374
- * Unverify payee profile (Admin only)
1375
- * Removes verification status by setting verifiedAt to null.
1431
+ * Delete user by ID (admin only)
1376
1432
  * @param data The data for the request.
1377
- * @param data.id Payee profile ID (UUID)
1378
- * @returns PayeeProfileResponseDto Payee profile unverified successfully
1433
+ * @param data.id User ID to delete
1434
+ * @returns void User deleted successfully
1379
1435
  * @throws ApiError
1380
1436
  */
1381
- public static payeeProfileAdminControllerUnverify(
1382
- data: PayeeProfileAdminControllerUnverifyData
1383
- ): CancelablePromise<PayeeProfileAdminControllerUnverifyResponse> {
1437
+ public static userControllerDeleteUser(
1438
+ data: UserControllerDeleteUserData
1439
+ ): CancelablePromise<UserControllerDeleteUserResponse> {
1384
1440
  return __request(OpenAPI, {
1385
1441
  method: 'DELETE',
1386
- url: '/api/v1/admin/payee-profiles/{id}/verify',
1442
+ url: '/api/v1/users/{id}',
1387
1443
  path: {
1388
1444
  id: data.id
1389
1445
  },
1390
1446
  errors: {
1391
- 403: 'Admin access required',
1392
- 404: 'Payee profile not found'
1447
+ 403: 'Cannot delete own account or insufficient permissions'
1393
1448
  }
1394
1449
  });
1395
1450
  }
1396
- }
1397
1451
 
1398
- export class BeanCommoditiesService {
1399
1452
  /**
1400
- * Create a new commodity
1401
- * Creates a new commodity definition for the authenticated user
1453
+ * Get user info by user ID
1402
1454
  * @param data The data for the request.
1403
- * @param data.region Region code for tenant context
1404
- * @param data.requestBody
1405
- * @returns CommodityResponseDto Commodity created successfully
1455
+ * @param data.id User ID
1456
+ * @returns unknown User info retrieved successfully
1406
1457
  * @throws ApiError
1407
1458
  */
1408
- public static commodityControllerCreate(
1409
- data: CommodityControllerCreateData
1410
- ): CancelablePromise<CommodityControllerCreateResponse> {
1459
+ public static userControllerGetUserInfo(
1460
+ data: UserControllerGetUserInfoData
1461
+ ): CancelablePromise<UserControllerGetUserInfoResponse> {
1411
1462
  return __request(OpenAPI, {
1412
- method: 'POST',
1413
- url: '/api/v1/{region}/bean/commodities',
1463
+ method: 'GET',
1464
+ url: '/api/v1/users/{id}/info',
1414
1465
  path: {
1415
- region: data.region
1466
+ id: data.id
1416
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',
1417
1487
  body: data.requestBody,
1418
1488
  mediaType: 'application/json',
1419
1489
  errors: {
1420
- 400: 'Invalid input data',
1421
- 409: 'Commodity already exists'
1490
+ 403: 'Insufficient permissions'
1422
1491
  }
1423
1492
  });
1424
1493
  }
1425
1494
 
1426
1495
  /**
1427
- * List user commodities
1428
- * Returns all commodity definitions for the authenticated user with optional filtering
1496
+ * Get all user settings paginated (admin only)
1429
1497
  * @param data The data for the request.
1430
- * @param data.region Region code for tenant context
1431
- * @param data.search Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
1432
- * @param data.symbol Filter by exact symbol match
1433
- * @returns CommodityListResponseDto Commodities retrieved successfully
1498
+ * @param data.pageNo Page number
1499
+ * @param data.pageSize Page size
1500
+ * @returns unknown Settings list retrieved successfully
1434
1501
  * @throws ApiError
1435
1502
  */
1436
- public static commodityControllerFindAll(
1437
- data: CommodityControllerFindAllData
1438
- ): CancelablePromise<CommodityControllerFindAllResponse> {
1503
+ public static userControllerGetAllUserSettingsByPage(
1504
+ data: UserControllerGetAllUserSettingsByPageData
1505
+ ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
1439
1506
  return __request(OpenAPI, {
1440
1507
  method: 'GET',
1441
- url: '/api/v1/{region}/bean/commodities',
1442
- path: {
1443
- region: data.region
1444
- },
1508
+ url: '/api/v1/users/settings-by-page',
1445
1509
  query: {
1446
- search: data.search,
1447
- symbol: data.symbol
1510
+ pageNo: data.pageNo,
1511
+ pageSize: data.pageSize
1448
1512
  }
1449
1513
  });
1450
1514
  }
1451
1515
 
1452
1516
  /**
1453
- * Get commodity by symbol
1454
- * Returns a specific commodity definition by its symbol
1455
- * @param data The data for the request.
1456
- * @param data.symbol Commodity symbol
1457
- * @param data.region Region code for tenant context
1458
- * @returns CommodityResponseDto Commodity retrieved successfully
1517
+ * Get asset and liability summary for current user
1518
+ * @returns unknown Summary retrieved successfully
1459
1519
  * @throws ApiError
1460
1520
  */
1461
- public static commodityControllerFindOne(
1462
- data: CommodityControllerFindOneData
1463
- ): CancelablePromise<CommodityControllerFindOneResponse> {
1521
+ public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
1464
1522
  return __request(OpenAPI, {
1465
1523
  method: 'GET',
1466
- url: '/api/v1/{region}/bean/commodities/{symbol}',
1467
- path: {
1468
- symbol: data.symbol,
1469
- region: data.region
1470
- },
1471
- errors: {
1472
- 404: 'Commodity not found'
1473
- }
1524
+ url: '/api/v1/users/asset-liability-summary'
1474
1525
  });
1475
1526
  }
1527
+ }
1476
1528
 
1529
+ export class PropertiesService {
1477
1530
  /**
1478
- * Update commodity
1479
- * Updates an existing commodity definition. Symbol cannot be changed.
1480
- * @param data The data for the request.
1481
- * @param data.symbol Commodity symbol
1482
- * @param data.region Region code for tenant context
1483
- * @param data.requestBody
1484
- * @returns CommodityResponseDto Commodity updated successfully
1531
+ * Get all system properties
1532
+ * @returns unknown Properties retrieved successfully
1485
1533
  * @throws ApiError
1486
1534
  */
1487
- public static commodityControllerUpdate(
1488
- data: CommodityControllerUpdateData
1489
- ): CancelablePromise<CommodityControllerUpdateResponse> {
1535
+ public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
1490
1536
  return __request(OpenAPI, {
1491
- method: 'PUT',
1492
- url: '/api/v1/{region}/bean/commodities/{symbol}',
1493
- path: {
1494
- symbol: data.symbol,
1495
- region: data.region
1496
- },
1497
- body: data.requestBody,
1498
- mediaType: 'application/json',
1537
+ method: 'GET',
1538
+ url: '/api/v1/admin/properties',
1499
1539
  errors: {
1500
- 400: 'Invalid input data',
1501
- 404: 'Commodity not found'
1540
+ 401: 'Unauthorized',
1541
+ 403: 'Forbidden - insufficient permissions'
1502
1542
  }
1503
1543
  });
1504
1544
  }
1505
1545
 
1506
1546
  /**
1507
- * Delete commodity
1508
- * Deletes a commodity definition
1547
+ * Get property by key
1509
1548
  * @param data The data for the request.
1510
- * @param data.symbol Commodity symbol
1511
- * @param data.region Region code for tenant context
1512
- * @returns void Commodity deleted successfully
1549
+ * @param data.key Property key
1550
+ * @returns unknown Property retrieved successfully
1513
1551
  * @throws ApiError
1514
1552
  */
1515
- public static commodityControllerDelete(
1516
- data: CommodityControllerDeleteData
1517
- ): CancelablePromise<CommodityControllerDeleteResponse> {
1553
+ public static propertyControllerGetByKey(
1554
+ data: PropertyControllerGetByKeyData
1555
+ ): CancelablePromise<PropertyControllerGetByKeyResponse> {
1518
1556
  return __request(OpenAPI, {
1519
- method: 'DELETE',
1520
- url: '/api/v1/{region}/bean/commodities/{symbol}',
1557
+ method: 'GET',
1558
+ url: '/api/v1/admin/properties/{key}',
1521
1559
  path: {
1522
- symbol: data.symbol,
1523
- region: data.region
1560
+ key: data.key
1524
1561
  },
1525
1562
  errors: {
1526
- 404: 'Commodity not found'
1563
+ 401: 'Unauthorized',
1564
+ 403: 'Forbidden - insufficient permissions',
1565
+ 404: 'Property not found'
1527
1566
  }
1528
1567
  });
1529
1568
  }
1530
1569
 
1531
1570
  /**
1532
- * Ensure commodity exists
1533
- * Gets existing commodity or creates it with automatic initialization from OpenBB
1571
+ * Update a system property
1534
1572
  * @param data The data for the request.
1535
- * @param data.symbol Commodity symbol
1536
- * @param data.region Region code for tenant context
1537
- * @returns CommodityResponseDto Commodity retrieved or created
1573
+ * @param data.key Property key
1574
+ * @param data.requestBody
1575
+ * @returns unknown Property updated successfully
1538
1576
  * @throws ApiError
1539
1577
  */
1540
- public static commodityControllerGetOrCreate(
1541
- data: CommodityControllerGetOrCreateData
1542
- ): CancelablePromise<CommodityControllerGetOrCreateResponse> {
1578
+ public static propertyControllerUpdate(
1579
+ data: PropertyControllerUpdateData
1580
+ ): CancelablePromise<PropertyControllerUpdateResponse> {
1543
1581
  return __request(OpenAPI, {
1544
- method: 'POST',
1545
- url: '/api/v1/{region}/bean/commodities/{symbol}/ensure',
1582
+ method: 'PUT',
1583
+ url: '/api/v1/admin/properties/{key}',
1546
1584
  path: {
1547
- symbol: data.symbol,
1548
- 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'
1549
1592
  }
1550
1593
  });
1551
1594
  }
1552
1595
 
1553
1596
  /**
1554
- * Bulk create commodities
1555
- * Creates multiple commodities from a list of symbols, useful for initialization
1597
+ * Delete a system property
1556
1598
  * @param data The data for the request.
1557
- * @param data.region Region code for tenant context
1558
- * @returns CommodityResponseDto Commodities created successfully
1599
+ * @param data.key Property key
1600
+ * @returns void Property deleted successfully
1559
1601
  * @throws ApiError
1560
1602
  */
1561
- public static commodityControllerBulkCreate(
1562
- data: CommodityControllerBulkCreateData
1563
- ): CancelablePromise<CommodityControllerBulkCreateResponse> {
1603
+ public static propertyControllerDelete(
1604
+ data: PropertyControllerDeleteData
1605
+ ): CancelablePromise<PropertyControllerDeleteResponse> {
1564
1606
  return __request(OpenAPI, {
1565
- method: 'POST',
1566
- url: '/api/v1/{region}/bean/commodities/bulk',
1607
+ method: 'DELETE',
1608
+ url: '/api/v1/admin/properties/{key}',
1567
1609
  path: {
1568
- region: data.region
1610
+ key: data.key
1611
+ },
1612
+ errors: {
1613
+ 401: 'Unauthorized',
1614
+ 403: 'Forbidden - insufficient permissions',
1615
+ 404: 'Property not found'
1569
1616
  }
1570
1617
  });
1571
1618
  }
1572
1619
  }
1573
1620
 
1574
- export class BeanPricesService {
1621
+ export class BeanPayeesService {
1575
1622
  /**
1576
- * Create a new price
1577
- * 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.
1578
1625
  * @param data The data for the request.
1579
- * @param data.region Region code for tenant context
1580
1626
  * @param data.requestBody
1581
- * @returns PriceResponseDto Price created successfully
1627
+ * @returns PayeeResponseDto Payee created successfully
1582
1628
  * @throws ApiError
1583
1629
  */
1584
- public static priceControllerCreate(
1585
- data: PriceControllerCreateData
1586
- ): CancelablePromise<PriceControllerCreateResponse> {
1630
+ public static payeeControllerCreate(
1631
+ data: PayeeControllerCreateData
1632
+ ): CancelablePromise<PayeeControllerCreateResponse> {
1587
1633
  return __request(OpenAPI, {
1588
1634
  method: 'POST',
1589
- url: '/api/v1/{region}/bean/prices',
1590
- path: {
1591
- region: data.region
1592
- },
1635
+ url: '/api/v1/bean/payees',
1593
1636
  body: data.requestBody,
1594
1637
  mediaType: 'application/json',
1595
1638
  errors: {
1596
- 404: 'Currency or quoteCurrency commodity not found',
1597
- 409: 'Price already exists for this currency pair and date'
1639
+ 400: 'Invalid input data',
1640
+ 409: 'Payee already exists'
1598
1641
  }
1599
1642
  });
1600
1643
  }
1601
1644
 
1602
1645
  /**
1603
- * List user prices
1604
- * 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
1605
1648
  * @param data The data for the request.
1606
- * @param data.region Region code for tenant context
1607
- * @param data.currency Filter by currency (e.g., BTC, AAPL, USD)
1608
- * @param data.quoteCurrency Filter by quote currency (pricing currency, e.g., USD, CNY)
1609
- * @param data.dateFrom Filter prices from this date (ISO 8601 format)
1610
- * @param data.dateTo Filter prices to this date (ISO 8601 format)
1611
- * @param data.search Search term for currency or quoteCurrency (case-insensitive partial match)
1612
- * @param data.page Page number for pagination (default: 1)
1613
- * @param data.limit Number of items per page (default: 20, max: 100)
1614
- * @returns PriceListResponseDto Prices retrieved successfully
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
1615
1655
  * @throws ApiError
1616
1656
  */
1617
- public static priceControllerFindAll(
1618
- data: PriceControllerFindAllData
1619
- ): CancelablePromise<PriceControllerFindAllResponse> {
1657
+ public static payeeControllerFindAll(
1658
+ data: PayeeControllerFindAllData = {}
1659
+ ): CancelablePromise<PayeeControllerFindAllResponse> {
1620
1660
  return __request(OpenAPI, {
1621
1661
  method: 'GET',
1622
- url: '/api/v1/{region}/bean/prices',
1623
- path: {
1624
- region: data.region
1625
- },
1662
+ url: '/api/v1/bean/payees',
1626
1663
  query: {
1627
- currency: data.currency,
1628
- quoteCurrency: data.quoteCurrency,
1629
- dateFrom: data.dateFrom,
1630
- dateTo: data.dateTo,
1631
1664
  search: data.search,
1632
- page: data.page,
1633
- limit: data.limit
1665
+ payee: data.payee,
1666
+ category: data.category,
1667
+ tag: data.tag,
1668
+ isActive: data.isActive
1634
1669
  }
1635
1670
  });
1636
1671
  }
1637
1672
 
1638
1673
  /**
1639
- * Get price by ID
1640
- * 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.
1641
1676
  * @param data The data for the request.
1642
- * @param data.id Price ID
1643
- * @param data.region Region code for tenant context
1644
- * @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
1645
1680
  * @throws ApiError
1646
1681
  */
1647
- public static priceControllerFindOne(
1648
- data: PriceControllerFindOneData
1649
- ): CancelablePromise<PriceControllerFindOneResponse> {
1682
+ public static payeeControllerAutocomplete(
1683
+ data: PayeeControllerAutocompleteData
1684
+ ): CancelablePromise<PayeeControllerAutocompleteResponse> {
1650
1685
  return __request(OpenAPI, {
1651
1686
  method: 'GET',
1652
- url: '/api/v1/{region}/bean/prices/{id}',
1653
- path: {
1654
- id: data.id,
1655
- region: data.region
1656
- },
1657
- errors: {
1658
- 404: 'Price not found'
1687
+ url: '/api/v1/bean/payees/autocomplete',
1688
+ query: {
1689
+ q: data.q,
1690
+ limit: data.limit
1659
1691
  }
1660
1692
  });
1661
1693
  }
1662
1694
 
1663
1695
  /**
1664
- * Update a price
1665
- * 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.
1666
1698
  * @param data The data for the request.
1667
- * @param data.id Price ID
1668
- * @param data.region Region code for tenant context
1669
- * @param data.requestBody
1670
- * @returns PriceResponseDto Price updated successfully
1699
+ * @param data.limit Maximum number of results
1700
+ * @returns PayeeStatsResponseDto Top payees retrieved successfully
1671
1701
  * @throws ApiError
1672
1702
  */
1673
- public static priceControllerUpdate(
1674
- data: PriceControllerUpdateData
1675
- ): CancelablePromise<PriceControllerUpdateResponse> {
1703
+ public static payeeControllerGetTopPayees(
1704
+ data: PayeeControllerGetTopPayeesData = {}
1705
+ ): CancelablePromise<PayeeControllerGetTopPayeesResponse> {
1676
1706
  return __request(OpenAPI, {
1677
- method: 'PUT',
1678
- url: '/api/v1/{region}/bean/prices/{id}',
1679
- path: {
1680
- id: data.id,
1681
- region: data.region
1682
- },
1683
- body: data.requestBody,
1684
- mediaType: 'application/json',
1685
- errors: {
1686
- 404: 'Price not found',
1687
- 409: 'Updated price conflicts with existing price'
1707
+ method: 'GET',
1708
+ url: '/api/v1/bean/payees/top',
1709
+ query: {
1710
+ limit: data.limit
1688
1711
  }
1689
1712
  });
1690
1713
  }
1691
1714
 
1692
1715
  /**
1693
- * Delete a price
1694
- * Deletes a price entry (hard delete)
1716
+ * Get payee by ID
1717
+ * Returns a specific payee mapping by its UUID
1695
1718
  * @param data The data for the request.
1696
- * @param data.id Price ID
1697
- * @param data.region Region code for tenant context
1698
- * @returns void Price deleted successfully
1719
+ * @param data.id Payee UUID
1720
+ * @returns PayeeResponseDto Payee retrieved successfully
1699
1721
  * @throws ApiError
1700
1722
  */
1701
- public static priceControllerDelete(
1702
- data: PriceControllerDeleteData
1703
- ): CancelablePromise<PriceControllerDeleteResponse> {
1723
+ public static payeeControllerFindOne(
1724
+ data: PayeeControllerFindOneData
1725
+ ): CancelablePromise<PayeeControllerFindOneResponse> {
1704
1726
  return __request(OpenAPI, {
1705
- method: 'DELETE',
1706
- url: '/api/v1/{region}/bean/prices/{id}',
1727
+ method: 'GET',
1728
+ url: '/api/v1/bean/payees/{id}',
1707
1729
  path: {
1708
- id: data.id,
1709
- region: data.region
1730
+ id: data.id
1710
1731
  },
1711
1732
  errors: {
1712
- 404: 'Price not found'
1733
+ 403: 'Payee belongs to another user',
1734
+ 404: 'Payee not found'
1713
1735
  }
1714
1736
  });
1715
1737
  }
1716
1738
 
1717
1739
  /**
1718
- * Bulk create prices
1719
- * Creates multiple price entries at once (skips duplicates)
1740
+ * Update payee
1741
+ * Updates a payee mapping. The payee name cannot be changed after creation.
1720
1742
  * @param data The data for the request.
1721
- * @param data.region Region code for tenant context
1743
+ * @param data.id Payee UUID
1722
1744
  * @param data.requestBody
1723
- * @returns PriceResponseDto Prices created successfully
1745
+ * @returns PayeeResponseDto Payee updated successfully
1724
1746
  * @throws ApiError
1725
1747
  */
1726
- public static priceControllerBulkCreate(
1727
- data: PriceControllerBulkCreateData
1728
- ): CancelablePromise<PriceControllerBulkCreateResponse> {
1748
+ public static payeeControllerUpdate(
1749
+ data: PayeeControllerUpdateData
1750
+ ): CancelablePromise<PayeeControllerUpdateResponse> {
1729
1751
  return __request(OpenAPI, {
1730
- method: 'POST',
1731
- url: '/api/v1/{region}/bean/prices/bulk',
1752
+ method: 'PUT',
1753
+ url: '/api/v1/bean/payees/{id}',
1732
1754
  path: {
1733
- region: data.region
1755
+ id: data.id
1734
1756
  },
1735
1757
  body: data.requestBody,
1736
- mediaType: 'application/json'
1758
+ mediaType: 'application/json',
1759
+ errors: {
1760
+ 400: 'Invalid input data',
1761
+ 404: 'Payee not found'
1762
+ }
1737
1763
  });
1738
1764
  }
1739
- }
1740
1765
 
1741
- export class RecurringRulesService {
1742
1766
  /**
1743
- * Create a new recurring rule
1744
- * 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.
1745
1769
  * @param data The data for the request.
1746
- * @param data.region Region code for tenant context
1747
- * @param data.requestBody
1748
- * @returns RecurringRuleResponseDto Rule created successfully
1770
+ * @param data.id Payee UUID
1771
+ * @returns void Payee deleted successfully
1749
1772
  * @throws ApiError
1750
1773
  */
1751
- public static recurringRuleControllerCreate(
1752
- data: RecurringRuleControllerCreateData
1753
- ): CancelablePromise<RecurringRuleControllerCreateResponse> {
1774
+ public static payeeControllerDelete(
1775
+ data: PayeeControllerDeleteData
1776
+ ): CancelablePromise<PayeeControllerDeleteResponse> {
1754
1777
  return __request(OpenAPI, {
1755
- method: 'POST',
1756
- url: '/api/v1/{region}/bean/recurring-rules',
1778
+ method: 'DELETE',
1779
+ url: '/api/v1/bean/payees/{id}',
1757
1780
  path: {
1758
- region: data.region
1781
+ id: data.id
1759
1782
  },
1760
- body: data.requestBody,
1761
- mediaType: 'application/json',
1762
1783
  errors: {
1763
- 400: 'Invalid input data (e.g., autoCreate without accounts)',
1764
- 409: 'Rule with same name already exists'
1784
+ 404: 'Payee not found'
1765
1785
  }
1766
1786
  });
1767
1787
  }
1788
+ }
1768
1789
 
1790
+ export class AdminPayeeProfilesService {
1769
1791
  /**
1770
- * List recurring rules
1771
- * 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).
1772
1794
  * @param data The data for the request.
1773
- * @param data.region Region code for tenant context
1774
- * @param data.isActive Filter by active status
1775
- * @param data.frequency Filter by frequency (WEEKLY, MONTHLY, etc.)
1776
- * @param data.hasAutoCreate Filter by autoCreate enabled
1777
- * @returns RecurringRuleResponseDto Rules retrieved successfully
1795
+ * @param data.requestBody
1796
+ * @returns PayeeProfileResponseDto Payee profile created successfully
1778
1797
  * @throws ApiError
1779
1798
  */
1780
- public static recurringRuleControllerFindAll(
1781
- data: RecurringRuleControllerFindAllData
1782
- ): CancelablePromise<RecurringRuleControllerFindAllResponse> {
1799
+ public static payeeProfileAdminControllerCreate(
1800
+ data: PayeeProfileAdminControllerCreateData
1801
+ ): CancelablePromise<PayeeProfileAdminControllerCreateResponse> {
1783
1802
  return __request(OpenAPI, {
1784
- method: 'GET',
1785
- url: '/api/v1/{region}/bean/recurring-rules',
1786
- path: {
1787
- region: data.region
1788
- },
1789
- query: {
1790
- isActive: data.isActive,
1791
- frequency: data.frequency,
1792
- 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'
1793
1811
  }
1794
1812
  });
1795
1813
  }
1796
1814
 
1797
1815
  /**
1798
- * Create recurring rule from transaction
1799
- * 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.
1800
1818
  * @param data The data for the request.
1801
- * @param data.transactionId Source transaction ID
1802
- * @param data.region Region code for tenant context
1803
- * @param data.requestBody
1804
- * @returns RecurringRuleResponseDto Rule created successfully
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
1805
1826
  * @throws ApiError
1806
1827
  */
1807
- public static recurringRuleControllerCreateFromTransaction(
1808
- data: RecurringRuleControllerCreateFromTransactionData
1809
- ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
1828
+ public static payeeProfileAdminControllerFindAll(
1829
+ data: PayeeProfileAdminControllerFindAllData = {}
1830
+ ): CancelablePromise<PayeeProfileAdminControllerFindAllResponse> {
1810
1831
  return __request(OpenAPI, {
1811
- method: 'POST',
1812
- url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
1813
- path: {
1814
- transactionId: data.transactionId,
1815
- region: data.region
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
1816
1841
  },
1817
- body: data.requestBody,
1818
- mediaType: 'application/json',
1819
1842
  errors: {
1820
- 404: 'Transaction not found',
1821
- 409: 'Rule with same name already exists or transaction already linked'
1843
+ 403: 'Admin access required'
1822
1844
  }
1823
1845
  });
1824
1846
  }
1825
1847
 
1826
1848
  /**
1827
- * Get recurring rule by ID
1828
- * 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.
1829
1851
  * @param data The data for the request.
1830
- * @param data.id Rule ID
1831
- * @param data.region Region code for tenant context
1832
- * @returns RecurringRuleResponseDto Rule retrieved successfully
1852
+ * @param data.id Payee profile ID (UUID)
1853
+ * @returns PayeeProfileResponseDto Payee profile retrieved successfully
1833
1854
  * @throws ApiError
1834
1855
  */
1835
- public static recurringRuleControllerFindOne(
1836
- data: RecurringRuleControllerFindOneData
1837
- ): CancelablePromise<RecurringRuleControllerFindOneResponse> {
1856
+ public static payeeProfileAdminControllerFindOne(
1857
+ data: PayeeProfileAdminControllerFindOneData
1858
+ ): CancelablePromise<PayeeProfileAdminControllerFindOneResponse> {
1838
1859
  return __request(OpenAPI, {
1839
1860
  method: 'GET',
1840
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1861
+ url: '/api/v1/admin/payee-profiles/{id}',
1841
1862
  path: {
1842
- id: data.id,
1843
- region: data.region
1863
+ id: data.id
1844
1864
  },
1845
1865
  errors: {
1846
- 404: 'Rule not found'
1866
+ 403: 'Admin access required',
1867
+ 404: 'Payee profile not found'
1847
1868
  }
1848
1869
  });
1849
1870
  }
1850
1871
 
1851
1872
  /**
1852
- * Update recurring rule
1853
- * Updates an existing recurring rule
1873
+ * Update payee profile (Admin only)
1874
+ * Updates an existing payee profile. The canonical name cannot be changed.
1854
1875
  * @param data The data for the request.
1855
- * @param data.id Rule ID
1856
- * @param data.region Region code for tenant context
1876
+ * @param data.id Payee profile ID (UUID)
1857
1877
  * @param data.requestBody
1858
- * @returns RecurringRuleResponseDto Rule updated successfully
1878
+ * @returns PayeeProfileResponseDto Payee profile updated successfully
1859
1879
  * @throws ApiError
1860
1880
  */
1861
- public static recurringRuleControllerUpdate(
1862
- data: RecurringRuleControllerUpdateData
1863
- ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
1881
+ public static payeeProfileAdminControllerUpdate(
1882
+ data: PayeeProfileAdminControllerUpdateData
1883
+ ): CancelablePromise<PayeeProfileAdminControllerUpdateResponse> {
1864
1884
  return __request(OpenAPI, {
1865
- method: 'PATCH',
1866
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1885
+ method: 'PUT',
1886
+ url: '/api/v1/admin/payee-profiles/{id}',
1867
1887
  path: {
1868
- id: data.id,
1869
- region: data.region
1888
+ id: data.id
1870
1889
  },
1871
1890
  body: data.requestBody,
1872
1891
  mediaType: 'application/json',
1873
1892
  errors: {
1874
- 400: 'Invalid input data',
1875
- 404: 'Rule not found'
1893
+ 403: 'Admin access required',
1894
+ 404: 'Payee profile not found'
1876
1895
  }
1877
1896
  });
1878
1897
  }
1879
1898
 
1880
1899
  /**
1881
- * Delete recurring rule
1882
- * 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.
1883
1902
  * @param data The data for the request.
1884
- * @param data.id Rule ID
1885
- * @param data.region Region code for tenant context
1886
- * @returns void Rule deleted successfully
1903
+ * @param data.id Payee profile ID (UUID)
1904
+ * @returns void Payee profile deleted successfully
1887
1905
  * @throws ApiError
1888
1906
  */
1889
- public static recurringRuleControllerDelete(
1890
- data: RecurringRuleControllerDeleteData
1891
- ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
1907
+ public static payeeProfileAdminControllerDelete(
1908
+ data: PayeeProfileAdminControllerDeleteData
1909
+ ): CancelablePromise<PayeeProfileAdminControllerDeleteResponse> {
1892
1910
  return __request(OpenAPI, {
1893
1911
  method: 'DELETE',
1894
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1912
+ url: '/api/v1/admin/payee-profiles/{id}',
1895
1913
  path: {
1896
- id: data.id,
1897
- region: data.region
1914
+ id: data.id
1898
1915
  },
1899
1916
  errors: {
1900
- 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'
1901
1920
  }
1902
1921
  });
1903
1922
  }
1904
1923
 
1905
1924
  /**
1906
- * Get rule with statistics
1907
- * 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.
1908
1927
  * @param data The data for the request.
1909
- * @param data.id Rule ID
1910
- * @param data.region Region code for tenant context
1911
- * @returns RecurringRuleWithStatsResponseDto Rule with stats retrieved successfully
1928
+ * @param data.id Payee profile ID (UUID)
1929
+ * @returns PayeeProfileResponseDto Payee profile verified successfully
1912
1930
  * @throws ApiError
1913
1931
  */
1914
- public static recurringRuleControllerGetWithStats(
1915
- data: RecurringRuleControllerGetWithStatsData
1916
- ): CancelablePromise<RecurringRuleControllerGetWithStatsResponse> {
1932
+ public static payeeProfileAdminControllerVerify(
1933
+ data: PayeeProfileAdminControllerVerifyData
1934
+ ): CancelablePromise<PayeeProfileAdminControllerVerifyResponse> {
1917
1935
  return __request(OpenAPI, {
1918
- method: 'GET',
1919
- url: '/api/v1/{region}/bean/recurring-rules/{id}/stats',
1936
+ method: 'POST',
1937
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1920
1938
  path: {
1921
- id: data.id,
1922
- region: data.region
1939
+ id: data.id
1923
1940
  },
1924
1941
  errors: {
1925
- 404: 'Rule not found'
1942
+ 403: 'Admin access required',
1943
+ 404: 'Payee profile not found'
1926
1944
  }
1927
1945
  });
1928
1946
  }
1929
- }
1930
1947
 
1931
- export class ExpectedTransactionsService {
1932
1948
  /**
1933
- * List expected transactions
1934
- * 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.
1935
1951
  * @param data The data for the request.
1936
- * @param data.region Region code for tenant context
1937
- * @param data.ruleId Filter by recurring rule ID
1938
- * @param data.status Filter by status (PENDING, COMPLETED, SKIPPED)
1939
- * @param data.fromDate Filter by date range start (YYYY-MM-DD)
1940
- * @param data.toDate Filter by date range end (YYYY-MM-DD)
1941
- * @returns ExpectedTransactionListResponseDto Expected transactions retrieved successfully
1952
+ * @param data.id Payee profile ID (UUID)
1953
+ * @returns void Payee profile unverified successfully
1942
1954
  * @throws ApiError
1943
1955
  */
1944
- public static expectedTransactionControllerFindAll(
1945
- data: ExpectedTransactionControllerFindAllData
1946
- ): CancelablePromise<ExpectedTransactionControllerFindAllResponse> {
1956
+ public static payeeProfileAdminControllerUnverify(
1957
+ data: PayeeProfileAdminControllerUnverifyData
1958
+ ): CancelablePromise<PayeeProfileAdminControllerUnverifyResponse> {
1947
1959
  return __request(OpenAPI, {
1948
- method: 'GET',
1949
- url: '/api/v1/{region}/bean/expected-transactions',
1960
+ method: 'DELETE',
1961
+ url: '/api/v1/admin/payee-profiles/{id}/verify',
1950
1962
  path: {
1951
- region: data.region
1963
+ id: data.id
1952
1964
  },
1953
- query: {
1954
- ruleId: data.ruleId,
1955
- status: data.status,
1956
- fromDate: data.fromDate,
1957
- toDate: data.toDate
1965
+ errors: {
1966
+ 403: 'Admin access required',
1967
+ 404: 'Payee profile not found'
1958
1968
  }
1959
1969
  });
1960
1970
  }
1971
+ }
1961
1972
 
1973
+ export class PayeeProfilesService {
1962
1974
  /**
1963
- * List overdue expected transactions
1964
- * Returns all overdue expected transactions (PENDING past tolerance)
1965
- * @param data The data for the request.
1966
- * @param data.region Region code for tenant context
1967
- * @returns ExpectedTransactionListResponseDto Overdue transactions retrieved successfully
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
1968
1978
  * @throws ApiError
1969
1979
  */
1970
- public static expectedTransactionControllerFindOverdue(
1971
- data: ExpectedTransactionControllerFindOverdueData
1972
- ): CancelablePromise<ExpectedTransactionControllerFindOverdueResponse> {
1980
+ public static payeeProfileControllerListActive(): CancelablePromise<PayeeProfileControllerListActiveResponse> {
1973
1981
  return __request(OpenAPI, {
1974
1982
  method: 'GET',
1975
- url: '/api/v1/{region}/bean/expected-transactions/overdue',
1976
- path: {
1977
- region: data.region
1983
+ url: '/api/v1/bean/payee-profiles',
1984
+ errors: {
1985
+ 401: 'Missing or invalid token'
1978
1986
  }
1979
1987
  });
1980
1988
  }
1989
+ }
1981
1990
 
1991
+ export class BeanCommoditiesService {
1982
1992
  /**
1983
- * Get expected transaction by ID
1984
- * Returns a specific expected transaction with rule details
1993
+ * Create a new commodity
1994
+ * Creates a new commodity definition for the authenticated user
1985
1995
  * @param data The data for the request.
1986
- * @param data.id Expected transaction ID
1987
1996
  * @param data.region Region code for tenant context
1988
- * @returns ExpectedTransactionResponseDto Expected transaction retrieved successfully
1997
+ * @param data.requestBody
1998
+ * @returns CommodityResponseDto Commodity created successfully
1989
1999
  * @throws ApiError
1990
2000
  */
1991
- public static expectedTransactionControllerFindOne(
1992
- data: ExpectedTransactionControllerFindOneData
1993
- ): CancelablePromise<ExpectedTransactionControllerFindOneResponse> {
2001
+ public static commodityControllerCreate(
2002
+ data: CommodityControllerCreateData
2003
+ ): CancelablePromise<CommodityControllerCreateResponse> {
1994
2004
  return __request(OpenAPI, {
1995
- method: 'GET',
1996
- url: '/api/v1/{region}/bean/expected-transactions/{id}',
2005
+ method: 'POST',
2006
+ url: '/api/v1/{region}/bean/commodities',
1997
2007
  path: {
1998
- id: data.id,
1999
2008
  region: data.region
2000
2009
  },
2010
+ body: data.requestBody,
2011
+ mediaType: 'application/json',
2001
2012
  errors: {
2002
- 404: 'Expected transaction not found'
2013
+ 400: 'Invalid input data',
2014
+ 409: 'Commodity already exists'
2003
2015
  }
2004
2016
  });
2005
2017
  }
2006
2018
 
2007
2019
  /**
2008
- * Skip expected transaction
2009
- * Marks an expected transaction as skipped (PENDING -> SKIPPED)
2020
+ * List user commodities
2021
+ * Returns all commodity definitions for the authenticated user with optional filtering
2010
2022
  * @param data The data for the request.
2011
- * @param data.id Expected transaction ID
2012
2023
  * @param data.region Region code for tenant context
2013
- * @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
2014
2027
  * @throws ApiError
2015
2028
  */
2016
- public static expectedTransactionControllerSkip(
2017
- data: ExpectedTransactionControllerSkipData
2018
- ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
2029
+ public static commodityControllerFindAll(
2030
+ data: CommodityControllerFindAllData
2031
+ ): CancelablePromise<CommodityControllerFindAllResponse> {
2019
2032
  return __request(OpenAPI, {
2020
- method: 'POST',
2021
- url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2033
+ method: 'GET',
2034
+ url: '/api/v1/{region}/bean/commodities',
2022
2035
  path: {
2023
- id: data.id,
2024
2036
  region: data.region
2025
2037
  },
2026
- errors: {
2027
- 400: 'Cannot skip - not in PENDING status',
2028
- 404: 'Expected transaction not found'
2038
+ query: {
2039
+ search: data.search,
2040
+ symbol: data.symbol
2029
2041
  }
2030
2042
  });
2031
2043
  }
2032
2044
 
2033
2045
  /**
2034
- * Undo skip
2035
- * Reverses a skip operation (SKIPPED -> PENDING)
2046
+ * Get commodity by symbol
2047
+ * Returns a specific commodity definition by its symbol
2036
2048
  * @param data The data for the request.
2037
- * @param data.id Expected transaction ID
2049
+ * @param data.symbol Commodity symbol
2038
2050
  * @param data.region Region code for tenant context
2039
- * @returns ExpectedTransactionResponseDto Skip undone successfully
2051
+ * @returns CommodityResponseDto Commodity retrieved successfully
2040
2052
  * @throws ApiError
2041
2053
  */
2042
- public static expectedTransactionControllerUndoSkip(
2043
- data: ExpectedTransactionControllerUndoSkipData
2044
- ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
2045
- return __request(OpenAPI, {
2046
- method: 'DELETE',
2047
- url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2054
+ public static commodityControllerFindOne(
2055
+ data: CommodityControllerFindOneData
2056
+ ): CancelablePromise<CommodityControllerFindOneResponse> {
2057
+ return __request(OpenAPI, {
2058
+ method: 'GET',
2059
+ url: '/api/v1/{region}/bean/commodities/{symbol}',
2048
2060
  path: {
2049
- id: data.id,
2061
+ symbol: data.symbol,
2050
2062
  region: data.region
2051
2063
  },
2052
2064
  errors: {
2053
- 400: 'Cannot undo - not in SKIPPED status',
2054
- 404: 'Expected transaction not found'
2065
+ 404: 'Commodity not found'
2055
2066
  }
2056
2067
  });
2057
2068
  }
2058
2069
 
2059
2070
  /**
2060
- * Confirm transaction match
2061
- * Manually matches an expected transaction with an actual transaction
2071
+ * Update commodity
2072
+ * Updates an existing commodity definition. Symbol cannot be changed.
2062
2073
  * @param data The data for the request.
2063
- * @param data.id Expected transaction ID
2074
+ * @param data.symbol Commodity symbol
2064
2075
  * @param data.region Region code for tenant context
2065
2076
  * @param data.requestBody
2066
- * @returns unknown Match confirmed successfully
2077
+ * @returns CommodityResponseDto Commodity updated successfully
2067
2078
  * @throws ApiError
2068
2079
  */
2069
- public static expectedTransactionControllerConfirmMatch(
2070
- data: ExpectedTransactionControllerConfirmMatchData
2071
- ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
2080
+ public static commodityControllerUpdate(
2081
+ data: CommodityControllerUpdateData
2082
+ ): CancelablePromise<CommodityControllerUpdateResponse> {
2072
2083
  return __request(OpenAPI, {
2073
- method: 'POST',
2074
- url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2084
+ method: 'PUT',
2085
+ url: '/api/v1/{region}/bean/commodities/{symbol}',
2075
2086
  path: {
2076
- id: data.id,
2087
+ symbol: data.symbol,
2077
2088
  region: data.region
2078
2089
  },
2079
2090
  body: data.requestBody,
2080
2091
  mediaType: 'application/json',
2081
2092
  errors: {
2082
- 400: 'Cannot match - not in PENDING status',
2083
- 404: 'Expected or actual transaction not found',
2084
- 409: 'Actual transaction already matched to another rule'
2093
+ 400: 'Invalid input data',
2094
+ 404: 'Commodity not found'
2085
2095
  }
2086
2096
  });
2087
2097
  }
2088
2098
 
2089
2099
  /**
2090
- * Unmatch transaction
2091
- * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
2100
+ * Delete commodity
2101
+ * Deletes a commodity definition
2092
2102
  * @param data The data for the request.
2093
- * @param data.id Expected transaction ID
2103
+ * @param data.symbol Commodity symbol
2094
2104
  * @param data.region Region code for tenant context
2095
- * @returns unknown Match removed successfully
2105
+ * @returns void Commodity deleted successfully
2096
2106
  * @throws ApiError
2097
2107
  */
2098
- public static expectedTransactionControllerUnmatch(
2099
- data: ExpectedTransactionControllerUnmatchData
2100
- ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
2108
+ public static commodityControllerDelete(
2109
+ data: CommodityControllerDeleteData
2110
+ ): CancelablePromise<CommodityControllerDeleteResponse> {
2101
2111
  return __request(OpenAPI, {
2102
2112
  method: 'DELETE',
2103
- url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2113
+ url: '/api/v1/{region}/bean/commodities/{symbol}',
2104
2114
  path: {
2105
- id: data.id,
2115
+ symbol: data.symbol,
2106
2116
  region: data.region
2107
2117
  },
2108
2118
  errors: {
2109
- 400: 'Cannot unmatch - not in COMPLETED status',
2110
- 404: 'Expected transaction not found'
2119
+ 404: 'Commodity not found'
2111
2120
  }
2112
2121
  });
2113
2122
  }
2114
2123
 
2115
2124
  /**
2116
- * Enter Now
2117
- * 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
2118
2127
  * @param data The data for the request.
2119
- * @param data.id Expected transaction ID
2128
+ * @param data.symbol Commodity symbol
2120
2129
  * @param data.region Region code for tenant context
2121
- * @param data.requestBody
2122
- * @returns unknown Transaction created successfully
2130
+ * @returns CommodityResponseDto Commodity retrieved or created
2123
2131
  * @throws ApiError
2124
2132
  */
2125
- public static expectedTransactionControllerEnterNow(
2126
- data: ExpectedTransactionControllerEnterNowData
2127
- ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
2133
+ public static commodityControllerGetOrCreate(
2134
+ data: CommodityControllerGetOrCreateData
2135
+ ): CancelablePromise<CommodityControllerGetOrCreateResponse> {
2128
2136
  return __request(OpenAPI, {
2129
2137
  method: 'POST',
2130
- url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
2138
+ url: '/api/v1/{region}/bean/commodities/{symbol}/ensure',
2131
2139
  path: {
2132
- id: data.id,
2140
+ symbol: data.symbol,
2133
2141
  region: data.region
2134
- },
2135
- body: data.requestBody,
2136
- mediaType: 'application/json',
2137
- errors: {
2138
- 400: 'Cannot enter - not in PENDING status or missing accounts',
2139
- 404: 'Expected transaction or accounts not found'
2140
2142
  }
2141
2143
  });
2142
2144
  }
2143
- }
2144
2145
 
2145
- export class RecurringForecastService {
2146
2146
  /**
2147
- * Get cash flow forecast
2148
- * 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
2149
2149
  * @param data The data for the request.
2150
2150
  * @param data.region Region code for tenant context
2151
- * @param data.months Number of months to forecast (1-12, default 3)
2152
- * @returns ForecastResponseDto Forecast retrieved successfully
2151
+ * @returns CommodityResponseDto Commodities created successfully
2153
2152
  * @throws ApiError
2154
2153
  */
2155
- public static forecastControllerGetForecast(
2156
- data: ForecastControllerGetForecastData
2157
- ): CancelablePromise<ForecastControllerGetForecastResponse> {
2154
+ public static commodityControllerBulkCreate(
2155
+ data: CommodityControllerBulkCreateData
2156
+ ): CancelablePromise<CommodityControllerBulkCreateResponse> {
2158
2157
  return __request(OpenAPI, {
2159
- method: 'GET',
2160
- url: '/api/v1/{region}/bean/recurring/forecast',
2158
+ method: 'POST',
2159
+ url: '/api/v1/{region}/bean/commodities/bulk',
2161
2160
  path: {
2162
2161
  region: data.region
2163
- },
2164
- query: {
2165
- months: data.months
2166
2162
  }
2167
2163
  });
2168
2164
  }
@@ -2325,534 +2321,598 @@ export class ReportingService {
2325
2321
  }
2326
2322
  }
2327
2323
 
2328
- export class UsersService {
2329
- /**
2330
- * Delete own user account
2331
- * @param data The data for the request.
2332
- * @param data.requestBody
2333
- * @returns void User deleted successfully
2334
- * @throws ApiError
2335
- */
2336
- public static userControllerDeleteOwnUser(
2337
- data: UserControllerDeleteOwnUserData
2338
- ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
2339
- return __request(OpenAPI, {
2340
- method: 'DELETE',
2341
- url: '/api/v1/users',
2342
- body: data.requestBody,
2343
- mediaType: 'application/json',
2344
- errors: {
2345
- 403: 'Invalid access token'
2346
- }
2347
- });
2348
- }
2349
-
2350
- /**
2351
- * Get current authenticated user
2352
- * @param data The data for the request.
2353
- * @param data.acceptLanguage
2354
- * @returns UserResponseDto User retrieved successfully
2355
- * @throws ApiError
2356
- */
2357
- public static userControllerGetUser(
2358
- data: UserControllerGetUserData
2359
- ): CancelablePromise<UserControllerGetUserResponse> {
2360
- return __request(OpenAPI, {
2361
- method: 'GET',
2362
- url: '/api/v1/users',
2363
- headers: {
2364
- 'accept-language': data.acceptLanguage
2365
- }
2366
- });
2367
- }
2368
-
2324
+ export class BeanPricesService {
2369
2325
  /**
2370
- * Sign up new user
2371
- * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
2326
+ * Create a new price
2327
+ * Creates a new price entry for the authenticated user
2372
2328
  * @param data The data for the request.
2329
+ * @param data.region Region code for tenant context
2373
2330
  * @param data.requestBody
2374
- * @returns SignupResponseDto User created successfully
2331
+ * @returns PriceResponseDto Price created successfully
2375
2332
  * @throws ApiError
2376
2333
  */
2377
- public static userControllerSignupUser(
2378
- data: UserControllerSignupUserData
2379
- ): CancelablePromise<UserControllerSignupUserResponse> {
2334
+ public static priceControllerCreate(
2335
+ data: PriceControllerCreateData
2336
+ ): CancelablePromise<PriceControllerCreateResponse> {
2380
2337
  return __request(OpenAPI, {
2381
2338
  method: 'POST',
2382
- url: '/api/v1/users',
2339
+ url: '/api/v1/{region}/bean/prices',
2340
+ path: {
2341
+ region: data.region
2342
+ },
2383
2343
  body: data.requestBody,
2384
2344
  mediaType: 'application/json',
2385
2345
  errors: {
2386
- 400: 'Invalid Turnstile token (when Turnstile is enabled)',
2387
- 403: 'User signup is disabled'
2346
+ 404: 'Currency or quoteCurrency commodity not found',
2347
+ 409: 'Price already exists for this currency pair and date'
2388
2348
  }
2389
2349
  });
2390
2350
  }
2391
2351
 
2392
2352
  /**
2393
- * Delete user by ID (admin only)
2353
+ * List user prices
2354
+ * Returns all price entries for the authenticated user with optional filtering
2394
2355
  * @param data The data for the request.
2395
- * @param data.id User ID to delete
2396
- * @returns void User deleted 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
2397
2365
  * @throws ApiError
2398
2366
  */
2399
- public static userControllerDeleteUser(
2400
- data: UserControllerDeleteUserData
2401
- ): CancelablePromise<UserControllerDeleteUserResponse> {
2367
+ public static priceControllerFindAll(
2368
+ data: PriceControllerFindAllData
2369
+ ): CancelablePromise<PriceControllerFindAllResponse> {
2402
2370
  return __request(OpenAPI, {
2403
- method: 'DELETE',
2404
- url: '/api/v1/users/{id}',
2371
+ method: 'GET',
2372
+ url: '/api/v1/{region}/bean/prices',
2405
2373
  path: {
2406
- id: data.id
2374
+ region: data.region
2407
2375
  },
2408
- errors: {
2409
- 403: 'Cannot delete own account or insufficient permissions'
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
2410
2384
  }
2411
2385
  });
2412
2386
  }
2413
2387
 
2414
2388
  /**
2415
- * Get user info by user ID
2389
+ * Get price by ID
2390
+ * Returns a single price entry by its ID
2416
2391
  * @param data The data for the request.
2417
- * @param data.id User ID
2418
- * @returns unknown User info retrieved successfully
2392
+ * @param data.id Price ID
2393
+ * @param data.region Region code for tenant context
2394
+ * @returns PriceResponseDto Price retrieved successfully
2419
2395
  * @throws ApiError
2420
2396
  */
2421
- public static userControllerGetUserInfo(
2422
- data: UserControllerGetUserInfoData
2423
- ): CancelablePromise<UserControllerGetUserInfoResponse> {
2397
+ public static priceControllerFindOne(
2398
+ data: PriceControllerFindOneData
2399
+ ): CancelablePromise<PriceControllerFindOneResponse> {
2424
2400
  return __request(OpenAPI, {
2425
2401
  method: 'GET',
2426
- url: '/api/v1/users/{id}/info',
2402
+ url: '/api/v1/{region}/bean/prices/{id}',
2427
2403
  path: {
2428
- id: data.id
2404
+ id: data.id,
2405
+ region: data.region
2429
2406
  },
2430
2407
  errors: {
2431
- 403: 'Cannot access other user info without admin permission'
2408
+ 404: 'Price not found'
2432
2409
  }
2433
2410
  });
2434
2411
  }
2435
2412
 
2436
2413
  /**
2437
- * Update user settings
2414
+ * Update a price
2415
+ * Updates an existing price entry
2438
2416
  * @param data The data for the request.
2417
+ * @param data.id Price ID
2418
+ * @param data.region Region code for tenant context
2439
2419
  * @param data.requestBody
2440
- * @returns unknown Settings updated successfully
2420
+ * @returns PriceResponseDto Price updated successfully
2441
2421
  * @throws ApiError
2442
2422
  */
2443
- public static userControllerUpdateUserSetting(
2444
- data: UserControllerUpdateUserSettingData
2445
- ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
2423
+ public static priceControllerUpdate(
2424
+ data: PriceControllerUpdateData
2425
+ ): CancelablePromise<PriceControllerUpdateResponse> {
2446
2426
  return __request(OpenAPI, {
2447
2427
  method: 'PUT',
2448
- url: '/api/v1/users/setting',
2428
+ url: '/api/v1/{region}/bean/prices/{id}',
2429
+ path: {
2430
+ id: data.id,
2431
+ region: data.region
2432
+ },
2449
2433
  body: data.requestBody,
2450
2434
  mediaType: 'application/json',
2451
2435
  errors: {
2452
- 403: 'Insufficient permissions'
2436
+ 404: 'Price not found',
2437
+ 409: 'Updated price conflicts with existing price'
2453
2438
  }
2454
2439
  });
2455
2440
  }
2456
2441
 
2457
2442
  /**
2458
- * Get all user settings paginated (admin only)
2443
+ * Delete a price
2444
+ * Deletes a price entry (hard delete)
2459
2445
  * @param data The data for the request.
2460
- * @param data.pageNo Page number
2461
- * @param data.pageSize Page size
2462
- * @returns unknown Settings list retrieved successfully
2446
+ * @param data.id Price ID
2447
+ * @param data.region Region code for tenant context
2448
+ * @returns void Price deleted successfully
2463
2449
  * @throws ApiError
2464
2450
  */
2465
- public static userControllerGetAllUserSettingsByPage(
2466
- data: UserControllerGetAllUserSettingsByPageData
2467
- ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
2451
+ public static priceControllerDelete(
2452
+ data: PriceControllerDeleteData
2453
+ ): CancelablePromise<PriceControllerDeleteResponse> {
2468
2454
  return __request(OpenAPI, {
2469
- method: 'GET',
2470
- url: '/api/v1/users/settings-by-page',
2471
- query: {
2472
- pageNo: data.pageNo,
2473
- pageSize: data.pageSize
2455
+ method: 'DELETE',
2456
+ url: '/api/v1/{region}/bean/prices/{id}',
2457
+ path: {
2458
+ id: data.id,
2459
+ region: data.region
2460
+ },
2461
+ errors: {
2462
+ 404: 'Price not found'
2474
2463
  }
2475
2464
  });
2476
2465
  }
2477
2466
 
2478
2467
  /**
2479
- * Get asset and liability summary for current user
2480
- * @returns unknown Summary retrieved successfully
2468
+ * Bulk create prices
2469
+ * Creates multiple price entries at once (skips duplicates)
2470
+ * @param data The data for the request.
2471
+ * @param data.region Region code for tenant context
2472
+ * @param data.requestBody
2473
+ * @returns PriceResponseDto Prices created successfully
2481
2474
  * @throws ApiError
2482
2475
  */
2483
- public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
2476
+ public static priceControllerBulkCreate(
2477
+ data: PriceControllerBulkCreateData
2478
+ ): CancelablePromise<PriceControllerBulkCreateResponse> {
2484
2479
  return __request(OpenAPI, {
2485
- method: 'GET',
2486
- url: '/api/v1/users/asset-liability-summary'
2480
+ method: 'POST',
2481
+ url: '/api/v1/{region}/bean/prices/bulk',
2482
+ path: {
2483
+ region: data.region
2484
+ },
2485
+ body: data.requestBody,
2486
+ mediaType: 'application/json'
2487
2487
  });
2488
2488
  }
2489
2489
  }
2490
2490
 
2491
- export class PropertiesService {
2491
+ export class RecurringRulesService {
2492
2492
  /**
2493
- * Get all system properties
2494
- * @returns unknown Properties retrieved successfully
2493
+ * Create a new recurring rule
2494
+ * Creates a new recurring transaction rule for the authenticated user
2495
+ * @param data The data for the request.
2496
+ * @param data.region Region code for tenant context
2497
+ * @param data.requestBody
2498
+ * @returns RecurringRuleResponseDto Rule created successfully
2495
2499
  * @throws ApiError
2496
2500
  */
2497
- public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
2501
+ public static recurringRuleControllerCreate(
2502
+ data: RecurringRuleControllerCreateData
2503
+ ): CancelablePromise<RecurringRuleControllerCreateResponse> {
2498
2504
  return __request(OpenAPI, {
2499
- method: 'GET',
2500
- url: '/api/v1/admin/properties',
2505
+ method: 'POST',
2506
+ url: '/api/v1/{region}/bean/recurring-rules',
2507
+ path: {
2508
+ region: data.region
2509
+ },
2510
+ body: data.requestBody,
2511
+ mediaType: 'application/json',
2501
2512
  errors: {
2502
- 401: 'Unauthorized',
2503
- 403: 'Forbidden - insufficient permissions'
2513
+ 400: 'Invalid input data (e.g., autoCreate without accounts)',
2514
+ 409: 'Rule with same name already exists'
2504
2515
  }
2505
2516
  });
2506
2517
  }
2507
2518
 
2508
2519
  /**
2509
- * Get property by key
2520
+ * List recurring rules
2521
+ * Returns all recurring rules for the authenticated user with optional filtering
2510
2522
  * @param data The data for the request.
2511
- * @param data.key Property key
2512
- * @returns unknown Property 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
2513
2528
  * @throws ApiError
2514
2529
  */
2515
- public static propertyControllerGetByKey(
2516
- data: PropertyControllerGetByKeyData
2517
- ): CancelablePromise<PropertyControllerGetByKeyResponse> {
2530
+ public static recurringRuleControllerFindAll(
2531
+ data: RecurringRuleControllerFindAllData
2532
+ ): CancelablePromise<RecurringRuleControllerFindAllResponse> {
2518
2533
  return __request(OpenAPI, {
2519
2534
  method: 'GET',
2520
- url: '/api/v1/admin/properties/{key}',
2535
+ url: '/api/v1/{region}/bean/recurring-rules',
2521
2536
  path: {
2522
- key: data.key
2537
+ region: data.region
2523
2538
  },
2524
- errors: {
2525
- 401: 'Unauthorized',
2526
- 403: 'Forbidden - insufficient permissions',
2527
- 404: 'Property not found'
2539
+ query: {
2540
+ isActive: data.isActive,
2541
+ frequency: data.frequency,
2542
+ hasAutoCreate: data.hasAutoCreate
2528
2543
  }
2529
2544
  });
2530
2545
  }
2531
2546
 
2532
2547
  /**
2533
- * Update a system property
2548
+ * Create recurring rule from transaction
2549
+ * Auto-creates a recurring rule using transaction data. User only confirms frequency.
2534
2550
  * @param data The data for the request.
2535
- * @param data.key Property key
2551
+ * @param data.transactionId Source transaction ID
2552
+ * @param data.region Region code for tenant context
2536
2553
  * @param data.requestBody
2537
- * @returns unknown Property updated successfully
2554
+ * @returns RecurringRuleResponseDto Rule created successfully
2538
2555
  * @throws ApiError
2539
2556
  */
2540
- public static propertyControllerUpdate(
2541
- data: PropertyControllerUpdateData
2542
- ): CancelablePromise<PropertyControllerUpdateResponse> {
2557
+ public static recurringRuleControllerCreateFromTransaction(
2558
+ data: RecurringRuleControllerCreateFromTransactionData
2559
+ ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
2543
2560
  return __request(OpenAPI, {
2544
- method: 'PUT',
2545
- url: '/api/v1/admin/properties/{key}',
2561
+ method: 'POST',
2562
+ url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
2546
2563
  path: {
2547
- key: data.key
2564
+ transactionId: data.transactionId,
2565
+ region: data.region
2548
2566
  },
2549
2567
  body: data.requestBody,
2550
2568
  mediaType: 'application/json',
2551
2569
  errors: {
2552
- 401: 'Unauthorized',
2553
- 403: 'Forbidden - insufficient permissions'
2570
+ 404: 'Transaction not found',
2571
+ 409: 'Rule with same name already exists or transaction already linked'
2554
2572
  }
2555
2573
  });
2556
2574
  }
2557
2575
 
2558
2576
  /**
2559
- * Delete a system property
2577
+ * Get recurring rule by ID
2578
+ * Returns a specific recurring rule with its details
2560
2579
  * @param data The data for the request.
2561
- * @param data.key Property key
2562
- * @returns void Property deleted successfully
2580
+ * @param data.id Rule ID
2581
+ * @param data.region Region code for tenant context
2582
+ * @returns RecurringRuleResponseDto Rule retrieved successfully
2563
2583
  * @throws ApiError
2564
2584
  */
2565
- public static propertyControllerDelete(
2566
- data: PropertyControllerDeleteData
2567
- ): CancelablePromise<PropertyControllerDeleteResponse> {
2585
+ public static recurringRuleControllerFindOne(
2586
+ data: RecurringRuleControllerFindOneData
2587
+ ): CancelablePromise<RecurringRuleControllerFindOneResponse> {
2568
2588
  return __request(OpenAPI, {
2569
- method: 'DELETE',
2570
- url: '/api/v1/admin/properties/{key}',
2589
+ method: 'GET',
2590
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2571
2591
  path: {
2572
- key: data.key
2592
+ id: data.id,
2593
+ region: data.region
2573
2594
  },
2574
2595
  errors: {
2575
- 401: 'Unauthorized',
2576
- 403: 'Forbidden - insufficient permissions',
2577
- 404: 'Property not found'
2596
+ 404: 'Rule not found'
2578
2597
  }
2579
2598
  });
2580
2599
  }
2581
- }
2582
2600
 
2583
- export class BeanTransactionRulesService {
2584
2601
  /**
2585
- * Create a new transaction rule (or upsert if upsertByPayee=true)
2586
- * Creates a new rule. If upsertByPayee=true, updates existing rule matching payeeKeywords[0] instead of creating duplicate.
2602
+ * Update recurring rule
2603
+ * Updates an existing recurring rule
2587
2604
  * @param data The data for the request.
2605
+ * @param data.id Rule ID
2588
2606
  * @param data.region Region code for tenant context
2589
2607
  * @param data.requestBody
2590
- * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
2608
+ * @returns RecurringRuleResponseDto Rule updated successfully
2591
2609
  * @throws ApiError
2592
2610
  */
2593
- public static transactionRuleControllerCreate(
2594
- data: TransactionRuleControllerCreateData
2595
- ): CancelablePromise<TransactionRuleControllerCreateResponse> {
2611
+ public static recurringRuleControllerUpdate(
2612
+ data: RecurringRuleControllerUpdateData
2613
+ ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
2596
2614
  return __request(OpenAPI, {
2597
- method: 'POST',
2598
- url: '/api/v1/{region}/bean/transaction-rules',
2615
+ method: 'PATCH',
2616
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2599
2617
  path: {
2618
+ id: data.id,
2600
2619
  region: data.region
2601
2620
  },
2602
2621
  body: data.requestBody,
2603
2622
  mediaType: 'application/json',
2604
2623
  errors: {
2605
- 400: 'Validation failed',
2606
- 401: 'Unauthorized',
2607
- 409: 'Resource conflict - another process is updating this rule'
2624
+ 400: 'Invalid input data',
2625
+ 404: 'Rule not found'
2608
2626
  }
2609
2627
  });
2610
2628
  }
2611
2629
 
2612
2630
  /**
2613
- * Get all transaction rules for user
2631
+ * Delete recurring rule
2632
+ * Soft deletes a recurring rule (sets isActive to false)
2614
2633
  * @param data The data for the request.
2634
+ * @param data.id Rule ID
2615
2635
  * @param data.region Region code for tenant context
2616
- * @param data.limit Max results per page (default: 20, max: 100)
2617
- * @param data.offset Pagination offset (default: 0)
2618
- * @param data.enabled Filter by enabled status
2619
- * @param data.learningSource Filter by learning source. Omit this parameter or pass empty string to get manually created rules (learningSource is null in database).
2620
- * @param data.autoApplyEnabled Filter by auto-apply status
2621
- * @returns TransactionRuleListResponseDto List of rules
2636
+ * @returns void Rule deleted successfully
2622
2637
  * @throws ApiError
2623
2638
  */
2624
- public static transactionRuleControllerList(
2625
- data: TransactionRuleControllerListData
2626
- ): CancelablePromise<TransactionRuleControllerListResponse> {
2639
+ public static recurringRuleControllerDelete(
2640
+ data: RecurringRuleControllerDeleteData
2641
+ ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
2627
2642
  return __request(OpenAPI, {
2628
- method: 'GET',
2629
- url: '/api/v1/{region}/bean/transaction-rules',
2643
+ method: 'DELETE',
2644
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2630
2645
  path: {
2646
+ id: data.id,
2631
2647
  region: data.region
2632
2648
  },
2633
- query: {
2634
- limit: data.limit,
2635
- offset: data.offset,
2636
- enabled: data.enabled,
2637
- learningSource: data.learningSource,
2638
- autoApplyEnabled: data.autoApplyEnabled
2639
- },
2640
2649
  errors: {
2641
- 401: 'Unauthorized'
2650
+ 404: 'Rule not found'
2642
2651
  }
2643
2652
  });
2644
2653
  }
2645
2654
 
2646
2655
  /**
2647
- * Validate transaction rule configuration
2656
+ * Get rule with statistics
2657
+ * Returns a rule with pending/overdue counts and next expected date
2648
2658
  * @param data The data for the request.
2659
+ * @param data.id Rule ID
2649
2660
  * @param data.region Region code for tenant context
2650
- * @param data.requestBody
2651
- * @returns ValidateRuleResponseDto Validation result
2661
+ * @returns RecurringRuleWithStatsResponseDto Rule with stats retrieved successfully
2652
2662
  * @throws ApiError
2653
2663
  */
2654
- public static transactionRuleControllerValidate(
2655
- data: TransactionRuleControllerValidateData
2656
- ): CancelablePromise<TransactionRuleControllerValidateResponse> {
2664
+ public static recurringRuleControllerGetWithStats(
2665
+ data: RecurringRuleControllerGetWithStatsData
2666
+ ): CancelablePromise<RecurringRuleControllerGetWithStatsResponse> {
2657
2667
  return __request(OpenAPI, {
2658
- method: 'POST',
2659
- url: '/api/v1/{region}/bean/transaction-rules/validate',
2668
+ method: 'GET',
2669
+ url: '/api/v1/{region}/bean/recurring-rules/{id}/stats',
2660
2670
  path: {
2671
+ id: data.id,
2661
2672
  region: data.region
2662
2673
  },
2663
- body: data.requestBody,
2664
- mediaType: 'application/json',
2665
2674
  errors: {
2666
- 400: 'Validation failed',
2667
- 401: 'Unauthorized'
2675
+ 404: 'Rule not found'
2668
2676
  }
2669
2677
  });
2670
2678
  }
2679
+ }
2671
2680
 
2681
+ export class ExpectedTransactionsService {
2672
2682
  /**
2673
- * Bulk create transaction rules
2683
+ * List expected transactions
2684
+ * Returns expected transactions for the authenticated user with optional filtering
2674
2685
  * @param data The data for the request.
2675
2686
  * @param data.region Region code for tenant context
2676
- * @param data.requestBody
2677
- * @returns BulkCreateRulesResponseDto Bulk create completed
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
2692
+ * @throws ApiError
2693
+ */
2694
+ public static expectedTransactionControllerFindAll(
2695
+ data: ExpectedTransactionControllerFindAllData
2696
+ ): CancelablePromise<ExpectedTransactionControllerFindAllResponse> {
2697
+ return __request(OpenAPI, {
2698
+ method: 'GET',
2699
+ url: '/api/v1/{region}/bean/expected-transactions',
2700
+ path: {
2701
+ region: data.region
2702
+ },
2703
+ query: {
2704
+ ruleId: data.ruleId,
2705
+ status: data.status,
2706
+ fromDate: data.fromDate,
2707
+ toDate: data.toDate
2708
+ }
2709
+ });
2710
+ }
2711
+
2712
+ /**
2713
+ * List overdue expected transactions
2714
+ * Returns all overdue expected transactions (PENDING past tolerance)
2715
+ * @param data The data for the request.
2716
+ * @param data.region Region code for tenant context
2717
+ * @returns ExpectedTransactionListResponseDto Overdue transactions retrieved successfully
2678
2718
  * @throws ApiError
2679
2719
  */
2680
- public static transactionRuleControllerBulkCreate(
2681
- data: TransactionRuleControllerBulkCreateData
2682
- ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
2720
+ public static expectedTransactionControllerFindOverdue(
2721
+ data: ExpectedTransactionControllerFindOverdueData
2722
+ ): CancelablePromise<ExpectedTransactionControllerFindOverdueResponse> {
2683
2723
  return __request(OpenAPI, {
2684
- method: 'POST',
2685
- url: '/api/v1/{region}/bean/transaction-rules/bulk',
2724
+ method: 'GET',
2725
+ url: '/api/v1/{region}/bean/expected-transactions/overdue',
2686
2726
  path: {
2687
2727
  region: data.region
2688
- },
2689
- body: data.requestBody,
2690
- mediaType: 'application/json',
2691
- errors: {
2692
- 400: 'Invalid bulk create data',
2693
- 401: 'Unauthorized'
2694
2728
  }
2695
2729
  });
2696
2730
  }
2697
2731
 
2698
2732
  /**
2699
- * Export transaction rules
2733
+ * Get expected transaction by ID
2734
+ * Returns a specific expected transaction with rule details
2700
2735
  * @param data The data for the request.
2701
- * @param data.format Export format (currently only JSON supported)
2736
+ * @param data.id Expected transaction ID
2702
2737
  * @param data.region Region code for tenant context
2703
- * @returns ExportRulesResponseDto Exported rules
2738
+ * @returns ExpectedTransactionResponseDto Expected transaction retrieved successfully
2704
2739
  * @throws ApiError
2705
2740
  */
2706
- public static transactionRuleControllerExport(
2707
- data: TransactionRuleControllerExportData
2708
- ): CancelablePromise<TransactionRuleControllerExportResponse> {
2741
+ public static expectedTransactionControllerFindOne(
2742
+ data: ExpectedTransactionControllerFindOneData
2743
+ ): CancelablePromise<ExpectedTransactionControllerFindOneResponse> {
2709
2744
  return __request(OpenAPI, {
2710
2745
  method: 'GET',
2711
- url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
2746
+ url: '/api/v1/{region}/bean/expected-transactions/{id}',
2712
2747
  path: {
2713
- format: data.format,
2748
+ id: data.id,
2714
2749
  region: data.region
2715
2750
  },
2716
2751
  errors: {
2717
- 400: 'Unsupported format',
2718
- 401: 'Unauthorized'
2752
+ 404: 'Expected transaction not found'
2719
2753
  }
2720
2754
  });
2721
2755
  }
2722
2756
 
2723
2757
  /**
2724
- * Get transaction rule statistics
2758
+ * Skip expected transaction
2759
+ * Marks an expected transaction as skipped (PENDING -> SKIPPED)
2725
2760
  * @param data The data for the request.
2726
- * @param data.period Statistics time period
2761
+ * @param data.id Expected transaction ID
2727
2762
  * @param data.region Region code for tenant context
2728
- * @returns RuleStatisticsResponseDto Rule statistics
2763
+ * @returns ExpectedTransactionResponseDto Expected transaction skipped successfully
2729
2764
  * @throws ApiError
2730
2765
  */
2731
- public static transactionRuleControllerGetStatistics(
2732
- data: TransactionRuleControllerGetStatisticsData
2733
- ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
2766
+ public static expectedTransactionControllerSkip(
2767
+ data: ExpectedTransactionControllerSkipData
2768
+ ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
2734
2769
  return __request(OpenAPI, {
2735
- method: 'GET',
2736
- url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
2770
+ method: 'POST',
2771
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2737
2772
  path: {
2738
- period: data.period,
2773
+ id: data.id,
2739
2774
  region: data.region
2740
2775
  },
2741
2776
  errors: {
2742
- 401: 'Unauthorized'
2777
+ 400: 'Cannot skip - not in PENDING status',
2778
+ 404: 'Expected transaction not found'
2743
2779
  }
2744
2780
  });
2745
2781
  }
2746
2782
 
2747
2783
  /**
2748
- * Get transaction rule detail
2784
+ * Undo skip
2785
+ * Reverses a skip operation (SKIPPED -> PENDING)
2749
2786
  * @param data The data for the request.
2750
- * @param data.ruleId Rule ID
2787
+ * @param data.id Expected transaction ID
2751
2788
  * @param data.region Region code for tenant context
2752
- * @returns TransactionRuleResponseDto Rule details
2789
+ * @returns void Skip undone successfully
2753
2790
  * @throws ApiError
2754
2791
  */
2755
- public static transactionRuleControllerGetDetail(
2756
- data: TransactionRuleControllerGetDetailData
2757
- ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
2792
+ public static expectedTransactionControllerUndoSkip(
2793
+ data: ExpectedTransactionControllerUndoSkipData
2794
+ ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
2758
2795
  return __request(OpenAPI, {
2759
- method: 'GET',
2760
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2796
+ method: 'DELETE',
2797
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2761
2798
  path: {
2762
- ruleId: data.ruleId,
2799
+ id: data.id,
2763
2800
  region: data.region
2764
2801
  },
2765
2802
  errors: {
2766
- 401: 'Unauthorized',
2767
- 403: 'Forbidden - not owner of rule',
2768
- 404: 'Rule not found'
2803
+ 400: 'Cannot undo - not in SKIPPED status',
2804
+ 404: 'Expected transaction not found'
2769
2805
  }
2770
2806
  });
2771
2807
  }
2772
2808
 
2773
2809
  /**
2774
- * Update a transaction rule
2810
+ * Confirm transaction match
2811
+ * Manually matches an expected transaction with an actual transaction
2775
2812
  * @param data The data for the request.
2776
- * @param data.ruleId Rule ID to update
2813
+ * @param data.id Expected transaction ID
2777
2814
  * @param data.region Region code for tenant context
2778
2815
  * @param data.requestBody
2779
- * @returns TransactionRuleResponseDto Rule updated successfully
2816
+ * @returns unknown Match confirmed successfully
2780
2817
  * @throws ApiError
2781
2818
  */
2782
- public static transactionRuleControllerUpdate(
2783
- data: TransactionRuleControllerUpdateData
2784
- ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
2819
+ public static expectedTransactionControllerConfirmMatch(
2820
+ data: ExpectedTransactionControllerConfirmMatchData
2821
+ ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
2785
2822
  return __request(OpenAPI, {
2786
- method: 'PUT',
2787
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2823
+ method: 'POST',
2824
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2788
2825
  path: {
2789
- ruleId: data.ruleId,
2826
+ id: data.id,
2790
2827
  region: data.region
2791
2828
  },
2792
2829
  body: data.requestBody,
2793
2830
  mediaType: 'application/json',
2794
2831
  errors: {
2795
- 400: 'Validation failed',
2796
- 401: 'Unauthorized',
2797
- 403: 'Forbidden - not owner of rule',
2798
- 404: 'Rule not found',
2799
- 409: 'Resource conflict - rule is being modified by another process'
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'
2800
2835
  }
2801
2836
  });
2802
2837
  }
2803
2838
 
2804
2839
  /**
2805
- * Delete a transaction rule
2840
+ * Unmatch transaction
2841
+ * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
2806
2842
  * @param data The data for the request.
2807
- * @param data.ruleId Rule ID to delete
2843
+ * @param data.id Expected transaction ID
2808
2844
  * @param data.region Region code for tenant context
2809
- * @returns void Rule deleted successfully
2845
+ * @returns void Match removed successfully
2810
2846
  * @throws ApiError
2811
2847
  */
2812
- public static transactionRuleControllerDelete(
2813
- data: TransactionRuleControllerDeleteData
2814
- ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
2848
+ public static expectedTransactionControllerUnmatch(
2849
+ data: ExpectedTransactionControllerUnmatchData
2850
+ ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
2815
2851
  return __request(OpenAPI, {
2816
2852
  method: 'DELETE',
2817
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2853
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2818
2854
  path: {
2819
- ruleId: data.ruleId,
2855
+ id: data.id,
2820
2856
  region: data.region
2821
2857
  },
2822
2858
  errors: {
2823
- 401: 'Unauthorized',
2824
- 403: 'Forbidden - not owner of rule',
2825
- 404: 'Rule not found',
2826
- 409: 'Resource conflict - rule is being modified by another process'
2859
+ 400: 'Cannot unmatch - not in COMPLETED status',
2860
+ 404: 'Expected transaction not found'
2827
2861
  }
2828
2862
  });
2829
2863
  }
2830
2864
 
2831
2865
  /**
2832
- * Test rule matching
2866
+ * Enter Now
2867
+ * Creates an actual transaction for an expected transaction (YNAB-style Enter Now)
2833
2868
  * @param data The data for the request.
2834
- * @param data.ruleId Rule ID to test
2869
+ * @param data.id Expected transaction ID
2835
2870
  * @param data.region Region code for tenant context
2836
2871
  * @param data.requestBody
2837
- * @returns TestRuleResponseDto Test result
2872
+ * @returns unknown Transaction created successfully
2838
2873
  * @throws ApiError
2839
2874
  */
2840
- public static transactionRuleControllerTest(
2841
- data: TransactionRuleControllerTestData
2842
- ): CancelablePromise<TransactionRuleControllerTestResponse> {
2875
+ public static expectedTransactionControllerEnterNow(
2876
+ data: ExpectedTransactionControllerEnterNowData
2877
+ ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
2843
2878
  return __request(OpenAPI, {
2844
2879
  method: 'POST',
2845
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2880
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
2846
2881
  path: {
2847
- ruleId: data.ruleId,
2882
+ id: data.id,
2848
2883
  region: data.region
2849
2884
  },
2850
2885
  body: data.requestBody,
2851
2886
  mediaType: 'application/json',
2852
2887
  errors: {
2853
- 401: 'Unauthorized',
2854
- 403: 'Forbidden - not owner of rule',
2855
- 404: 'Rule not found'
2888
+ 400: 'Cannot enter - not in PENDING status or missing accounts',
2889
+ 404: 'Expected transaction or accounts not found'
2890
+ }
2891
+ });
2892
+ }
2893
+ }
2894
+
2895
+ export class RecurringForecastService {
2896
+ /**
2897
+ * Get cash flow forecast
2898
+ * Returns predicted outflows for the next N months based on active recurring rules
2899
+ * @param data The data for the request.
2900
+ * @param data.region Region code for tenant context
2901
+ * @param data.months Number of months to forecast (1-12, default 3)
2902
+ * @returns ForecastResponseDto Forecast retrieved successfully
2903
+ * @throws ApiError
2904
+ */
2905
+ public static forecastControllerGetForecast(
2906
+ data: ForecastControllerGetForecastData
2907
+ ): CancelablePromise<ForecastControllerGetForecastResponse> {
2908
+ return __request(OpenAPI, {
2909
+ method: 'GET',
2910
+ url: '/api/v1/{region}/bean/recurring/forecast',
2911
+ path: {
2912
+ region: data.region
2913
+ },
2914
+ query: {
2915
+ months: data.months
2856
2916
  }
2857
2917
  });
2858
2918
  }
@@ -2861,7 +2921,7 @@ export class BeanTransactionRulesService {
2861
2921
  export class BeanCategoryCatalogService {
2862
2922
  /**
2863
2923
  * List category catalog for a region
2864
- * Returns the region-scoped category slugs (expense/income/investment/banking/transfer/payment) for the NLP result picker. CN-exclusive payment instruments (huabei/baitiao) appear only under /cn.
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.
2865
2925
  * @param data The data for the request.
2866
2926
  * @param data.region Region code for tenant context
2867
2927
  * @param data.scenario Filter by scenario
@@ -3065,7 +3125,7 @@ export class OnboardingService {
3065
3125
  /**
3066
3126
  * Bootstrap core accounts + register asset accounts with opening balances (ADR-0113)
3067
3127
  * @param data The data for the request.
3068
- * @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)
3069
3129
  * @param data.requestBody
3070
3130
  * @returns unknown Onboarding bootstrap result.
3071
3131
  * @throws ApiError
@@ -3198,13 +3258,20 @@ export class BeanExportService {
3198
3258
  /**
3199
3259
  * Export Beancount ledger as ZIP
3200
3260
  * Export all user Beancount data as a ZIP file containing ledger.beancount and yearly files in community format.
3201
- * @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
3202
3264
  * @throws ApiError
3203
3265
  */
3204
- public static exportControllerExportBeancount(): CancelablePromise<ExportControllerExportBeancountResponse> {
3266
+ public static exportControllerExportBeancount(
3267
+ data: ExportControllerExportBeancountData
3268
+ ): CancelablePromise<ExportControllerExportBeancountResponse> {
3205
3269
  return __request(OpenAPI, {
3206
3270
  method: 'GET',
3207
- url: '/api/v1/{region}/bean/export/beancount'
3271
+ url: '/api/v1/{region}/bean/export/beancount',
3272
+ path: {
3273
+ region: data.region
3274
+ }
3208
3275
  });
3209
3276
  }
3210
3277
  }
@@ -3241,7 +3308,7 @@ export class BeanImportService {
3241
3308
 
3242
3309
  /**
3243
3310
  * Identify file type
3244
- * Upload a file to check if it can be processed by any registered importer. Does not perform actual import - useful for pre-validation. Uses user-specific importer configuration.
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.
3245
3312
  * @param data The data for the request.
3246
3313
  * @param data.region Region code for tenant context
3247
3314
  * @param data.formData File to identify
@@ -3799,6 +3866,31 @@ export class BeanPlatformsService {
3799
3866
  });
3800
3867
  }
3801
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
+
3802
3894
  /**
3803
3895
  * Update a platform
3804
3896
  * @param data The data for the request.
@@ -3965,6 +4057,34 @@ export class DashboardService {
3965
4057
  }
3966
4058
  });
3967
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
+ }
3968
4088
  }
3969
4089
 
3970
4090
  export class InvestmentService {
@@ -4040,17 +4160,75 @@ export class AuthService {
4040
4160
  }
4041
4161
  });
4042
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
+ }
4043
4216
  }
4044
4217
 
4045
- export class DefaultService {
4218
+ export class AdminCacheService {
4046
4219
  /**
4047
- * @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
4048
4223
  * @throws ApiError
4049
4224
  */
4050
4225
  public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
4051
4226
  return __request(OpenAPI, {
4052
4227
  method: 'POST',
4053
- url: '/api/v1/cache/flush'
4228
+ url: '/api/v1/cache/flush',
4229
+ errors: {
4230
+ 403: 'Admin access required'
4231
+ }
4054
4232
  });
4055
4233
  }
4056
4234
  }
@@ -4219,7 +4397,7 @@ export class MarketDataService {
4219
4397
  * @param data The data for the request.
4220
4398
  * @param data.q Search term — matched against symbol and instrument name. Empty string returns [].
4221
4399
  * @param data.limit Maximum number of results (clamped 1..50)
4222
- * @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)
4223
4401
  * @param data.assetType Filter by OpenBB asset_type (e.g. stock, etf)
4224
4402
  * @returns SymbolSearchResultDto Ranked search results
4225
4403
  * @throws ApiError