@firela/api-types 0.0.0-canary.d9762ea3 → 0.0.0-canary.da82874e

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.
@@ -36,6 +36,10 @@ export type CreateAccountDto = {
36
36
  * Icon identifier (overrides template)
37
37
  */
38
38
  icon?: string;
39
+ /**
40
+ * User-set display name override (omit/null = keep the derived name)
41
+ */
42
+ displayName?: string | null;
39
43
  /**
40
44
  * Open directive metadata (NOT an opening-balance amount — use the opening-balance endpoint)
41
45
  */
@@ -148,7 +152,7 @@ export type AccountResponseDto = {
148
152
  */
149
153
  isCustom: boolean;
150
154
  /**
151
- * Localized display name (ADR-0114, read-time projection)
155
+ * Display name with precedence: user-set name (#762) > ADR-0114 localized name > path leaf (read-time projection)
152
156
  */
153
157
  displayName?: string;
154
158
  /**
@@ -164,9 +168,7 @@ export type AccountResponseDto = {
164
168
  /**
165
169
  * Platform ID (null if unbound)
166
170
  */
167
- platformId?: {
168
- [key: string]: unknown;
169
- };
171
+ platformId?: string;
170
172
  /**
171
173
  * Platform details (populated if platformId is set)
172
174
  */
@@ -327,15 +329,27 @@ export type AccountStandardResponseDto = {
327
329
  */
328
330
  type: 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
329
331
  /**
330
- * Short localized display name
332
+ * Short display name. Universal rows project to the request locale (Accept-Language); regional rows keep the authored native name — mixed-language by design (ADR-0131 class P vs class A).
331
333
  */
332
334
  name?: string;
333
335
  /**
334
- * Account description (stable semantics only)
336
+ * Authored market-language alternative names delivered verbatim (not localized copy, not xlf-managed, not locale-projected). Flat string[] per ADR-0129 D1; ADR-0131 class A.
337
+ */
338
+ aliases?: Array<string>;
339
+ /**
340
+ * Locale-projected search synonyms (e.g. the zh bank-card / debit-card everyday terms for the checking account). Pure-locale projection — absent when the locale has no seeded synonyms; English fallback rides the authored aliases field. Search-only vocabulary, not the NLP routing corpus (#698, ADR-0131 fourth-class adjudication).
341
+ */
342
+ searchTerms?: Array<string>;
343
+ /**
344
+ * Product denomination as a 3-letter ISO 4217 code, authored market data delivered verbatim (not localized, not xlf-managed). ADR-0131 class A. Absent = single-currency not asserted — consumers fall back to their own region currency (#714).
345
+ */
346
+ currency?: string;
347
+ /**
348
+ * Account description (stable semantics only). Mixed-language contract: universal rows project to the request locale via the accountDesc xlf axis with an en fallback (ADR-0131 class P, ADR-0132; unseeded locales falling back to English are expected); regional rows deliver the authored market language (ADR-0131 class A, verbatim, never xlf-managed).
335
349
  */
336
350
  description: string;
337
351
  /**
338
- * Account tags for categorization
352
+ * Account tags for categorization — structured metadata delivered verbatim (not localized, not xlf-managed). ADR-0131 class A.
339
353
  */
340
354
  tags: Array<string>;
341
355
  /**
@@ -429,11 +443,18 @@ export type TemplateMetadataResponseDto = {
429
443
  export type RegionConfigDto = {
430
444
  currency: string;
431
445
  dateFormat: string;
446
+ /**
447
+ * Region-qualified BCP-47 tag whose region subtag equals the region's own ISO 3166-1 code (e.g., ja-JP, zh-CN, zh-HK)
448
+ */
432
449
  locale: string;
433
450
  };
434
451
 
435
452
  export type RegionInfoDto = {
436
453
  code: string;
454
+ /**
455
+ * Whether the region is open (has a ready regional account template). Not-yet-open regions still return identity metadata and degrade to the universal-only catalog.
456
+ */
457
+ open: boolean;
437
458
  displayName: string;
438
459
  parent?: string;
439
460
  chain: Array<string>;
@@ -595,7 +616,7 @@ export type PostingResponseDto = {
595
616
  */
596
617
  account: string;
597
618
  /**
598
- * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned.
619
+ * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned. Carries the raw Beancount sign (credit-normal accounts such as Income post negative — the accounting truth, ADR-0126); renderers must not infer economic semantics from this sign.
599
620
  */
600
621
  units?: string;
601
622
  /**
@@ -830,7 +851,7 @@ export type PostingDetailDto = {
830
851
  */
831
852
  account: string;
832
853
  /**
833
- * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned.
854
+ * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned. Carries the raw Beancount sign (credit-normal accounts such as Income post negative — the accounting truth, ADR-0126); renderers must not infer economic semantics from this sign.
834
855
  */
835
856
  units?: string;
836
857
  /**
@@ -976,6 +997,101 @@ export type flag2 =
976
997
  */
977
998
  export type status2 = 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
978
999
 
1000
+ export type TransactionListItemDto = {
1001
+ /**
1002
+ * Transaction ID
1003
+ */
1004
+ id: string;
1005
+ /**
1006
+ * Transaction date
1007
+ */
1008
+ date: string;
1009
+ /**
1010
+ * Transaction flag
1011
+ */
1012
+ flag?:
1013
+ | 'CLEARED'
1014
+ | 'PENDING'
1015
+ | 'PADDING'
1016
+ | 'SUMMARIZE'
1017
+ | 'TRANSFER'
1018
+ | 'CONVERSIONS';
1019
+ /**
1020
+ * Custom flag (if not using standard flags)
1021
+ */
1022
+ customFlag?: string;
1023
+ /**
1024
+ * Payee name
1025
+ */
1026
+ payee?: string;
1027
+ /**
1028
+ * Transaction narration
1029
+ */
1030
+ narration: string;
1031
+ /**
1032
+ * Transaction tags
1033
+ */
1034
+ tags: Array<string>;
1035
+ /**
1036
+ * Transaction links
1037
+ */
1038
+ links: Array<string>;
1039
+ /**
1040
+ * Transaction metadata
1041
+ */
1042
+ meta?: {
1043
+ [key: string]: unknown;
1044
+ };
1045
+ /**
1046
+ * Transaction status
1047
+ */
1048
+ status: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
1049
+ /**
1050
+ * Source type (free-form string from transaction metadata, e.g. import, api)
1051
+ */
1052
+ sourceType?: string;
1053
+ /**
1054
+ * Source platform (e.g., alipay, wechat)
1055
+ */
1056
+ sourcePlatform?: string;
1057
+ /**
1058
+ * Transaction postings
1059
+ */
1060
+ postings: Array<PostingDetailDto>;
1061
+ /**
1062
+ * Created at timestamp
1063
+ */
1064
+ createdAt: string;
1065
+ /**
1066
+ * Voided at timestamp (if voided)
1067
+ */
1068
+ voidedAt?: string;
1069
+ /**
1070
+ * User ID who voided this transaction
1071
+ */
1072
+ voidedBy?: string;
1073
+ /**
1074
+ * Correction reason (if voided or superseded)
1075
+ */
1076
+ correctionReason?: string;
1077
+ /**
1078
+ * ID of the transaction that supersedes this one (set when status=SUPERSEDED)
1079
+ */
1080
+ supersededBy?: string;
1081
+ /**
1082
+ * ID of the transaction this one corrected/replaced (back-link on the replacement)
1083
+ */
1084
+ originalTxn?: string;
1085
+ /**
1086
+ * Row amount under the request viewpoint (ADR-0126). Category viewpoint (category + flow): per-leg sign-normalized sum over the category account set (Income-root legs negated, Expenses-root identity) — positive under normal booking but NOT clamped (explicit negative expense legs and net-flip refund months stay negative). No viewpoint (plain list / search, no accountId): wallet money-flow net = raw-sign sum over cost-less Assets/Liabilities legs (income positive, expenses negative, transfers net ~0); color cue is the wallet sign (net < 0 = wealth-decreasing). Status-orthogonal: audit views match too (ADR-0128 amount-as-matching-key). Omitted under the account viewpoint (incl. dual) and for rows with no wallet leg.
1087
+ */
1088
+ viewpointAmount?: string;
1089
+ /**
1090
+ * Currency of viewpointAmount. A row spanning multiple currencies takes the largest-magnitude currency group (known simplification, ADR-0126).
1091
+ */
1092
+ viewpointCurrency?: string;
1093
+ };
1094
+
979
1095
  export type BalanceByCurrencyDto = {
980
1096
  /**
981
1097
  * ISO 4217 currency code
@@ -1004,7 +1120,7 @@ export type ExchangeRateWarningDto = {
1004
1120
 
1005
1121
  export type TransactionListSummaryDto = {
1006
1122
  /**
1007
- * 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.
1123
+ * Partial converted total in base currency (rated currencies only). Sign by viewpoint (ADR-0126): account viewpoint keeps the raw Beancount sign (income negative); category viewpoint is per-leg sign-normalized (Income legs negated, Expenses legs identity — positive under normal booking, not clamped). 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.
1008
1124
  */
1009
1125
  totalAmount: string;
1010
1126
  /**
@@ -1021,11 +1137,32 @@ export type TransactionListSummaryDto = {
1021
1137
  warnings?: Array<ExchangeRateWarningDto>;
1022
1138
  };
1023
1139
 
1140
+ export type TransactionListViewpointDto = {
1141
+ /**
1142
+ * Viewpoint type (only category drill-down carries a viewpoint today)
1143
+ */
1144
+ type: 'category';
1145
+ /**
1146
+ * Flow root the category account set is restricted to
1147
+ */
1148
+ flow: 'income' | 'expense';
1149
+ };
1150
+
1151
+ /**
1152
+ * Viewpoint type (only category drill-down carries a viewpoint today)
1153
+ */
1154
+ export type type2 = 'category';
1155
+
1156
+ /**
1157
+ * Flow root the category account set is restricted to
1158
+ */
1159
+ export type flow = 'income' | 'expense';
1160
+
1024
1161
  export type TransactionListResponseDto = {
1025
1162
  /**
1026
1163
  * List of transactions
1027
1164
  */
1028
- data: Array<TransactionDetailDto>;
1165
+ data: Array<TransactionListItemDto>;
1029
1166
  /**
1030
1167
  * Total count of matching transactions
1031
1168
  */
@@ -1042,6 +1179,10 @@ export type TransactionListResponseDto = {
1042
1179
  * 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.
1043
1180
  */
1044
1181
  summary?: TransactionListSummaryDto;
1182
+ /**
1183
+ * Viewpoint metadata (ADR-0126). Present only for a single category filter (category + flow, no accountId); dual-perspective requests are viewpoint-less (raw signs, no viewpointAmount).
1184
+ */
1185
+ viewpoint?: TransactionListViewpointDto;
1045
1186
  };
1046
1187
 
1047
1188
  export type TagSuggestionDto = {
@@ -1253,7 +1394,7 @@ export type ReviewSummaryDto = {
1253
1394
  /**
1254
1395
  * Review type
1255
1396
  */
1256
- export type type2 =
1397
+ export type type3 =
1257
1398
  | 'DUPLICATE'
1258
1399
  | 'RULE_MATCH'
1259
1400
  | 'PAYEE_MATCH'
@@ -1701,7 +1842,7 @@ export type UpdatePayeeDto = {
1701
1842
  */
1702
1843
  customTags?: Array<string>;
1703
1844
  /**
1704
- * Metadata for extended information (location, notes, contact info, etc.). Will merge with existing metadata.
1845
+ * Metadata for extended information (location, notes, contact info, etc.)
1705
1846
  */
1706
1847
  meta?: {
1707
1848
  [key: string]: unknown;
@@ -2094,481 +2235,449 @@ export type UpdateCommodityDto = {
2094
2235
  };
2095
2236
  };
2096
2237
 
2097
- export type CreateBeanPriceDto = {
2238
+ export type CurrencyBalanceDto = {
2098
2239
  /**
2099
- * Currency being priced (e.g., USD, AAPL, BTC)
2240
+ * ISO 4217 currency code
2100
2241
  */
2101
2242
  currency: string;
2102
2243
  /**
2103
- * Quote currency (pricing currency, e.g., CNY, EUR)
2104
- */
2105
- quoteCurrency: string;
2106
- /**
2107
- * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
2244
+ * Balance amount
2108
2245
  */
2109
- amount: number;
2246
+ balance: string;
2247
+ };
2248
+
2249
+ export type TimeSeriesPointDto = {
2110
2250
  /**
2111
- * Price date (ISO 8601 format)
2251
+ * Date in YYYY-MM-DD format
2112
2252
  */
2113
2253
  date: string;
2114
2254
  /**
2115
- * Metadata (validated by Zod schema, max field lengths enforced)
2116
- */
2117
- metadata?: {
2118
- [key: string]: unknown;
2119
- };
2120
- };
2121
-
2122
- export type PriceResponseDto = {
2123
- /**
2124
- * Unique identifier
2255
+ * Value at this date (in base currency)
2125
2256
  */
2126
- id: string;
2257
+ value: string;
2127
2258
  /**
2128
- * User ID (owner of the price)
2259
+ * Change from previous point
2129
2260
  */
2130
- userId: string;
2261
+ change?: string;
2131
2262
  /**
2132
- * Currency being priced (e.g., USD, AAPL, BTC)
2263
+ * Total assets at this date (in base currency)
2133
2264
  */
2134
- currency: string;
2265
+ assets?: string;
2135
2266
  /**
2136
- * Quote currency (pricing currency, e.g., USD, CNY)
2267
+ * Total liabilities at this date (in base currency)
2137
2268
  */
2138
- quoteCurrency: string;
2269
+ liabilities?: string;
2139
2270
  /**
2140
- * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
2271
+ * Multi-currency breakdown for this point
2141
2272
  */
2142
- amount: number;
2273
+ byCurrency?: Array<CurrencyBalanceDto>;
2274
+ };
2275
+
2276
+ export type TrendSummaryDto = {
2143
2277
  /**
2144
- * Price date (ISO 8601 format). Represents the date this price was valid.
2278
+ * Value at start of period
2145
2279
  */
2146
- date: string;
2280
+ startValue: string;
2147
2281
  /**
2148
- * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
2282
+ * Value at end of period
2149
2283
  */
2150
- meta: {
2151
- [key: string]: unknown;
2152
- };
2284
+ endValue: string;
2153
2285
  /**
2154
- * Creation timestamp
2286
+ * Total change over period
2155
2287
  */
2156
- createdAt: string;
2288
+ totalChange: string;
2157
2289
  /**
2158
- * Last update timestamp
2290
+ * Total change percentage
2159
2291
  */
2160
- updatedAt: string;
2292
+ totalChangePercentage: string;
2161
2293
  };
2162
2294
 
2163
- export type PriceListResponseDto = {
2295
+ export type MultiCurrencyPointDto = {
2164
2296
  /**
2165
- * List of prices
2297
+ * Date in YYYY-MM-DD format
2166
2298
  */
2167
- items: Array<PriceResponseDto>;
2299
+ date: string;
2168
2300
  /**
2169
- * Total number of prices
2301
+ * Balances by currency
2170
2302
  */
2171
- total: number;
2303
+ byCurrency: Array<CurrencyBalanceDto>;
2172
2304
  };
2173
2305
 
2174
- export type UpdateBeanPriceDto = {
2306
+ export type PortfolioTrendsResponseDto = {
2175
2307
  /**
2176
- * Currency being priced
2308
+ * Time series data points
2177
2309
  */
2178
- currency?: string;
2310
+ series: Array<TimeSeriesPointDto>;
2179
2311
  /**
2180
- * Quote currency (pricing currency)
2312
+ * Period summary
2181
2313
  */
2182
- quoteCurrency?: string;
2314
+ summary: TrendSummaryDto;
2183
2315
  /**
2184
- * Price amount (MUST be >= 0 per Beancount spec)
2316
+ * Period requested
2185
2317
  */
2186
- amount?: number;
2318
+ period: string;
2187
2319
  /**
2188
- * Price date (ISO 8601 format)
2320
+ * Data granularity
2189
2321
  */
2190
- date?: string;
2322
+ granularity: string;
2191
2323
  /**
2192
- * Metadata
2324
+ * Base currency for converted values
2193
2325
  */
2194
- metadata?: {
2195
- [key: string]: unknown;
2196
- };
2197
- };
2198
-
2199
- export type CreateRecurringRuleDto = {
2326
+ currency: string;
2200
2327
  /**
2201
- * Rule name (unique per user)
2328
+ * Multi-currency time series (each point has currency breakdown)
2202
2329
  */
2203
- name: string;
2330
+ byCurrency?: Array<MultiCurrencyPointDto>;
2204
2331
  /**
2205
- * Icon emoji
2332
+ * Exchange rate warnings
2206
2333
  */
2207
- icon?: string;
2334
+ warnings?: Array<ExchangeRateWarningDto>;
2335
+ };
2336
+
2337
+ export type CashFlowPointDto = {
2208
2338
  /**
2209
- * Recurring frequency
2339
+ * Month key (YYYY-MM)
2210
2340
  */
2211
- frequency:
2212
- | 'WEEKLY'
2213
- | 'BIWEEKLY'
2214
- | 'MONTHLY'
2215
- | 'BIMONTHLY'
2216
- | 'QUARTERLY'
2217
- | 'YEARLY'
2218
- | 'CUSTOM';
2341
+ month: string;
2219
2342
  /**
2220
- * Expected amount (positive number)
2343
+ * Income in base currency (absolute, converted)
2221
2344
  */
2222
- expectedAmount: number;
2345
+ income: string;
2223
2346
  /**
2224
- * Expected day of month (1-31)
2347
+ * Expense in base currency (absolute, converted)
2225
2348
  */
2226
- expectedDay?: number;
2349
+ expense: string;
2227
2350
  /**
2228
- * Custom interval in days (required for CUSTOM frequency)
2351
+ * netSavings = income − expense (savings positive)
2229
2352
  */
2230
- customIntervalDays?: number;
2353
+ netSavings: string;
2354
+ };
2355
+
2356
+ export type CashFlowTrendSummaryDto = {
2231
2357
  /**
2232
- * Currency code
2358
+ * Total income across the period
2233
2359
  */
2234
- currency: string;
2360
+ totalIncome: string;
2235
2361
  /**
2236
- * Payee matching pattern (supports wildcards)
2362
+ * Total expense across the period
2237
2363
  */
2238
- matchPayeePattern?: string;
2364
+ totalExpense: string;
2239
2365
  /**
2240
- * Amount tolerance percentage (0-1)
2366
+ * income − expense across the period
2241
2367
  */
2242
- matchAmountTolerance: number;
2368
+ totalNetSavings: string;
2243
2369
  /**
2244
- * Default expense account for auto-create
2370
+ * totalNetSavings divided by the window length (N months, incl. zero-filled)
2245
2371
  */
2246
- defaultExpenseAccount?: string;
2372
+ averageMonthlyNetSavings: string;
2373
+ };
2374
+
2375
+ export type CashFlowTrendsResponseDto = {
2247
2376
  /**
2248
- * Default payment account for auto-create
2377
+ * Monthly cash-flow series (fixed N-month window, zero-filled)
2249
2378
  */
2250
- defaultPaymentAccount?: string;
2379
+ series: Array<CashFlowPointDto>;
2251
2380
  /**
2252
- * Default payee for auto-create
2381
+ * Period totals
2253
2382
  */
2254
- defaultPayee?: string;
2383
+ summary: CashFlowTrendSummaryDto;
2255
2384
  /**
2256
- * Auto-create transaction when expected date arrives
2385
+ * Period requested
2257
2386
  */
2258
- autoCreate: boolean;
2387
+ period: string;
2259
2388
  /**
2260
- * Rule start date (ISO format)
2389
+ * Data granularity (v1 returns month buckets)
2261
2390
  */
2262
- startDate?: string;
2391
+ granularity: string;
2263
2392
  /**
2264
- * Rule end date (ISO format)
2393
+ * Base currency for converted values
2265
2394
  */
2266
- endDate?: string;
2395
+ currency: string;
2396
+ /**
2397
+ * Exchange rate warnings (e.g. missing rate for a currency)
2398
+ */
2399
+ warnings?: Array<ExchangeRateWarningDto>;
2267
2400
  };
2268
2401
 
2269
- /**
2270
- * Recurring frequency
2271
- */
2272
- export type frequency =
2273
- | 'WEEKLY'
2274
- | 'BIWEEKLY'
2275
- | 'MONTHLY'
2276
- | 'BIMONTHLY'
2277
- | 'QUARTERLY'
2278
- | 'YEARLY'
2279
- | 'CUSTOM';
2402
+ export type GenerateSnapshotBody = unknown;
2280
2403
 
2281
- export type RecurringRuleResponseDto = {
2282
- /**
2283
- * Rule ID
2284
- */
2285
- id: string;
2286
- /**
2287
- * User ID
2288
- */
2289
- userId: string;
2404
+ export type GenerateSnapshotResponse = unknown;
2405
+
2406
+ export type BackfillSnapshotsBody = unknown;
2407
+
2408
+ export type BackfillSnapshotsResponse = unknown;
2409
+
2410
+ export type CreateBeanPriceDto = {
2290
2411
  /**
2291
- * Rule name
2412
+ * Currency being priced (e.g., USD, AAPL, BTC)
2292
2413
  */
2293
- name: string;
2414
+ currency: string;
2294
2415
  /**
2295
- * Icon emoji
2416
+ * Quote currency (pricing currency, e.g., CNY, EUR)
2296
2417
  */
2297
- icon?: {
2298
- [key: string]: unknown;
2299
- };
2418
+ quoteCurrency: string;
2300
2419
  /**
2301
- * Recurring frequency
2420
+ * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
2302
2421
  */
2303
- frequency: string;
2422
+ amount: number;
2304
2423
  /**
2305
- * Expected amount
2424
+ * Price date (ISO 8601 format)
2306
2425
  */
2307
- expectedAmount: number;
2426
+ date: string;
2308
2427
  /**
2309
- * Expected day of month
2428
+ * Metadata (validated by Zod schema, max field lengths enforced)
2310
2429
  */
2311
- expectedDay?: {
2430
+ metadata?: {
2312
2431
  [key: string]: unknown;
2313
2432
  };
2433
+ };
2434
+
2435
+ export type PriceResponseDto = {
2314
2436
  /**
2315
- * Custom interval in days
2437
+ * Unique identifier
2316
2438
  */
2317
- customIntervalDays?: {
2318
- [key: string]: unknown;
2319
- };
2439
+ id: string;
2320
2440
  /**
2321
- * Currency code
2441
+ * User ID (owner of the price)
2442
+ */
2443
+ userId: string;
2444
+ /**
2445
+ * Currency being priced (e.g., USD, AAPL, BTC)
2322
2446
  */
2323
2447
  currency: string;
2324
2448
  /**
2325
- * Payee matching pattern
2449
+ * Quote currency (pricing currency, e.g., USD, CNY)
2326
2450
  */
2327
- matchPayeePattern?: {
2328
- [key: string]: unknown;
2329
- };
2451
+ quoteCurrency: string;
2330
2452
  /**
2331
- * Amount tolerance percentage
2453
+ * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
2332
2454
  */
2333
- matchAmountTolerance: number;
2455
+ amount: number;
2334
2456
  /**
2335
- * Default expense account
2457
+ * Price date (ISO 8601 format). Represents the date this price was valid.
2336
2458
  */
2337
- defaultExpenseAccount?: {
2338
- [key: string]: unknown;
2339
- };
2459
+ date: string;
2340
2460
  /**
2341
- * Default payment account
2461
+ * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
2342
2462
  */
2343
- defaultPaymentAccount?: {
2463
+ meta: {
2344
2464
  [key: string]: unknown;
2345
2465
  };
2346
2466
  /**
2347
- * Default payee
2467
+ * Creation timestamp
2348
2468
  */
2349
- defaultPayee?: {
2350
- [key: string]: unknown;
2351
- };
2469
+ createdAt: string;
2352
2470
  /**
2353
- * Whether rule is active
2471
+ * Last update timestamp
2354
2472
  */
2355
- isActive: boolean;
2473
+ updatedAt: string;
2474
+ };
2475
+
2476
+ export type PriceListResponseDto = {
2356
2477
  /**
2357
- * Rule start date (YYYY-MM-DD)
2478
+ * List of prices
2358
2479
  */
2359
- startDate: string;
2480
+ items: Array<PriceResponseDto>;
2360
2481
  /**
2361
- * Rule end date (YYYY-MM-DD)
2482
+ * Total number of prices
2362
2483
  */
2363
- endDate?: {
2364
- [key: string]: unknown;
2365
- };
2484
+ total: number;
2485
+ };
2486
+
2487
+ export type UpdateBeanPriceDto = {
2366
2488
  /**
2367
- * Auto-create transaction on expected date
2489
+ * Currency being priced
2368
2490
  */
2369
- autoCreate: boolean;
2491
+ currency?: string;
2370
2492
  /**
2371
- * Last matched occurrence date (YYYY-MM-DD)
2493
+ * Quote currency (pricing currency)
2372
2494
  */
2373
- lastOccurrence?: {
2374
- [key: string]: unknown;
2375
- };
2495
+ quoteCurrency?: string;
2376
2496
  /**
2377
- * Total matched transactions count
2497
+ * Price amount (MUST be >= 0 per Beancount spec)
2378
2498
  */
2379
- totalCount: number;
2499
+ amount?: number;
2380
2500
  /**
2381
- * Created at timestamp
2501
+ * Price date (ISO 8601 format)
2382
2502
  */
2383
- createdAt: string;
2503
+ date?: string;
2384
2504
  /**
2385
- * Updated at timestamp
2505
+ * Metadata
2386
2506
  */
2387
- updatedAt: string;
2507
+ metadata?: {
2508
+ [key: string]: unknown;
2509
+ };
2388
2510
  };
2389
2511
 
2390
- export type CreateRuleFromTransactionDto = {
2391
- /**
2392
- * Recurring frequency
2393
- */
2394
- frequency:
2395
- | 'WEEKLY'
2396
- | 'BIWEEKLY'
2397
- | 'MONTHLY'
2398
- | 'BIMONTHLY'
2399
- | 'QUARTERLY'
2400
- | 'YEARLY'
2401
- | 'CUSTOM';
2402
- /**
2403
- * Optional name override (default: transaction payee)
2404
- */
2405
- name?: string;
2512
+ export type DeleteOwnUserDto = {
2406
2513
  /**
2407
- * Optional icon emoji
2514
+ * Access token for user verification
2408
2515
  */
2409
- icon?: string;
2516
+ accessToken: string;
2410
2517
  };
2411
2518
 
2412
- export type RecurringRuleWithStatsResponseDto = {
2519
+ export type UserSettingsResponseDto = {
2413
2520
  /**
2414
- * Rule ID
2521
+ * Stored base currency choice (ISO 4217) for net-worth/report aggregation. null = user never chose; aggregates fall back to the region default at display time (#713).
2415
2522
  */
2416
- id: string;
2523
+ baseCurrency: string | null;
2524
+ };
2525
+
2526
+ export type UserResponseDto = {
2417
2527
  /**
2418
2528
  * User ID
2419
2529
  */
2420
- userId: string;
2421
- /**
2422
- * Rule name
2423
- */
2424
- name: string;
2530
+ id: string;
2425
2531
  /**
2426
- * Icon emoji
2532
+ * Assigned user role
2427
2533
  */
2428
- icon?: {
2429
- [key: string]: unknown;
2430
- };
2534
+ role: string;
2431
2535
  /**
2432
- * Recurring frequency
2536
+ * Permission strings
2433
2537
  */
2434
- frequency: string;
2538
+ permissions: Array<string>;
2435
2539
  /**
2436
- * Expected amount
2540
+ * User settings
2437
2541
  */
2438
- expectedAmount: number;
2542
+ settings: UserSettingsResponseDto;
2543
+ };
2544
+
2545
+ export type SignupDto = {
2439
2546
  /**
2440
- * Expected day of month
2547
+ * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2441
2548
  */
2442
- expectedDay?: {
2443
- [key: string]: unknown;
2444
- };
2549
+ turnstileToken?: string;
2550
+ };
2551
+
2552
+ export type SignupResponseDto = {
2445
2553
  /**
2446
- * Custom interval in days
2554
+ * JWT auth token
2447
2555
  */
2448
- customIntervalDays?: {
2449
- [key: string]: unknown;
2450
- };
2556
+ authToken: string;
2451
2557
  /**
2452
- * Currency code
2558
+ * Auto-generated access token
2453
2559
  */
2454
- currency: string;
2560
+ accessToken: string;
2455
2561
  /**
2456
- * Payee matching pattern
2562
+ * Assigned user role
2457
2563
  */
2458
- matchPayeePattern?: {
2459
- [key: string]: unknown;
2460
- };
2564
+ role: 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2565
+ };
2566
+
2567
+ /**
2568
+ * Assigned user role
2569
+ */
2570
+ export type role = 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2571
+
2572
+ export type UpdateUserSettingDto = {
2461
2573
  /**
2462
- * Amount tolerance percentage
2574
+ * Security ID
2463
2575
  */
2464
- matchAmountTolerance: number;
2576
+ secId?: number;
2465
2577
  /**
2466
- * Default expense account
2578
+ * Annual interest rate
2467
2579
  */
2468
- defaultExpenseAccount?: {
2469
- [key: string]: unknown;
2470
- };
2580
+ annualInterestRate?: number;
2471
2581
  /**
2472
- * Default payment account
2473
- */
2474
- defaultPaymentAccount?: {
2475
- [key: string]: unknown;
2476
- };
2582
+ * Currency code
2583
+ */
2584
+ currency?: string;
2477
2585
  /**
2478
- * Default payee
2586
+ * Base currency code
2479
2587
  */
2480
- defaultPayee?: {
2481
- [key: string]: unknown;
2482
- };
2588
+ baseCurrency?: string;
2483
2589
  /**
2484
- * Whether rule is active
2590
+ * Benchmark symbol
2485
2591
  */
2486
- isActive: boolean;
2592
+ benchmark?: string;
2487
2593
  /**
2488
- * Rule start date (YYYY-MM-DD)
2594
+ * Color scheme
2489
2595
  */
2490
- startDate: string;
2596
+ colorScheme?: 'DARK' | 'LIGHT';
2491
2597
  /**
2492
- * Rule end date (YYYY-MM-DD)
2598
+ * Date range filter
2493
2599
  */
2494
- endDate?: {
2495
- [key: string]: unknown;
2496
- };
2600
+ dateRange?: string;
2497
2601
  /**
2498
- * Auto-create transaction on expected date
2602
+ * Emergency fund amount
2499
2603
  */
2500
- autoCreate: boolean;
2604
+ emergencyFund?: number;
2501
2605
  /**
2502
- * Last matched occurrence date (YYYY-MM-DD)
2606
+ * Account filter IDs
2503
2607
  */
2504
- lastOccurrence?: {
2505
- [key: string]: unknown;
2506
- };
2608
+ 'filters.accounts'?: Array<string>;
2507
2609
  /**
2508
- * Total matched transactions count
2610
+ * Asset class filters
2509
2611
  */
2510
- totalCount: number;
2612
+ 'filters.assetClasses'?: Array<string>;
2511
2613
  /**
2512
- * Created at timestamp
2614
+ * Data source filter
2513
2615
  */
2514
- createdAt: string;
2616
+ 'filters.dataSource'?: string;
2515
2617
  /**
2516
- * Updated at timestamp
2618
+ * Symbol filter
2517
2619
  */
2518
- updatedAt: string;
2620
+ 'filters.symbol'?: string;
2519
2621
  /**
2520
- * Number of pending expected transactions
2622
+ * Tag filters
2521
2623
  */
2522
- pendingCount: number;
2624
+ 'filters.tags'?: Array<string>;
2523
2625
  /**
2524
- * Number of overdue expected transactions
2626
+ * Enable experimental features
2525
2627
  */
2526
- overdueCount: number;
2628
+ isExperimentalFeatures?: boolean;
2527
2629
  /**
2528
- * Next expected date (YYYY-MM-DD)
2630
+ * Enable restricted view mode
2529
2631
  */
2530
- nextExpectedDate?: {
2531
- [key: string]: unknown;
2532
- };
2632
+ isRestrictedView?: boolean;
2533
2633
  /**
2534
- * Total amount of all matched transactions
2634
+ * Language code
2535
2635
  */
2536
- totalAmount: number;
2636
+ language?: string;
2537
2637
  /**
2538
- * Average amount per transaction
2638
+ * Locale code
2539
2639
  */
2540
- averageAmount: number;
2640
+ locale?: string;
2541
2641
  /**
2542
- * Number of matched transactions
2642
+ * Projected total amount
2543
2643
  */
2544
- transactionCount: number;
2644
+ projectedTotalAmount?: number;
2545
2645
  /**
2546
- * First matched transaction date (YYYY-MM-DD)
2646
+ * Retirement date in ISO 8601 format
2547
2647
  */
2548
- firstDate?: {
2549
- [key: string]: unknown;
2550
- };
2648
+ retirementDate?: string;
2551
2649
  /**
2552
- * Last matched transaction date (YYYY-MM-DD)
2650
+ * Savings rate percentage
2553
2651
  */
2554
- lastDate?: {
2555
- [key: string]: unknown;
2556
- };
2652
+ savingsRate?: number;
2557
2653
  /**
2558
- * Amount variance (standard deviation squared)
2654
+ * View mode
2559
2655
  */
2560
- variance: number;
2656
+ viewMode?: 'DEFAULT' | 'ZEN';
2657
+ };
2658
+
2659
+ /**
2660
+ * Color scheme
2661
+ */
2662
+ export type colorScheme = 'DARK' | 'LIGHT';
2663
+
2664
+ /**
2665
+ * View mode
2666
+ */
2667
+ export type viewMode = 'DEFAULT' | 'ZEN';
2668
+
2669
+ export type UpdatePropertyDto = {
2561
2670
  /**
2562
- * Number of upcoming expected transactions
2671
+ * Property value
2563
2672
  */
2564
- upcomingCount: number;
2673
+ value: string;
2565
2674
  };
2566
2675
 
2567
- export type UpdateRecurringRuleDto = {
2676
+ export type CreateRecurringRuleDto = {
2568
2677
  /**
2569
- * Rule name
2678
+ * Rule name (unique per user)
2570
2679
  */
2571
- name?: string;
2680
+ name: string;
2572
2681
  /**
2573
2682
  * Icon emoji
2574
2683
  */
@@ -2576,7 +2685,7 @@ export type UpdateRecurringRuleDto = {
2576
2685
  /**
2577
2686
  * Recurring frequency
2578
2687
  */
2579
- frequency?:
2688
+ frequency:
2580
2689
  | 'WEEKLY'
2581
2690
  | 'BIWEEKLY'
2582
2691
  | 'MONTHLY'
@@ -2585,15 +2694,15 @@ export type UpdateRecurringRuleDto = {
2585
2694
  | 'YEARLY'
2586
2695
  | 'CUSTOM';
2587
2696
  /**
2588
- * Expected amount
2697
+ * Expected amount (positive number)
2589
2698
  */
2590
- expectedAmount?: number;
2699
+ expectedAmount: number;
2591
2700
  /**
2592
2701
  * Expected day of month (1-31)
2593
2702
  */
2594
2703
  expectedDay?: number;
2595
2704
  /**
2596
- * Custom interval in days
2705
+ * Custom interval in days (required for CUSTOM frequency)
2597
2706
  */
2598
2707
  customIntervalDays?: number;
2599
2708
  /**
@@ -2601,111 +2710,132 @@ export type UpdateRecurringRuleDto = {
2601
2710
  */
2602
2711
  currency?: string;
2603
2712
  /**
2604
- * Payee matching pattern
2713
+ * Payee matching pattern (supports wildcards)
2605
2714
  */
2606
2715
  matchPayeePattern?: string;
2607
2716
  /**
2608
2717
  * Amount tolerance percentage (0-1)
2609
2718
  */
2610
- matchAmountTolerance?: number;
2719
+ matchAmountTolerance: number;
2611
2720
  /**
2612
- * Default expense account
2721
+ * Default expense account for auto-create
2613
2722
  */
2614
2723
  defaultExpenseAccount?: string;
2615
2724
  /**
2616
- * Default payment account
2725
+ * Default payment account for auto-create
2617
2726
  */
2618
2727
  defaultPaymentAccount?: string;
2619
2728
  /**
2620
- * Default payee
2729
+ * Default payee for auto-create
2621
2730
  */
2622
2731
  defaultPayee?: string;
2623
2732
  /**
2624
- * Auto-create transaction
2733
+ * Auto-create transaction when expected date arrives
2625
2734
  */
2626
- autoCreate?: boolean;
2735
+ autoCreate: boolean;
2627
2736
  /**
2628
- * Rule active status
2737
+ * Rule start date (ISO format)
2629
2738
  */
2630
- isActive?: boolean;
2739
+ startDate?: string;
2631
2740
  /**
2632
2741
  * Rule end date (ISO format)
2633
2742
  */
2634
2743
  endDate?: string;
2635
2744
  };
2636
2745
 
2637
- export type ExpectedTransactionRuleDto = {
2746
+ /**
2747
+ * Recurring frequency
2748
+ */
2749
+ export type frequency =
2750
+ | 'WEEKLY'
2751
+ | 'BIWEEKLY'
2752
+ | 'MONTHLY'
2753
+ | 'BIMONTHLY'
2754
+ | 'QUARTERLY'
2755
+ | 'YEARLY'
2756
+ | 'CUSTOM';
2757
+
2758
+ export type RecurringRuleResponseDto = {
2759
+ /**
2760
+ * Rule ID
2761
+ */
2762
+ id: string;
2763
+ /**
2764
+ * User ID
2765
+ */
2766
+ userId: string;
2638
2767
  /**
2639
2768
  * Rule name
2640
2769
  */
2641
2770
  name: string;
2642
2771
  /**
2643
- * Rule icon
2772
+ * Icon emoji
2644
2773
  */
2645
- icon?: {
2646
- [key: string]: unknown;
2647
- };
2774
+ icon?: string;
2648
2775
  /**
2649
- * Rule frequency
2776
+ * Recurring frequency
2650
2777
  */
2651
2778
  frequency: string;
2779
+ /**
2780
+ * Expected amount
2781
+ */
2782
+ expectedAmount: number;
2783
+ /**
2784
+ * Expected day of month
2785
+ */
2786
+ expectedDay?: number;
2787
+ /**
2788
+ * Custom interval in days
2789
+ */
2790
+ customIntervalDays?: number;
2652
2791
  /**
2653
2792
  * Currency code
2654
2793
  */
2655
2794
  currency: string;
2656
- };
2657
-
2658
- export type ExpectedTransactionResponseDto = {
2659
2795
  /**
2660
- * Expected transaction ID
2796
+ * Payee matching pattern
2661
2797
  */
2662
- id: string;
2798
+ matchPayeePattern?: string;
2663
2799
  /**
2664
- * User ID
2800
+ * Amount tolerance percentage
2665
2801
  */
2666
- userId: string;
2802
+ matchAmountTolerance: number;
2667
2803
  /**
2668
- * Associated rule ID
2804
+ * Default expense account
2669
2805
  */
2670
- ruleId: string;
2806
+ defaultExpenseAccount?: string;
2671
2807
  /**
2672
- * Expected date (YYYY-MM-DD)
2808
+ * Default payment account
2673
2809
  */
2674
- expectedDate: string;
2810
+ defaultPaymentAccount?: string;
2675
2811
  /**
2676
- * Expected amount
2812
+ * Default payee
2677
2813
  */
2678
- expectedAmount: number;
2814
+ defaultPayee?: string;
2679
2815
  /**
2680
- * Status (PENDING, COMPLETED, SKIPPED)
2816
+ * Whether rule is active
2681
2817
  */
2682
- status: string;
2818
+ isActive: boolean;
2683
2819
  /**
2684
- * Matched transaction ID
2820
+ * Rule start date (YYYY-MM-DD)
2685
2821
  */
2686
- matchedTransactionId?: {
2687
- [key: string]: unknown;
2688
- };
2822
+ startDate: string;
2689
2823
  /**
2690
- * Match timestamp (ISO 8601)
2824
+ * Rule end date (YYYY-MM-DD)
2691
2825
  */
2692
- matchedAt?: {
2693
- [key: string]: unknown;
2694
- };
2826
+ endDate?: string;
2695
2827
  /**
2696
- * Match confidence score (0-1)
2828
+ * Auto-create transaction on expected date
2697
2829
  */
2698
- matchConfidence?: {
2699
- [key: string]: unknown;
2700
- };
2830
+ autoCreate: boolean;
2701
2831
  /**
2702
- * Whether this expected transaction is overdue
2832
+ * Last matched occurrence date (YYYY-MM-DD)
2703
2833
  */
2704
- isOverdue: boolean;
2834
+ lastOccurrence?: string;
2705
2835
  /**
2706
- * Rule information
2836
+ * Total matched transactions count
2707
2837
  */
2708
- rule: ExpectedTransactionRuleDto;
2838
+ totalCount: number;
2709
2839
  /**
2710
2840
  * Created at timestamp
2711
2841
  */
@@ -2716,461 +2846,420 @@ export type ExpectedTransactionResponseDto = {
2716
2846
  updatedAt: string;
2717
2847
  };
2718
2848
 
2719
- export type ExpectedTransactionListResponseDto = {
2720
- items: Array<ExpectedTransactionResponseDto>;
2721
- /**
2722
- * Total count
2723
- */
2724
- total: number;
2725
- };
2726
-
2727
- export type ConfirmMatchDto = {
2728
- /**
2729
- * Transaction ID to match with
2730
- */
2731
- transactionId: string;
2732
- };
2733
-
2734
- export type EnterNowDto = {
2735
- /**
2736
- * Override expense account (uses rule default if not provided)
2737
- */
2738
- expenseAccount?: string;
2739
- /**
2740
- * Override payment account (uses rule default if not provided)
2741
- */
2742
- paymentAccount?: string;
2849
+ export type CreateRuleFromTransactionDto = {
2743
2850
  /**
2744
- * Override amount (uses expected amount if not provided)
2851
+ * Recurring frequency
2745
2852
  */
2746
- amount?: number;
2853
+ frequency:
2854
+ | 'WEEKLY'
2855
+ | 'BIWEEKLY'
2856
+ | 'MONTHLY'
2857
+ | 'BIMONTHLY'
2858
+ | 'QUARTERLY'
2859
+ | 'YEARLY'
2860
+ | 'CUSTOM';
2747
2861
  /**
2748
- * Override payee (uses rule default if not provided)
2862
+ * Optional name override (default: transaction payee)
2749
2863
  */
2750
- payee?: string;
2864
+ name?: string;
2751
2865
  /**
2752
- * Optional narration
2866
+ * Optional icon emoji
2753
2867
  */
2754
- narration?: string;
2868
+ icon?: string;
2755
2869
  };
2756
2870
 
2757
- export type ForecastItemDto = {
2871
+ export type RecurringRuleWithStatsResponseDto = {
2872
+ /**
2873
+ * Rule ID
2874
+ */
2875
+ id: string;
2876
+ /**
2877
+ * User ID
2878
+ */
2879
+ userId: string;
2758
2880
  /**
2759
2881
  * Rule name
2760
2882
  */
2761
- rule: string;
2883
+ name: string;
2762
2884
  /**
2763
- * Rule ID
2885
+ * Icon emoji
2764
2886
  */
2765
- ruleId: string;
2887
+ icon?: string;
2888
+ /**
2889
+ * Recurring frequency
2890
+ */
2891
+ frequency: string;
2766
2892
  /**
2767
2893
  * Expected amount
2768
2894
  */
2769
- amount: number;
2895
+ expectedAmount: number;
2770
2896
  /**
2771
- * Expected date (YYYY-MM-DD)
2897
+ * Expected day of month
2772
2898
  */
2773
- date: string;
2899
+ expectedDay?: number;
2774
2900
  /**
2775
- * Rule icon emoji
2901
+ * Custom interval in days
2776
2902
  */
2777
- icon: string | null;
2903
+ customIntervalDays?: number;
2778
2904
  /**
2779
2905
  * Currency code
2780
2906
  */
2781
2907
  currency: string;
2782
- };
2783
-
2784
- export type MonthlyForecastDto = {
2785
2908
  /**
2786
- * Month (YYYY-MM)
2909
+ * Payee matching pattern
2787
2910
  */
2788
- month: string;
2911
+ matchPayeePattern?: string;
2789
2912
  /**
2790
- * Total expected outflow for the month
2913
+ * Amount tolerance percentage
2791
2914
  */
2792
- expectedOutflow: number;
2915
+ matchAmountTolerance: number;
2793
2916
  /**
2794
- * Number of expected transactions
2917
+ * Default expense account
2795
2918
  */
2796
- itemCount: number;
2919
+ defaultExpenseAccount?: string;
2797
2920
  /**
2798
- * Breakdown by currency
2921
+ * Default payment account
2799
2922
  */
2800
- byCurrency: {
2801
- [key: string]: unknown;
2802
- };
2923
+ defaultPaymentAccount?: string;
2803
2924
  /**
2804
- * Individual forecast items
2925
+ * Default payee
2805
2926
  */
2806
- items: Array<ForecastItemDto>;
2807
- };
2808
-
2809
- export type ForecastResponseDto = {
2927
+ defaultPayee?: string;
2810
2928
  /**
2811
- * Monthly forecast data
2929
+ * Whether rule is active
2812
2930
  */
2813
- forecast: Array<MonthlyForecastDto>;
2931
+ isActive: boolean;
2814
2932
  /**
2815
- * Total expected outflow across all months
2933
+ * Rule start date (YYYY-MM-DD)
2816
2934
  */
2817
- totalOutflow: number;
2935
+ startDate: string;
2818
2936
  /**
2819
- * Total by currency across all months
2937
+ * Rule end date (YYYY-MM-DD)
2820
2938
  */
2821
- totalByCurrency: {
2822
- [key: string]: unknown;
2823
- };
2939
+ endDate?: string;
2824
2940
  /**
2825
- * Number of active recurring rules included
2941
+ * Auto-create transaction on expected date
2826
2942
  */
2827
- rulesCount: number;
2943
+ autoCreate: boolean;
2828
2944
  /**
2829
- * Forecast period start date
2945
+ * Last matched occurrence date (YYYY-MM-DD)
2830
2946
  */
2831
- periodStart: string;
2947
+ lastOccurrence?: string;
2832
2948
  /**
2833
- * Forecast period end date
2949
+ * Total matched transactions count
2834
2950
  */
2835
- periodEnd: string;
2836
- };
2837
-
2838
- export type CurrencyBalanceDto = {
2951
+ totalCount: number;
2839
2952
  /**
2840
- * ISO 4217 currency code
2953
+ * Created at timestamp
2841
2954
  */
2842
- currency: string;
2955
+ createdAt: string;
2843
2956
  /**
2844
- * Balance amount
2957
+ * Updated at timestamp
2845
2958
  */
2846
- balance: string;
2847
- };
2848
-
2849
- export type TimeSeriesPointDto = {
2959
+ updatedAt: string;
2850
2960
  /**
2851
- * Date in YYYY-MM-DD format
2961
+ * Number of pending expected transactions
2852
2962
  */
2853
- date: string;
2963
+ pendingCount: number;
2854
2964
  /**
2855
- * Value at this date (in base currency)
2965
+ * Number of overdue expected transactions
2856
2966
  */
2857
- value: string;
2967
+ overdueCount: number;
2858
2968
  /**
2859
- * Change from previous point
2969
+ * Next expected date (YYYY-MM-DD)
2860
2970
  */
2861
- change?: {
2862
- [key: string]: unknown;
2863
- };
2971
+ nextExpectedDate?: string;
2864
2972
  /**
2865
- * Total assets at this date (in base currency)
2973
+ * Total amount of all matched transactions
2866
2974
  */
2867
- assets?: string;
2975
+ totalAmount: number;
2868
2976
  /**
2869
- * Total liabilities at this date (in base currency)
2977
+ * Average amount per transaction
2870
2978
  */
2871
- liabilities?: string;
2979
+ averageAmount: number;
2872
2980
  /**
2873
- * Multi-currency breakdown for this point
2981
+ * Number of matched transactions
2874
2982
  */
2875
- byCurrency?: Array<CurrencyBalanceDto>;
2876
- };
2877
-
2878
- export type TrendSummaryDto = {
2983
+ transactionCount: number;
2879
2984
  /**
2880
- * Value at start of period
2985
+ * First matched transaction date (YYYY-MM-DD)
2881
2986
  */
2882
- startValue: string;
2987
+ firstDate?: string;
2883
2988
  /**
2884
- * Value at end of period
2989
+ * Last matched transaction date (YYYY-MM-DD)
2885
2990
  */
2886
- endValue: string;
2991
+ lastDate?: string;
2887
2992
  /**
2888
- * Total change over period
2993
+ * Amount variance (standard deviation squared)
2889
2994
  */
2890
- totalChange: string;
2995
+ variance: number;
2891
2996
  /**
2892
- * Total change percentage
2997
+ * Number of upcoming expected transactions
2893
2998
  */
2894
- totalChangePercentage: string;
2999
+ upcomingCount: number;
2895
3000
  };
2896
3001
 
2897
- export type MultiCurrencyPointDto = {
3002
+ export type UpdateRecurringRuleDto = {
2898
3003
  /**
2899
- * Date in YYYY-MM-DD format
3004
+ * Rule name (unique per user)
2900
3005
  */
2901
- date: string;
3006
+ name?: string;
2902
3007
  /**
2903
- * Balances by currency
3008
+ * Icon emoji
2904
3009
  */
2905
- byCurrency: Array<CurrencyBalanceDto>;
2906
- };
2907
-
2908
- export type PortfolioTrendsResponseDto = {
3010
+ icon?: string;
2909
3011
  /**
2910
- * Time series data points
3012
+ * Recurring frequency
2911
3013
  */
2912
- series: Array<TimeSeriesPointDto>;
3014
+ frequency?:
3015
+ | 'WEEKLY'
3016
+ | 'BIWEEKLY'
3017
+ | 'MONTHLY'
3018
+ | 'BIMONTHLY'
3019
+ | 'QUARTERLY'
3020
+ | 'YEARLY'
3021
+ | 'CUSTOM';
2913
3022
  /**
2914
- * Period summary
3023
+ * Expected amount (positive number)
2915
3024
  */
2916
- summary: TrendSummaryDto;
3025
+ expectedAmount?: number;
2917
3026
  /**
2918
- * Period requested
3027
+ * Expected day of month (1-31)
2919
3028
  */
2920
- period: string;
3029
+ expectedDay?: number;
2921
3030
  /**
2922
- * Data granularity
3031
+ * Currency code
2923
3032
  */
2924
- granularity: string;
3033
+ currency?: string;
2925
3034
  /**
2926
- * Base currency for converted values
3035
+ * Payee matching pattern (supports wildcards)
2927
3036
  */
2928
- currency: string;
3037
+ matchPayeePattern?: string;
2929
3038
  /**
2930
- * Multi-currency time series (each point has currency breakdown)
3039
+ * Amount tolerance percentage (0-1)
2931
3040
  */
2932
- byCurrency?: Array<MultiCurrencyPointDto>;
3041
+ matchAmountTolerance?: number;
2933
3042
  /**
2934
- * Exchange rate warnings
3043
+ * Default expense account for auto-create
2935
3044
  */
2936
- warnings?: Array<ExchangeRateWarningDto>;
2937
- };
2938
-
2939
- export type CashFlowPointDto = {
3045
+ defaultExpenseAccount?: string;
2940
3046
  /**
2941
- * Month key (YYYY-MM)
3047
+ * Default payment account for auto-create
2942
3048
  */
2943
- month: string;
3049
+ defaultPaymentAccount?: string;
2944
3050
  /**
2945
- * Income in base currency (absolute, converted)
3051
+ * Default payee for auto-create
2946
3052
  */
2947
- income: string;
3053
+ defaultPayee?: string;
2948
3054
  /**
2949
- * Expense in base currency (absolute, converted)
3055
+ * Auto-create transaction when expected date arrives
2950
3056
  */
2951
- expense: string;
3057
+ autoCreate?: boolean;
2952
3058
  /**
2953
- * netSavings = income − expense (savings positive)
3059
+ * Rule end date (ISO format)
2954
3060
  */
2955
- netSavings: string;
3061
+ endDate?: string;
3062
+ /**
3063
+ * Custom interval in days
3064
+ */
3065
+ customIntervalDays?: number;
3066
+ /**
3067
+ * Rule active status
3068
+ */
3069
+ isActive?: boolean;
2956
3070
  };
2957
3071
 
2958
- export type CashFlowTrendSummaryDto = {
3072
+ export type ExpectedTransactionRuleDto = {
2959
3073
  /**
2960
- * Total income across the period
3074
+ * Rule name
2961
3075
  */
2962
- totalIncome: string;
3076
+ name: string;
2963
3077
  /**
2964
- * Total expense across the period
3078
+ * Rule icon
2965
3079
  */
2966
- totalExpense: string;
3080
+ icon?: string;
2967
3081
  /**
2968
- * income − expense across the period
3082
+ * Rule frequency
2969
3083
  */
2970
- totalNetSavings: string;
3084
+ frequency: string;
2971
3085
  /**
2972
- * totalNetSavings divided by the window length (N months, incl. zero-filled)
3086
+ * Currency code
2973
3087
  */
2974
- averageMonthlyNetSavings: string;
3088
+ currency: string;
2975
3089
  };
2976
3090
 
2977
- export type CashFlowTrendsResponseDto = {
3091
+ export type ExpectedTransactionResponseDto = {
2978
3092
  /**
2979
- * Monthly cash-flow series (fixed N-month window, zero-filled)
3093
+ * Expected transaction ID
2980
3094
  */
2981
- series: Array<CashFlowPointDto>;
3095
+ id: string;
2982
3096
  /**
2983
- * Period totals
3097
+ * User ID
2984
3098
  */
2985
- summary: CashFlowTrendSummaryDto;
3099
+ userId: string;
2986
3100
  /**
2987
- * Period requested
3101
+ * Associated rule ID
2988
3102
  */
2989
- period: string;
3103
+ ruleId: string;
2990
3104
  /**
2991
- * Data granularity (v1 returns month buckets)
3105
+ * Expected date (YYYY-MM-DD)
3106
+ */
3107
+ expectedDate: string;
3108
+ /**
3109
+ * Expected amount
2992
3110
  */
2993
- granularity: string;
3111
+ expectedAmount: number;
2994
3112
  /**
2995
- * Base currency for converted values
3113
+ * Status (PENDING, COMPLETED, SKIPPED)
2996
3114
  */
2997
- currency: string;
3115
+ status: string;
2998
3116
  /**
2999
- * Exchange rate warnings (e.g. missing rate for a currency)
3117
+ * Matched transaction ID
3000
3118
  */
3001
- warnings?: Array<ExchangeRateWarningDto>;
3002
- };
3003
-
3004
- export type GenerateSnapshotBody = unknown;
3005
-
3006
- export type GenerateSnapshotResponse = unknown;
3007
-
3008
- export type BackfillSnapshotsBody = unknown;
3009
-
3010
- export type BackfillSnapshotsResponse = unknown;
3011
-
3012
- export type DeleteOwnUserDto = {
3119
+ matchedTransactionId?: string;
3013
3120
  /**
3014
- * Access token for user verification
3121
+ * Match timestamp (ISO 8601)
3015
3122
  */
3016
- accessToken: string;
3017
- };
3018
-
3019
- export type UserSettingsResponseDto = {
3123
+ matchedAt?: string;
3020
3124
  /**
3021
- * Base currency (ISO 4217) for net-worth/report aggregation. Independent of region (ADR-0006).
3125
+ * Match confidence score (0-1)
3022
3126
  */
3023
- baseCurrency: string | null;
3024
- };
3025
-
3026
- export type UserResponseDto = {
3127
+ matchConfidence?: number;
3027
3128
  /**
3028
- * User ID
3129
+ * Whether this expected transaction is overdue
3029
3130
  */
3030
- id: string;
3131
+ isOverdue: boolean;
3031
3132
  /**
3032
- * Assigned user role
3133
+ * Rule information
3033
3134
  */
3034
- role: string;
3135
+ rule: ExpectedTransactionRuleDto;
3035
3136
  /**
3036
- * Permission strings
3137
+ * Created at timestamp
3037
3138
  */
3038
- permissions: Array<string>;
3139
+ createdAt: string;
3039
3140
  /**
3040
- * User settings
3141
+ * Updated at timestamp
3041
3142
  */
3042
- settings: UserSettingsResponseDto;
3143
+ updatedAt: string;
3043
3144
  };
3044
3145
 
3045
- export type SignupDto = {
3146
+ export type ExpectedTransactionListResponseDto = {
3147
+ items: Array<ExpectedTransactionResponseDto>;
3046
3148
  /**
3047
- * Cloudflare Turnstile verification token (optional when Turnstile disabled)
3149
+ * Total count
3048
3150
  */
3049
- turnstileToken?: string;
3151
+ total: number;
3050
3152
  };
3051
3153
 
3052
- export type SignupResponseDto = {
3053
- /**
3054
- * JWT auth token
3055
- */
3056
- authToken: string;
3057
- /**
3058
- * Auto-generated access token
3059
- */
3060
- accessToken: string;
3154
+ export type ConfirmMatchDto = {
3061
3155
  /**
3062
- * Assigned user role
3156
+ * Transaction ID to match with
3063
3157
  */
3064
- role: 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
3158
+ transactionId: string;
3065
3159
  };
3066
3160
 
3067
- /**
3068
- * Assigned user role
3069
- */
3070
- export type role = 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
3071
-
3072
- export type UpdateUserSettingDto = {
3161
+ export type EnterNowDto = {
3073
3162
  /**
3074
- * Security ID
3163
+ * Override expense account (uses rule default if not provided)
3075
3164
  */
3076
- secId?: number;
3165
+ expenseAccount?: string;
3077
3166
  /**
3078
- * Annual interest rate
3167
+ * Override payment account (uses rule default if not provided)
3079
3168
  */
3080
- annualInterestRate?: number;
3169
+ paymentAccount?: string;
3081
3170
  /**
3082
- * Currency code
3171
+ * Override amount (uses expected amount if not provided)
3083
3172
  */
3084
- currency?: string;
3173
+ amount?: number;
3085
3174
  /**
3086
- * Base currency code
3175
+ * Override payee (uses rule default if not provided)
3087
3176
  */
3088
- baseCurrency?: string;
3177
+ payee?: string;
3089
3178
  /**
3090
- * Benchmark symbol
3179
+ * Optional narration
3091
3180
  */
3092
- benchmark?: string;
3181
+ narration?: string;
3182
+ };
3183
+
3184
+ export type ForecastItemDto = {
3093
3185
  /**
3094
- * Color scheme
3186
+ * Rule name
3095
3187
  */
3096
- colorScheme?: 'DARK' | 'LIGHT';
3188
+ rule: string;
3097
3189
  /**
3098
- * Date range filter
3190
+ * Rule ID
3099
3191
  */
3100
- dateRange?: string;
3192
+ ruleId: string;
3101
3193
  /**
3102
- * Emergency fund amount
3194
+ * Expected amount
3103
3195
  */
3104
- emergencyFund?: number;
3196
+ amount: number;
3105
3197
  /**
3106
- * Account filter IDs
3198
+ * Expected date (YYYY-MM-DD)
3107
3199
  */
3108
- 'filters.accounts'?: Array<string>;
3200
+ date: string;
3109
3201
  /**
3110
- * Asset class filters
3202
+ * Rule icon emoji
3111
3203
  */
3112
- 'filters.assetClasses'?: Array<string>;
3204
+ icon: string | null;
3113
3205
  /**
3114
- * Data source filter
3206
+ * Currency code
3115
3207
  */
3116
- 'filters.dataSource'?: string;
3208
+ currency: string;
3209
+ };
3210
+
3211
+ export type MonthlyForecastDto = {
3117
3212
  /**
3118
- * Symbol filter
3213
+ * Month (YYYY-MM)
3119
3214
  */
3120
- 'filters.symbol'?: string;
3215
+ month: string;
3121
3216
  /**
3122
- * Tag filters
3217
+ * Total expected outflow for the month
3123
3218
  */
3124
- 'filters.tags'?: Array<string>;
3219
+ expectedOutflow: number;
3125
3220
  /**
3126
- * Enable experimental features
3221
+ * Number of expected transactions
3127
3222
  */
3128
- isExperimentalFeatures?: boolean;
3223
+ itemCount: number;
3129
3224
  /**
3130
- * Enable restricted view mode
3225
+ * Breakdown by currency
3131
3226
  */
3132
- isRestrictedView?: boolean;
3227
+ byCurrency: {
3228
+ [key: string]: unknown;
3229
+ };
3133
3230
  /**
3134
- * Language code
3231
+ * Individual forecast items
3135
3232
  */
3136
- language?: string;
3233
+ items: Array<ForecastItemDto>;
3234
+ };
3235
+
3236
+ export type ForecastResponseDto = {
3137
3237
  /**
3138
- * Locale code
3238
+ * Monthly forecast data
3139
3239
  */
3140
- locale?: string;
3240
+ forecast: Array<MonthlyForecastDto>;
3141
3241
  /**
3142
- * Projected total amount
3242
+ * Total expected outflow across all months
3143
3243
  */
3144
- projectedTotalAmount?: number;
3244
+ totalOutflow: number;
3145
3245
  /**
3146
- * Retirement date in ISO 8601 format
3246
+ * Total by currency across all months
3147
3247
  */
3148
- retirementDate?: string;
3248
+ totalByCurrency: {
3249
+ [key: string]: unknown;
3250
+ };
3149
3251
  /**
3150
- * Savings rate percentage
3252
+ * Number of active recurring rules included
3151
3253
  */
3152
- savingsRate?: number;
3254
+ rulesCount: number;
3153
3255
  /**
3154
- * View mode
3256
+ * Forecast period start date
3155
3257
  */
3156
- viewMode?: 'DEFAULT' | 'ZEN';
3157
- };
3158
-
3159
- /**
3160
- * Color scheme
3161
- */
3162
- export type colorScheme = 'DARK' | 'LIGHT';
3163
-
3164
- /**
3165
- * View mode
3166
- */
3167
- export type viewMode = 'DEFAULT' | 'ZEN';
3168
-
3169
- export type UpdatePropertyDto = {
3258
+ periodStart: string;
3170
3259
  /**
3171
- * Property value
3260
+ * Forecast period end date
3172
3261
  */
3173
- value: string;
3262
+ periodEnd: string;
3174
3263
  };
3175
3264
 
3176
3265
  export type CreateTransactionRuleDto = {
@@ -3489,14 +3578,14 @@ export type UpdateTransactionRuleDto = {
3489
3578
  */
3490
3579
  amountMax?: number;
3491
3580
  priority?: number;
3492
- /**
3493
- * Enable or disable the rule
3494
- */
3495
- enabled?: boolean;
3496
3581
  additionalTags?: Array<unknown[]>;
3497
3582
  additionalMetadata?: {
3498
3583
  [key: string]: unknown;
3499
3584
  };
3585
+ /**
3586
+ * Enable or disable the rule
3587
+ */
3588
+ enabled?: boolean;
3500
3589
  };
3501
3590
 
3502
3591
  export type TestRuleDto = {
@@ -3686,6 +3775,10 @@ export type OnboardingAccountDto = {
3686
3775
  * Platform ID to bind the account to (references Platform.id); omit for unbound
3687
3776
  */
3688
3777
  platformId?: string;
3778
+ /**
3779
+ * User-set display name override (omit/null = keep the derived name)
3780
+ */
3781
+ displayName?: string | null;
3689
3782
  };
3690
3783
 
3691
3784
  export type OnboardingDto = {
@@ -4355,11 +4448,28 @@ export type ProcessNlpDto = {
4355
4448
  */
4356
4449
  selectedRuleId?: string;
4357
4450
  /**
4358
- * confirm_account echo-back: account path selected from the prior confirm_account response (suggestedAccount, similarAccounts[i], or a typed path). Applied directly when the session is confirming_account — no NL re-parse.
4451
+ * confirm_account echo-back: account path selected from the prior confirm_account response (suggestedAccount, similarAccounts[i].path, or a typed path). Applied directly when the session is confirming_account — no NL re-parse.
4359
4452
  */
4360
4453
  selectedAccount?: string;
4454
+ /**
4455
+ * Viewpoint account hint: the beancount path the user drilled into (e.g. from an account drill-down). Tie-break only — never overrides accounts resolved from the text. Must be an owned, OPEN Assets:/Liabilities: account; unresolvable hints are silently ignored.
4456
+ */
4457
+ viewpointAccount?: string;
4458
+ /**
4459
+ * Viewpoint category hint: the ADR-0075 Group segment the user drilled into (e.g. 'Food'). Resolved to a concrete OPEN account in that group; tie-break only — never overrides a category resolved from the text.
4460
+ */
4461
+ viewpointCategory?: string;
4462
+ /**
4463
+ * Companion flow root for viewpointCategory ('income' | 'expense'), mirroring the ADR-0126 list-endpoint invariant. Derived from the session's routed intent (multi-turn) when absent; a first-turn flow-less category hint is dropped — send the flow explicitly.
4464
+ */
4465
+ viewpointFlow?: 'income' | 'expense';
4361
4466
  };
4362
4467
 
4468
+ /**
4469
+ * Companion flow root for viewpointCategory ('income' | 'expense'), mirroring the ADR-0126 list-endpoint invariant. Derived from the session's routed intent (multi-turn) when absent; a first-turn flow-less category hint is dropped — send the flow explicitly.
4470
+ */
4471
+ export type viewpointFlow = 'income' | 'expense';
4472
+
4363
4473
  export type NlpTransactionInfoDto = {
4364
4474
  /**
4365
4475
  * Transaction ID
@@ -4585,6 +4695,17 @@ export type NlpRuleConfirmationDataDto = {
4585
4695
  reasons: Array<string>;
4586
4696
  };
4587
4697
 
4698
+ export type NlpAccountCandidateDto = {
4699
+ /**
4700
+ * Canonical beancount account path (echo back on selection)
4701
+ */
4702
+ path: string;
4703
+ /**
4704
+ * Localized display name (ADR-0114 read-time projection, user locale)
4705
+ */
4706
+ name: string;
4707
+ };
4708
+
4588
4709
  export type NlpAccountConfirmationDataDto = {
4589
4710
  /**
4590
4711
  * The invalid account name
@@ -4595,9 +4716,9 @@ export type NlpAccountConfirmationDataDto = {
4595
4716
  */
4596
4717
  suggestedAccount?: string;
4597
4718
  /**
4598
- * Similar accounts for user selection
4719
+ * Similar accounts for user selection (path + localized name, #680)
4599
4720
  */
4600
- similarAccounts: Array<string>;
4721
+ similarAccounts: Array<NlpAccountCandidateDto>;
4601
4722
  /**
4602
4723
  * Error message explaining the issue
4603
4724
  */
@@ -4973,7 +5094,7 @@ export type PlatformListItemDto = {
4973
5094
  /**
4974
5095
  * Platform type
4975
5096
  */
4976
- export type type3 =
5097
+ export type type4 =
4977
5098
  | 'BANK'
4978
5099
  | 'BROKERAGE'
4979
5100
  | 'CRYPTO_EXCHANGE'
@@ -5057,6 +5178,55 @@ export type PlatformMatchResponseDto = {
5057
5178
  */
5058
5179
  export type matchType2 = 'none' | 'exact' | 'prefix' | 'substring';
5059
5180
 
5181
+ export type PlatformStandardsPlatformDto = {
5182
+ /**
5183
+ * Global platform ID
5184
+ */
5185
+ id: string;
5186
+ /**
5187
+ * Platform name (e.g., "ICBC")
5188
+ */
5189
+ name: string;
5190
+ /**
5191
+ * Canonical identifier in ACCOUNT_RE format (e.g., "icbc")
5192
+ */
5193
+ canonical: string;
5194
+ /**
5195
+ * Suggested path segment — canonical PascalCased per hyphen-part, hyphens preserved (e.g. "Apple-Pay")
5196
+ */
5197
+ suggestedSegment: string;
5198
+ /**
5199
+ * Platform type
5200
+ */
5201
+ type:
5202
+ | 'BANK'
5203
+ | 'BROKERAGE'
5204
+ | 'CRYPTO_EXCHANGE'
5205
+ | 'PAYMENT'
5206
+ | 'INVESTMENT'
5207
+ | 'INSURANCE'
5208
+ | 'OTHER';
5209
+ /**
5210
+ * Region-aware category (institution vocab, e.g. DigitalWallet/Bank) resolved against the final region. null = no region-aware suggestion; fall back to type.
5211
+ */
5212
+ category: string | null;
5213
+ };
5214
+
5215
+ export type PlatformStandardsResponseDto = {
5216
+ /**
5217
+ * The selected platform (institution lock source)
5218
+ */
5219
+ platform: PlatformStandardsPlatformDto;
5220
+ /**
5221
+ * Resolved template region (ISO 3166-1 alpha-2, UPPERCASE): the platform's own countryCode when set, else the region query param. For regions without a regional template file the template list falls back to the universal-only catalog while region still echoes the code.
5222
+ */
5223
+ region: string;
5224
+ /**
5225
+ * Candidate account-standard templates of the resolved region (groupable by productCategory client-side)
5226
+ */
5227
+ templates: Array<AccountStandardResponseDto>;
5228
+ };
5229
+
5060
5230
  export type CreatePlatformDto = {
5061
5231
  /**
5062
5232
  * Platform name
@@ -5226,7 +5396,7 @@ export type AccountItemDto = {
5226
5396
  */
5227
5397
  name: string;
5228
5398
  /**
5229
- * Display name (last part of account path)
5399
+ * Display name: user-set name if provided (#762), else last part of account path
5230
5400
  */
5231
5401
  displayName: string;
5232
5402
  /**
@@ -5253,11 +5423,11 @@ export type PlatformGroupDto = {
5253
5423
  */
5254
5424
  platformName: string;
5255
5425
  /**
5256
- * Accounts within this platform
5426
+ * Accounts within this platform (Assets and Liabilities rows, #696)
5257
5427
  */
5258
5428
  accounts: Array<AccountItemDto>;
5259
5429
  /**
5260
- * FX-converted total balance in base currency
5430
+ * FX-converted total balance in base currency (nets Assets + Liabilities rows; can be negative)
5261
5431
  */
5262
5432
  totalBalance: string;
5263
5433
  /**
@@ -5269,7 +5439,7 @@ export type PlatformGroupDto = {
5269
5439
  */
5270
5440
  convertedBalance?: string;
5271
5441
  /**
5272
- * Share of the grand converted total (0-100); 0 when grand total is 0
5442
+ * Share of the converted asset-side grand total (0-100); liability balances are excluded from the basis; 0 when grand total is 0 (#696)
5273
5443
  */
5274
5444
  sharePct: number;
5275
5445
  };
@@ -5295,7 +5465,7 @@ export type AccountExchangeRateWarningDto = {
5295
5465
 
5296
5466
  export type AccountsSummaryDto = {
5297
5467
  /**
5298
- * Total number of accounts
5468
+ * Total number of accounts (balance sheet: Assets + Liabilities, #696)
5299
5469
  */
5300
5470
  totalAccounts: number;
5301
5471
  /**
@@ -5333,7 +5503,7 @@ export type AccountItemWithAssetClassDto = {
5333
5503
  */
5334
5504
  name: string;
5335
5505
  /**
5336
- * Display name (last part of account path)
5506
+ * Display name: user-set name if provided (#762), else last part of account path
5337
5507
  */
5338
5508
  displayName: string;
5339
5509
  /**
@@ -5647,9 +5817,7 @@ export type MonetaryDto = {
5647
5817
  /**
5648
5818
  * Converted to user base currency (Decimal string)
5649
5819
  */
5650
- baseCcyEquivalent?: {
5651
- [key: string]: unknown;
5652
- } | null;
5820
+ baseCcyEquivalent?: string | null;
5653
5821
  };
5654
5822
 
5655
5823
  export type CurrentPriceDto = {
@@ -5701,15 +5869,11 @@ export type HoldingPnlRowDto = {
5701
5869
  /**
5702
5870
  * Account settlement currency (ISO 4217), from cost currency
5703
5871
  */
5704
- accountCcy?: {
5705
- [key: string]: unknown;
5706
- } | null;
5872
+ accountCcy?: string | null;
5707
5873
  /**
5708
5874
  * Broker type derived from Platform.type
5709
5875
  */
5710
- brokerType?: {
5711
- [key: string]: unknown;
5712
- } | null;
5876
+ brokerType?: string | null;
5713
5877
  /**
5714
5878
  * Commodity symbol
5715
5879
  */
@@ -5719,9 +5883,7 @@ export type HoldingPnlRowDto = {
5719
5883
  */
5720
5884
  chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
5721
5885
  assetClass: string;
5722
- assetSubClass?: {
5723
- [key: string]: unknown;
5724
- } | null;
5886
+ assetSubClass?: string | null;
5725
5887
  /**
5726
5888
  * Net held units (Decimal string)
5727
5889
  */
@@ -5745,15 +5907,11 @@ export type HoldingPnlRowDto = {
5745
5907
  /**
5746
5908
  * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
5747
5909
  */
5748
- unrealizedPnlBase?: {
5749
- [key: string]: unknown;
5750
- } | null;
5910
+ unrealizedPnlBase?: string | null;
5751
5911
  /**
5752
5912
  * Unrealized P&L % (Decimal string)
5753
5913
  */
5754
- unrealizedPnlPct?: {
5755
- [key: string]: unknown;
5756
- } | null;
5914
+ unrealizedPnlPct?: string | null;
5757
5915
  /**
5758
5916
  * Historical FX rate applied to cost basis
5759
5917
  */
@@ -5765,9 +5923,7 @@ export type HoldingPnlRowDto = {
5765
5923
  /**
5766
5924
  * Share of invested assets % (Decimal string); only for invested chartTokens
5767
5925
  */
5768
- pctOfInvestedAssets?: {
5769
- [key: string]: unknown;
5770
- } | null;
5926
+ pctOfInvestedAssets?: string | null;
5771
5927
  /**
5772
5928
  * 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
5773
5929
  */
@@ -5791,21 +5947,15 @@ export type HoldingPnlWarningDto = {
5791
5947
  | 'OVERSOLD_LOTS'
5792
5948
  | 'NO_PRICE'
5793
5949
  | 'MIXED_COST_CURRENCY';
5794
- symbol?: {
5795
- [key: string]: unknown;
5796
- } | null;
5797
- accountId?: {
5798
- [key: string]: unknown;
5799
- } | null;
5800
- currency?: {
5801
- [key: string]: unknown;
5802
- } | null;
5950
+ symbol?: string | null;
5951
+ accountId?: string | null;
5952
+ currency?: string | null;
5803
5953
  };
5804
5954
 
5805
5955
  /**
5806
5956
  * Warning type
5807
5957
  */
5808
- export type type4 =
5958
+ export type type5 =
5809
5959
  | 'MISSING_COST_FX_RATE'
5810
5960
  | 'MISSING_MARKET_FX_RATE'
5811
5961
  | 'MISSING_SALE_PRICE'
@@ -5844,132 +5994,205 @@ export type AnonymousLoginResponseDto = {
5844
5994
  authToken: string;
5845
5995
  };
5846
5996
 
5997
+ export type ParserContributionMetaDto = {
5998
+ /**
5999
+ * Institution slug (lowercase kebab-case)
6000
+ */
6001
+ institution: string;
6002
+ region:
6003
+ | 'cn'
6004
+ | 'us'
6005
+ | 'de'
6006
+ | 'fr'
6007
+ | 'gb'
6008
+ | 'hk'
6009
+ | 'jp'
6010
+ | 'sg'
6011
+ | 'au'
6012
+ | 'ca'
6013
+ | 'other';
6014
+ accountType: 'checking' | 'savings' | 'credit' | 'debit' | 'investment';
6015
+ format: 'csv' | 'xlsx' | 'pdf' | 'ofx' | 'qif';
6016
+ institutionDisplayName?: string;
6017
+ encoding?: string;
6018
+ /**
6019
+ * CSV delimiter character: ",", ";", "\t" or "|"
6020
+ */
6021
+ delimiter?: string;
6022
+ /**
6023
+ * Header row count; the client omits the field when it is 1
6024
+ */
6025
+ headerRows?: number;
6026
+ notes?: string;
6027
+ };
6028
+
6029
+ export type region =
6030
+ | 'cn'
6031
+ | 'us'
6032
+ | 'de'
6033
+ | 'fr'
6034
+ | 'gb'
6035
+ | 'hk'
6036
+ | 'jp'
6037
+ | 'sg'
6038
+ | 'au'
6039
+ | 'ca'
6040
+ | 'other';
6041
+
6042
+ export type accountType =
6043
+ | 'checking'
6044
+ | 'savings'
6045
+ | 'credit'
6046
+ | 'debit'
6047
+ | 'investment';
6048
+
6049
+ export type format = 'csv' | 'xlsx' | 'pdf' | 'ofx' | 'qif';
6050
+
6051
+ export type ParserContributionSamplesDto = {
6052
+ /**
6053
+ * Client-sanitized sample rows (key = column name, value = cell)
6054
+ */
6055
+ rows: Array<{
6056
+ [key: string]: unknown;
6057
+ }>;
6058
+ rawHeaders?: Array<string>;
6059
+ };
6060
+
6061
+ export type FieldHintDto = {
6062
+ columnName: string;
6063
+ /**
6064
+ * Date format, e.g. yyyy-MM-dd HH:mm
6065
+ */
6066
+ format?: string;
6067
+ signConvention?: 'negative-expense' | 'positive-expense' | 'separate-columns';
6068
+ creditColumn?: string;
6069
+ debitColumn?: string;
6070
+ };
6071
+
6072
+ export type signConvention =
6073
+ | 'negative-expense'
6074
+ | 'positive-expense'
6075
+ | 'separate-columns';
6076
+
6077
+ export type ParserContributionFieldHintsDto = {
6078
+ date: FieldHintDto;
6079
+ amount: FieldHintDto;
6080
+ description?: FieldHintDto;
6081
+ balance?: FieldHintDto;
6082
+ payee?: FieldHintDto;
6083
+ reference?: FieldHintDto;
6084
+ category?: FieldHintDto;
6085
+ };
6086
+
6087
+ export type ExpectedTransactionDto = {
6088
+ date: string;
6089
+ amount: number;
6090
+ description: string;
6091
+ payee?: string;
6092
+ category?: string;
6093
+ };
6094
+
6095
+ export type ParserContributionExamplesDto = {
6096
+ expectedTransactions: Array<ExpectedTransactionDto>;
6097
+ };
6098
+
6099
+ export type ParserContributionRequestDto = {
6100
+ meta: ParserContributionMetaDto;
6101
+ samples: ParserContributionSamplesDto;
6102
+ fieldHints: ParserContributionFieldHintsDto;
6103
+ /**
6104
+ * Omitted entirely by the client when empty
6105
+ */
6106
+ examples?: ParserContributionExamplesDto;
6107
+ };
6108
+
6109
+ export type ParserContributionRelayResponseDto = {
6110
+ issueUrl: string;
6111
+ issueNumber: number;
6112
+ };
6113
+
5847
6114
  export type SymbolSearchResultDto = {
5848
6115
  symbol: string;
5849
- name?: {
5850
- [key: string]: unknown;
5851
- } | null;
5852
- exchange?: {
5853
- [key: string]: unknown;
5854
- } | null;
6116
+ name?: string | null;
6117
+ exchange?: string | null;
5855
6118
  /**
5856
6119
  * OpenBB asset_type (e.g. stock, etf)
5857
6120
  */
5858
- assetType?: {
5859
- [key: string]: unknown;
5860
- } | null;
6121
+ assetType?: string | null;
5861
6122
  /**
5862
6123
  * IGN asset class (region.types.ts ASSET_CLASSES)
5863
6124
  */
5864
- assetClass?: {
5865
- [key: string]: unknown;
5866
- } | null;
6125
+ assetClass?: string | null;
5867
6126
  /**
5868
6127
  * IGN asset sub-class (region.types.ts ASSET_SUB_CLASSES)
5869
6128
  */
5870
- assetSubClass?: {
5871
- [key: string]: unknown;
5872
- } | null;
6129
+ assetSubClass?: string | null;
5873
6130
  /**
5874
6131
  * Trading currency (extra_data or inferred from exchange)
5875
6132
  */
5876
- currency?: {
5877
- [key: string]: unknown;
5878
- } | null;
6133
+ currency?: string | null;
5879
6134
  };
5880
6135
 
5881
6136
  export type SymbolQuoteDto = {
5882
6137
  symbol?: string;
5883
- name?: {
5884
- [key: string]: unknown;
5885
- } | null;
5886
- exchange?: {
5887
- [key: string]: unknown;
5888
- } | null;
6138
+ name?: string | null;
6139
+ exchange?: string | null;
5889
6140
  /**
5890
6141
  * OpenBB asset_type
5891
6142
  */
5892
- assetType?: {
5893
- [key: string]: unknown;
5894
- } | null;
6143
+ assetType?: string | null;
5895
6144
  /**
5896
6145
  * IGN asset class
5897
6146
  */
5898
- assetClass?: {
5899
- [key: string]: unknown;
5900
- } | null;
6147
+ assetClass?: string | null;
5901
6148
  /**
5902
6149
  * IGN asset sub-class
5903
6150
  */
5904
- assetSubClass?: {
5905
- [key: string]: unknown;
5906
- } | null;
6151
+ assetSubClass?: string | null;
5907
6152
  /**
5908
6153
  * Trading currency (extra_data or inferred from exchange)
5909
6154
  */
5910
- currency?: {
5911
- [key: string]: unknown;
5912
- } | null;
6155
+ currency?: string | null;
5913
6156
  /**
5914
6157
  * Latest price (Decimal string)
5915
6158
  */
5916
- price?: {
5917
- [key: string]: unknown;
5918
- } | null;
6159
+ price?: string | null;
5919
6160
  /**
5920
6161
  * Date the price was observed (ISO yyyy-MM-dd)
5921
6162
  */
5922
- priceDate?: {
5923
- [key: string]: unknown;
5924
- } | null;
6163
+ priceDate?: string | null;
5925
6164
  /**
5926
6165
  * Change vs previous close, in percentage points (1.7 == 1.7%). openbb stores change_percent as a normalized decimal; this exposes percentage points for frontend convenience.
5927
6166
  */
5928
- changePercent?: {
5929
- [key: string]: unknown;
5930
- } | null;
6167
+ changePercent?: number | null;
5931
6168
  /**
5932
6169
  * Previous close (Decimal string)
5933
6170
  */
5934
- prevClose?: {
5935
- [key: string]: unknown;
5936
- } | null;
6171
+ prevClose?: string | null;
5937
6172
  /**
5938
6173
  * Day open (Decimal string)
5939
6174
  */
5940
- open?: {
5941
- [key: string]: unknown;
5942
- } | null;
6175
+ open?: string | null;
5943
6176
  /**
5944
6177
  * Day high (Decimal string)
5945
6178
  */
5946
- high?: {
5947
- [key: string]: unknown;
5948
- } | null;
6179
+ high?: string | null;
5949
6180
  /**
5950
6181
  * Day low (Decimal string)
5951
6182
  */
5952
- low?: {
5953
- [key: string]: unknown;
5954
- } | null;
6183
+ low?: string | null;
5955
6184
  /**
5956
6185
  * Day volume (Decimal string)
5957
6186
  */
5958
- volume?: {
5959
- [key: string]: unknown;
5960
- } | null;
6187
+ volume?: string | null;
5961
6188
  /**
5962
6189
  * 52-week high (Decimal string)
5963
6190
  */
5964
- yearHigh?: {
5965
- [key: string]: unknown;
5966
- } | null;
6191
+ yearHigh?: string | null;
5967
6192
  /**
5968
6193
  * 52-week low (Decimal string)
5969
6194
  */
5970
- yearLow?: {
5971
- [key: string]: unknown;
5972
- } | null;
6195
+ yearLow?: string | null;
5973
6196
  };
5974
6197
 
5975
6198
  export type AccountControllerCreateData = {
@@ -6300,7 +6523,7 @@ export type AccountControllerAddOpeningBalanceResponse =
6300
6523
 
6301
6524
  export type AccountStandardsControllerGetTemplatesData = {
6302
6525
  /**
6303
- * Region code (cn, us, de)
6526
+ * Region code (any ISO alpha-2; not-yet-open codes return the universal-only catalog)
6304
6527
  */
6305
6528
  region:
6306
6529
  | 'ad'
@@ -6310,26 +6533,192 @@ export type AccountStandardsControllerGetTemplatesData = {
6310
6533
  | 'al'
6311
6534
  | 'am'
6312
6535
  | 'ao'
6536
+ | 'ar'
6537
+ | 'at'
6313
6538
  | 'au'
6539
+ | 'az'
6540
+ | 'ba'
6541
+ | 'bb'
6542
+ | 'bd'
6543
+ | 'be'
6544
+ | 'bf'
6545
+ | 'bg'
6546
+ | 'bh'
6547
+ | 'bi'
6548
+ | 'bj'
6549
+ | 'bn'
6550
+ | 'bo'
6314
6551
  | 'br'
6552
+ | 'bs'
6553
+ | 'bt'
6554
+ | 'bw'
6555
+ | 'by'
6556
+ | 'bz'
6315
6557
  | 'ca'
6558
+ | 'cd'
6559
+ | 'cf'
6560
+ | 'cg'
6561
+ | 'ch'
6562
+ | 'ci'
6563
+ | 'cl'
6564
+ | 'cm'
6316
6565
  | 'cn'
6566
+ | 'co'
6567
+ | 'cr'
6568
+ | 'cu'
6569
+ | 'cv'
6570
+ | 'cy'
6571
+ | 'cz'
6317
6572
  | 'de'
6573
+ | 'dj'
6574
+ | 'dk'
6575
+ | 'dm'
6576
+ | 'do'
6318
6577
  | 'dz'
6578
+ | 'ec'
6579
+ | 'ee'
6580
+ | 'eg'
6581
+ | 'er'
6319
6582
  | 'es'
6583
+ | 'et'
6584
+ | 'fj'
6585
+ | 'fm'
6320
6586
  | 'fr'
6587
+ | 'ga'
6321
6588
  | 'gb'
6589
+ | 'gd'
6590
+ | 'ge'
6591
+ | 'gh'
6592
+ | 'gm'
6593
+ | 'gn'
6594
+ | 'gq'
6595
+ | 'gr'
6596
+ | 'gt'
6597
+ | 'gw'
6598
+ | 'gy'
6322
6599
  | 'hk'
6600
+ | 'hn'
6601
+ | 'hr'
6602
+ | 'ht'
6603
+ | 'hu'
6604
+ | 'id'
6605
+ | 'ie'
6606
+ | 'il'
6323
6607
  | 'in'
6608
+ | 'iq'
6609
+ | 'ir'
6610
+ | 'is'
6324
6611
  | 'it'
6612
+ | 'jm'
6613
+ | 'jo'
6325
6614
  | 'jp'
6615
+ | 'ke'
6616
+ | 'kg'
6617
+ | 'kh'
6618
+ | 'ki'
6619
+ | 'km'
6620
+ | 'kn'
6326
6621
  | 'kr'
6622
+ | 'kw'
6623
+ | 'kz'
6624
+ | 'la'
6625
+ | 'lb'
6626
+ | 'lc'
6627
+ | 'li'
6628
+ | 'lk'
6629
+ | 'lr'
6630
+ | 'ls'
6631
+ | 'lt'
6632
+ | 'lu'
6633
+ | 'lv'
6634
+ | 'ly'
6635
+ | 'ma'
6636
+ | 'mc'
6637
+ | 'md'
6638
+ | 'me'
6639
+ | 'mg'
6640
+ | 'mh'
6641
+ | 'mk'
6642
+ | 'ml'
6643
+ | 'mm'
6644
+ | 'mn'
6645
+ | 'mr'
6646
+ | 'mt'
6647
+ | 'mu'
6648
+ | 'mv'
6649
+ | 'mw'
6650
+ | 'mx'
6651
+ | 'mz'
6652
+ | 'na'
6653
+ | 'ne'
6654
+ | 'ng'
6655
+ | 'ni'
6327
6656
  | 'nl'
6657
+ | 'no'
6658
+ | 'np'
6659
+ | 'nr'
6660
+ | 'nz'
6661
+ | 'om'
6662
+ | 'pa'
6663
+ | 'pe'
6664
+ | 'pg'
6665
+ | 'ph'
6666
+ | 'pk'
6667
+ | 'pl'
6668
+ | 'ps'
6669
+ | 'pt'
6670
+ | 'pw'
6671
+ | 'py'
6672
+ | 'qa'
6673
+ | 'ro'
6674
+ | 'rs'
6675
+ | 'ru'
6676
+ | 'rw'
6677
+ | 'sa'
6678
+ | 'sb'
6679
+ | 'sc'
6680
+ | 'sd'
6681
+ | 'se'
6328
6682
  | 'sg'
6683
+ | 'sl'
6684
+ | 'sm'
6685
+ | 'sn'
6686
+ | 'so'
6687
+ | 'sr'
6688
+ | 'st'
6689
+ | 'sv'
6690
+ | 'sy'
6691
+ | 'sz'
6692
+ | 'td'
6693
+ | 'tg'
6694
+ | 'th'
6695
+ | 'tj'
6696
+ | 'tl'
6697
+ | 'tm'
6698
+ | 'tn'
6699
+ | 'to'
6700
+ | 'tr'
6701
+ | 'tt'
6702
+ | 'tv'
6329
6703
  | 'tw'
6330
- | 'us';
6331
- /**
6332
- * Search term for path or description
6704
+ | 'tz'
6705
+ | 'ua'
6706
+ | 'ug'
6707
+ | 'us'
6708
+ | 'uy'
6709
+ | 'uz'
6710
+ | 'va'
6711
+ | 'vc'
6712
+ | 've'
6713
+ | 'vn'
6714
+ | 'vu'
6715
+ | 'ws'
6716
+ | 'ye'
6717
+ | 'za'
6718
+ | 'zm'
6719
+ | 'zw';
6720
+ /**
6721
+ * Search term for path, description, aliases, or localized display name
6333
6722
  */
6334
6723
  search?: string;
6335
6724
  /**
@@ -6347,7 +6736,7 @@ export type AccountStandardsControllerGetTemplateMetadataData = {
6347
6736
  */
6348
6737
  path: string;
6349
6738
  /**
6350
- * Region code for tenant context
6739
+ * Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
6351
6740
  */
6352
6741
  region:
6353
6742
  | 'ad'
@@ -6357,24 +6746,190 @@ export type AccountStandardsControllerGetTemplateMetadataData = {
6357
6746
  | 'al'
6358
6747
  | 'am'
6359
6748
  | 'ao'
6749
+ | 'ar'
6750
+ | 'at'
6360
6751
  | 'au'
6752
+ | 'az'
6753
+ | 'ba'
6754
+ | 'bb'
6755
+ | 'bd'
6756
+ | 'be'
6757
+ | 'bf'
6758
+ | 'bg'
6759
+ | 'bh'
6760
+ | 'bi'
6761
+ | 'bj'
6762
+ | 'bn'
6763
+ | 'bo'
6361
6764
  | 'br'
6765
+ | 'bs'
6766
+ | 'bt'
6767
+ | 'bw'
6768
+ | 'by'
6769
+ | 'bz'
6362
6770
  | 'ca'
6771
+ | 'cd'
6772
+ | 'cf'
6773
+ | 'cg'
6774
+ | 'ch'
6775
+ | 'ci'
6776
+ | 'cl'
6777
+ | 'cm'
6363
6778
  | 'cn'
6779
+ | 'co'
6780
+ | 'cr'
6781
+ | 'cu'
6782
+ | 'cv'
6783
+ | 'cy'
6784
+ | 'cz'
6364
6785
  | 'de'
6786
+ | 'dj'
6787
+ | 'dk'
6788
+ | 'dm'
6789
+ | 'do'
6365
6790
  | 'dz'
6791
+ | 'ec'
6792
+ | 'ee'
6793
+ | 'eg'
6794
+ | 'er'
6366
6795
  | 'es'
6796
+ | 'et'
6797
+ | 'fj'
6798
+ | 'fm'
6367
6799
  | 'fr'
6800
+ | 'ga'
6368
6801
  | 'gb'
6802
+ | 'gd'
6803
+ | 'ge'
6804
+ | 'gh'
6805
+ | 'gm'
6806
+ | 'gn'
6807
+ | 'gq'
6808
+ | 'gr'
6809
+ | 'gt'
6810
+ | 'gw'
6811
+ | 'gy'
6369
6812
  | 'hk'
6813
+ | 'hn'
6814
+ | 'hr'
6815
+ | 'ht'
6816
+ | 'hu'
6817
+ | 'id'
6818
+ | 'ie'
6819
+ | 'il'
6370
6820
  | 'in'
6821
+ | 'iq'
6822
+ | 'ir'
6823
+ | 'is'
6371
6824
  | 'it'
6825
+ | 'jm'
6826
+ | 'jo'
6372
6827
  | 'jp'
6828
+ | 'ke'
6829
+ | 'kg'
6830
+ | 'kh'
6831
+ | 'ki'
6832
+ | 'km'
6833
+ | 'kn'
6373
6834
  | 'kr'
6835
+ | 'kw'
6836
+ | 'kz'
6837
+ | 'la'
6838
+ | 'lb'
6839
+ | 'lc'
6840
+ | 'li'
6841
+ | 'lk'
6842
+ | 'lr'
6843
+ | 'ls'
6844
+ | 'lt'
6845
+ | 'lu'
6846
+ | 'lv'
6847
+ | 'ly'
6848
+ | 'ma'
6849
+ | 'mc'
6850
+ | 'md'
6851
+ | 'me'
6852
+ | 'mg'
6853
+ | 'mh'
6854
+ | 'mk'
6855
+ | 'ml'
6856
+ | 'mm'
6857
+ | 'mn'
6858
+ | 'mr'
6859
+ | 'mt'
6860
+ | 'mu'
6861
+ | 'mv'
6862
+ | 'mw'
6863
+ | 'mx'
6864
+ | 'mz'
6865
+ | 'na'
6866
+ | 'ne'
6867
+ | 'ng'
6868
+ | 'ni'
6374
6869
  | 'nl'
6870
+ | 'no'
6871
+ | 'np'
6872
+ | 'nr'
6873
+ | 'nz'
6874
+ | 'om'
6875
+ | 'pa'
6876
+ | 'pe'
6877
+ | 'pg'
6878
+ | 'ph'
6879
+ | 'pk'
6880
+ | 'pl'
6881
+ | 'ps'
6882
+ | 'pt'
6883
+ | 'pw'
6884
+ | 'py'
6885
+ | 'qa'
6886
+ | 'ro'
6887
+ | 'rs'
6888
+ | 'ru'
6889
+ | 'rw'
6890
+ | 'sa'
6891
+ | 'sb'
6892
+ | 'sc'
6893
+ | 'sd'
6894
+ | 'se'
6375
6895
  | 'sg'
6896
+ | 'sl'
6897
+ | 'sm'
6898
+ | 'sn'
6899
+ | 'so'
6900
+ | 'sr'
6901
+ | 'st'
6902
+ | 'sv'
6903
+ | 'sy'
6904
+ | 'sz'
6905
+ | 'td'
6906
+ | 'tg'
6907
+ | 'th'
6908
+ | 'tj'
6909
+ | 'tl'
6910
+ | 'tm'
6911
+ | 'tn'
6912
+ | 'to'
6913
+ | 'tr'
6914
+ | 'tt'
6915
+ | 'tv'
6376
6916
  | 'tw'
6377
- | 'us';
6917
+ | 'tz'
6918
+ | 'ua'
6919
+ | 'ug'
6920
+ | 'us'
6921
+ | 'uy'
6922
+ | 'uz'
6923
+ | 'va'
6924
+ | 'vc'
6925
+ | 've'
6926
+ | 'vn'
6927
+ | 'vu'
6928
+ | 'ws'
6929
+ | 'ye'
6930
+ | 'za'
6931
+ | 'zm'
6932
+ | 'zw';
6378
6933
  };
6379
6934
 
6380
6935
  export type AccountStandardsControllerGetTemplateMetadataResponse =
@@ -6382,7 +6937,7 @@ export type AccountStandardsControllerGetTemplateMetadataResponse =
6382
6937
 
6383
6938
  export type AccountStandardsControllerGetRegionsData = {
6384
6939
  /**
6385
- * Region code for tenant context
6940
+ * Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
6386
6941
  */
6387
6942
  region:
6388
6943
  | 'ad'
@@ -6392,24 +6947,190 @@ export type AccountStandardsControllerGetRegionsData = {
6392
6947
  | 'al'
6393
6948
  | 'am'
6394
6949
  | 'ao'
6950
+ | 'ar'
6951
+ | 'at'
6395
6952
  | 'au'
6953
+ | 'az'
6954
+ | 'ba'
6955
+ | 'bb'
6956
+ | 'bd'
6957
+ | 'be'
6958
+ | 'bf'
6959
+ | 'bg'
6960
+ | 'bh'
6961
+ | 'bi'
6962
+ | 'bj'
6963
+ | 'bn'
6964
+ | 'bo'
6396
6965
  | 'br'
6966
+ | 'bs'
6967
+ | 'bt'
6968
+ | 'bw'
6969
+ | 'by'
6970
+ | 'bz'
6397
6971
  | 'ca'
6972
+ | 'cd'
6973
+ | 'cf'
6974
+ | 'cg'
6975
+ | 'ch'
6976
+ | 'ci'
6977
+ | 'cl'
6978
+ | 'cm'
6398
6979
  | 'cn'
6980
+ | 'co'
6981
+ | 'cr'
6982
+ | 'cu'
6983
+ | 'cv'
6984
+ | 'cy'
6985
+ | 'cz'
6399
6986
  | 'de'
6987
+ | 'dj'
6988
+ | 'dk'
6989
+ | 'dm'
6990
+ | 'do'
6400
6991
  | 'dz'
6992
+ | 'ec'
6993
+ | 'ee'
6994
+ | 'eg'
6995
+ | 'er'
6401
6996
  | 'es'
6997
+ | 'et'
6998
+ | 'fj'
6999
+ | 'fm'
6402
7000
  | 'fr'
7001
+ | 'ga'
6403
7002
  | 'gb'
7003
+ | 'gd'
7004
+ | 'ge'
7005
+ | 'gh'
7006
+ | 'gm'
7007
+ | 'gn'
7008
+ | 'gq'
7009
+ | 'gr'
7010
+ | 'gt'
7011
+ | 'gw'
7012
+ | 'gy'
6404
7013
  | 'hk'
7014
+ | 'hn'
7015
+ | 'hr'
7016
+ | 'ht'
7017
+ | 'hu'
7018
+ | 'id'
7019
+ | 'ie'
7020
+ | 'il'
6405
7021
  | 'in'
7022
+ | 'iq'
7023
+ | 'ir'
7024
+ | 'is'
6406
7025
  | 'it'
7026
+ | 'jm'
7027
+ | 'jo'
6407
7028
  | 'jp'
7029
+ | 'ke'
7030
+ | 'kg'
7031
+ | 'kh'
7032
+ | 'ki'
7033
+ | 'km'
7034
+ | 'kn'
6408
7035
  | 'kr'
7036
+ | 'kw'
7037
+ | 'kz'
7038
+ | 'la'
7039
+ | 'lb'
7040
+ | 'lc'
7041
+ | 'li'
7042
+ | 'lk'
7043
+ | 'lr'
7044
+ | 'ls'
7045
+ | 'lt'
7046
+ | 'lu'
7047
+ | 'lv'
7048
+ | 'ly'
7049
+ | 'ma'
7050
+ | 'mc'
7051
+ | 'md'
7052
+ | 'me'
7053
+ | 'mg'
7054
+ | 'mh'
7055
+ | 'mk'
7056
+ | 'ml'
7057
+ | 'mm'
7058
+ | 'mn'
7059
+ | 'mr'
7060
+ | 'mt'
7061
+ | 'mu'
7062
+ | 'mv'
7063
+ | 'mw'
7064
+ | 'mx'
7065
+ | 'mz'
7066
+ | 'na'
7067
+ | 'ne'
7068
+ | 'ng'
7069
+ | 'ni'
6409
7070
  | 'nl'
7071
+ | 'no'
7072
+ | 'np'
7073
+ | 'nr'
7074
+ | 'nz'
7075
+ | 'om'
7076
+ | 'pa'
7077
+ | 'pe'
7078
+ | 'pg'
7079
+ | 'ph'
7080
+ | 'pk'
7081
+ | 'pl'
7082
+ | 'ps'
7083
+ | 'pt'
7084
+ | 'pw'
7085
+ | 'py'
7086
+ | 'qa'
7087
+ | 'ro'
7088
+ | 'rs'
7089
+ | 'ru'
7090
+ | 'rw'
7091
+ | 'sa'
7092
+ | 'sb'
7093
+ | 'sc'
7094
+ | 'sd'
7095
+ | 'se'
6410
7096
  | 'sg'
7097
+ | 'sl'
7098
+ | 'sm'
7099
+ | 'sn'
7100
+ | 'so'
7101
+ | 'sr'
7102
+ | 'st'
7103
+ | 'sv'
7104
+ | 'sy'
7105
+ | 'sz'
7106
+ | 'td'
7107
+ | 'tg'
7108
+ | 'th'
7109
+ | 'tj'
7110
+ | 'tl'
7111
+ | 'tm'
7112
+ | 'tn'
7113
+ | 'to'
7114
+ | 'tr'
7115
+ | 'tt'
7116
+ | 'tv'
6411
7117
  | 'tw'
6412
- | 'us';
7118
+ | 'tz'
7119
+ | 'ua'
7120
+ | 'ug'
7121
+ | 'us'
7122
+ | 'uy'
7123
+ | 'uz'
7124
+ | 'va'
7125
+ | 'vc'
7126
+ | 've'
7127
+ | 'vn'
7128
+ | 'vu'
7129
+ | 'ws'
7130
+ | 'ye'
7131
+ | 'za'
7132
+ | 'zm'
7133
+ | 'zw';
6413
7134
  };
6414
7135
 
6415
7136
  export type AccountStandardsControllerGetRegionsResponse =
@@ -6459,7 +7180,7 @@ export type TransactionControllerListData = {
6459
7180
  */
6460
7181
  accountId?: string;
6461
7182
  /**
6462
- * Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
7183
+ * Filter by ADR-0075 functional category (Group segment); matches any posting to an account whose derived Group segment equals this value. Must be accompanied by flow (ADR-0126).
6463
7184
  */
6464
7185
  category?: string;
6465
7186
  /**
@@ -6470,6 +7191,10 @@ export type TransactionControllerListData = {
6470
7191
  * Filter by end date (inclusive), format: YYYY-MM-DD
6471
7192
  */
6472
7193
  dateTo?: string;
7194
+ /**
7195
+ * Required when category is present (400 otherwise) and vice versa (ADR-0126). Restricts the category account set to the flow root (income → Income:, expense → Expenses:) and drives the per-leg sign normalization of row viewpointAmount and the summary. OpenAPI cannot express conditional requiredness — the pairing is enforced at runtime.
7196
+ */
7197
+ flow?: 'income' | 'expense';
6473
7198
  /**
6474
7199
  * Number of items per page (1-100, default: 20)
6475
7200
  */
@@ -6512,9 +7237,9 @@ export type TransactionControllerListData = {
6512
7237
  */
6513
7238
  search?: string;
6514
7239
  /**
6515
- * Filter by transaction status
7240
+ * Filter by transaction status: single value, comma-separated multi-value (e.g. VOIDED,SUPERSEDED), or ALL to include audit rows. Defaults to ACTIVE-only (ADR-0128; previously unfiltered — breaking change).
6516
7241
  */
6517
- status?: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
7242
+ status?: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED' | 'ALL';
6518
7243
  };
6519
7244
 
6520
7245
  export type TransactionControllerListResponse = TransactionListResponseDto;
@@ -7271,8 +7996,7 @@ export type PayeeProfileAdminControllerUnverifyData = {
7271
7996
  id: string;
7272
7997
  };
7273
7998
 
7274
- export type PayeeProfileAdminControllerUnverifyResponse =
7275
- PayeeProfileResponseDto;
7999
+ export type PayeeProfileAdminControllerUnverifyResponse = void;
7276
8000
 
7277
8001
  export type CommodityControllerCreateData = {
7278
8002
  /**
@@ -7536,7 +8260,168 @@ export type CommodityControllerBulkCreateData = {
7536
8260
  | 'us';
7537
8261
  };
7538
8262
 
7539
- export type CommodityControllerBulkCreateResponse = Array<CommodityResponseDto>;
8263
+ export type CommodityControllerBulkCreateResponse = Array<CommodityResponseDto>;
8264
+
8265
+ export type ReportingControllerGetPortfolioTrendsData = {
8266
+ /**
8267
+ * Data granularity
8268
+ */
8269
+ granularity?: 'day' | 'week' | 'month';
8270
+ /**
8271
+ * Time period
8272
+ */
8273
+ period?: '1m' | '3m' | '6m' | '1y';
8274
+ /**
8275
+ * Region code for tenant context
8276
+ */
8277
+ region:
8278
+ | 'ad'
8279
+ | 'ae'
8280
+ | 'af'
8281
+ | 'ag'
8282
+ | 'al'
8283
+ | 'am'
8284
+ | 'ao'
8285
+ | 'au'
8286
+ | 'br'
8287
+ | 'ca'
8288
+ | 'cn'
8289
+ | 'de'
8290
+ | 'dz'
8291
+ | 'es'
8292
+ | 'fr'
8293
+ | 'gb'
8294
+ | 'hk'
8295
+ | 'in'
8296
+ | 'it'
8297
+ | 'jp'
8298
+ | 'kr'
8299
+ | 'nl'
8300
+ | 'sg'
8301
+ | 'tw'
8302
+ | 'us';
8303
+ };
8304
+
8305
+ export type ReportingControllerGetPortfolioTrendsResponse =
8306
+ PortfolioTrendsResponseDto;
8307
+
8308
+ export type ReportingControllerGetCashFlowTrendsData = {
8309
+ /**
8310
+ * Data granularity (accepted for API symmetry; v1 returns month buckets)
8311
+ */
8312
+ granularity?: 'day' | 'week' | 'month';
8313
+ /**
8314
+ * Time period
8315
+ */
8316
+ period?: '1m' | '3m' | '6m' | '1y';
8317
+ /**
8318
+ * Region code for tenant context
8319
+ */
8320
+ region:
8321
+ | 'ad'
8322
+ | 'ae'
8323
+ | 'af'
8324
+ | 'ag'
8325
+ | 'al'
8326
+ | 'am'
8327
+ | 'ao'
8328
+ | 'au'
8329
+ | 'br'
8330
+ | 'ca'
8331
+ | 'cn'
8332
+ | 'de'
8333
+ | 'dz'
8334
+ | 'es'
8335
+ | 'fr'
8336
+ | 'gb'
8337
+ | 'hk'
8338
+ | 'in'
8339
+ | 'it'
8340
+ | 'jp'
8341
+ | 'kr'
8342
+ | 'nl'
8343
+ | 'sg'
8344
+ | 'tw'
8345
+ | 'us';
8346
+ };
8347
+
8348
+ export type ReportingControllerGetCashFlowTrendsResponse =
8349
+ CashFlowTrendsResponseDto;
8350
+
8351
+ export type ReportingControllerGenerateSnapshotData = {
8352
+ /**
8353
+ * Region code for tenant context
8354
+ */
8355
+ region:
8356
+ | 'ad'
8357
+ | 'ae'
8358
+ | 'af'
8359
+ | 'ag'
8360
+ | 'al'
8361
+ | 'am'
8362
+ | 'ao'
8363
+ | 'au'
8364
+ | 'br'
8365
+ | 'ca'
8366
+ | 'cn'
8367
+ | 'de'
8368
+ | 'dz'
8369
+ | 'es'
8370
+ | 'fr'
8371
+ | 'gb'
8372
+ | 'hk'
8373
+ | 'in'
8374
+ | 'it'
8375
+ | 'jp'
8376
+ | 'kr'
8377
+ | 'nl'
8378
+ | 'sg'
8379
+ | 'tw'
8380
+ | 'us';
8381
+ /**
8382
+ * Optional date (defaults to today)
8383
+ */
8384
+ requestBody: GenerateSnapshotBody;
8385
+ };
8386
+
8387
+ export type ReportingControllerGenerateSnapshotResponse =
8388
+ GenerateSnapshotResponse;
8389
+
8390
+ export type ReportingControllerBackfillSnapshotsData = {
8391
+ /**
8392
+ * Region code for tenant context
8393
+ */
8394
+ region:
8395
+ | 'ad'
8396
+ | 'ae'
8397
+ | 'af'
8398
+ | 'ag'
8399
+ | 'al'
8400
+ | 'am'
8401
+ | 'ao'
8402
+ | 'au'
8403
+ | 'br'
8404
+ | 'ca'
8405
+ | 'cn'
8406
+ | 'de'
8407
+ | 'dz'
8408
+ | 'es'
8409
+ | 'fr'
8410
+ | 'gb'
8411
+ | 'hk'
8412
+ | 'in'
8413
+ | 'it'
8414
+ | 'jp'
8415
+ | 'kr'
8416
+ | 'nl'
8417
+ | 'sg'
8418
+ | 'tw'
8419
+ | 'us';
8420
+ requestBody: BackfillSnapshotsBody;
8421
+ };
8422
+
8423
+ export type ReportingControllerBackfillSnapshotsResponse =
8424
+ BackfillSnapshotsResponse;
7540
8425
 
7541
8426
  export type PriceControllerCreateData = {
7542
8427
  /**
@@ -7785,6 +8670,93 @@ export type PriceControllerBulkCreateData = {
7785
8670
 
7786
8671
  export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
7787
8672
 
8673
+ export type UserControllerDeleteOwnUserData = {
8674
+ requestBody: DeleteOwnUserDto;
8675
+ };
8676
+
8677
+ export type UserControllerDeleteOwnUserResponse = void;
8678
+
8679
+ export type UserControllerGetUserData = {
8680
+ acceptLanguage: string;
8681
+ };
8682
+
8683
+ export type UserControllerGetUserResponse = UserResponseDto;
8684
+
8685
+ export type UserControllerSignupUserData = {
8686
+ requestBody: SignupDto;
8687
+ };
8688
+
8689
+ export type UserControllerSignupUserResponse = SignupResponseDto;
8690
+
8691
+ export type UserControllerDeleteUserData = {
8692
+ /**
8693
+ * User ID to delete
8694
+ */
8695
+ id: string;
8696
+ };
8697
+
8698
+ export type UserControllerDeleteUserResponse = void;
8699
+
8700
+ export type UserControllerGetUserInfoData = {
8701
+ /**
8702
+ * User ID
8703
+ */
8704
+ id: string;
8705
+ };
8706
+
8707
+ export type UserControllerGetUserInfoResponse = unknown;
8708
+
8709
+ export type UserControllerUpdateUserSettingData = {
8710
+ requestBody: UpdateUserSettingDto;
8711
+ };
8712
+
8713
+ export type UserControllerUpdateUserSettingResponse = unknown;
8714
+
8715
+ export type UserControllerGetAllUserSettingsByPageData = {
8716
+ /**
8717
+ * Page number
8718
+ */
8719
+ pageNo: number;
8720
+ /**
8721
+ * Page size
8722
+ */
8723
+ pageSize: number;
8724
+ };
8725
+
8726
+ export type UserControllerGetAllUserSettingsByPageResponse = unknown;
8727
+
8728
+ export type UserControllerGetAssetLiabilitySummaryResponse = unknown;
8729
+
8730
+ export type PropertyControllerGetAllResponse = unknown;
8731
+
8732
+ export type PropertyControllerGetByKeyData = {
8733
+ /**
8734
+ * Property key
8735
+ */
8736
+ key: string;
8737
+ };
8738
+
8739
+ export type PropertyControllerGetByKeyResponse = unknown;
8740
+
8741
+ export type PropertyControllerUpdateData = {
8742
+ /**
8743
+ * Property key
8744
+ */
8745
+ key: string;
8746
+ requestBody: UpdatePropertyDto;
8747
+ };
8748
+
8749
+ export type PropertyControllerUpdateResponse = unknown;
8750
+
8751
+ export type PropertyControllerDeleteData = {
8752
+ /**
8753
+ * Property key
8754
+ */
8755
+ key: string;
8756
+ };
8757
+
8758
+ export type PropertyControllerDeleteResponse = void;
8759
+
7788
8760
  export type RecurringRuleControllerCreateData = {
7789
8761
  /**
7790
8762
  * Region code for tenant context
@@ -8261,8 +9233,7 @@ export type ExpectedTransactionControllerUndoSkipData = {
8261
9233
  | 'us';
8262
9234
  };
8263
9235
 
8264
- export type ExpectedTransactionControllerUndoSkipResponse =
8265
- ExpectedTransactionResponseDto;
9236
+ export type ExpectedTransactionControllerUndoSkipResponse = void;
8266
9237
 
8267
9238
  export type ExpectedTransactionControllerConfirmMatchData = {
8268
9239
  /**
@@ -8339,7 +9310,7 @@ export type ExpectedTransactionControllerUnmatchData = {
8339
9310
  | 'us';
8340
9311
  };
8341
9312
 
8342
- export type ExpectedTransactionControllerUnmatchResponse = unknown;
9313
+ export type ExpectedTransactionControllerUnmatchResponse = void;
8343
9314
 
8344
9315
  export type ExpectedTransactionControllerEnterNowData = {
8345
9316
  /**
@@ -8380,170 +9351,11 @@ export type ExpectedTransactionControllerEnterNowData = {
8380
9351
 
8381
9352
  export type ExpectedTransactionControllerEnterNowResponse = unknown;
8382
9353
 
8383
- export type ForecastControllerGetForecastData = {
8384
- /**
8385
- * Number of months to forecast (1-12, default 3)
8386
- */
8387
- months?: number;
8388
- /**
8389
- * Region code for tenant context
8390
- */
8391
- region:
8392
- | 'ad'
8393
- | 'ae'
8394
- | 'af'
8395
- | 'ag'
8396
- | 'al'
8397
- | 'am'
8398
- | 'ao'
8399
- | 'au'
8400
- | 'br'
8401
- | 'ca'
8402
- | 'cn'
8403
- | 'de'
8404
- | 'dz'
8405
- | 'es'
8406
- | 'fr'
8407
- | 'gb'
8408
- | 'hk'
8409
- | 'in'
8410
- | 'it'
8411
- | 'jp'
8412
- | 'kr'
8413
- | 'nl'
8414
- | 'sg'
8415
- | 'tw'
8416
- | 'us';
8417
- };
8418
-
8419
- export type ForecastControllerGetForecastResponse = ForecastResponseDto;
8420
-
8421
- export type ReportingControllerGetPortfolioTrendsData = {
8422
- /**
8423
- * Data granularity
8424
- */
8425
- granularity?: 'day' | 'week' | 'month';
8426
- /**
8427
- * Time period
8428
- */
8429
- period?: '1m' | '3m' | '6m' | '1y';
8430
- /**
8431
- * Region code for tenant context
8432
- */
8433
- region:
8434
- | 'ad'
8435
- | 'ae'
8436
- | 'af'
8437
- | 'ag'
8438
- | 'al'
8439
- | 'am'
8440
- | 'ao'
8441
- | 'au'
8442
- | 'br'
8443
- | 'ca'
8444
- | 'cn'
8445
- | 'de'
8446
- | 'dz'
8447
- | 'es'
8448
- | 'fr'
8449
- | 'gb'
8450
- | 'hk'
8451
- | 'in'
8452
- | 'it'
8453
- | 'jp'
8454
- | 'kr'
8455
- | 'nl'
8456
- | 'sg'
8457
- | 'tw'
8458
- | 'us';
8459
- };
8460
-
8461
- export type ReportingControllerGetPortfolioTrendsResponse =
8462
- PortfolioTrendsResponseDto;
8463
-
8464
- export type ReportingControllerGetCashFlowTrendsData = {
8465
- /**
8466
- * Data granularity (accepted for API symmetry; v1 returns month buckets)
8467
- */
8468
- granularity?: 'day' | 'week' | 'month';
8469
- /**
8470
- * Time period
8471
- */
8472
- period?: '1m' | '3m' | '6m' | '1y';
8473
- /**
8474
- * Region code for tenant context
8475
- */
8476
- region:
8477
- | 'ad'
8478
- | 'ae'
8479
- | 'af'
8480
- | 'ag'
8481
- | 'al'
8482
- | 'am'
8483
- | 'ao'
8484
- | 'au'
8485
- | 'br'
8486
- | 'ca'
8487
- | 'cn'
8488
- | 'de'
8489
- | 'dz'
8490
- | 'es'
8491
- | 'fr'
8492
- | 'gb'
8493
- | 'hk'
8494
- | 'in'
8495
- | 'it'
8496
- | 'jp'
8497
- | 'kr'
8498
- | 'nl'
8499
- | 'sg'
8500
- | 'tw'
8501
- | 'us';
8502
- };
8503
-
8504
- export type ReportingControllerGetCashFlowTrendsResponse =
8505
- CashFlowTrendsResponseDto;
8506
-
8507
- export type ReportingControllerGenerateSnapshotData = {
8508
- /**
8509
- * Region code for tenant context
8510
- */
8511
- region:
8512
- | 'ad'
8513
- | 'ae'
8514
- | 'af'
8515
- | 'ag'
8516
- | 'al'
8517
- | 'am'
8518
- | 'ao'
8519
- | 'au'
8520
- | 'br'
8521
- | 'ca'
8522
- | 'cn'
8523
- | 'de'
8524
- | 'dz'
8525
- | 'es'
8526
- | 'fr'
8527
- | 'gb'
8528
- | 'hk'
8529
- | 'in'
8530
- | 'it'
8531
- | 'jp'
8532
- | 'kr'
8533
- | 'nl'
8534
- | 'sg'
8535
- | 'tw'
8536
- | 'us';
8537
- /**
8538
- * Optional date (defaults to today)
8539
- */
8540
- requestBody: GenerateSnapshotBody;
8541
- };
8542
-
8543
- export type ReportingControllerGenerateSnapshotResponse =
8544
- GenerateSnapshotResponse;
8545
-
8546
- export type ReportingControllerBackfillSnapshotsData = {
9354
+ export type ForecastControllerGetForecastData = {
9355
+ /**
9356
+ * Number of months to forecast (1-12, default 3)
9357
+ */
9358
+ months?: number;
8547
9359
  /**
8548
9360
  * Region code for tenant context
8549
9361
  */
@@ -8573,98 +9385,9 @@ export type ReportingControllerBackfillSnapshotsData = {
8573
9385
  | 'sg'
8574
9386
  | 'tw'
8575
9387
  | 'us';
8576
- requestBody: BackfillSnapshotsBody;
8577
- };
8578
-
8579
- export type ReportingControllerBackfillSnapshotsResponse =
8580
- BackfillSnapshotsResponse;
8581
-
8582
- export type UserControllerDeleteOwnUserData = {
8583
- requestBody: DeleteOwnUserDto;
8584
- };
8585
-
8586
- export type UserControllerDeleteOwnUserResponse = void;
8587
-
8588
- export type UserControllerGetUserData = {
8589
- acceptLanguage: string;
8590
- };
8591
-
8592
- export type UserControllerGetUserResponse = UserResponseDto;
8593
-
8594
- export type UserControllerSignupUserData = {
8595
- requestBody: SignupDto;
8596
- };
8597
-
8598
- export type UserControllerSignupUserResponse = SignupResponseDto;
8599
-
8600
- export type UserControllerDeleteUserData = {
8601
- /**
8602
- * User ID to delete
8603
- */
8604
- id: string;
8605
- };
8606
-
8607
- export type UserControllerDeleteUserResponse = void;
8608
-
8609
- export type UserControllerGetUserInfoData = {
8610
- /**
8611
- * User ID
8612
- */
8613
- id: string;
8614
- };
8615
-
8616
- export type UserControllerGetUserInfoResponse = unknown;
8617
-
8618
- export type UserControllerUpdateUserSettingData = {
8619
- requestBody: UpdateUserSettingDto;
8620
- };
8621
-
8622
- export type UserControllerUpdateUserSettingResponse = unknown;
8623
-
8624
- export type UserControllerGetAllUserSettingsByPageData = {
8625
- /**
8626
- * Page number
8627
- */
8628
- pageNo: number;
8629
- /**
8630
- * Page size
8631
- */
8632
- pageSize: number;
8633
- };
8634
-
8635
- export type UserControllerGetAllUserSettingsByPageResponse = unknown;
8636
-
8637
- export type UserControllerGetAssetLiabilitySummaryResponse = unknown;
8638
-
8639
- export type PropertyControllerGetAllResponse = unknown;
8640
-
8641
- export type PropertyControllerGetByKeyData = {
8642
- /**
8643
- * Property key
8644
- */
8645
- key: string;
8646
- };
8647
-
8648
- export type PropertyControllerGetByKeyResponse = unknown;
8649
-
8650
- export type PropertyControllerUpdateData = {
8651
- /**
8652
- * Property key
8653
- */
8654
- key: string;
8655
- requestBody: UpdatePropertyDto;
8656
- };
8657
-
8658
- export type PropertyControllerUpdateResponse = unknown;
8659
-
8660
- export type PropertyControllerDeleteData = {
8661
- /**
8662
- * Property key
8663
- */
8664
- key: string;
8665
9388
  };
8666
9389
 
8667
- export type PropertyControllerDeleteResponse = void;
9390
+ export type ForecastControllerGetForecastResponse = ForecastResponseDto;
8668
9391
 
8669
9392
  export type TransactionRuleControllerCreateData = {
8670
9393
  /**
@@ -9360,7 +10083,7 @@ export type EventControllerGetSliceResponse = unknown;
9360
10083
 
9361
10084
  export type OnboardingControllerBootstrapData = {
9362
10085
  /**
9363
- * Region code for tenant context
10086
+ * Region code for tenant context. Not-yet-open codes are accepted: the universal catalog backs onboarding regardless of region (#759)
9364
10087
  */
9365
10088
  region:
9366
10089
  | 'ad'
@@ -9370,24 +10093,190 @@ export type OnboardingControllerBootstrapData = {
9370
10093
  | 'al'
9371
10094
  | 'am'
9372
10095
  | 'ao'
10096
+ | 'ar'
10097
+ | 'at'
9373
10098
  | 'au'
10099
+ | 'az'
10100
+ | 'ba'
10101
+ | 'bb'
10102
+ | 'bd'
10103
+ | 'be'
10104
+ | 'bf'
10105
+ | 'bg'
10106
+ | 'bh'
10107
+ | 'bi'
10108
+ | 'bj'
10109
+ | 'bn'
10110
+ | 'bo'
9374
10111
  | 'br'
10112
+ | 'bs'
10113
+ | 'bt'
10114
+ | 'bw'
10115
+ | 'by'
10116
+ | 'bz'
9375
10117
  | 'ca'
10118
+ | 'cd'
10119
+ | 'cf'
10120
+ | 'cg'
10121
+ | 'ch'
10122
+ | 'ci'
10123
+ | 'cl'
10124
+ | 'cm'
9376
10125
  | 'cn'
10126
+ | 'co'
10127
+ | 'cr'
10128
+ | 'cu'
10129
+ | 'cv'
10130
+ | 'cy'
10131
+ | 'cz'
9377
10132
  | 'de'
10133
+ | 'dj'
10134
+ | 'dk'
10135
+ | 'dm'
10136
+ | 'do'
9378
10137
  | 'dz'
10138
+ | 'ec'
10139
+ | 'ee'
10140
+ | 'eg'
10141
+ | 'er'
9379
10142
  | 'es'
10143
+ | 'et'
10144
+ | 'fj'
10145
+ | 'fm'
9380
10146
  | 'fr'
10147
+ | 'ga'
9381
10148
  | 'gb'
10149
+ | 'gd'
10150
+ | 'ge'
10151
+ | 'gh'
10152
+ | 'gm'
10153
+ | 'gn'
10154
+ | 'gq'
10155
+ | 'gr'
10156
+ | 'gt'
10157
+ | 'gw'
10158
+ | 'gy'
9382
10159
  | 'hk'
10160
+ | 'hn'
10161
+ | 'hr'
10162
+ | 'ht'
10163
+ | 'hu'
10164
+ | 'id'
10165
+ | 'ie'
10166
+ | 'il'
9383
10167
  | 'in'
10168
+ | 'iq'
10169
+ | 'ir'
10170
+ | 'is'
9384
10171
  | 'it'
10172
+ | 'jm'
10173
+ | 'jo'
9385
10174
  | 'jp'
10175
+ | 'ke'
10176
+ | 'kg'
10177
+ | 'kh'
10178
+ | 'ki'
10179
+ | 'km'
10180
+ | 'kn'
9386
10181
  | 'kr'
10182
+ | 'kw'
10183
+ | 'kz'
10184
+ | 'la'
10185
+ | 'lb'
10186
+ | 'lc'
10187
+ | 'li'
10188
+ | 'lk'
10189
+ | 'lr'
10190
+ | 'ls'
10191
+ | 'lt'
10192
+ | 'lu'
10193
+ | 'lv'
10194
+ | 'ly'
10195
+ | 'ma'
10196
+ | 'mc'
10197
+ | 'md'
10198
+ | 'me'
10199
+ | 'mg'
10200
+ | 'mh'
10201
+ | 'mk'
10202
+ | 'ml'
10203
+ | 'mm'
10204
+ | 'mn'
10205
+ | 'mr'
10206
+ | 'mt'
10207
+ | 'mu'
10208
+ | 'mv'
10209
+ | 'mw'
10210
+ | 'mx'
10211
+ | 'mz'
10212
+ | 'na'
10213
+ | 'ne'
10214
+ | 'ng'
10215
+ | 'ni'
9387
10216
  | 'nl'
10217
+ | 'no'
10218
+ | 'np'
10219
+ | 'nr'
10220
+ | 'nz'
10221
+ | 'om'
10222
+ | 'pa'
10223
+ | 'pe'
10224
+ | 'pg'
10225
+ | 'ph'
10226
+ | 'pk'
10227
+ | 'pl'
10228
+ | 'ps'
10229
+ | 'pt'
10230
+ | 'pw'
10231
+ | 'py'
10232
+ | 'qa'
10233
+ | 'ro'
10234
+ | 'rs'
10235
+ | 'ru'
10236
+ | 'rw'
10237
+ | 'sa'
10238
+ | 'sb'
10239
+ | 'sc'
10240
+ | 'sd'
10241
+ | 'se'
9388
10242
  | 'sg'
10243
+ | 'sl'
10244
+ | 'sm'
10245
+ | 'sn'
10246
+ | 'so'
10247
+ | 'sr'
10248
+ | 'st'
10249
+ | 'sv'
10250
+ | 'sy'
10251
+ | 'sz'
10252
+ | 'td'
10253
+ | 'tg'
10254
+ | 'th'
10255
+ | 'tj'
10256
+ | 'tl'
10257
+ | 'tm'
10258
+ | 'tn'
10259
+ | 'to'
10260
+ | 'tr'
10261
+ | 'tt'
10262
+ | 'tv'
9389
10263
  | 'tw'
9390
- | 'us';
10264
+ | 'tz'
10265
+ | 'ua'
10266
+ | 'ug'
10267
+ | 'us'
10268
+ | 'uy'
10269
+ | 'uz'
10270
+ | 'va'
10271
+ | 'vc'
10272
+ | 've'
10273
+ | 'vn'
10274
+ | 'vu'
10275
+ | 'ws'
10276
+ | 'ye'
10277
+ | 'za'
10278
+ | 'zm'
10279
+ | 'zw';
9391
10280
  requestBody: OnboardingDto;
9392
10281
  };
9393
10282
 
@@ -9538,7 +10427,7 @@ export type ReconciliationControllerHistoryData = {
9538
10427
  export type ReconciliationControllerHistoryResponse =
9539
10428
  Array<ReconciliationRecordDto>;
9540
10429
 
9541
- export type ExportControllerExportBeancountResponse = unknown;
10430
+ export type ExportControllerExportBeancountResponse = Blob | File;
9542
10431
 
9543
10432
  export type FileImportControllerImportFileData = {
9544
10433
  /**
@@ -10296,6 +11185,24 @@ export type PlatformControllerMatchPlatformsData = {
10296
11185
 
10297
11186
  export type PlatformControllerMatchPlatformsResponse = PlatformMatchResponseDto;
10298
11187
 
11188
+ export type PlatformControllerGetPlatformStandardsData = {
11189
+ /**
11190
+ * Platform ID (from a match result)
11191
+ */
11192
+ id: string;
11193
+ /**
11194
+ * Region code (ISO 3166-1 alpha-2, case-insensitive). Required for global platforms (countryCode null) — resolved as their template region; ignored when the platform has its own countryCode.
11195
+ */
11196
+ region?: string;
11197
+ /**
11198
+ * Filter templates by account type (path first segment)
11199
+ */
11200
+ type?: 'Assets' | 'Liabilities' | 'Income' | 'Expenses' | 'Equity';
11201
+ };
11202
+
11203
+ export type PlatformControllerGetPlatformStandardsResponse =
11204
+ PlatformStandardsResponseDto;
11205
+
10299
11206
  export type PlatformControllerUpdateData = {
10300
11207
  /**
10301
11208
  * Platform ID
@@ -10545,6 +11452,42 @@ export type AuthControllerAccessTokenLoginData = {
10545
11452
 
10546
11453
  export type AuthControllerAccessTokenLoginResponse = AnonymousLoginResponseDto;
10547
11454
 
11455
+ export type ParserContributionControllerCreateData = {
11456
+ /**
11457
+ * Region code for tenant context (routing only; the institution region rides in the payload meta)
11458
+ */
11459
+ region:
11460
+ | 'ad'
11461
+ | 'ae'
11462
+ | 'af'
11463
+ | 'ag'
11464
+ | 'al'
11465
+ | 'am'
11466
+ | 'ao'
11467
+ | 'au'
11468
+ | 'br'
11469
+ | 'ca'
11470
+ | 'cn'
11471
+ | 'de'
11472
+ | 'dz'
11473
+ | 'es'
11474
+ | 'fr'
11475
+ | 'gb'
11476
+ | 'hk'
11477
+ | 'in'
11478
+ | 'it'
11479
+ | 'jp'
11480
+ | 'kr'
11481
+ | 'nl'
11482
+ | 'sg'
11483
+ | 'tw'
11484
+ | 'us';
11485
+ requestBody: ParserContributionRequestDto;
11486
+ };
11487
+
11488
+ export type ParserContributionControllerCreateResponse =
11489
+ ParserContributionRelayResponseDto;
11490
+
10548
11491
  export type CacheControllerFlushCacheResponse = unknown;
10549
11492
 
10550
11493
  export type ExchangeRateControllerGetExchangeRateData = {
@@ -11238,7 +12181,7 @@ export type $OpenApiTs = {
11238
12181
  /**
11239
12182
  * Payee profile unverified successfully
11240
12183
  */
11241
- 200: PayeeProfileResponseDto;
12184
+ 204: void;
11242
12185
  /**
11243
12186
  * Admin access required
11244
12187
  */
@@ -11345,598 +12288,598 @@ export type $OpenApiTs = {
11345
12288
  };
11346
12289
  };
11347
12290
  };
11348
- '/api/v1/{region}/bean/prices': {
11349
- post: {
11350
- req: PriceControllerCreateData;
12291
+ '/api/v1/{region}/reporting/portfolio/trends': {
12292
+ get: {
12293
+ req: ReportingControllerGetPortfolioTrendsData;
11351
12294
  res: {
11352
12295
  /**
11353
- * Price created successfully
11354
- */
11355
- 201: PriceResponseDto;
11356
- /**
11357
- * Currency or quoteCurrency commodity not found
11358
- */
11359
- 404: unknown;
11360
- /**
11361
- * Price already exists for this currency pair and date
12296
+ * Trends retrieved successfully
11362
12297
  */
11363
- 409: unknown;
11364
- };
11365
- };
11366
- get: {
11367
- req: PriceControllerFindAllData;
11368
- res: {
12298
+ 200: PortfolioTrendsResponseDto;
11369
12299
  /**
11370
- * Prices retrieved successfully
12300
+ * User not authenticated
11371
12301
  */
11372
- 200: PriceListResponseDto;
12302
+ 401: unknown;
11373
12303
  };
11374
12304
  };
11375
12305
  };
11376
- '/api/v1/{region}/bean/prices/{id}': {
12306
+ '/api/v1/{region}/reporting/cash-flow/trends': {
11377
12307
  get: {
11378
- req: PriceControllerFindOneData;
11379
- res: {
11380
- /**
11381
- * Price retrieved successfully
11382
- */
11383
- 200: PriceResponseDto;
11384
- /**
11385
- * Price not found
11386
- */
11387
- 404: unknown;
11388
- };
11389
- };
11390
- put: {
11391
- req: PriceControllerUpdateData;
12308
+ req: ReportingControllerGetCashFlowTrendsData;
11392
12309
  res: {
11393
12310
  /**
11394
- * Price updated successfully
11395
- */
11396
- 200: PriceResponseDto;
11397
- /**
11398
- * Price not found
12311
+ * Cash-flow trends retrieved successfully
11399
12312
  */
11400
- 404: unknown;
12313
+ 200: CashFlowTrendsResponseDto;
11401
12314
  /**
11402
- * Updated price conflicts with existing price
12315
+ * User not authenticated
11403
12316
  */
11404
- 409: unknown;
12317
+ 401: unknown;
11405
12318
  };
11406
12319
  };
11407
- delete: {
11408
- req: PriceControllerDeleteData;
12320
+ };
12321
+ '/api/v1/{region}/reporting/snapshots/generate': {
12322
+ post: {
12323
+ req: ReportingControllerGenerateSnapshotData;
11409
12324
  res: {
11410
12325
  /**
11411
- * Price deleted successfully
12326
+ * Snapshot generated successfully
11412
12327
  */
11413
- 204: void;
12328
+ 200: GenerateSnapshotResponse;
11414
12329
  /**
11415
- * Price not found
12330
+ * Invalid date format
11416
12331
  */
11417
- 404: unknown;
11418
- };
11419
- };
11420
- };
11421
- '/api/v1/{region}/bean/prices/bulk': {
11422
- post: {
11423
- req: PriceControllerBulkCreateData;
11424
- res: {
12332
+ 400: unknown;
11425
12333
  /**
11426
- * Prices created successfully
12334
+ * User not authenticated
11427
12335
  */
11428
- 201: Array<PriceResponseDto>;
12336
+ 401: unknown;
11429
12337
  };
11430
12338
  };
11431
12339
  };
11432
- '/api/v1/{region}/bean/recurring-rules': {
12340
+ '/api/v1/{region}/reporting/snapshots/backfill': {
11433
12341
  post: {
11434
- req: RecurringRuleControllerCreateData;
12342
+ req: ReportingControllerBackfillSnapshotsData;
11435
12343
  res: {
11436
12344
  /**
11437
- * Rule created successfully
12345
+ * Backfill completed successfully
11438
12346
  */
11439
- 201: RecurringRuleResponseDto;
12347
+ 200: BackfillSnapshotsResponse;
11440
12348
  /**
11441
- * Invalid input data (e.g., autoCreate without accounts)
12349
+ * Invalid date format or range
11442
12350
  */
11443
12351
  400: unknown;
11444
12352
  /**
11445
- * Rule with same name already exists
12353
+ * User not authenticated
11446
12354
  */
11447
- 409: unknown;
11448
- };
11449
- };
11450
- get: {
11451
- req: RecurringRuleControllerFindAllData;
11452
- res: {
12355
+ 401: unknown;
11453
12356
  /**
11454
- * Rules retrieved successfully
12357
+ * Backfill already in progress for this user
11455
12358
  */
11456
- 200: Array<RecurringRuleResponseDto>;
12359
+ 409: unknown;
11457
12360
  };
11458
12361
  };
11459
12362
  };
11460
- '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}': {
12363
+ '/api/v1/{region}/bean/prices': {
11461
12364
  post: {
11462
- req: RecurringRuleControllerCreateFromTransactionData;
12365
+ req: PriceControllerCreateData;
11463
12366
  res: {
11464
12367
  /**
11465
- * Rule created successfully
12368
+ * Price created successfully
12369
+ */
12370
+ 201: PriceResponseDto;
12371
+ /**
12372
+ * Currency or quoteCurrency commodity not found
11466
12373
  */
11467
- 201: RecurringRuleResponseDto;
12374
+ 404: unknown;
11468
12375
  /**
11469
- * Transaction not found
12376
+ * Price already exists for this currency pair and date
11470
12377
  */
11471
- 404: ApiProblemResponseDto;
12378
+ 409: unknown;
12379
+ };
12380
+ };
12381
+ get: {
12382
+ req: PriceControllerFindAllData;
12383
+ res: {
11472
12384
  /**
11473
- * Rule with same name already exists or transaction already linked
12385
+ * Prices retrieved successfully
11474
12386
  */
11475
- 409: ApiProblemResponseDto;
12387
+ 200: PriceListResponseDto;
11476
12388
  };
11477
12389
  };
11478
12390
  };
11479
- '/api/v1/{region}/bean/recurring-rules/{id}': {
12391
+ '/api/v1/{region}/bean/prices/{id}': {
11480
12392
  get: {
11481
- req: RecurringRuleControllerFindOneData;
12393
+ req: PriceControllerFindOneData;
11482
12394
  res: {
11483
12395
  /**
11484
- * Rule retrieved successfully
12396
+ * Price retrieved successfully
11485
12397
  */
11486
- 200: RecurringRuleResponseDto;
12398
+ 200: PriceResponseDto;
11487
12399
  /**
11488
- * Rule not found
12400
+ * Price not found
11489
12401
  */
11490
12402
  404: unknown;
11491
12403
  };
11492
12404
  };
11493
- patch: {
11494
- req: RecurringRuleControllerUpdateData;
12405
+ put: {
12406
+ req: PriceControllerUpdateData;
11495
12407
  res: {
11496
12408
  /**
11497
- * Rule updated successfully
12409
+ * Price updated successfully
11498
12410
  */
11499
- 200: RecurringRuleResponseDto;
12411
+ 200: PriceResponseDto;
11500
12412
  /**
11501
- * Invalid input data
12413
+ * Price not found
11502
12414
  */
11503
- 400: unknown;
12415
+ 404: unknown;
11504
12416
  /**
11505
- * Rule not found
12417
+ * Updated price conflicts with existing price
11506
12418
  */
11507
- 404: unknown;
12419
+ 409: unknown;
11508
12420
  };
11509
12421
  };
11510
12422
  delete: {
11511
- req: RecurringRuleControllerDeleteData;
12423
+ req: PriceControllerDeleteData;
11512
12424
  res: {
11513
12425
  /**
11514
- * Rule deleted successfully
12426
+ * Price deleted successfully
11515
12427
  */
11516
12428
  204: void;
11517
12429
  /**
11518
- * Rule not found
12430
+ * Price not found
11519
12431
  */
11520
12432
  404: unknown;
11521
12433
  };
11522
12434
  };
11523
12435
  };
11524
- '/api/v1/{region}/bean/recurring-rules/{id}/stats': {
11525
- get: {
11526
- req: RecurringRuleControllerGetWithStatsData;
12436
+ '/api/v1/{region}/bean/prices/bulk': {
12437
+ post: {
12438
+ req: PriceControllerBulkCreateData;
11527
12439
  res: {
11528
12440
  /**
11529
- * Rule with stats retrieved successfully
11530
- */
11531
- 200: RecurringRuleWithStatsResponseDto;
11532
- /**
11533
- * Rule not found
12441
+ * Prices created successfully
11534
12442
  */
11535
- 404: unknown;
12443
+ 201: Array<PriceResponseDto>;
11536
12444
  };
11537
12445
  };
11538
12446
  };
11539
- '/api/v1/{region}/bean/expected-transactions': {
11540
- get: {
11541
- req: ExpectedTransactionControllerFindAllData;
12447
+ '/api/v1/users': {
12448
+ delete: {
12449
+ req: UserControllerDeleteOwnUserData;
11542
12450
  res: {
11543
12451
  /**
11544
- * Expected transactions retrieved successfully
12452
+ * User deleted successfully
11545
12453
  */
11546
- 200: ExpectedTransactionListResponseDto;
11547
- };
11548
- };
11549
- };
11550
- '/api/v1/{region}/bean/expected-transactions/overdue': {
11551
- get: {
11552
- req: ExpectedTransactionControllerFindOverdueData;
11553
- res: {
12454
+ 204: void;
11554
12455
  /**
11555
- * Overdue transactions retrieved successfully
12456
+ * Invalid access token
11556
12457
  */
11557
- 200: ExpectedTransactionListResponseDto;
12458
+ 403: unknown;
11558
12459
  };
11559
12460
  };
11560
- };
11561
- '/api/v1/{region}/bean/expected-transactions/{id}': {
11562
12461
  get: {
11563
- req: ExpectedTransactionControllerFindOneData;
12462
+ req: UserControllerGetUserData;
11564
12463
  res: {
11565
12464
  /**
11566
- * Expected transaction retrieved successfully
11567
- */
11568
- 200: ExpectedTransactionResponseDto;
11569
- /**
11570
- * Expected transaction not found
12465
+ * User retrieved successfully
11571
12466
  */
11572
- 404: unknown;
12467
+ 200: UserResponseDto;
11573
12468
  };
11574
12469
  };
11575
- };
11576
- '/api/v1/{region}/bean/expected-transactions/{id}/skip': {
11577
12470
  post: {
11578
- req: ExpectedTransactionControllerSkipData;
12471
+ req: UserControllerSignupUserData;
11579
12472
  res: {
11580
12473
  /**
11581
- * Expected transaction skipped successfully
12474
+ * User created successfully
11582
12475
  */
11583
- 200: ExpectedTransactionResponseDto;
12476
+ 201: SignupResponseDto;
11584
12477
  /**
11585
- * Cannot skip - not in PENDING status
12478
+ * Invalid Turnstile token (when Turnstile is enabled)
11586
12479
  */
11587
12480
  400: unknown;
11588
12481
  /**
11589
- * Expected transaction not found
12482
+ * User signup is disabled
11590
12483
  */
11591
- 404: unknown;
12484
+ 403: unknown;
11592
12485
  };
11593
12486
  };
12487
+ };
12488
+ '/api/v1/users/{id}': {
11594
12489
  delete: {
11595
- req: ExpectedTransactionControllerUndoSkipData;
12490
+ req: UserControllerDeleteUserData;
11596
12491
  res: {
11597
12492
  /**
11598
- * Skip undone successfully
11599
- */
11600
- 200: ExpectedTransactionResponseDto;
11601
- /**
11602
- * Cannot undo - not in SKIPPED status
12493
+ * User deleted successfully
11603
12494
  */
11604
- 400: unknown;
12495
+ 204: void;
11605
12496
  /**
11606
- * Expected transaction not found
12497
+ * Cannot delete own account or insufficient permissions
11607
12498
  */
11608
- 404: unknown;
12499
+ 403: unknown;
11609
12500
  };
11610
12501
  };
11611
12502
  };
11612
- '/api/v1/{region}/bean/expected-transactions/{id}/match': {
11613
- post: {
11614
- req: ExpectedTransactionControllerConfirmMatchData;
12503
+ '/api/v1/users/{id}/info': {
12504
+ get: {
12505
+ req: UserControllerGetUserInfoData;
11615
12506
  res: {
11616
12507
  /**
11617
- * Match confirmed successfully
12508
+ * User info retrieved successfully
11618
12509
  */
11619
12510
  200: unknown;
11620
12511
  /**
11621
- * Cannot match - not in PENDING status
11622
- */
11623
- 400: unknown;
11624
- /**
11625
- * Expected or actual transaction not found
11626
- */
11627
- 404: unknown;
11628
- /**
11629
- * Actual transaction already matched to another rule
12512
+ * Cannot access other user info without admin permission
11630
12513
  */
11631
- 409: unknown;
12514
+ 403: unknown;
11632
12515
  };
11633
12516
  };
11634
- delete: {
11635
- req: ExpectedTransactionControllerUnmatchData;
12517
+ };
12518
+ '/api/v1/users/setting': {
12519
+ put: {
12520
+ req: UserControllerUpdateUserSettingData;
11636
12521
  res: {
11637
12522
  /**
11638
- * Match removed successfully
12523
+ * Settings updated successfully
11639
12524
  */
11640
12525
  200: unknown;
11641
12526
  /**
11642
- * Cannot unmatch - not in COMPLETED status
11643
- */
11644
- 400: unknown;
11645
- /**
11646
- * Expected transaction not found
12527
+ * Insufficient permissions
11647
12528
  */
11648
- 404: unknown;
12529
+ 403: unknown;
11649
12530
  };
11650
12531
  };
11651
12532
  };
11652
- '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
11653
- post: {
11654
- req: ExpectedTransactionControllerEnterNowData;
12533
+ '/api/v1/users/settings-by-page': {
12534
+ get: {
12535
+ req: UserControllerGetAllUserSettingsByPageData;
11655
12536
  res: {
11656
12537
  /**
11657
- * Transaction created successfully
11658
- */
11659
- 201: unknown;
11660
- /**
11661
- * Cannot enter - not in PENDING status or missing accounts
11662
- */
11663
- 400: unknown;
11664
- /**
11665
- * Expected transaction or accounts not found
12538
+ * Settings list retrieved successfully
11666
12539
  */
11667
- 404: unknown;
12540
+ 200: unknown;
11668
12541
  };
11669
12542
  };
11670
12543
  };
11671
- '/api/v1/{region}/bean/recurring/forecast': {
12544
+ '/api/v1/users/asset-liability-summary': {
11672
12545
  get: {
11673
- req: ForecastControllerGetForecastData;
11674
12546
  res: {
11675
12547
  /**
11676
- * Forecast retrieved successfully
12548
+ * Summary retrieved successfully
11677
12549
  */
11678
- 200: ForecastResponseDto;
12550
+ 200: unknown;
11679
12551
  };
11680
12552
  };
11681
12553
  };
11682
- '/api/v1/{region}/reporting/portfolio/trends': {
12554
+ '/api/v1/admin/properties': {
11683
12555
  get: {
11684
- req: ReportingControllerGetPortfolioTrendsData;
11685
12556
  res: {
11686
12557
  /**
11687
- * Trends retrieved successfully
12558
+ * Properties retrieved successfully
11688
12559
  */
11689
- 200: PortfolioTrendsResponseDto;
12560
+ 200: unknown;
11690
12561
  /**
11691
- * User not authenticated
12562
+ * Unauthorized
11692
12563
  */
11693
12564
  401: unknown;
12565
+ /**
12566
+ * Forbidden - insufficient permissions
12567
+ */
12568
+ 403: unknown;
11694
12569
  };
11695
12570
  };
11696
12571
  };
11697
- '/api/v1/{region}/reporting/cash-flow/trends': {
12572
+ '/api/v1/admin/properties/{key}': {
11698
12573
  get: {
11699
- req: ReportingControllerGetCashFlowTrendsData;
12574
+ req: PropertyControllerGetByKeyData;
11700
12575
  res: {
11701
12576
  /**
11702
- * Cash-flow trends retrieved successfully
12577
+ * Property retrieved successfully
11703
12578
  */
11704
- 200: CashFlowTrendsResponseDto;
12579
+ 200: unknown;
11705
12580
  /**
11706
- * User not authenticated
12581
+ * Unauthorized
11707
12582
  */
11708
12583
  401: unknown;
12584
+ /**
12585
+ * Forbidden - insufficient permissions
12586
+ */
12587
+ 403: unknown;
12588
+ /**
12589
+ * Property not found
12590
+ */
12591
+ 404: unknown;
11709
12592
  };
11710
12593
  };
11711
- };
11712
- '/api/v1/{region}/reporting/snapshots/generate': {
11713
- post: {
11714
- req: ReportingControllerGenerateSnapshotData;
12594
+ put: {
12595
+ req: PropertyControllerUpdateData;
11715
12596
  res: {
11716
12597
  /**
11717
- * Snapshot generated successfully
12598
+ * Property updated successfully
11718
12599
  */
11719
- 200: GenerateSnapshotResponse;
12600
+ 200: unknown;
11720
12601
  /**
11721
- * Invalid date format
12602
+ * Unauthorized
11722
12603
  */
11723
- 400: unknown;
12604
+ 401: unknown;
11724
12605
  /**
11725
- * User not authenticated
12606
+ * Forbidden - insufficient permissions
12607
+ */
12608
+ 403: unknown;
12609
+ };
12610
+ };
12611
+ delete: {
12612
+ req: PropertyControllerDeleteData;
12613
+ res: {
12614
+ /**
12615
+ * Property deleted successfully
12616
+ */
12617
+ 204: void;
12618
+ /**
12619
+ * Unauthorized
11726
12620
  */
11727
12621
  401: unknown;
12622
+ /**
12623
+ * Forbidden - insufficient permissions
12624
+ */
12625
+ 403: unknown;
12626
+ /**
12627
+ * Property not found
12628
+ */
12629
+ 404: unknown;
11728
12630
  };
11729
12631
  };
11730
12632
  };
11731
- '/api/v1/{region}/reporting/snapshots/backfill': {
12633
+ '/api/v1/{region}/bean/recurring-rules': {
11732
12634
  post: {
11733
- req: ReportingControllerBackfillSnapshotsData;
12635
+ req: RecurringRuleControllerCreateData;
11734
12636
  res: {
11735
12637
  /**
11736
- * Backfill completed successfully
12638
+ * Rule created successfully
11737
12639
  */
11738
- 200: BackfillSnapshotsResponse;
12640
+ 201: RecurringRuleResponseDto;
11739
12641
  /**
11740
- * Invalid date format or range
12642
+ * Invalid input data (e.g., autoCreate without accounts)
11741
12643
  */
11742
12644
  400: unknown;
11743
12645
  /**
11744
- * User not authenticated
12646
+ * Rule with same name already exists
11745
12647
  */
11746
- 401: unknown;
12648
+ 409: unknown;
12649
+ };
12650
+ };
12651
+ get: {
12652
+ req: RecurringRuleControllerFindAllData;
12653
+ res: {
11747
12654
  /**
11748
- * Backfill already in progress for this user
12655
+ * Rules retrieved successfully
11749
12656
  */
11750
- 409: unknown;
12657
+ 200: Array<RecurringRuleResponseDto>;
11751
12658
  };
11752
12659
  };
11753
12660
  };
11754
- '/api/v1/users': {
11755
- delete: {
11756
- req: UserControllerDeleteOwnUserData;
12661
+ '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}': {
12662
+ post: {
12663
+ req: RecurringRuleControllerCreateFromTransactionData;
11757
12664
  res: {
11758
12665
  /**
11759
- * User deleted successfully
12666
+ * Rule created successfully
11760
12667
  */
11761
- 204: void;
12668
+ 201: RecurringRuleResponseDto;
11762
12669
  /**
11763
- * Invalid access token
12670
+ * Transaction not found
11764
12671
  */
11765
- 403: unknown;
12672
+ 404: ApiProblemResponseDto;
12673
+ /**
12674
+ * Rule with same name already exists or transaction already linked
12675
+ */
12676
+ 409: ApiProblemResponseDto;
11766
12677
  };
11767
12678
  };
12679
+ };
12680
+ '/api/v1/{region}/bean/recurring-rules/{id}': {
11768
12681
  get: {
11769
- req: UserControllerGetUserData;
12682
+ req: RecurringRuleControllerFindOneData;
11770
12683
  res: {
11771
12684
  /**
11772
- * User retrieved successfully
12685
+ * Rule retrieved successfully
11773
12686
  */
11774
- 200: UserResponseDto;
12687
+ 200: RecurringRuleResponseDto;
12688
+ /**
12689
+ * Rule not found
12690
+ */
12691
+ 404: unknown;
11775
12692
  };
11776
12693
  };
11777
- post: {
11778
- req: UserControllerSignupUserData;
12694
+ patch: {
12695
+ req: RecurringRuleControllerUpdateData;
11779
12696
  res: {
11780
12697
  /**
11781
- * User created successfully
12698
+ * Rule updated successfully
11782
12699
  */
11783
- 201: SignupResponseDto;
12700
+ 200: RecurringRuleResponseDto;
11784
12701
  /**
11785
- * Invalid Turnstile token (when Turnstile is enabled)
12702
+ * Invalid input data
11786
12703
  */
11787
12704
  400: unknown;
11788
12705
  /**
11789
- * User signup is disabled
12706
+ * Rule not found
11790
12707
  */
11791
- 403: unknown;
12708
+ 404: unknown;
11792
12709
  };
11793
12710
  };
11794
- };
11795
- '/api/v1/users/{id}': {
11796
12711
  delete: {
11797
- req: UserControllerDeleteUserData;
12712
+ req: RecurringRuleControllerDeleteData;
11798
12713
  res: {
11799
12714
  /**
11800
- * User deleted successfully
12715
+ * Rule deleted successfully
11801
12716
  */
11802
12717
  204: void;
11803
12718
  /**
11804
- * Cannot delete own account or insufficient permissions
12719
+ * Rule not found
11805
12720
  */
11806
- 403: unknown;
12721
+ 404: unknown;
11807
12722
  };
11808
12723
  };
11809
12724
  };
11810
- '/api/v1/users/{id}/info': {
12725
+ '/api/v1/{region}/bean/recurring-rules/{id}/stats': {
11811
12726
  get: {
11812
- req: UserControllerGetUserInfoData;
12727
+ req: RecurringRuleControllerGetWithStatsData;
11813
12728
  res: {
11814
12729
  /**
11815
- * User info retrieved successfully
12730
+ * Rule with stats retrieved successfully
11816
12731
  */
11817
- 200: unknown;
12732
+ 200: RecurringRuleWithStatsResponseDto;
11818
12733
  /**
11819
- * Cannot access other user info without admin permission
12734
+ * Rule not found
11820
12735
  */
11821
- 403: unknown;
12736
+ 404: unknown;
11822
12737
  };
11823
12738
  };
11824
12739
  };
11825
- '/api/v1/users/setting': {
11826
- put: {
11827
- req: UserControllerUpdateUserSettingData;
12740
+ '/api/v1/{region}/bean/expected-transactions': {
12741
+ get: {
12742
+ req: ExpectedTransactionControllerFindAllData;
11828
12743
  res: {
11829
12744
  /**
11830
- * Settings updated successfully
11831
- */
11832
- 200: unknown;
11833
- /**
11834
- * Insufficient permissions
12745
+ * Expected transactions retrieved successfully
11835
12746
  */
11836
- 403: unknown;
12747
+ 200: ExpectedTransactionListResponseDto;
11837
12748
  };
11838
12749
  };
11839
12750
  };
11840
- '/api/v1/users/settings-by-page': {
12751
+ '/api/v1/{region}/bean/expected-transactions/overdue': {
11841
12752
  get: {
11842
- req: UserControllerGetAllUserSettingsByPageData;
12753
+ req: ExpectedTransactionControllerFindOverdueData;
11843
12754
  res: {
11844
12755
  /**
11845
- * Settings list retrieved successfully
12756
+ * Overdue transactions retrieved successfully
11846
12757
  */
11847
- 200: unknown;
12758
+ 200: ExpectedTransactionListResponseDto;
11848
12759
  };
11849
12760
  };
11850
12761
  };
11851
- '/api/v1/users/asset-liability-summary': {
12762
+ '/api/v1/{region}/bean/expected-transactions/{id}': {
11852
12763
  get: {
12764
+ req: ExpectedTransactionControllerFindOneData;
11853
12765
  res: {
11854
12766
  /**
11855
- * Summary retrieved successfully
12767
+ * Expected transaction retrieved successfully
11856
12768
  */
11857
- 200: unknown;
12769
+ 200: ExpectedTransactionResponseDto;
12770
+ /**
12771
+ * Expected transaction not found
12772
+ */
12773
+ 404: unknown;
11858
12774
  };
11859
12775
  };
11860
12776
  };
11861
- '/api/v1/admin/properties': {
11862
- get: {
12777
+ '/api/v1/{region}/bean/expected-transactions/{id}/skip': {
12778
+ post: {
12779
+ req: ExpectedTransactionControllerSkipData;
11863
12780
  res: {
11864
12781
  /**
11865
- * Properties retrieved successfully
12782
+ * Expected transaction skipped successfully
11866
12783
  */
11867
- 200: unknown;
12784
+ 200: ExpectedTransactionResponseDto;
11868
12785
  /**
11869
- * Unauthorized
12786
+ * Cannot skip - not in PENDING status
11870
12787
  */
11871
- 401: unknown;
12788
+ 400: unknown;
11872
12789
  /**
11873
- * Forbidden - insufficient permissions
12790
+ * Expected transaction not found
11874
12791
  */
11875
- 403: unknown;
12792
+ 404: unknown;
11876
12793
  };
11877
12794
  };
11878
- };
11879
- '/api/v1/admin/properties/{key}': {
11880
- get: {
11881
- req: PropertyControllerGetByKeyData;
12795
+ delete: {
12796
+ req: ExpectedTransactionControllerUndoSkipData;
11882
12797
  res: {
11883
12798
  /**
11884
- * Property retrieved successfully
11885
- */
11886
- 200: unknown;
11887
- /**
11888
- * Unauthorized
12799
+ * Skip undone successfully
11889
12800
  */
11890
- 401: unknown;
12801
+ 204: void;
11891
12802
  /**
11892
- * Forbidden - insufficient permissions
12803
+ * Cannot undo - not in SKIPPED status
11893
12804
  */
11894
- 403: unknown;
12805
+ 400: unknown;
11895
12806
  /**
11896
- * Property not found
12807
+ * Expected transaction not found
11897
12808
  */
11898
12809
  404: unknown;
11899
12810
  };
11900
12811
  };
11901
- put: {
11902
- req: PropertyControllerUpdateData;
12812
+ };
12813
+ '/api/v1/{region}/bean/expected-transactions/{id}/match': {
12814
+ post: {
12815
+ req: ExpectedTransactionControllerConfirmMatchData;
11903
12816
  res: {
11904
12817
  /**
11905
- * Property updated successfully
12818
+ * Match confirmed successfully
11906
12819
  */
11907
12820
  200: unknown;
11908
12821
  /**
11909
- * Unauthorized
12822
+ * Cannot match - not in PENDING status
11910
12823
  */
11911
- 401: unknown;
12824
+ 400: unknown;
11912
12825
  /**
11913
- * Forbidden - insufficient permissions
12826
+ * Expected or actual transaction not found
11914
12827
  */
11915
- 403: unknown;
12828
+ 404: unknown;
12829
+ /**
12830
+ * Actual transaction already matched to another rule
12831
+ */
12832
+ 409: unknown;
11916
12833
  };
11917
12834
  };
11918
12835
  delete: {
11919
- req: PropertyControllerDeleteData;
12836
+ req: ExpectedTransactionControllerUnmatchData;
11920
12837
  res: {
11921
12838
  /**
11922
- * Property deleted successfully
12839
+ * Match removed successfully
11923
12840
  */
11924
12841
  204: void;
11925
12842
  /**
11926
- * Unauthorized
12843
+ * Cannot unmatch - not in COMPLETED status
11927
12844
  */
11928
- 401: unknown;
12845
+ 400: unknown;
11929
12846
  /**
11930
- * Forbidden - insufficient permissions
12847
+ * Expected transaction not found
11931
12848
  */
11932
- 403: unknown;
12849
+ 404: unknown;
12850
+ };
12851
+ };
12852
+ };
12853
+ '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
12854
+ post: {
12855
+ req: ExpectedTransactionControllerEnterNowData;
12856
+ res: {
11933
12857
  /**
11934
- * Property not found
12858
+ * Transaction created successfully
12859
+ */
12860
+ 201: unknown;
12861
+ /**
12862
+ * Cannot enter - not in PENDING status or missing accounts
12863
+ */
12864
+ 400: unknown;
12865
+ /**
12866
+ * Expected transaction or accounts not found
11935
12867
  */
11936
12868
  404: unknown;
11937
12869
  };
11938
12870
  };
11939
12871
  };
12872
+ '/api/v1/{region}/bean/recurring/forecast': {
12873
+ get: {
12874
+ req: ForecastControllerGetForecastData;
12875
+ res: {
12876
+ /**
12877
+ * Forecast retrieved successfully
12878
+ */
12879
+ 200: ForecastResponseDto;
12880
+ };
12881
+ };
12882
+ };
11940
12883
  '/api/v1/{region}/bean/transaction-rules': {
11941
12884
  post: {
11942
12885
  req: TransactionRuleControllerCreateData;
@@ -12334,7 +13277,10 @@ export type $OpenApiTs = {
12334
13277
  '/api/v1/{region}/bean/export/beancount': {
12335
13278
  get: {
12336
13279
  res: {
12337
- 200: unknown;
13280
+ /**
13281
+ * ZIP archive (application/zip) streamed as an attachment
13282
+ */
13283
+ 200: Blob | File;
12338
13284
  };
12339
13285
  };
12340
13286
  };
@@ -12715,6 +13661,17 @@ export type $OpenApiTs = {
12715
13661
  };
12716
13662
  };
12717
13663
  };
13664
+ '/api/v1/bean/platforms/{id}/standards': {
13665
+ get: {
13666
+ req: PlatformControllerGetPlatformStandardsData;
13667
+ res: {
13668
+ /**
13669
+ * Resolved region plus the merged account-standard catalog of that region (groupable by productCategory client-side)
13670
+ */
13671
+ 200: PlatformStandardsResponseDto;
13672
+ };
13673
+ };
13674
+ };
12718
13675
  '/api/v1/bean/platforms/{id}': {
12719
13676
  put: {
12720
13677
  req: PlatformControllerUpdateData;
@@ -12862,10 +13819,48 @@ export type $OpenApiTs = {
12862
13819
  };
12863
13820
  };
12864
13821
  };
13822
+ '/api/v1/{region}/community/parser-contributions': {
13823
+ post: {
13824
+ req: ParserContributionControllerCreateData;
13825
+ res: {
13826
+ /**
13827
+ * Issue created by the bot
13828
+ */
13829
+ 201: ParserContributionRelayResponseDto;
13830
+ /**
13831
+ * Unauthorized
13832
+ */
13833
+ 401: ApiProblemResponseDto;
13834
+ /**
13835
+ * Validation failed (institution slug, empty samples, row/cell size limits)
13836
+ */
13837
+ 422: ApiProblemResponseDto;
13838
+ /**
13839
+ * Rate limited (5 submissions per user per hour)
13840
+ */
13841
+ 429: ApiProblemResponseDto;
13842
+ /**
13843
+ * Relay not configured on this deployment — clients fall back to the clipboard flow
13844
+ */
13845
+ 501: ApiProblemResponseDto;
13846
+ /**
13847
+ * GitHub bot failure (upstream), safe to retry
13848
+ */
13849
+ 502: ApiProblemResponseDto;
13850
+ };
13851
+ };
13852
+ };
12865
13853
  '/api/v1/cache/flush': {
12866
13854
  post: {
12867
13855
  res: {
12868
- 201: unknown;
13856
+ /**
13857
+ * Cache flushed successfully
13858
+ */
13859
+ 200: unknown;
13860
+ /**
13861
+ * Admin access required
13862
+ */
13863
+ 403: ApiProblemResponseDto;
12869
13864
  };
12870
13865
  };
12871
13866
  };