@firela/api-types 0.0.0-canary.486851ea → 0.0.0-canary.48d0341

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