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