@firela/api-types 0.0.0-canary.2d71872c → 0.0.0-canary.2e2a26ba

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.
@@ -73,6 +73,43 @@ export type AccountResponseDto = {
73
73
  * Account type (root segment)
74
74
  */
75
75
  type: 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
76
+ /**
77
+ * Account-level asset sub-class (product type, e.g. STOCK/DEPOSIT/CREDIT_CARD/PERSONAL_LOAN). Computed from the account path via the asset-classifier (ADR-0077). Null for non-asset accounts (Income/Expenses/Equity) or unmatched paths.
78
+ */
79
+ assetSubClass?:
80
+ | 'DEPOSIT'
81
+ | 'CASH'
82
+ | 'MONEY_MARKET_FUND'
83
+ | 'STOCK'
84
+ | 'ETF'
85
+ | 'MUTUAL_FUND'
86
+ | 'EQUITY_COMPENSATION'
87
+ | 'GOVERNMENT_BOND'
88
+ | 'CORPORATE_BOND'
89
+ | 'BOND_FUND'
90
+ | 'PRIMARY_RESIDENCE'
91
+ | 'INVESTMENT_PROPERTY'
92
+ | 'REIT'
93
+ | 'GOLD'
94
+ | 'SILVER'
95
+ | 'PRECIOUS_METAL'
96
+ | 'PRECIOUS_METAL_FUND'
97
+ | 'COMMODITY'
98
+ | 'COMMODITY_FUND'
99
+ | 'CRYPTOCURRENCY'
100
+ | 'RETIREMENT_ACCOUNT'
101
+ | 'HEALTH_ACCOUNT'
102
+ | 'EDUCATION_ACCOUNT'
103
+ | 'INSURANCE'
104
+ | 'PRIVATE_EQUITY'
105
+ | 'HEDGE_FUND'
106
+ | 'COLLECTIBLES'
107
+ | 'MORTGAGE'
108
+ | 'STUDENT_LOAN'
109
+ | 'CREDIT_CARD'
110
+ | 'PERSONAL_LOAN'
111
+ | 'OTHER'
112
+ | null;
76
113
  /**
77
114
  * Account status
78
115
  */
@@ -149,6 +186,43 @@ export type AccountResponseDto = {
149
186
  */
150
187
  export type type = 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
151
188
 
189
+ /**
190
+ * Account-level asset sub-class (product type, e.g. STOCK/DEPOSIT/CREDIT_CARD/PERSONAL_LOAN). Computed from the account path via the asset-classifier (ADR-0077). Null for non-asset accounts (Income/Expenses/Equity) or unmatched paths.
191
+ */
192
+ export type assetSubClass =
193
+ | 'DEPOSIT'
194
+ | 'CASH'
195
+ | 'MONEY_MARKET_FUND'
196
+ | 'STOCK'
197
+ | 'ETF'
198
+ | 'MUTUAL_FUND'
199
+ | 'EQUITY_COMPENSATION'
200
+ | 'GOVERNMENT_BOND'
201
+ | 'CORPORATE_BOND'
202
+ | 'BOND_FUND'
203
+ | 'PRIMARY_RESIDENCE'
204
+ | 'INVESTMENT_PROPERTY'
205
+ | 'REIT'
206
+ | 'GOLD'
207
+ | 'SILVER'
208
+ | 'PRECIOUS_METAL'
209
+ | 'PRECIOUS_METAL_FUND'
210
+ | 'COMMODITY'
211
+ | 'COMMODITY_FUND'
212
+ | 'CRYPTOCURRENCY'
213
+ | 'RETIREMENT_ACCOUNT'
214
+ | 'HEALTH_ACCOUNT'
215
+ | 'EDUCATION_ACCOUNT'
216
+ | 'INSURANCE'
217
+ | 'PRIVATE_EQUITY'
218
+ | 'HEDGE_FUND'
219
+ | 'COLLECTIBLES'
220
+ | 'MORTGAGE'
221
+ | 'STUDENT_LOAN'
222
+ | 'CREDIT_CARD'
223
+ | 'PERSONAL_LOAN'
224
+ | 'OTHER';
225
+
152
226
  /**
153
227
  * Account status
154
228
  */
@@ -2701,384 +2775,223 @@ export type ForecastResponseDto = {
2701
2775
  periodEnd: string;
2702
2776
  };
2703
2777
 
2704
- export type CreateTransactionRuleDto = {
2705
- name: string;
2706
- description?: string;
2707
- narrationKeywords?: Array<unknown[]>;
2708
- payeeKeywords?: Array<unknown[]>;
2709
- categoryKeywords?: Array<unknown[]>;
2778
+ export type CurrencyBalanceDto = {
2710
2779
  /**
2711
- * Payment method keywords (e.g., HuaBei, YuEBao)
2780
+ * ISO 4217 currency code
2712
2781
  */
2713
- methodKeywords?: Array<unknown[]>;
2782
+ currency: string;
2714
2783
  /**
2715
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2784
+ * Balance amount
2716
2785
  */
2717
- categoryAccount?: string;
2718
- matchLogic: 'OR' | 'AND';
2786
+ balance: string;
2787
+ };
2788
+
2789
+ export type TimeSeriesPointDto = {
2719
2790
  /**
2720
- * Minimum transaction amount (inclusive)
2791
+ * Date in YYYY-MM-DD format
2721
2792
  */
2722
- amountMin?: number;
2793
+ date: string;
2723
2794
  /**
2724
- * Maximum transaction amount (inclusive)
2795
+ * Value at this date (in base currency)
2725
2796
  */
2726
- amountMax?: number;
2727
- priority: number;
2728
- additionalTags?: Array<unknown[]>;
2729
- additionalMetadata?: {
2797
+ value: string;
2798
+ /**
2799
+ * Change from previous point
2800
+ */
2801
+ change?: {
2730
2802
  [key: string]: unknown;
2731
2803
  };
2732
2804
  /**
2733
- * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
2805
+ * Total assets at this date (in base currency)
2734
2806
  */
2735
- upsertByPayee?: boolean;
2736
- };
2737
-
2738
- export type matchLogic = 'OR' | 'AND';
2739
-
2740
- export type AmountRangeDto = {
2807
+ assets?: string;
2741
2808
  /**
2742
- * Minimum amount
2809
+ * Total liabilities at this date (in base currency)
2743
2810
  */
2744
- min?: number;
2811
+ liabilities?: string;
2745
2812
  /**
2746
- * Maximum amount
2813
+ * Multi-currency breakdown for this point
2747
2814
  */
2748
- max?: number;
2815
+ byCurrency?: Array<CurrencyBalanceDto>;
2749
2816
  };
2750
2817
 
2751
- export type TransactionRuleResponseDto = {
2752
- /**
2753
- * Rule ID
2754
- */
2755
- id: string;
2756
- /**
2757
- * Rule name
2758
- */
2759
- name: string;
2818
+ export type TrendSummaryDto = {
2760
2819
  /**
2761
- * Rule description
2820
+ * Value at start of period
2762
2821
  */
2763
- description?: string;
2822
+ startValue: string;
2764
2823
  /**
2765
- * Keywords to match in transaction narration
2824
+ * Value at end of period
2766
2825
  */
2767
- narrationKeywords: Array<string>;
2826
+ endValue: string;
2768
2827
  /**
2769
- * Keywords to match in payee name
2828
+ * Total change over period
2770
2829
  */
2771
- payeeKeywords: Array<string>;
2830
+ totalChange: string;
2772
2831
  /**
2773
- * Keywords to match in category
2832
+ * Total change percentage
2774
2833
  */
2775
- categoryKeywords: Array<string>;
2834
+ totalChangePercentage: string;
2835
+ };
2836
+
2837
+ export type MultiCurrencyPointDto = {
2776
2838
  /**
2777
- * Keywords to match in payment method
2839
+ * Date in YYYY-MM-DD format
2778
2840
  */
2779
- methodKeywords: Array<string>;
2841
+ date: string;
2780
2842
  /**
2781
- * Destination account for categorization
2843
+ * Balances by currency
2782
2844
  */
2783
- categoryAccount?: string;
2845
+ byCurrency: Array<CurrencyBalanceDto>;
2846
+ };
2847
+
2848
+ export type PortfolioTrendsResponseDto = {
2784
2849
  /**
2785
- * Keyword matching logic
2850
+ * Time series data points
2786
2851
  */
2787
- matchLogic: 'OR' | 'AND';
2852
+ series: Array<TimeSeriesPointDto>;
2788
2853
  /**
2789
- * Amount range for matching
2854
+ * Period summary
2790
2855
  */
2791
- amountRange?: AmountRangeDto;
2856
+ summary: TrendSummaryDto;
2792
2857
  /**
2793
- * Rule priority (0-1000, higher = first match)
2858
+ * Period requested
2794
2859
  */
2795
- priority: number;
2860
+ period: string;
2796
2861
  /**
2797
- * Whether the rule is enabled
2862
+ * Data granularity
2798
2863
  */
2799
- enabled: boolean;
2864
+ granularity: string;
2800
2865
  /**
2801
- * Learning source: NLP, REVIEW_CENTER, or null for manual
2866
+ * Base currency for converted values
2802
2867
  */
2803
- learningSource?: 'NLP' | 'REVIEW_CENTER' | null;
2868
+ currency: string;
2804
2869
  /**
2805
- * Whether auto-apply is enabled for this rule
2870
+ * Multi-currency time series (each point has currency breakdown)
2806
2871
  */
2807
- autoApplyEnabled: boolean;
2872
+ byCurrency?: Array<MultiCurrencyPointDto>;
2808
2873
  /**
2809
- * Number of confirmations for NLP-learned rules
2874
+ * Exchange rate warnings
2810
2875
  */
2811
- confirmationCount: number;
2876
+ warnings?: Array<ExchangeRateWarningDto>;
2877
+ };
2878
+
2879
+ export type CashFlowPointDto = {
2812
2880
  /**
2813
- * Additional tags
2881
+ * Month key (YYYY-MM)
2814
2882
  */
2815
- additionalTags: Array<string>;
2883
+ month: string;
2816
2884
  /**
2817
- * Additional metadata
2885
+ * Income in base currency (absolute, converted)
2818
2886
  */
2819
- additionalMetadata?: {
2820
- [key: string]: string;
2821
- };
2887
+ income: string;
2822
2888
  /**
2823
- * Created timestamp
2889
+ * Expense in base currency (absolute, converted)
2824
2890
  */
2825
- createdAt: string;
2891
+ expense: string;
2826
2892
  /**
2827
- * Updated timestamp
2893
+ * netSavings = income − expense (savings positive)
2828
2894
  */
2829
- updatedAt: string;
2895
+ netSavings: string;
2830
2896
  };
2831
2897
 
2832
- /**
2833
- * Learning source: NLP, REVIEW_CENTER, or null for manual
2834
- */
2835
- export type learningSource = 'NLP' | 'REVIEW_CENTER';
2836
-
2837
- export type TransactionRuleListResponseDto = {
2838
- data: Array<TransactionRuleResponseDto>;
2898
+ export type CashFlowTrendSummaryDto = {
2839
2899
  /**
2840
- * Total count of rules
2900
+ * Total income across the period
2841
2901
  */
2842
- total: number;
2902
+ totalIncome: string;
2843
2903
  /**
2844
- * Results per page
2904
+ * Total expense across the period
2845
2905
  */
2846
- limit: number;
2906
+ totalExpense: string;
2847
2907
  /**
2848
- * Pagination offset
2908
+ * income − expense across the period
2849
2909
  */
2850
- offset: number;
2910
+ totalNetSavings: string;
2911
+ /**
2912
+ * totalNetSavings divided by the window length (N months, incl. zero-filled)
2913
+ */
2914
+ averageMonthlyNetSavings: string;
2851
2915
  };
2852
2916
 
2853
- export type ValidateRuleDto = {
2854
- name: string;
2855
- description?: string;
2856
- narrationKeywords?: Array<unknown[]>;
2857
- payeeKeywords?: Array<unknown[]>;
2858
- categoryKeywords?: Array<unknown[]>;
2917
+ export type CashFlowTrendsResponseDto = {
2859
2918
  /**
2860
- * Payment method keywords (e.g., HuaBei, YuEBao)
2919
+ * Monthly cash-flow series (fixed N-month window, zero-filled)
2861
2920
  */
2862
- methodKeywords?: Array<unknown[]>;
2921
+ series: Array<CashFlowPointDto>;
2863
2922
  /**
2864
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
2923
+ * Period totals
2865
2924
  */
2866
- categoryAccount?: string;
2867
- matchLogic: 'OR' | 'AND';
2925
+ summary: CashFlowTrendSummaryDto;
2868
2926
  /**
2869
- * Minimum transaction amount (inclusive)
2927
+ * Period requested
2870
2928
  */
2871
- amountMin?: number;
2929
+ period: string;
2872
2930
  /**
2873
- * Maximum transaction amount (inclusive)
2931
+ * Data granularity (v1 returns month buckets)
2874
2932
  */
2875
- amountMax?: number;
2876
- priority: number;
2877
- additionalTags?: Array<unknown[]>;
2878
- additionalMetadata?: {
2879
- [key: string]: unknown;
2880
- };
2933
+ granularity: string;
2881
2934
  /**
2882
- * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
2935
+ * Base currency for converted values
2883
2936
  */
2884
- upsertByPayee?: boolean;
2885
- };
2886
-
2887
- export type ValidateRuleResponseDto = {
2937
+ currency: string;
2888
2938
  /**
2889
- * Whether the rule configuration is valid
2939
+ * Exchange rate warnings (e.g. missing rate for a currency)
2890
2940
  */
2891
- valid: boolean;
2941
+ warnings?: Array<ExchangeRateWarningDto>;
2942
+ };
2943
+
2944
+ export type GenerateSnapshotBody = unknown;
2945
+
2946
+ export type GenerateSnapshotResponse = unknown;
2947
+
2948
+ export type BackfillSnapshotsBody = unknown;
2949
+
2950
+ export type BackfillSnapshotsResponse = unknown;
2951
+
2952
+ export type DeleteOwnUserDto = {
2892
2953
  /**
2893
- * List of validation errors (empty if valid)
2954
+ * Access token for user verification
2894
2955
  */
2895
- errors: Array<unknown[]>;
2956
+ accessToken: string;
2957
+ };
2958
+
2959
+ export type SignupDto = {
2896
2960
  /**
2897
- * List of validation warnings (non-blocking issues)
2961
+ * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2898
2962
  */
2899
- warnings: Array<unknown[]>;
2963
+ turnstileToken?: string;
2900
2964
  };
2901
2965
 
2902
- export type BulkCreateRulesDto = {
2966
+ export type SignupResponseDto = {
2903
2967
  /**
2904
- * Array of rules to import
2968
+ * JWT auth token
2905
2969
  */
2906
- rules: Array<unknown[]>;
2970
+ authToken: string;
2907
2971
  /**
2908
- * Conflict handling strategy: skip (default) ignores duplicates, replace soft-deletes existing rule
2972
+ * Auto-generated access token
2909
2973
  */
2910
- conflictStrategy: 'replace' | 'skip';
2974
+ accessToken: string;
2975
+ /**
2976
+ * Assigned user role
2977
+ */
2978
+ role: 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2911
2979
  };
2912
2980
 
2913
2981
  /**
2914
- * Conflict handling strategy: skip (default) ignores duplicates, replace soft-deletes existing rule
2982
+ * Assigned user role
2915
2983
  */
2916
- export type conflictStrategy = 'replace' | 'skip';
2984
+ export type role = 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2917
2985
 
2918
- export type BulkCreateRulesResponseDto = {
2986
+ export type UpdateUserSettingDto = {
2919
2987
  /**
2920
- * Number of successfully created rules
2988
+ * Security ID
2921
2989
  */
2922
- successCount: number;
2990
+ secId?: number;
2923
2991
  /**
2924
- * Number of failed rules
2992
+ * Annual interest rate
2925
2993
  */
2926
- failureCount: number;
2927
- /**
2928
- * Error details for failed rules
2929
- */
2930
- errors: Array<{
2931
- index?: number;
2932
- message?: string;
2933
- }>;
2934
- /**
2935
- * IDs of successfully created rules
2936
- */
2937
- createdRuleIds: Array<string>;
2938
- };
2939
-
2940
- export type ExportRulesResponseDto = {
2941
- /**
2942
- * Export timestamp
2943
- */
2944
- exportedAt: string;
2945
- /**
2946
- * User ID
2947
- */
2948
- userId: string;
2949
- /**
2950
- * Number of exported rules
2951
- */
2952
- ruleCount: number;
2953
- /**
2954
- * Exported rules
2955
- */
2956
- rules: unknown[];
2957
- };
2958
-
2959
- export type RuleStatisticsResponseDto = {
2960
- /**
2961
- * Statistics time period
2962
- */
2963
- period: '7d' | '30d' | '90d';
2964
- /**
2965
- * Total number of rules
2966
- */
2967
- totalRules: number;
2968
- /**
2969
- * Number of rules with at least one match
2970
- */
2971
- rulesWithMatches: number;
2972
- /**
2973
- * Total number of matches across all rules
2974
- */
2975
- totalMatches: number;
2976
- /**
2977
- * Average confidence score across all matches
2978
- */
2979
- averageConfidence: number;
2980
- /**
2981
- * Per-rule statistics
2982
- */
2983
- ruleStats: Array<{
2984
- ruleId?: string;
2985
- ruleName?: string;
2986
- matchCount?: number;
2987
- averageConfidence?: number;
2988
- }>;
2989
- };
2990
-
2991
- /**
2992
- * Statistics time period
2993
- */
2994
- export type period = '7d' | '30d' | '90d';
2995
-
2996
- export type UpdateTransactionRuleDto = {
2997
- name?: string;
2998
- description?: string;
2999
- narrationKeywords?: Array<unknown[]>;
3000
- payeeKeywords?: Array<unknown[]>;
3001
- categoryKeywords?: Array<unknown[]>;
3002
- /**
3003
- * Payment method keywords (e.g., HuaBei, YuEBao)
3004
- */
3005
- methodKeywords?: Array<unknown[]>;
3006
- /**
3007
- * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
3008
- */
3009
- categoryAccount?: string;
3010
- matchLogic?: 'OR' | 'AND';
3011
- /**
3012
- * Minimum transaction amount (inclusive)
3013
- */
3014
- amountMin?: number;
3015
- /**
3016
- * Maximum transaction amount (inclusive)
3017
- */
3018
- amountMax?: number;
3019
- priority?: number;
3020
- /**
3021
- * Enable or disable the rule
3022
- */
3023
- enabled?: boolean;
3024
- additionalTags?: Array<unknown[]>;
3025
- additionalMetadata?: {
3026
- [key: string]: unknown;
3027
- };
3028
- };
3029
-
3030
- export type TestRuleDto = {
3031
- narration: string;
3032
- payee?: string;
3033
- categoryAccount?: string;
3034
- amount?: number;
3035
- currency?: string;
3036
- };
3037
-
3038
- export type TestRuleResponseDto = {
3039
- /**
3040
- * Rule ID that was tested
3041
- */
3042
- ruleId: string;
3043
- /**
3044
- * Whether the rule matched the test data
3045
- */
3046
- matches: boolean;
3047
- /**
3048
- * Match confidence score (0-1)
3049
- */
3050
- confidence: number;
3051
- /**
3052
- * Details of which fields matched
3053
- */
3054
- matchDetails: {
3055
- [key: string]: unknown;
3056
- };
3057
- };
3058
-
3059
- export type DeleteOwnUserDto = {
3060
- /**
3061
- * Access token for user verification
3062
- */
3063
- accessToken: string;
3064
- };
3065
-
3066
- export type SignupDto = {
3067
- /**
3068
- * Cloudflare Turnstile verification token (optional when Turnstile disabled)
3069
- */
3070
- turnstileToken?: string;
3071
- };
3072
-
3073
- export type UpdateUserSettingDto = {
3074
- /**
3075
- * Security ID
3076
- */
3077
- secId?: number;
3078
- /**
3079
- * Annual interest rate
3080
- */
3081
- annualInterestRate?: number;
2994
+ annualInterestRate?: number;
3082
2995
  /**
3083
2996
  * Currency code
3084
2997
  */
@@ -3174,93 +3087,448 @@ export type UpdatePropertyDto = {
3174
3087
  value: string;
3175
3088
  };
3176
3089
 
3177
- export type CreateBeanEventDto = {
3090
+ export type CreateTransactionRuleDto = {
3091
+ name: string;
3092
+ description?: string;
3093
+ narrationKeywords?: Array<unknown[]>;
3094
+ payeeKeywords?: Array<unknown[]>;
3095
+ categoryKeywords?: Array<unknown[]>;
3178
3096
  /**
3179
- * Life event date (ISO 8601)
3097
+ * Payment method keywords (e.g., HuaBei, YuEBao)
3180
3098
  */
3181
- date: string;
3099
+ methodKeywords?: Array<unknown[]>;
3182
3100
  /**
3183
- * Life event type (e.g., "employer", "location", "marital-status") — user-defined, no enum constraint at engine layer
3101
+ * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
3184
3102
  */
3185
- type: string;
3103
+ categoryAccount?: string;
3104
+ matchLogic: 'OR' | 'AND';
3186
3105
  /**
3187
- * Life event description. Empty string is a VALID value (distinct from absence).
3106
+ * Minimum transaction amount (inclusive)
3188
3107
  */
3189
- description: string;
3108
+ amountMin?: number;
3190
3109
  /**
3191
- * Product-side metadata (lives in BeanEvent.meta JSON, never in engine Event fields)
3110
+ * Maximum transaction amount (inclusive)
3192
3111
  */
3193
- meta?: {
3112
+ amountMax?: number;
3113
+ priority: number;
3114
+ additionalTags?: Array<unknown[]>;
3115
+ additionalMetadata?: {
3194
3116
  [key: string]: unknown;
3195
3117
  };
3118
+ /**
3119
+ * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
3120
+ */
3121
+ upsertByPayee?: boolean;
3196
3122
  };
3197
3123
 
3198
- export type EventResponseDto = {
3124
+ export type matchLogic = 'OR' | 'AND';
3125
+
3126
+ export type AmountRangeDto = {
3199
3127
  /**
3200
- * Unique identifier
3128
+ * Minimum amount
3201
3129
  */
3202
- id: string;
3130
+ min?: number;
3203
3131
  /**
3204
- * User ID (owner of the life event)
3132
+ * Maximum amount
3205
3133
  */
3206
- userId: string;
3134
+ max?: number;
3135
+ };
3136
+
3137
+ export type TransactionRuleResponseDto = {
3207
3138
  /**
3208
- * Life event date (ISO 8601 format)
3139
+ * Rule ID
3209
3140
  */
3210
- date: string;
3141
+ id: string;
3211
3142
  /**
3212
- * Life event type (user-defined, e.g., "employer", "location")
3143
+ * Rule name
3213
3144
  */
3214
- type: string;
3145
+ name: string;
3215
3146
  /**
3216
- * Life event description. May be an empty string (a valid value distinct from absence).
3147
+ * Rule description
3217
3148
  */
3218
- description: string;
3149
+ description?: string;
3219
3150
  /**
3220
- * Product-side metadata (free-form JSON)
3151
+ * Keywords to match in transaction narration
3221
3152
  */
3222
- meta: {
3223
- [key: string]: unknown;
3224
- };
3153
+ narrationKeywords: Array<string>;
3225
3154
  /**
3226
- * Creation timestamp
3155
+ * Keywords to match in payee name
3227
3156
  */
3228
- createdAt: string;
3157
+ payeeKeywords: Array<string>;
3229
3158
  /**
3230
- * Last update timestamp. Also emitted as the ETag response header for If-Match optimistic concurrency.
3159
+ * Keywords to match in category
3231
3160
  */
3232
- updatedAt: string;
3233
- };
3234
-
3235
- export type EventListResponseDto = {
3161
+ categoryKeywords: Array<string>;
3236
3162
  /**
3237
- * List of life events
3163
+ * Keywords to match in payment method
3238
3164
  */
3239
- items: Array<EventResponseDto>;
3165
+ methodKeywords: Array<string>;
3240
3166
  /**
3241
- * Total number of life events matching the query
3167
+ * Destination account for categorization
3242
3168
  */
3243
- total: number;
3244
- };
3245
-
3246
- export type UpdateBeanEventDto = {
3169
+ categoryAccount?: string;
3247
3170
  /**
3248
- * Life event date (ISO 8601)
3171
+ * Keyword matching logic
3249
3172
  */
3250
- date?: string;
3173
+ matchLogic: 'OR' | 'AND';
3251
3174
  /**
3252
- * Life event type (user-defined)
3175
+ * Amount range for matching
3253
3176
  */
3254
- type?: string;
3177
+ amountRange?: AmountRangeDto;
3255
3178
  /**
3256
- * Life event description. Empty string is a VALID value (distinct from absence).
3179
+ * Rule priority (0-1000, higher = first match)
3257
3180
  */
3258
- description?: string;
3181
+ priority: number;
3259
3182
  /**
3260
- * Product-side metadata (free-form JSON)
3183
+ * Whether the rule is enabled
3261
3184
  */
3262
- meta?: {
3263
- [key: string]: unknown;
3185
+ enabled: boolean;
3186
+ /**
3187
+ * Learning source: NLP, REVIEW_CENTER, or null for manual
3188
+ */
3189
+ learningSource?: 'NLP' | 'REVIEW_CENTER' | null;
3190
+ /**
3191
+ * Whether auto-apply is enabled for this rule
3192
+ */
3193
+ autoApplyEnabled: boolean;
3194
+ /**
3195
+ * Number of confirmations for NLP-learned rules
3196
+ */
3197
+ confirmationCount: number;
3198
+ /**
3199
+ * Additional tags
3200
+ */
3201
+ additionalTags: Array<string>;
3202
+ /**
3203
+ * Additional metadata
3204
+ */
3205
+ additionalMetadata?: {
3206
+ [key: string]: string;
3207
+ };
3208
+ /**
3209
+ * Created timestamp
3210
+ */
3211
+ createdAt: string;
3212
+ /**
3213
+ * Updated timestamp
3214
+ */
3215
+ updatedAt: string;
3216
+ };
3217
+
3218
+ /**
3219
+ * Learning source: NLP, REVIEW_CENTER, or null for manual
3220
+ */
3221
+ export type learningSource = 'NLP' | 'REVIEW_CENTER';
3222
+
3223
+ export type TransactionRuleListResponseDto = {
3224
+ data: Array<TransactionRuleResponseDto>;
3225
+ /**
3226
+ * Total count of rules
3227
+ */
3228
+ total: number;
3229
+ /**
3230
+ * Results per page
3231
+ */
3232
+ limit: number;
3233
+ /**
3234
+ * Pagination offset
3235
+ */
3236
+ offset: number;
3237
+ };
3238
+
3239
+ export type ValidateRuleDto = {
3240
+ name: string;
3241
+ description?: string;
3242
+ narrationKeywords?: Array<unknown[]>;
3243
+ payeeKeywords?: Array<unknown[]>;
3244
+ categoryKeywords?: Array<unknown[]>;
3245
+ /**
3246
+ * Payment method keywords (e.g., HuaBei, YuEBao)
3247
+ */
3248
+ methodKeywords?: Array<unknown[]>;
3249
+ /**
3250
+ * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
3251
+ */
3252
+ categoryAccount?: string;
3253
+ matchLogic: 'OR' | 'AND';
3254
+ /**
3255
+ * Minimum transaction amount (inclusive)
3256
+ */
3257
+ amountMin?: number;
3258
+ /**
3259
+ * Maximum transaction amount (inclusive)
3260
+ */
3261
+ amountMax?: number;
3262
+ priority: number;
3263
+ additionalTags?: Array<unknown[]>;
3264
+ additionalMetadata?: {
3265
+ [key: string]: unknown;
3266
+ };
3267
+ /**
3268
+ * If true, update existing rule with matching payeeKeywords[0] instead of creating new rule
3269
+ */
3270
+ upsertByPayee?: boolean;
3271
+ };
3272
+
3273
+ export type ValidateRuleResponseDto = {
3274
+ /**
3275
+ * Whether the rule configuration is valid
3276
+ */
3277
+ valid: boolean;
3278
+ /**
3279
+ * List of validation errors (empty if valid)
3280
+ */
3281
+ errors: Array<unknown[]>;
3282
+ /**
3283
+ * List of validation warnings (non-blocking issues)
3284
+ */
3285
+ warnings: Array<unknown[]>;
3286
+ };
3287
+
3288
+ export type BulkCreateRulesDto = {
3289
+ /**
3290
+ * Array of rules to import
3291
+ */
3292
+ rules: Array<unknown[]>;
3293
+ /**
3294
+ * Conflict handling strategy: skip (default) ignores duplicates, replace soft-deletes existing rule
3295
+ */
3296
+ conflictStrategy: 'replace' | 'skip';
3297
+ };
3298
+
3299
+ /**
3300
+ * Conflict handling strategy: skip (default) ignores duplicates, replace soft-deletes existing rule
3301
+ */
3302
+ export type conflictStrategy = 'replace' | 'skip';
3303
+
3304
+ export type BulkCreateRulesResponseDto = {
3305
+ /**
3306
+ * Number of successfully created rules
3307
+ */
3308
+ successCount: number;
3309
+ /**
3310
+ * Number of failed rules
3311
+ */
3312
+ failureCount: number;
3313
+ /**
3314
+ * Error details for failed rules
3315
+ */
3316
+ errors: Array<{
3317
+ index?: number;
3318
+ message?: string;
3319
+ }>;
3320
+ /**
3321
+ * IDs of successfully created rules
3322
+ */
3323
+ createdRuleIds: Array<string>;
3324
+ };
3325
+
3326
+ export type ExportRulesResponseDto = {
3327
+ /**
3328
+ * Export timestamp
3329
+ */
3330
+ exportedAt: string;
3331
+ /**
3332
+ * User ID
3333
+ */
3334
+ userId: string;
3335
+ /**
3336
+ * Number of exported rules
3337
+ */
3338
+ ruleCount: number;
3339
+ /**
3340
+ * Exported rules
3341
+ */
3342
+ rules: unknown[];
3343
+ };
3344
+
3345
+ export type RuleStatisticsResponseDto = {
3346
+ /**
3347
+ * Statistics time period
3348
+ */
3349
+ period: '7d' | '30d' | '90d';
3350
+ /**
3351
+ * Total number of rules
3352
+ */
3353
+ totalRules: number;
3354
+ /**
3355
+ * Number of rules with at least one match
3356
+ */
3357
+ rulesWithMatches: number;
3358
+ /**
3359
+ * Total number of matches across all rules
3360
+ */
3361
+ totalMatches: number;
3362
+ /**
3363
+ * Average confidence score across all matches
3364
+ */
3365
+ averageConfidence: number;
3366
+ /**
3367
+ * Per-rule statistics
3368
+ */
3369
+ ruleStats: Array<{
3370
+ ruleId?: string;
3371
+ ruleName?: string;
3372
+ matchCount?: number;
3373
+ averageConfidence?: number;
3374
+ }>;
3375
+ };
3376
+
3377
+ /**
3378
+ * Statistics time period
3379
+ */
3380
+ export type period = '7d' | '30d' | '90d';
3381
+
3382
+ export type UpdateTransactionRuleDto = {
3383
+ name?: string;
3384
+ description?: string;
3385
+ narrationKeywords?: Array<unknown[]>;
3386
+ payeeKeywords?: Array<unknown[]>;
3387
+ categoryKeywords?: Array<unknown[]>;
3388
+ /**
3389
+ * Payment method keywords (e.g., HuaBei, YuEBao)
3390
+ */
3391
+ methodKeywords?: Array<unknown[]>;
3392
+ /**
3393
+ * Destination account for expenses/income (e.g., Expenses:Food:Coffee)
3394
+ */
3395
+ categoryAccount?: string;
3396
+ matchLogic?: 'OR' | 'AND';
3397
+ /**
3398
+ * Minimum transaction amount (inclusive)
3399
+ */
3400
+ amountMin?: number;
3401
+ /**
3402
+ * Maximum transaction amount (inclusive)
3403
+ */
3404
+ amountMax?: number;
3405
+ priority?: number;
3406
+ /**
3407
+ * Enable or disable the rule
3408
+ */
3409
+ enabled?: boolean;
3410
+ additionalTags?: Array<unknown[]>;
3411
+ additionalMetadata?: {
3412
+ [key: string]: unknown;
3413
+ };
3414
+ };
3415
+
3416
+ export type TestRuleDto = {
3417
+ narration: string;
3418
+ payee?: string;
3419
+ categoryAccount?: string;
3420
+ amount?: number;
3421
+ currency?: string;
3422
+ };
3423
+
3424
+ export type TestRuleResponseDto = {
3425
+ /**
3426
+ * Rule ID that was tested
3427
+ */
3428
+ ruleId: string;
3429
+ /**
3430
+ * Whether the rule matched the test data
3431
+ */
3432
+ matches: boolean;
3433
+ /**
3434
+ * Match confidence score (0-1)
3435
+ */
3436
+ confidence: number;
3437
+ /**
3438
+ * Details of which fields matched
3439
+ */
3440
+ matchDetails: {
3441
+ [key: string]: unknown;
3442
+ };
3443
+ };
3444
+
3445
+ export type CreateBeanEventDto = {
3446
+ /**
3447
+ * Life event date (ISO 8601)
3448
+ */
3449
+ date: string;
3450
+ /**
3451
+ * Life event type (e.g., "employer", "location", "marital-status") — user-defined, no enum constraint at engine layer
3452
+ */
3453
+ type: string;
3454
+ /**
3455
+ * Life event description. Empty string is a VALID value (distinct from absence).
3456
+ */
3457
+ description: string;
3458
+ /**
3459
+ * Product-side metadata (lives in BeanEvent.meta JSON, never in engine Event fields)
3460
+ */
3461
+ meta?: {
3462
+ [key: string]: unknown;
3463
+ };
3464
+ };
3465
+
3466
+ export type EventResponseDto = {
3467
+ /**
3468
+ * Unique identifier
3469
+ */
3470
+ id: string;
3471
+ /**
3472
+ * User ID (owner of the life event)
3473
+ */
3474
+ userId: string;
3475
+ /**
3476
+ * Life event date (ISO 8601 format)
3477
+ */
3478
+ date: string;
3479
+ /**
3480
+ * Life event type (user-defined, e.g., "employer", "location")
3481
+ */
3482
+ type: string;
3483
+ /**
3484
+ * Life event description. May be an empty string (a valid value distinct from absence).
3485
+ */
3486
+ description: string;
3487
+ /**
3488
+ * Product-side metadata (free-form JSON)
3489
+ */
3490
+ meta: {
3491
+ [key: string]: unknown;
3492
+ };
3493
+ /**
3494
+ * Creation timestamp
3495
+ */
3496
+ createdAt: string;
3497
+ /**
3498
+ * Last update timestamp. Also emitted as the ETag response header for If-Match optimistic concurrency.
3499
+ */
3500
+ updatedAt: string;
3501
+ };
3502
+
3503
+ export type EventListResponseDto = {
3504
+ /**
3505
+ * List of life events
3506
+ */
3507
+ items: Array<EventResponseDto>;
3508
+ /**
3509
+ * Total number of life events matching the query
3510
+ */
3511
+ total: number;
3512
+ };
3513
+
3514
+ export type UpdateBeanEventDto = {
3515
+ /**
3516
+ * Life event date (ISO 8601)
3517
+ */
3518
+ date?: string;
3519
+ /**
3520
+ * Life event type (user-defined)
3521
+ */
3522
+ type?: string;
3523
+ /**
3524
+ * Life event description. Empty string is a VALID value (distinct from absence).
3525
+ */
3526
+ description?: string;
3527
+ /**
3528
+ * Product-side metadata (free-form JSON)
3529
+ */
3530
+ meta?: {
3531
+ [key: string]: unknown;
3264
3532
  };
3265
3533
  };
3266
3534
 
@@ -3870,6 +4138,14 @@ export type ProcessNlpDto = {
3870
4138
  parsedData?: {
3871
4139
  [key: string]: unknown;
3872
4140
  };
4141
+ /**
4142
+ * confirm_rule echo-back: rule id selected from the prior confirm_rule response (matchedRule.id or alternatives[i].ruleId). Applied directly when the session is confirming_rule — no NL re-parse.
4143
+ */
4144
+ selectedRuleId?: string;
4145
+ /**
4146
+ * confirm_account echo-back: account path selected from the prior confirm_account response (suggestedAccount, similarAccounts[i], or a typed path). Applied directly when the session is confirming_account — no NL re-parse.
4147
+ */
4148
+ selectedAccount?: string;
3873
4149
  };
3874
4150
 
3875
4151
  export type NlpTransactionInfoDto = {
@@ -4113,9 +4389,9 @@ export type NlpAccountConfirmationDataDto = {
4113
4389
  */
4114
4390
  invalidAccount: string;
4115
4391
  /**
4116
- * Suggested replacement account
4392
+ * Suggested replacement account (omitted when no clear candidate)
4117
4393
  */
4118
- suggestedAccount: string;
4394
+ suggestedAccount?: string;
4119
4395
  /**
4120
4396
  * Similar accounts for user selection
4121
4397
  */
@@ -4294,7 +4570,8 @@ export type NlpResponseDto = {
4294
4570
  | 'confirm_rule'
4295
4571
  | 'confirm_account'
4296
4572
  | 'confirm_payee'
4297
- | 'cancel';
4573
+ | 'cancel'
4574
+ | 'aborted';
4298
4575
  /**
4299
4576
  * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
4300
4577
  */
@@ -4408,7 +4685,8 @@ export type action2 =
4408
4685
  | 'confirm_rule'
4409
4686
  | 'confirm_account'
4410
4687
  | 'confirm_payee'
4411
- | 'cancel';
4688
+ | 'cancel'
4689
+ | 'aborted';
4412
4690
 
4413
4691
  /**
4414
4692
  * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
@@ -4484,6 +4762,73 @@ export type type3 =
4484
4762
  | 'INSURANCE'
4485
4763
  | 'OTHER';
4486
4764
 
4765
+ export type PlatformMatchResultDto = {
4766
+ /**
4767
+ * Global platform ID
4768
+ */
4769
+ id: string;
4770
+ /**
4771
+ * Platform name (e.g., "ICBC")
4772
+ */
4773
+ name: string;
4774
+ /**
4775
+ * Canonical identifier in ACCOUNT_RE format (e.g., "icbc")
4776
+ */
4777
+ canonical: string;
4778
+ /**
4779
+ * Platform type
4780
+ */
4781
+ type:
4782
+ | 'BANK'
4783
+ | 'BROKERAGE'
4784
+ | 'CRYPTO_EXCHANGE'
4785
+ | 'PAYMENT'
4786
+ | 'INVESTMENT'
4787
+ | 'INSURANCE'
4788
+ | 'OTHER';
4789
+ /**
4790
+ * Suggested path segment — canonical, already in ACCOUNT_RE format
4791
+ */
4792
+ suggestedSegment: string;
4793
+ /**
4794
+ * Logo URL
4795
+ */
4796
+ logoUrl: string | null;
4797
+ /**
4798
+ * How this row matched: 'exact' > 'prefix' > 'substring'
4799
+ */
4800
+ matchType: 'exact' | 'prefix' | 'substring';
4801
+ };
4802
+
4803
+ /**
4804
+ * How this row matched: 'exact' > 'prefix' > 'substring'
4805
+ */
4806
+ export type matchType = 'exact' | 'prefix' | 'substring';
4807
+
4808
+ export type PlatformMatchResponseDto = {
4809
+ /**
4810
+ * Ranked matches, best tier first (at most 10 rows)
4811
+ */
4812
+ platforms: Array<PlatformMatchResultDto>;
4813
+ /**
4814
+ * Overall match quality — top row's tier, or 'none' when no hits
4815
+ */
4816
+ matchType: 'none' | 'exact' | 'prefix' | 'substring';
4817
+ /**
4818
+ * Total matches before LIMIT (truncation transparency)
4819
+ */
4820
+ total: number;
4821
+ /**
4822
+ * true when total > platforms.length (more matches exist)
4823
+ */
4824
+ hasMore: boolean;
4825
+ };
4826
+
4827
+ /**
4828
+ * Overall match quality — top row's tier, or 'none' when no hits
4829
+ */
4830
+ export type matchType2 = 'none' | 'exact' | 'prefix' | 'substring';
4831
+
4487
4832
  export type CreatePlatformDto = {
4488
4833
  /**
4489
4834
  * Platform name
@@ -5273,185 +5618,146 @@ export type HoldingPnlResponseDto = {
5273
5618
  */
5274
5619
  export type method = 'average' | 'FIFO';
5275
5620
 
5276
- export type CurrencyBalanceDto = {
5277
- /**
5278
- * ISO 4217 currency code
5279
- */
5280
- currency: string;
5281
- /**
5282
- * Balance amount
5283
- */
5284
- balance: string;
5285
- };
5286
-
5287
- export type TimeSeriesPointDto = {
5288
- /**
5289
- * Date in YYYY-MM-DD format
5290
- */
5291
- date: string;
5292
- /**
5293
- * Value at this date (in base currency)
5294
- */
5295
- value: string;
5296
- /**
5297
- * Change from previous point
5298
- */
5299
- change?: {
5300
- [key: string]: unknown;
5301
- };
5302
- /**
5303
- * Total assets at this date (in base currency)
5304
- */
5305
- assets?: string;
5306
- /**
5307
- * Total liabilities at this date (in base currency)
5308
- */
5309
- liabilities?: string;
5310
- /**
5311
- * Multi-currency breakdown for this point
5312
- */
5313
- byCurrency?: Array<CurrencyBalanceDto>;
5314
- };
5315
-
5316
- export type TrendSummaryDto = {
5317
- /**
5318
- * Value at start of period
5319
- */
5320
- startValue: string;
5321
- /**
5322
- * Value at end of period
5323
- */
5324
- endValue: string;
5325
- /**
5326
- * Total change over period
5327
- */
5328
- totalChange: string;
5621
+ export type AnonymousLoginDto = {
5329
5622
  /**
5330
- * Total change percentage
5623
+ * Access token for anonymous login
5331
5624
  */
5332
- totalChangePercentage: string;
5625
+ accessToken: string;
5333
5626
  };
5334
5627
 
5335
- export type MultiCurrencyPointDto = {
5628
+ export type AnonymousLoginResponseDto = {
5336
5629
  /**
5337
- * Date in YYYY-MM-DD format
5630
+ * JWT auth token
5338
5631
  */
5339
- date: string;
5340
- /**
5341
- * Balances by currency
5342
- */
5343
- byCurrency: Array<CurrencyBalanceDto>;
5632
+ authToken: string;
5344
5633
  };
5345
5634
 
5346
- export type PortfolioTrendsResponseDto = {
5347
- /**
5348
- * Time series data points
5349
- */
5350
- series: Array<TimeSeriesPointDto>;
5351
- /**
5352
- * Period summary
5353
- */
5354
- summary: TrendSummaryDto;
5355
- /**
5356
- * Period requested
5357
- */
5358
- period: string;
5635
+ export type SymbolSearchResultDto = {
5636
+ symbol: string;
5637
+ name?: {
5638
+ [key: string]: unknown;
5639
+ } | null;
5640
+ exchange?: {
5641
+ [key: string]: unknown;
5642
+ } | null;
5359
5643
  /**
5360
- * Data granularity
5644
+ * OpenBB asset_type (e.g. stock, etf)
5361
5645
  */
5362
- granularity: string;
5646
+ assetType?: {
5647
+ [key: string]: unknown;
5648
+ } | null;
5363
5649
  /**
5364
- * Base currency for converted values
5650
+ * IGN asset class (region.types.ts ASSET_CLASSES)
5365
5651
  */
5366
- currency: string;
5652
+ assetClass?: {
5653
+ [key: string]: unknown;
5654
+ } | null;
5367
5655
  /**
5368
- * Multi-currency time series (each point has currency breakdown)
5656
+ * IGN asset sub-class (region.types.ts ASSET_SUB_CLASSES)
5369
5657
  */
5370
- byCurrency?: Array<MultiCurrencyPointDto>;
5658
+ assetSubClass?: {
5659
+ [key: string]: unknown;
5660
+ } | null;
5371
5661
  /**
5372
- * Exchange rate warnings
5662
+ * Trading currency (extra_data or inferred from exchange)
5373
5663
  */
5374
- warnings?: Array<ExchangeRateWarningDto>;
5664
+ currency?: {
5665
+ [key: string]: unknown;
5666
+ } | null;
5375
5667
  };
5376
5668
 
5377
- export type CashFlowPointDto = {
5378
- /**
5379
- * Month key (YYYY-MM)
5380
- */
5381
- month: string;
5669
+ export type SymbolQuoteDto = {
5670
+ symbol?: string;
5671
+ name?: {
5672
+ [key: string]: unknown;
5673
+ } | null;
5674
+ exchange?: {
5675
+ [key: string]: unknown;
5676
+ } | null;
5382
5677
  /**
5383
- * Income in base currency (absolute, converted)
5678
+ * OpenBB asset_type
5384
5679
  */
5385
- income: string;
5680
+ assetType?: {
5681
+ [key: string]: unknown;
5682
+ } | null;
5386
5683
  /**
5387
- * Expense in base currency (absolute, converted)
5684
+ * IGN asset class
5388
5685
  */
5389
- expense: string;
5686
+ assetClass?: {
5687
+ [key: string]: unknown;
5688
+ } | null;
5390
5689
  /**
5391
- * netSavings = income − expense (savings positive)
5690
+ * IGN asset sub-class
5392
5691
  */
5393
- netSavings: string;
5394
- };
5395
-
5396
- export type CashFlowTrendSummaryDto = {
5692
+ assetSubClass?: {
5693
+ [key: string]: unknown;
5694
+ } | null;
5397
5695
  /**
5398
- * Total income across the period
5696
+ * Trading currency (extra_data or inferred from exchange)
5399
5697
  */
5400
- totalIncome: string;
5698
+ currency?: {
5699
+ [key: string]: unknown;
5700
+ } | null;
5401
5701
  /**
5402
- * Total expense across the period
5702
+ * Latest price (Decimal string)
5403
5703
  */
5404
- totalExpense: string;
5704
+ price?: {
5705
+ [key: string]: unknown;
5706
+ } | null;
5405
5707
  /**
5406
- * income − expense across the period
5708
+ * Date the price was observed (ISO yyyy-MM-dd)
5407
5709
  */
5408
- totalNetSavings: string;
5710
+ priceDate?: {
5711
+ [key: string]: unknown;
5712
+ } | null;
5409
5713
  /**
5410
- * totalNetSavings divided by the window length (N months, incl. zero-filled)
5714
+ * Change vs previous close, in percentage points (1.7 == 1.7%). openbb stores change_percent as a normalized decimal; this exposes percentage points for frontend convenience.
5411
5715
  */
5412
- averageMonthlyNetSavings: string;
5413
- };
5414
-
5415
- export type CashFlowTrendsResponseDto = {
5716
+ changePercent?: {
5717
+ [key: string]: unknown;
5718
+ } | null;
5416
5719
  /**
5417
- * Monthly cash-flow series (fixed N-month window, zero-filled)
5720
+ * Previous close (Decimal string)
5418
5721
  */
5419
- series: Array<CashFlowPointDto>;
5722
+ prevClose?: {
5723
+ [key: string]: unknown;
5724
+ } | null;
5420
5725
  /**
5421
- * Period totals
5726
+ * Day open (Decimal string)
5422
5727
  */
5423
- summary: CashFlowTrendSummaryDto;
5728
+ open?: {
5729
+ [key: string]: unknown;
5730
+ } | null;
5424
5731
  /**
5425
- * Period requested
5732
+ * Day high (Decimal string)
5426
5733
  */
5427
- period: string;
5734
+ high?: {
5735
+ [key: string]: unknown;
5736
+ } | null;
5428
5737
  /**
5429
- * Data granularity (v1 returns month buckets)
5738
+ * Day low (Decimal string)
5430
5739
  */
5431
- granularity: string;
5740
+ low?: {
5741
+ [key: string]: unknown;
5742
+ } | null;
5432
5743
  /**
5433
- * Base currency for converted values
5744
+ * Day volume (Decimal string)
5434
5745
  */
5435
- currency: string;
5746
+ volume?: {
5747
+ [key: string]: unknown;
5748
+ } | null;
5436
5749
  /**
5437
- * Exchange rate warnings (e.g. missing rate for a currency)
5750
+ * 52-week high (Decimal string)
5438
5751
  */
5439
- warnings?: Array<ExchangeRateWarningDto>;
5440
- };
5441
-
5442
- export type GenerateSnapshotBody = unknown;
5443
-
5444
- export type GenerateSnapshotResponse = unknown;
5445
-
5446
- export type BackfillSnapshotsBody = unknown;
5447
-
5448
- export type BackfillSnapshotsResponse = unknown;
5449
-
5450
- export type AnonymousLoginDto = {
5752
+ yearHigh?: {
5753
+ [key: string]: unknown;
5754
+ } | null;
5451
5755
  /**
5452
- * Access token for anonymous login
5756
+ * 52-week low (Decimal string)
5453
5757
  */
5454
- accessToken: string;
5758
+ yearLow?: {
5759
+ [key: string]: unknown;
5760
+ } | null;
5455
5761
  };
5456
5762
 
5457
5763
  export type AccountControllerCreateData = {
@@ -6485,20 +6791,168 @@ export type ExpectedTransactionControllerEnterNowData = {
6485
6791
  requestBody: EnterNowDto;
6486
6792
  };
6487
6793
 
6488
- export type ExpectedTransactionControllerEnterNowResponse = unknown;
6794
+ export type ExpectedTransactionControllerEnterNowResponse = unknown;
6795
+
6796
+ export type ForecastControllerGetForecastData = {
6797
+ /**
6798
+ * Number of months to forecast (1-12, default 3)
6799
+ */
6800
+ months?: number;
6801
+ /**
6802
+ * Region code for tenant context
6803
+ */
6804
+ region: 'cn' | 'us' | 'de' | 'gb';
6805
+ };
6806
+
6807
+ export type ForecastControllerGetForecastResponse = ForecastResponseDto;
6808
+
6809
+ export type ReportingControllerGetPortfolioTrendsData = {
6810
+ /**
6811
+ * Data granularity
6812
+ */
6813
+ granularity?: 'day' | 'week' | 'month';
6814
+ /**
6815
+ * Time period
6816
+ */
6817
+ period?: '1m' | '3m' | '6m' | '1y';
6818
+ /**
6819
+ * Region code for tenant context
6820
+ */
6821
+ region: 'cn' | 'us' | 'de' | 'gb';
6822
+ };
6823
+
6824
+ export type ReportingControllerGetPortfolioTrendsResponse =
6825
+ PortfolioTrendsResponseDto;
6826
+
6827
+ export type ReportingControllerGetCashFlowTrendsData = {
6828
+ /**
6829
+ * Data granularity (accepted for API symmetry; v1 returns month buckets)
6830
+ */
6831
+ granularity?: 'day' | 'week' | 'month';
6832
+ /**
6833
+ * Time period
6834
+ */
6835
+ period?: '1m' | '3m' | '6m' | '1y';
6836
+ /**
6837
+ * Region code for tenant context
6838
+ */
6839
+ region: 'cn' | 'us' | 'de' | 'gb';
6840
+ };
6841
+
6842
+ export type ReportingControllerGetCashFlowTrendsResponse =
6843
+ CashFlowTrendsResponseDto;
6844
+
6845
+ export type ReportingControllerGenerateSnapshotData = {
6846
+ /**
6847
+ * Region code for tenant context
6848
+ */
6849
+ region: 'cn' | 'us' | 'de' | 'gb';
6850
+ /**
6851
+ * Optional date (defaults to today)
6852
+ */
6853
+ requestBody: GenerateSnapshotBody;
6854
+ };
6855
+
6856
+ export type ReportingControllerGenerateSnapshotResponse =
6857
+ GenerateSnapshotResponse;
6858
+
6859
+ export type ReportingControllerBackfillSnapshotsData = {
6860
+ /**
6861
+ * Region code for tenant context
6862
+ */
6863
+ region: 'cn' | 'us' | 'de' | 'gb';
6864
+ requestBody: BackfillSnapshotsBody;
6865
+ };
6866
+
6867
+ export type ReportingControllerBackfillSnapshotsResponse =
6868
+ BackfillSnapshotsResponse;
6869
+
6870
+ export type UserControllerDeleteOwnUserData = {
6871
+ requestBody: DeleteOwnUserDto;
6872
+ };
6873
+
6874
+ export type UserControllerDeleteOwnUserResponse = void;
6875
+
6876
+ export type UserControllerGetUserData = {
6877
+ acceptLanguage: string;
6878
+ };
6879
+
6880
+ export type UserControllerGetUserResponse = unknown;
6881
+
6882
+ export type UserControllerSignupUserData = {
6883
+ requestBody: SignupDto;
6884
+ };
6885
+
6886
+ export type UserControllerSignupUserResponse = SignupResponseDto;
6887
+
6888
+ export type UserControllerDeleteUserData = {
6889
+ /**
6890
+ * User ID to delete
6891
+ */
6892
+ id: string;
6893
+ };
6894
+
6895
+ export type UserControllerDeleteUserResponse = void;
6896
+
6897
+ export type UserControllerGetUserInfoData = {
6898
+ /**
6899
+ * User ID
6900
+ */
6901
+ id: string;
6902
+ };
6903
+
6904
+ export type UserControllerGetUserInfoResponse = unknown;
6905
+
6906
+ export type UserControllerUpdateUserSettingData = {
6907
+ requestBody: UpdateUserSettingDto;
6908
+ };
6909
+
6910
+ export type UserControllerUpdateUserSettingResponse = unknown;
6911
+
6912
+ export type UserControllerGetAllUserSettingsByPageData = {
6913
+ /**
6914
+ * Page number
6915
+ */
6916
+ pageNo: number;
6917
+ /**
6918
+ * Page size
6919
+ */
6920
+ pageSize: number;
6921
+ };
6922
+
6923
+ export type UserControllerGetAllUserSettingsByPageResponse = unknown;
6924
+
6925
+ export type UserControllerGetAssetLiabilitySummaryResponse = unknown;
6926
+
6927
+ export type PropertyControllerGetAllResponse = unknown;
6928
+
6929
+ export type PropertyControllerGetByKeyData = {
6930
+ /**
6931
+ * Property key
6932
+ */
6933
+ key: string;
6934
+ };
6935
+
6936
+ export type PropertyControllerGetByKeyResponse = unknown;
6937
+
6938
+ export type PropertyControllerUpdateData = {
6939
+ /**
6940
+ * Property key
6941
+ */
6942
+ key: string;
6943
+ requestBody: UpdatePropertyDto;
6944
+ };
6945
+
6946
+ export type PropertyControllerUpdateResponse = unknown;
6489
6947
 
6490
- export type ForecastControllerGetForecastData = {
6491
- /**
6492
- * Number of months to forecast (1-12, default 3)
6493
- */
6494
- months?: number;
6948
+ export type PropertyControllerDeleteData = {
6495
6949
  /**
6496
- * Region code for tenant context
6950
+ * Property key
6497
6951
  */
6498
- region: 'cn' | 'us' | 'de' | 'gb';
6952
+ key: string;
6499
6953
  };
6500
6954
 
6501
- export type ForecastControllerGetForecastResponse = ForecastResponseDto;
6955
+ export type PropertyControllerDeleteResponse = void;
6502
6956
 
6503
6957
  export type TransactionRuleControllerCreateData = {
6504
6958
  /**
@@ -6645,93 +7099,6 @@ export type TransactionRuleControllerTestData = {
6645
7099
 
6646
7100
  export type TransactionRuleControllerTestResponse = TestRuleResponseDto;
6647
7101
 
6648
- export type UserControllerDeleteOwnUserData = {
6649
- requestBody: DeleteOwnUserDto;
6650
- };
6651
-
6652
- export type UserControllerDeleteOwnUserResponse = void;
6653
-
6654
- export type UserControllerGetUserData = {
6655
- acceptLanguage: string;
6656
- };
6657
-
6658
- export type UserControllerGetUserResponse = unknown;
6659
-
6660
- export type UserControllerSignupUserData = {
6661
- requestBody: SignupDto;
6662
- };
6663
-
6664
- export type UserControllerSignupUserResponse = unknown;
6665
-
6666
- export type UserControllerDeleteUserData = {
6667
- /**
6668
- * User ID to delete
6669
- */
6670
- id: string;
6671
- };
6672
-
6673
- export type UserControllerDeleteUserResponse = void;
6674
-
6675
- export type UserControllerGetUserInfoData = {
6676
- /**
6677
- * User ID
6678
- */
6679
- id: string;
6680
- };
6681
-
6682
- export type UserControllerGetUserInfoResponse = unknown;
6683
-
6684
- export type UserControllerUpdateUserSettingData = {
6685
- requestBody: UpdateUserSettingDto;
6686
- };
6687
-
6688
- export type UserControllerUpdateUserSettingResponse = unknown;
6689
-
6690
- export type UserControllerGetAllUserSettingsByPageData = {
6691
- /**
6692
- * Page number
6693
- */
6694
- pageNo: number;
6695
- /**
6696
- * Page size
6697
- */
6698
- pageSize: number;
6699
- };
6700
-
6701
- export type UserControllerGetAllUserSettingsByPageResponse = unknown;
6702
-
6703
- export type UserControllerGetAssetLiabilitySummaryResponse = unknown;
6704
-
6705
- export type PropertyControllerGetAllResponse = unknown;
6706
-
6707
- export type PropertyControllerGetByKeyData = {
6708
- /**
6709
- * Property key
6710
- */
6711
- key: string;
6712
- };
6713
-
6714
- export type PropertyControllerGetByKeyResponse = unknown;
6715
-
6716
- export type PropertyControllerUpdateData = {
6717
- /**
6718
- * Property key
6719
- */
6720
- key: string;
6721
- requestBody: UpdatePropertyDto;
6722
- };
6723
-
6724
- export type PropertyControllerUpdateResponse = unknown;
6725
-
6726
- export type PropertyControllerDeleteData = {
6727
- /**
6728
- * Property key
6729
- */
6730
- key: string;
6731
- };
6732
-
6733
- export type PropertyControllerDeleteResponse = void;
6734
-
6735
7102
  export type EventControllerCreateData = {
6736
7103
  /**
6737
7104
  * Region code for tenant context (decorative for life events)
@@ -7159,7 +7526,7 @@ export type PlatformControllerMatchPlatformsData = {
7159
7526
  region?: string;
7160
7527
  };
7161
7528
 
7162
- export type PlatformControllerMatchPlatformsResponse = unknown;
7529
+ export type PlatformControllerMatchPlatformsResponse = PlatformMatchResponseDto;
7163
7530
 
7164
7531
  export type PlatformControllerUpdateData = {
7165
7532
  /**
@@ -7277,74 +7644,13 @@ export type HoldingPnlControllerGetHoldingPnlData = {
7277
7644
 
7278
7645
  export type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
7279
7646
 
7280
- export type ReportingControllerGetPortfolioTrendsData = {
7281
- /**
7282
- * Data granularity
7283
- */
7284
- granularity?: 'day' | 'week' | 'month';
7285
- /**
7286
- * Time period
7287
- */
7288
- period?: '1m' | '3m' | '6m' | '1y';
7289
- /**
7290
- * Region code for tenant context
7291
- */
7292
- region: 'cn' | 'us' | 'de' | 'gb';
7293
- };
7294
-
7295
- export type ReportingControllerGetPortfolioTrendsResponse =
7296
- PortfolioTrendsResponseDto;
7297
-
7298
- export type ReportingControllerGetCashFlowTrendsData = {
7299
- /**
7300
- * Data granularity (accepted for API symmetry; v1 returns month buckets)
7301
- */
7302
- granularity?: 'day' | 'week' | 'month';
7303
- /**
7304
- * Time period
7305
- */
7306
- period?: '1m' | '3m' | '6m' | '1y';
7307
- /**
7308
- * Region code for tenant context
7309
- */
7310
- region: 'cn' | 'us' | 'de' | 'gb';
7311
- };
7312
-
7313
- export type ReportingControllerGetCashFlowTrendsResponse =
7314
- CashFlowTrendsResponseDto;
7315
-
7316
- export type ReportingControllerGenerateSnapshotData = {
7317
- /**
7318
- * Region code for tenant context
7319
- */
7320
- region: 'cn' | 'us' | 'de' | 'gb';
7321
- /**
7322
- * Optional date (defaults to today)
7323
- */
7324
- requestBody: GenerateSnapshotBody;
7325
- };
7326
-
7327
- export type ReportingControllerGenerateSnapshotResponse =
7328
- GenerateSnapshotResponse;
7329
-
7330
- export type ReportingControllerBackfillSnapshotsData = {
7331
- /**
7332
- * Region code for tenant context
7333
- */
7334
- region: 'cn' | 'us' | 'de' | 'gb';
7335
- requestBody: BackfillSnapshotsBody;
7336
- };
7337
-
7338
- export type ReportingControllerBackfillSnapshotsResponse =
7339
- BackfillSnapshotsResponse;
7340
-
7341
7647
  export type ApiKeysControllerCreateApiKeyResponse = unknown;
7342
7648
 
7343
7649
  export type AuthControllerAccessTokenLoginData = {
7344
7650
  requestBody: AnonymousLoginDto;
7345
7651
  };
7346
7652
 
7347
- export type AuthControllerAccessTokenLoginResponse = unknown;
7653
+ export type AuthControllerAccessTokenLoginResponse = AnonymousLoginResponseDto;
7348
7654
 
7349
7655
  export type CacheControllerFlushCacheResponse = unknown;
7350
7656
 
@@ -7384,6 +7690,33 @@ export type HealthControllerGetMetricsResponse = unknown;
7384
7690
 
7385
7691
  export type InfoControllerGetInfoResponse = unknown;
7386
7692
 
7693
+ export type SymbolControllerSearchData = {
7694
+ /**
7695
+ * Filter by OpenBB asset_type (e.g. stock, etf)
7696
+ */
7697
+ assetType?: string;
7698
+ /**
7699
+ * Filter by exchange code (e.g. US, HK, SS, SZ)
7700
+ */
7701
+ exchange?: string;
7702
+ /**
7703
+ * Maximum number of results (clamped 1..50)
7704
+ */
7705
+ limit?: number;
7706
+ /**
7707
+ * Search term — matched against symbol and instrument name. Empty string returns [].
7708
+ */
7709
+ q: string;
7710
+ };
7711
+
7712
+ export type SymbolControllerSearchResponse = Array<SymbolSearchResultDto>;
7713
+
7714
+ export type SymbolControllerGetQuoteData = {
7715
+ symbol: string;
7716
+ };
7717
+
7718
+ export type SymbolControllerGetQuoteResponse = SymbolQuoteDto;
7719
+
7387
7720
  export type $OpenApiTs = {
7388
7721
  '/api/v1/{region}/bean/accounts': {
7389
7722
  post: {
@@ -8425,425 +8758,497 @@ export type $OpenApiTs = {
8425
8758
  };
8426
8759
  '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
8427
8760
  post: {
8428
- req: ExpectedTransactionControllerEnterNowData;
8761
+ req: ExpectedTransactionControllerEnterNowData;
8762
+ res: {
8763
+ /**
8764
+ * Transaction created successfully
8765
+ */
8766
+ 201: unknown;
8767
+ /**
8768
+ * Cannot enter - not in PENDING status or missing accounts
8769
+ */
8770
+ 400: unknown;
8771
+ /**
8772
+ * Expected transaction or accounts not found
8773
+ */
8774
+ 404: unknown;
8775
+ };
8776
+ };
8777
+ };
8778
+ '/api/v1/{region}/bean/recurring/forecast': {
8779
+ get: {
8780
+ req: ForecastControllerGetForecastData;
8781
+ res: {
8782
+ /**
8783
+ * Forecast retrieved successfully
8784
+ */
8785
+ 200: ForecastResponseDto;
8786
+ };
8787
+ };
8788
+ };
8789
+ '/api/v1/{region}/reporting/portfolio/trends': {
8790
+ get: {
8791
+ req: ReportingControllerGetPortfolioTrendsData;
8792
+ res: {
8793
+ /**
8794
+ * Trends retrieved successfully
8795
+ */
8796
+ 200: PortfolioTrendsResponseDto;
8797
+ /**
8798
+ * User not authenticated
8799
+ */
8800
+ 401: unknown;
8801
+ };
8802
+ };
8803
+ };
8804
+ '/api/v1/{region}/reporting/cash-flow/trends': {
8805
+ get: {
8806
+ req: ReportingControllerGetCashFlowTrendsData;
8807
+ res: {
8808
+ /**
8809
+ * Cash-flow trends retrieved successfully
8810
+ */
8811
+ 200: CashFlowTrendsResponseDto;
8812
+ /**
8813
+ * User not authenticated
8814
+ */
8815
+ 401: unknown;
8816
+ };
8817
+ };
8818
+ };
8819
+ '/api/v1/{region}/reporting/snapshots/generate': {
8820
+ post: {
8821
+ req: ReportingControllerGenerateSnapshotData;
8822
+ res: {
8823
+ /**
8824
+ * Snapshot generated successfully
8825
+ */
8826
+ 200: GenerateSnapshotResponse;
8827
+ /**
8828
+ * Invalid date format
8829
+ */
8830
+ 400: unknown;
8831
+ /**
8832
+ * User not authenticated
8833
+ */
8834
+ 401: unknown;
8835
+ };
8836
+ };
8837
+ };
8838
+ '/api/v1/{region}/reporting/snapshots/backfill': {
8839
+ post: {
8840
+ req: ReportingControllerBackfillSnapshotsData;
8429
8841
  res: {
8430
8842
  /**
8431
- * Transaction created successfully
8843
+ * Backfill completed successfully
8432
8844
  */
8433
- 201: unknown;
8845
+ 200: BackfillSnapshotsResponse;
8434
8846
  /**
8435
- * Cannot enter - not in PENDING status or missing accounts
8847
+ * Invalid date format or range
8436
8848
  */
8437
8849
  400: unknown;
8438
8850
  /**
8439
- * Expected transaction or accounts not found
8851
+ * User not authenticated
8440
8852
  */
8441
- 404: unknown;
8442
- };
8443
- };
8444
- };
8445
- '/api/v1/{region}/bean/recurring/forecast': {
8446
- get: {
8447
- req: ForecastControllerGetForecastData;
8448
- res: {
8853
+ 401: unknown;
8449
8854
  /**
8450
- * Forecast retrieved successfully
8855
+ * Backfill already in progress for this user
8451
8856
  */
8452
- 200: ForecastResponseDto;
8857
+ 409: unknown;
8453
8858
  };
8454
8859
  };
8455
8860
  };
8456
- '/api/v1/{region}/bean/transaction-rules': {
8457
- post: {
8458
- req: TransactionRuleControllerCreateData;
8861
+ '/api/v1/users': {
8862
+ delete: {
8863
+ req: UserControllerDeleteOwnUserData;
8459
8864
  res: {
8460
8865
  /**
8461
- * Rule updated successfully (upsert mode)
8462
- */
8463
- 200: TransactionRuleResponseDto;
8464
- /**
8465
- * Validation failed
8466
- */
8467
- 400: ApiProblemResponseDto;
8468
- /**
8469
- * Unauthorized
8866
+ * User deleted successfully
8470
8867
  */
8471
- 401: ApiProblemResponseDto;
8868
+ 204: void;
8472
8869
  /**
8473
- * Resource conflict - another process is updating this rule
8870
+ * Invalid access token
8474
8871
  */
8475
- 409: ApiProblemResponseDto;
8872
+ 403: unknown;
8476
8873
  };
8477
8874
  };
8478
8875
  get: {
8479
- req: TransactionRuleControllerListData;
8876
+ req: UserControllerGetUserData;
8480
8877
  res: {
8481
8878
  /**
8482
- * List of rules
8483
- */
8484
- 200: TransactionRuleListResponseDto;
8485
- /**
8486
- * Unauthorized
8879
+ * User retrieved successfully
8487
8880
  */
8488
- 401: ApiProblemResponseDto;
8881
+ 200: unknown;
8489
8882
  };
8490
8883
  };
8491
- };
8492
- '/api/v1/{region}/bean/transaction-rules/validate': {
8493
8884
  post: {
8494
- req: TransactionRuleControllerValidateData;
8885
+ req: UserControllerSignupUserData;
8495
8886
  res: {
8496
8887
  /**
8497
- * Validation result
8888
+ * User created successfully
8498
8889
  */
8499
- 200: ValidateRuleResponseDto;
8890
+ 201: SignupResponseDto;
8500
8891
  /**
8501
- * Validation failed
8892
+ * Invalid Turnstile token (when Turnstile is enabled)
8502
8893
  */
8503
- 400: ApiProblemResponseDto;
8894
+ 400: unknown;
8504
8895
  /**
8505
- * Unauthorized
8896
+ * User signup is disabled
8506
8897
  */
8507
- 401: ApiProblemResponseDto;
8898
+ 403: unknown;
8508
8899
  };
8509
8900
  };
8510
8901
  };
8511
- '/api/v1/{region}/bean/transaction-rules/bulk': {
8512
- post: {
8513
- req: TransactionRuleControllerBulkCreateData;
8902
+ '/api/v1/users/{id}': {
8903
+ delete: {
8904
+ req: UserControllerDeleteUserData;
8514
8905
  res: {
8515
8906
  /**
8516
- * Bulk create completed
8517
- */
8518
- 201: BulkCreateRulesResponseDto;
8519
- /**
8520
- * Invalid bulk create data
8907
+ * User deleted successfully
8521
8908
  */
8522
- 400: ApiProblemResponseDto;
8909
+ 204: void;
8523
8910
  /**
8524
- * Unauthorized
8911
+ * Cannot delete own account or insufficient permissions
8525
8912
  */
8526
- 401: ApiProblemResponseDto;
8913
+ 403: unknown;
8527
8914
  };
8528
8915
  };
8529
8916
  };
8530
- '/api/v1/{region}/bean/transaction-rules/export/{format}': {
8917
+ '/api/v1/users/{id}/info': {
8531
8918
  get: {
8532
- req: TransactionRuleControllerExportData;
8919
+ req: UserControllerGetUserInfoData;
8533
8920
  res: {
8534
8921
  /**
8535
- * Exported rules
8536
- */
8537
- 200: ExportRulesResponseDto;
8538
- /**
8539
- * Unsupported format
8922
+ * User info retrieved successfully
8540
8923
  */
8541
- 400: ApiProblemResponseDto;
8924
+ 200: unknown;
8542
8925
  /**
8543
- * Unauthorized
8926
+ * Cannot access other user info without admin permission
8544
8927
  */
8545
- 401: ApiProblemResponseDto;
8928
+ 403: unknown;
8546
8929
  };
8547
8930
  };
8548
8931
  };
8549
- '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
8550
- get: {
8551
- req: TransactionRuleControllerGetStatisticsData;
8932
+ '/api/v1/users/setting': {
8933
+ put: {
8934
+ req: UserControllerUpdateUserSettingData;
8552
8935
  res: {
8553
8936
  /**
8554
- * Rule statistics
8937
+ * Settings updated successfully
8555
8938
  */
8556
- 200: RuleStatisticsResponseDto;
8939
+ 200: unknown;
8557
8940
  /**
8558
- * Unauthorized
8941
+ * Insufficient permissions
8559
8942
  */
8560
- 401: ApiProblemResponseDto;
8943
+ 403: unknown;
8561
8944
  };
8562
8945
  };
8563
8946
  };
8564
- '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
8947
+ '/api/v1/users/settings-by-page': {
8565
8948
  get: {
8566
- req: TransactionRuleControllerGetDetailData;
8949
+ req: UserControllerGetAllUserSettingsByPageData;
8567
8950
  res: {
8568
8951
  /**
8569
- * Rule details
8570
- */
8571
- 200: TransactionRuleResponseDto;
8572
- /**
8573
- * Unauthorized
8574
- */
8575
- 401: ApiProblemResponseDto;
8576
- /**
8577
- * Forbidden - not owner of rule
8578
- */
8579
- 403: ApiProblemResponseDto;
8580
- /**
8581
- * Rule not found
8952
+ * Settings list retrieved successfully
8582
8953
  */
8583
- 404: ApiProblemResponseDto;
8954
+ 200: unknown;
8584
8955
  };
8585
8956
  };
8586
- put: {
8587
- req: TransactionRuleControllerUpdateData;
8957
+ };
8958
+ '/api/v1/users/asset-liability-summary': {
8959
+ get: {
8588
8960
  res: {
8589
8961
  /**
8590
- * Rule updated successfully
8962
+ * Summary retrieved successfully
8591
8963
  */
8592
- 200: TransactionRuleResponseDto;
8964
+ 200: unknown;
8965
+ };
8966
+ };
8967
+ };
8968
+ '/api/v1/admin/properties': {
8969
+ get: {
8970
+ res: {
8593
8971
  /**
8594
- * Validation failed
8972
+ * Properties retrieved successfully
8595
8973
  */
8596
- 400: ApiProblemResponseDto;
8974
+ 200: unknown;
8597
8975
  /**
8598
8976
  * Unauthorized
8599
8977
  */
8600
- 401: ApiProblemResponseDto;
8601
- /**
8602
- * Forbidden - not owner of rule
8603
- */
8604
- 403: ApiProblemResponseDto;
8605
- /**
8606
- * Rule not found
8607
- */
8608
- 404: ApiProblemResponseDto;
8978
+ 401: unknown;
8609
8979
  /**
8610
- * Resource conflict - rule is being modified by another process
8980
+ * Forbidden - insufficient permissions
8611
8981
  */
8612
- 409: ApiProblemResponseDto;
8982
+ 403: unknown;
8613
8983
  };
8614
8984
  };
8615
- delete: {
8616
- req: TransactionRuleControllerDeleteData;
8985
+ };
8986
+ '/api/v1/admin/properties/{key}': {
8987
+ get: {
8988
+ req: PropertyControllerGetByKeyData;
8617
8989
  res: {
8618
8990
  /**
8619
- * Rule deleted successfully
8991
+ * Property retrieved successfully
8620
8992
  */
8621
- 204: void;
8993
+ 200: unknown;
8622
8994
  /**
8623
8995
  * Unauthorized
8624
8996
  */
8625
- 401: ApiProblemResponseDto;
8626
- /**
8627
- * Forbidden - not owner of rule
8628
- */
8629
- 403: ApiProblemResponseDto;
8997
+ 401: unknown;
8630
8998
  /**
8631
- * Rule not found
8999
+ * Forbidden - insufficient permissions
8632
9000
  */
8633
- 404: ApiProblemResponseDto;
9001
+ 403: unknown;
8634
9002
  /**
8635
- * Resource conflict - rule is being modified by another process
9003
+ * Property not found
8636
9004
  */
8637
- 409: ApiProblemResponseDto;
9005
+ 404: unknown;
8638
9006
  };
8639
9007
  };
8640
- };
8641
- '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
8642
- post: {
8643
- req: TransactionRuleControllerTestData;
9008
+ put: {
9009
+ req: PropertyControllerUpdateData;
8644
9010
  res: {
8645
9011
  /**
8646
- * Test result
9012
+ * Property updated successfully
8647
9013
  */
8648
- 200: TestRuleResponseDto;
9014
+ 200: unknown;
8649
9015
  /**
8650
9016
  * Unauthorized
8651
9017
  */
8652
- 401: ApiProblemResponseDto;
8653
- /**
8654
- * Forbidden - not owner of rule
8655
- */
8656
- 403: ApiProblemResponseDto;
9018
+ 401: unknown;
8657
9019
  /**
8658
- * Rule not found
9020
+ * Forbidden - insufficient permissions
8659
9021
  */
8660
- 404: ApiProblemResponseDto;
9022
+ 403: unknown;
8661
9023
  };
8662
9024
  };
8663
- };
8664
- '/api/v1/users': {
8665
9025
  delete: {
8666
- req: UserControllerDeleteOwnUserData;
9026
+ req: PropertyControllerDeleteData;
8667
9027
  res: {
8668
9028
  /**
8669
- * User deleted successfully
9029
+ * Property deleted successfully
8670
9030
  */
8671
9031
  204: void;
8672
9032
  /**
8673
- * Invalid access token
9033
+ * Unauthorized
9034
+ */
9035
+ 401: unknown;
9036
+ /**
9037
+ * Forbidden - insufficient permissions
8674
9038
  */
8675
9039
  403: unknown;
8676
- };
8677
- };
8678
- get: {
8679
- req: UserControllerGetUserData;
8680
- res: {
8681
9040
  /**
8682
- * User retrieved successfully
9041
+ * Property not found
8683
9042
  */
8684
- 200: unknown;
9043
+ 404: unknown;
8685
9044
  };
8686
9045
  };
9046
+ };
9047
+ '/api/v1/{region}/bean/transaction-rules': {
8687
9048
  post: {
8688
- req: UserControllerSignupUserData;
9049
+ req: TransactionRuleControllerCreateData;
8689
9050
  res: {
8690
9051
  /**
8691
- * User created successfully
9052
+ * Rule updated successfully (upsert mode)
8692
9053
  */
8693
- 201: unknown;
9054
+ 200: TransactionRuleResponseDto;
8694
9055
  /**
8695
- * Invalid Turnstile token (when Turnstile is enabled)
9056
+ * Validation failed
8696
9057
  */
8697
- 400: unknown;
9058
+ 400: ApiProblemResponseDto;
8698
9059
  /**
8699
- * User signup is disabled
9060
+ * Unauthorized
8700
9061
  */
8701
- 403: unknown;
9062
+ 401: ApiProblemResponseDto;
9063
+ /**
9064
+ * Resource conflict - another process is updating this rule
9065
+ */
9066
+ 409: ApiProblemResponseDto;
8702
9067
  };
8703
9068
  };
8704
- };
8705
- '/api/v1/users/{id}': {
8706
- delete: {
8707
- req: UserControllerDeleteUserData;
9069
+ get: {
9070
+ req: TransactionRuleControllerListData;
8708
9071
  res: {
8709
9072
  /**
8710
- * User deleted successfully
9073
+ * List of rules
8711
9074
  */
8712
- 204: void;
9075
+ 200: TransactionRuleListResponseDto;
8713
9076
  /**
8714
- * Cannot delete own account or insufficient permissions
9077
+ * Unauthorized
8715
9078
  */
8716
- 403: unknown;
9079
+ 401: ApiProblemResponseDto;
8717
9080
  };
8718
9081
  };
8719
9082
  };
8720
- '/api/v1/users/{id}/info': {
8721
- get: {
8722
- req: UserControllerGetUserInfoData;
9083
+ '/api/v1/{region}/bean/transaction-rules/validate': {
9084
+ post: {
9085
+ req: TransactionRuleControllerValidateData;
8723
9086
  res: {
8724
9087
  /**
8725
- * User info retrieved successfully
9088
+ * Validation result
8726
9089
  */
8727
- 200: unknown;
9090
+ 200: ValidateRuleResponseDto;
8728
9091
  /**
8729
- * Cannot access other user info without admin permission
9092
+ * Validation failed
8730
9093
  */
8731
- 403: unknown;
9094
+ 400: ApiProblemResponseDto;
9095
+ /**
9096
+ * Unauthorized
9097
+ */
9098
+ 401: ApiProblemResponseDto;
8732
9099
  };
8733
9100
  };
8734
9101
  };
8735
- '/api/v1/users/setting': {
8736
- put: {
8737
- req: UserControllerUpdateUserSettingData;
9102
+ '/api/v1/{region}/bean/transaction-rules/bulk': {
9103
+ post: {
9104
+ req: TransactionRuleControllerBulkCreateData;
8738
9105
  res: {
8739
9106
  /**
8740
- * Settings updated successfully
9107
+ * Bulk create completed
8741
9108
  */
8742
- 200: unknown;
9109
+ 201: BulkCreateRulesResponseDto;
8743
9110
  /**
8744
- * Insufficient permissions
9111
+ * Invalid bulk create data
8745
9112
  */
8746
- 403: unknown;
9113
+ 400: ApiProblemResponseDto;
9114
+ /**
9115
+ * Unauthorized
9116
+ */
9117
+ 401: ApiProblemResponseDto;
8747
9118
  };
8748
9119
  };
8749
9120
  };
8750
- '/api/v1/users/settings-by-page': {
9121
+ '/api/v1/{region}/bean/transaction-rules/export/{format}': {
8751
9122
  get: {
8752
- req: UserControllerGetAllUserSettingsByPageData;
9123
+ req: TransactionRuleControllerExportData;
8753
9124
  res: {
8754
9125
  /**
8755
- * Settings list retrieved successfully
9126
+ * Exported rules
8756
9127
  */
8757
- 200: unknown;
9128
+ 200: ExportRulesResponseDto;
9129
+ /**
9130
+ * Unsupported format
9131
+ */
9132
+ 400: ApiProblemResponseDto;
9133
+ /**
9134
+ * Unauthorized
9135
+ */
9136
+ 401: ApiProblemResponseDto;
8758
9137
  };
8759
9138
  };
8760
9139
  };
8761
- '/api/v1/users/asset-liability-summary': {
9140
+ '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
8762
9141
  get: {
9142
+ req: TransactionRuleControllerGetStatisticsData;
8763
9143
  res: {
8764
9144
  /**
8765
- * Summary retrieved successfully
9145
+ * Rule statistics
8766
9146
  */
8767
- 200: unknown;
9147
+ 200: RuleStatisticsResponseDto;
9148
+ /**
9149
+ * Unauthorized
9150
+ */
9151
+ 401: ApiProblemResponseDto;
8768
9152
  };
8769
9153
  };
8770
9154
  };
8771
- '/api/v1/admin/properties': {
9155
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
8772
9156
  get: {
9157
+ req: TransactionRuleControllerGetDetailData;
8773
9158
  res: {
8774
9159
  /**
8775
- * Properties retrieved successfully
9160
+ * Rule details
8776
9161
  */
8777
- 200: unknown;
9162
+ 200: TransactionRuleResponseDto;
8778
9163
  /**
8779
9164
  * Unauthorized
8780
9165
  */
8781
- 401: unknown;
9166
+ 401: ApiProblemResponseDto;
8782
9167
  /**
8783
- * Forbidden - insufficient permissions
9168
+ * Forbidden - not owner of rule
8784
9169
  */
8785
- 403: unknown;
9170
+ 403: ApiProblemResponseDto;
9171
+ /**
9172
+ * Rule not found
9173
+ */
9174
+ 404: ApiProblemResponseDto;
8786
9175
  };
8787
9176
  };
8788
- };
8789
- '/api/v1/admin/properties/{key}': {
8790
- get: {
8791
- req: PropertyControllerGetByKeyData;
9177
+ put: {
9178
+ req: TransactionRuleControllerUpdateData;
8792
9179
  res: {
8793
9180
  /**
8794
- * Property retrieved successfully
9181
+ * Rule updated successfully
8795
9182
  */
8796
- 200: unknown;
9183
+ 200: TransactionRuleResponseDto;
9184
+ /**
9185
+ * Validation failed
9186
+ */
9187
+ 400: ApiProblemResponseDto;
8797
9188
  /**
8798
9189
  * Unauthorized
8799
9190
  */
8800
- 401: unknown;
9191
+ 401: ApiProblemResponseDto;
8801
9192
  /**
8802
- * Forbidden - insufficient permissions
9193
+ * Forbidden - not owner of rule
8803
9194
  */
8804
- 403: unknown;
9195
+ 403: ApiProblemResponseDto;
8805
9196
  /**
8806
- * Property not found
9197
+ * Rule not found
8807
9198
  */
8808
- 404: unknown;
9199
+ 404: ApiProblemResponseDto;
9200
+ /**
9201
+ * Resource conflict - rule is being modified by another process
9202
+ */
9203
+ 409: ApiProblemResponseDto;
8809
9204
  };
8810
9205
  };
8811
- put: {
8812
- req: PropertyControllerUpdateData;
9206
+ delete: {
9207
+ req: TransactionRuleControllerDeleteData;
8813
9208
  res: {
8814
9209
  /**
8815
- * Property updated successfully
9210
+ * Rule deleted successfully
8816
9211
  */
8817
- 200: unknown;
9212
+ 204: void;
8818
9213
  /**
8819
9214
  * Unauthorized
8820
9215
  */
8821
- 401: unknown;
9216
+ 401: ApiProblemResponseDto;
8822
9217
  /**
8823
- * Forbidden - insufficient permissions
9218
+ * Forbidden - not owner of rule
8824
9219
  */
8825
- 403: unknown;
9220
+ 403: ApiProblemResponseDto;
9221
+ /**
9222
+ * Rule not found
9223
+ */
9224
+ 404: ApiProblemResponseDto;
9225
+ /**
9226
+ * Resource conflict - rule is being modified by another process
9227
+ */
9228
+ 409: ApiProblemResponseDto;
8826
9229
  };
8827
9230
  };
8828
- delete: {
8829
- req: PropertyControllerDeleteData;
9231
+ };
9232
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
9233
+ post: {
9234
+ req: TransactionRuleControllerTestData;
8830
9235
  res: {
8831
9236
  /**
8832
- * Property deleted successfully
9237
+ * Test result
8833
9238
  */
8834
- 204: void;
9239
+ 200: TestRuleResponseDto;
8835
9240
  /**
8836
9241
  * Unauthorized
8837
9242
  */
8838
- 401: unknown;
9243
+ 401: ApiProblemResponseDto;
8839
9244
  /**
8840
- * Forbidden - insufficient permissions
9245
+ * Forbidden - not owner of rule
8841
9246
  */
8842
- 403: unknown;
9247
+ 403: ApiProblemResponseDto;
8843
9248
  /**
8844
- * Property not found
9249
+ * Rule not found
8845
9250
  */
8846
- 404: unknown;
9251
+ 404: ApiProblemResponseDto;
8847
9252
  };
8848
9253
  };
8849
9254
  };
@@ -9399,9 +9804,9 @@ export type $OpenApiTs = {
9399
9804
  req: PlatformControllerMatchPlatformsData;
9400
9805
  res: {
9401
9806
  /**
9402
- * List of matching platforms with suggested segment names
9807
+ * Matching platforms with overall match type and truncation flag
9403
9808
  */
9404
- 200: unknown;
9809
+ 200: PlatformMatchResponseDto;
9405
9810
  };
9406
9811
  };
9407
9812
  };
@@ -9523,78 +9928,6 @@ export type $OpenApiTs = {
9523
9928
  };
9524
9929
  };
9525
9930
  };
9526
- '/api/v1/{region}/reporting/portfolio/trends': {
9527
- get: {
9528
- req: ReportingControllerGetPortfolioTrendsData;
9529
- res: {
9530
- /**
9531
- * Trends retrieved successfully
9532
- */
9533
- 200: PortfolioTrendsResponseDto;
9534
- /**
9535
- * User not authenticated
9536
- */
9537
- 401: unknown;
9538
- };
9539
- };
9540
- };
9541
- '/api/v1/{region}/reporting/cash-flow/trends': {
9542
- get: {
9543
- req: ReportingControllerGetCashFlowTrendsData;
9544
- res: {
9545
- /**
9546
- * Cash-flow trends retrieved successfully
9547
- */
9548
- 200: CashFlowTrendsResponseDto;
9549
- /**
9550
- * User not authenticated
9551
- */
9552
- 401: unknown;
9553
- };
9554
- };
9555
- };
9556
- '/api/v1/{region}/reporting/snapshots/generate': {
9557
- post: {
9558
- req: ReportingControllerGenerateSnapshotData;
9559
- res: {
9560
- /**
9561
- * Snapshot generated successfully
9562
- */
9563
- 200: GenerateSnapshotResponse;
9564
- /**
9565
- * Invalid date format
9566
- */
9567
- 400: unknown;
9568
- /**
9569
- * User not authenticated
9570
- */
9571
- 401: unknown;
9572
- };
9573
- };
9574
- };
9575
- '/api/v1/{region}/reporting/snapshots/backfill': {
9576
- post: {
9577
- req: ReportingControllerBackfillSnapshotsData;
9578
- res: {
9579
- /**
9580
- * Backfill completed successfully
9581
- */
9582
- 200: BackfillSnapshotsResponse;
9583
- /**
9584
- * Invalid date format or range
9585
- */
9586
- 400: unknown;
9587
- /**
9588
- * User not authenticated
9589
- */
9590
- 401: unknown;
9591
- /**
9592
- * Backfill already in progress for this user
9593
- */
9594
- 409: unknown;
9595
- };
9596
- };
9597
- };
9598
9931
  '/api/v1/auth/api-keys': {
9599
9932
  post: {
9600
9933
  res: {
@@ -9616,7 +9949,7 @@ export type $OpenApiTs = {
9616
9949
  /**
9617
9950
  * Login successful
9618
9951
  */
9619
- 200: unknown;
9952
+ 200: AnonymousLoginResponseDto;
9620
9953
  /**
9621
9954
  * Invalid access token
9622
9955
  */
@@ -9763,4 +10096,30 @@ export type $OpenApiTs = {
9763
10096
  };
9764
10097
  };
9765
10098
  };
10099
+ '/api/v1/market/symbols/search': {
10100
+ get: {
10101
+ req: SymbolControllerSearchData;
10102
+ res: {
10103
+ /**
10104
+ * Ranked search results
10105
+ */
10106
+ 200: Array<SymbolSearchResultDto>;
10107
+ };
10108
+ };
10109
+ };
10110
+ '/api/v1/market/symbols/{symbol}/quote': {
10111
+ get: {
10112
+ req: SymbolControllerGetQuoteData;
10113
+ res: {
10114
+ /**
10115
+ * Symbol quote
10116
+ */
10117
+ 200: SymbolQuoteDto;
10118
+ /**
10119
+ * Symbol not found in the openbb catalog
10120
+ */
10121
+ 404: unknown;
10122
+ };
10123
+ };
10124
+ };
9766
10125
  };