@firela/api-types 0.0.0-canary.fb3ac1dd → 0.0.0-canary.fd60e04

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