@firela/api-types 0.0.0-canary.074c27d4 → 0.0.0-canary.09a8ff4c

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.
@@ -316,6 +316,53 @@ export type RegionsMetadataResponseDto = {
316
316
  regions: Array<RegionInfoDto>;
317
317
  };
318
318
 
319
+ export type CostSpecDto = {
320
+ /**
321
+ * Cost specification mode (mirrors engine CostSpec)
322
+ */
323
+ mode: 'per-unit' | 'total' | 'date' | 'label' | 'auto';
324
+ /**
325
+ * Per-unit cost (required when mode is "per-unit")
326
+ */
327
+ numberPerUnit?: string;
328
+ /**
329
+ * Total cost for all units (required when mode is "total")
330
+ */
331
+ totalNumber?: string;
332
+ /**
333
+ * Cost currency (required in all modes)
334
+ */
335
+ currency: string;
336
+ /**
337
+ * Lot acquisition date, ISO 8601 (required when mode is "date")
338
+ */
339
+ date?: string;
340
+ /**
341
+ * Lot label (required when mode is "label"; optional tag in buy modes)
342
+ */
343
+ label?: string;
344
+ /**
345
+ * Merge lots for AVERAGE booking (mode: auto)
346
+ */
347
+ merge?: boolean;
348
+ };
349
+
350
+ /**
351
+ * Cost specification mode (mirrors engine CostSpec)
352
+ */
353
+ export type mode = 'per-unit' | 'total' | 'date' | 'label' | 'auto';
354
+
355
+ export type AmountDto = {
356
+ /**
357
+ * Amount as decimal string (max 15 integer + 15 decimal digits)
358
+ */
359
+ number: string;
360
+ /**
361
+ * Currency/commodity code
362
+ */
363
+ currency: string;
364
+ };
365
+
319
366
  export type CreatePostingDto = {
320
367
  /**
321
368
  * Account name in Beancount format (must start with uppercase, colon-separated)
@@ -335,6 +382,14 @@ export type CreatePostingDto = {
335
382
  meta?: {
336
383
  [key: string]: unknown;
337
384
  };
385
+ /**
386
+ * Cost basis (Beancount `{...}`). Maps to engine costSpec. Required for commodity holdings so they carry a monetary weight that can balance.
387
+ */
388
+ cost?: CostSpecDto;
389
+ /**
390
+ * Price annotation (Beancount `@...`). Maps to engine price. Used for valuation; cost takes priority for balance weight.
391
+ */
392
+ price?: AmountDto;
338
393
  };
339
394
 
340
395
  export type CreateTransactionDto = {
@@ -387,6 +442,25 @@ export type CreateTransactionDto = {
387
442
  */
388
443
  export type flag = '*' | '!';
389
444
 
445
+ export type CostDetailDto = {
446
+ /**
447
+ * Per-unit cost basis (mirrors engine Cost.number)
448
+ */
449
+ number?: string;
450
+ /**
451
+ * Cost currency
452
+ */
453
+ currency?: string;
454
+ /**
455
+ * Lot acquisition date (ISO yyyy-mm-dd)
456
+ */
457
+ date?: string;
458
+ /**
459
+ * Lot label
460
+ */
461
+ label?: string;
462
+ };
463
+
390
464
  export type PostingResponseDto = {
391
465
  /**
392
466
  * Account name
@@ -400,6 +474,10 @@ export type PostingResponseDto = {
400
474
  * Currency
401
475
  */
402
476
  currency?: string;
477
+ /**
478
+ * Booking-resolved cost (mirrors engine Cost). Undefined when the posting has no cost basis.
479
+ */
480
+ cost?: CostDetailDto;
403
481
  };
404
482
 
405
483
  export type RecurringSuggestionDto = {
@@ -643,6 +721,10 @@ export type PostingDetailDto = {
643
721
  * Cost date
644
722
  */
645
723
  costDate?: string;
724
+ /**
725
+ * Booking-resolved cost (mirrors engine Cost). Undefined when the posting has no cost basis.
726
+ */
727
+ cost?: CostDetailDto;
646
728
  /**
647
729
  * Price amount
648
730
  */
@@ -1242,17 +1324,17 @@ export type ResolveResultDto = {
1242
1324
  [key: string]: string;
1243
1325
  };
1244
1326
  /**
1245
- * Resolution ID for undo
1327
+ * Resolution ID for undo. Absent when the resolver rejected the decision (review stayed PENDING).
1246
1328
  */
1247
- resolutionId: string;
1329
+ resolutionId?: string;
1248
1330
  /**
1249
1331
  * Whether this decision can be undone
1250
1332
  */
1251
- canUndo: boolean;
1333
+ canUndo?: boolean;
1252
1334
  /**
1253
1335
  * Deadline for undo (24h from resolution)
1254
1336
  */
1255
- undoDeadline: string;
1337
+ undoDeadline?: string;
1256
1338
  /**
1257
1339
  * Rule ID if learning was triggered (ACCEPT_AND_LEARN actions). Use this to deep-link to the rule management page.
1258
1340
  */
@@ -2947,6 +3029,96 @@ export type UpdatePropertyDto = {
2947
3029
  value: string;
2948
3030
  };
2949
3031
 
3032
+ export type CreateBeanEventDto = {
3033
+ /**
3034
+ * Life event date (ISO 8601)
3035
+ */
3036
+ date: string;
3037
+ /**
3038
+ * Life event type (e.g., "employer", "location", "marital-status") — user-defined, no enum constraint at engine layer
3039
+ */
3040
+ type: string;
3041
+ /**
3042
+ * Life event description. Empty string is a VALID value (distinct from absence).
3043
+ */
3044
+ description: string;
3045
+ /**
3046
+ * Product-side metadata (lives in BeanEvent.meta JSON, never in engine Event fields)
3047
+ */
3048
+ meta?: {
3049
+ [key: string]: unknown;
3050
+ };
3051
+ };
3052
+
3053
+ export type EventResponseDto = {
3054
+ /**
3055
+ * Unique identifier
3056
+ */
3057
+ id: string;
3058
+ /**
3059
+ * User ID (owner of the life event)
3060
+ */
3061
+ userId: string;
3062
+ /**
3063
+ * Life event date (ISO 8601 format)
3064
+ */
3065
+ date: string;
3066
+ /**
3067
+ * Life event type (user-defined, e.g., "employer", "location")
3068
+ */
3069
+ type: string;
3070
+ /**
3071
+ * Life event description. May be an empty string (a valid value distinct from absence).
3072
+ */
3073
+ description: string;
3074
+ /**
3075
+ * Product-side metadata (free-form JSON)
3076
+ */
3077
+ meta: {
3078
+ [key: string]: unknown;
3079
+ };
3080
+ /**
3081
+ * Creation timestamp
3082
+ */
3083
+ createdAt: string;
3084
+ /**
3085
+ * Last update timestamp. Also emitted as the ETag response header for If-Match optimistic concurrency.
3086
+ */
3087
+ updatedAt: string;
3088
+ };
3089
+
3090
+ export type EventListResponseDto = {
3091
+ /**
3092
+ * List of life events
3093
+ */
3094
+ items: Array<EventResponseDto>;
3095
+ /**
3096
+ * Total number of life events matching the query
3097
+ */
3098
+ total: number;
3099
+ };
3100
+
3101
+ export type UpdateBeanEventDto = {
3102
+ /**
3103
+ * Life event date (ISO 8601)
3104
+ */
3105
+ date?: string;
3106
+ /**
3107
+ * Life event type (user-defined)
3108
+ */
3109
+ type?: string;
3110
+ /**
3111
+ * Life event description. Empty string is a VALID value (distinct from absence).
3112
+ */
3113
+ description?: string;
3114
+ /**
3115
+ * Product-side metadata (free-form JSON)
3116
+ */
3117
+ meta?: {
3118
+ [key: string]: unknown;
3119
+ };
3120
+ };
3121
+
2950
3122
  export type FileImportDto = {
2951
3123
  /**
2952
3124
  * Bill file to import (CSV, PDF, OFX, etc.)
@@ -3411,6 +3583,8 @@ export type SupportedProvidersResponseDto = {
3411
3583
 
3412
3584
  export type ParserTelemetryReportDto = unknown;
3413
3585
 
3586
+ export type UncoveredFormatMissDto = unknown;
3587
+
3414
3588
  export type ProcessNlpDto = {
3415
3589
  /**
3416
3590
  * Natural language text describing a transaction (Chinese)
@@ -4196,8 +4370,21 @@ export type AccountItemWithAssetClassDto = {
4196
4370
  * Risk level
4197
4371
  */
4198
4372
  riskLevel?: string;
4373
+ /**
4374
+ * ADR-0105 classification provenance (holding level always; account level only on FALLBACK)
4375
+ */
4376
+ source?: 'USER_META' | 'FIAT_CURRENCY' | 'OPENBB_MAPPING' | 'FALLBACK';
4199
4377
  };
4200
4378
 
4379
+ /**
4380
+ * ADR-0105 classification provenance (holding level always; account level only on FALLBACK)
4381
+ */
4382
+ export type source2 =
4383
+ | 'USER_META'
4384
+ | 'FIAT_CURRENCY'
4385
+ | 'OPENBB_MAPPING'
4386
+ | 'FALLBACK';
4387
+
4201
4388
  export type AssetClassGroupDto = {
4202
4389
  /**
4203
4390
  * Asset class name
@@ -4284,6 +4471,12 @@ export type AssetClassSummaryDto = {
4284
4471
  * Exchange rate warnings
4285
4472
  */
4286
4473
  warnings?: Array<AccountExchangeRateWarningDto>;
4474
+ /**
4475
+ * ADR-0105 §4 fallback provenance stats (holding level only). valueRatio is the grey-area share of total converted value; count is the number of source=FALLBACK holdings.
4476
+ */
4477
+ fallback?: {
4478
+ [key: string]: unknown;
4479
+ };
4287
4480
  };
4288
4481
 
4289
4482
  export type AssetClassAccountsResponseDto = {
@@ -4295,6 +4488,56 @@ export type AssetClassAccountsResponseDto = {
4295
4488
  * Summary statistics
4296
4489
  */
4297
4490
  summary: AssetClassSummaryDto;
4491
+ /**
4492
+ * ADR-0105 §6 holding-level grey-area bucket (source=FALLBACK holdings peeled out of groups). Present only for groupBy=holdingAssetClass when FALLBACK holdings exist.
4493
+ */
4494
+ uncategorized?: AssetClassGroupDto;
4495
+ };
4496
+
4497
+ export type HoldingAssetClassAccountSliceDto = {
4498
+ /**
4499
+ * Account ID
4500
+ */
4501
+ accountId: string;
4502
+ /**
4503
+ * Full account path
4504
+ */
4505
+ accountPath: string;
4506
+ /**
4507
+ * Currency of the holding with the largest converted base value; undefined when no holding is convertible
4508
+ */
4509
+ accountCurrency?: string;
4510
+ /**
4511
+ * Account's market value in base currency (Σ converted holdings; grey bucket included)
4512
+ */
4513
+ marketValueBase: string;
4514
+ /**
4515
+ * Share of the global total (0-100). 0 when globalTotal is zero (no NaN/Infinity).
4516
+ */
4517
+ shareOfTotalPct: number;
4518
+ /**
4519
+ * Per-account asset-class breakdown
4520
+ */
4521
+ groups: Array<AssetClassGroupDto>;
4522
+ /**
4523
+ * Per-account grey bucket (source=FALLBACK holdings, incl. broker cash)
4524
+ */
4525
+ uncategorized?: AssetClassGroupDto;
4526
+ /**
4527
+ * Every holding row for this account (account ID in each row’s `id` field)
4528
+ */
4529
+ holdings: Array<AccountItemWithAssetClassDto>;
4530
+ };
4531
+
4532
+ export type HoldingAssetClassCrossAccountResponseDto = {
4533
+ /**
4534
+ * Merged cross-account holding aggregation
4535
+ */
4536
+ global: AssetClassAccountsResponseDto;
4537
+ /**
4538
+ * Per-account slices
4539
+ */
4540
+ byAccount: Array<HoldingAssetClassAccountSliceDto>;
4298
4541
  };
4299
4542
 
4300
4543
  export type CashFlowByCurrencyDto = {
@@ -4376,135 +4619,497 @@ export type CashFlowResponseDto = {
4376
4619
  warnings?: Array<ExchangeRateWarningDto>;
4377
4620
  };
4378
4621
 
4379
- export type CurrencyBalanceDto = {
4622
+ export type MonetaryDto = {
4380
4623
  /**
4381
- * ISO 4217 currency code
4624
+ * Amount (Decimal string)
4625
+ */
4626
+ amount: string;
4627
+ /**
4628
+ * ISO 4217 currency
4382
4629
  */
4383
4630
  currency: string;
4384
4631
  /**
4385
- * Balance amount
4632
+ * Converted to user base currency (Decimal string)
4386
4633
  */
4387
- balance: string;
4634
+ baseCcyEquivalent?: {
4635
+ [key: string]: unknown;
4636
+ } | null;
4388
4637
  };
4389
4638
 
4390
- export type TimeSeriesPointDto = {
4639
+ export type CurrentPriceDto = {
4391
4640
  /**
4392
- * Date in YYYY-MM-DD format
4641
+ * Price amount (Decimal string)
4393
4642
  */
4394
- date: string;
4643
+ amount: string;
4395
4644
  /**
4396
- * Value at this date (in base currency)
4645
+ * Price currency (ISO 4217)
4397
4646
  */
4398
- value: string;
4647
+ currency: string;
4399
4648
  /**
4400
- * Change from previous point
4649
+ * Price date (ISO 8601)
4401
4650
  */
4402
- change?: {
4403
- [key: string]: unknown;
4404
- };
4651
+ date: string;
4405
4652
  /**
4406
- * Multi-currency breakdown for this point
4653
+ * Price source
4407
4654
  */
4408
- byCurrency?: Array<CurrencyBalanceDto>;
4655
+ source: 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4409
4656
  };
4410
4657
 
4411
- export type TrendSummaryDto = {
4658
+ /**
4659
+ * Price source
4660
+ */
4661
+ export type source3 = 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4662
+
4663
+ export type FxRateDto = {
4664
+ from: string;
4665
+ to: string;
4412
4666
  /**
4413
- * Value at start of period
4667
+ * FX rate (Decimal string)
4414
4668
  */
4415
- startValue: string;
4669
+ rate: string;
4416
4670
  /**
4417
- * Value at end of period
4671
+ * Rate date (ISO 8601)
4418
4672
  */
4419
- endValue: string;
4673
+ date: string;
4674
+ };
4675
+
4676
+ export type HoldingPnlRowDto = {
4420
4677
  /**
4421
- * Total change over period
4678
+ * Account UUID
4422
4679
  */
4423
- totalChange: string;
4680
+ accountId: string;
4424
4681
  /**
4425
- * Total change percentage
4682
+ * Full account path
4426
4683
  */
4427
- totalChangePercentage: string;
4428
- };
4429
-
4430
- export type MultiCurrencyPointDto = {
4684
+ accountPath: string;
4431
4685
  /**
4432
- * Date in YYYY-MM-DD format
4686
+ * Account settlement currency (ISO 4217), from cost currency
4433
4687
  */
4434
- date: string;
4688
+ accountCcy?: {
4689
+ [key: string]: unknown;
4690
+ } | null;
4435
4691
  /**
4436
- * Balances by currency
4692
+ * Broker type derived from Platform.type
4437
4693
  */
4438
- byCurrency: Array<CurrencyBalanceDto>;
4439
- };
4440
-
4441
- export type PortfolioTrendsResponseDto = {
4694
+ brokerType?: {
4695
+ [key: string]: unknown;
4696
+ } | null;
4442
4697
  /**
4443
- * Time series data points
4698
+ * Commodity symbol
4444
4699
  */
4445
- series: Array<TimeSeriesPointDto>;
4700
+ symbol: string;
4446
4701
  /**
4447
- * Period summary
4702
+ * Chart segment token (libs/common resolver)
4448
4703
  */
4449
- summary: TrendSummaryDto;
4704
+ chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4705
+ assetClass: string;
4706
+ assetSubClass?: {
4707
+ [key: string]: unknown;
4708
+ } | null;
4450
4709
  /**
4451
- * Period requested
4710
+ * Net held units (Decimal string)
4452
4711
  */
4453
- period: string;
4712
+ units: string;
4454
4713
  /**
4455
- * Data granularity
4714
+ * Average cost per unit; null when cost currency conflicts or no cost
4456
4715
  */
4457
- granularity: string;
4716
+ averageCostPerUnit?: MonetaryDto | null;
4458
4717
  /**
4459
- * Base currency for converted values
4718
+ * Cost basis of held units
4460
4719
  */
4461
- currency: string;
4720
+ costBasis?: MonetaryDto | null;
4462
4721
  /**
4463
- * Multi-currency time series (each point has currency breakdown)
4722
+ * Market value at asOf price
4464
4723
  */
4465
- byCurrency?: Array<MultiCurrencyPointDto>;
4724
+ marketValue?: MonetaryDto | null;
4466
4725
  /**
4467
- * Exchange rate warnings
4726
+ * Price used for market value
4468
4727
  */
4469
- warnings?: Array<ExchangeRateWarningDto>;
4470
- };
4471
-
4472
- export type GenerateSnapshotBody = unknown;
4473
-
4474
- export type GenerateSnapshotResponse = unknown;
4475
-
4476
- export type BackfillSnapshotsBody = unknown;
4477
-
4478
- export type BackfillSnapshotsResponse = unknown;
4479
-
4480
- export type AnonymousLoginDto = {
4728
+ currentPrice?: CurrentPriceDto | null;
4481
4729
  /**
4482
- * Access token for anonymous login
4730
+ * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
4483
4731
  */
4484
- accessToken: string;
4485
- };
4486
-
4487
- export type AccountControllerCreateData = {
4732
+ unrealizedPnlBase?: {
4733
+ [key: string]: unknown;
4734
+ } | null;
4488
4735
  /**
4489
- * Region code for tenant context
4736
+ * Unrealized P&L % (Decimal string)
4490
4737
  */
4491
- region: 'cn' | 'us' | 'de' | 'gb';
4492
- requestBody: CreateAccountDto;
4493
- };
4494
-
4495
- export type AccountControllerCreateResponse = AccountResponseDto;
4496
-
4497
- export type AccountControllerFindAllData = {
4738
+ unrealizedPnlPct?: {
4739
+ [key: string]: unknown;
4740
+ } | null;
4498
4741
  /**
4499
- * Filter by custom (user-created) accounts only
4742
+ * Historical FX rate applied to cost basis
4500
4743
  */
4501
- isCustom?: boolean;
4744
+ costFxRate?: FxRateDto | null;
4502
4745
  /**
4503
- * Maximum number of results
4746
+ * FX rate applied to market value
4504
4747
  */
4505
- limit?: number;
4748
+ marketFxRate?: FxRateDto | null;
4506
4749
  /**
4507
- * Number of results to skip
4750
+ * Share of invested assets % (Decimal string); only for invested chartTokens
4751
+ */
4752
+ pctOfInvestedAssets?: {
4753
+ [key: string]: unknown;
4754
+ } | null;
4755
+ /**
4756
+ * Cumulative realized P&L on sold lots (asOf-date cutoff); null when the method has no applicable sells, a sell lacks a price, or any required FX rate is missing (never-mix). When a sell spans multiple currencies (cross-currency sale), amount and currency reflect the base currency; baseCcyEquivalent is always the authoritative dual-FX figure
4757
+ */
4758
+ realizedPnl?: MonetaryDto | null;
4759
+ };
4760
+
4761
+ /**
4762
+ * Chart segment token (libs/common resolver)
4763
+ */
4764
+ export type chartToken = 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4765
+
4766
+ export type HoldingPnlWarningDto = {
4767
+ /**
4768
+ * Warning type
4769
+ */
4770
+ type:
4771
+ | 'MISSING_COST_FX_RATE'
4772
+ | 'MISSING_MARKET_FX_RATE'
4773
+ | 'MISSING_SALE_PRICE'
4774
+ | 'MISSING_REALIZED_FX_RATE'
4775
+ | 'OVERSOLD_LOTS'
4776
+ | 'NO_PRICE'
4777
+ | 'MIXED_COST_CURRENCY';
4778
+ symbol?: {
4779
+ [key: string]: unknown;
4780
+ } | null;
4781
+ accountId?: {
4782
+ [key: string]: unknown;
4783
+ } | null;
4784
+ currency?: {
4785
+ [key: string]: unknown;
4786
+ } | null;
4787
+ };
4788
+
4789
+ /**
4790
+ * Warning type
4791
+ */
4792
+ export type type4 =
4793
+ | 'MISSING_COST_FX_RATE'
4794
+ | 'MISSING_MARKET_FX_RATE'
4795
+ | 'MISSING_SALE_PRICE'
4796
+ | 'MISSING_REALIZED_FX_RATE'
4797
+ | 'OVERSOLD_LOTS'
4798
+ | 'NO_PRICE'
4799
+ | 'MIXED_COST_CURRENCY';
4800
+
4801
+ export type HoldingPnlResponseDto = {
4802
+ asOfDate: string;
4803
+ baseCurrency: string;
4804
+ /**
4805
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4806
+ */
4807
+ method: 'average' | 'FIFO';
4808
+ rows: Array<HoldingPnlRowDto>;
4809
+ warnings: Array<HoldingPnlWarningDto>;
4810
+ };
4811
+
4812
+ /**
4813
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4814
+ */
4815
+ export type method = 'average' | 'FIFO';
4816
+
4817
+ export type CreateBeanPriceDto = {
4818
+ /**
4819
+ * Currency being priced (e.g., USD, AAPL, BTC)
4820
+ */
4821
+ currency: string;
4822
+ /**
4823
+ * Quote currency (pricing currency, e.g., CNY, EUR)
4824
+ */
4825
+ quoteCurrency: string;
4826
+ /**
4827
+ * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
4828
+ */
4829
+ amount: number;
4830
+ /**
4831
+ * Price date (ISO 8601 format)
4832
+ */
4833
+ date: string;
4834
+ /**
4835
+ * Metadata (validated by Zod schema, max field lengths enforced)
4836
+ */
4837
+ metadata?: {
4838
+ [key: string]: unknown;
4839
+ };
4840
+ };
4841
+
4842
+ export type PriceResponseDto = {
4843
+ /**
4844
+ * Unique identifier
4845
+ */
4846
+ id: string;
4847
+ /**
4848
+ * User ID (owner of the price)
4849
+ */
4850
+ userId: string;
4851
+ /**
4852
+ * Currency being priced (e.g., USD, AAPL, BTC)
4853
+ */
4854
+ currency: string;
4855
+ /**
4856
+ * Quote currency (pricing currency, e.g., USD, CNY)
4857
+ */
4858
+ quoteCurrency: string;
4859
+ /**
4860
+ * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
4861
+ */
4862
+ amount: number;
4863
+ /**
4864
+ * Price date (ISO 8601 format). Represents the date this price was valid.
4865
+ */
4866
+ date: string;
4867
+ /**
4868
+ * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
4869
+ */
4870
+ meta: {
4871
+ [key: string]: unknown;
4872
+ };
4873
+ /**
4874
+ * Creation timestamp
4875
+ */
4876
+ createdAt: string;
4877
+ /**
4878
+ * Last update timestamp
4879
+ */
4880
+ updatedAt: string;
4881
+ };
4882
+
4883
+ export type PriceListResponseDto = {
4884
+ /**
4885
+ * List of prices
4886
+ */
4887
+ items: Array<PriceResponseDto>;
4888
+ /**
4889
+ * Total number of prices
4890
+ */
4891
+ total: number;
4892
+ };
4893
+
4894
+ export type UpdateBeanPriceDto = {
4895
+ /**
4896
+ * Currency being priced
4897
+ */
4898
+ currency?: string;
4899
+ /**
4900
+ * Quote currency (pricing currency)
4901
+ */
4902
+ quoteCurrency?: string;
4903
+ /**
4904
+ * Price amount (MUST be >= 0 per Beancount spec)
4905
+ */
4906
+ amount?: number;
4907
+ /**
4908
+ * Price date (ISO 8601 format)
4909
+ */
4910
+ date?: string;
4911
+ /**
4912
+ * Metadata
4913
+ */
4914
+ metadata?: {
4915
+ [key: string]: unknown;
4916
+ };
4917
+ };
4918
+
4919
+ export type CurrencyBalanceDto = {
4920
+ /**
4921
+ * ISO 4217 currency code
4922
+ */
4923
+ currency: string;
4924
+ /**
4925
+ * Balance amount
4926
+ */
4927
+ balance: string;
4928
+ };
4929
+
4930
+ export type TimeSeriesPointDto = {
4931
+ /**
4932
+ * Date in YYYY-MM-DD format
4933
+ */
4934
+ date: string;
4935
+ /**
4936
+ * Value at this date (in base currency)
4937
+ */
4938
+ value: string;
4939
+ /**
4940
+ * Change from previous point
4941
+ */
4942
+ change?: {
4943
+ [key: string]: unknown;
4944
+ };
4945
+ /**
4946
+ * Multi-currency breakdown for this point
4947
+ */
4948
+ byCurrency?: Array<CurrencyBalanceDto>;
4949
+ };
4950
+
4951
+ export type TrendSummaryDto = {
4952
+ /**
4953
+ * Value at start of period
4954
+ */
4955
+ startValue: string;
4956
+ /**
4957
+ * Value at end of period
4958
+ */
4959
+ endValue: string;
4960
+ /**
4961
+ * Total change over period
4962
+ */
4963
+ totalChange: string;
4964
+ /**
4965
+ * Total change percentage
4966
+ */
4967
+ totalChangePercentage: string;
4968
+ };
4969
+
4970
+ export type MultiCurrencyPointDto = {
4971
+ /**
4972
+ * Date in YYYY-MM-DD format
4973
+ */
4974
+ date: string;
4975
+ /**
4976
+ * Balances by currency
4977
+ */
4978
+ byCurrency: Array<CurrencyBalanceDto>;
4979
+ };
4980
+
4981
+ export type PortfolioTrendsResponseDto = {
4982
+ /**
4983
+ * Time series data points
4984
+ */
4985
+ series: Array<TimeSeriesPointDto>;
4986
+ /**
4987
+ * Period summary
4988
+ */
4989
+ summary: TrendSummaryDto;
4990
+ /**
4991
+ * Period requested
4992
+ */
4993
+ period: string;
4994
+ /**
4995
+ * Data granularity
4996
+ */
4997
+ granularity: string;
4998
+ /**
4999
+ * Base currency for converted values
5000
+ */
5001
+ currency: string;
5002
+ /**
5003
+ * Multi-currency time series (each point has currency breakdown)
5004
+ */
5005
+ byCurrency?: Array<MultiCurrencyPointDto>;
5006
+ /**
5007
+ * Exchange rate warnings
5008
+ */
5009
+ warnings?: Array<ExchangeRateWarningDto>;
5010
+ };
5011
+
5012
+ export type CashFlowPointDto = {
5013
+ /**
5014
+ * Month key (YYYY-MM)
5015
+ */
5016
+ month: string;
5017
+ /**
5018
+ * Income in base currency (absolute, converted)
5019
+ */
5020
+ income: string;
5021
+ /**
5022
+ * Expense in base currency (absolute, converted)
5023
+ */
5024
+ expense: string;
5025
+ /**
5026
+ * netSavings = income − expense (savings positive)
5027
+ */
5028
+ netSavings: string;
5029
+ };
5030
+
5031
+ export type CashFlowTrendSummaryDto = {
5032
+ /**
5033
+ * Total income across the period
5034
+ */
5035
+ totalIncome: string;
5036
+ /**
5037
+ * Total expense across the period
5038
+ */
5039
+ totalExpense: string;
5040
+ /**
5041
+ * income − expense across the period
5042
+ */
5043
+ totalNetSavings: string;
5044
+ /**
5045
+ * totalNetSavings divided by the window length (N months, incl. zero-filled)
5046
+ */
5047
+ averageMonthlyNetSavings: string;
5048
+ };
5049
+
5050
+ export type CashFlowTrendsResponseDto = {
5051
+ /**
5052
+ * Monthly cash-flow series (fixed N-month window, zero-filled)
5053
+ */
5054
+ series: Array<CashFlowPointDto>;
5055
+ /**
5056
+ * Period totals
5057
+ */
5058
+ summary: CashFlowTrendSummaryDto;
5059
+ /**
5060
+ * Period requested
5061
+ */
5062
+ period: string;
5063
+ /**
5064
+ * Data granularity (v1 returns month buckets)
5065
+ */
5066
+ granularity: string;
5067
+ /**
5068
+ * Base currency for converted values
5069
+ */
5070
+ currency: string;
5071
+ /**
5072
+ * Exchange rate warnings (e.g. missing rate for a currency)
5073
+ */
5074
+ warnings?: Array<ExchangeRateWarningDto>;
5075
+ };
5076
+
5077
+ export type GenerateSnapshotBody = unknown;
5078
+
5079
+ export type GenerateSnapshotResponse = unknown;
5080
+
5081
+ export type BackfillSnapshotsBody = unknown;
5082
+
5083
+ export type BackfillSnapshotsResponse = unknown;
5084
+
5085
+ export type AnonymousLoginDto = {
5086
+ /**
5087
+ * Access token for anonymous login
5088
+ */
5089
+ accessToken: string;
5090
+ };
5091
+
5092
+ export type AccountControllerCreateData = {
5093
+ /**
5094
+ * Region code for tenant context
5095
+ */
5096
+ region: 'cn' | 'us' | 'de' | 'gb';
5097
+ requestBody: CreateAccountDto;
5098
+ };
5099
+
5100
+ export type AccountControllerCreateResponse = AccountResponseDto;
5101
+
5102
+ export type AccountControllerFindAllData = {
5103
+ /**
5104
+ * Filter by custom (user-created) accounts only
5105
+ */
5106
+ isCustom?: boolean;
5107
+ /**
5108
+ * Maximum number of results
5109
+ */
5110
+ limit?: number;
5111
+ /**
5112
+ * Number of results to skip
4508
5113
  */
4509
5114
  offset?: number;
4510
5115
  /**
@@ -5646,6 +6251,104 @@ export type PropertyControllerDeleteData = {
5646
6251
 
5647
6252
  export type PropertyControllerDeleteResponse = void;
5648
6253
 
6254
+ export type EventControllerCreateData = {
6255
+ /**
6256
+ * Region code for tenant context (decorative for life events)
6257
+ */
6258
+ region: 'cn' | 'us' | 'de' | 'gb';
6259
+ requestBody: CreateBeanEventDto;
6260
+ };
6261
+
6262
+ export type EventControllerCreateResponse = EventResponseDto;
6263
+
6264
+ export type EventControllerFindAllData = {
6265
+ /**
6266
+ * Filter life events from this date (ISO 8601 format)
6267
+ */
6268
+ from?: string;
6269
+ /**
6270
+ * Number of items per page (default: 20, max: 100)
6271
+ */
6272
+ limit?: number;
6273
+ /**
6274
+ * Page number for pagination (default: 1)
6275
+ */
6276
+ page?: number;
6277
+ /**
6278
+ * Search term for description (case-insensitive partial match)
6279
+ */
6280
+ q?: string;
6281
+ /**
6282
+ * Region code for tenant context (decorative for life events)
6283
+ */
6284
+ region: 'cn' | 'us' | 'de' | 'gb';
6285
+ /**
6286
+ * Filter life events to this date (ISO 8601 format)
6287
+ */
6288
+ to?: string;
6289
+ /**
6290
+ * Filter by life event type (exact match)
6291
+ */
6292
+ type?: string;
6293
+ };
6294
+
6295
+ export type EventControllerFindAllResponse = EventListResponseDto;
6296
+
6297
+ export type EventControllerFindOneData = {
6298
+ /**
6299
+ * Life event ID
6300
+ */
6301
+ id: string;
6302
+ /**
6303
+ * Region code for tenant context (decorative for life events)
6304
+ */
6305
+ region: 'cn' | 'us' | 'de' | 'gb';
6306
+ };
6307
+
6308
+ export type EventControllerFindOneResponse = EventResponseDto;
6309
+
6310
+ export type EventControllerUpdateData = {
6311
+ /**
6312
+ * Life event ID
6313
+ */
6314
+ id: string;
6315
+ /**
6316
+ * Region code for tenant context (decorative for life events)
6317
+ */
6318
+ region: 'cn' | 'us' | 'de' | 'gb';
6319
+ requestBody: UpdateBeanEventDto;
6320
+ };
6321
+
6322
+ export type EventControllerUpdateResponse = EventResponseDto;
6323
+
6324
+ export type EventControllerDeleteData = {
6325
+ /**
6326
+ * Life event ID
6327
+ */
6328
+ id: string;
6329
+ /**
6330
+ * Region code for tenant context (decorative for life events)
6331
+ */
6332
+ region: 'cn' | 'us' | 'de' | 'gb';
6333
+ };
6334
+
6335
+ export type EventControllerDeleteResponse = void;
6336
+
6337
+ export type EventControllerGetSliceData = {
6338
+ accountPattern: string;
6339
+ granularity: string;
6340
+ /**
6341
+ * Life event ID
6342
+ */
6343
+ id: string;
6344
+ /**
6345
+ * Region code for tenant context (decorative for life events)
6346
+ */
6347
+ region: 'cn' | 'us' | 'de' | 'gb';
6348
+ };
6349
+
6350
+ export type EventControllerGetSliceResponse = unknown;
6351
+
5649
6352
  export type ExportControllerExportBeancountResponse = unknown;
5650
6353
 
5651
6354
  export type FileImportControllerImportFileData = {
@@ -5794,9 +6497,9 @@ export type ProviderSyncControllerSyncData = {
5794
6497
  | 'beancount-direct'
5795
6498
  | 'parsed-bill';
5796
6499
  /**
5797
- * Region code
6500
+ * Region code for tenant context
5798
6501
  */
5799
- region: unknown;
6502
+ region: 'cn' | 'us' | 'de' | 'gb';
5800
6503
  requestBody: ProviderSyncDto;
5801
6504
  };
5802
6505
 
@@ -5809,115 +6512,265 @@ export type ProviderSyncControllerGetSupportedProvidersData = {
5809
6512
  region: 'cn' | 'us' | 'de' | 'gb';
5810
6513
  };
5811
6514
 
5812
- export type ProviderSyncControllerGetSupportedProvidersResponse =
5813
- SupportedProvidersResponseDto;
6515
+ export type ProviderSyncControllerGetSupportedProvidersResponse =
6516
+ SupportedProvidersResponseDto;
6517
+
6518
+ export type ProviderSyncControllerIsProviderSupportedData = {
6519
+ /**
6520
+ * Provider name to check
6521
+ */
6522
+ providerName: string;
6523
+ /**
6524
+ * Region code for tenant context
6525
+ */
6526
+ region: 'cn' | 'us' | 'de' | 'gb';
6527
+ };
6528
+
6529
+ export type ProviderSyncControllerIsProviderSupportedResponse = unknown;
6530
+
6531
+ export type TelemetryControllerReportTelemetryData = {
6532
+ /**
6533
+ * Region code for tenant context
6534
+ */
6535
+ region: 'cn' | 'us' | 'de' | 'gb';
6536
+ requestBody: ParserTelemetryReportDto;
6537
+ };
6538
+
6539
+ export type TelemetryControllerReportTelemetryResponse = unknown;
6540
+
6541
+ export type TelemetryControllerReportCoverageMissData = {
6542
+ /**
6543
+ * Region code for tenant context
6544
+ */
6545
+ region: 'cn' | 'us' | 'de' | 'gb';
6546
+ requestBody: UncoveredFormatMissDto;
6547
+ };
6548
+
6549
+ export type TelemetryControllerReportCoverageMissResponse = unknown;
6550
+
6551
+ export type TelemetryControllerGetCoverageMetricsData = {
6552
+ /**
6553
+ * Region code for tenant context
6554
+ */
6555
+ region: 'cn' | 'us' | 'de' | 'gb';
6556
+ /**
6557
+ * Top-N uncovered formats (default 10)
6558
+ */
6559
+ topN?: unknown;
6560
+ };
6561
+
6562
+ export type TelemetryControllerGetCoverageMetricsResponse = unknown;
6563
+
6564
+ export type NlpControllerProcessNaturalLanguageData = {
6565
+ /**
6566
+ * Region code for tenant context
6567
+ */
6568
+ region: 'cn' | 'us' | 'de' | 'gb';
6569
+ /**
6570
+ * Natural language transaction input with optional session ID
6571
+ */
6572
+ requestBody: ProcessNlpDto;
6573
+ };
6574
+
6575
+ export type NlpControllerProcessNaturalLanguageResponse = NlpResponseDto;
6576
+
6577
+ export type NlpControllerClearSessionData = {
6578
+ /**
6579
+ * Region code for tenant context
6580
+ */
6581
+ region: 'cn' | 'us' | 'de' | 'gb';
6582
+ /**
6583
+ * Specific session ID to clear (defaults to user session)
6584
+ */
6585
+ sessionId?: string;
6586
+ };
6587
+
6588
+ export type NlpControllerClearSessionResponse = void;
6589
+
6590
+ export type NlpControllerGetSessionData = {
6591
+ /**
6592
+ * Region code for tenant context
6593
+ */
6594
+ region: 'cn' | 'us' | 'de' | 'gb';
6595
+ /**
6596
+ * Specific session ID to get (defaults to user session)
6597
+ */
6598
+ sessionId?: string;
6599
+ };
6600
+
6601
+ export type NlpControllerGetSessionResponse = unknown;
6602
+
6603
+ export type DashboardControllerGetNetWorthData = {
6604
+ /**
6605
+ * Date for balance calculation (ISO 8601 format)
6606
+ */
6607
+ date?: string;
6608
+ /**
6609
+ * Region code for tenant context
6610
+ */
6611
+ region: 'cn' | 'us' | 'de' | 'gb';
6612
+ };
6613
+
6614
+ export type DashboardControllerGetNetWorthResponse = NetWorthResponseDto;
6615
+
6616
+ export type DashboardControllerGetAccountsData = {
6617
+ /**
6618
+ * Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
6619
+ */
6620
+ accountId?: string;
6621
+ /**
6622
+ * Date for balance calculation (ISO 8601 format)
6623
+ */
6624
+ date?: string;
6625
+ /**
6626
+ * Grouping strategy
6627
+ */
6628
+ groupBy?:
6629
+ | 'platform'
6630
+ | 'assetClass'
6631
+ | 'holdingAssetClass'
6632
+ | 'holdingAssetClassByAccount';
6633
+ /**
6634
+ * Region code for tenant context
6635
+ */
6636
+ region: 'cn' | 'us' | 'de' | 'gb';
6637
+ };
6638
+
6639
+ export type DashboardControllerGetAccountsResponse =
6640
+ | AccountsResponseDto
6641
+ | AssetClassAccountsResponseDto
6642
+ | HoldingAssetClassCrossAccountResponseDto;
6643
+
6644
+ export type DashboardControllerGetCashFlowData = {
6645
+ /**
6646
+ * Period in YYYY-MM format
6647
+ */
6648
+ period: string;
6649
+ /**
6650
+ * Region code for tenant context
6651
+ */
6652
+ region: 'cn' | 'us' | 'de' | 'gb';
6653
+ };
6654
+
6655
+ export type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
5814
6656
 
5815
- export type ProviderSyncControllerIsProviderSupportedData = {
6657
+ export type HoldingPnlControllerGetHoldingPnlData = {
5816
6658
  /**
5817
- * Provider name to check
6659
+ * Scope to a single account
5818
6660
  */
5819
- providerName: string;
6661
+ accountId?: string;
6662
+ /**
6663
+ * As-of date (ISO 8601), defaults to today
6664
+ */
6665
+ asOf?: string;
6666
+ /**
6667
+ * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6668
+ */
6669
+ method?: 'FIFO' | 'average';
5820
6670
  /**
5821
6671
  * Region code for tenant context
5822
6672
  */
5823
6673
  region: 'cn' | 'us' | 'de' | 'gb';
5824
6674
  };
5825
6675
 
5826
- export type ProviderSyncControllerIsProviderSupportedResponse = unknown;
6676
+ export type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
5827
6677
 
5828
- export type TelemetryControllerReportTelemetryData = {
6678
+ export type PriceControllerCreateData = {
5829
6679
  /**
5830
6680
  * Region code for tenant context
5831
6681
  */
5832
6682
  region: 'cn' | 'us' | 'de' | 'gb';
5833
- requestBody: ParserTelemetryReportDto;
6683
+ requestBody: CreateBeanPriceDto;
5834
6684
  };
5835
6685
 
5836
- export type TelemetryControllerReportTelemetryResponse = unknown;
6686
+ export type PriceControllerCreateResponse = PriceResponseDto;
5837
6687
 
5838
- export type NlpControllerProcessNaturalLanguageData = {
6688
+ export type PriceControllerFindAllData = {
5839
6689
  /**
5840
- * Region code for tenant context
6690
+ * Filter by currency (e.g., BTC, AAPL, USD)
5841
6691
  */
5842
- region: 'cn' | 'us' | 'de' | 'gb';
6692
+ currency?: string;
5843
6693
  /**
5844
- * Natural language transaction input with optional session ID
6694
+ * Filter prices from this date (ISO 8601 format)
5845
6695
  */
5846
- requestBody: ProcessNlpDto;
5847
- };
5848
-
5849
- export type NlpControllerProcessNaturalLanguageResponse = NlpResponseDto;
5850
-
5851
- export type NlpControllerClearSessionData = {
6696
+ dateFrom?: string;
6697
+ /**
6698
+ * Filter prices to this date (ISO 8601 format)
6699
+ */
6700
+ dateTo?: string;
6701
+ /**
6702
+ * Number of items per page (default: 20, max: 100)
6703
+ */
6704
+ limit?: number;
6705
+ /**
6706
+ * Page number for pagination (default: 1)
6707
+ */
6708
+ page?: number;
6709
+ /**
6710
+ * Filter by quote currency (pricing currency, e.g., USD, CNY)
6711
+ */
6712
+ quoteCurrency?: string;
5852
6713
  /**
5853
6714
  * Region code for tenant context
5854
6715
  */
5855
6716
  region: 'cn' | 'us' | 'de' | 'gb';
5856
6717
  /**
5857
- * Specific session ID to clear (defaults to user session)
6718
+ * Search term for currency or quoteCurrency (case-insensitive partial match)
5858
6719
  */
5859
- sessionId?: string;
6720
+ search?: string;
5860
6721
  };
5861
6722
 
5862
- export type NlpControllerClearSessionResponse = void;
6723
+ export type PriceControllerFindAllResponse = PriceListResponseDto;
5863
6724
 
5864
- export type NlpControllerGetSessionData = {
6725
+ export type PriceControllerFindOneData = {
5865
6726
  /**
5866
- * Region code for tenant context
6727
+ * Price ID
5867
6728
  */
5868
- region: 'cn' | 'us' | 'de' | 'gb';
6729
+ id: string;
5869
6730
  /**
5870
- * Specific session ID to get (defaults to user session)
6731
+ * Region code for tenant context
5871
6732
  */
5872
- sessionId?: string;
6733
+ region: 'cn' | 'us' | 'de' | 'gb';
5873
6734
  };
5874
6735
 
5875
- export type NlpControllerGetSessionResponse = unknown;
6736
+ export type PriceControllerFindOneResponse = PriceResponseDto;
5876
6737
 
5877
- export type DashboardControllerGetNetWorthData = {
6738
+ export type PriceControllerUpdateData = {
5878
6739
  /**
5879
- * Date for balance calculation (ISO 8601 format)
6740
+ * Price ID
5880
6741
  */
5881
- date?: string;
6742
+ id: string;
5882
6743
  /**
5883
6744
  * Region code for tenant context
5884
6745
  */
5885
6746
  region: 'cn' | 'us' | 'de' | 'gb';
6747
+ requestBody: UpdateBeanPriceDto;
5886
6748
  };
5887
6749
 
5888
- export type DashboardControllerGetNetWorthResponse = NetWorthResponseDto;
6750
+ export type PriceControllerUpdateResponse = PriceResponseDto;
5889
6751
 
5890
- export type DashboardControllerGetAccountsData = {
5891
- /**
5892
- * Date for balance calculation (ISO 8601 format)
5893
- */
5894
- date?: string;
6752
+ export type PriceControllerDeleteData = {
5895
6753
  /**
5896
- * Grouping strategy
6754
+ * Price ID
5897
6755
  */
5898
- groupBy?: 'platform' | 'assetClass';
6756
+ id: string;
5899
6757
  /**
5900
6758
  * Region code for tenant context
5901
6759
  */
5902
6760
  region: 'cn' | 'us' | 'de' | 'gb';
5903
6761
  };
5904
6762
 
5905
- export type DashboardControllerGetAccountsResponse =
5906
- | AccountsResponseDto
5907
- | AssetClassAccountsResponseDto;
6763
+ export type PriceControllerDeleteResponse = void;
5908
6764
 
5909
- export type DashboardControllerGetCashFlowData = {
5910
- /**
5911
- * Period in YYYY-MM format
5912
- */
5913
- period: string;
6765
+ export type PriceControllerBulkCreateData = {
5914
6766
  /**
5915
6767
  * Region code for tenant context
5916
6768
  */
5917
6769
  region: 'cn' | 'us' | 'de' | 'gb';
6770
+ requestBody: Array<string>;
5918
6771
  };
5919
6772
 
5920
- export type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
6773
+ export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
5921
6774
 
5922
6775
  export type ReportingControllerGetPortfolioTrendsData = {
5923
6776
  /**
@@ -5937,6 +6790,24 @@ export type ReportingControllerGetPortfolioTrendsData = {
5937
6790
  export type ReportingControllerGetPortfolioTrendsResponse =
5938
6791
  PortfolioTrendsResponseDto;
5939
6792
 
6793
+ export type ReportingControllerGetCashFlowTrendsData = {
6794
+ /**
6795
+ * Data granularity (accepted for API symmetry; v1 returns month buckets)
6796
+ */
6797
+ granularity?: 'day' | 'week' | 'month';
6798
+ /**
6799
+ * Time period
6800
+ */
6801
+ period?: '1m' | '3m' | '6m' | '1y';
6802
+ /**
6803
+ * Region code for tenant context
6804
+ */
6805
+ region: 'cn' | 'us' | 'de' | 'gb';
6806
+ };
6807
+
6808
+ export type ReportingControllerGetCashFlowTrendsResponse =
6809
+ CashFlowTrendsResponseDto;
6810
+
5940
6811
  export type ReportingControllerGenerateSnapshotData = {
5941
6812
  /**
5942
6813
  * Region code for tenant context
@@ -7368,6 +8239,102 @@ export type $OpenApiTs = {
7368
8239
  };
7369
8240
  };
7370
8241
  };
8242
+ '/api/v1/{region}/bean/events': {
8243
+ post: {
8244
+ req: EventControllerCreateData;
8245
+ res: {
8246
+ /**
8247
+ * Life event created successfully
8248
+ */
8249
+ 201: EventResponseDto;
8250
+ /**
8251
+ * Life event already exists for this (userId, type, date) combination
8252
+ */
8253
+ 409: unknown;
8254
+ };
8255
+ };
8256
+ get: {
8257
+ req: EventControllerFindAllData;
8258
+ res: {
8259
+ /**
8260
+ * Life events retrieved successfully
8261
+ */
8262
+ 200: EventListResponseDto;
8263
+ };
8264
+ };
8265
+ };
8266
+ '/api/v1/{region}/bean/events/{id}': {
8267
+ get: {
8268
+ req: EventControllerFindOneData;
8269
+ res: {
8270
+ /**
8271
+ * Life event retrieved successfully
8272
+ */
8273
+ 200: EventResponseDto;
8274
+ /**
8275
+ * Life event not found
8276
+ */
8277
+ 404: unknown;
8278
+ };
8279
+ };
8280
+ put: {
8281
+ req: EventControllerUpdateData;
8282
+ res: {
8283
+ /**
8284
+ * Life event updated successfully
8285
+ */
8286
+ 200: EventResponseDto;
8287
+ /**
8288
+ * If-Match header is not a valid ISO 8601 date
8289
+ */
8290
+ 400: unknown;
8291
+ /**
8292
+ * Life event not found
8293
+ */
8294
+ 404: unknown;
8295
+ /**
8296
+ * Updated event conflicts with an existing (userId, type, date) combination
8297
+ */
8298
+ 409: unknown;
8299
+ /**
8300
+ * If-Match precondition failed (updatedAt mismatch)
8301
+ */
8302
+ 412: unknown;
8303
+ };
8304
+ };
8305
+ delete: {
8306
+ req: EventControllerDeleteData;
8307
+ res: {
8308
+ /**
8309
+ * Life event deleted successfully
8310
+ */
8311
+ 204: void;
8312
+ /**
8313
+ * Life event not found
8314
+ */
8315
+ 404: unknown;
8316
+ };
8317
+ };
8318
+ };
8319
+ '/api/v1/{region}/bean/events/{id}/slice': {
8320
+ get: {
8321
+ req: EventControllerGetSliceData;
8322
+ res: {
8323
+ /**
8324
+ * Time-series sliced by the life event range
8325
+ */
8326
+ 200: unknown;
8327
+ /**
8328
+ * accountPattern query param is empty
8329
+ */
8330
+ 400: unknown;
8331
+ /**
8332
+ * Life event not found
8333
+ */
8334
+ 404: unknown;
8335
+ };
8336
+ };
8337
+ };
7371
8338
  '/api/v1/{region}/bean/export/beancount': {
7372
8339
  get: {
7373
8340
  res: {
@@ -7658,6 +8625,32 @@ export type $OpenApiTs = {
7658
8625
  };
7659
8626
  };
7660
8627
  };
8628
+ '/api/v1/{region}/bean/import/parser-coverage-miss': {
8629
+ post: {
8630
+ req: TelemetryControllerReportCoverageMissData;
8631
+ res: {
8632
+ /**
8633
+ * Coverage miss report received
8634
+ */
8635
+ 200: unknown;
8636
+ /**
8637
+ * Unauthorized
8638
+ */
8639
+ 401: unknown;
8640
+ };
8641
+ };
8642
+ };
8643
+ '/api/v1/{region}/bean/import/parser-coverage-metrics': {
8644
+ get: {
8645
+ req: TelemetryControllerGetCoverageMetricsData;
8646
+ res: {
8647
+ /**
8648
+ * Coverage metrics
8649
+ */
8650
+ 200: unknown;
8651
+ };
8652
+ };
8653
+ };
7661
8654
  '/api/v1/{region}/bean/nlp/process': {
7662
8655
  post: {
7663
8656
  req: NlpControllerProcessNaturalLanguageData;
@@ -7727,7 +8720,10 @@ export type $OpenApiTs = {
7727
8720
  /**
7728
8721
  * Accounts retrieved successfully. Response type depends on groupBy parameter.
7729
8722
  */
7730
- 200: AccountsResponseDto | AssetClassAccountsResponseDto;
8723
+ 200:
8724
+ | AccountsResponseDto
8725
+ | AssetClassAccountsResponseDto
8726
+ | HoldingAssetClassCrossAccountResponseDto;
7731
8727
  /**
7732
8728
  * User not authenticated
7733
8729
  */
@@ -7754,6 +8750,109 @@ export type $OpenApiTs = {
7754
8750
  };
7755
8751
  };
7756
8752
  };
8753
+ '/api/v1/{region}/investment/holdings/pnl': {
8754
+ get: {
8755
+ req: HoldingPnlControllerGetHoldingPnlData;
8756
+ res: {
8757
+ /**
8758
+ * Holding P&L retrieved successfully
8759
+ */
8760
+ 200: HoldingPnlResponseDto;
8761
+ /**
8762
+ * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
8763
+ */
8764
+ 400: unknown;
8765
+ /**
8766
+ * User not authenticated
8767
+ */
8768
+ 401: unknown;
8769
+ };
8770
+ };
8771
+ };
8772
+ '/api/v1/{region}/bean/prices': {
8773
+ post: {
8774
+ req: PriceControllerCreateData;
8775
+ res: {
8776
+ /**
8777
+ * Price created successfully
8778
+ */
8779
+ 201: PriceResponseDto;
8780
+ /**
8781
+ * Currency or quoteCurrency commodity not found
8782
+ */
8783
+ 404: unknown;
8784
+ /**
8785
+ * Price already exists for this currency pair and date
8786
+ */
8787
+ 409: unknown;
8788
+ };
8789
+ };
8790
+ get: {
8791
+ req: PriceControllerFindAllData;
8792
+ res: {
8793
+ /**
8794
+ * Prices retrieved successfully
8795
+ */
8796
+ 200: PriceListResponseDto;
8797
+ };
8798
+ };
8799
+ };
8800
+ '/api/v1/{region}/bean/prices/{id}': {
8801
+ get: {
8802
+ req: PriceControllerFindOneData;
8803
+ res: {
8804
+ /**
8805
+ * Price retrieved successfully
8806
+ */
8807
+ 200: PriceResponseDto;
8808
+ /**
8809
+ * Price not found
8810
+ */
8811
+ 404: unknown;
8812
+ };
8813
+ };
8814
+ put: {
8815
+ req: PriceControllerUpdateData;
8816
+ res: {
8817
+ /**
8818
+ * Price updated successfully
8819
+ */
8820
+ 200: PriceResponseDto;
8821
+ /**
8822
+ * Price not found
8823
+ */
8824
+ 404: unknown;
8825
+ /**
8826
+ * Updated price conflicts with existing price
8827
+ */
8828
+ 409: unknown;
8829
+ };
8830
+ };
8831
+ delete: {
8832
+ req: PriceControllerDeleteData;
8833
+ res: {
8834
+ /**
8835
+ * Price deleted successfully
8836
+ */
8837
+ 204: void;
8838
+ /**
8839
+ * Price not found
8840
+ */
8841
+ 404: unknown;
8842
+ };
8843
+ };
8844
+ };
8845
+ '/api/v1/{region}/bean/prices/bulk': {
8846
+ post: {
8847
+ req: PriceControllerBulkCreateData;
8848
+ res: {
8849
+ /**
8850
+ * Prices created successfully
8851
+ */
8852
+ 201: Array<PriceResponseDto>;
8853
+ };
8854
+ };
8855
+ };
7757
8856
  '/api/v1/{region}/reporting/portfolio/trends': {
7758
8857
  get: {
7759
8858
  req: ReportingControllerGetPortfolioTrendsData;
@@ -7769,6 +8868,21 @@ export type $OpenApiTs = {
7769
8868
  };
7770
8869
  };
7771
8870
  };
8871
+ '/api/v1/{region}/reporting/cash-flow/trends': {
8872
+ get: {
8873
+ req: ReportingControllerGetCashFlowTrendsData;
8874
+ res: {
8875
+ /**
8876
+ * Cash-flow trends retrieved successfully
8877
+ */
8878
+ 200: CashFlowTrendsResponseDto;
8879
+ /**
8880
+ * User not authenticated
8881
+ */
8882
+ 401: unknown;
8883
+ };
8884
+ };
8885
+ };
7772
8886
  '/api/v1/{region}/reporting/snapshots/generate': {
7773
8887
  post: {
7774
8888
  req: ReportingControllerGenerateSnapshotData;