@firela/api-types 0.0.0-canary.63a53b7d → 0.0.0-canary.67feb205

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.
@@ -99,6 +99,14 @@ import type {
99
99
  CommodityControllerGetOrCreateResponse,
100
100
  CommodityControllerBulkCreateData,
101
101
  CommodityControllerBulkCreateResponse,
102
+ ReportingControllerGetPortfolioTrendsData,
103
+ ReportingControllerGetPortfolioTrendsResponse,
104
+ ReportingControllerGetCashFlowTrendsData,
105
+ ReportingControllerGetCashFlowTrendsResponse,
106
+ ReportingControllerGenerateSnapshotData,
107
+ ReportingControllerGenerateSnapshotResponse,
108
+ ReportingControllerBackfillSnapshotsData,
109
+ ReportingControllerBackfillSnapshotsResponse,
102
110
  PriceControllerCreateData,
103
111
  PriceControllerCreateResponse,
104
112
  PriceControllerFindAllData,
@@ -111,6 +119,28 @@ import type {
111
119
  PriceControllerDeleteResponse,
112
120
  PriceControllerBulkCreateData,
113
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,
114
144
  RecurringRuleControllerCreateData,
115
145
  RecurringRuleControllerCreateResponse,
116
146
  RecurringRuleControllerFindAllData,
@@ -163,28 +193,8 @@ import type {
163
193
  TransactionRuleControllerDeleteResponse,
164
194
  TransactionRuleControllerTestData,
165
195
  TransactionRuleControllerTestResponse,
166
- UserControllerDeleteOwnUserData,
167
- UserControllerDeleteOwnUserResponse,
168
- UserControllerGetUserData,
169
- UserControllerGetUserResponse,
170
- UserControllerSignupUserData,
171
- UserControllerSignupUserResponse,
172
- UserControllerDeleteUserData,
173
- UserControllerDeleteUserResponse,
174
- UserControllerGetUserInfoData,
175
- UserControllerGetUserInfoResponse,
176
- UserControllerUpdateUserSettingData,
177
- UserControllerUpdateUserSettingResponse,
178
- UserControllerGetAllUserSettingsByPageData,
179
- UserControllerGetAllUserSettingsByPageResponse,
180
- UserControllerGetAssetLiabilitySummaryResponse,
181
- PropertyControllerGetAllResponse,
182
- PropertyControllerGetByKeyData,
183
- PropertyControllerGetByKeyResponse,
184
- PropertyControllerUpdateData,
185
- PropertyControllerUpdateResponse,
186
- PropertyControllerDeleteData,
187
- PropertyControllerDeleteResponse,
196
+ CategoryCatalogControllerListData,
197
+ CategoryCatalogControllerListResponse,
188
198
  EventControllerCreateData,
189
199
  EventControllerCreateResponse,
190
200
  EventControllerFindAllData,
@@ -249,9 +259,12 @@ import type {
249
259
  PlatformControllerFindAllResponse,
250
260
  PlatformControllerCreateData,
251
261
  PlatformControllerCreateResponse,
262
+ PlatformControllerGetPlatformListData,
252
263
  PlatformControllerGetPlatformListResponse,
253
264
  PlatformControllerMatchPlatformsData,
254
265
  PlatformControllerMatchPlatformsResponse,
266
+ PlatformControllerGetPlatformStandardsData,
267
+ PlatformControllerGetPlatformStandardsResponse,
255
268
  PlatformControllerUpdateData,
256
269
  PlatformControllerUpdateResponse,
257
270
  PlatformControllerDeleteData,
@@ -266,17 +279,11 @@ import type {
266
279
  DashboardControllerGetExpensesResponse,
267
280
  HoldingPnlControllerGetHoldingPnlData,
268
281
  HoldingPnlControllerGetHoldingPnlResponse,
269
- ReportingControllerGetPortfolioTrendsData,
270
- ReportingControllerGetPortfolioTrendsResponse,
271
- ReportingControllerGetCashFlowTrendsData,
272
- ReportingControllerGetCashFlowTrendsResponse,
273
- ReportingControllerGenerateSnapshotData,
274
- ReportingControllerGenerateSnapshotResponse,
275
- ReportingControllerBackfillSnapshotsData,
276
- ReportingControllerBackfillSnapshotsResponse,
277
282
  ApiKeysControllerCreateApiKeyResponse,
278
283
  AuthControllerAccessTokenLoginData,
279
284
  AuthControllerAccessTokenLoginResponse,
285
+ ParserContributionControllerCreateData,
286
+ ParserContributionControllerCreateResponse,
280
287
  CacheControllerFlushCacheResponse,
281
288
  ExchangeRateControllerGetExchangeRateData,
282
289
  ExchangeRateControllerGetExchangeRateResponse,
@@ -288,7 +295,11 @@ import type {
288
295
  HealthControllerResetCircuitBreakerData,
289
296
  HealthControllerResetCircuitBreakerResponse,
290
297
  HealthControllerGetMetricsResponse,
291
- InfoControllerGetInfoResponse
298
+ InfoControllerGetInfoResponse,
299
+ SymbolControllerSearchData,
300
+ SymbolControllerSearchResponse,
301
+ SymbolControllerGetQuoteData,
302
+ SymbolControllerGetQuoteResponse
292
303
  } from './types.gen';
293
304
 
294
305
  export class BeanAccountsService {
@@ -326,7 +337,7 @@ export class BeanAccountsService {
326
337
  * @param data.type Filter by account type
327
338
  * @param data.status Filter by status
328
339
  * @param data.isCustom Filter by custom (user-created) accounts only
329
- * @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)
330
341
  * @param data.limit Maximum number of results
331
342
  * @param data.offset Number of results to skip
332
343
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -407,7 +418,7 @@ export class BeanAccountsService {
407
418
 
408
419
  /**
409
420
  * Delete account
410
- * Deletes an account (only if no transactions)
421
+ * Deletes an account (only if no active transactions; voided/superseded residual postings are cleaned up)
411
422
  * @param data The data for the request.
412
423
  * @param data.id Account UUID
413
424
  * @param data.region Region code for tenant context
@@ -426,7 +437,7 @@ export class BeanAccountsService {
426
437
  },
427
438
  errors: {
428
439
  404: 'Account not found',
429
- 409: 'Account has transactions and cannot be deleted'
440
+ 409: 'Account has active transactions and cannot be deleted'
430
441
  }
431
442
  });
432
443
  }
@@ -522,11 +533,11 @@ export class BeanAccountsService {
522
533
  export class BeanAccountStandardsService {
523
534
  /**
524
535
  * Get account templates
525
- * 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).
526
537
  * @param data The data for the request.
527
- * @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)
528
539
  * @param data.type Filter by account type
529
- * @param data.search Search term for path or description
540
+ * @param data.search Search term for path, description, aliases, or localized display name
530
541
  * @returns AccountStandardListResponseDto Account templates retrieved successfully
531
542
  * @throws ApiError
532
543
  */
@@ -550,7 +561,7 @@ export class BeanAccountStandardsService {
550
561
  * Get template metadata for an account path
551
562
  * Returns root type for a template path.
552
563
  * @param data The data for the request.
553
- * @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)
554
565
  * @param data.path Account path to check
555
566
  * @returns TemplateMetadataResponseDto Template metadata retrieved successfully
556
567
  * @throws ApiError
@@ -572,9 +583,9 @@ export class BeanAccountStandardsService {
572
583
 
573
584
  /**
574
585
  * Get available regions with hierarchy
575
- * 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)
576
587
  * @param data The data for the request.
577
- * @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)
578
589
  * @returns RegionsMetadataResponseDto Regions metadata retrieved successfully
579
590
  * @throws ApiError
580
591
  */
@@ -631,10 +642,11 @@ export class BeanTransactionsService {
631
642
  * @param data.offset Number of items to skip (default: 0)
632
643
  * @param data.dateFrom Filter by start date (inclusive), format: YYYY-MM-DD
633
644
  * @param data.dateTo Filter by end date (inclusive), format: YYYY-MM-DD
634
- * @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).
635
646
  * @param data.search Search in narration and payee fields (max 200 chars)
636
647
  * @param data.accountId Filter by account ID (transactions with postings to this account)
637
- * @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.
638
650
  * @returns TransactionListResponseDto Transaction list
639
651
  * @throws ApiError
640
652
  */
@@ -655,7 +667,8 @@ export class BeanTransactionsService {
655
667
  status: data.status,
656
668
  search: data.search,
657
669
  accountId: data.accountId,
658
- category: data.category
670
+ category: data.category,
671
+ flow: data.flow
659
672
  },
660
673
  errors: {
661
674
  400: 'Validation failed',
@@ -1368,7 +1381,7 @@ export class AdminPayeeProfilesService {
1368
1381
  * Removes verification status by setting verifiedAt to null.
1369
1382
  * @param data The data for the request.
1370
1383
  * @param data.id Payee profile ID (UUID)
1371
- * @returns PayeeProfileResponseDto Payee profile unverified successfully
1384
+ * @returns void Payee profile unverified successfully
1372
1385
  * @throws ApiError
1373
1386
  */
1374
1387
  public static payeeProfileAdminControllerUnverify(
@@ -1564,6 +1577,163 @@ export class BeanCommoditiesService {
1564
1577
  }
1565
1578
  }
1566
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
+
1567
1737
  export class BeanPricesService {
1568
1738
  /**
1569
1739
  * Create a new price
@@ -1731,47 +1901,302 @@ export class BeanPricesService {
1731
1901
  }
1732
1902
  }
1733
1903
 
1734
- export class RecurringRulesService {
1904
+ export class UsersService {
1735
1905
  /**
1736
- * Create a new recurring rule
1737
- * Creates a new recurring transaction rule for the authenticated user
1906
+ * Delete own user account
1738
1907
  * @param data The data for the request.
1739
- * @param data.region Region code for tenant context
1740
1908
  * @param data.requestBody
1741
- * @returns RecurringRuleResponseDto Rule created successfully
1909
+ * @returns void User deleted successfully
1742
1910
  * @throws ApiError
1743
1911
  */
1744
- public static recurringRuleControllerCreate(
1745
- data: RecurringRuleControllerCreateData
1746
- ): CancelablePromise<RecurringRuleControllerCreateResponse> {
1912
+ public static userControllerDeleteOwnUser(
1913
+ data: UserControllerDeleteOwnUserData
1914
+ ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
1747
1915
  return __request(OpenAPI, {
1748
- method: 'POST',
1749
- url: '/api/v1/{region}/bean/recurring-rules',
1750
- path: {
1751
- region: data.region
1752
- },
1916
+ method: 'DELETE',
1917
+ url: '/api/v1/users',
1753
1918
  body: data.requestBody,
1754
1919
  mediaType: 'application/json',
1755
1920
  errors: {
1756
- 400: 'Invalid input data (e.g., autoCreate without accounts)',
1757
- 409: 'Rule with same name already exists'
1921
+ 403: 'Invalid access token'
1758
1922
  }
1759
1923
  });
1760
1924
  }
1761
1925
 
1762
1926
  /**
1763
- * List recurring rules
1764
- * Returns all recurring rules for the authenticated user with optional filtering
1927
+ * Get current authenticated user
1765
1928
  * @param data The data for the request.
1766
- * @param data.region Region code for tenant context
1767
- * @param data.isActive Filter by active status
1768
- * @param data.frequency Filter by frequency (WEEKLY, MONTHLY, etc.)
1769
- * @param data.hasAutoCreate Filter by autoCreate enabled
1770
- * @returns RecurringRuleResponseDto Rules retrieved successfully
1929
+ * @param data.acceptLanguage
1930
+ * @returns UserResponseDto User retrieved successfully
1771
1931
  * @throws ApiError
1772
1932
  */
1773
- public static recurringRuleControllerFindAll(
1774
- data: RecurringRuleControllerFindAllData
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> {
2172
+ return __request(OpenAPI, {
2173
+ method: 'POST',
2174
+ url: '/api/v1/{region}/bean/recurring-rules',
2175
+ path: {
2176
+ region: data.region
2177
+ },
2178
+ body: data.requestBody,
2179
+ mediaType: 'application/json',
2180
+ errors: {
2181
+ 400: 'Invalid input data (e.g., autoCreate without accounts)',
2182
+ 409: 'Rule with same name already exists'
2183
+ }
2184
+ });
2185
+ }
2186
+
2187
+ /**
2188
+ * List recurring rules
2189
+ * Returns all recurring rules for the authenticated user with optional filtering
2190
+ * @param data The data for the request.
2191
+ * @param data.region Region code for tenant context
2192
+ * @param data.isActive Filter by active status
2193
+ * @param data.frequency Filter by frequency (WEEKLY, MONTHLY, etc.)
2194
+ * @param data.hasAutoCreate Filter by autoCreate enabled
2195
+ * @returns RecurringRuleResponseDto Rules retrieved successfully
2196
+ * @throws ApiError
2197
+ */
2198
+ public static recurringRuleControllerFindAll(
2199
+ data: RecurringRuleControllerFindAllData
1775
2200
  ): CancelablePromise<RecurringRuleControllerFindAllResponse> {
1776
2201
  return __request(OpenAPI, {
1777
2202
  method: 'GET',
@@ -2029,7 +2454,7 @@ export class ExpectedTransactionsService {
2029
2454
  * @param data The data for the request.
2030
2455
  * @param data.id Expected transaction ID
2031
2456
  * @param data.region Region code for tenant context
2032
- * @returns ExpectedTransactionResponseDto Skip undone successfully
2457
+ * @returns void Skip undone successfully
2033
2458
  * @throws ApiError
2034
2459
  */
2035
2460
  public static expectedTransactionControllerUndoSkip(
@@ -2085,7 +2510,7 @@ export class ExpectedTransactionsService {
2085
2510
  * @param data The data for the request.
2086
2511
  * @param data.id Expected transaction ID
2087
2512
  * @param data.region Region code for tenant context
2088
- * @returns unknown Match removed successfully
2513
+ * @returns void Match removed successfully
2089
2514
  * @throws ApiError
2090
2515
  */
2091
2516
  public static expectedTransactionControllerUnmatch(
@@ -2417,278 +2842,51 @@ export class BeanTransactionRulesService {
2417
2842
  * @param data.requestBody
2418
2843
  * @returns TestRuleResponseDto Test result
2419
2844
  * @throws ApiError
2420
- */
2421
- public static transactionRuleControllerTest(
2422
- data: TransactionRuleControllerTestData
2423
- ): CancelablePromise<TransactionRuleControllerTestResponse> {
2424
- return __request(OpenAPI, {
2425
- method: 'POST',
2426
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2427
- path: {
2428
- ruleId: data.ruleId,
2429
- region: data.region
2430
- },
2431
- body: data.requestBody,
2432
- mediaType: 'application/json',
2433
- errors: {
2434
- 401: 'Unauthorized',
2435
- 403: 'Forbidden - not owner of rule',
2436
- 404: 'Rule not found'
2437
- }
2438
- });
2439
- }
2440
- }
2441
-
2442
- export class UsersService {
2443
- /**
2444
- * Delete own user account
2445
- * @param data The data for the request.
2446
- * @param data.requestBody
2447
- * @returns void User deleted successfully
2448
- * @throws ApiError
2449
- */
2450
- public static userControllerDeleteOwnUser(
2451
- data: UserControllerDeleteOwnUserData
2452
- ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
2453
- return __request(OpenAPI, {
2454
- method: 'DELETE',
2455
- url: '/api/v1/users',
2456
- body: data.requestBody,
2457
- mediaType: 'application/json',
2458
- errors: {
2459
- 403: 'Invalid access token'
2460
- }
2461
- });
2462
- }
2463
-
2464
- /**
2465
- * Get current authenticated user
2466
- * @param data The data for the request.
2467
- * @param data.acceptLanguage
2468
- * @returns unknown User retrieved successfully
2469
- * @throws ApiError
2470
- */
2471
- public static userControllerGetUser(
2472
- data: UserControllerGetUserData
2473
- ): CancelablePromise<UserControllerGetUserResponse> {
2474
- return __request(OpenAPI, {
2475
- method: 'GET',
2476
- url: '/api/v1/users',
2477
- headers: {
2478
- 'accept-language': data.acceptLanguage
2479
- }
2480
- });
2481
- }
2482
-
2483
- /**
2484
- * Sign up new user
2485
- * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
2486
- * @param data The data for the request.
2487
- * @param data.requestBody
2488
- * @returns unknown User created successfully
2489
- * @throws ApiError
2490
- */
2491
- public static userControllerSignupUser(
2492
- data: UserControllerSignupUserData
2493
- ): CancelablePromise<UserControllerSignupUserResponse> {
2494
- return __request(OpenAPI, {
2495
- method: 'POST',
2496
- url: '/api/v1/users',
2497
- body: data.requestBody,
2498
- mediaType: 'application/json',
2499
- errors: {
2500
- 400: 'Invalid Turnstile token (when Turnstile is enabled)',
2501
- 403: 'User signup is disabled'
2502
- }
2503
- });
2504
- }
2505
-
2506
- /**
2507
- * Delete user by ID (admin only)
2508
- * @param data The data for the request.
2509
- * @param data.id User ID to delete
2510
- * @returns void User deleted successfully
2511
- * @throws ApiError
2512
- */
2513
- public static userControllerDeleteUser(
2514
- data: UserControllerDeleteUserData
2515
- ): CancelablePromise<UserControllerDeleteUserResponse> {
2516
- return __request(OpenAPI, {
2517
- method: 'DELETE',
2518
- url: '/api/v1/users/{id}',
2519
- path: {
2520
- id: data.id
2521
- },
2522
- errors: {
2523
- 403: 'Cannot delete own account or insufficient permissions'
2524
- }
2525
- });
2526
- }
2527
-
2528
- /**
2529
- * Get user info by user ID
2530
- * @param data The data for the request.
2531
- * @param data.id User ID
2532
- * @returns unknown User info retrieved successfully
2533
- * @throws ApiError
2534
- */
2535
- public static userControllerGetUserInfo(
2536
- data: UserControllerGetUserInfoData
2537
- ): CancelablePromise<UserControllerGetUserInfoResponse> {
2538
- return __request(OpenAPI, {
2539
- method: 'GET',
2540
- url: '/api/v1/users/{id}/info',
2541
- path: {
2542
- id: data.id
2543
- },
2544
- errors: {
2545
- 403: 'Cannot access other user info without admin permission'
2546
- }
2547
- });
2548
- }
2549
-
2550
- /**
2551
- * Update user settings
2552
- * @param data The data for the request.
2553
- * @param data.requestBody
2554
- * @returns unknown Settings updated successfully
2555
- * @throws ApiError
2556
- */
2557
- public static userControllerUpdateUserSetting(
2558
- data: UserControllerUpdateUserSettingData
2559
- ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
2560
- return __request(OpenAPI, {
2561
- method: 'PUT',
2562
- url: '/api/v1/users/setting',
2563
- body: data.requestBody,
2564
- mediaType: 'application/json',
2565
- errors: {
2566
- 403: 'Insufficient permissions'
2567
- }
2568
- });
2569
- }
2570
-
2571
- /**
2572
- * Get all user settings paginated (admin only)
2573
- * @param data The data for the request.
2574
- * @param data.pageNo Page number
2575
- * @param data.pageSize Page size
2576
- * @returns unknown Settings list retrieved successfully
2577
- * @throws ApiError
2578
- */
2579
- public static userControllerGetAllUserSettingsByPage(
2580
- data: UserControllerGetAllUserSettingsByPageData
2581
- ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
2582
- return __request(OpenAPI, {
2583
- method: 'GET',
2584
- url: '/api/v1/users/settings-by-page',
2585
- query: {
2586
- pageNo: data.pageNo,
2587
- pageSize: data.pageSize
2588
- }
2589
- });
2590
- }
2591
-
2592
- /**
2593
- * Get asset and liability summary for current user
2594
- * @returns unknown Summary retrieved successfully
2595
- * @throws ApiError
2596
- */
2597
- public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
2598
- return __request(OpenAPI, {
2599
- method: 'GET',
2600
- url: '/api/v1/users/asset-liability-summary'
2601
- });
2602
- }
2603
- }
2604
-
2605
- export class PropertiesService {
2606
- /**
2607
- * Get all system properties
2608
- * @returns unknown Properties retrieved successfully
2609
- * @throws ApiError
2610
- */
2611
- public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
2612
- return __request(OpenAPI, {
2613
- method: 'GET',
2614
- url: '/api/v1/admin/properties',
2615
- errors: {
2616
- 401: 'Unauthorized',
2617
- 403: 'Forbidden - insufficient permissions'
2618
- }
2619
- });
2620
- }
2621
-
2622
- /**
2623
- * Get property by key
2624
- * @param data The data for the request.
2625
- * @param data.key Property key
2626
- * @returns unknown Property retrieved successfully
2627
- * @throws ApiError
2628
- */
2629
- public static propertyControllerGetByKey(
2630
- data: PropertyControllerGetByKeyData
2631
- ): CancelablePromise<PropertyControllerGetByKeyResponse> {
2632
- return __request(OpenAPI, {
2633
- method: 'GET',
2634
- url: '/api/v1/admin/properties/{key}',
2635
- path: {
2636
- key: data.key
2637
- },
2638
- errors: {
2639
- 401: 'Unauthorized',
2640
- 403: 'Forbidden - insufficient permissions',
2641
- 404: 'Property not found'
2642
- }
2643
- });
2644
- }
2645
-
2646
- /**
2647
- * Update a system property
2648
- * @param data The data for the request.
2649
- * @param data.key Property key
2650
- * @param data.requestBody
2651
- * @returns unknown Property updated successfully
2652
- * @throws ApiError
2653
- */
2654
- public static propertyControllerUpdate(
2655
- data: PropertyControllerUpdateData
2656
- ): CancelablePromise<PropertyControllerUpdateResponse> {
2845
+ */
2846
+ public static transactionRuleControllerTest(
2847
+ data: TransactionRuleControllerTestData
2848
+ ): CancelablePromise<TransactionRuleControllerTestResponse> {
2657
2849
  return __request(OpenAPI, {
2658
- method: 'PUT',
2659
- url: '/api/v1/admin/properties/{key}',
2850
+ method: 'POST',
2851
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2660
2852
  path: {
2661
- key: data.key
2853
+ ruleId: data.ruleId,
2854
+ region: data.region
2662
2855
  },
2663
2856
  body: data.requestBody,
2664
2857
  mediaType: 'application/json',
2665
2858
  errors: {
2666
2859
  401: 'Unauthorized',
2667
- 403: 'Forbidden - insufficient permissions'
2860
+ 403: 'Forbidden - not owner of rule',
2861
+ 404: 'Rule not found'
2668
2862
  }
2669
2863
  });
2670
2864
  }
2865
+ }
2671
2866
 
2867
+ export class BeanCategoryCatalogService {
2672
2868
  /**
2673
- * 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.
2674
2871
  * @param data The data for the request.
2675
- * @param data.key Property key
2676
- * @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
2677
2876
  * @throws ApiError
2678
2877
  */
2679
- public static propertyControllerDelete(
2680
- data: PropertyControllerDeleteData
2681
- ): CancelablePromise<PropertyControllerDeleteResponse> {
2878
+ public static categoryCatalogControllerList(
2879
+ data: CategoryCatalogControllerListData
2880
+ ): CancelablePromise<CategoryCatalogControllerListResponse> {
2682
2881
  return __request(OpenAPI, {
2683
- method: 'DELETE',
2684
- url: '/api/v1/admin/properties/{key}',
2882
+ method: 'GET',
2883
+ url: '/api/v1/{region}/bean/categories',
2685
2884
  path: {
2686
- key: data.key
2885
+ region: data.region
2687
2886
  },
2688
- errors: {
2689
- 401: 'Unauthorized',
2690
- 403: 'Forbidden - insufficient permissions',
2691
- 404: 'Property not found'
2887
+ query: {
2888
+ scenario: data.scenario,
2889
+ routeBearing: data.routeBearing
2692
2890
  }
2693
2891
  });
2694
2892
  }
@@ -2873,7 +3071,7 @@ export class OnboardingService {
2873
3071
  /**
2874
3072
  * Bootstrap core accounts + register asset accounts with opening balances (ADR-0113)
2875
3073
  * @param data The data for the request.
2876
- * @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)
2877
3075
  * @param data.requestBody
2878
3076
  * @returns unknown Onboarding bootstrap result.
2879
3077
  * @throws ApiError
@@ -3006,7 +3204,7 @@ export class BeanExportService {
3006
3204
  /**
3007
3205
  * Export Beancount ledger as ZIP
3008
3206
  * Export all user Beancount data as a ZIP file containing ledger.beancount and yearly files in community format.
3009
- * @returns unknown
3207
+ * @returns binary ZIP archive (application/zip) streamed as an attachment
3010
3208
  * @throws ApiError
3011
3209
  */
3012
3210
  public static exportControllerExportBeancount(): CancelablePromise<ExportControllerExportBeancountResponse> {
@@ -3569,13 +3767,20 @@ export class BeanPlatformsService {
3569
3767
 
3570
3768
  /**
3571
3769
  * Get platform list for current user
3572
- * @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
3573
3773
  * @throws ApiError
3574
3774
  */
3575
- public static platformControllerGetPlatformList(): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3775
+ public static platformControllerGetPlatformList(
3776
+ data: PlatformControllerGetPlatformListData = {}
3777
+ ): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3576
3778
  return __request(OpenAPI, {
3577
3779
  method: 'GET',
3578
- url: '/api/v1/bean/platforms/list'
3780
+ url: '/api/v1/bean/platforms/list',
3781
+ query: {
3782
+ region: data.region
3783
+ }
3579
3784
  });
3580
3785
  }
3581
3786
 
@@ -3583,8 +3788,8 @@ export class BeanPlatformsService {
3583
3788
  * Match platforms by name or alias
3584
3789
  * @param data The data for the request.
3585
3790
  * @param data.q Search query — Chinese name, English name, or abbreviation
3586
- * @param data.region Region code for category override lookup
3587
- * @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
3588
3793
  * @throws ApiError
3589
3794
  */
3590
3795
  public static platformControllerMatchPlatforms(
@@ -3600,6 +3805,31 @@ export class BeanPlatformsService {
3600
3805
  });
3601
3806
  }
3602
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
+
3603
3833
  /**
3604
3834
  * Update a platform
3605
3835
  * @param data The data for the request.
@@ -3802,217 +4032,97 @@ export class InvestmentService {
3802
4032
  }
3803
4033
  }
3804
4034
 
3805
- export class ReportingService {
3806
- /**
3807
- * Get portfolio value trends
3808
- *
3809
- * Returns time series data of portfolio net worth.
3810
- *
3811
- * **Multi-currency Support:**
3812
- * - `series[].byCurrency` - Currency breakdown for each data point
3813
- * - `byCurrency` - Separate time series grouped by currency
3814
- * - `warnings` - Exchange rate warnings if conversion failed
3815
- *
3816
- * **Parameters:**
3817
- * - `period`: Time period (1m, 3m, 6m, 1y)
3818
- * - `granularity`: Data granularity (day, week, month)
3819
- *
3820
- * @param data The data for the request.
3821
- * @param data.region Region code for tenant context
3822
- * @param data.period Time period
3823
- * @param data.granularity Data granularity
3824
- * @returns PortfolioTrendsResponseDto Trends retrieved successfully
3825
- * @throws ApiError
3826
- */
3827
- public static reportingControllerGetPortfolioTrends(
3828
- data: ReportingControllerGetPortfolioTrendsData
3829
- ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
3830
- return __request(OpenAPI, {
3831
- method: 'GET',
3832
- url: '/api/v1/{region}/reporting/portfolio/trends',
3833
- path: {
3834
- region: data.region
3835
- },
3836
- query: {
3837
- period: data.period,
3838
- granularity: data.granularity
3839
- },
3840
- errors: {
3841
- 401: 'User not authenticated'
3842
- }
3843
- });
3844
- }
3845
-
4035
+ export class ApiKeysService {
3846
4036
  /**
3847
- * Get cash-flow trends
3848
- *
3849
- * Monthly income / expense / netSavings over a fixed N-month window
3850
- * (current month + N−1 prior). Missing months are zero-filled (flow metric).
3851
- *
3852
- * **Parameters:**
3853
- * - `period`: 1m | 3m | 6m | 1y (default 6m)
3854
- * - `granularity`: accepted for API symmetry; v1 returns month buckets
3855
- *
3856
- * @param data The data for the request.
3857
- * @param data.region Region code for tenant context
3858
- * @param data.period Time period
3859
- * @param data.granularity Data granularity (accepted for API symmetry; v1 returns month buckets)
3860
- * @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
3861
4040
  * @throws ApiError
3862
4041
  */
3863
- public static reportingControllerGetCashFlowTrends(
3864
- data: ReportingControllerGetCashFlowTrendsData
3865
- ): CancelablePromise<ReportingControllerGetCashFlowTrendsResponse> {
4042
+ public static apiKeysControllerCreateApiKey(): CancelablePromise<ApiKeysControllerCreateApiKeyResponse> {
3866
4043
  return __request(OpenAPI, {
3867
- method: 'GET',
3868
- url: '/api/v1/{region}/reporting/cash-flow/trends',
3869
- path: {
3870
- region: data.region
3871
- },
3872
- query: {
3873
- period: data.period,
3874
- granularity: data.granularity
3875
- },
4044
+ method: 'POST',
4045
+ url: '/api/v1/auth/api-keys',
3876
4046
  errors: {
3877
- 401: 'User not authenticated'
4047
+ 403: 'Insufficient permissions to create API key'
3878
4048
  }
3879
4049
  });
3880
4050
  }
4051
+ }
3881
4052
 
4053
+ export class AuthService {
3882
4054
  /**
3883
- * Generate portfolio snapshot
3884
- *
3885
- * Manually generate a portfolio snapshot for a specific date.
3886
- *
3887
- * **Multi-currency Support:**
3888
- * - Fetches balances grouped by currency
3889
- * - Uses user's baseCurrency setting for conversion
3890
- * - Stores exchange rates and warnings
3891
- *
3892
- * **Use Cases:**
3893
- * - Testing snapshot generation
3894
- * - Force regeneration after data correction
3895
- * - Initial setup for new users
3896
- *
4055
+ * Anonymous login with access token
3897
4056
  * @param data The data for the request.
3898
- * @param data.region Region code for tenant context
3899
- * @param data.requestBody Optional date (defaults to today)
3900
- * @returns GenerateSnapshotResponse Snapshot generated successfully
4057
+ * @param data.requestBody
4058
+ * @returns AnonymousLoginResponseDto Login successful
3901
4059
  * @throws ApiError
3902
4060
  */
3903
- public static reportingControllerGenerateSnapshot(
3904
- data: ReportingControllerGenerateSnapshotData
3905
- ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
4061
+ public static authControllerAccessTokenLogin(
4062
+ data: AuthControllerAccessTokenLoginData
4063
+ ): CancelablePromise<AuthControllerAccessTokenLoginResponse> {
3906
4064
  return __request(OpenAPI, {
3907
4065
  method: 'POST',
3908
- url: '/api/v1/{region}/reporting/snapshots/generate',
3909
- path: {
3910
- region: data.region
3911
- },
4066
+ url: '/api/v1/auth/sessions/anonymous',
3912
4067
  body: data.requestBody,
3913
4068
  mediaType: 'application/json',
3914
4069
  errors: {
3915
- 400: 'Invalid date format',
3916
- 401: 'User not authenticated'
4070
+ 401: 'Invalid access token'
3917
4071
  }
3918
4072
  });
3919
4073
  }
4074
+ }
3920
4075
 
4076
+ export class CommunityService {
3921
4077
  /**
3922
- * Backfill portfolio snapshots
3923
- *
3924
- * Generate snapshots for a date range (historical data backfill).
3925
- *
3926
- * **Multi-currency Support:**
3927
- * - Each snapshot includes multi-currency data
3928
- * - Uses exchange rates available at generation time
3929
- * - Warnings stored for missing exchange rates
3930
- *
3931
- * **Best Practices:**
3932
- * - Use for initial setup after account configuration
3933
- * - Run during low-traffic periods for large date ranges
3934
- * - Existing snapshots are skipped (not regenerated)
3935
- *
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).
3936
4080
  * @param data The data for the request.
3937
- * @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)
3938
4082
  * @param data.requestBody
3939
- * @returns BackfillSnapshotsResponse Backfill completed successfully
4083
+ * @returns ParserContributionRelayResponseDto Issue created by the bot
3940
4084
  * @throws ApiError
3941
4085
  */
3942
- public static reportingControllerBackfillSnapshots(
3943
- data: ReportingControllerBackfillSnapshotsData
3944
- ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
4086
+ public static parserContributionControllerCreate(
4087
+ data: ParserContributionControllerCreateData
4088
+ ): CancelablePromise<ParserContributionControllerCreateResponse> {
3945
4089
  return __request(OpenAPI, {
3946
4090
  method: 'POST',
3947
- url: '/api/v1/{region}/reporting/snapshots/backfill',
4091
+ url: '/api/v1/{region}/community/parser-contributions',
3948
4092
  path: {
3949
4093
  region: data.region
3950
4094
  },
3951
4095
  body: data.requestBody,
3952
4096
  mediaType: 'application/json',
3953
4097
  errors: {
3954
- 400: 'Invalid date format or range',
3955
- 401: 'User not authenticated',
3956
- 409: 'Backfill already in progress for this user'
3957
- }
3958
- });
3959
- }
3960
- }
3961
-
3962
- export class ApiKeysService {
3963
- /**
3964
- * Create API key
3965
- * Generates a new API key for the authenticated user
3966
- * @returns unknown API key created successfully
3967
- * @throws ApiError
3968
- */
3969
- public static apiKeysControllerCreateApiKey(): CancelablePromise<ApiKeysControllerCreateApiKeyResponse> {
3970
- return __request(OpenAPI, {
3971
- method: 'POST',
3972
- url: '/api/v1/auth/api-keys',
3973
- errors: {
3974
- 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'
3975
4103
  }
3976
4104
  });
3977
4105
  }
3978
4106
  }
3979
4107
 
3980
- export class AuthService {
4108
+ export class AdminCacheService {
3981
4109
  /**
3982
- * Anonymous login with access token
3983
- * @param data The data for the request.
3984
- * @param data.requestBody
3985
- * @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
3986
4113
  * @throws ApiError
3987
4114
  */
3988
- public static authControllerAccessTokenLogin(
3989
- data: AuthControllerAccessTokenLoginData
3990
- ): CancelablePromise<AuthControllerAccessTokenLoginResponse> {
4115
+ public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
3991
4116
  return __request(OpenAPI, {
3992
4117
  method: 'POST',
3993
- url: '/api/v1/auth/sessions/anonymous',
3994
- body: data.requestBody,
3995
- mediaType: 'application/json',
4118
+ url: '/api/v1/cache/flush',
3996
4119
  errors: {
3997
- 401: 'Invalid access token'
4120
+ 403: 'Admin access required'
3998
4121
  }
3999
4122
  });
4000
4123
  }
4001
4124
  }
4002
4125
 
4003
- export class DefaultService {
4004
- /**
4005
- * @returns unknown
4006
- * @throws ApiError
4007
- */
4008
- public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
4009
- return __request(OpenAPI, {
4010
- method: 'POST',
4011
- url: '/api/v1/cache/flush'
4012
- });
4013
- }
4014
- }
4015
-
4016
4126
  export class ExchangeRateService {
4017
4127
  /**
4018
4128
  * Get exchange rate for currency pair
@@ -4169,3 +4279,53 @@ export class InfoService {
4169
4279
  });
4170
4280
  }
4171
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
+ }