@firela/api-types 0.0.0-canary.2b7765ff → 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
  */
@@ -442,6 +414,25 @@ export type CreateTransactionDto = {
442
414
  */
443
415
  export type flag = '*' | '!';
444
416
 
417
+ export type CostDetailDto = {
418
+ /**
419
+ * Per-unit cost basis (mirrors engine Cost.number)
420
+ */
421
+ number?: string;
422
+ /**
423
+ * Cost currency
424
+ */
425
+ currency?: string;
426
+ /**
427
+ * Lot acquisition date (ISO yyyy-mm-dd)
428
+ */
429
+ date?: string;
430
+ /**
431
+ * Lot label
432
+ */
433
+ label?: string;
434
+ };
435
+
445
436
  export type PostingResponseDto = {
446
437
  /**
447
438
  * Account name
@@ -455,6 +446,10 @@ export type PostingResponseDto = {
455
446
  * Currency
456
447
  */
457
448
  currency?: string;
449
+ /**
450
+ * Booking-resolved cost (mirrors engine Cost). Undefined when the posting has no cost basis.
451
+ */
452
+ cost?: CostDetailDto;
458
453
  };
459
454
 
460
455
  export type RecurringSuggestionDto = {
@@ -698,6 +693,10 @@ export type PostingDetailDto = {
698
693
  * Cost date
699
694
  */
700
695
  costDate?: string;
696
+ /**
697
+ * Booking-resolved cost (mirrors engine Cost). Undefined when the posting has no cost basis.
698
+ */
699
+ cost?: CostDetailDto;
701
700
  /**
702
701
  * Price amount
703
702
  */
@@ -821,6 +820,51 @@ export type flag2 =
821
820
  */
822
821
  export type status2 = 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
823
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
+
824
868
  export type TransactionListResponseDto = {
825
869
  /**
826
870
  * List of transactions
@@ -838,6 +882,10 @@ export type TransactionListResponseDto = {
838
882
  * Number of items skipped
839
883
  */
840
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;
841
889
  };
842
890
 
843
891
  export type TagSuggestionDto = {
@@ -1297,17 +1345,17 @@ export type ResolveResultDto = {
1297
1345
  [key: string]: string;
1298
1346
  };
1299
1347
  /**
1300
- * Resolution ID for undo
1348
+ * Resolution ID for undo. Absent when the resolver rejected the decision (review stayed PENDING).
1301
1349
  */
1302
- resolutionId: string;
1350
+ resolutionId?: string;
1303
1351
  /**
1304
1352
  * Whether this decision can be undone
1305
1353
  */
1306
- canUndo: boolean;
1354
+ canUndo?: boolean;
1307
1355
  /**
1308
1356
  * Deadline for undo (24h from resolution)
1309
1357
  */
1310
- undoDeadline: string;
1358
+ undoDeadline?: string;
1311
1359
  /**
1312
1360
  * Rule ID if learning was triggered (ACCEPT_AND_LEARN actions). Use this to deep-link to the rule management page.
1313
1361
  */
@@ -1890,6 +1938,108 @@ export type UpdateCommodityDto = {
1890
1938
  };
1891
1939
  };
1892
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
+
1893
2043
  export type CreateRecurringRuleDto = {
1894
2044
  /**
1895
2045
  * Rule name (unique per user)
@@ -3002,87 +3152,331 @@ export type UpdatePropertyDto = {
3002
3152
  value: string;
3003
3153
  };
3004
3154
 
3005
- export type FileImportDto = {
3155
+ export type CreateBeanEventDto = {
3006
3156
  /**
3007
- * Bill file to import (CSV, PDF, OFX, etc.)
3157
+ * Life event date (ISO 8601)
3008
3158
  */
3009
- file: Blob | File;
3010
- };
3011
-
3012
- export type ImportErrorDto = {
3159
+ date: string;
3013
3160
  /**
3014
- * 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
3015
3162
  */
3016
- index: number;
3163
+ type: string;
3017
3164
  /**
3018
- * Error message
3165
+ * Life event description. Empty string is a VALID value (distinct from absence).
3019
3166
  */
3020
- 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
+ };
3021
3174
  };
3022
3175
 
3023
- export type ReviewItemPreviewDto = {
3176
+ export type EventResponseDto = {
3024
3177
  /**
3025
- * Index in the import batch (for tracking)
3178
+ * Unique identifier
3026
3179
  */
3027
- index: number;
3180
+ id: string;
3028
3181
  /**
3029
- * Transaction date (ISO format)
3182
+ * User ID (owner of the life event)
3030
3183
  */
3031
- date: string;
3184
+ userId: string;
3032
3185
  /**
3033
- * Transaction amount (absolute value)
3186
+ * Life event date (ISO 8601 format)
3034
3187
  */
3035
- amount?: number;
3188
+ date: string;
3036
3189
  /**
3037
- * Currency code
3190
+ * Life event type (user-defined, e.g., "employer", "location")
3038
3191
  */
3039
- currency?: string;
3192
+ type: string;
3040
3193
  /**
3041
- * Transaction narration/description
3194
+ * Life event description. May be an empty string (a valid value distinct from absence).
3042
3195
  */
3043
- narration: string;
3196
+ description: string;
3044
3197
  /**
3045
- * Payee name
3198
+ * Product-side metadata (free-form JSON)
3046
3199
  */
3047
- payee?: string;
3200
+ meta: {
3201
+ [key: string]: unknown;
3202
+ };
3048
3203
  /**
3049
- * Inferred category from rule matching
3204
+ * Creation timestamp
3050
3205
  */
3051
- category?: string;
3206
+ createdAt: string;
3052
3207
  /**
3053
- * Confidence score for the match (0-1)
3208
+ * Last update timestamp. Also emitted as the ETag response header for If-Match optimistic concurrency.
3054
3209
  */
3055
- confidence?: number;
3210
+ updatedAt: string;
3211
+ };
3212
+
3213
+ export type EventListResponseDto = {
3056
3214
  /**
3057
- * Type of branch requiring review
3215
+ * List of life events
3058
3216
  */
3059
- branchType?:
3060
- | 'DUPLICATE'
3061
- | 'PAYEE_MATCH'
3062
- | 'RULE_MATCH'
3063
- | 'ACCOUNT_VALIDATION'
3064
- | 'PIPELINE_ERROR';
3217
+ items: Array<EventResponseDto>;
3065
3218
  /**
3066
- * Human-readable reasons for requiring review
3219
+ * Total number of life events matching the query
3067
3220
  */
3068
- reasons?: Array<string>;
3221
+ total: number;
3069
3222
  };
3070
3223
 
3071
- /**
3072
- * Type of branch requiring review
3073
- */
3074
- export type branchType =
3075
- | 'DUPLICATE'
3076
- | 'PAYEE_MATCH'
3077
- | 'RULE_MATCH'
3078
- | 'ACCOUNT_VALIDATION'
3079
- | 'PIPELINE_ERROR';
3080
-
3081
- export type ImportResultDto = {
3224
+ export type UpdateBeanEventDto = {
3082
3225
  /**
3083
- * Number of successfully imported transactions
3226
+ * Life event date (ISO 8601)
3084
3227
  */
3085
- imported: number;
3228
+ date?: string;
3229
+ /**
3230
+ * Life event type (user-defined)
3231
+ */
3232
+ type?: string;
3233
+ /**
3234
+ * Life event description. Empty string is a VALID value (distinct from absence).
3235
+ */
3236
+ description?: string;
3237
+ /**
3238
+ * Product-side metadata (free-form JSON)
3239
+ */
3240
+ meta?: {
3241
+ [key: string]: unknown;
3242
+ };
3243
+ };
3244
+
3245
+ export type OnboardingAccountDto = {
3246
+ /**
3247
+ * Account path (Assets/Liabilities only; format validated by the account service)
3248
+ */
3249
+ path: string;
3250
+ /**
3251
+ * ISO 4217 currency code (3 letters)
3252
+ */
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;
3086
3480
  /**
3087
3481
  * Number of failed transactions
3088
3482
  */
@@ -3277,115 +3671,27 @@ export type UpdateMapperDefaultsDto = {
3277
3671
  /**
3278
3672
  * Default income account (optional)
3279
3673
  */
3280
- incomeAccount?: string;
3281
- /**
3282
- * 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).
3283
- */
3284
- methodAccountMapping?: {
3285
- [key: string]: unknown;
3286
- };
3287
- };
3288
-
3289
- export type UpdateConfigDataDto = {
3290
- /**
3291
- * Mapper defaults configuration
3292
- */
3293
- defaults?: UpdateMapperDefaultsDto;
3294
- };
3295
-
3296
- export type UpdateImporterConfigDto = {
3297
- /**
3298
- * Configuration data (v1 schema)
3299
- */
3300
- data?: UpdateConfigDataDto;
3301
- };
3302
-
3303
- export type CreatePlatformDto = {
3304
- /**
3305
- * Platform name
3306
- */
3307
- name: string;
3308
- /**
3309
- * Platform canonical identifier (lowercase, kebab-case)
3310
- */
3311
- canonical: string;
3312
- /**
3313
- * Platform aliases (multi-language names for lookup)
3314
- */
3315
- aliases: Array<string>;
3316
- /**
3317
- * Platform URL
3318
- */
3319
- url: string;
3320
- /**
3321
- * Platform type
3322
- */
3323
- type:
3324
- | 'BANK'
3325
- | 'BROKERAGE'
3326
- | 'CRYPTO_EXCHANGE'
3327
- | 'PAYMENT'
3328
- | 'INVESTMENT'
3329
- | 'INSURANCE'
3330
- | 'OTHER';
3331
- /**
3332
- * Platform logo URL
3333
- */
3334
- logoUrl?: string;
3335
- /**
3336
- * Whether the platform is active
3337
- */
3338
- isActive?: boolean;
3339
- };
3340
-
3341
- /**
3342
- * Platform type
3343
- */
3344
- export type type3 =
3345
- | 'BANK'
3346
- | 'BROKERAGE'
3347
- | 'CRYPTO_EXCHANGE'
3348
- | 'PAYMENT'
3349
- | 'INVESTMENT'
3350
- | 'INSURANCE'
3351
- | 'OTHER';
3352
-
3353
- export type UpdatePlatformDto = {
3354
- /**
3355
- * Platform name
3356
- */
3357
- name?: string;
3358
- /**
3359
- * Platform canonical identifier (lowercase, kebab-case)
3360
- */
3361
- canonical?: string;
3362
- /**
3363
- * Platform aliases (multi-language names for lookup)
3364
- */
3365
- aliases?: Array<string>;
3366
- /**
3367
- * Platform URL
3368
- */
3369
- url?: string;
3370
- /**
3371
- * Platform type
3372
- */
3373
- type?:
3374
- | 'BANK'
3375
- | 'BROKERAGE'
3376
- | 'CRYPTO_EXCHANGE'
3377
- | 'PAYMENT'
3378
- | 'INVESTMENT'
3379
- | 'INSURANCE'
3380
- | 'OTHER';
3674
+ incomeAccount?: string;
3381
3675
  /**
3382
- * 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).
3383
3677
  */
3384
- logoUrl?: string;
3678
+ methodAccountMapping?: {
3679
+ [key: string]: unknown;
3680
+ };
3681
+ };
3682
+
3683
+ export type UpdateConfigDataDto = {
3385
3684
  /**
3386
- * Whether the platform is active
3685
+ * Mapper defaults configuration
3387
3686
  */
3388
- isActive?: boolean;
3687
+ defaults?: UpdateMapperDefaultsDto;
3688
+ };
3689
+
3690
+ export type UpdateImporterConfigDto = {
3691
+ /**
3692
+ * Configuration data (v1 schema)
3693
+ */
3694
+ data?: UpdateConfigDataDto;
3389
3695
  };
3390
3696
 
3391
3697
  export type ProviderSyncConfigDto = {
@@ -3409,6 +3715,10 @@ export type ProviderSyncConfigDto = {
3409
3715
  * Filter pending transactions
3410
3716
  */
3411
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;
3412
3722
  };
3413
3723
 
3414
3724
  export type ProviderSyncDto = {
@@ -3464,6 +3774,61 @@ export type SupportedProvidersResponseDto = {
3464
3774
  providers: Array<string>;
3465
3775
  };
3466
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
+
3467
3832
  export type ParserTelemetryReportDto = unknown;
3468
3833
 
3469
3834
  export type UncoveredFormatMissDto = unknown;
@@ -4043,15 +4408,92 @@ export type liabilitySubType = 'borrow' | 'repay';
4043
4408
  */
4044
4409
  export type equitySubType = 'opening' | 'adjustment';
4045
4410
 
4046
- export type BalanceByCurrencyDto = {
4411
+ export type CreatePlatformDto = {
4047
4412
  /**
4048
- * ISO 4217 currency code
4413
+ * Platform name
4049
4414
  */
4050
- currency: string;
4415
+ name: string;
4051
4416
  /**
4052
- * Balance amount
4417
+ * Platform canonical identifier (lowercase, kebab-case)
4053
4418
  */
4054
- 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;
4055
4497
  };
4056
4498
 
4057
4499
  export type NetWorthByCurrencyDto = {
@@ -4094,21 +4536,6 @@ export type ConvertedNetWorthDto = {
4094
4536
  };
4095
4537
  };
4096
4538
 
4097
- export type ExchangeRateWarningDto = {
4098
- /**
4099
- * Warning type
4100
- */
4101
- type: string;
4102
- /**
4103
- * Currency without exchange rate
4104
- */
4105
- currency: string;
4106
- /**
4107
- * Total amount affected
4108
- */
4109
- totalAmount: string;
4110
- };
4111
-
4112
4539
  export type NetWorthResponseDto = {
4113
4540
  /**
4114
4541
  * Total net worth (assets - liabilities, converted to base currency)
@@ -4173,6 +4600,10 @@ export type AccountItemDto = {
4173
4600
  * Currency code
4174
4601
  */
4175
4602
  currency: string;
4603
+ /**
4604
+ * FX-converted balance in base currency; omitted when not convertible
4605
+ */
4606
+ convertedBalance?: string;
4176
4607
  };
4177
4608
 
4178
4609
  export type PlatformGroupDto = {
@@ -4189,9 +4620,40 @@ export type PlatformGroupDto = {
4189
4620
  */
4190
4621
  accounts: Array<AccountItemDto>;
4191
4622
  /**
4192
- * Total balance across all accounts in platform
4623
+ * FX-converted total balance in base currency
4193
4624
  */
4194
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;
4195
4657
  };
4196
4658
 
4197
4659
  export type AccountsSummaryDto = {
@@ -4203,6 +4665,14 @@ export type AccountsSummaryDto = {
4203
4665
  * Total number of platforms
4204
4666
  */
4205
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>;
4206
4676
  };
4207
4677
 
4208
4678
  export type AccountsResponseDto = {
@@ -4237,6 +4707,10 @@ export type AccountItemWithAssetClassDto = {
4237
4707
  * Currency code
4238
4708
  */
4239
4709
  currency: string;
4710
+ /**
4711
+ * FX-converted balance in base currency; omitted when not convertible
4712
+ */
4713
+ convertedBalance?: string;
4240
4714
  /**
4241
4715
  * Asset class
4242
4716
  */
@@ -4318,25 +4792,6 @@ export type assetClass =
4318
4792
  | 'REAL_ESTATE'
4319
4793
  | 'INDEX';
4320
4794
 
4321
- export type AccountExchangeRateWarningDto = {
4322
- /**
4323
- * Warning type
4324
- */
4325
- type: string;
4326
- /**
4327
- * Currency without exchange rate
4328
- */
4329
- currency: string;
4330
- /**
4331
- * Affected account paths
4332
- */
4333
- accounts: Array<string>;
4334
- /**
4335
- * Total amount in this currency
4336
- */
4337
- totalAmount: string;
4338
- };
4339
-
4340
4795
  export type AssetClassSummaryDto = {
4341
4796
  /**
4342
4797
  * Total number of accounts
@@ -4481,23 +4936,80 @@ export type CashFlowResponseDto = {
4481
4936
  */
4482
4937
  netSavings: string;
4483
4938
  /**
4484
- * 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
4485
4997
  */
4486
- savingsRate: string;
4998
+ period: string;
4487
4999
  /**
4488
- * Base currency code
5000
+ * Base currency for converted values
4489
5001
  */
4490
- currency: string;
5002
+ baseCurrency: string;
4491
5003
  /**
4492
- * Cash flow grouped by original currency
5004
+ * Expense groups by functional category, sorted by converted total desc
4493
5005
  */
4494
- byCurrency?: CashFlowByCurrencyDto;
5006
+ groups: Array<CategoryGroupDto>;
4495
5007
  /**
4496
- * Converted values in base currency
5008
+ * Summary statistics
4497
5009
  */
4498
- converted?: ConvertedCashFlowDto;
5010
+ summary: ExpensesByCategorySummaryDto;
4499
5011
  /**
4500
- * Exchange rate warnings
5012
+ * Exchange rate warnings (e.g. missing rate for a currency)
4501
5013
  */
4502
5014
  warnings?: Array<ExchangeRateWarningDto>;
4503
5015
  };
@@ -4697,108 +5209,6 @@ export type HoldingPnlResponseDto = {
4697
5209
  */
4698
5210
  export type method = 'average' | 'FIFO';
4699
5211
 
4700
- export type CreateBeanPriceDto = {
4701
- /**
4702
- * Currency being priced (e.g., USD, AAPL, BTC)
4703
- */
4704
- currency: string;
4705
- /**
4706
- * Quote currency (pricing currency, e.g., CNY, EUR)
4707
- */
4708
- quoteCurrency: string;
4709
- /**
4710
- * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
4711
- */
4712
- amount: number;
4713
- /**
4714
- * Price date (ISO 8601 format)
4715
- */
4716
- date: string;
4717
- /**
4718
- * Metadata (validated by Zod schema, max field lengths enforced)
4719
- */
4720
- metadata?: {
4721
- [key: string]: unknown;
4722
- };
4723
- };
4724
-
4725
- export type PriceResponseDto = {
4726
- /**
4727
- * Unique identifier
4728
- */
4729
- id: string;
4730
- /**
4731
- * User ID (owner of the price)
4732
- */
4733
- userId: string;
4734
- /**
4735
- * Currency being priced (e.g., USD, AAPL, BTC)
4736
- */
4737
- currency: string;
4738
- /**
4739
- * Quote currency (pricing currency, e.g., USD, CNY)
4740
- */
4741
- quoteCurrency: string;
4742
- /**
4743
- * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
4744
- */
4745
- amount: number;
4746
- /**
4747
- * Price date (ISO 8601 format). Represents the date this price was valid.
4748
- */
4749
- date: string;
4750
- /**
4751
- * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
4752
- */
4753
- meta: {
4754
- [key: string]: unknown;
4755
- };
4756
- /**
4757
- * Creation timestamp
4758
- */
4759
- createdAt: string;
4760
- /**
4761
- * Last update timestamp
4762
- */
4763
- updatedAt: string;
4764
- };
4765
-
4766
- export type PriceListResponseDto = {
4767
- /**
4768
- * List of prices
4769
- */
4770
- items: Array<PriceResponseDto>;
4771
- /**
4772
- * Total number of prices
4773
- */
4774
- total: number;
4775
- };
4776
-
4777
- export type UpdateBeanPriceDto = {
4778
- /**
4779
- * Currency being priced
4780
- */
4781
- currency?: string;
4782
- /**
4783
- * Quote currency (pricing currency)
4784
- */
4785
- quoteCurrency?: string;
4786
- /**
4787
- * Price amount (MUST be >= 0 per Beancount spec)
4788
- */
4789
- amount?: number;
4790
- /**
4791
- * Price date (ISO 8601 format)
4792
- */
4793
- date?: string;
4794
- /**
4795
- * Metadata
4796
- */
4797
- metadata?: {
4798
- [key: string]: unknown;
4799
- };
4800
- };
4801
-
4802
5212
  export type CurrencyBalanceDto = {
4803
5213
  /**
4804
5214
  * ISO 4217 currency code
@@ -4825,6 +5235,14 @@ export type TimeSeriesPointDto = {
4825
5235
  change?: {
4826
5236
  [key: string]: unknown;
4827
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;
4828
5246
  /**
4829
5247
  * Multi-currency breakdown for this point
4830
5248
  */
@@ -4892,6 +5310,71 @@ export type PortfolioTrendsResponseDto = {
4892
5310
  warnings?: Array<ExchangeRateWarningDto>;
4893
5311
  };
4894
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
+
4895
5378
  export type GenerateSnapshotBody = unknown;
4896
5379
 
4897
5380
  export type GenerateSnapshotResponse = unknown;
@@ -4935,7 +5418,7 @@ export type AccountControllerFindAllData = {
4935
5418
  */
4936
5419
  region: 'cn' | 'us' | 'de' | 'gb';
4937
5420
  /**
4938
- * Search term for path or i18nKey
5421
+ * Search term for account path
4939
5422
  */
4940
5423
  search?: string;
4941
5424
  /**
@@ -5078,6 +5561,10 @@ export type TransactionControllerListData = {
5078
5561
  * Filter by account ID (transactions with postings to this account)
5079
5562
  */
5080
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;
5081
5568
  /**
5082
5569
  * Filter by start date (inclusive), format: YYYY-MM-DD
5083
5570
  */
@@ -5202,7 +5689,7 @@ export type TransactionControllerDeleteResponse = void;
5202
5689
 
5203
5690
  export type BalanceControllerGetBalanceData = {
5204
5691
  /**
5205
- * Account name (e.g., "Assets:Bank:Checking")
5692
+ * Account name (e.g., "Assets:Checking")
5206
5693
  */
5207
5694
  account: string;
5208
5695
  /**
@@ -5512,97 +5999,194 @@ export type PayeeProfileAdminControllerUnverifyData = {
5512
5999
  id: string;
5513
6000
  };
5514
6001
 
5515
- export type PayeeProfileAdminControllerUnverifyResponse =
5516
- 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>;
5517
6093
 
5518
- export type CommodityControllerCreateData = {
6094
+ export type PriceControllerCreateData = {
5519
6095
  /**
5520
6096
  * Region code for tenant context
5521
6097
  */
5522
6098
  region: 'cn' | 'us' | 'de' | 'gb';
5523
- requestBody: CreateCommodityDto;
6099
+ requestBody: CreateBeanPriceDto;
5524
6100
  };
5525
6101
 
5526
- export type CommodityControllerCreateResponse = CommodityResponseDto;
6102
+ export type PriceControllerCreateResponse = PriceResponseDto;
5527
6103
 
5528
- export type CommodityControllerFindAllData = {
6104
+ export type PriceControllerFindAllData = {
5529
6105
  /**
5530
- * Region code for tenant context
6106
+ * Filter by currency (e.g., BTC, AAPL, USD)
5531
6107
  */
5532
- region: 'cn' | 'us' | 'de' | 'gb';
6108
+ currency?: string;
5533
6109
  /**
5534
- * Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
6110
+ * Filter prices from this date (ISO 8601 format)
5535
6111
  */
5536
- search?: string;
6112
+ dateFrom?: string;
5537
6113
  /**
5538
- * Filter by exact symbol match
6114
+ * Filter prices to this date (ISO 8601 format)
5539
6115
  */
5540
- symbol?: string;
5541
- };
5542
-
5543
- export type CommodityControllerFindAllResponse = CommodityListResponseDto;
5544
-
5545
- 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;
5546
6129
  /**
5547
6130
  * Region code for tenant context
5548
6131
  */
5549
6132
  region: 'cn' | 'us' | 'de' | 'gb';
5550
6133
  /**
5551
- * Commodity symbol
6134
+ * Search term for currency or quoteCurrency (case-insensitive partial match)
5552
6135
  */
5553
- symbol: string;
6136
+ search?: string;
5554
6137
  };
5555
6138
 
5556
- export type CommodityControllerFindOneResponse = CommodityResponseDto;
6139
+ export type PriceControllerFindAllResponse = PriceListResponseDto;
5557
6140
 
5558
- export type CommodityControllerUpdateData = {
6141
+ export type PriceControllerFindOneData = {
5559
6142
  /**
5560
- * Region code for tenant context
6143
+ * Price ID
5561
6144
  */
5562
- region: 'cn' | 'us' | 'de' | 'gb';
5563
- requestBody: UpdateCommodityDto;
6145
+ id: string;
5564
6146
  /**
5565
- * Commodity symbol
6147
+ * Region code for tenant context
5566
6148
  */
5567
- symbol: string;
6149
+ region: 'cn' | 'us' | 'de' | 'gb';
5568
6150
  };
5569
6151
 
5570
- export type CommodityControllerUpdateResponse = CommodityResponseDto;
6152
+ export type PriceControllerFindOneResponse = PriceResponseDto;
5571
6153
 
5572
- export type CommodityControllerDeleteData = {
6154
+ export type PriceControllerUpdateData = {
5573
6155
  /**
5574
- * Region code for tenant context
6156
+ * Price ID
5575
6157
  */
5576
- region: 'cn' | 'us' | 'de' | 'gb';
6158
+ id: string;
5577
6159
  /**
5578
- * Commodity symbol
6160
+ * Region code for tenant context
5579
6161
  */
5580
- symbol: string;
6162
+ region: 'cn' | 'us' | 'de' | 'gb';
6163
+ requestBody: UpdateBeanPriceDto;
5581
6164
  };
5582
6165
 
5583
- export type CommodityControllerDeleteResponse = void;
6166
+ export type PriceControllerUpdateResponse = PriceResponseDto;
5584
6167
 
5585
- export type CommodityControllerGetOrCreateData = {
6168
+ export type PriceControllerDeleteData = {
5586
6169
  /**
5587
- * Region code for tenant context
6170
+ * Price ID
5588
6171
  */
5589
- region: 'cn' | 'us' | 'de' | 'gb';
6172
+ id: string;
5590
6173
  /**
5591
- * Commodity symbol
6174
+ * Region code for tenant context
5592
6175
  */
5593
- symbol: string;
6176
+ region: 'cn' | 'us' | 'de' | 'gb';
5594
6177
  };
5595
6178
 
5596
- export type CommodityControllerGetOrCreateResponse = CommodityResponseDto;
6179
+ export type PriceControllerDeleteResponse = void;
5597
6180
 
5598
- export type CommodityControllerBulkCreateData = {
6181
+ export type PriceControllerBulkCreateData = {
5599
6182
  /**
5600
6183
  * Region code for tenant context
5601
6184
  */
5602
6185
  region: 'cn' | 'us' | 'de' | 'gb';
6186
+ requestBody: Array<string>;
5603
6187
  };
5604
6188
 
5605
- export type CommodityControllerBulkCreateResponse = Array<CommodityResponseDto>;
6189
+ export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
5606
6190
 
5607
6191
  export type RecurringRuleControllerCreateData = {
5608
6192
  /**
@@ -6069,6 +6653,159 @@ export type PropertyControllerDeleteData = {
6069
6653
 
6070
6654
  export type PropertyControllerDeleteResponse = void;
6071
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
+
6072
6809
  export type ExportControllerExportBeancountResponse = unknown;
6073
6810
 
6074
6811
  export type FileImportControllerImportFileData = {
@@ -6161,92 +6898,93 @@ export type ImporterConfigControllerResetConfigData = {
6161
6898
 
6162
6899
  export type ImporterConfigControllerResetConfigResponse = ImporterConfigDto;
6163
6900
 
6164
- export type PlatformControllerFindAllResponse = unknown;
6165
-
6166
- export type PlatformControllerCreateData = {
6167
- requestBody: CreatePlatformDto;
6168
- };
6169
-
6170
- export type PlatformControllerCreateResponse = unknown;
6171
-
6172
- export type PlatformControllerGetPlatformListResponse = unknown;
6173
-
6174
- export type PlatformControllerMatchPlatformsData = {
6901
+ export type ProviderSyncControllerSyncData = {
6175
6902
  /**
6176
- * Search query — Chinese name, English name, or abbreviation
6903
+ * Provider name
6177
6904
  */
6178
- q: string;
6905
+ providerName:
6906
+ | 'plaid'
6907
+ | 'teller'
6908
+ | 'truelayer'
6909
+ | 'gocardless'
6910
+ | 'simplefin'
6911
+ | 'yodlee'
6912
+ | 'beancount-direct'
6913
+ | 'parsed-bill';
6179
6914
  /**
6180
- * Region code for category override lookup
6915
+ * Region code for tenant context
6181
6916
  */
6182
- region?: string;
6917
+ region: 'cn' | 'us' | 'de' | 'gb';
6918
+ requestBody: ProviderSyncDto;
6183
6919
  };
6184
6920
 
6185
- export type PlatformControllerMatchPlatformsResponse = unknown;
6921
+ export type ProviderSyncControllerSyncResponse = ProviderSyncResponseDto;
6186
6922
 
6187
- export type PlatformControllerUpdateData = {
6923
+ export type ProviderSyncControllerGetSupportedProvidersData = {
6188
6924
  /**
6189
- * Platform ID
6925
+ * Region code for tenant context
6190
6926
  */
6191
- id: string;
6192
- requestBody: UpdatePlatformDto;
6927
+ region: 'cn' | 'us' | 'de' | 'gb';
6193
6928
  };
6194
6929
 
6195
- export type PlatformControllerUpdateResponse = unknown;
6930
+ export type ProviderSyncControllerGetSupportedProvidersResponse =
6931
+ SupportedProvidersResponseDto;
6196
6932
 
6197
- export type PlatformControllerDeleteData = {
6933
+ export type ProviderSyncControllerIsProviderSupportedData = {
6198
6934
  /**
6199
- * Platform ID
6935
+ * Provider name to check
6200
6936
  */
6201
- id: string;
6202
- };
6203
-
6204
- export type PlatformControllerDeleteResponse = void;
6205
-
6206
- export type ProviderSyncControllerSyncData = {
6937
+ providerName: string;
6207
6938
  /**
6208
- * Provider name
6939
+ * Region code for tenant context
6209
6940
  */
6210
- providerName:
6211
- | 'plaid'
6212
- | 'teller'
6213
- | 'truelayer'
6214
- | 'gocardless'
6215
- | 'simplefin'
6216
- | 'yodlee'
6217
- | 'beancount-direct'
6218
- | 'parsed-bill';
6941
+ region: 'cn' | 'us' | 'de' | 'gb';
6942
+ };
6943
+
6944
+ export type ProviderSyncControllerIsProviderSupportedResponse = unknown;
6945
+
6946
+ export type ExternalAccountLinkControllerCreateData = {
6219
6947
  /**
6220
6948
  * Region code for tenant context
6221
6949
  */
6222
6950
  region: 'cn' | 'us' | 'de' | 'gb';
6223
- requestBody: ProviderSyncDto;
6951
+ requestBody: CreateExternalAccountLinkDto;
6224
6952
  };
6225
6953
 
6226
- export type ProviderSyncControllerSyncResponse = ProviderSyncResponseDto;
6954
+ export type ExternalAccountLinkControllerCreateResponse =
6955
+ ExternalAccountLinkResponseDto;
6227
6956
 
6228
- export type ProviderSyncControllerGetSupportedProvidersData = {
6957
+ export type ExternalAccountLinkControllerFindAllData = {
6958
+ provider: string;
6229
6959
  /**
6230
6960
  * Region code for tenant context
6231
6961
  */
6232
6962
  region: 'cn' | 'us' | 'de' | 'gb';
6233
6963
  };
6234
6964
 
6235
- export type ProviderSyncControllerGetSupportedProvidersResponse =
6236
- SupportedProvidersResponseDto;
6965
+ export type ExternalAccountLinkControllerFindAllResponse =
6966
+ ExternalAccountLinkListResponseDto;
6237
6967
 
6238
- export type ProviderSyncControllerIsProviderSupportedData = {
6968
+ export type ExternalAccountLinkControllerFindOneData = {
6969
+ id: string;
6239
6970
  /**
6240
- * Provider name to check
6971
+ * Region code for tenant context
6241
6972
  */
6242
- providerName: string;
6973
+ region: 'cn' | 'us' | 'de' | 'gb';
6974
+ };
6975
+
6976
+ export type ExternalAccountLinkControllerFindOneResponse =
6977
+ ExternalAccountLinkResponseDto;
6978
+
6979
+ export type ExternalAccountLinkControllerRemoveData = {
6980
+ id: string;
6243
6981
  /**
6244
6982
  * Region code for tenant context
6245
6983
  */
6246
6984
  region: 'cn' | 'us' | 'de' | 'gb';
6247
6985
  };
6248
6986
 
6249
- export type ProviderSyncControllerIsProviderSupportedResponse = unknown;
6987
+ export type ExternalAccountLinkControllerRemoveResponse = void;
6250
6988
 
6251
6989
  export type TelemetryControllerReportTelemetryData = {
6252
6990
  /**
@@ -6320,6 +7058,48 @@ export type NlpControllerGetSessionData = {
6320
7058
 
6321
7059
  export type NlpControllerGetSessionResponse = unknown;
6322
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
+
6323
7103
  export type DashboardControllerGetNetWorthData = {
6324
7104
  /**
6325
7105
  * Date for balance calculation (ISO 8601 format)
@@ -6374,127 +7154,70 @@ export type DashboardControllerGetCashFlowData = {
6374
7154
 
6375
7155
  export type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
6376
7156
 
6377
- export type HoldingPnlControllerGetHoldingPnlData = {
6378
- /**
6379
- * Scope to a single account
6380
- */
6381
- accountId?: string;
6382
- /**
6383
- * As-of date (ISO 8601), defaults to today
6384
- */
6385
- asOf?: string;
6386
- /**
6387
- * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6388
- */
6389
- method?: 'FIFO' | 'average';
6390
- /**
6391
- * Region code for tenant context
6392
- */
6393
- region: 'cn' | 'us' | 'de' | 'gb';
6394
- };
6395
-
6396
- export type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6397
-
6398
- export type PriceControllerCreateData = {
6399
- /**
6400
- * Region code for tenant context
6401
- */
6402
- region: 'cn' | 'us' | 'de' | 'gb';
6403
- requestBody: CreateBeanPriceDto;
6404
- };
6405
-
6406
- export type PriceControllerCreateResponse = PriceResponseDto;
6407
-
6408
- export type PriceControllerFindAllData = {
6409
- /**
6410
- * Filter by currency (e.g., BTC, AAPL, USD)
6411
- */
6412
- currency?: string;
7157
+ export type DashboardControllerGetExpensesData = {
6413
7158
  /**
6414
- * Filter prices from this date (ISO 8601 format)
6415
- */
6416
- dateFrom?: string;
6417
- /**
6418
- * Filter prices to this date (ISO 8601 format)
6419
- */
6420
- dateTo?: string;
6421
- /**
6422
- * Number of items per page (default: 20, max: 100)
7159
+ * Account root to aggregate (expense ^Expenses:, income → ^Income:)
6423
7160
  */
6424
- limit?: number;
7161
+ flow?: 'expense' | 'income';
6425
7162
  /**
6426
- * Page number for pagination (default: 1)
7163
+ * Grouping strategy
6427
7164
  */
6428
- page?: number;
7165
+ groupBy?: 'category';
6429
7166
  /**
6430
- * Filter by quote currency (pricing currency, e.g., USD, CNY)
7167
+ * Time window (1m = current calendar month)
6431
7168
  */
6432
- quoteCurrency?: string;
7169
+ period?: '1m' | '3m' | '6m' | '1y';
6433
7170
  /**
6434
7171
  * Region code for tenant context
6435
7172
  */
6436
7173
  region: 'cn' | 'us' | 'de' | 'gb';
6437
- /**
6438
- * Search term for currency or quoteCurrency (case-insensitive partial match)
6439
- */
6440
- search?: string;
6441
7174
  };
6442
7175
 
6443
- export type PriceControllerFindAllResponse = PriceListResponseDto;
7176
+ export type DashboardControllerGetExpensesResponse =
7177
+ ExpensesByCategoryResponseDto;
6444
7178
 
6445
- export type PriceControllerFindOneData = {
7179
+ export type HoldingPnlControllerGetHoldingPnlData = {
6446
7180
  /**
6447
- * Price ID
7181
+ * Scope to a single account
6448
7182
  */
6449
- id: string;
7183
+ accountId?: string;
6450
7184
  /**
6451
- * Region code for tenant context
7185
+ * As-of date (ISO 8601), defaults to today
6452
7186
  */
6453
- region: 'cn' | 'us' | 'de' | 'gb';
6454
- };
6455
-
6456
- export type PriceControllerFindOneResponse = PriceResponseDto;
6457
-
6458
- export type PriceControllerUpdateData = {
7187
+ asOf?: string;
6459
7188
  /**
6460
- * Price ID
7189
+ * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6461
7190
  */
6462
- id: string;
7191
+ method?: 'FIFO' | 'average';
6463
7192
  /**
6464
7193
  * Region code for tenant context
6465
7194
  */
6466
7195
  region: 'cn' | 'us' | 'de' | 'gb';
6467
- requestBody: UpdateBeanPriceDto;
6468
7196
  };
6469
7197
 
6470
- export type PriceControllerUpdateResponse = PriceResponseDto;
7198
+ export type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6471
7199
 
6472
- export type PriceControllerDeleteData = {
7200
+ export type ReportingControllerGetPortfolioTrendsData = {
6473
7201
  /**
6474
- * Price ID
7202
+ * Data granularity
6475
7203
  */
6476
- id: string;
7204
+ granularity?: 'day' | 'week' | 'month';
6477
7205
  /**
6478
- * Region code for tenant context
7206
+ * Time period
6479
7207
  */
6480
- region: 'cn' | 'us' | 'de' | 'gb';
6481
- };
6482
-
6483
- export type PriceControllerDeleteResponse = void;
6484
-
6485
- export type PriceControllerBulkCreateData = {
7208
+ period?: '1m' | '3m' | '6m' | '1y';
6486
7209
  /**
6487
7210
  * Region code for tenant context
6488
7211
  */
6489
7212
  region: 'cn' | 'us' | 'de' | 'gb';
6490
- requestBody: Array<string>;
6491
7213
  };
6492
7214
 
6493
- export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
7215
+ export type ReportingControllerGetPortfolioTrendsResponse =
7216
+ PortfolioTrendsResponseDto;
6494
7217
 
6495
- export type ReportingControllerGetPortfolioTrendsData = {
7218
+ export type ReportingControllerGetCashFlowTrendsData = {
6496
7219
  /**
6497
- * Data granularity
7220
+ * Data granularity (accepted for API symmetry; v1 returns month buckets)
6498
7221
  */
6499
7222
  granularity?: 'day' | 'week' | 'month';
6500
7223
  /**
@@ -6507,8 +7230,8 @@ export type ReportingControllerGetPortfolioTrendsData = {
6507
7230
  region: 'cn' | 'us' | 'de' | 'gb';
6508
7231
  };
6509
7232
 
6510
- export type ReportingControllerGetPortfolioTrendsResponse =
6511
- PortfolioTrendsResponseDto;
7233
+ export type ReportingControllerGetCashFlowTrendsResponse =
7234
+ CashFlowTrendsResponseDto;
6512
7235
 
6513
7236
  export type ReportingControllerGenerateSnapshotData = {
6514
7237
  /**
@@ -7235,65 +7958,149 @@ export type $OpenApiTs = {
7235
7958
  req: CommodityControllerFindOneData;
7236
7959
  res: {
7237
7960
  /**
7238
- * 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
7239
8057
  */
7240
- 200: CommodityResponseDto;
8058
+ 200: PriceResponseDto;
7241
8059
  /**
7242
- * Commodity not found
8060
+ * Price not found
7243
8061
  */
7244
- 404: ApiProblemResponseDto;
8062
+ 404: unknown;
7245
8063
  };
7246
8064
  };
7247
8065
  put: {
7248
- req: CommodityControllerUpdateData;
8066
+ req: PriceControllerUpdateData;
7249
8067
  res: {
7250
8068
  /**
7251
- * Commodity updated successfully
8069
+ * Price updated successfully
7252
8070
  */
7253
- 200: CommodityResponseDto;
8071
+ 200: PriceResponseDto;
7254
8072
  /**
7255
- * Invalid input data
8073
+ * Price not found
7256
8074
  */
7257
- 400: ApiProblemResponseDto;
8075
+ 404: unknown;
7258
8076
  /**
7259
- * Commodity not found
8077
+ * Updated price conflicts with existing price
7260
8078
  */
7261
- 404: ApiProblemResponseDto;
8079
+ 409: unknown;
7262
8080
  };
7263
8081
  };
7264
8082
  delete: {
7265
- req: CommodityControllerDeleteData;
8083
+ req: PriceControllerDeleteData;
7266
8084
  res: {
7267
8085
  /**
7268
- * Commodity deleted successfully
8086
+ * Price deleted successfully
7269
8087
  */
7270
8088
  204: void;
7271
8089
  /**
7272
- * Commodity not found
7273
- */
7274
- 404: ApiProblemResponseDto;
7275
- };
7276
- };
7277
- };
7278
- '/api/v1/{region}/bean/commodities/{symbol}/ensure': {
7279
- post: {
7280
- req: CommodityControllerGetOrCreateData;
7281
- res: {
7282
- /**
7283
- * Commodity retrieved or created
8090
+ * Price not found
7284
8091
  */
7285
- 200: CommodityResponseDto;
8092
+ 404: unknown;
7286
8093
  };
7287
8094
  };
7288
8095
  };
7289
- '/api/v1/{region}/bean/commodities/bulk': {
8096
+ '/api/v1/{region}/bean/prices/bulk': {
7290
8097
  post: {
7291
- req: CommodityControllerBulkCreateData;
8098
+ req: PriceControllerBulkCreateData;
7292
8099
  res: {
7293
8100
  /**
7294
- * Commodities created successfully
8101
+ * Prices created successfully
7295
8102
  */
7296
- 201: Array<CommodityResponseDto>;
8103
+ 201: Array<PriceResponseDto>;
7297
8104
  };
7298
8105
  };
7299
8106
  };
@@ -7941,6 +8748,181 @@ export type $OpenApiTs = {
7941
8748
  };
7942
8749
  };
7943
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
+ };
7944
8926
  '/api/v1/{region}/bean/export/beancount': {
7945
8927
  get: {
7946
8928
  res: {
@@ -8025,141 +9007,69 @@ export type $OpenApiTs = {
8025
9007
  * Beancount file imported successfully
8026
9008
  */
8027
9009
  200: {
8028
- imported?: number;
8029
- skipped?: number;
8030
- failed?: number;
8031
- accountsCreated?: number;
8032
- errors?: Array<{
8033
- [key: string]: unknown;
8034
- }>;
8035
- };
8036
- /**
8037
- * Bad request - invalid file or no file uploaded
8038
- */
8039
- 400: ApiProblemResponseDto;
8040
- };
8041
- };
8042
- };
8043
- '/api/v1/{region}/bean/import/config/{importerId}': {
8044
- get: {
8045
- req: ImporterConfigControllerGetConfigData;
8046
- res: {
8047
- /**
8048
- * Configuration retrieved successfully
8049
- */
8050
- 200: ImporterConfigDto;
8051
- /**
8052
- * Invalid input - Unsupported importer
8053
- */
8054
- 400: ApiProblemResponseDto;
8055
- /**
8056
- * Unauthorized - Authentication required
8057
- */
8058
- 401: ApiProblemResponseDto;
8059
- };
8060
- };
8061
- put: {
8062
- req: ImporterConfigControllerUpdateConfigData;
8063
- res: {
8064
- /**
8065
- * Configuration updated successfully
8066
- */
8067
- 200: ImporterConfigDto;
8068
- /**
8069
- * Invalid input - Validation failed
8070
- */
8071
- 400: ApiProblemResponseDto;
8072
- /**
8073
- * Configuration not found
8074
- */
8075
- 404: ApiProblemResponseDto;
8076
- };
8077
- };
8078
- };
8079
- '/api/v1/{region}/bean/import/config/{importerId}/reset': {
8080
- post: {
8081
- req: ImporterConfigControllerResetConfigData;
8082
- res: {
8083
- /**
8084
- * Configuration reset successfully
8085
- */
8086
- 200: ImporterConfigDto;
8087
- /**
8088
- * Invalid input - Unsupported importer
8089
- */
8090
- 400: ApiProblemResponseDto;
8091
- };
8092
- };
8093
- };
8094
- '/api/v1/bean/platforms': {
8095
- get: {
8096
- res: {
8097
- /**
8098
- * List of platforms with binding and account counts
8099
- */
8100
- 200: unknown;
8101
- };
8102
- };
8103
- post: {
8104
- req: PlatformControllerCreateData;
8105
- res: {
8106
- /**
8107
- * Platform created successfully
8108
- */
8109
- 201: unknown;
9010
+ imported?: number;
9011
+ skipped?: number;
9012
+ failed?: number;
9013
+ accountsCreated?: number;
9014
+ errors?: Array<{
9015
+ [key: string]: unknown;
9016
+ }>;
9017
+ };
8110
9018
  /**
8111
- * Platform already exists
9019
+ * Bad request - invalid file or no file uploaded
8112
9020
  */
8113
- 409: unknown;
9021
+ 400: ApiProblemResponseDto;
8114
9022
  };
8115
9023
  };
8116
9024
  };
8117
- '/api/v1/bean/platforms/list': {
9025
+ '/api/v1/{region}/bean/import/config/{importerId}': {
8118
9026
  get: {
9027
+ req: ImporterConfigControllerGetConfigData;
8119
9028
  res: {
8120
9029
  /**
8121
- * List of platforms with user binding status
9030
+ * Configuration retrieved successfully
8122
9031
  */
8123
- 200: unknown;
8124
- };
8125
- };
8126
- };
8127
- '/api/v1/bean/platforms/match': {
8128
- get: {
8129
- req: PlatformControllerMatchPlatformsData;
8130
- res: {
9032
+ 200: ImporterConfigDto;
8131
9033
  /**
8132
- * List of matching platforms with suggested segment names
9034
+ * Invalid input - Unsupported importer
8133
9035
  */
8134
- 200: unknown;
9036
+ 400: ApiProblemResponseDto;
9037
+ /**
9038
+ * Unauthorized - Authentication required
9039
+ */
9040
+ 401: ApiProblemResponseDto;
8135
9041
  };
8136
9042
  };
8137
- };
8138
- '/api/v1/bean/platforms/{id}': {
8139
9043
  put: {
8140
- req: PlatformControllerUpdateData;
9044
+ req: ImporterConfigControllerUpdateConfigData;
8141
9045
  res: {
8142
9046
  /**
8143
- * Platform updated successfully
9047
+ * Configuration updated successfully
8144
9048
  */
8145
- 200: unknown;
9049
+ 200: ImporterConfigDto;
8146
9050
  /**
8147
- * Platform not found
9051
+ * Invalid input - Validation failed
8148
9052
  */
8149
- 404: unknown;
9053
+ 400: ApiProblemResponseDto;
9054
+ /**
9055
+ * Configuration not found
9056
+ */
9057
+ 404: ApiProblemResponseDto;
8150
9058
  };
8151
9059
  };
8152
- delete: {
8153
- req: PlatformControllerDeleteData;
9060
+ };
9061
+ '/api/v1/{region}/bean/import/config/{importerId}/reset': {
9062
+ post: {
9063
+ req: ImporterConfigControllerResetConfigData;
8154
9064
  res: {
8155
9065
  /**
8156
- * Platform deleted successfully
9066
+ * Configuration reset successfully
8157
9067
  */
8158
- 204: void;
9068
+ 200: ImporterConfigDto;
8159
9069
  /**
8160
- * Platform not found
9070
+ * Invalid input - Unsupported importer
8161
9071
  */
8162
- 404: unknown;
9072
+ 400: ApiProblemResponseDto;
8163
9073
  };
8164
9074
  };
8165
9075
  };
@@ -8216,6 +9126,54 @@ export type $OpenApiTs = {
8216
9126
  };
8217
9127
  };
8218
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
+ };
8219
9177
  '/api/v1/{region}/bean/import/parser-telemetry': {
8220
9178
  post: {
8221
9179
  req: TelemetryControllerReportTelemetryData;
@@ -8304,6 +9262,78 @@ export type $OpenApiTs = {
8304
9262
  };
8305
9263
  };
8306
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
+ };
8307
9337
  '/api/v1/{region}/dashboard/net-worth': {
8308
9338
  get: {
8309
9339
  req: DashboardControllerGetNetWorthData;
@@ -8356,16 +9386,16 @@ export type $OpenApiTs = {
8356
9386
  };
8357
9387
  };
8358
9388
  };
8359
- '/api/v1/{region}/investment/holdings/pnl': {
9389
+ '/api/v1/{region}/dashboard/expenses': {
8360
9390
  get: {
8361
- req: HoldingPnlControllerGetHoldingPnlData;
9391
+ req: DashboardControllerGetExpensesData;
8362
9392
  res: {
8363
9393
  /**
8364
- * Holding P&L retrieved successfully
9394
+ * Expenses retrieved successfully
8365
9395
  */
8366
- 200: HoldingPnlResponseDto;
9396
+ 200: ExpensesByCategoryResponseDto;
8367
9397
  /**
8368
- * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
9398
+ * Invalid groupBy or period
8369
9399
  */
8370
9400
  400: unknown;
8371
9401
  /**
@@ -8375,98 +9405,48 @@ export type $OpenApiTs = {
8375
9405
  };
8376
9406
  };
8377
9407
  };
8378
- '/api/v1/{region}/bean/prices': {
8379
- post: {
8380
- req: PriceControllerCreateData;
9408
+ '/api/v1/{region}/investment/holdings/pnl': {
9409
+ get: {
9410
+ req: HoldingPnlControllerGetHoldingPnlData;
8381
9411
  res: {
8382
9412
  /**
8383
- * Price created successfully
8384
- */
8385
- 201: PriceResponseDto;
8386
- /**
8387
- * Currency or quoteCurrency commodity not found
9413
+ * Holding P&L retrieved successfully
8388
9414
  */
8389
- 404: unknown;
9415
+ 200: HoldingPnlResponseDto;
8390
9416
  /**
8391
- * Price already exists for this currency pair and date
9417
+ * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
8392
9418
  */
8393
- 409: unknown;
8394
- };
8395
- };
8396
- get: {
8397
- req: PriceControllerFindAllData;
8398
- res: {
9419
+ 400: unknown;
8399
9420
  /**
8400
- * Prices retrieved successfully
9421
+ * User not authenticated
8401
9422
  */
8402
- 200: PriceListResponseDto;
9423
+ 401: unknown;
8403
9424
  };
8404
9425
  };
8405
9426
  };
8406
- '/api/v1/{region}/bean/prices/{id}': {
9427
+ '/api/v1/{region}/reporting/portfolio/trends': {
8407
9428
  get: {
8408
- req: PriceControllerFindOneData;
8409
- res: {
8410
- /**
8411
- * Price retrieved successfully
8412
- */
8413
- 200: PriceResponseDto;
8414
- /**
8415
- * Price not found
8416
- */
8417
- 404: unknown;
8418
- };
8419
- };
8420
- put: {
8421
- req: PriceControllerUpdateData;
8422
- res: {
8423
- /**
8424
- * Price updated successfully
8425
- */
8426
- 200: PriceResponseDto;
8427
- /**
8428
- * Price not found
8429
- */
8430
- 404: unknown;
8431
- /**
8432
- * Updated price conflicts with existing price
8433
- */
8434
- 409: unknown;
8435
- };
8436
- };
8437
- delete: {
8438
- req: PriceControllerDeleteData;
9429
+ req: ReportingControllerGetPortfolioTrendsData;
8439
9430
  res: {
8440
9431
  /**
8441
- * Price deleted successfully
8442
- */
8443
- 204: void;
8444
- /**
8445
- * Price not found
9432
+ * Trends retrieved successfully
8446
9433
  */
8447
- 404: unknown;
8448
- };
8449
- };
8450
- };
8451
- '/api/v1/{region}/bean/prices/bulk': {
8452
- post: {
8453
- req: PriceControllerBulkCreateData;
8454
- res: {
9434
+ 200: PortfolioTrendsResponseDto;
8455
9435
  /**
8456
- * Prices created successfully
9436
+ * User not authenticated
8457
9437
  */
8458
- 201: Array<PriceResponseDto>;
9438
+ 401: unknown;
8459
9439
  };
8460
9440
  };
8461
9441
  };
8462
- '/api/v1/{region}/reporting/portfolio/trends': {
9442
+ '/api/v1/{region}/reporting/cash-flow/trends': {
8463
9443
  get: {
8464
- req: ReportingControllerGetPortfolioTrendsData;
9444
+ req: ReportingControllerGetCashFlowTrendsData;
8465
9445
  res: {
8466
9446
  /**
8467
- * Trends retrieved successfully
9447
+ * Cash-flow trends retrieved successfully
8468
9448
  */
8469
- 200: PortfolioTrendsResponseDto;
9449
+ 200: CashFlowTrendsResponseDto;
8470
9450
  /**
8471
9451
  * User not authenticated
8472
9452
  */