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

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.
@@ -5,10 +5,6 @@ export type CreateAccountDto = {
5
5
  * Account path (hierarchical, colon-separated)
6
6
  */
7
7
  path: string;
8
- /**
9
- * Display name to distinguish accounts at the same path (default: "")
10
- */
11
- displayName?: string;
12
8
  /**
13
9
  * Account open date
14
10
  */
@@ -36,10 +32,6 @@ export type CreateAccountDto = {
36
32
  * Whether this is a custom (user-created) account
37
33
  */
38
34
  isCustom?: boolean;
39
- /**
40
- * i18n key for display name (overrides template)
41
- */
42
- i18nKey?: string;
43
35
  /**
44
36
  * Icon identifier (overrides template)
45
37
  */
@@ -77,10 +69,6 @@ export type AccountResponseDto = {
77
69
  * Account path (hierarchical, colon-separated)
78
70
  */
79
71
  path: string;
80
- /**
81
- * Display name distinguishing multiple accounts at the same path
82
- */
83
- displayName: string;
84
72
  /**
85
73
  * Account type (root segment)
86
74
  */
@@ -121,9 +109,9 @@ export type AccountResponseDto = {
121
109
  */
122
110
  isCustom: boolean;
123
111
  /**
124
- * i18n key for display name
112
+ * Localized display name (ADR-0114, read-time projection)
125
113
  */
126
- i18nKey?: string;
114
+ displayName?: string;
127
115
  /**
128
116
  * Icon identifier
129
117
  */
@@ -178,10 +166,6 @@ export type AccountListResponseDto = {
178
166
  };
179
167
 
180
168
  export type UpdateAccountDto = {
181
- /**
182
- * Display name to distinguish accounts at the same path
183
- */
184
- displayName?: string;
185
169
  /**
186
170
  * Allowed currencies (null = no restriction)
187
171
  */
@@ -197,10 +181,6 @@ export type UpdateAccountDto = {
197
181
  | 'STRICT'
198
182
  | 'STRICT_WITH_SIZE'
199
183
  | 'NONE';
200
- /**
201
- * i18n key for display name
202
- */
203
- i18nKey?: string;
204
184
  /**
205
185
  * Icon identifier
206
186
  */
@@ -246,10 +226,6 @@ export type AccountStandardResponseDto = {
246
226
  * Account type in Beancount hierarchy
247
227
  */
248
228
  type: 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
249
- /**
250
- * i18n key for localized display name
251
- */
252
- i18nKey: string;
253
229
  /**
254
230
  * Short localized display name
255
231
  */
@@ -284,10 +260,6 @@ export type AccountStandardListResponseDto = {
284
260
  };
285
261
 
286
262
  export type TemplateMetadataDto = {
287
- /**
288
- * Whether this path can be extended
289
- */
290
- extendable: boolean;
291
263
  /**
292
264
  * Root account type
293
265
  */
@@ -848,6 +820,51 @@ export type flag2 =
848
820
  */
849
821
  export type status2 = 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
850
822
 
823
+ export type BalanceByCurrencyDto = {
824
+ /**
825
+ * ISO 4217 currency code
826
+ */
827
+ currency: string;
828
+ /**
829
+ * Balance amount
830
+ */
831
+ balance: string;
832
+ };
833
+
834
+ export type ExchangeRateWarningDto = {
835
+ /**
836
+ * Warning type
837
+ */
838
+ type: string;
839
+ /**
840
+ * Currency without exchange rate
841
+ */
842
+ currency: string;
843
+ /**
844
+ * Total amount affected
845
+ */
846
+ totalAmount: string;
847
+ };
848
+
849
+ export type TransactionListSummaryDto = {
850
+ /**
851
+ * Partial converted total in base currency (rated currencies only, raw Beancount sign). When warnings is non-empty this excludes currencies missing an FX rate; may be "0.00" if ALL non-base currencies lack a rate. Converted at the dateTo (or current) available rate.
852
+ */
853
+ totalAmount: string;
854
+ /**
855
+ * Base currency (ISO 4217)
856
+ */
857
+ currency: string;
858
+ /**
859
+ * Raw (unconverted) balance per currency
860
+ */
861
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
862
+ /**
863
+ * Currencies missing an FX rate (omitted when empty)
864
+ */
865
+ warnings?: Array<ExchangeRateWarningDto>;
866
+ };
867
+
851
868
  export type TransactionListResponseDto = {
852
869
  /**
853
870
  * List of transactions
@@ -865,6 +882,10 @@ export type TransactionListResponseDto = {
865
882
  * Number of items skipped
866
883
  */
867
884
  offset: number;
885
+ /**
886
+ * Amount summary for the full filtered set (#514). Present only when the request has a single account OR category viewpoint; omitted for search-only / plain-list / dual-perspective requests.
887
+ */
888
+ summary?: TransactionListSummaryDto;
868
889
  };
869
890
 
870
891
  export type TagSuggestionDto = {
@@ -1917,6 +1938,108 @@ export type UpdateCommodityDto = {
1917
1938
  };
1918
1939
  };
1919
1940
 
1941
+ export type CreateBeanPriceDto = {
1942
+ /**
1943
+ * Currency being priced (e.g., USD, AAPL, BTC)
1944
+ */
1945
+ currency: string;
1946
+ /**
1947
+ * Quote currency (pricing currency, e.g., CNY, EUR)
1948
+ */
1949
+ quoteCurrency: string;
1950
+ /**
1951
+ * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
1952
+ */
1953
+ amount: number;
1954
+ /**
1955
+ * Price date (ISO 8601 format)
1956
+ */
1957
+ date: string;
1958
+ /**
1959
+ * Metadata (validated by Zod schema, max field lengths enforced)
1960
+ */
1961
+ metadata?: {
1962
+ [key: string]: unknown;
1963
+ };
1964
+ };
1965
+
1966
+ export type PriceResponseDto = {
1967
+ /**
1968
+ * Unique identifier
1969
+ */
1970
+ id: string;
1971
+ /**
1972
+ * User ID (owner of the price)
1973
+ */
1974
+ userId: string;
1975
+ /**
1976
+ * Currency being priced (e.g., USD, AAPL, BTC)
1977
+ */
1978
+ currency: string;
1979
+ /**
1980
+ * Quote currency (pricing currency, e.g., USD, CNY)
1981
+ */
1982
+ quoteCurrency: string;
1983
+ /**
1984
+ * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
1985
+ */
1986
+ amount: number;
1987
+ /**
1988
+ * Price date (ISO 8601 format). Represents the date this price was valid.
1989
+ */
1990
+ date: string;
1991
+ /**
1992
+ * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
1993
+ */
1994
+ meta: {
1995
+ [key: string]: unknown;
1996
+ };
1997
+ /**
1998
+ * Creation timestamp
1999
+ */
2000
+ createdAt: string;
2001
+ /**
2002
+ * Last update timestamp
2003
+ */
2004
+ updatedAt: string;
2005
+ };
2006
+
2007
+ export type PriceListResponseDto = {
2008
+ /**
2009
+ * List of prices
2010
+ */
2011
+ items: Array<PriceResponseDto>;
2012
+ /**
2013
+ * Total number of prices
2014
+ */
2015
+ total: number;
2016
+ };
2017
+
2018
+ export type UpdateBeanPriceDto = {
2019
+ /**
2020
+ * Currency being priced
2021
+ */
2022
+ currency?: string;
2023
+ /**
2024
+ * Quote currency (pricing currency)
2025
+ */
2026
+ quoteCurrency?: string;
2027
+ /**
2028
+ * Price amount (MUST be >= 0 per Beancount spec)
2029
+ */
2030
+ amount?: number;
2031
+ /**
2032
+ * Price date (ISO 8601 format)
2033
+ */
2034
+ date?: string;
2035
+ /**
2036
+ * Metadata
2037
+ */
2038
+ metadata?: {
2039
+ [key: string]: unknown;
2040
+ };
2041
+ };
2042
+
1920
2043
  export type CreateRecurringRuleDto = {
1921
2044
  /**
1922
2045
  * Rule name (unique per user)
@@ -3029,107 +3152,351 @@ export type UpdatePropertyDto = {
3029
3152
  value: string;
3030
3153
  };
3031
3154
 
3032
- export type FileImportDto = {
3155
+ export type CreateBeanEventDto = {
3033
3156
  /**
3034
- * Bill file to import (CSV, PDF, OFX, etc.)
3157
+ * Life event date (ISO 8601)
3035
3158
  */
3036
- file: Blob | File;
3037
- };
3038
-
3039
- export type ImportErrorDto = {
3159
+ date: string;
3040
3160
  /**
3041
- * Index of failed transaction in the file
3161
+ * Life event type (e.g., "employer", "location", "marital-status") — user-defined, no enum constraint at engine layer
3042
3162
  */
3043
- index: number;
3163
+ type: string;
3044
3164
  /**
3045
- * Error message
3165
+ * Life event description. Empty string is a VALID value (distinct from absence).
3046
3166
  */
3047
- error: string;
3167
+ description: string;
3168
+ /**
3169
+ * Product-side metadata (lives in BeanEvent.meta JSON, never in engine Event fields)
3170
+ */
3171
+ meta?: {
3172
+ [key: string]: unknown;
3173
+ };
3048
3174
  };
3049
3175
 
3050
- export type ReviewItemPreviewDto = {
3176
+ export type EventResponseDto = {
3051
3177
  /**
3052
- * Index in the import batch (for tracking)
3178
+ * Unique identifier
3053
3179
  */
3054
- index: number;
3180
+ id: string;
3055
3181
  /**
3056
- * Transaction date (ISO format)
3182
+ * User ID (owner of the life event)
3057
3183
  */
3058
- date: string;
3184
+ userId: string;
3059
3185
  /**
3060
- * Transaction amount (absolute value)
3186
+ * Life event date (ISO 8601 format)
3061
3187
  */
3062
- amount?: number;
3188
+ date: string;
3063
3189
  /**
3064
- * Currency code
3190
+ * Life event type (user-defined, e.g., "employer", "location")
3065
3191
  */
3066
- currency?: string;
3192
+ type: string;
3067
3193
  /**
3068
- * Transaction narration/description
3194
+ * Life event description. May be an empty string (a valid value distinct from absence).
3069
3195
  */
3070
- narration: string;
3196
+ description: string;
3071
3197
  /**
3072
- * Payee name
3198
+ * Product-side metadata (free-form JSON)
3073
3199
  */
3074
- payee?: string;
3200
+ meta: {
3201
+ [key: string]: unknown;
3202
+ };
3075
3203
  /**
3076
- * Inferred category from rule matching
3204
+ * Creation timestamp
3077
3205
  */
3078
- category?: string;
3206
+ createdAt: string;
3079
3207
  /**
3080
- * Confidence score for the match (0-1)
3208
+ * Last update timestamp. Also emitted as the ETag response header for If-Match optimistic concurrency.
3081
3209
  */
3082
- confidence?: number;
3210
+ updatedAt: string;
3211
+ };
3212
+
3213
+ export type EventListResponseDto = {
3083
3214
  /**
3084
- * Type of branch requiring review
3215
+ * List of life events
3085
3216
  */
3086
- branchType?:
3087
- | 'DUPLICATE'
3088
- | 'PAYEE_MATCH'
3089
- | 'RULE_MATCH'
3090
- | 'ACCOUNT_VALIDATION'
3091
- | 'PIPELINE_ERROR';
3217
+ items: Array<EventResponseDto>;
3092
3218
  /**
3093
- * Human-readable reasons for requiring review
3219
+ * Total number of life events matching the query
3094
3220
  */
3095
- reasons?: Array<string>;
3221
+ total: number;
3096
3222
  };
3097
3223
 
3098
- /**
3099
- * Type of branch requiring review
3100
- */
3101
- export type branchType =
3102
- | 'DUPLICATE'
3103
- | 'PAYEE_MATCH'
3104
- | 'RULE_MATCH'
3105
- | 'ACCOUNT_VALIDATION'
3106
- | 'PIPELINE_ERROR';
3107
-
3108
- export type ImportResultDto = {
3224
+ export type UpdateBeanEventDto = {
3109
3225
  /**
3110
- * Number of successfully imported transactions
3226
+ * Life event date (ISO 8601)
3111
3227
  */
3112
- imported: number;
3228
+ date?: string;
3113
3229
  /**
3114
- * Number of failed transactions
3230
+ * Life event type (user-defined)
3115
3231
  */
3116
- failed: number;
3232
+ type?: string;
3117
3233
  /**
3118
- * Number of skipped transactions (high confidence duplicates, auto-skipped)
3234
+ * Life event description. Empty string is a VALID value (distinct from absence).
3119
3235
  */
3120
- skipped: number;
3236
+ description?: string;
3121
3237
  /**
3122
- * Number of transactions pending review (medium confidence duplicates)
3238
+ * Product-side metadata (free-form JSON)
3123
3239
  */
3124
- pendingReview: number;
3240
+ meta?: {
3241
+ [key: string]: unknown;
3242
+ };
3243
+ };
3244
+
3245
+ export type OnboardingAccountDto = {
3125
3246
  /**
3126
- * Array of error details for failed transactions
3247
+ * Account path (Assets/Liabilities only; format validated by the account service)
3127
3248
  */
3128
- errors: Array<ImportErrorDto>;
3249
+ path: string;
3129
3250
  /**
3130
- * Array of transactions pending review with preview data. Contains essential information for displaying in the import preview UI.
3251
+ * ISO 4217 currency code (3 letters)
3131
3252
  */
3132
- reviewItems?: Array<ReviewItemPreviewDto>;
3253
+ currency: string;
3254
+ /**
3255
+ * Opening balance as a non-negative Decimal string (e.g. "1000.00")
3256
+ */
3257
+ openingBalance?: string;
3258
+ /**
3259
+ * Platform ID to bind the account to (references Platform.id); omit for unbound
3260
+ */
3261
+ platformId?: string;
3262
+ };
3263
+
3264
+ export type OnboardingDto = {
3265
+ /**
3266
+ * Asset/Liability accounts to register with opening balances
3267
+ */
3268
+ accounts?: Array<OnboardingAccountDto>;
3269
+ /**
3270
+ * Skip asset registration; only bootstrap the core account set
3271
+ */
3272
+ skipAssetRegistration?: boolean;
3273
+ };
3274
+
3275
+ export type ActualBalanceDto = {
3276
+ /**
3277
+ * Actual balance amount as a decimal string (preserves precision for tolerance inference).
3278
+ */
3279
+ amount: string;
3280
+ /**
3281
+ * Currency code (ISO 4217 or commodity ticker).
3282
+ */
3283
+ ccy: string;
3284
+ };
3285
+
3286
+ export type ComputeReconciliationDto = {
3287
+ /**
3288
+ * BeanAccount id to reconcile.
3289
+ */
3290
+ accountId: string;
3291
+ /**
3292
+ * Assertion date (ISO 8601, e.g. "2026-07-24").
3293
+ */
3294
+ asOfDate: string;
3295
+ /**
3296
+ * Actual balance from the external statement.
3297
+ */
3298
+ actualBalance: ActualBalanceDto;
3299
+ };
3300
+
3301
+ export type ReconciliationComputeResultDto = {
3302
+ accountId: string;
3303
+ asOfDate: string;
3304
+ /**
3305
+ * System-computed book balance (decimal string).
3306
+ */
3307
+ bookBalance: string;
3308
+ /**
3309
+ * User-entered actual balance (decimal string).
3310
+ */
3311
+ actualBalance: string;
3312
+ currency: string;
3313
+ /**
3314
+ * Diff = book − actual (decimal string).
3315
+ */
3316
+ diff: string;
3317
+ /**
3318
+ * Applied tolerance (decimal string).
3319
+ */
3320
+ tolerance: string;
3321
+ /**
3322
+ * true when |diff| ≤ tolerance.
3323
+ */
3324
+ withinTolerance: boolean;
3325
+ /**
3326
+ * Suggested next action: assert when within tolerance, pad otherwise.
3327
+ */
3328
+ suggestedAction: 'assert' | 'pad';
3329
+ };
3330
+
3331
+ /**
3332
+ * Suggested next action: assert when within tolerance, pad otherwise.
3333
+ */
3334
+ export type suggestedAction = 'assert' | 'pad';
3335
+
3336
+ export type AssertReconciliationDto = {
3337
+ /**
3338
+ * BeanAccount id to reconcile.
3339
+ */
3340
+ accountId: string;
3341
+ /**
3342
+ * Assertion date (ISO 8601, e.g. "2026-07-24").
3343
+ */
3344
+ asOfDate: string;
3345
+ /**
3346
+ * Actual balance from the external statement.
3347
+ */
3348
+ actualBalance: ActualBalanceDto;
3349
+ /**
3350
+ * Optional explicit tolerance override. Omit to infer from amount precision (Beancount default).
3351
+ */
3352
+ tolerance?: string;
3353
+ };
3354
+
3355
+ export type ReconciliationRecordDto = {
3356
+ id: string;
3357
+ accountId: string;
3358
+ date: string;
3359
+ /**
3360
+ * Asserted (actual) amount.
3361
+ */
3362
+ amount: string;
3363
+ currency: string;
3364
+ tolerance?: string;
3365
+ /**
3366
+ * book − actual.
3367
+ */
3368
+ diffAmount?: string;
3369
+ diffCurrency?: string;
3370
+ createdAt: string;
3371
+ };
3372
+
3373
+ export type PadReconciliationDto = {
3374
+ /**
3375
+ * BeanAccount id to reconcile.
3376
+ */
3377
+ accountId: string;
3378
+ /**
3379
+ * Assertion date (ISO 8601, e.g. "2026-07-24").
3380
+ */
3381
+ asOfDate: string;
3382
+ /**
3383
+ * Actual balance from the external statement.
3384
+ */
3385
+ actualBalance: ActualBalanceDto;
3386
+ /**
3387
+ * Pad source account. Defaults to Equity:Opening-Balances (official Beancount convention).
3388
+ */
3389
+ sourceAccount?: string;
3390
+ };
3391
+
3392
+ export type PadResultDto = {
3393
+ /**
3394
+ * Created pad adjusting transaction id.
3395
+ */
3396
+ transactionId: string;
3397
+ };
3398
+
3399
+ export type FileImportDto = {
3400
+ /**
3401
+ * Bill file to import (CSV, PDF, OFX, etc.)
3402
+ */
3403
+ file: Blob | File;
3404
+ };
3405
+
3406
+ export type ImportErrorDto = {
3407
+ /**
3408
+ * Index of failed transaction in the file
3409
+ */
3410
+ index: number;
3411
+ /**
3412
+ * Error message
3413
+ */
3414
+ error: string;
3415
+ };
3416
+
3417
+ export type ReviewItemPreviewDto = {
3418
+ /**
3419
+ * Index in the import batch (for tracking)
3420
+ */
3421
+ index: number;
3422
+ /**
3423
+ * Transaction date (ISO format)
3424
+ */
3425
+ date: string;
3426
+ /**
3427
+ * Transaction amount (absolute value)
3428
+ */
3429
+ amount?: number;
3430
+ /**
3431
+ * Currency code
3432
+ */
3433
+ currency?: string;
3434
+ /**
3435
+ * Transaction narration/description
3436
+ */
3437
+ narration: string;
3438
+ /**
3439
+ * Payee name
3440
+ */
3441
+ payee?: string;
3442
+ /**
3443
+ * Inferred category from rule matching
3444
+ */
3445
+ category?: string;
3446
+ /**
3447
+ * Confidence score for the match (0-1)
3448
+ */
3449
+ confidence?: number;
3450
+ /**
3451
+ * Type of branch requiring review
3452
+ */
3453
+ branchType?:
3454
+ | 'DUPLICATE'
3455
+ | 'PAYEE_MATCH'
3456
+ | 'RULE_MATCH'
3457
+ | 'ACCOUNT_VALIDATION'
3458
+ | 'PIPELINE_ERROR';
3459
+ /**
3460
+ * Human-readable reasons for requiring review
3461
+ */
3462
+ reasons?: Array<string>;
3463
+ };
3464
+
3465
+ /**
3466
+ * Type of branch requiring review
3467
+ */
3468
+ export type branchType =
3469
+ | 'DUPLICATE'
3470
+ | 'PAYEE_MATCH'
3471
+ | 'RULE_MATCH'
3472
+ | 'ACCOUNT_VALIDATION'
3473
+ | 'PIPELINE_ERROR';
3474
+
3475
+ export type ImportResultDto = {
3476
+ /**
3477
+ * Number of successfully imported transactions
3478
+ */
3479
+ imported: number;
3480
+ /**
3481
+ * Number of failed transactions
3482
+ */
3483
+ failed: number;
3484
+ /**
3485
+ * Number of skipped transactions (high confidence duplicates, auto-skipped)
3486
+ */
3487
+ skipped: number;
3488
+ /**
3489
+ * Number of transactions pending review (medium confidence duplicates)
3490
+ */
3491
+ pendingReview: number;
3492
+ /**
3493
+ * Array of error details for failed transactions
3494
+ */
3495
+ errors: Array<ImportErrorDto>;
3496
+ /**
3497
+ * Array of transactions pending review with preview data. Contains essential information for displaying in the import preview UI.
3498
+ */
3499
+ reviewItems?: Array<ReviewItemPreviewDto>;
3133
3500
  /**
3134
3501
  * Array of imported transactions (optional, for debugging)
3135
3502
  */
@@ -3304,115 +3671,27 @@ export type UpdateMapperDefaultsDto = {
3304
3671
  /**
3305
3672
  * Default income account (optional)
3306
3673
  */
3307
- incomeAccount?: string;
3308
- /**
3309
- * Payment method to source account mapping. Maps payment method keywords to Beancount account paths. Used by Alipay/WeChat importers to determine sourceAccount based on payment method (e.g., HuaBei, CreditCard).
3310
- */
3311
- methodAccountMapping?: {
3312
- [key: string]: unknown;
3313
- };
3314
- };
3315
-
3316
- export type UpdateConfigDataDto = {
3317
- /**
3318
- * Mapper defaults configuration
3319
- */
3320
- defaults?: UpdateMapperDefaultsDto;
3321
- };
3322
-
3323
- export type UpdateImporterConfigDto = {
3324
- /**
3325
- * Configuration data (v1 schema)
3326
- */
3327
- data?: UpdateConfigDataDto;
3328
- };
3329
-
3330
- export type CreatePlatformDto = {
3331
- /**
3332
- * Platform name
3333
- */
3334
- name: string;
3335
- /**
3336
- * Platform canonical identifier (lowercase, kebab-case)
3337
- */
3338
- canonical: string;
3339
- /**
3340
- * Platform aliases (multi-language names for lookup)
3341
- */
3342
- aliases: Array<string>;
3343
- /**
3344
- * Platform URL
3345
- */
3346
- url: string;
3347
- /**
3348
- * Platform type
3349
- */
3350
- type:
3351
- | 'BANK'
3352
- | 'BROKERAGE'
3353
- | 'CRYPTO_EXCHANGE'
3354
- | 'PAYMENT'
3355
- | 'INVESTMENT'
3356
- | 'INSURANCE'
3357
- | 'OTHER';
3358
- /**
3359
- * Platform logo URL
3360
- */
3361
- logoUrl?: string;
3362
- /**
3363
- * Whether the platform is active
3364
- */
3365
- isActive?: boolean;
3366
- };
3367
-
3368
- /**
3369
- * Platform type
3370
- */
3371
- export type type3 =
3372
- | 'BANK'
3373
- | 'BROKERAGE'
3374
- | 'CRYPTO_EXCHANGE'
3375
- | 'PAYMENT'
3376
- | 'INVESTMENT'
3377
- | 'INSURANCE'
3378
- | 'OTHER';
3379
-
3380
- export type UpdatePlatformDto = {
3381
- /**
3382
- * Platform name
3383
- */
3384
- name?: string;
3385
- /**
3386
- * Platform canonical identifier (lowercase, kebab-case)
3387
- */
3388
- canonical?: string;
3389
- /**
3390
- * Platform aliases (multi-language names for lookup)
3391
- */
3392
- aliases?: Array<string>;
3393
- /**
3394
- * Platform URL
3395
- */
3396
- url?: string;
3397
- /**
3398
- * Platform type
3399
- */
3400
- type?:
3401
- | 'BANK'
3402
- | 'BROKERAGE'
3403
- | 'CRYPTO_EXCHANGE'
3404
- | 'PAYMENT'
3405
- | 'INVESTMENT'
3406
- | 'INSURANCE'
3407
- | 'OTHER';
3674
+ incomeAccount?: string;
3408
3675
  /**
3409
- * Platform logo URL
3676
+ * Payment method to source account mapping. Maps payment method keywords to Beancount account paths. Used by Alipay/WeChat importers to determine sourceAccount based on payment method (e.g., HuaBei, CreditCard).
3410
3677
  */
3411
- logoUrl?: string;
3678
+ methodAccountMapping?: {
3679
+ [key: string]: unknown;
3680
+ };
3681
+ };
3682
+
3683
+ export type UpdateConfigDataDto = {
3412
3684
  /**
3413
- * Whether the platform is active
3685
+ * Mapper defaults configuration
3414
3686
  */
3415
- isActive?: boolean;
3687
+ defaults?: UpdateMapperDefaultsDto;
3688
+ };
3689
+
3690
+ export type UpdateImporterConfigDto = {
3691
+ /**
3692
+ * Configuration data (v1 schema)
3693
+ */
3694
+ data?: UpdateConfigDataDto;
3416
3695
  };
3417
3696
 
3418
3697
  export type ProviderSyncConfigDto = {
@@ -3436,6 +3715,10 @@ export type ProviderSyncConfigDto = {
3436
3715
  * Filter pending transactions
3437
3716
  */
3438
3717
  filterPending?: boolean;
3718
+ /**
3719
+ * External account ID for per-batch providers (e.g. GoCardless). Overrides sourceAccount when an ExternalAccountLink mapping exists.
3720
+ */
3721
+ externalAccountId?: string;
3439
3722
  };
3440
3723
 
3441
3724
  export type ProviderSyncDto = {
@@ -3491,6 +3774,61 @@ export type SupportedProvidersResponseDto = {
3491
3774
  providers: Array<string>;
3492
3775
  };
3493
3776
 
3777
+ export type CreateExternalAccountLinkDto = {
3778
+ /**
3779
+ * Open Banking provider (whitelist)
3780
+ */
3781
+ provider:
3782
+ | 'plaid'
3783
+ | 'teller'
3784
+ | 'truelayer'
3785
+ | 'gocardless'
3786
+ | 'simplefin'
3787
+ | 'yodlee'
3788
+ | 'beancount-direct'
3789
+ | 'parsed-bill';
3790
+ /**
3791
+ * External account ID from the provider
3792
+ */
3793
+ externalAccountId: string;
3794
+ /**
3795
+ * Target BeanAccount ID (must belong to the JWT user)
3796
+ */
3797
+ beanAccountId: string;
3798
+ };
3799
+
3800
+ /**
3801
+ * Open Banking provider (whitelist)
3802
+ */
3803
+ export type provider =
3804
+ | 'plaid'
3805
+ | 'teller'
3806
+ | 'truelayer'
3807
+ | 'gocardless'
3808
+ | 'simplefin'
3809
+ | 'yodlee'
3810
+ | 'beancount-direct'
3811
+ | 'parsed-bill';
3812
+
3813
+ export type ExternalAccountLinkResponseDto = {
3814
+ id: string;
3815
+ provider: string;
3816
+ externalAccountId: string;
3817
+ beanAccountId: string;
3818
+ isActive: boolean;
3819
+ createdAt: string;
3820
+ updatedAt: string;
3821
+ };
3822
+
3823
+ export type ExternalAccountLinkListResponseDto = {
3824
+ items: Array<ExternalAccountLinkResponseDto>;
3825
+ total: number;
3826
+ /**
3827
+ * Filter by provider (query param)
3828
+ */
3829
+ provider?: string;
3830
+ };
3831
+
3494
3832
  export type ParserTelemetryReportDto = unknown;
3495
3833
 
3496
3834
  export type UncoveredFormatMissDto = unknown;
@@ -4070,15 +4408,92 @@ export type liabilitySubType = 'borrow' | 'repay';
4070
4408
  */
4071
4409
  export type equitySubType = 'opening' | 'adjustment';
4072
4410
 
4073
- export type BalanceByCurrencyDto = {
4411
+ export type CreatePlatformDto = {
4074
4412
  /**
4075
- * ISO 4217 currency code
4413
+ * Platform name
4076
4414
  */
4077
- currency: string;
4415
+ name: string;
4078
4416
  /**
4079
- * Balance amount
4417
+ * Platform canonical identifier (lowercase, kebab-case)
4080
4418
  */
4081
- balance: string;
4419
+ canonical: string;
4420
+ /**
4421
+ * Platform aliases (multi-language names for lookup)
4422
+ */
4423
+ aliases: Array<string>;
4424
+ /**
4425
+ * Platform URL
4426
+ */
4427
+ url: string;
4428
+ /**
4429
+ * Platform type
4430
+ */
4431
+ type:
4432
+ | 'BANK'
4433
+ | 'BROKERAGE'
4434
+ | 'CRYPTO_EXCHANGE'
4435
+ | 'PAYMENT'
4436
+ | 'INVESTMENT'
4437
+ | 'INSURANCE'
4438
+ | 'OTHER';
4439
+ /**
4440
+ * Platform logo URL
4441
+ */
4442
+ logoUrl?: string;
4443
+ /**
4444
+ * Whether the platform is active
4445
+ */
4446
+ isActive?: boolean;
4447
+ };
4448
+
4449
+ /**
4450
+ * Platform type
4451
+ */
4452
+ export type type3 =
4453
+ | 'BANK'
4454
+ | 'BROKERAGE'
4455
+ | 'CRYPTO_EXCHANGE'
4456
+ | 'PAYMENT'
4457
+ | 'INVESTMENT'
4458
+ | 'INSURANCE'
4459
+ | 'OTHER';
4460
+
4461
+ export type UpdatePlatformDto = {
4462
+ /**
4463
+ * Platform name
4464
+ */
4465
+ name?: string;
4466
+ /**
4467
+ * Platform canonical identifier (lowercase, kebab-case)
4468
+ */
4469
+ canonical?: string;
4470
+ /**
4471
+ * Platform aliases (multi-language names for lookup)
4472
+ */
4473
+ aliases?: Array<string>;
4474
+ /**
4475
+ * Platform URL
4476
+ */
4477
+ url?: string;
4478
+ /**
4479
+ * Platform type
4480
+ */
4481
+ type?:
4482
+ | 'BANK'
4483
+ | 'BROKERAGE'
4484
+ | 'CRYPTO_EXCHANGE'
4485
+ | 'PAYMENT'
4486
+ | 'INVESTMENT'
4487
+ | 'INSURANCE'
4488
+ | 'OTHER';
4489
+ /**
4490
+ * Platform logo URL
4491
+ */
4492
+ logoUrl?: string;
4493
+ /**
4494
+ * Whether the platform is active
4495
+ */
4496
+ isActive?: boolean;
4082
4497
  };
4083
4498
 
4084
4499
  export type NetWorthByCurrencyDto = {
@@ -4121,21 +4536,6 @@ export type ConvertedNetWorthDto = {
4121
4536
  };
4122
4537
  };
4123
4538
 
4124
- export type ExchangeRateWarningDto = {
4125
- /**
4126
- * Warning type
4127
- */
4128
- type: string;
4129
- /**
4130
- * Currency without exchange rate
4131
- */
4132
- currency: string;
4133
- /**
4134
- * Total amount affected
4135
- */
4136
- totalAmount: string;
4137
- };
4138
-
4139
4539
  export type NetWorthResponseDto = {
4140
4540
  /**
4141
4541
  * Total net worth (assets - liabilities, converted to base currency)
@@ -4200,6 +4600,10 @@ export type AccountItemDto = {
4200
4600
  * Currency code
4201
4601
  */
4202
4602
  currency: string;
4603
+ /**
4604
+ * FX-converted balance in base currency; omitted when not convertible
4605
+ */
4606
+ convertedBalance?: string;
4203
4607
  };
4204
4608
 
4205
4609
  export type PlatformGroupDto = {
@@ -4216,9 +4620,40 @@ export type PlatformGroupDto = {
4216
4620
  */
4217
4621
  accounts: Array<AccountItemDto>;
4218
4622
  /**
4219
- * Total balance across all accounts in platform
4623
+ * FX-converted total balance in base currency
4220
4624
  */
4221
4625
  totalBalance: string;
4626
+ /**
4627
+ * Raw (unconverted) balances grouped by currency
4628
+ */
4629
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
4630
+ /**
4631
+ * Converted balance in base currency (omitted when no currency is convertible)
4632
+ */
4633
+ convertedBalance?: string;
4634
+ /**
4635
+ * Share of the grand converted total (0-100); 0 when grand total is 0
4636
+ */
4637
+ sharePct: number;
4638
+ };
4639
+
4640
+ export type AccountExchangeRateWarningDto = {
4641
+ /**
4642
+ * Warning type
4643
+ */
4644
+ type: string;
4645
+ /**
4646
+ * Currency without exchange rate
4647
+ */
4648
+ currency: string;
4649
+ /**
4650
+ * Affected account paths
4651
+ */
4652
+ accounts: Array<string>;
4653
+ /**
4654
+ * Total amount in this currency
4655
+ */
4656
+ totalAmount: string;
4222
4657
  };
4223
4658
 
4224
4659
  export type AccountsSummaryDto = {
@@ -4230,6 +4665,14 @@ export type AccountsSummaryDto = {
4230
4665
  * Total number of platforms
4231
4666
  */
4232
4667
  totalPlatforms: number;
4668
+ /**
4669
+ * Base currency for conversion
4670
+ */
4671
+ baseCurrency: string;
4672
+ /**
4673
+ * Per-account exchange rate warnings
4674
+ */
4675
+ warnings?: Array<AccountExchangeRateWarningDto>;
4233
4676
  };
4234
4677
 
4235
4678
  export type AccountsResponseDto = {
@@ -4264,6 +4707,10 @@ export type AccountItemWithAssetClassDto = {
4264
4707
  * Currency code
4265
4708
  */
4266
4709
  currency: string;
4710
+ /**
4711
+ * FX-converted balance in base currency; omitted when not convertible
4712
+ */
4713
+ convertedBalance?: string;
4267
4714
  /**
4268
4715
  * Asset class
4269
4716
  */
@@ -4345,25 +4792,6 @@ export type assetClass =
4345
4792
  | 'REAL_ESTATE'
4346
4793
  | 'INDEX';
4347
4794
 
4348
- export type AccountExchangeRateWarningDto = {
4349
- /**
4350
- * Warning type
4351
- */
4352
- type: string;
4353
- /**
4354
- * Currency without exchange rate
4355
- */
4356
- currency: string;
4357
- /**
4358
- * Affected account paths
4359
- */
4360
- accounts: Array<string>;
4361
- /**
4362
- * Total amount in this currency
4363
- */
4364
- totalAmount: string;
4365
- };
4366
-
4367
4795
  export type AssetClassSummaryDto = {
4368
4796
  /**
4369
4797
  * Total number of accounts
@@ -4508,23 +4936,80 @@ export type CashFlowResponseDto = {
4508
4936
  */
4509
4937
  netSavings: string;
4510
4938
  /**
4511
- * Savings rate percentage (netSavings / income * 100)
4939
+ * Savings rate percentage (netSavings / income * 100)
4940
+ */
4941
+ savingsRate: string;
4942
+ /**
4943
+ * Base currency code
4944
+ */
4945
+ currency: string;
4946
+ /**
4947
+ * Cash flow grouped by original currency
4948
+ */
4949
+ byCurrency?: CashFlowByCurrencyDto;
4950
+ /**
4951
+ * Converted values in base currency
4952
+ */
4953
+ converted?: ConvertedCashFlowDto;
4954
+ /**
4955
+ * Exchange rate warnings
4956
+ */
4957
+ warnings?: Array<ExchangeRateWarningDto>;
4958
+ };
4959
+
4960
+ export type CategoryGroupDto = {
4961
+ /**
4962
+ * Functional category (account-path Group segment); regional and universal account paths merge under it
4963
+ */
4964
+ category: string;
4965
+ /**
4966
+ * Converted total for this category in base currency (expense amount when flow=expense, income amount when flow=income)
4967
+ */
4968
+ totalExpense: string;
4969
+ /**
4970
+ * Share of grand total (0-100); 0 when grand total is 0
4971
+ */
4972
+ sharePct: number;
4973
+ /**
4974
+ * Raw (unconverted) expense per currency
4975
+ */
4976
+ balanceByCurrency: Array<BalanceByCurrencyDto>;
4977
+ /**
4978
+ * Converted total in base currency (omitted when FX missing for all currencies in this category)
4979
+ */
4980
+ convertedBalance?: string;
4981
+ };
4982
+
4983
+ export type ExpensesByCategorySummaryDto = {
4984
+ /**
4985
+ * Total across all categories, converted (convertible categories only); expense totals when flow=expense, income totals when flow=income
4986
+ */
4987
+ totalExpense: string;
4988
+ /**
4989
+ * Number of categories
4990
+ */
4991
+ categoryCount: number;
4992
+ };
4993
+
4994
+ export type ExpensesByCategoryResponseDto = {
4995
+ /**
4996
+ * Period requested
4512
4997
  */
4513
- savingsRate: string;
4998
+ period: string;
4514
4999
  /**
4515
- * Base currency code
5000
+ * Base currency for converted values
4516
5001
  */
4517
- currency: string;
5002
+ baseCurrency: string;
4518
5003
  /**
4519
- * Cash flow grouped by original currency
5004
+ * Expense groups by functional category, sorted by converted total desc
4520
5005
  */
4521
- byCurrency?: CashFlowByCurrencyDto;
5006
+ groups: Array<CategoryGroupDto>;
4522
5007
  /**
4523
- * Converted values in base currency
5008
+ * Summary statistics
4524
5009
  */
4525
- converted?: ConvertedCashFlowDto;
5010
+ summary: ExpensesByCategorySummaryDto;
4526
5011
  /**
4527
- * Exchange rate warnings
5012
+ * Exchange rate warnings (e.g. missing rate for a currency)
4528
5013
  */
4529
5014
  warnings?: Array<ExchangeRateWarningDto>;
4530
5015
  };
@@ -4724,108 +5209,6 @@ export type HoldingPnlResponseDto = {
4724
5209
  */
4725
5210
  export type method = 'average' | 'FIFO';
4726
5211
 
4727
- export type CreateBeanPriceDto = {
4728
- /**
4729
- * Currency being priced (e.g., USD, AAPL, BTC)
4730
- */
4731
- currency: string;
4732
- /**
4733
- * Quote currency (pricing currency, e.g., CNY, EUR)
4734
- */
4735
- quoteCurrency: string;
4736
- /**
4737
- * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
4738
- */
4739
- amount: number;
4740
- /**
4741
- * Price date (ISO 8601 format)
4742
- */
4743
- date: string;
4744
- /**
4745
- * Metadata (validated by Zod schema, max field lengths enforced)
4746
- */
4747
- metadata?: {
4748
- [key: string]: unknown;
4749
- };
4750
- };
4751
-
4752
- export type PriceResponseDto = {
4753
- /**
4754
- * Unique identifier
4755
- */
4756
- id: string;
4757
- /**
4758
- * User ID (owner of the price)
4759
- */
4760
- userId: string;
4761
- /**
4762
- * Currency being priced (e.g., USD, AAPL, BTC)
4763
- */
4764
- currency: string;
4765
- /**
4766
- * Quote currency (pricing currency, e.g., USD, CNY)
4767
- */
4768
- quoteCurrency: string;
4769
- /**
4770
- * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
4771
- */
4772
- amount: number;
4773
- /**
4774
- * Price date (ISO 8601 format). Represents the date this price was valid.
4775
- */
4776
- date: string;
4777
- /**
4778
- * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
4779
- */
4780
- meta: {
4781
- [key: string]: unknown;
4782
- };
4783
- /**
4784
- * Creation timestamp
4785
- */
4786
- createdAt: string;
4787
- /**
4788
- * Last update timestamp
4789
- */
4790
- updatedAt: string;
4791
- };
4792
-
4793
- export type PriceListResponseDto = {
4794
- /**
4795
- * List of prices
4796
- */
4797
- items: Array<PriceResponseDto>;
4798
- /**
4799
- * Total number of prices
4800
- */
4801
- total: number;
4802
- };
4803
-
4804
- export type UpdateBeanPriceDto = {
4805
- /**
4806
- * Currency being priced
4807
- */
4808
- currency?: string;
4809
- /**
4810
- * Quote currency (pricing currency)
4811
- */
4812
- quoteCurrency?: string;
4813
- /**
4814
- * Price amount (MUST be >= 0 per Beancount spec)
4815
- */
4816
- amount?: number;
4817
- /**
4818
- * Price date (ISO 8601 format)
4819
- */
4820
- date?: string;
4821
- /**
4822
- * Metadata
4823
- */
4824
- metadata?: {
4825
- [key: string]: unknown;
4826
- };
4827
- };
4828
-
4829
5212
  export type CurrencyBalanceDto = {
4830
5213
  /**
4831
5214
  * ISO 4217 currency code
@@ -4852,6 +5235,14 @@ export type TimeSeriesPointDto = {
4852
5235
  change?: {
4853
5236
  [key: string]: unknown;
4854
5237
  };
5238
+ /**
5239
+ * Total assets at this date (in base currency)
5240
+ */
5241
+ assets?: string;
5242
+ /**
5243
+ * Total liabilities at this date (in base currency)
5244
+ */
5245
+ liabilities?: string;
4855
5246
  /**
4856
5247
  * Multi-currency breakdown for this point
4857
5248
  */
@@ -4919,6 +5310,71 @@ export type PortfolioTrendsResponseDto = {
4919
5310
  warnings?: Array<ExchangeRateWarningDto>;
4920
5311
  };
4921
5312
 
5313
+ export type CashFlowPointDto = {
5314
+ /**
5315
+ * Month key (YYYY-MM)
5316
+ */
5317
+ month: string;
5318
+ /**
5319
+ * Income in base currency (absolute, converted)
5320
+ */
5321
+ income: string;
5322
+ /**
5323
+ * Expense in base currency (absolute, converted)
5324
+ */
5325
+ expense: string;
5326
+ /**
5327
+ * netSavings = income − expense (savings positive)
5328
+ */
5329
+ netSavings: string;
5330
+ };
5331
+
5332
+ export type CashFlowTrendSummaryDto = {
5333
+ /**
5334
+ * Total income across the period
5335
+ */
5336
+ totalIncome: string;
5337
+ /**
5338
+ * Total expense across the period
5339
+ */
5340
+ totalExpense: string;
5341
+ /**
5342
+ * income − expense across the period
5343
+ */
5344
+ totalNetSavings: string;
5345
+ /**
5346
+ * totalNetSavings divided by the window length (N months, incl. zero-filled)
5347
+ */
5348
+ averageMonthlyNetSavings: string;
5349
+ };
5350
+
5351
+ export type CashFlowTrendsResponseDto = {
5352
+ /**
5353
+ * Monthly cash-flow series (fixed N-month window, zero-filled)
5354
+ */
5355
+ series: Array<CashFlowPointDto>;
5356
+ /**
5357
+ * Period totals
5358
+ */
5359
+ summary: CashFlowTrendSummaryDto;
5360
+ /**
5361
+ * Period requested
5362
+ */
5363
+ period: string;
5364
+ /**
5365
+ * Data granularity (v1 returns month buckets)
5366
+ */
5367
+ granularity: string;
5368
+ /**
5369
+ * Base currency for converted values
5370
+ */
5371
+ currency: string;
5372
+ /**
5373
+ * Exchange rate warnings (e.g. missing rate for a currency)
5374
+ */
5375
+ warnings?: Array<ExchangeRateWarningDto>;
5376
+ };
5377
+
4922
5378
  export type GenerateSnapshotBody = unknown;
4923
5379
 
4924
5380
  export type GenerateSnapshotResponse = unknown;
@@ -4962,7 +5418,7 @@ export type AccountControllerFindAllData = {
4962
5418
  */
4963
5419
  region: 'cn' | 'us' | 'de' | 'gb';
4964
5420
  /**
4965
- * Search term for path or i18nKey
5421
+ * Search term for account path
4966
5422
  */
4967
5423
  search?: string;
4968
5424
  /**
@@ -5105,6 +5561,10 @@ export type TransactionControllerListData = {
5105
5561
  * Filter by account ID (transactions with postings to this account)
5106
5562
  */
5107
5563
  accountId?: string;
5564
+ /**
5565
+ * Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
5566
+ */
5567
+ category?: string;
5108
5568
  /**
5109
5569
  * Filter by start date (inclusive), format: YYYY-MM-DD
5110
5570
  */
@@ -5229,7 +5689,7 @@ export type TransactionControllerDeleteResponse = void;
5229
5689
 
5230
5690
  export type BalanceControllerGetBalanceData = {
5231
5691
  /**
5232
- * Account name (e.g., "Assets:Bank:Checking")
5692
+ * Account name (e.g., "Assets:Checking")
5233
5693
  */
5234
5694
  account: string;
5235
5695
  /**
@@ -5539,97 +5999,194 @@ export type PayeeProfileAdminControllerUnverifyData = {
5539
5999
  id: string;
5540
6000
  };
5541
6001
 
5542
- export type PayeeProfileAdminControllerUnverifyResponse =
5543
- PayeeProfileResponseDto;
6002
+ export type PayeeProfileAdminControllerUnverifyResponse =
6003
+ PayeeProfileResponseDto;
6004
+
6005
+ export type CommodityControllerCreateData = {
6006
+ /**
6007
+ * Region code for tenant context
6008
+ */
6009
+ region: 'cn' | 'us' | 'de' | 'gb';
6010
+ requestBody: CreateCommodityDto;
6011
+ };
6012
+
6013
+ export type CommodityControllerCreateResponse = CommodityResponseDto;
6014
+
6015
+ export type CommodityControllerFindAllData = {
6016
+ /**
6017
+ * Region code for tenant context
6018
+ */
6019
+ region: 'cn' | 'us' | 'de' | 'gb';
6020
+ /**
6021
+ * Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
6022
+ */
6023
+ search?: string;
6024
+ /**
6025
+ * Filter by exact symbol match
6026
+ */
6027
+ symbol?: string;
6028
+ };
6029
+
6030
+ export type CommodityControllerFindAllResponse = CommodityListResponseDto;
6031
+
6032
+ export type CommodityControllerFindOneData = {
6033
+ /**
6034
+ * Region code for tenant context
6035
+ */
6036
+ region: 'cn' | 'us' | 'de' | 'gb';
6037
+ /**
6038
+ * Commodity symbol
6039
+ */
6040
+ symbol: string;
6041
+ };
6042
+
6043
+ export type CommodityControllerFindOneResponse = CommodityResponseDto;
6044
+
6045
+ export type CommodityControllerUpdateData = {
6046
+ /**
6047
+ * Region code for tenant context
6048
+ */
6049
+ region: 'cn' | 'us' | 'de' | 'gb';
6050
+ requestBody: UpdateCommodityDto;
6051
+ /**
6052
+ * Commodity symbol
6053
+ */
6054
+ symbol: string;
6055
+ };
6056
+
6057
+ export type CommodityControllerUpdateResponse = CommodityResponseDto;
6058
+
6059
+ export type CommodityControllerDeleteData = {
6060
+ /**
6061
+ * Region code for tenant context
6062
+ */
6063
+ region: 'cn' | 'us' | 'de' | 'gb';
6064
+ /**
6065
+ * Commodity symbol
6066
+ */
6067
+ symbol: string;
6068
+ };
6069
+
6070
+ export type CommodityControllerDeleteResponse = void;
6071
+
6072
+ export type CommodityControllerGetOrCreateData = {
6073
+ /**
6074
+ * Region code for tenant context
6075
+ */
6076
+ region: 'cn' | 'us' | 'de' | 'gb';
6077
+ /**
6078
+ * Commodity symbol
6079
+ */
6080
+ symbol: string;
6081
+ };
6082
+
6083
+ export type CommodityControllerGetOrCreateResponse = CommodityResponseDto;
6084
+
6085
+ export type CommodityControllerBulkCreateData = {
6086
+ /**
6087
+ * Region code for tenant context
6088
+ */
6089
+ region: 'cn' | 'us' | 'de' | 'gb';
6090
+ };
6091
+
6092
+ export type CommodityControllerBulkCreateResponse = Array<CommodityResponseDto>;
5544
6093
 
5545
- export type CommodityControllerCreateData = {
6094
+ export type PriceControllerCreateData = {
5546
6095
  /**
5547
6096
  * Region code for tenant context
5548
6097
  */
5549
6098
  region: 'cn' | 'us' | 'de' | 'gb';
5550
- requestBody: CreateCommodityDto;
6099
+ requestBody: CreateBeanPriceDto;
5551
6100
  };
5552
6101
 
5553
- export type CommodityControllerCreateResponse = CommodityResponseDto;
6102
+ export type PriceControllerCreateResponse = PriceResponseDto;
5554
6103
 
5555
- export type CommodityControllerFindAllData = {
6104
+ export type PriceControllerFindAllData = {
5556
6105
  /**
5557
- * Region code for tenant context
6106
+ * Filter by currency (e.g., BTC, AAPL, USD)
5558
6107
  */
5559
- region: 'cn' | 'us' | 'de' | 'gb';
6108
+ currency?: string;
5560
6109
  /**
5561
- * Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
6110
+ * Filter prices from this date (ISO 8601 format)
5562
6111
  */
5563
- search?: string;
6112
+ dateFrom?: string;
5564
6113
  /**
5565
- * Filter by exact symbol match
6114
+ * Filter prices to this date (ISO 8601 format)
5566
6115
  */
5567
- symbol?: string;
5568
- };
5569
-
5570
- export type CommodityControllerFindAllResponse = CommodityListResponseDto;
5571
-
5572
- export type CommodityControllerFindOneData = {
6116
+ dateTo?: string;
6117
+ /**
6118
+ * Number of items per page (default: 20, max: 100)
6119
+ */
6120
+ limit?: number;
6121
+ /**
6122
+ * Page number for pagination (default: 1)
6123
+ */
6124
+ page?: number;
6125
+ /**
6126
+ * Filter by quote currency (pricing currency, e.g., USD, CNY)
6127
+ */
6128
+ quoteCurrency?: string;
5573
6129
  /**
5574
6130
  * Region code for tenant context
5575
6131
  */
5576
6132
  region: 'cn' | 'us' | 'de' | 'gb';
5577
6133
  /**
5578
- * Commodity symbol
6134
+ * Search term for currency or quoteCurrency (case-insensitive partial match)
5579
6135
  */
5580
- symbol: string;
6136
+ search?: string;
5581
6137
  };
5582
6138
 
5583
- export type CommodityControllerFindOneResponse = CommodityResponseDto;
6139
+ export type PriceControllerFindAllResponse = PriceListResponseDto;
5584
6140
 
5585
- export type CommodityControllerUpdateData = {
6141
+ export type PriceControllerFindOneData = {
5586
6142
  /**
5587
- * Region code for tenant context
6143
+ * Price ID
5588
6144
  */
5589
- region: 'cn' | 'us' | 'de' | 'gb';
5590
- requestBody: UpdateCommodityDto;
6145
+ id: string;
5591
6146
  /**
5592
- * Commodity symbol
6147
+ * Region code for tenant context
5593
6148
  */
5594
- symbol: string;
6149
+ region: 'cn' | 'us' | 'de' | 'gb';
5595
6150
  };
5596
6151
 
5597
- export type CommodityControllerUpdateResponse = CommodityResponseDto;
6152
+ export type PriceControllerFindOneResponse = PriceResponseDto;
5598
6153
 
5599
- export type CommodityControllerDeleteData = {
6154
+ export type PriceControllerUpdateData = {
5600
6155
  /**
5601
- * Region code for tenant context
6156
+ * Price ID
5602
6157
  */
5603
- region: 'cn' | 'us' | 'de' | 'gb';
6158
+ id: string;
5604
6159
  /**
5605
- * Commodity symbol
6160
+ * Region code for tenant context
5606
6161
  */
5607
- symbol: string;
6162
+ region: 'cn' | 'us' | 'de' | 'gb';
6163
+ requestBody: UpdateBeanPriceDto;
5608
6164
  };
5609
6165
 
5610
- export type CommodityControllerDeleteResponse = void;
6166
+ export type PriceControllerUpdateResponse = PriceResponseDto;
5611
6167
 
5612
- export type CommodityControllerGetOrCreateData = {
6168
+ export type PriceControllerDeleteData = {
5613
6169
  /**
5614
- * Region code for tenant context
6170
+ * Price ID
5615
6171
  */
5616
- region: 'cn' | 'us' | 'de' | 'gb';
6172
+ id: string;
5617
6173
  /**
5618
- * Commodity symbol
6174
+ * Region code for tenant context
5619
6175
  */
5620
- symbol: string;
6176
+ region: 'cn' | 'us' | 'de' | 'gb';
5621
6177
  };
5622
6178
 
5623
- export type CommodityControllerGetOrCreateResponse = CommodityResponseDto;
6179
+ export type PriceControllerDeleteResponse = void;
5624
6180
 
5625
- export type CommodityControllerBulkCreateData = {
6181
+ export type PriceControllerBulkCreateData = {
5626
6182
  /**
5627
6183
  * Region code for tenant context
5628
6184
  */
5629
6185
  region: 'cn' | 'us' | 'de' | 'gb';
6186
+ requestBody: Array<string>;
5630
6187
  };
5631
6188
 
5632
- export type CommodityControllerBulkCreateResponse = Array<CommodityResponseDto>;
6189
+ export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
5633
6190
 
5634
6191
  export type RecurringRuleControllerCreateData = {
5635
6192
  /**
@@ -6096,6 +6653,159 @@ export type PropertyControllerDeleteData = {
6096
6653
 
6097
6654
  export type PropertyControllerDeleteResponse = void;
6098
6655
 
6656
+ export type EventControllerCreateData = {
6657
+ /**
6658
+ * Region code for tenant context (decorative for life events)
6659
+ */
6660
+ region: 'cn' | 'us' | 'de' | 'gb';
6661
+ requestBody: CreateBeanEventDto;
6662
+ };
6663
+
6664
+ export type EventControllerCreateResponse = EventResponseDto;
6665
+
6666
+ export type EventControllerFindAllData = {
6667
+ /**
6668
+ * Filter life events from this date (ISO 8601 format)
6669
+ */
6670
+ from?: string;
6671
+ /**
6672
+ * Number of items per page (default: 20, max: 100)
6673
+ */
6674
+ limit?: number;
6675
+ /**
6676
+ * Page number for pagination (default: 1)
6677
+ */
6678
+ page?: number;
6679
+ /**
6680
+ * Search term for description (case-insensitive partial match)
6681
+ */
6682
+ q?: string;
6683
+ /**
6684
+ * Region code for tenant context (decorative for life events)
6685
+ */
6686
+ region: 'cn' | 'us' | 'de' | 'gb';
6687
+ /**
6688
+ * Filter life events to this date (ISO 8601 format)
6689
+ */
6690
+ to?: string;
6691
+ /**
6692
+ * Filter by life event type (exact match)
6693
+ */
6694
+ type?: string;
6695
+ };
6696
+
6697
+ export type EventControllerFindAllResponse = EventListResponseDto;
6698
+
6699
+ export type EventControllerFindOneData = {
6700
+ /**
6701
+ * Life event ID
6702
+ */
6703
+ id: string;
6704
+ /**
6705
+ * Region code for tenant context (decorative for life events)
6706
+ */
6707
+ region: 'cn' | 'us' | 'de' | 'gb';
6708
+ };
6709
+
6710
+ export type EventControllerFindOneResponse = EventResponseDto;
6711
+
6712
+ export type EventControllerUpdateData = {
6713
+ /**
6714
+ * Life event ID
6715
+ */
6716
+ id: string;
6717
+ /**
6718
+ * Region code for tenant context (decorative for life events)
6719
+ */
6720
+ region: 'cn' | 'us' | 'de' | 'gb';
6721
+ requestBody: UpdateBeanEventDto;
6722
+ };
6723
+
6724
+ export type EventControllerUpdateResponse = EventResponseDto;
6725
+
6726
+ export type EventControllerDeleteData = {
6727
+ /**
6728
+ * Life event ID
6729
+ */
6730
+ id: string;
6731
+ /**
6732
+ * Region code for tenant context (decorative for life events)
6733
+ */
6734
+ region: 'cn' | 'us' | 'de' | 'gb';
6735
+ };
6736
+
6737
+ export type EventControllerDeleteResponse = void;
6738
+
6739
+ export type EventControllerGetSliceData = {
6740
+ accountPattern: string;
6741
+ granularity: string;
6742
+ /**
6743
+ * Life event ID
6744
+ */
6745
+ id: string;
6746
+ /**
6747
+ * Region code for tenant context (decorative for life events)
6748
+ */
6749
+ region: 'cn' | 'us' | 'de' | 'gb';
6750
+ };
6751
+
6752
+ export type EventControllerGetSliceResponse = unknown;
6753
+
6754
+ export type OnboardingControllerBootstrapData = {
6755
+ /**
6756
+ * Region code for tenant context
6757
+ */
6758
+ region: 'cn' | 'us' | 'de' | 'gb';
6759
+ requestBody: OnboardingDto;
6760
+ };
6761
+
6762
+ export type OnboardingControllerBootstrapResponse = unknown;
6763
+
6764
+ export type ReconciliationControllerComputeData = {
6765
+ /**
6766
+ * Region code for tenant context (decorative for reconciliation)
6767
+ */
6768
+ region: 'cn' | 'us' | 'de' | 'gb';
6769
+ requestBody: ComputeReconciliationDto;
6770
+ };
6771
+
6772
+ export type ReconciliationControllerComputeResponse =
6773
+ ReconciliationComputeResultDto;
6774
+
6775
+ export type ReconciliationControllerAssertData = {
6776
+ /**
6777
+ * Region code for tenant context (decorative for reconciliation)
6778
+ */
6779
+ region: 'cn' | 'us' | 'de' | 'gb';
6780
+ requestBody: AssertReconciliationDto;
6781
+ };
6782
+
6783
+ export type ReconciliationControllerAssertResponse = ReconciliationRecordDto;
6784
+
6785
+ export type ReconciliationControllerPadData = {
6786
+ /**
6787
+ * Region code for tenant context (decorative for reconciliation)
6788
+ */
6789
+ region: 'cn' | 'us' | 'de' | 'gb';
6790
+ requestBody: PadReconciliationDto;
6791
+ };
6792
+
6793
+ export type ReconciliationControllerPadResponse = PadResultDto;
6794
+
6795
+ export type ReconciliationControllerHistoryData = {
6796
+ /**
6797
+ * BeanAccount id
6798
+ */
6799
+ accountId: string;
6800
+ /**
6801
+ * Region code for tenant context (decorative for reconciliation)
6802
+ */
6803
+ region: 'cn' | 'us' | 'de' | 'gb';
6804
+ };
6805
+
6806
+ export type ReconciliationControllerHistoryResponse =
6807
+ Array<ReconciliationRecordDto>;
6808
+
6099
6809
  export type ExportControllerExportBeancountResponse = unknown;
6100
6810
 
6101
6811
  export type FileImportControllerImportFileData = {
@@ -6188,92 +6898,93 @@ export type ImporterConfigControllerResetConfigData = {
6188
6898
 
6189
6899
  export type ImporterConfigControllerResetConfigResponse = ImporterConfigDto;
6190
6900
 
6191
- export type PlatformControllerFindAllResponse = unknown;
6192
-
6193
- export type PlatformControllerCreateData = {
6194
- requestBody: CreatePlatformDto;
6195
- };
6196
-
6197
- export type PlatformControllerCreateResponse = unknown;
6198
-
6199
- export type PlatformControllerGetPlatformListResponse = unknown;
6200
-
6201
- export type PlatformControllerMatchPlatformsData = {
6901
+ export type ProviderSyncControllerSyncData = {
6202
6902
  /**
6203
- * Search query — Chinese name, English name, or abbreviation
6903
+ * Provider name
6204
6904
  */
6205
- q: string;
6905
+ providerName:
6906
+ | 'plaid'
6907
+ | 'teller'
6908
+ | 'truelayer'
6909
+ | 'gocardless'
6910
+ | 'simplefin'
6911
+ | 'yodlee'
6912
+ | 'beancount-direct'
6913
+ | 'parsed-bill';
6206
6914
  /**
6207
- * Region code for category override lookup
6915
+ * Region code for tenant context
6208
6916
  */
6209
- region?: string;
6917
+ region: 'cn' | 'us' | 'de' | 'gb';
6918
+ requestBody: ProviderSyncDto;
6210
6919
  };
6211
6920
 
6212
- export type PlatformControllerMatchPlatformsResponse = unknown;
6921
+ export type ProviderSyncControllerSyncResponse = ProviderSyncResponseDto;
6213
6922
 
6214
- export type PlatformControllerUpdateData = {
6923
+ export type ProviderSyncControllerGetSupportedProvidersData = {
6215
6924
  /**
6216
- * Platform ID
6925
+ * Region code for tenant context
6217
6926
  */
6218
- id: string;
6219
- requestBody: UpdatePlatformDto;
6927
+ region: 'cn' | 'us' | 'de' | 'gb';
6220
6928
  };
6221
6929
 
6222
- export type PlatformControllerUpdateResponse = unknown;
6930
+ export type ProviderSyncControllerGetSupportedProvidersResponse =
6931
+ SupportedProvidersResponseDto;
6223
6932
 
6224
- export type PlatformControllerDeleteData = {
6933
+ export type ProviderSyncControllerIsProviderSupportedData = {
6225
6934
  /**
6226
- * Platform ID
6935
+ * Provider name to check
6227
6936
  */
6228
- id: string;
6229
- };
6230
-
6231
- export type PlatformControllerDeleteResponse = void;
6232
-
6233
- export type ProviderSyncControllerSyncData = {
6937
+ providerName: string;
6234
6938
  /**
6235
- * Provider name
6939
+ * Region code for tenant context
6236
6940
  */
6237
- providerName:
6238
- | 'plaid'
6239
- | 'teller'
6240
- | 'truelayer'
6241
- | 'gocardless'
6242
- | 'simplefin'
6243
- | 'yodlee'
6244
- | 'beancount-direct'
6245
- | 'parsed-bill';
6941
+ region: 'cn' | 'us' | 'de' | 'gb';
6942
+ };
6943
+
6944
+ export type ProviderSyncControllerIsProviderSupportedResponse = unknown;
6945
+
6946
+ export type ExternalAccountLinkControllerCreateData = {
6246
6947
  /**
6247
6948
  * Region code for tenant context
6248
6949
  */
6249
6950
  region: 'cn' | 'us' | 'de' | 'gb';
6250
- requestBody: ProviderSyncDto;
6951
+ requestBody: CreateExternalAccountLinkDto;
6251
6952
  };
6252
6953
 
6253
- export type ProviderSyncControllerSyncResponse = ProviderSyncResponseDto;
6954
+ export type ExternalAccountLinkControllerCreateResponse =
6955
+ ExternalAccountLinkResponseDto;
6254
6956
 
6255
- export type ProviderSyncControllerGetSupportedProvidersData = {
6957
+ export type ExternalAccountLinkControllerFindAllData = {
6958
+ provider: string;
6256
6959
  /**
6257
6960
  * Region code for tenant context
6258
6961
  */
6259
6962
  region: 'cn' | 'us' | 'de' | 'gb';
6260
6963
  };
6261
6964
 
6262
- export type ProviderSyncControllerGetSupportedProvidersResponse =
6263
- SupportedProvidersResponseDto;
6965
+ export type ExternalAccountLinkControllerFindAllResponse =
6966
+ ExternalAccountLinkListResponseDto;
6264
6967
 
6265
- export type ProviderSyncControllerIsProviderSupportedData = {
6968
+ export type ExternalAccountLinkControllerFindOneData = {
6969
+ id: string;
6266
6970
  /**
6267
- * Provider name to check
6971
+ * Region code for tenant context
6268
6972
  */
6269
- providerName: string;
6973
+ region: 'cn' | 'us' | 'de' | 'gb';
6974
+ };
6975
+
6976
+ export type ExternalAccountLinkControllerFindOneResponse =
6977
+ ExternalAccountLinkResponseDto;
6978
+
6979
+ export type ExternalAccountLinkControllerRemoveData = {
6980
+ id: string;
6270
6981
  /**
6271
6982
  * Region code for tenant context
6272
6983
  */
6273
6984
  region: 'cn' | 'us' | 'de' | 'gb';
6274
6985
  };
6275
6986
 
6276
- export type ProviderSyncControllerIsProviderSupportedResponse = unknown;
6987
+ export type ExternalAccountLinkControllerRemoveResponse = void;
6277
6988
 
6278
6989
  export type TelemetryControllerReportTelemetryData = {
6279
6990
  /**
@@ -6347,6 +7058,48 @@ export type NlpControllerGetSessionData = {
6347
7058
 
6348
7059
  export type NlpControllerGetSessionResponse = unknown;
6349
7060
 
7061
+ export type PlatformControllerFindAllResponse = unknown;
7062
+
7063
+ export type PlatformControllerCreateData = {
7064
+ requestBody: CreatePlatformDto;
7065
+ };
7066
+
7067
+ export type PlatformControllerCreateResponse = unknown;
7068
+
7069
+ export type PlatformControllerGetPlatformListResponse = unknown;
7070
+
7071
+ export type PlatformControllerMatchPlatformsData = {
7072
+ /**
7073
+ * Search query — Chinese name, English name, or abbreviation
7074
+ */
7075
+ q: string;
7076
+ /**
7077
+ * Region code for category override lookup
7078
+ */
7079
+ region?: string;
7080
+ };
7081
+
7082
+ export type PlatformControllerMatchPlatformsResponse = unknown;
7083
+
7084
+ export type PlatformControllerUpdateData = {
7085
+ /**
7086
+ * Platform ID
7087
+ */
7088
+ id: string;
7089
+ requestBody: UpdatePlatformDto;
7090
+ };
7091
+
7092
+ export type PlatformControllerUpdateResponse = unknown;
7093
+
7094
+ export type PlatformControllerDeleteData = {
7095
+ /**
7096
+ * Platform ID
7097
+ */
7098
+ id: string;
7099
+ };
7100
+
7101
+ export type PlatformControllerDeleteResponse = void;
7102
+
6350
7103
  export type DashboardControllerGetNetWorthData = {
6351
7104
  /**
6352
7105
  * Date for balance calculation (ISO 8601 format)
@@ -6401,127 +7154,70 @@ export type DashboardControllerGetCashFlowData = {
6401
7154
 
6402
7155
  export type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
6403
7156
 
6404
- export type HoldingPnlControllerGetHoldingPnlData = {
6405
- /**
6406
- * Scope to a single account
6407
- */
6408
- accountId?: string;
6409
- /**
6410
- * As-of date (ISO 8601), defaults to today
6411
- */
6412
- asOf?: string;
6413
- /**
6414
- * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6415
- */
6416
- method?: 'FIFO' | 'average';
6417
- /**
6418
- * Region code for tenant context
6419
- */
6420
- region: 'cn' | 'us' | 'de' | 'gb';
6421
- };
6422
-
6423
- export type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6424
-
6425
- export type PriceControllerCreateData = {
6426
- /**
6427
- * Region code for tenant context
6428
- */
6429
- region: 'cn' | 'us' | 'de' | 'gb';
6430
- requestBody: CreateBeanPriceDto;
6431
- };
6432
-
6433
- export type PriceControllerCreateResponse = PriceResponseDto;
6434
-
6435
- export type PriceControllerFindAllData = {
6436
- /**
6437
- * Filter by currency (e.g., BTC, AAPL, USD)
6438
- */
6439
- currency?: string;
7157
+ export type DashboardControllerGetExpensesData = {
6440
7158
  /**
6441
- * Filter prices from this date (ISO 8601 format)
6442
- */
6443
- dateFrom?: string;
6444
- /**
6445
- * Filter prices to this date (ISO 8601 format)
6446
- */
6447
- dateTo?: string;
6448
- /**
6449
- * Number of items per page (default: 20, max: 100)
7159
+ * Account root to aggregate (expense ^Expenses:, income → ^Income:)
6450
7160
  */
6451
- limit?: number;
7161
+ flow?: 'expense' | 'income';
6452
7162
  /**
6453
- * Page number for pagination (default: 1)
7163
+ * Grouping strategy
6454
7164
  */
6455
- page?: number;
7165
+ groupBy?: 'category';
6456
7166
  /**
6457
- * Filter by quote currency (pricing currency, e.g., USD, CNY)
7167
+ * Time window (1m = current calendar month)
6458
7168
  */
6459
- quoteCurrency?: string;
7169
+ period?: '1m' | '3m' | '6m' | '1y';
6460
7170
  /**
6461
7171
  * Region code for tenant context
6462
7172
  */
6463
7173
  region: 'cn' | 'us' | 'de' | 'gb';
6464
- /**
6465
- * Search term for currency or quoteCurrency (case-insensitive partial match)
6466
- */
6467
- search?: string;
6468
7174
  };
6469
7175
 
6470
- export type PriceControllerFindAllResponse = PriceListResponseDto;
7176
+ export type DashboardControllerGetExpensesResponse =
7177
+ ExpensesByCategoryResponseDto;
6471
7178
 
6472
- export type PriceControllerFindOneData = {
7179
+ export type HoldingPnlControllerGetHoldingPnlData = {
6473
7180
  /**
6474
- * Price ID
7181
+ * Scope to a single account
6475
7182
  */
6476
- id: string;
7183
+ accountId?: string;
6477
7184
  /**
6478
- * Region code for tenant context
7185
+ * As-of date (ISO 8601), defaults to today
6479
7186
  */
6480
- region: 'cn' | 'us' | 'de' | 'gb';
6481
- };
6482
-
6483
- export type PriceControllerFindOneResponse = PriceResponseDto;
6484
-
6485
- export type PriceControllerUpdateData = {
7187
+ asOf?: string;
6486
7188
  /**
6487
- * Price ID
7189
+ * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6488
7190
  */
6489
- id: string;
7191
+ method?: 'FIFO' | 'average';
6490
7192
  /**
6491
7193
  * Region code for tenant context
6492
7194
  */
6493
7195
  region: 'cn' | 'us' | 'de' | 'gb';
6494
- requestBody: UpdateBeanPriceDto;
6495
7196
  };
6496
7197
 
6497
- export type PriceControllerUpdateResponse = PriceResponseDto;
7198
+ export type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6498
7199
 
6499
- export type PriceControllerDeleteData = {
7200
+ export type ReportingControllerGetPortfolioTrendsData = {
6500
7201
  /**
6501
- * Price ID
7202
+ * Data granularity
6502
7203
  */
6503
- id: string;
7204
+ granularity?: 'day' | 'week' | 'month';
6504
7205
  /**
6505
- * Region code for tenant context
7206
+ * Time period
6506
7207
  */
6507
- region: 'cn' | 'us' | 'de' | 'gb';
6508
- };
6509
-
6510
- export type PriceControllerDeleteResponse = void;
6511
-
6512
- export type PriceControllerBulkCreateData = {
7208
+ period?: '1m' | '3m' | '6m' | '1y';
6513
7209
  /**
6514
7210
  * Region code for tenant context
6515
7211
  */
6516
7212
  region: 'cn' | 'us' | 'de' | 'gb';
6517
- requestBody: Array<string>;
6518
7213
  };
6519
7214
 
6520
- export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
7215
+ export type ReportingControllerGetPortfolioTrendsResponse =
7216
+ PortfolioTrendsResponseDto;
6521
7217
 
6522
- export type ReportingControllerGetPortfolioTrendsData = {
7218
+ export type ReportingControllerGetCashFlowTrendsData = {
6523
7219
  /**
6524
- * Data granularity
7220
+ * Data granularity (accepted for API symmetry; v1 returns month buckets)
6525
7221
  */
6526
7222
  granularity?: 'day' | 'week' | 'month';
6527
7223
  /**
@@ -6534,8 +7230,8 @@ export type ReportingControllerGetPortfolioTrendsData = {
6534
7230
  region: 'cn' | 'us' | 'de' | 'gb';
6535
7231
  };
6536
7232
 
6537
- export type ReportingControllerGetPortfolioTrendsResponse =
6538
- PortfolioTrendsResponseDto;
7233
+ export type ReportingControllerGetCashFlowTrendsResponse =
7234
+ CashFlowTrendsResponseDto;
6539
7235
 
6540
7236
  export type ReportingControllerGenerateSnapshotData = {
6541
7237
  /**
@@ -7262,65 +7958,149 @@ export type $OpenApiTs = {
7262
7958
  req: CommodityControllerFindOneData;
7263
7959
  res: {
7264
7960
  /**
7265
- * Commodity retrieved successfully
7961
+ * Commodity retrieved successfully
7962
+ */
7963
+ 200: CommodityResponseDto;
7964
+ /**
7965
+ * Commodity not found
7966
+ */
7967
+ 404: ApiProblemResponseDto;
7968
+ };
7969
+ };
7970
+ put: {
7971
+ req: CommodityControllerUpdateData;
7972
+ res: {
7973
+ /**
7974
+ * Commodity updated successfully
7975
+ */
7976
+ 200: CommodityResponseDto;
7977
+ /**
7978
+ * Invalid input data
7979
+ */
7980
+ 400: ApiProblemResponseDto;
7981
+ /**
7982
+ * Commodity not found
7983
+ */
7984
+ 404: ApiProblemResponseDto;
7985
+ };
7986
+ };
7987
+ delete: {
7988
+ req: CommodityControllerDeleteData;
7989
+ res: {
7990
+ /**
7991
+ * Commodity deleted successfully
7992
+ */
7993
+ 204: void;
7994
+ /**
7995
+ * Commodity not found
7996
+ */
7997
+ 404: ApiProblemResponseDto;
7998
+ };
7999
+ };
8000
+ };
8001
+ '/api/v1/{region}/bean/commodities/{symbol}/ensure': {
8002
+ post: {
8003
+ req: CommodityControllerGetOrCreateData;
8004
+ res: {
8005
+ /**
8006
+ * Commodity retrieved or created
8007
+ */
8008
+ 200: CommodityResponseDto;
8009
+ };
8010
+ };
8011
+ };
8012
+ '/api/v1/{region}/bean/commodities/bulk': {
8013
+ post: {
8014
+ req: CommodityControllerBulkCreateData;
8015
+ res: {
8016
+ /**
8017
+ * Commodities created successfully
8018
+ */
8019
+ 201: Array<CommodityResponseDto>;
8020
+ };
8021
+ };
8022
+ };
8023
+ '/api/v1/{region}/bean/prices': {
8024
+ post: {
8025
+ req: PriceControllerCreateData;
8026
+ res: {
8027
+ /**
8028
+ * Price created successfully
8029
+ */
8030
+ 201: PriceResponseDto;
8031
+ /**
8032
+ * Currency or quoteCurrency commodity not found
8033
+ */
8034
+ 404: unknown;
8035
+ /**
8036
+ * Price already exists for this currency pair and date
8037
+ */
8038
+ 409: unknown;
8039
+ };
8040
+ };
8041
+ get: {
8042
+ req: PriceControllerFindAllData;
8043
+ res: {
8044
+ /**
8045
+ * Prices retrieved successfully
8046
+ */
8047
+ 200: PriceListResponseDto;
8048
+ };
8049
+ };
8050
+ };
8051
+ '/api/v1/{region}/bean/prices/{id}': {
8052
+ get: {
8053
+ req: PriceControllerFindOneData;
8054
+ res: {
8055
+ /**
8056
+ * Price retrieved successfully
7266
8057
  */
7267
- 200: CommodityResponseDto;
8058
+ 200: PriceResponseDto;
7268
8059
  /**
7269
- * Commodity not found
8060
+ * Price not found
7270
8061
  */
7271
- 404: ApiProblemResponseDto;
8062
+ 404: unknown;
7272
8063
  };
7273
8064
  };
7274
8065
  put: {
7275
- req: CommodityControllerUpdateData;
8066
+ req: PriceControllerUpdateData;
7276
8067
  res: {
7277
8068
  /**
7278
- * Commodity updated successfully
8069
+ * Price updated successfully
7279
8070
  */
7280
- 200: CommodityResponseDto;
8071
+ 200: PriceResponseDto;
7281
8072
  /**
7282
- * Invalid input data
8073
+ * Price not found
7283
8074
  */
7284
- 400: ApiProblemResponseDto;
8075
+ 404: unknown;
7285
8076
  /**
7286
- * Commodity not found
8077
+ * Updated price conflicts with existing price
7287
8078
  */
7288
- 404: ApiProblemResponseDto;
8079
+ 409: unknown;
7289
8080
  };
7290
8081
  };
7291
8082
  delete: {
7292
- req: CommodityControllerDeleteData;
8083
+ req: PriceControllerDeleteData;
7293
8084
  res: {
7294
8085
  /**
7295
- * Commodity deleted successfully
8086
+ * Price deleted successfully
7296
8087
  */
7297
8088
  204: void;
7298
8089
  /**
7299
- * Commodity not found
7300
- */
7301
- 404: ApiProblemResponseDto;
7302
- };
7303
- };
7304
- };
7305
- '/api/v1/{region}/bean/commodities/{symbol}/ensure': {
7306
- post: {
7307
- req: CommodityControllerGetOrCreateData;
7308
- res: {
7309
- /**
7310
- * Commodity retrieved or created
8090
+ * Price not found
7311
8091
  */
7312
- 200: CommodityResponseDto;
8092
+ 404: unknown;
7313
8093
  };
7314
8094
  };
7315
8095
  };
7316
- '/api/v1/{region}/bean/commodities/bulk': {
8096
+ '/api/v1/{region}/bean/prices/bulk': {
7317
8097
  post: {
7318
- req: CommodityControllerBulkCreateData;
8098
+ req: PriceControllerBulkCreateData;
7319
8099
  res: {
7320
8100
  /**
7321
- * Commodities created successfully
8101
+ * Prices created successfully
7322
8102
  */
7323
- 201: Array<CommodityResponseDto>;
8103
+ 201: Array<PriceResponseDto>;
7324
8104
  };
7325
8105
  };
7326
8106
  };
@@ -7968,6 +8748,181 @@ export type $OpenApiTs = {
7968
8748
  };
7969
8749
  };
7970
8750
  };
8751
+ '/api/v1/{region}/bean/events': {
8752
+ post: {
8753
+ req: EventControllerCreateData;
8754
+ res: {
8755
+ /**
8756
+ * Life event created successfully
8757
+ */
8758
+ 201: EventResponseDto;
8759
+ /**
8760
+ * Life event already exists for this (userId, type, date) combination
8761
+ */
8762
+ 409: unknown;
8763
+ };
8764
+ };
8765
+ get: {
8766
+ req: EventControllerFindAllData;
8767
+ res: {
8768
+ /**
8769
+ * Life events retrieved successfully
8770
+ */
8771
+ 200: EventListResponseDto;
8772
+ };
8773
+ };
8774
+ };
8775
+ '/api/v1/{region}/bean/events/{id}': {
8776
+ get: {
8777
+ req: EventControllerFindOneData;
8778
+ res: {
8779
+ /**
8780
+ * Life event retrieved successfully
8781
+ */
8782
+ 200: EventResponseDto;
8783
+ /**
8784
+ * Life event not found
8785
+ */
8786
+ 404: unknown;
8787
+ };
8788
+ };
8789
+ put: {
8790
+ req: EventControllerUpdateData;
8791
+ res: {
8792
+ /**
8793
+ * Life event updated successfully
8794
+ */
8795
+ 200: EventResponseDto;
8796
+ /**
8797
+ * If-Match header is not a valid ISO 8601 date
8798
+ */
8799
+ 400: unknown;
8800
+ /**
8801
+ * Life event not found
8802
+ */
8803
+ 404: unknown;
8804
+ /**
8805
+ * Updated event conflicts with an existing (userId, type, date) combination
8806
+ */
8807
+ 409: unknown;
8808
+ /**
8809
+ * If-Match precondition failed (updatedAt mismatch)
8810
+ */
8811
+ 412: unknown;
8812
+ };
8813
+ };
8814
+ delete: {
8815
+ req: EventControllerDeleteData;
8816
+ res: {
8817
+ /**
8818
+ * Life event deleted successfully
8819
+ */
8820
+ 204: void;
8821
+ /**
8822
+ * Life event not found
8823
+ */
8824
+ 404: unknown;
8825
+ };
8826
+ };
8827
+ };
8828
+ '/api/v1/{region}/bean/events/{id}/slice': {
8829
+ get: {
8830
+ req: EventControllerGetSliceData;
8831
+ res: {
8832
+ /**
8833
+ * Time-series sliced by the life event range
8834
+ */
8835
+ 200: unknown;
8836
+ /**
8837
+ * accountPattern query param is empty
8838
+ */
8839
+ 400: unknown;
8840
+ /**
8841
+ * Life event not found
8842
+ */
8843
+ 404: unknown;
8844
+ };
8845
+ };
8846
+ };
8847
+ '/api/v1/{region}/bean/onboarding': {
8848
+ post: {
8849
+ req: OnboardingControllerBootstrapData;
8850
+ res: {
8851
+ /**
8852
+ * Onboarding bootstrap result.
8853
+ */
8854
+ 201: unknown;
8855
+ /**
8856
+ * Invalid region/account path/duplicate paths.
8857
+ */
8858
+ 422: unknown;
8859
+ };
8860
+ };
8861
+ };
8862
+ '/api/v1/{region}/bean/reconciliations': {
8863
+ post: {
8864
+ req: ReconciliationControllerComputeData;
8865
+ res: {
8866
+ /**
8867
+ * Reconciliation preview
8868
+ */
8869
+ 200: ReconciliationComputeResultDto;
8870
+ /**
8871
+ * Account not found
8872
+ */
8873
+ 404: unknown;
8874
+ };
8875
+ };
8876
+ };
8877
+ '/api/v1/{region}/bean/reconciliations/assert': {
8878
+ post: {
8879
+ req: ReconciliationControllerAssertData;
8880
+ res: {
8881
+ /**
8882
+ * Balance assertion recorded
8883
+ */
8884
+ 201: ReconciliationRecordDto;
8885
+ /**
8886
+ * Account not found
8887
+ */
8888
+ 404: unknown;
8889
+ };
8890
+ };
8891
+ };
8892
+ '/api/v1/{region}/bean/reconciliations/pad': {
8893
+ post: {
8894
+ req: ReconciliationControllerPadData;
8895
+ res: {
8896
+ /**
8897
+ * Pad adjusting entry generated
8898
+ */
8899
+ 201: PadResultDto;
8900
+ /**
8901
+ * Book already within tolerance — no pad needed
8902
+ */
8903
+ 400: unknown;
8904
+ /**
8905
+ * Account not found
8906
+ */
8907
+ 404: unknown;
8908
+ };
8909
+ };
8910
+ };
8911
+ '/api/v1/{region}/bean/accounts/{accountId}/reconciliations': {
8912
+ get: {
8913
+ req: ReconciliationControllerHistoryData;
8914
+ res: {
8915
+ /**
8916
+ * Reconciliation history
8917
+ */
8918
+ 200: Array<ReconciliationRecordDto>;
8919
+ /**
8920
+ * Account not found
8921
+ */
8922
+ 404: unknown;
8923
+ };
8924
+ };
8925
+ };
7971
8926
  '/api/v1/{region}/bean/export/beancount': {
7972
8927
  get: {
7973
8928
  res: {
@@ -8052,141 +9007,69 @@ export type $OpenApiTs = {
8052
9007
  * Beancount file imported successfully
8053
9008
  */
8054
9009
  200: {
8055
- imported?: number;
8056
- skipped?: number;
8057
- failed?: number;
8058
- accountsCreated?: number;
8059
- errors?: Array<{
8060
- [key: string]: unknown;
8061
- }>;
8062
- };
8063
- /**
8064
- * Bad request - invalid file or no file uploaded
8065
- */
8066
- 400: ApiProblemResponseDto;
8067
- };
8068
- };
8069
- };
8070
- '/api/v1/{region}/bean/import/config/{importerId}': {
8071
- get: {
8072
- req: ImporterConfigControllerGetConfigData;
8073
- res: {
8074
- /**
8075
- * Configuration retrieved successfully
8076
- */
8077
- 200: ImporterConfigDto;
8078
- /**
8079
- * Invalid input - Unsupported importer
8080
- */
8081
- 400: ApiProblemResponseDto;
8082
- /**
8083
- * Unauthorized - Authentication required
8084
- */
8085
- 401: ApiProblemResponseDto;
8086
- };
8087
- };
8088
- put: {
8089
- req: ImporterConfigControllerUpdateConfigData;
8090
- res: {
8091
- /**
8092
- * Configuration updated successfully
8093
- */
8094
- 200: ImporterConfigDto;
8095
- /**
8096
- * Invalid input - Validation failed
8097
- */
8098
- 400: ApiProblemResponseDto;
8099
- /**
8100
- * Configuration not found
8101
- */
8102
- 404: ApiProblemResponseDto;
8103
- };
8104
- };
8105
- };
8106
- '/api/v1/{region}/bean/import/config/{importerId}/reset': {
8107
- post: {
8108
- req: ImporterConfigControllerResetConfigData;
8109
- res: {
8110
- /**
8111
- * Configuration reset successfully
8112
- */
8113
- 200: ImporterConfigDto;
8114
- /**
8115
- * Invalid input - Unsupported importer
8116
- */
8117
- 400: ApiProblemResponseDto;
8118
- };
8119
- };
8120
- };
8121
- '/api/v1/bean/platforms': {
8122
- get: {
8123
- res: {
8124
- /**
8125
- * List of platforms with binding and account counts
8126
- */
8127
- 200: unknown;
8128
- };
8129
- };
8130
- post: {
8131
- req: PlatformControllerCreateData;
8132
- res: {
8133
- /**
8134
- * Platform created successfully
8135
- */
8136
- 201: unknown;
9010
+ imported?: number;
9011
+ skipped?: number;
9012
+ failed?: number;
9013
+ accountsCreated?: number;
9014
+ errors?: Array<{
9015
+ [key: string]: unknown;
9016
+ }>;
9017
+ };
8137
9018
  /**
8138
- * Platform already exists
9019
+ * Bad request - invalid file or no file uploaded
8139
9020
  */
8140
- 409: unknown;
9021
+ 400: ApiProblemResponseDto;
8141
9022
  };
8142
9023
  };
8143
9024
  };
8144
- '/api/v1/bean/platforms/list': {
9025
+ '/api/v1/{region}/bean/import/config/{importerId}': {
8145
9026
  get: {
9027
+ req: ImporterConfigControllerGetConfigData;
8146
9028
  res: {
8147
9029
  /**
8148
- * List of platforms with user binding status
9030
+ * Configuration retrieved successfully
8149
9031
  */
8150
- 200: unknown;
8151
- };
8152
- };
8153
- };
8154
- '/api/v1/bean/platforms/match': {
8155
- get: {
8156
- req: PlatformControllerMatchPlatformsData;
8157
- res: {
9032
+ 200: ImporterConfigDto;
8158
9033
  /**
8159
- * List of matching platforms with suggested segment names
9034
+ * Invalid input - Unsupported importer
8160
9035
  */
8161
- 200: unknown;
9036
+ 400: ApiProblemResponseDto;
9037
+ /**
9038
+ * Unauthorized - Authentication required
9039
+ */
9040
+ 401: ApiProblemResponseDto;
8162
9041
  };
8163
9042
  };
8164
- };
8165
- '/api/v1/bean/platforms/{id}': {
8166
9043
  put: {
8167
- req: PlatformControllerUpdateData;
9044
+ req: ImporterConfigControllerUpdateConfigData;
8168
9045
  res: {
8169
9046
  /**
8170
- * Platform updated successfully
9047
+ * Configuration updated successfully
8171
9048
  */
8172
- 200: unknown;
9049
+ 200: ImporterConfigDto;
8173
9050
  /**
8174
- * Platform not found
9051
+ * Invalid input - Validation failed
8175
9052
  */
8176
- 404: unknown;
9053
+ 400: ApiProblemResponseDto;
9054
+ /**
9055
+ * Configuration not found
9056
+ */
9057
+ 404: ApiProblemResponseDto;
8177
9058
  };
8178
9059
  };
8179
- delete: {
8180
- req: PlatformControllerDeleteData;
9060
+ };
9061
+ '/api/v1/{region}/bean/import/config/{importerId}/reset': {
9062
+ post: {
9063
+ req: ImporterConfigControllerResetConfigData;
8181
9064
  res: {
8182
9065
  /**
8183
- * Platform deleted successfully
9066
+ * Configuration reset successfully
8184
9067
  */
8185
- 204: void;
9068
+ 200: ImporterConfigDto;
8186
9069
  /**
8187
- * Platform not found
9070
+ * Invalid input - Unsupported importer
8188
9071
  */
8189
- 404: unknown;
9072
+ 400: ApiProblemResponseDto;
8190
9073
  };
8191
9074
  };
8192
9075
  };
@@ -8243,6 +9126,54 @@ export type $OpenApiTs = {
8243
9126
  };
8244
9127
  };
8245
9128
  };
9129
+ '/api/v1/{region}/bean/external-account-links': {
9130
+ post: {
9131
+ req: ExternalAccountLinkControllerCreateData;
9132
+ res: {
9133
+ /**
9134
+ * Link created.
9135
+ */
9136
+ 201: ExternalAccountLinkResponseDto;
9137
+ /**
9138
+ * beanAccountId not owned, or an active link already exists.
9139
+ */
9140
+ 422: unknown;
9141
+ };
9142
+ };
9143
+ get: {
9144
+ req: ExternalAccountLinkControllerFindAllData;
9145
+ res: {
9146
+ /**
9147
+ * Links retrieved.
9148
+ */
9149
+ 200: ExternalAccountLinkListResponseDto;
9150
+ };
9151
+ };
9152
+ };
9153
+ '/api/v1/{region}/bean/external-account-links/{id}': {
9154
+ get: {
9155
+ req: ExternalAccountLinkControllerFindOneData;
9156
+ res: {
9157
+ /**
9158
+ * Link retrieved.
9159
+ */
9160
+ 200: ExternalAccountLinkResponseDto;
9161
+ /**
9162
+ * Link not found or not owned by the user.
9163
+ */
9164
+ 422: unknown;
9165
+ };
9166
+ };
9167
+ delete: {
9168
+ req: ExternalAccountLinkControllerRemoveData;
9169
+ res: {
9170
+ /**
9171
+ * Link soft-deleted; historical transactions are unaffected.
9172
+ */
9173
+ 204: void;
9174
+ };
9175
+ };
9176
+ };
8246
9177
  '/api/v1/{region}/bean/import/parser-telemetry': {
8247
9178
  post: {
8248
9179
  req: TelemetryControllerReportTelemetryData;
@@ -8331,6 +9262,78 @@ export type $OpenApiTs = {
8331
9262
  };
8332
9263
  };
8333
9264
  };
9265
+ '/api/v1/bean/platforms': {
9266
+ get: {
9267
+ res: {
9268
+ /**
9269
+ * List of platforms with binding and account counts
9270
+ */
9271
+ 200: unknown;
9272
+ };
9273
+ };
9274
+ post: {
9275
+ req: PlatformControllerCreateData;
9276
+ res: {
9277
+ /**
9278
+ * Platform created successfully
9279
+ */
9280
+ 201: unknown;
9281
+ /**
9282
+ * Platform already exists
9283
+ */
9284
+ 409: unknown;
9285
+ };
9286
+ };
9287
+ };
9288
+ '/api/v1/bean/platforms/list': {
9289
+ get: {
9290
+ res: {
9291
+ /**
9292
+ * List of platforms with user binding status
9293
+ */
9294
+ 200: unknown;
9295
+ };
9296
+ };
9297
+ };
9298
+ '/api/v1/bean/platforms/match': {
9299
+ get: {
9300
+ req: PlatformControllerMatchPlatformsData;
9301
+ res: {
9302
+ /**
9303
+ * List of matching platforms with suggested segment names
9304
+ */
9305
+ 200: unknown;
9306
+ };
9307
+ };
9308
+ };
9309
+ '/api/v1/bean/platforms/{id}': {
9310
+ put: {
9311
+ req: PlatformControllerUpdateData;
9312
+ res: {
9313
+ /**
9314
+ * Platform updated successfully
9315
+ */
9316
+ 200: unknown;
9317
+ /**
9318
+ * Platform not found
9319
+ */
9320
+ 404: unknown;
9321
+ };
9322
+ };
9323
+ delete: {
9324
+ req: PlatformControllerDeleteData;
9325
+ res: {
9326
+ /**
9327
+ * Platform deleted successfully
9328
+ */
9329
+ 204: void;
9330
+ /**
9331
+ * Platform not found
9332
+ */
9333
+ 404: unknown;
9334
+ };
9335
+ };
9336
+ };
8334
9337
  '/api/v1/{region}/dashboard/net-worth': {
8335
9338
  get: {
8336
9339
  req: DashboardControllerGetNetWorthData;
@@ -8383,16 +9386,16 @@ export type $OpenApiTs = {
8383
9386
  };
8384
9387
  };
8385
9388
  };
8386
- '/api/v1/{region}/investment/holdings/pnl': {
9389
+ '/api/v1/{region}/dashboard/expenses': {
8387
9390
  get: {
8388
- req: HoldingPnlControllerGetHoldingPnlData;
9391
+ req: DashboardControllerGetExpensesData;
8389
9392
  res: {
8390
9393
  /**
8391
- * Holding P&L retrieved successfully
9394
+ * Expenses retrieved successfully
8392
9395
  */
8393
- 200: HoldingPnlResponseDto;
9396
+ 200: ExpensesByCategoryResponseDto;
8394
9397
  /**
8395
- * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
9398
+ * Invalid groupBy or period
8396
9399
  */
8397
9400
  400: unknown;
8398
9401
  /**
@@ -8402,98 +9405,48 @@ export type $OpenApiTs = {
8402
9405
  };
8403
9406
  };
8404
9407
  };
8405
- '/api/v1/{region}/bean/prices': {
8406
- post: {
8407
- req: PriceControllerCreateData;
9408
+ '/api/v1/{region}/investment/holdings/pnl': {
9409
+ get: {
9410
+ req: HoldingPnlControllerGetHoldingPnlData;
8408
9411
  res: {
8409
9412
  /**
8410
- * Price created successfully
8411
- */
8412
- 201: PriceResponseDto;
8413
- /**
8414
- * Currency or quoteCurrency commodity not found
9413
+ * Holding P&L retrieved successfully
8415
9414
  */
8416
- 404: unknown;
9415
+ 200: HoldingPnlResponseDto;
8417
9416
  /**
8418
- * Price already exists for this currency pair and date
9417
+ * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
8419
9418
  */
8420
- 409: unknown;
8421
- };
8422
- };
8423
- get: {
8424
- req: PriceControllerFindAllData;
8425
- res: {
9419
+ 400: unknown;
8426
9420
  /**
8427
- * Prices retrieved successfully
9421
+ * User not authenticated
8428
9422
  */
8429
- 200: PriceListResponseDto;
9423
+ 401: unknown;
8430
9424
  };
8431
9425
  };
8432
9426
  };
8433
- '/api/v1/{region}/bean/prices/{id}': {
9427
+ '/api/v1/{region}/reporting/portfolio/trends': {
8434
9428
  get: {
8435
- req: PriceControllerFindOneData;
8436
- res: {
8437
- /**
8438
- * Price retrieved successfully
8439
- */
8440
- 200: PriceResponseDto;
8441
- /**
8442
- * Price not found
8443
- */
8444
- 404: unknown;
8445
- };
8446
- };
8447
- put: {
8448
- req: PriceControllerUpdateData;
8449
- res: {
8450
- /**
8451
- * Price updated successfully
8452
- */
8453
- 200: PriceResponseDto;
8454
- /**
8455
- * Price not found
8456
- */
8457
- 404: unknown;
8458
- /**
8459
- * Updated price conflicts with existing price
8460
- */
8461
- 409: unknown;
8462
- };
8463
- };
8464
- delete: {
8465
- req: PriceControllerDeleteData;
9429
+ req: ReportingControllerGetPortfolioTrendsData;
8466
9430
  res: {
8467
9431
  /**
8468
- * Price deleted successfully
8469
- */
8470
- 204: void;
8471
- /**
8472
- * Price not found
9432
+ * Trends retrieved successfully
8473
9433
  */
8474
- 404: unknown;
8475
- };
8476
- };
8477
- };
8478
- '/api/v1/{region}/bean/prices/bulk': {
8479
- post: {
8480
- req: PriceControllerBulkCreateData;
8481
- res: {
9434
+ 200: PortfolioTrendsResponseDto;
8482
9435
  /**
8483
- * Prices created successfully
9436
+ * User not authenticated
8484
9437
  */
8485
- 201: Array<PriceResponseDto>;
9438
+ 401: unknown;
8486
9439
  };
8487
9440
  };
8488
9441
  };
8489
- '/api/v1/{region}/reporting/portfolio/trends': {
9442
+ '/api/v1/{region}/reporting/cash-flow/trends': {
8490
9443
  get: {
8491
- req: ReportingControllerGetPortfolioTrendsData;
9444
+ req: ReportingControllerGetCashFlowTrendsData;
8492
9445
  res: {
8493
9446
  /**
8494
- * Trends retrieved successfully
9447
+ * Cash-flow trends retrieved successfully
8495
9448
  */
8496
- 200: PortfolioTrendsResponseDto;
9449
+ 200: CashFlowTrendsResponseDto;
8497
9450
  /**
8498
9451
  * User not authenticated
8499
9452
  */