@firela/api-types 0.0.0-canary.2fbeefe9 → 0.0.0-canary.2fd4afbd

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.
@@ -17,6 +17,8 @@ import type {
17
17
  AccountControllerCloseResponse,
18
18
  AccountControllerReopenData,
19
19
  AccountControllerReopenResponse,
20
+ AccountControllerAddOpeningBalanceData,
21
+ AccountControllerAddOpeningBalanceResponse,
20
22
  AccountStandardsControllerGetTemplatesData,
21
23
  AccountStandardsControllerGetTemplatesResponse,
22
24
  AccountStandardsControllerGetTemplateMetadataData,
@@ -97,6 +99,14 @@ import type {
97
99
  CommodityControllerGetOrCreateResponse,
98
100
  CommodityControllerBulkCreateData,
99
101
  CommodityControllerBulkCreateResponse,
102
+ ReportingControllerGetPortfolioTrendsData,
103
+ ReportingControllerGetPortfolioTrendsResponse,
104
+ ReportingControllerGetCashFlowTrendsData,
105
+ ReportingControllerGetCashFlowTrendsResponse,
106
+ ReportingControllerGenerateSnapshotData,
107
+ ReportingControllerGenerateSnapshotResponse,
108
+ ReportingControllerBackfillSnapshotsData,
109
+ ReportingControllerBackfillSnapshotsResponse,
100
110
  PriceControllerCreateData,
101
111
  PriceControllerCreateResponse,
102
112
  PriceControllerFindAllData,
@@ -109,6 +119,28 @@ import type {
109
119
  PriceControllerDeleteResponse,
110
120
  PriceControllerBulkCreateData,
111
121
  PriceControllerBulkCreateResponse,
122
+ UserControllerDeleteOwnUserData,
123
+ UserControllerDeleteOwnUserResponse,
124
+ UserControllerGetUserData,
125
+ UserControllerGetUserResponse,
126
+ UserControllerSignupUserData,
127
+ UserControllerSignupUserResponse,
128
+ UserControllerDeleteUserData,
129
+ UserControllerDeleteUserResponse,
130
+ UserControllerGetUserInfoData,
131
+ UserControllerGetUserInfoResponse,
132
+ UserControllerUpdateUserSettingData,
133
+ UserControllerUpdateUserSettingResponse,
134
+ UserControllerGetAllUserSettingsByPageData,
135
+ UserControllerGetAllUserSettingsByPageResponse,
136
+ UserControllerGetAssetLiabilitySummaryResponse,
137
+ PropertyControllerGetAllResponse,
138
+ PropertyControllerGetByKeyData,
139
+ PropertyControllerGetByKeyResponse,
140
+ PropertyControllerUpdateData,
141
+ PropertyControllerUpdateResponse,
142
+ PropertyControllerDeleteData,
143
+ PropertyControllerDeleteResponse,
112
144
  RecurringRuleControllerCreateData,
113
145
  RecurringRuleControllerCreateResponse,
114
146
  RecurringRuleControllerFindAllData,
@@ -161,28 +193,8 @@ import type {
161
193
  TransactionRuleControllerDeleteResponse,
162
194
  TransactionRuleControllerTestData,
163
195
  TransactionRuleControllerTestResponse,
164
- UserControllerDeleteOwnUserData,
165
- UserControllerDeleteOwnUserResponse,
166
- UserControllerGetUserData,
167
- UserControllerGetUserResponse,
168
- UserControllerSignupUserData,
169
- UserControllerSignupUserResponse,
170
- UserControllerDeleteUserData,
171
- UserControllerDeleteUserResponse,
172
- UserControllerGetUserInfoData,
173
- UserControllerGetUserInfoResponse,
174
- UserControllerUpdateUserSettingData,
175
- UserControllerUpdateUserSettingResponse,
176
- UserControllerGetAllUserSettingsByPageData,
177
- UserControllerGetAllUserSettingsByPageResponse,
178
- UserControllerGetAssetLiabilitySummaryResponse,
179
- PropertyControllerGetAllResponse,
180
- PropertyControllerGetByKeyData,
181
- PropertyControllerGetByKeyResponse,
182
- PropertyControllerUpdateData,
183
- PropertyControllerUpdateResponse,
184
- PropertyControllerDeleteData,
185
- PropertyControllerDeleteResponse,
196
+ CategoryCatalogControllerListData,
197
+ CategoryCatalogControllerListResponse,
186
198
  EventControllerCreateData,
187
199
  EventControllerCreateResponse,
188
200
  EventControllerFindAllData,
@@ -247,9 +259,12 @@ import type {
247
259
  PlatformControllerFindAllResponse,
248
260
  PlatformControllerCreateData,
249
261
  PlatformControllerCreateResponse,
262
+ PlatformControllerGetPlatformListData,
250
263
  PlatformControllerGetPlatformListResponse,
251
264
  PlatformControllerMatchPlatformsData,
252
265
  PlatformControllerMatchPlatformsResponse,
266
+ PlatformControllerGetPlatformStandardsData,
267
+ PlatformControllerGetPlatformStandardsResponse,
253
268
  PlatformControllerUpdateData,
254
269
  PlatformControllerUpdateResponse,
255
270
  PlatformControllerDeleteData,
@@ -264,17 +279,11 @@ import type {
264
279
  DashboardControllerGetExpensesResponse,
265
280
  HoldingPnlControllerGetHoldingPnlData,
266
281
  HoldingPnlControllerGetHoldingPnlResponse,
267
- ReportingControllerGetPortfolioTrendsData,
268
- ReportingControllerGetPortfolioTrendsResponse,
269
- ReportingControllerGetCashFlowTrendsData,
270
- ReportingControllerGetCashFlowTrendsResponse,
271
- ReportingControllerGenerateSnapshotData,
272
- ReportingControllerGenerateSnapshotResponse,
273
- ReportingControllerBackfillSnapshotsData,
274
- ReportingControllerBackfillSnapshotsResponse,
275
282
  ApiKeysControllerCreateApiKeyResponse,
276
283
  AuthControllerAccessTokenLoginData,
277
284
  AuthControllerAccessTokenLoginResponse,
285
+ ParserContributionControllerCreateData,
286
+ ParserContributionControllerCreateResponse,
278
287
  CacheControllerFlushCacheResponse,
279
288
  ExchangeRateControllerGetExchangeRateData,
280
289
  ExchangeRateControllerGetExchangeRateResponse,
@@ -286,7 +295,11 @@ import type {
286
295
  HealthControllerResetCircuitBreakerData,
287
296
  HealthControllerResetCircuitBreakerResponse,
288
297
  HealthControllerGetMetricsResponse,
289
- InfoControllerGetInfoResponse
298
+ InfoControllerGetInfoResponse,
299
+ SymbolControllerSearchData,
300
+ SymbolControllerSearchResponse,
301
+ SymbolControllerGetQuoteData,
302
+ SymbolControllerGetQuoteResponse
290
303
  } from './types.gen';
291
304
 
292
305
  export class BeanAccountsService {
@@ -324,7 +337,7 @@ export class BeanAccountsService {
324
337
  * @param data.type Filter by account type
325
338
  * @param data.status Filter by status
326
339
  * @param data.isCustom Filter by custom (user-created) accounts only
327
- * @param data.search Search term for account path
340
+ * @param data.search Search term matched against account path and user-set display name (case-insensitive)
328
341
  * @param data.limit Maximum number of results
329
342
  * @param data.offset Number of results to skip
330
343
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -405,7 +418,7 @@ export class BeanAccountsService {
405
418
 
406
419
  /**
407
420
  * Delete account
408
- * Deletes an account (only if no transactions)
421
+ * Deletes an account (only if no active transactions; voided/superseded residual postings are cleaned up)
409
422
  * @param data The data for the request.
410
423
  * @param data.id Account UUID
411
424
  * @param data.region Region code for tenant context
@@ -424,7 +437,7 @@ export class BeanAccountsService {
424
437
  },
425
438
  errors: {
426
439
  404: 'Account not found',
427
- 409: 'Account has transactions and cannot be deleted'
440
+ 409: 'Account has active transactions and cannot be deleted'
428
441
  }
429
442
  });
430
443
  }
@@ -486,16 +499,45 @@ export class BeanAccountsService {
486
499
  }
487
500
  });
488
501
  }
502
+
503
+ /**
504
+ * Post an opening-balance transaction
505
+ * Posts a double-entry opening-balance transaction against Equity:Opening-Balances for an existing Assets/Liabilities account. At most one active opening balance per account.
506
+ * @param data The data for the request.
507
+ * @param data.id Account UUID
508
+ * @param data.region Region code for tenant context
509
+ * @param data.requestBody
510
+ * @returns OpeningBalanceResultDto Opening-balance transaction created
511
+ * @throws ApiError
512
+ */
513
+ public static accountControllerAddOpeningBalance(
514
+ data: AccountControllerAddOpeningBalanceData
515
+ ): CancelablePromise<AccountControllerAddOpeningBalanceResponse> {
516
+ return __request(OpenAPI, {
517
+ method: 'POST',
518
+ url: '/api/v1/{region}/bean/accounts/{id}/opening-balance',
519
+ path: {
520
+ id: data.id,
521
+ region: data.region
522
+ },
523
+ body: data.requestBody,
524
+ mediaType: 'application/json',
525
+ errors: {
526
+ 404: 'Account not found',
527
+ 409: 'An opening balance already exists for this account'
528
+ }
529
+ });
530
+ }
489
531
  }
490
532
 
491
533
  export class BeanAccountStandardsService {
492
534
  /**
493
535
  * Get account templates
494
- * Returns predefined account templates for a region. Supports filtering by account type and search term.
536
+ * 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).
495
537
  * @param data The data for the request.
496
- * @param data.region Region code (cn, us, de)
538
+ * @param data.region Region code (any ISO alpha-2; not-yet-open codes return the universal-only catalog)
497
539
  * @param data.type Filter by account type
498
- * @param data.search Search term for path or description
540
+ * @param data.search Search term for path, description, aliases, or localized display name
499
541
  * @returns AccountStandardListResponseDto Account templates retrieved successfully
500
542
  * @throws ApiError
501
543
  */
@@ -519,7 +561,7 @@ export class BeanAccountStandardsService {
519
561
  * Get template metadata for an account path
520
562
  * Returns root type for a template path.
521
563
  * @param data The data for the request.
522
- * @param data.region Region code for tenant context
564
+ * @param data.region Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
523
565
  * @param data.path Account path to check
524
566
  * @returns TemplateMetadataResponseDto Template metadata retrieved successfully
525
567
  * @throws ApiError
@@ -541,9 +583,9 @@ export class BeanAccountStandardsService {
541
583
 
542
584
  /**
543
585
  * Get available regions with hierarchy
544
- * Returns supported regions with inheritance metadata
586
+ * Returns the full region catalog (every ISO 3166-1 entry) with an 'open' flag and inheritance metadata (#759)
545
587
  * @param data The data for the request.
546
- * @param data.region Region code for tenant context
588
+ * @param data.region Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
547
589
  * @returns RegionsMetadataResponseDto Regions metadata retrieved successfully
548
590
  * @throws ApiError
549
591
  */
@@ -600,10 +642,11 @@ export class BeanTransactionsService {
600
642
  * @param data.offset Number of items to skip (default: 0)
601
643
  * @param data.dateFrom Filter by start date (inclusive), format: YYYY-MM-DD
602
644
  * @param data.dateTo Filter by end date (inclusive), format: YYYY-MM-DD
603
- * @param data.status Filter by transaction status
645
+ * @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).
604
646
  * @param data.search Search in narration and payee fields (max 200 chars)
605
647
  * @param data.accountId Filter by account ID (transactions with postings to this account)
606
- * @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
648
+ * @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).
649
+ * @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.
607
650
  * @returns TransactionListResponseDto Transaction list
608
651
  * @throws ApiError
609
652
  */
@@ -624,7 +667,8 @@ export class BeanTransactionsService {
624
667
  status: data.status,
625
668
  search: data.search,
626
669
  accountId: data.accountId,
627
- category: data.category
670
+ category: data.category,
671
+ flow: data.flow
628
672
  },
629
673
  errors: {
630
674
  400: 'Validation failed',
@@ -1337,7 +1381,7 @@ export class AdminPayeeProfilesService {
1337
1381
  * Removes verification status by setting verifiedAt to null.
1338
1382
  * @param data The data for the request.
1339
1383
  * @param data.id Payee profile ID (UUID)
1340
- * @returns PayeeProfileResponseDto Payee profile unverified successfully
1384
+ * @returns void Payee profile unverified successfully
1341
1385
  * @throws ApiError
1342
1386
  */
1343
1387
  public static payeeProfileAdminControllerUnverify(
@@ -1533,6 +1577,163 @@ export class BeanCommoditiesService {
1533
1577
  }
1534
1578
  }
1535
1579
 
1580
+ export class ReportingService {
1581
+ /**
1582
+ * Get portfolio value trends
1583
+ *
1584
+ * Returns time series data of portfolio net worth.
1585
+ *
1586
+ * **Multi-currency Support:**
1587
+ * - `series[].byCurrency` - Currency breakdown for each data point
1588
+ * - `byCurrency` - Separate time series grouped by currency
1589
+ * - `warnings` - Exchange rate warnings if conversion failed
1590
+ *
1591
+ * **Parameters:**
1592
+ * - `period`: Time period (1m, 3m, 6m, 1y)
1593
+ * - `granularity`: Data granularity (day, week, month)
1594
+ *
1595
+ * @param data The data for the request.
1596
+ * @param data.region Region code for tenant context
1597
+ * @param data.period Time period
1598
+ * @param data.granularity Data granularity
1599
+ * @returns PortfolioTrendsResponseDto Trends retrieved successfully
1600
+ * @throws ApiError
1601
+ */
1602
+ public static reportingControllerGetPortfolioTrends(
1603
+ data: ReportingControllerGetPortfolioTrendsData
1604
+ ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
1605
+ return __request(OpenAPI, {
1606
+ method: 'GET',
1607
+ url: '/api/v1/{region}/reporting/portfolio/trends',
1608
+ path: {
1609
+ region: data.region
1610
+ },
1611
+ query: {
1612
+ period: data.period,
1613
+ granularity: data.granularity
1614
+ },
1615
+ errors: {
1616
+ 401: 'User not authenticated'
1617
+ }
1618
+ });
1619
+ }
1620
+
1621
+ /**
1622
+ * Get cash-flow trends
1623
+ *
1624
+ * Monthly income / expense / netSavings over a fixed N-month window
1625
+ * (current month + N−1 prior). Missing months are zero-filled (flow metric).
1626
+ *
1627
+ * **Parameters:**
1628
+ * - `period`: 1m | 3m | 6m | 1y (default 6m)
1629
+ * - `granularity`: accepted for API symmetry; v1 returns month buckets
1630
+ *
1631
+ * @param data The data for the request.
1632
+ * @param data.region Region code for tenant context
1633
+ * @param data.period Time period
1634
+ * @param data.granularity Data granularity (accepted for API symmetry; v1 returns month buckets)
1635
+ * @returns CashFlowTrendsResponseDto Cash-flow trends retrieved successfully
1636
+ * @throws ApiError
1637
+ */
1638
+ public static reportingControllerGetCashFlowTrends(
1639
+ data: ReportingControllerGetCashFlowTrendsData
1640
+ ): CancelablePromise<ReportingControllerGetCashFlowTrendsResponse> {
1641
+ return __request(OpenAPI, {
1642
+ method: 'GET',
1643
+ url: '/api/v1/{region}/reporting/cash-flow/trends',
1644
+ path: {
1645
+ region: data.region
1646
+ },
1647
+ query: {
1648
+ period: data.period,
1649
+ granularity: data.granularity
1650
+ },
1651
+ errors: {
1652
+ 401: 'User not authenticated'
1653
+ }
1654
+ });
1655
+ }
1656
+
1657
+ /**
1658
+ * Generate portfolio snapshot
1659
+ *
1660
+ * Manually generate a portfolio snapshot for a specific date.
1661
+ *
1662
+ * **Multi-currency Support:**
1663
+ * - Fetches balances grouped by currency
1664
+ * - Uses user's baseCurrency setting for conversion
1665
+ * - Stores exchange rates and warnings
1666
+ *
1667
+ * **Use Cases:**
1668
+ * - Testing snapshot generation
1669
+ * - Force regeneration after data correction
1670
+ * - Initial setup for new users
1671
+ *
1672
+ * @param data The data for the request.
1673
+ * @param data.region Region code for tenant context
1674
+ * @param data.requestBody Optional date (defaults to today)
1675
+ * @returns GenerateSnapshotResponse Snapshot generated successfully
1676
+ * @throws ApiError
1677
+ */
1678
+ public static reportingControllerGenerateSnapshot(
1679
+ data: ReportingControllerGenerateSnapshotData
1680
+ ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
1681
+ return __request(OpenAPI, {
1682
+ method: 'POST',
1683
+ url: '/api/v1/{region}/reporting/snapshots/generate',
1684
+ path: {
1685
+ region: data.region
1686
+ },
1687
+ body: data.requestBody,
1688
+ mediaType: 'application/json',
1689
+ errors: {
1690
+ 400: 'Invalid date format',
1691
+ 401: 'User not authenticated'
1692
+ }
1693
+ });
1694
+ }
1695
+
1696
+ /**
1697
+ * Backfill portfolio snapshots
1698
+ *
1699
+ * Generate snapshots for a date range (historical data backfill).
1700
+ *
1701
+ * **Multi-currency Support:**
1702
+ * - Each snapshot includes multi-currency data
1703
+ * - Uses exchange rates available at generation time
1704
+ * - Warnings stored for missing exchange rates
1705
+ *
1706
+ * **Best Practices:**
1707
+ * - Use for initial setup after account configuration
1708
+ * - Run during low-traffic periods for large date ranges
1709
+ * - Existing snapshots are skipped (not regenerated)
1710
+ *
1711
+ * @param data The data for the request.
1712
+ * @param data.region Region code for tenant context
1713
+ * @param data.requestBody
1714
+ * @returns BackfillSnapshotsResponse Backfill completed successfully
1715
+ * @throws ApiError
1716
+ */
1717
+ public static reportingControllerBackfillSnapshots(
1718
+ data: ReportingControllerBackfillSnapshotsData
1719
+ ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
1720
+ return __request(OpenAPI, {
1721
+ method: 'POST',
1722
+ url: '/api/v1/{region}/reporting/snapshots/backfill',
1723
+ path: {
1724
+ region: data.region
1725
+ },
1726
+ body: data.requestBody,
1727
+ mediaType: 'application/json',
1728
+ errors: {
1729
+ 400: 'Invalid date format or range',
1730
+ 401: 'User not authenticated',
1731
+ 409: 'Backfill already in progress for this user'
1732
+ }
1733
+ });
1734
+ }
1735
+ }
1736
+
1536
1737
  export class BeanPricesService {
1537
1738
  /**
1538
1739
  * Create a new price
@@ -1700,19 +1901,274 @@ export class BeanPricesService {
1700
1901
  }
1701
1902
  }
1702
1903
 
1703
- export class RecurringRulesService {
1904
+ export class UsersService {
1704
1905
  /**
1705
- * Create a new recurring rule
1706
- * Creates a new recurring transaction rule for the authenticated user
1906
+ * Delete own user account
1707
1907
  * @param data The data for the request.
1708
- * @param data.region Region code for tenant context
1709
1908
  * @param data.requestBody
1710
- * @returns RecurringRuleResponseDto Rule created successfully
1909
+ * @returns void User deleted successfully
1711
1910
  * @throws ApiError
1712
1911
  */
1713
- public static recurringRuleControllerCreate(
1714
- data: RecurringRuleControllerCreateData
1715
- ): CancelablePromise<RecurringRuleControllerCreateResponse> {
1912
+ public static userControllerDeleteOwnUser(
1913
+ data: UserControllerDeleteOwnUserData
1914
+ ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
1915
+ return __request(OpenAPI, {
1916
+ method: 'DELETE',
1917
+ url: '/api/v1/users',
1918
+ body: data.requestBody,
1919
+ mediaType: 'application/json',
1920
+ errors: {
1921
+ 403: 'Invalid access token'
1922
+ }
1923
+ });
1924
+ }
1925
+
1926
+ /**
1927
+ * Get current authenticated user
1928
+ * @param data The data for the request.
1929
+ * @param data.acceptLanguage
1930
+ * @returns UserResponseDto User retrieved successfully
1931
+ * @throws ApiError
1932
+ */
1933
+ public static userControllerGetUser(
1934
+ data: UserControllerGetUserData
1935
+ ): CancelablePromise<UserControllerGetUserResponse> {
1936
+ return __request(OpenAPI, {
1937
+ method: 'GET',
1938
+ url: '/api/v1/users',
1939
+ headers: {
1940
+ 'accept-language': data.acceptLanguage
1941
+ }
1942
+ });
1943
+ }
1944
+
1945
+ /**
1946
+ * Sign up new user
1947
+ * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
1948
+ * @param data The data for the request.
1949
+ * @param data.requestBody
1950
+ * @returns SignupResponseDto User created successfully
1951
+ * @throws ApiError
1952
+ */
1953
+ public static userControllerSignupUser(
1954
+ data: UserControllerSignupUserData
1955
+ ): CancelablePromise<UserControllerSignupUserResponse> {
1956
+ return __request(OpenAPI, {
1957
+ method: 'POST',
1958
+ url: '/api/v1/users',
1959
+ body: data.requestBody,
1960
+ mediaType: 'application/json',
1961
+ errors: {
1962
+ 400: 'Invalid Turnstile token (when Turnstile is enabled)',
1963
+ 403: 'User signup is disabled'
1964
+ }
1965
+ });
1966
+ }
1967
+
1968
+ /**
1969
+ * Delete user by ID (admin only)
1970
+ * @param data The data for the request.
1971
+ * @param data.id User ID to delete
1972
+ * @returns void User deleted successfully
1973
+ * @throws ApiError
1974
+ */
1975
+ public static userControllerDeleteUser(
1976
+ data: UserControllerDeleteUserData
1977
+ ): CancelablePromise<UserControllerDeleteUserResponse> {
1978
+ return __request(OpenAPI, {
1979
+ method: 'DELETE',
1980
+ url: '/api/v1/users/{id}',
1981
+ path: {
1982
+ id: data.id
1983
+ },
1984
+ errors: {
1985
+ 403: 'Cannot delete own account or insufficient permissions'
1986
+ }
1987
+ });
1988
+ }
1989
+
1990
+ /**
1991
+ * Get user info by user ID
1992
+ * @param data The data for the request.
1993
+ * @param data.id User ID
1994
+ * @returns unknown User info retrieved successfully
1995
+ * @throws ApiError
1996
+ */
1997
+ public static userControllerGetUserInfo(
1998
+ data: UserControllerGetUserInfoData
1999
+ ): CancelablePromise<UserControllerGetUserInfoResponse> {
2000
+ return __request(OpenAPI, {
2001
+ method: 'GET',
2002
+ url: '/api/v1/users/{id}/info',
2003
+ path: {
2004
+ id: data.id
2005
+ },
2006
+ errors: {
2007
+ 403: 'Cannot access other user info without admin permission'
2008
+ }
2009
+ });
2010
+ }
2011
+
2012
+ /**
2013
+ * Update user settings
2014
+ * @param data The data for the request.
2015
+ * @param data.requestBody
2016
+ * @returns unknown Settings updated successfully
2017
+ * @throws ApiError
2018
+ */
2019
+ public static userControllerUpdateUserSetting(
2020
+ data: UserControllerUpdateUserSettingData
2021
+ ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
2022
+ return __request(OpenAPI, {
2023
+ method: 'PUT',
2024
+ url: '/api/v1/users/setting',
2025
+ body: data.requestBody,
2026
+ mediaType: 'application/json',
2027
+ errors: {
2028
+ 403: 'Insufficient permissions'
2029
+ }
2030
+ });
2031
+ }
2032
+
2033
+ /**
2034
+ * Get all user settings paginated (admin only)
2035
+ * @param data The data for the request.
2036
+ * @param data.pageNo Page number
2037
+ * @param data.pageSize Page size
2038
+ * @returns unknown Settings list retrieved successfully
2039
+ * @throws ApiError
2040
+ */
2041
+ public static userControllerGetAllUserSettingsByPage(
2042
+ data: UserControllerGetAllUserSettingsByPageData
2043
+ ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
2044
+ return __request(OpenAPI, {
2045
+ method: 'GET',
2046
+ url: '/api/v1/users/settings-by-page',
2047
+ query: {
2048
+ pageNo: data.pageNo,
2049
+ pageSize: data.pageSize
2050
+ }
2051
+ });
2052
+ }
2053
+
2054
+ /**
2055
+ * Get asset and liability summary for current user
2056
+ * @returns unknown Summary retrieved successfully
2057
+ * @throws ApiError
2058
+ */
2059
+ public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
2060
+ return __request(OpenAPI, {
2061
+ method: 'GET',
2062
+ url: '/api/v1/users/asset-liability-summary'
2063
+ });
2064
+ }
2065
+ }
2066
+
2067
+ export class PropertiesService {
2068
+ /**
2069
+ * Get all system properties
2070
+ * @returns unknown Properties retrieved successfully
2071
+ * @throws ApiError
2072
+ */
2073
+ public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
2074
+ return __request(OpenAPI, {
2075
+ method: 'GET',
2076
+ url: '/api/v1/admin/properties',
2077
+ errors: {
2078
+ 401: 'Unauthorized',
2079
+ 403: 'Forbidden - insufficient permissions'
2080
+ }
2081
+ });
2082
+ }
2083
+
2084
+ /**
2085
+ * Get property by key
2086
+ * @param data The data for the request.
2087
+ * @param data.key Property key
2088
+ * @returns unknown Property retrieved successfully
2089
+ * @throws ApiError
2090
+ */
2091
+ public static propertyControllerGetByKey(
2092
+ data: PropertyControllerGetByKeyData
2093
+ ): CancelablePromise<PropertyControllerGetByKeyResponse> {
2094
+ return __request(OpenAPI, {
2095
+ method: 'GET',
2096
+ url: '/api/v1/admin/properties/{key}',
2097
+ path: {
2098
+ key: data.key
2099
+ },
2100
+ errors: {
2101
+ 401: 'Unauthorized',
2102
+ 403: 'Forbidden - insufficient permissions',
2103
+ 404: 'Property not found'
2104
+ }
2105
+ });
2106
+ }
2107
+
2108
+ /**
2109
+ * Update a system property
2110
+ * @param data The data for the request.
2111
+ * @param data.key Property key
2112
+ * @param data.requestBody
2113
+ * @returns unknown Property updated successfully
2114
+ * @throws ApiError
2115
+ */
2116
+ public static propertyControllerUpdate(
2117
+ data: PropertyControllerUpdateData
2118
+ ): CancelablePromise<PropertyControllerUpdateResponse> {
2119
+ return __request(OpenAPI, {
2120
+ method: 'PUT',
2121
+ url: '/api/v1/admin/properties/{key}',
2122
+ path: {
2123
+ key: data.key
2124
+ },
2125
+ body: data.requestBody,
2126
+ mediaType: 'application/json',
2127
+ errors: {
2128
+ 401: 'Unauthorized',
2129
+ 403: 'Forbidden - insufficient permissions'
2130
+ }
2131
+ });
2132
+ }
2133
+
2134
+ /**
2135
+ * Delete a system property
2136
+ * @param data The data for the request.
2137
+ * @param data.key Property key
2138
+ * @returns void Property deleted successfully
2139
+ * @throws ApiError
2140
+ */
2141
+ public static propertyControllerDelete(
2142
+ data: PropertyControllerDeleteData
2143
+ ): CancelablePromise<PropertyControllerDeleteResponse> {
2144
+ return __request(OpenAPI, {
2145
+ method: 'DELETE',
2146
+ url: '/api/v1/admin/properties/{key}',
2147
+ path: {
2148
+ key: data.key
2149
+ },
2150
+ errors: {
2151
+ 401: 'Unauthorized',
2152
+ 403: 'Forbidden - insufficient permissions',
2153
+ 404: 'Property not found'
2154
+ }
2155
+ });
2156
+ }
2157
+ }
2158
+
2159
+ export class RecurringRulesService {
2160
+ /**
2161
+ * Create a new recurring rule
2162
+ * Creates a new recurring transaction rule for the authenticated user
2163
+ * @param data The data for the request.
2164
+ * @param data.region Region code for tenant context
2165
+ * @param data.requestBody
2166
+ * @returns RecurringRuleResponseDto Rule created successfully
2167
+ * @throws ApiError
2168
+ */
2169
+ public static recurringRuleControllerCreate(
2170
+ data: RecurringRuleControllerCreateData
2171
+ ): CancelablePromise<RecurringRuleControllerCreateResponse> {
1716
2172
  return __request(OpenAPI, {
1717
2173
  method: 'POST',
1718
2174
  url: '/api/v1/{region}/bean/recurring-rules',
@@ -1998,7 +2454,7 @@ export class ExpectedTransactionsService {
1998
2454
  * @param data The data for the request.
1999
2455
  * @param data.id Expected transaction ID
2000
2456
  * @param data.region Region code for tenant context
2001
- * @returns ExpectedTransactionResponseDto Skip undone successfully
2457
+ * @returns void Skip undone successfully
2002
2458
  * @throws ApiError
2003
2459
  */
2004
2460
  public static expectedTransactionControllerUndoSkip(
@@ -2054,7 +2510,7 @@ export class ExpectedTransactionsService {
2054
2510
  * @param data The data for the request.
2055
2511
  * @param data.id Expected transaction ID
2056
2512
  * @param data.region Region code for tenant context
2057
- * @returns unknown Match removed successfully
2513
+ * @returns void Match removed successfully
2058
2514
  * @throws ApiError
2059
2515
  */
2060
2516
  public static expectedTransactionControllerUnmatch(
@@ -2386,278 +2842,51 @@ export class BeanTransactionRulesService {
2386
2842
  * @param data.requestBody
2387
2843
  * @returns TestRuleResponseDto Test result
2388
2844
  * @throws ApiError
2389
- */
2390
- public static transactionRuleControllerTest(
2391
- data: TransactionRuleControllerTestData
2392
- ): CancelablePromise<TransactionRuleControllerTestResponse> {
2393
- return __request(OpenAPI, {
2394
- method: 'POST',
2395
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2396
- path: {
2397
- ruleId: data.ruleId,
2398
- region: data.region
2399
- },
2400
- body: data.requestBody,
2401
- mediaType: 'application/json',
2402
- errors: {
2403
- 401: 'Unauthorized',
2404
- 403: 'Forbidden - not owner of rule',
2405
- 404: 'Rule not found'
2406
- }
2407
- });
2408
- }
2409
- }
2410
-
2411
- export class UsersService {
2412
- /**
2413
- * Delete own user account
2414
- * @param data The data for the request.
2415
- * @param data.requestBody
2416
- * @returns void User deleted successfully
2417
- * @throws ApiError
2418
- */
2419
- public static userControllerDeleteOwnUser(
2420
- data: UserControllerDeleteOwnUserData
2421
- ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
2422
- return __request(OpenAPI, {
2423
- method: 'DELETE',
2424
- url: '/api/v1/users',
2425
- body: data.requestBody,
2426
- mediaType: 'application/json',
2427
- errors: {
2428
- 403: 'Invalid access token'
2429
- }
2430
- });
2431
- }
2432
-
2433
- /**
2434
- * Get current authenticated user
2435
- * @param data The data for the request.
2436
- * @param data.acceptLanguage
2437
- * @returns unknown User retrieved successfully
2438
- * @throws ApiError
2439
- */
2440
- public static userControllerGetUser(
2441
- data: UserControllerGetUserData
2442
- ): CancelablePromise<UserControllerGetUserResponse> {
2443
- return __request(OpenAPI, {
2444
- method: 'GET',
2445
- url: '/api/v1/users',
2446
- headers: {
2447
- 'accept-language': data.acceptLanguage
2448
- }
2449
- });
2450
- }
2451
-
2452
- /**
2453
- * Sign up new user
2454
- * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
2455
- * @param data The data for the request.
2456
- * @param data.requestBody
2457
- * @returns unknown User created successfully
2458
- * @throws ApiError
2459
- */
2460
- public static userControllerSignupUser(
2461
- data: UserControllerSignupUserData
2462
- ): CancelablePromise<UserControllerSignupUserResponse> {
2463
- return __request(OpenAPI, {
2464
- method: 'POST',
2465
- url: '/api/v1/users',
2466
- body: data.requestBody,
2467
- mediaType: 'application/json',
2468
- errors: {
2469
- 400: 'Invalid Turnstile token (when Turnstile is enabled)',
2470
- 403: 'User signup is disabled'
2471
- }
2472
- });
2473
- }
2474
-
2475
- /**
2476
- * Delete user by ID (admin only)
2477
- * @param data The data for the request.
2478
- * @param data.id User ID to delete
2479
- * @returns void User deleted successfully
2480
- * @throws ApiError
2481
- */
2482
- public static userControllerDeleteUser(
2483
- data: UserControllerDeleteUserData
2484
- ): CancelablePromise<UserControllerDeleteUserResponse> {
2485
- return __request(OpenAPI, {
2486
- method: 'DELETE',
2487
- url: '/api/v1/users/{id}',
2488
- path: {
2489
- id: data.id
2490
- },
2491
- errors: {
2492
- 403: 'Cannot delete own account or insufficient permissions'
2493
- }
2494
- });
2495
- }
2496
-
2497
- /**
2498
- * Get user info by user ID
2499
- * @param data The data for the request.
2500
- * @param data.id User ID
2501
- * @returns unknown User info retrieved successfully
2502
- * @throws ApiError
2503
- */
2504
- public static userControllerGetUserInfo(
2505
- data: UserControllerGetUserInfoData
2506
- ): CancelablePromise<UserControllerGetUserInfoResponse> {
2507
- return __request(OpenAPI, {
2508
- method: 'GET',
2509
- url: '/api/v1/users/{id}/info',
2510
- path: {
2511
- id: data.id
2512
- },
2513
- errors: {
2514
- 403: 'Cannot access other user info without admin permission'
2515
- }
2516
- });
2517
- }
2518
-
2519
- /**
2520
- * Update user settings
2521
- * @param data The data for the request.
2522
- * @param data.requestBody
2523
- * @returns unknown Settings updated successfully
2524
- * @throws ApiError
2525
- */
2526
- public static userControllerUpdateUserSetting(
2527
- data: UserControllerUpdateUserSettingData
2528
- ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
2529
- return __request(OpenAPI, {
2530
- method: 'PUT',
2531
- url: '/api/v1/users/setting',
2532
- body: data.requestBody,
2533
- mediaType: 'application/json',
2534
- errors: {
2535
- 403: 'Insufficient permissions'
2536
- }
2537
- });
2538
- }
2539
-
2540
- /**
2541
- * Get all user settings paginated (admin only)
2542
- * @param data The data for the request.
2543
- * @param data.pageNo Page number
2544
- * @param data.pageSize Page size
2545
- * @returns unknown Settings list retrieved successfully
2546
- * @throws ApiError
2547
- */
2548
- public static userControllerGetAllUserSettingsByPage(
2549
- data: UserControllerGetAllUserSettingsByPageData
2550
- ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
2551
- return __request(OpenAPI, {
2552
- method: 'GET',
2553
- url: '/api/v1/users/settings-by-page',
2554
- query: {
2555
- pageNo: data.pageNo,
2556
- pageSize: data.pageSize
2557
- }
2558
- });
2559
- }
2560
-
2561
- /**
2562
- * Get asset and liability summary for current user
2563
- * @returns unknown Summary retrieved successfully
2564
- * @throws ApiError
2565
- */
2566
- public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
2567
- return __request(OpenAPI, {
2568
- method: 'GET',
2569
- url: '/api/v1/users/asset-liability-summary'
2570
- });
2571
- }
2572
- }
2573
-
2574
- export class PropertiesService {
2575
- /**
2576
- * Get all system properties
2577
- * @returns unknown Properties retrieved successfully
2578
- * @throws ApiError
2579
- */
2580
- public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
2581
- return __request(OpenAPI, {
2582
- method: 'GET',
2583
- url: '/api/v1/admin/properties',
2584
- errors: {
2585
- 401: 'Unauthorized',
2586
- 403: 'Forbidden - insufficient permissions'
2587
- }
2588
- });
2589
- }
2590
-
2591
- /**
2592
- * Get property by key
2593
- * @param data The data for the request.
2594
- * @param data.key Property key
2595
- * @returns unknown Property retrieved successfully
2596
- * @throws ApiError
2597
- */
2598
- public static propertyControllerGetByKey(
2599
- data: PropertyControllerGetByKeyData
2600
- ): CancelablePromise<PropertyControllerGetByKeyResponse> {
2601
- return __request(OpenAPI, {
2602
- method: 'GET',
2603
- url: '/api/v1/admin/properties/{key}',
2604
- path: {
2605
- key: data.key
2606
- },
2607
- errors: {
2608
- 401: 'Unauthorized',
2609
- 403: 'Forbidden - insufficient permissions',
2610
- 404: 'Property not found'
2611
- }
2612
- });
2613
- }
2614
-
2615
- /**
2616
- * Update a system property
2617
- * @param data The data for the request.
2618
- * @param data.key Property key
2619
- * @param data.requestBody
2620
- * @returns unknown Property updated successfully
2621
- * @throws ApiError
2622
- */
2623
- public static propertyControllerUpdate(
2624
- data: PropertyControllerUpdateData
2625
- ): CancelablePromise<PropertyControllerUpdateResponse> {
2845
+ */
2846
+ public static transactionRuleControllerTest(
2847
+ data: TransactionRuleControllerTestData
2848
+ ): CancelablePromise<TransactionRuleControllerTestResponse> {
2626
2849
  return __request(OpenAPI, {
2627
- method: 'PUT',
2628
- url: '/api/v1/admin/properties/{key}',
2850
+ method: 'POST',
2851
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2629
2852
  path: {
2630
- key: data.key
2853
+ ruleId: data.ruleId,
2854
+ region: data.region
2631
2855
  },
2632
2856
  body: data.requestBody,
2633
2857
  mediaType: 'application/json',
2634
2858
  errors: {
2635
2859
  401: 'Unauthorized',
2636
- 403: 'Forbidden - insufficient permissions'
2860
+ 403: 'Forbidden - not owner of rule',
2861
+ 404: 'Rule not found'
2637
2862
  }
2638
2863
  });
2639
2864
  }
2865
+ }
2640
2866
 
2867
+ export class BeanCategoryCatalogService {
2641
2868
  /**
2642
- * Delete a system property
2869
+ * List category catalog for a region
2870
+ * 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.
2643
2871
  * @param data The data for the request.
2644
- * @param data.key Property key
2645
- * @returns void Property deleted successfully
2872
+ * @param data.region Region code for tenant context
2873
+ * @param data.scenario Filter by scenario
2874
+ * @param data.routeBearing Filter by routeBearing (entity-router route() consumes it)
2875
+ * @returns CategoryCatalogListResponseDto Category catalog retrieved successfully
2646
2876
  * @throws ApiError
2647
2877
  */
2648
- public static propertyControllerDelete(
2649
- data: PropertyControllerDeleteData
2650
- ): CancelablePromise<PropertyControllerDeleteResponse> {
2878
+ public static categoryCatalogControllerList(
2879
+ data: CategoryCatalogControllerListData
2880
+ ): CancelablePromise<CategoryCatalogControllerListResponse> {
2651
2881
  return __request(OpenAPI, {
2652
- method: 'DELETE',
2653
- url: '/api/v1/admin/properties/{key}',
2882
+ method: 'GET',
2883
+ url: '/api/v1/{region}/bean/categories',
2654
2884
  path: {
2655
- key: data.key
2885
+ region: data.region
2656
2886
  },
2657
- errors: {
2658
- 401: 'Unauthorized',
2659
- 403: 'Forbidden - insufficient permissions',
2660
- 404: 'Property not found'
2887
+ query: {
2888
+ scenario: data.scenario,
2889
+ routeBearing: data.routeBearing
2661
2890
  }
2662
2891
  });
2663
2892
  }
@@ -2842,7 +3071,7 @@ export class OnboardingService {
2842
3071
  /**
2843
3072
  * Bootstrap core accounts + register asset accounts with opening balances (ADR-0113)
2844
3073
  * @param data The data for the request.
2845
- * @param data.region Region code for tenant context
3074
+ * @param data.region Region code for tenant context. Not-yet-open codes are accepted: the universal catalog backs onboarding regardless of region (#759)
2846
3075
  * @param data.requestBody
2847
3076
  * @returns unknown Onboarding bootstrap result.
2848
3077
  * @throws ApiError
@@ -2975,7 +3204,7 @@ export class BeanExportService {
2975
3204
  /**
2976
3205
  * Export Beancount ledger as ZIP
2977
3206
  * Export all user Beancount data as a ZIP file containing ledger.beancount and yearly files in community format.
2978
- * @returns unknown
3207
+ * @returns binary ZIP archive (application/zip) streamed as an attachment
2979
3208
  * @throws ApiError
2980
3209
  */
2981
3210
  public static exportControllerExportBeancount(): CancelablePromise<ExportControllerExportBeancountResponse> {
@@ -3538,13 +3767,20 @@ export class BeanPlatformsService {
3538
3767
 
3539
3768
  /**
3540
3769
  * Get platform list for current user
3541
- * @returns unknown List of platforms with user binding status
3770
+ * @param data The data for the request.
3771
+ * @param data.region Region code (ISO 3166-1 alpha-2) that biases within-type-bucket ordering (local-region platforms first). Case-insensitive — stored/compared UPPERCASE ("cn" == "CN").
3772
+ * @returns PlatformListItemDto List of platforms with user binding status
3542
3773
  * @throws ApiError
3543
3774
  */
3544
- public static platformControllerGetPlatformList(): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3775
+ public static platformControllerGetPlatformList(
3776
+ data: PlatformControllerGetPlatformListData = {}
3777
+ ): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3545
3778
  return __request(OpenAPI, {
3546
3779
  method: 'GET',
3547
- url: '/api/v1/bean/platforms/list'
3780
+ url: '/api/v1/bean/platforms/list',
3781
+ query: {
3782
+ region: data.region
3783
+ }
3548
3784
  });
3549
3785
  }
3550
3786
 
@@ -3552,8 +3788,8 @@ export class BeanPlatformsService {
3552
3788
  * Match platforms by name or alias
3553
3789
  * @param data The data for the request.
3554
3790
  * @param data.q Search query — Chinese name, English name, or abbreviation
3555
- * @param data.region Region code for category override lookup
3556
- * @returns unknown List of matching platforms with suggested segment names
3791
+ * @param data.region Region code (ISO 3166-1 alpha-2) that biases within-tier ordering (local-region platforms first); also the intended categoryOverrides key. Case-insensitive — stored/compared UPPERCASE ("cn" == "CN").
3792
+ * @returns PlatformMatchResponseDto Matching platforms with overall match type and truncation flag
3557
3793
  * @throws ApiError
3558
3794
  */
3559
3795
  public static platformControllerMatchPlatforms(
@@ -3569,6 +3805,31 @@ export class BeanPlatformsService {
3569
3805
  });
3570
3806
  }
3571
3807
 
3808
+ /**
3809
+ * Get the region and candidate account standards for a platform
3810
+ * @param data The data for the request.
3811
+ * @param data.id Platform ID (from a match result)
3812
+ * @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.
3813
+ * @param data.type Filter templates by account type (path first segment)
3814
+ * @returns PlatformStandardsResponseDto Resolved region plus the merged account-standard catalog of that region (groupable by productCategory client-side)
3815
+ * @throws ApiError
3816
+ */
3817
+ public static platformControllerGetPlatformStandards(
3818
+ data: PlatformControllerGetPlatformStandardsData
3819
+ ): CancelablePromise<PlatformControllerGetPlatformStandardsResponse> {
3820
+ return __request(OpenAPI, {
3821
+ method: 'GET',
3822
+ url: '/api/v1/bean/platforms/{id}/standards',
3823
+ path: {
3824
+ id: data.id
3825
+ },
3826
+ query: {
3827
+ region: data.region,
3828
+ type: data.type
3829
+ }
3830
+ });
3831
+ }
3832
+
3572
3833
  /**
3573
3834
  * Update a platform
3574
3835
  * @param data The data for the request.
@@ -3771,217 +4032,97 @@ export class InvestmentService {
3771
4032
  }
3772
4033
  }
3773
4034
 
3774
- export class ReportingService {
3775
- /**
3776
- * Get portfolio value trends
3777
- *
3778
- * Returns time series data of portfolio net worth.
3779
- *
3780
- * **Multi-currency Support:**
3781
- * - `series[].byCurrency` - Currency breakdown for each data point
3782
- * - `byCurrency` - Separate time series grouped by currency
3783
- * - `warnings` - Exchange rate warnings if conversion failed
3784
- *
3785
- * **Parameters:**
3786
- * - `period`: Time period (1m, 3m, 6m, 1y)
3787
- * - `granularity`: Data granularity (day, week, month)
3788
- *
3789
- * @param data The data for the request.
3790
- * @param data.region Region code for tenant context
3791
- * @param data.period Time period
3792
- * @param data.granularity Data granularity
3793
- * @returns PortfolioTrendsResponseDto Trends retrieved successfully
3794
- * @throws ApiError
3795
- */
3796
- public static reportingControllerGetPortfolioTrends(
3797
- data: ReportingControllerGetPortfolioTrendsData
3798
- ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
3799
- return __request(OpenAPI, {
3800
- method: 'GET',
3801
- url: '/api/v1/{region}/reporting/portfolio/trends',
3802
- path: {
3803
- region: data.region
3804
- },
3805
- query: {
3806
- period: data.period,
3807
- granularity: data.granularity
3808
- },
3809
- errors: {
3810
- 401: 'User not authenticated'
3811
- }
3812
- });
3813
- }
3814
-
4035
+ export class ApiKeysService {
3815
4036
  /**
3816
- * Get cash-flow trends
3817
- *
3818
- * Monthly income / expense / netSavings over a fixed N-month window
3819
- * (current month + N−1 prior). Missing months are zero-filled (flow metric).
3820
- *
3821
- * **Parameters:**
3822
- * - `period`: 1m | 3m | 6m | 1y (default 6m)
3823
- * - `granularity`: accepted for API symmetry; v1 returns month buckets
3824
- *
3825
- * @param data The data for the request.
3826
- * @param data.region Region code for tenant context
3827
- * @param data.period Time period
3828
- * @param data.granularity Data granularity (accepted for API symmetry; v1 returns month buckets)
3829
- * @returns CashFlowTrendsResponseDto Cash-flow trends retrieved successfully
4037
+ * Create API key
4038
+ * Generates a new API key for the authenticated user
4039
+ * @returns unknown API key created successfully
3830
4040
  * @throws ApiError
3831
4041
  */
3832
- public static reportingControllerGetCashFlowTrends(
3833
- data: ReportingControllerGetCashFlowTrendsData
3834
- ): CancelablePromise<ReportingControllerGetCashFlowTrendsResponse> {
4042
+ public static apiKeysControllerCreateApiKey(): CancelablePromise<ApiKeysControllerCreateApiKeyResponse> {
3835
4043
  return __request(OpenAPI, {
3836
- method: 'GET',
3837
- url: '/api/v1/{region}/reporting/cash-flow/trends',
3838
- path: {
3839
- region: data.region
3840
- },
3841
- query: {
3842
- period: data.period,
3843
- granularity: data.granularity
3844
- },
4044
+ method: 'POST',
4045
+ url: '/api/v1/auth/api-keys',
3845
4046
  errors: {
3846
- 401: 'User not authenticated'
4047
+ 403: 'Insufficient permissions to create API key'
3847
4048
  }
3848
4049
  });
3849
4050
  }
4051
+ }
3850
4052
 
4053
+ export class AuthService {
3851
4054
  /**
3852
- * Generate portfolio snapshot
3853
- *
3854
- * Manually generate a portfolio snapshot for a specific date.
3855
- *
3856
- * **Multi-currency Support:**
3857
- * - Fetches balances grouped by currency
3858
- * - Uses user's baseCurrency setting for conversion
3859
- * - Stores exchange rates and warnings
3860
- *
3861
- * **Use Cases:**
3862
- * - Testing snapshot generation
3863
- * - Force regeneration after data correction
3864
- * - Initial setup for new users
3865
- *
4055
+ * Anonymous login with access token
3866
4056
  * @param data The data for the request.
3867
- * @param data.region Region code for tenant context
3868
- * @param data.requestBody Optional date (defaults to today)
3869
- * @returns GenerateSnapshotResponse Snapshot generated successfully
4057
+ * @param data.requestBody
4058
+ * @returns AnonymousLoginResponseDto Login successful
3870
4059
  * @throws ApiError
3871
4060
  */
3872
- public static reportingControllerGenerateSnapshot(
3873
- data: ReportingControllerGenerateSnapshotData
3874
- ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
4061
+ public static authControllerAccessTokenLogin(
4062
+ data: AuthControllerAccessTokenLoginData
4063
+ ): CancelablePromise<AuthControllerAccessTokenLoginResponse> {
3875
4064
  return __request(OpenAPI, {
3876
4065
  method: 'POST',
3877
- url: '/api/v1/{region}/reporting/snapshots/generate',
3878
- path: {
3879
- region: data.region
3880
- },
4066
+ url: '/api/v1/auth/sessions/anonymous',
3881
4067
  body: data.requestBody,
3882
4068
  mediaType: 'application/json',
3883
4069
  errors: {
3884
- 400: 'Invalid date format',
3885
- 401: 'User not authenticated'
4070
+ 401: 'Invalid access token'
3886
4071
  }
3887
4072
  });
3888
4073
  }
4074
+ }
3889
4075
 
4076
+ export class CommunityService {
3890
4077
  /**
3891
- * Backfill portfolio snapshots
3892
- *
3893
- * Generate snapshots for a date range (historical data backfill).
3894
- *
3895
- * **Multi-currency Support:**
3896
- * - Each snapshot includes multi-currency data
3897
- * - Uses exchange rates available at generation time
3898
- * - Warnings stored for missing exchange rates
3899
- *
3900
- * **Best Practices:**
3901
- * - Use for initial setup after account configuration
3902
- * - Run during low-traffic periods for large date ranges
3903
- * - Existing snapshots are skipped (not regenerated)
3904
- *
4078
+ * Relay a sanitized parser-contribution payload
4079
+ * 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).
3905
4080
  * @param data The data for the request.
3906
- * @param data.region Region code for tenant context
4081
+ * @param data.region Region code for tenant context (routing only; the institution region rides in the payload meta)
3907
4082
  * @param data.requestBody
3908
- * @returns BackfillSnapshotsResponse Backfill completed successfully
4083
+ * @returns ParserContributionRelayResponseDto Issue created by the bot
3909
4084
  * @throws ApiError
3910
4085
  */
3911
- public static reportingControllerBackfillSnapshots(
3912
- data: ReportingControllerBackfillSnapshotsData
3913
- ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
4086
+ public static parserContributionControllerCreate(
4087
+ data: ParserContributionControllerCreateData
4088
+ ): CancelablePromise<ParserContributionControllerCreateResponse> {
3914
4089
  return __request(OpenAPI, {
3915
4090
  method: 'POST',
3916
- url: '/api/v1/{region}/reporting/snapshots/backfill',
4091
+ url: '/api/v1/{region}/community/parser-contributions',
3917
4092
  path: {
3918
4093
  region: data.region
3919
4094
  },
3920
4095
  body: data.requestBody,
3921
4096
  mediaType: 'application/json',
3922
4097
  errors: {
3923
- 400: 'Invalid date format or range',
3924
- 401: 'User not authenticated',
3925
- 409: 'Backfill already in progress for this user'
3926
- }
3927
- });
3928
- }
3929
- }
3930
-
3931
- export class ApiKeysService {
3932
- /**
3933
- * Create API key
3934
- * Generates a new API key for the authenticated user
3935
- * @returns unknown API key created successfully
3936
- * @throws ApiError
3937
- */
3938
- public static apiKeysControllerCreateApiKey(): CancelablePromise<ApiKeysControllerCreateApiKeyResponse> {
3939
- return __request(OpenAPI, {
3940
- method: 'POST',
3941
- url: '/api/v1/auth/api-keys',
3942
- errors: {
3943
- 403: 'Insufficient permissions to create API key'
4098
+ 401: 'Unauthorized',
4099
+ 422: 'Validation failed (institution slug, empty samples, row/cell size limits)',
4100
+ 429: 'Rate limited (5 submissions per user per hour)',
4101
+ 501: 'Relay not configured on this deployment — clients fall back to the clipboard flow',
4102
+ 502: 'GitHub bot failure (upstream), safe to retry'
3944
4103
  }
3945
4104
  });
3946
4105
  }
3947
4106
  }
3948
4107
 
3949
- export class AuthService {
4108
+ export class AdminCacheService {
3950
4109
  /**
3951
- * Anonymous login with access token
3952
- * @param data The data for the request.
3953
- * @param data.requestBody
3954
- * @returns unknown Login successful
4110
+ * Flush entire cache (L1 + L2)
4111
+ * Clears ALL cache entries across ALL namespaces and users. Use only for emergency cache corruption recovery, maintenance-window refresh, or development resets.
4112
+ * @returns unknown Cache flushed successfully
3955
4113
  * @throws ApiError
3956
4114
  */
3957
- public static authControllerAccessTokenLogin(
3958
- data: AuthControllerAccessTokenLoginData
3959
- ): CancelablePromise<AuthControllerAccessTokenLoginResponse> {
4115
+ public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
3960
4116
  return __request(OpenAPI, {
3961
4117
  method: 'POST',
3962
- url: '/api/v1/auth/sessions/anonymous',
3963
- body: data.requestBody,
3964
- mediaType: 'application/json',
4118
+ url: '/api/v1/cache/flush',
3965
4119
  errors: {
3966
- 401: 'Invalid access token'
4120
+ 403: 'Admin access required'
3967
4121
  }
3968
4122
  });
3969
4123
  }
3970
4124
  }
3971
4125
 
3972
- export class DefaultService {
3973
- /**
3974
- * @returns unknown
3975
- * @throws ApiError
3976
- */
3977
- public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
3978
- return __request(OpenAPI, {
3979
- method: 'POST',
3980
- url: '/api/v1/cache/flush'
3981
- });
3982
- }
3983
- }
3984
-
3985
4126
  export class ExchangeRateService {
3986
4127
  /**
3987
4128
  * Get exchange rate for currency pair
@@ -4138,3 +4279,53 @@ export class InfoService {
4138
4279
  });
4139
4280
  }
4140
4281
  }
4282
+
4283
+ export class MarketDataService {
4284
+ /**
4285
+ * Search market symbols by name or code
4286
+ * Ranked search over the openbb catalog. Empty `q` returns [].
4287
+ * @param data The data for the request.
4288
+ * @param data.q Search term — matched against symbol and instrument name. Empty string returns [].
4289
+ * @param data.limit Maximum number of results (clamped 1..50)
4290
+ * @param data.exchange Filter by exchange code (e.g. US, HK, SS, SZ)
4291
+ * @param data.assetType Filter by OpenBB asset_type (e.g. stock, etf)
4292
+ * @returns SymbolSearchResultDto Ranked search results
4293
+ * @throws ApiError
4294
+ */
4295
+ public static symbolControllerSearch(
4296
+ data: SymbolControllerSearchData
4297
+ ): CancelablePromise<SymbolControllerSearchResponse> {
4298
+ return __request(OpenAPI, {
4299
+ method: 'GET',
4300
+ url: '/api/v1/market/symbols/search',
4301
+ query: {
4302
+ q: data.q,
4303
+ limit: data.limit,
4304
+ exchange: data.exchange,
4305
+ assetType: data.assetType
4306
+ }
4307
+ });
4308
+ }
4309
+
4310
+ /**
4311
+ * Get a market symbol quote
4312
+ * @param data The data for the request.
4313
+ * @param data.symbol
4314
+ * @returns SymbolQuoteDto Symbol quote
4315
+ * @throws ApiError
4316
+ */
4317
+ public static symbolControllerGetQuote(
4318
+ data: SymbolControllerGetQuoteData
4319
+ ): CancelablePromise<SymbolControllerGetQuoteResponse> {
4320
+ return __request(OpenAPI, {
4321
+ method: 'GET',
4322
+ url: '/api/v1/market/symbols/{symbol}/quote',
4323
+ path: {
4324
+ symbol: data.symbol
4325
+ },
4326
+ errors: {
4327
+ 404: 'Symbol not found in the openbb catalog'
4328
+ }
4329
+ });
4330
+ }
4331
+ }