@firela/api-types 0.0.0-canary.486851ea → 0.0.0-canary.4b5096a2

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
2582
+ * Currency code
2473
2583
  */
2474
- defaultPaymentAccount?: {
2475
- [key: string]: unknown;
2476
- };
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 = {
2849
+ export type CreateRuleFromTransactionDto = {
2728
2850
  /**
2729
- * Transaction ID to match with
2851
+ * Recurring frequency
2730
2852
  */
2731
- transactionId: string;
2732
- };
2733
-
2734
- export type EnterNowDto = {
2853
+ frequency:
2854
+ | 'WEEKLY'
2855
+ | 'BIWEEKLY'
2856
+ | 'MONTHLY'
2857
+ | 'BIMONTHLY'
2858
+ | 'QUARTERLY'
2859
+ | 'YEARLY'
2860
+ | 'CUSTOM';
2735
2861
  /**
2736
- * Override expense account (uses rule default if not provided)
2862
+ * Optional name override (default: transaction payee)
2737
2863
  */
2738
- expenseAccount?: string;
2864
+ name?: string;
2739
2865
  /**
2740
- * Override payment account (uses rule default if not provided)
2866
+ * Optional icon emoji
2741
2867
  */
2742
- paymentAccount?: string;
2868
+ icon?: string;
2869
+ };
2870
+
2871
+ export type RecurringRuleWithStatsResponseDto = {
2743
2872
  /**
2744
- * Override amount (uses expected amount if not provided)
2873
+ * Rule ID
2745
2874
  */
2746
- amount?: number;
2875
+ id: string;
2747
2876
  /**
2748
- * Override payee (uses rule default if not provided)
2877
+ * User ID
2749
2878
  */
2750
- payee?: string;
2879
+ userId: string;
2751
2880
  /**
2752
- * Optional narration
2881
+ * Rule name
2753
2882
  */
2754
- narration?: string;
2755
- };
2756
-
2757
- export type ForecastItemDto = {
2883
+ name: string;
2758
2884
  /**
2759
- * Rule name
2885
+ * Icon emoji
2760
2886
  */
2761
- rule: string;
2887
+ icon?: string;
2762
2888
  /**
2763
- * Rule ID
2889
+ * Recurring frequency
2764
2890
  */
2765
- ruleId: string;
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)
2992
3106
  */
2993
- granularity: string;
3107
+ expectedDate: string;
2994
3108
  /**
2995
- * Base currency for converted values
3109
+ * Expected amount
2996
3110
  */
2997
- currency: string;
3111
+ expectedAmount: number;
2998
3112
  /**
2999
- * Exchange rate warnings (e.g. missing rate for a currency)
3113
+ * Status (PENDING, COMPLETED, SKIPPED)
3000
3114
  */
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 = {
3115
+ status: string;
3013
3116
  /**
3014
- * Access token for user verification
3117
+ * Matched transaction ID
3015
3118
  */
3016
- accessToken: string;
3017
- };
3018
-
3019
- export type UserSettingsResponseDto = {
3119
+ matchedTransactionId?: string;
3020
3120
  /**
3021
- * Base currency (ISO 4217) for net-worth/report aggregation. Independent of region (ADR-0006).
3121
+ * Match timestamp (ISO 8601)
3022
3122
  */
3023
- baseCurrency: string | null;
3024
- };
3025
-
3026
- export type UserResponseDto = {
3123
+ matchedAt?: string;
3027
3124
  /**
3028
- * User ID
3125
+ * Match confidence score (0-1)
3029
3126
  */
3030
- id: string;
3127
+ matchConfidence?: number;
3031
3128
  /**
3032
- * Assigned user role
3129
+ * Whether this expected transaction is overdue
3033
3130
  */
3034
- role: string;
3131
+ isOverdue: boolean;
3035
3132
  /**
3036
- * Permission strings
3133
+ * Rule information
3037
3134
  */
3038
- permissions: Array<string>;
3135
+ rule: ExpectedTransactionRuleDto;
3039
3136
  /**
3040
- * User settings
3137
+ * Created at timestamp
3041
3138
  */
3042
- settings: UserSettingsResponseDto;
3043
- };
3044
-
3045
- export type SignupDto = {
3139
+ createdAt: string;
3046
3140
  /**
3047
- * Cloudflare Turnstile verification token (optional when Turnstile disabled)
3141
+ * Updated at timestamp
3048
3142
  */
3049
- turnstileToken?: string;
3143
+ updatedAt: string;
3050
3144
  };
3051
3145
 
3052
- export type SignupResponseDto = {
3053
- /**
3054
- * JWT auth token
3055
- */
3056
- authToken: string;
3146
+ export type ExpectedTransactionListResponseDto = {
3147
+ items: Array<ExpectedTransactionResponseDto>;
3057
3148
  /**
3058
- * Auto-generated access token
3149
+ * Total count
3059
3150
  */
3060
- accessToken: string;
3151
+ total: number;
3152
+ };
3153
+
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 = {
@@ -4260,6 +4353,79 @@ export type ParserTelemetryReportDto = unknown;
4260
4353
 
4261
4354
  export type UncoveredFormatMissDto = unknown;
4262
4355
 
4356
+ export type ClientParsedDataDto = {
4357
+ /**
4358
+ * Transaction amount
4359
+ */
4360
+ amount?: number;
4361
+ /**
4362
+ * Currency code
4363
+ */
4364
+ currency?: string;
4365
+ /**
4366
+ * Transaction date (ISO 8601)
4367
+ */
4368
+ date?: string;
4369
+ /**
4370
+ * Payee/merchant name
4371
+ */
4372
+ payee?: string;
4373
+ /**
4374
+ * Transaction narration
4375
+ */
4376
+ narration?: string;
4377
+ /**
4378
+ * Category slug
4379
+ */
4380
+ category?: string;
4381
+ /**
4382
+ * Income type
4383
+ */
4384
+ incomeType?: string;
4385
+ /**
4386
+ * Income source
4387
+ */
4388
+ incomeSource?: string;
4389
+ /**
4390
+ * Security symbol code (e.g., 600519, AAPL)
4391
+ */
4392
+ symbol?: string;
4393
+ /**
4394
+ * Quantity of shares/units
4395
+ */
4396
+ quantity?: number;
4397
+ /**
4398
+ * Unit price per share/unit
4399
+ */
4400
+ price?: number;
4401
+ /**
4402
+ * Investment action
4403
+ */
4404
+ investmentAction?: 'buy' | 'sell';
4405
+ /**
4406
+ * Payment source: asset (default) or liability (credit card)
4407
+ */
4408
+ paymentSource?: 'asset' | 'liability';
4409
+ /**
4410
+ * Liability account hint (CreditCard/Huabei/Baitiao)
4411
+ */
4412
+ liabilityHint?: string;
4413
+ /**
4414
+ * Display-only warning from the prior response; accepted but ignored.
4415
+ */
4416
+ warning?: string;
4417
+ };
4418
+
4419
+ /**
4420
+ * Investment action
4421
+ */
4422
+ export type investmentAction = 'buy' | 'sell';
4423
+
4424
+ /**
4425
+ * Payment source: asset (default) or liability (credit card)
4426
+ */
4427
+ export type paymentSource = 'asset' | 'liability';
4428
+
4263
4429
  export type ProcessNlpDto = {
4264
4430
  /**
4265
4431
  * Natural language text describing a transaction. Optional when `confirm` is true (structured confirm); otherwise required.
@@ -4276,19 +4442,34 @@ export type ProcessNlpDto = {
4276
4442
  /**
4277
4443
  * Parsed data from previous NLP response for session recovery. Send back the parsedData received in confirm_payee/confirm responses.
4278
4444
  */
4279
- parsedData?: {
4280
- [key: string]: unknown;
4281
- };
4445
+ parsedData?: ClientParsedDataDto;
4282
4446
  /**
4283
4447
  * confirm_rule echo-back: rule id selected from the prior confirm_rule response (matchedRule.id or alternatives[i].ruleId). Applied directly when the session is confirming_rule — no NL re-parse.
4284
4448
  */
4285
4449
  selectedRuleId?: string;
4286
4450
  /**
4287
- * 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.
4288
4452
  */
4289
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';
4290
4466
  };
4291
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
+
4292
4473
  export type NlpTransactionInfoDto = {
4293
4474
  /**
4294
4475
  * Transaction ID
@@ -4383,16 +4564,6 @@ export type NlpParsedDataDto = {
4383
4564
  warning?: string;
4384
4565
  };
4385
4566
 
4386
- /**
4387
- * Investment action
4388
- */
4389
- export type investmentAction = 'buy' | 'sell';
4390
-
4391
- /**
4392
- * Payment source: asset (default) or liability (credit card)
4393
- */
4394
- export type paymentSource = 'asset' | 'liability';
4395
-
4396
4567
  export type NlpSourceTransactionDto = {
4397
4568
  /**
4398
4569
  * Transaction date (ISO format)
@@ -4524,6 +4695,17 @@ export type NlpRuleConfirmationDataDto = {
4524
4695
  reasons: Array<string>;
4525
4696
  };
4526
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
+
4527
4709
  export type NlpAccountConfirmationDataDto = {
4528
4710
  /**
4529
4711
  * The invalid account name
@@ -4534,9 +4716,9 @@ export type NlpAccountConfirmationDataDto = {
4534
4716
  */
4535
4717
  suggestedAccount?: string;
4536
4718
  /**
4537
- * Similar accounts for user selection
4719
+ * Similar accounts for user selection (path + localized name, #680)
4538
4720
  */
4539
- similarAccounts: Array<string>;
4721
+ similarAccounts: Array<NlpAccountCandidateDto>;
4540
4722
  /**
4541
4723
  * Error message explaining the issue
4542
4724
  */
@@ -4720,7 +4902,12 @@ export type NlpResponseDto = {
4720
4902
  /**
4721
4903
  * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
4722
4904
  */
4723
- assetSubType?: 'transfer' | 'banking' | 'investment';
4905
+ assetSubType?:
4906
+ | 'transfer'
4907
+ | 'banking'
4908
+ | 'investment'
4909
+ | 'lend'
4910
+ | 'lend_collect';
4724
4911
  /**
4725
4912
  * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
4726
4913
  */
@@ -4837,7 +5024,12 @@ export type intent = 'expense' | 'asset' | 'income' | 'liability' | 'equity';
4837
5024
  /**
4838
5025
  * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
4839
5026
  */
4840
- export type assetSubType = 'transfer' | 'banking' | 'investment';
5027
+ export type assetSubType =
5028
+ | 'transfer'
5029
+ | 'banking'
5030
+ | 'investment'
5031
+ | 'lend'
5032
+ | 'lend_collect';
4841
5033
 
4842
5034
  /**
4843
5035
  * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
@@ -4902,7 +5094,7 @@ export type PlatformListItemDto = {
4902
5094
  /**
4903
5095
  * Platform type
4904
5096
  */
4905
- export type type3 =
5097
+ export type type4 =
4906
5098
  | 'BANK'
4907
5099
  | 'BROKERAGE'
4908
5100
  | 'CRYPTO_EXCHANGE'
@@ -4986,6 +5178,55 @@ export type PlatformMatchResponseDto = {
4986
5178
  */
4987
5179
  export type matchType2 = 'none' | 'exact' | 'prefix' | 'substring';
4988
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
+
4989
5230
  export type CreatePlatformDto = {
4990
5231
  /**
4991
5232
  * Platform name
@@ -5155,7 +5396,7 @@ export type AccountItemDto = {
5155
5396
  */
5156
5397
  name: string;
5157
5398
  /**
5158
- * Display name (last part of account path)
5399
+ * Display name: user-set name if provided (#762), else last part of account path
5159
5400
  */
5160
5401
  displayName: string;
5161
5402
  /**
@@ -5182,11 +5423,11 @@ export type PlatformGroupDto = {
5182
5423
  */
5183
5424
  platformName: string;
5184
5425
  /**
5185
- * Accounts within this platform
5426
+ * Accounts within this platform (Assets and Liabilities rows, #696)
5186
5427
  */
5187
5428
  accounts: Array<AccountItemDto>;
5188
5429
  /**
5189
- * FX-converted total balance in base currency
5430
+ * FX-converted total balance in base currency (nets Assets + Liabilities rows; can be negative)
5190
5431
  */
5191
5432
  totalBalance: string;
5192
5433
  /**
@@ -5198,7 +5439,7 @@ export type PlatformGroupDto = {
5198
5439
  */
5199
5440
  convertedBalance?: string;
5200
5441
  /**
5201
- * 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)
5202
5443
  */
5203
5444
  sharePct: number;
5204
5445
  };
@@ -5224,7 +5465,7 @@ export type AccountExchangeRateWarningDto = {
5224
5465
 
5225
5466
  export type AccountsSummaryDto = {
5226
5467
  /**
5227
- * Total number of accounts
5468
+ * Total number of accounts (balance sheet: Assets + Liabilities, #696)
5228
5469
  */
5229
5470
  totalAccounts: number;
5230
5471
  /**
@@ -5262,7 +5503,7 @@ export type AccountItemWithAssetClassDto = {
5262
5503
  */
5263
5504
  name: string;
5264
5505
  /**
5265
- * Display name (last part of account path)
5506
+ * Display name: user-set name if provided (#762), else last part of account path
5266
5507
  */
5267
5508
  displayName: string;
5268
5509
  /**
@@ -5576,9 +5817,7 @@ export type MonetaryDto = {
5576
5817
  /**
5577
5818
  * Converted to user base currency (Decimal string)
5578
5819
  */
5579
- baseCcyEquivalent?: {
5580
- [key: string]: unknown;
5581
- } | null;
5820
+ baseCcyEquivalent?: string | null;
5582
5821
  };
5583
5822
 
5584
5823
  export type CurrentPriceDto = {
@@ -5630,15 +5869,11 @@ export type HoldingPnlRowDto = {
5630
5869
  /**
5631
5870
  * Account settlement currency (ISO 4217), from cost currency
5632
5871
  */
5633
- accountCcy?: {
5634
- [key: string]: unknown;
5635
- } | null;
5872
+ accountCcy?: string | null;
5636
5873
  /**
5637
5874
  * Broker type derived from Platform.type
5638
5875
  */
5639
- brokerType?: {
5640
- [key: string]: unknown;
5641
- } | null;
5876
+ brokerType?: string | null;
5642
5877
  /**
5643
5878
  * Commodity symbol
5644
5879
  */
@@ -5648,9 +5883,7 @@ export type HoldingPnlRowDto = {
5648
5883
  */
5649
5884
  chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
5650
5885
  assetClass: string;
5651
- assetSubClass?: {
5652
- [key: string]: unknown;
5653
- } | null;
5886
+ assetSubClass?: string | null;
5654
5887
  /**
5655
5888
  * Net held units (Decimal string)
5656
5889
  */
@@ -5674,15 +5907,11 @@ export type HoldingPnlRowDto = {
5674
5907
  /**
5675
5908
  * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
5676
5909
  */
5677
- unrealizedPnlBase?: {
5678
- [key: string]: unknown;
5679
- } | null;
5910
+ unrealizedPnlBase?: string | null;
5680
5911
  /**
5681
5912
  * Unrealized P&L % (Decimal string)
5682
5913
  */
5683
- unrealizedPnlPct?: {
5684
- [key: string]: unknown;
5685
- } | null;
5914
+ unrealizedPnlPct?: string | null;
5686
5915
  /**
5687
5916
  * Historical FX rate applied to cost basis
5688
5917
  */
@@ -5694,9 +5923,7 @@ export type HoldingPnlRowDto = {
5694
5923
  /**
5695
5924
  * Share of invested assets % (Decimal string); only for invested chartTokens
5696
5925
  */
5697
- pctOfInvestedAssets?: {
5698
- [key: string]: unknown;
5699
- } | null;
5926
+ pctOfInvestedAssets?: string | null;
5700
5927
  /**
5701
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
5702
5929
  */
@@ -5720,21 +5947,15 @@ export type HoldingPnlWarningDto = {
5720
5947
  | 'OVERSOLD_LOTS'
5721
5948
  | 'NO_PRICE'
5722
5949
  | 'MIXED_COST_CURRENCY';
5723
- symbol?: {
5724
- [key: string]: unknown;
5725
- } | null;
5726
- accountId?: {
5727
- [key: string]: unknown;
5728
- } | null;
5729
- currency?: {
5730
- [key: string]: unknown;
5731
- } | null;
5950
+ symbol?: string | null;
5951
+ accountId?: string | null;
5952
+ currency?: string | null;
5732
5953
  };
5733
5954
 
5734
5955
  /**
5735
5956
  * Warning type
5736
5957
  */
5737
- export type type4 =
5958
+ export type type5 =
5738
5959
  | 'MISSING_COST_FX_RATE'
5739
5960
  | 'MISSING_MARKET_FX_RATE'
5740
5961
  | 'MISSING_SALE_PRICE'
@@ -5773,132 +5994,205 @@ export type AnonymousLoginResponseDto = {
5773
5994
  authToken: string;
5774
5995
  };
5775
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
+
5776
6114
  export type SymbolSearchResultDto = {
5777
6115
  symbol: string;
5778
- name?: {
5779
- [key: string]: unknown;
5780
- } | null;
5781
- exchange?: {
5782
- [key: string]: unknown;
5783
- } | null;
6116
+ name?: string | null;
6117
+ exchange?: string | null;
5784
6118
  /**
5785
6119
  * OpenBB asset_type (e.g. stock, etf)
5786
6120
  */
5787
- assetType?: {
5788
- [key: string]: unknown;
5789
- } | null;
6121
+ assetType?: string | null;
5790
6122
  /**
5791
6123
  * IGN asset class (region.types.ts ASSET_CLASSES)
5792
6124
  */
5793
- assetClass?: {
5794
- [key: string]: unknown;
5795
- } | null;
6125
+ assetClass?: string | null;
5796
6126
  /**
5797
6127
  * IGN asset sub-class (region.types.ts ASSET_SUB_CLASSES)
5798
6128
  */
5799
- assetSubClass?: {
5800
- [key: string]: unknown;
5801
- } | null;
6129
+ assetSubClass?: string | null;
5802
6130
  /**
5803
6131
  * Trading currency (extra_data or inferred from exchange)
5804
6132
  */
5805
- currency?: {
5806
- [key: string]: unknown;
5807
- } | null;
6133
+ currency?: string | null;
5808
6134
  };
5809
6135
 
5810
6136
  export type SymbolQuoteDto = {
5811
6137
  symbol?: string;
5812
- name?: {
5813
- [key: string]: unknown;
5814
- } | null;
5815
- exchange?: {
5816
- [key: string]: unknown;
5817
- } | null;
6138
+ name?: string | null;
6139
+ exchange?: string | null;
5818
6140
  /**
5819
6141
  * OpenBB asset_type
5820
6142
  */
5821
- assetType?: {
5822
- [key: string]: unknown;
5823
- } | null;
6143
+ assetType?: string | null;
5824
6144
  /**
5825
6145
  * IGN asset class
5826
6146
  */
5827
- assetClass?: {
5828
- [key: string]: unknown;
5829
- } | null;
6147
+ assetClass?: string | null;
5830
6148
  /**
5831
6149
  * IGN asset sub-class
5832
6150
  */
5833
- assetSubClass?: {
5834
- [key: string]: unknown;
5835
- } | null;
6151
+ assetSubClass?: string | null;
5836
6152
  /**
5837
6153
  * Trading currency (extra_data or inferred from exchange)
5838
6154
  */
5839
- currency?: {
5840
- [key: string]: unknown;
5841
- } | null;
6155
+ currency?: string | null;
5842
6156
  /**
5843
6157
  * Latest price (Decimal string)
5844
6158
  */
5845
- price?: {
5846
- [key: string]: unknown;
5847
- } | null;
6159
+ price?: string | null;
5848
6160
  /**
5849
6161
  * Date the price was observed (ISO yyyy-MM-dd)
5850
6162
  */
5851
- priceDate?: {
5852
- [key: string]: unknown;
5853
- } | null;
6163
+ priceDate?: string | null;
5854
6164
  /**
5855
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.
5856
6166
  */
5857
- changePercent?: {
5858
- [key: string]: unknown;
5859
- } | null;
6167
+ changePercent?: number | null;
5860
6168
  /**
5861
6169
  * Previous close (Decimal string)
5862
6170
  */
5863
- prevClose?: {
5864
- [key: string]: unknown;
5865
- } | null;
6171
+ prevClose?: string | null;
5866
6172
  /**
5867
6173
  * Day open (Decimal string)
5868
6174
  */
5869
- open?: {
5870
- [key: string]: unknown;
5871
- } | null;
6175
+ open?: string | null;
5872
6176
  /**
5873
6177
  * Day high (Decimal string)
5874
6178
  */
5875
- high?: {
5876
- [key: string]: unknown;
5877
- } | null;
6179
+ high?: string | null;
5878
6180
  /**
5879
6181
  * Day low (Decimal string)
5880
6182
  */
5881
- low?: {
5882
- [key: string]: unknown;
5883
- } | null;
6183
+ low?: string | null;
5884
6184
  /**
5885
6185
  * Day volume (Decimal string)
5886
6186
  */
5887
- volume?: {
5888
- [key: string]: unknown;
5889
- } | null;
6187
+ volume?: string | null;
5890
6188
  /**
5891
6189
  * 52-week high (Decimal string)
5892
6190
  */
5893
- yearHigh?: {
5894
- [key: string]: unknown;
5895
- } | null;
6191
+ yearHigh?: string | null;
5896
6192
  /**
5897
6193
  * 52-week low (Decimal string)
5898
6194
  */
5899
- yearLow?: {
5900
- [key: string]: unknown;
5901
- } | null;
6195
+ yearLow?: string | null;
5902
6196
  };
5903
6197
 
5904
6198
  export type AccountControllerCreateData = {
@@ -6229,7 +6523,7 @@ export type AccountControllerAddOpeningBalanceResponse =
6229
6523
 
6230
6524
  export type AccountStandardsControllerGetTemplatesData = {
6231
6525
  /**
6232
- * Region code (cn, us, de)
6526
+ * Region code (any ISO alpha-2; not-yet-open codes return the universal-only catalog)
6233
6527
  */
6234
6528
  region:
6235
6529
  | 'ad'
@@ -6239,26 +6533,192 @@ export type AccountStandardsControllerGetTemplatesData = {
6239
6533
  | 'al'
6240
6534
  | 'am'
6241
6535
  | 'ao'
6536
+ | 'ar'
6537
+ | 'at'
6242
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'
6243
6551
  | 'br'
6552
+ | 'bs'
6553
+ | 'bt'
6554
+ | 'bw'
6555
+ | 'by'
6556
+ | 'bz'
6244
6557
  | 'ca'
6558
+ | 'cd'
6559
+ | 'cf'
6560
+ | 'cg'
6561
+ | 'ch'
6562
+ | 'ci'
6563
+ | 'cl'
6564
+ | 'cm'
6245
6565
  | 'cn'
6566
+ | 'co'
6567
+ | 'cr'
6568
+ | 'cu'
6569
+ | 'cv'
6570
+ | 'cy'
6571
+ | 'cz'
6246
6572
  | 'de'
6573
+ | 'dj'
6574
+ | 'dk'
6575
+ | 'dm'
6576
+ | 'do'
6247
6577
  | 'dz'
6578
+ | 'ec'
6579
+ | 'ee'
6580
+ | 'eg'
6581
+ | 'er'
6248
6582
  | 'es'
6583
+ | 'et'
6584
+ | 'fj'
6585
+ | 'fm'
6249
6586
  | 'fr'
6587
+ | 'ga'
6250
6588
  | 'gb'
6589
+ | 'gd'
6590
+ | 'ge'
6591
+ | 'gh'
6592
+ | 'gm'
6593
+ | 'gn'
6594
+ | 'gq'
6595
+ | 'gr'
6596
+ | 'gt'
6597
+ | 'gw'
6598
+ | 'gy'
6251
6599
  | 'hk'
6600
+ | 'hn'
6601
+ | 'hr'
6602
+ | 'ht'
6603
+ | 'hu'
6604
+ | 'id'
6605
+ | 'ie'
6606
+ | 'il'
6252
6607
  | 'in'
6608
+ | 'iq'
6609
+ | 'ir'
6610
+ | 'is'
6253
6611
  | 'it'
6612
+ | 'jm'
6613
+ | 'jo'
6254
6614
  | 'jp'
6615
+ | 'ke'
6616
+ | 'kg'
6617
+ | 'kh'
6618
+ | 'ki'
6619
+ | 'km'
6620
+ | 'kn'
6255
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'
6256
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'
6257
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'
6258
6703
  | 'tw'
6259
- | 'us';
6260
- /**
6261
- * 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
6262
6722
  */
6263
6723
  search?: string;
6264
6724
  /**
@@ -6276,7 +6736,7 @@ export type AccountStandardsControllerGetTemplateMetadataData = {
6276
6736
  */
6277
6737
  path: string;
6278
6738
  /**
6279
- * Region code for tenant context
6739
+ * Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
6280
6740
  */
6281
6741
  region:
6282
6742
  | 'ad'
@@ -6286,24 +6746,190 @@ export type AccountStandardsControllerGetTemplateMetadataData = {
6286
6746
  | 'al'
6287
6747
  | 'am'
6288
6748
  | 'ao'
6749
+ | 'ar'
6750
+ | 'at'
6289
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'
6290
6764
  | 'br'
6765
+ | 'bs'
6766
+ | 'bt'
6767
+ | 'bw'
6768
+ | 'by'
6769
+ | 'bz'
6291
6770
  | 'ca'
6771
+ | 'cd'
6772
+ | 'cf'
6773
+ | 'cg'
6774
+ | 'ch'
6775
+ | 'ci'
6776
+ | 'cl'
6777
+ | 'cm'
6292
6778
  | 'cn'
6779
+ | 'co'
6780
+ | 'cr'
6781
+ | 'cu'
6782
+ | 'cv'
6783
+ | 'cy'
6784
+ | 'cz'
6293
6785
  | 'de'
6786
+ | 'dj'
6787
+ | 'dk'
6788
+ | 'dm'
6789
+ | 'do'
6294
6790
  | 'dz'
6791
+ | 'ec'
6792
+ | 'ee'
6793
+ | 'eg'
6794
+ | 'er'
6295
6795
  | 'es'
6796
+ | 'et'
6797
+ | 'fj'
6798
+ | 'fm'
6296
6799
  | 'fr'
6800
+ | 'ga'
6297
6801
  | 'gb'
6802
+ | 'gd'
6803
+ | 'ge'
6804
+ | 'gh'
6805
+ | 'gm'
6806
+ | 'gn'
6807
+ | 'gq'
6808
+ | 'gr'
6809
+ | 'gt'
6810
+ | 'gw'
6811
+ | 'gy'
6298
6812
  | 'hk'
6813
+ | 'hn'
6814
+ | 'hr'
6815
+ | 'ht'
6816
+ | 'hu'
6817
+ | 'id'
6818
+ | 'ie'
6819
+ | 'il'
6299
6820
  | 'in'
6821
+ | 'iq'
6822
+ | 'ir'
6823
+ | 'is'
6300
6824
  | 'it'
6825
+ | 'jm'
6826
+ | 'jo'
6301
6827
  | 'jp'
6828
+ | 'ke'
6829
+ | 'kg'
6830
+ | 'kh'
6831
+ | 'ki'
6832
+ | 'km'
6833
+ | 'kn'
6302
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'
6303
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'
6304
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'
6305
6916
  | 'tw'
6306
- | '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';
6307
6933
  };
6308
6934
 
6309
6935
  export type AccountStandardsControllerGetTemplateMetadataResponse =
@@ -6311,7 +6937,7 @@ export type AccountStandardsControllerGetTemplateMetadataResponse =
6311
6937
 
6312
6938
  export type AccountStandardsControllerGetRegionsData = {
6313
6939
  /**
6314
- * Region code for tenant context
6940
+ * Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
6315
6941
  */
6316
6942
  region:
6317
6943
  | 'ad'
@@ -6321,24 +6947,190 @@ export type AccountStandardsControllerGetRegionsData = {
6321
6947
  | 'al'
6322
6948
  | 'am'
6323
6949
  | 'ao'
6950
+ | 'ar'
6951
+ | 'at'
6324
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'
6325
6965
  | 'br'
6966
+ | 'bs'
6967
+ | 'bt'
6968
+ | 'bw'
6969
+ | 'by'
6970
+ | 'bz'
6326
6971
  | 'ca'
6972
+ | 'cd'
6973
+ | 'cf'
6974
+ | 'cg'
6975
+ | 'ch'
6976
+ | 'ci'
6977
+ | 'cl'
6978
+ | 'cm'
6327
6979
  | 'cn'
6980
+ | 'co'
6981
+ | 'cr'
6982
+ | 'cu'
6983
+ | 'cv'
6984
+ | 'cy'
6985
+ | 'cz'
6328
6986
  | 'de'
6987
+ | 'dj'
6988
+ | 'dk'
6989
+ | 'dm'
6990
+ | 'do'
6329
6991
  | 'dz'
6992
+ | 'ec'
6993
+ | 'ee'
6994
+ | 'eg'
6995
+ | 'er'
6330
6996
  | 'es'
6997
+ | 'et'
6998
+ | 'fj'
6999
+ | 'fm'
6331
7000
  | 'fr'
7001
+ | 'ga'
6332
7002
  | 'gb'
7003
+ | 'gd'
7004
+ | 'ge'
7005
+ | 'gh'
7006
+ | 'gm'
7007
+ | 'gn'
7008
+ | 'gq'
7009
+ | 'gr'
7010
+ | 'gt'
7011
+ | 'gw'
7012
+ | 'gy'
6333
7013
  | 'hk'
7014
+ | 'hn'
7015
+ | 'hr'
7016
+ | 'ht'
7017
+ | 'hu'
7018
+ | 'id'
7019
+ | 'ie'
7020
+ | 'il'
6334
7021
  | 'in'
7022
+ | 'iq'
7023
+ | 'ir'
7024
+ | 'is'
6335
7025
  | 'it'
7026
+ | 'jm'
7027
+ | 'jo'
6336
7028
  | 'jp'
7029
+ | 'ke'
7030
+ | 'kg'
7031
+ | 'kh'
7032
+ | 'ki'
7033
+ | 'km'
7034
+ | 'kn'
6337
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'
6338
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'
6339
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'
6340
7117
  | 'tw'
6341
- | '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';
6342
7134
  };
6343
7135
 
6344
7136
  export type AccountStandardsControllerGetRegionsResponse =
@@ -6388,7 +7180,7 @@ export type TransactionControllerListData = {
6388
7180
  */
6389
7181
  accountId?: string;
6390
7182
  /**
6391
- * 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).
6392
7184
  */
6393
7185
  category?: string;
6394
7186
  /**
@@ -6399,6 +7191,10 @@ export type TransactionControllerListData = {
6399
7191
  * Filter by end date (inclusive), format: YYYY-MM-DD
6400
7192
  */
6401
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';
6402
7198
  /**
6403
7199
  * Number of items per page (1-100, default: 20)
6404
7200
  */
@@ -6441,9 +7237,9 @@ export type TransactionControllerListData = {
6441
7237
  */
6442
7238
  search?: string;
6443
7239
  /**
6444
- * 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).
6445
7241
  */
6446
- status?: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
7242
+ status?: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED' | 'ALL';
6447
7243
  };
6448
7244
 
6449
7245
  export type TransactionControllerListResponse = TransactionListResponseDto;
@@ -7200,8 +7996,7 @@ export type PayeeProfileAdminControllerUnverifyData = {
7200
7996
  id: string;
7201
7997
  };
7202
7998
 
7203
- export type PayeeProfileAdminControllerUnverifyResponse =
7204
- PayeeProfileResponseDto;
7999
+ export type PayeeProfileAdminControllerUnverifyResponse = void;
7205
8000
 
7206
8001
  export type CommodityControllerCreateData = {
7207
8002
  /**
@@ -7465,7 +8260,168 @@ export type CommodityControllerBulkCreateData = {
7465
8260
  | 'us';
7466
8261
  };
7467
8262
 
7468
- 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;
7469
8425
 
7470
8426
  export type PriceControllerCreateData = {
7471
8427
  /**
@@ -7714,6 +8670,93 @@ export type PriceControllerBulkCreateData = {
7714
8670
 
7715
8671
  export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
7716
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
+
7717
8760
  export type RecurringRuleControllerCreateData = {
7718
8761
  /**
7719
8762
  * Region code for tenant context
@@ -8190,8 +9233,7 @@ export type ExpectedTransactionControllerUndoSkipData = {
8190
9233
  | 'us';
8191
9234
  };
8192
9235
 
8193
- export type ExpectedTransactionControllerUndoSkipResponse =
8194
- ExpectedTransactionResponseDto;
9236
+ export type ExpectedTransactionControllerUndoSkipResponse = void;
8195
9237
 
8196
9238
  export type ExpectedTransactionControllerConfirmMatchData = {
8197
9239
  /**
@@ -8268,7 +9310,7 @@ export type ExpectedTransactionControllerUnmatchData = {
8268
9310
  | 'us';
8269
9311
  };
8270
9312
 
8271
- export type ExpectedTransactionControllerUnmatchResponse = unknown;
9313
+ export type ExpectedTransactionControllerUnmatchResponse = void;
8272
9314
 
8273
9315
  export type ExpectedTransactionControllerEnterNowData = {
8274
9316
  /**
@@ -8309,170 +9351,11 @@ export type ExpectedTransactionControllerEnterNowData = {
8309
9351
 
8310
9352
  export type ExpectedTransactionControllerEnterNowResponse = unknown;
8311
9353
 
8312
- export type ForecastControllerGetForecastData = {
8313
- /**
8314
- * Number of months to forecast (1-12, default 3)
8315
- */
8316
- months?: number;
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 ForecastControllerGetForecastResponse = ForecastResponseDto;
8349
-
8350
- export type ReportingControllerGetPortfolioTrendsData = {
8351
- /**
8352
- * Data granularity
8353
- */
8354
- granularity?: 'day' | 'week' | 'month';
8355
- /**
8356
- * Time period
8357
- */
8358
- period?: '1m' | '3m' | '6m' | '1y';
8359
- /**
8360
- * Region code for tenant context
8361
- */
8362
- region:
8363
- | 'ad'
8364
- | 'ae'
8365
- | 'af'
8366
- | 'ag'
8367
- | 'al'
8368
- | 'am'
8369
- | 'ao'
8370
- | 'au'
8371
- | 'br'
8372
- | 'ca'
8373
- | 'cn'
8374
- | 'de'
8375
- | 'dz'
8376
- | 'es'
8377
- | 'fr'
8378
- | 'gb'
8379
- | 'hk'
8380
- | 'in'
8381
- | 'it'
8382
- | 'jp'
8383
- | 'kr'
8384
- | 'nl'
8385
- | 'sg'
8386
- | 'tw'
8387
- | 'us';
8388
- };
8389
-
8390
- export type ReportingControllerGetPortfolioTrendsResponse =
8391
- PortfolioTrendsResponseDto;
8392
-
8393
- export type ReportingControllerGetCashFlowTrendsData = {
8394
- /**
8395
- * Data granularity (accepted for API symmetry; v1 returns month buckets)
8396
- */
8397
- granularity?: 'day' | 'week' | 'month';
8398
- /**
8399
- * Time period
8400
- */
8401
- period?: '1m' | '3m' | '6m' | '1y';
8402
- /**
8403
- * Region code for tenant context
8404
- */
8405
- region:
8406
- | 'ad'
8407
- | 'ae'
8408
- | 'af'
8409
- | 'ag'
8410
- | 'al'
8411
- | 'am'
8412
- | 'ao'
8413
- | 'au'
8414
- | 'br'
8415
- | 'ca'
8416
- | 'cn'
8417
- | 'de'
8418
- | 'dz'
8419
- | 'es'
8420
- | 'fr'
8421
- | 'gb'
8422
- | 'hk'
8423
- | 'in'
8424
- | 'it'
8425
- | 'jp'
8426
- | 'kr'
8427
- | 'nl'
8428
- | 'sg'
8429
- | 'tw'
8430
- | 'us';
8431
- };
8432
-
8433
- export type ReportingControllerGetCashFlowTrendsResponse =
8434
- CashFlowTrendsResponseDto;
8435
-
8436
- export type ReportingControllerGenerateSnapshotData = {
8437
- /**
8438
- * Region code for tenant context
8439
- */
8440
- region:
8441
- | 'ad'
8442
- | 'ae'
8443
- | 'af'
8444
- | 'ag'
8445
- | 'al'
8446
- | 'am'
8447
- | 'ao'
8448
- | 'au'
8449
- | 'br'
8450
- | 'ca'
8451
- | 'cn'
8452
- | 'de'
8453
- | 'dz'
8454
- | 'es'
8455
- | 'fr'
8456
- | 'gb'
8457
- | 'hk'
8458
- | 'in'
8459
- | 'it'
8460
- | 'jp'
8461
- | 'kr'
8462
- | 'nl'
8463
- | 'sg'
8464
- | 'tw'
8465
- | 'us';
8466
- /**
8467
- * Optional date (defaults to today)
8468
- */
8469
- requestBody: GenerateSnapshotBody;
8470
- };
8471
-
8472
- export type ReportingControllerGenerateSnapshotResponse =
8473
- GenerateSnapshotResponse;
8474
-
8475
- export type ReportingControllerBackfillSnapshotsData = {
9354
+ export type ForecastControllerGetForecastData = {
9355
+ /**
9356
+ * Number of months to forecast (1-12, default 3)
9357
+ */
9358
+ months?: number;
8476
9359
  /**
8477
9360
  * Region code for tenant context
8478
9361
  */
@@ -8502,98 +9385,9 @@ export type ReportingControllerBackfillSnapshotsData = {
8502
9385
  | 'sg'
8503
9386
  | 'tw'
8504
9387
  | 'us';
8505
- requestBody: BackfillSnapshotsBody;
8506
- };
8507
-
8508
- export type ReportingControllerBackfillSnapshotsResponse =
8509
- BackfillSnapshotsResponse;
8510
-
8511
- export type UserControllerDeleteOwnUserData = {
8512
- requestBody: DeleteOwnUserDto;
8513
- };
8514
-
8515
- export type UserControllerDeleteOwnUserResponse = void;
8516
-
8517
- export type UserControllerGetUserData = {
8518
- acceptLanguage: string;
8519
- };
8520
-
8521
- export type UserControllerGetUserResponse = UserResponseDto;
8522
-
8523
- export type UserControllerSignupUserData = {
8524
- requestBody: SignupDto;
8525
- };
8526
-
8527
- export type UserControllerSignupUserResponse = SignupResponseDto;
8528
-
8529
- export type UserControllerDeleteUserData = {
8530
- /**
8531
- * User ID to delete
8532
- */
8533
- id: string;
8534
- };
8535
-
8536
- export type UserControllerDeleteUserResponse = void;
8537
-
8538
- export type UserControllerGetUserInfoData = {
8539
- /**
8540
- * User ID
8541
- */
8542
- id: string;
8543
- };
8544
-
8545
- export type UserControllerGetUserInfoResponse = unknown;
8546
-
8547
- export type UserControllerUpdateUserSettingData = {
8548
- requestBody: UpdateUserSettingDto;
8549
- };
8550
-
8551
- export type UserControllerUpdateUserSettingResponse = unknown;
8552
-
8553
- export type UserControllerGetAllUserSettingsByPageData = {
8554
- /**
8555
- * Page number
8556
- */
8557
- pageNo: number;
8558
- /**
8559
- * Page size
8560
- */
8561
- pageSize: number;
8562
- };
8563
-
8564
- export type UserControllerGetAllUserSettingsByPageResponse = unknown;
8565
-
8566
- export type UserControllerGetAssetLiabilitySummaryResponse = unknown;
8567
-
8568
- export type PropertyControllerGetAllResponse = unknown;
8569
-
8570
- export type PropertyControllerGetByKeyData = {
8571
- /**
8572
- * Property key
8573
- */
8574
- key: string;
8575
- };
8576
-
8577
- export type PropertyControllerGetByKeyResponse = unknown;
8578
-
8579
- export type PropertyControllerUpdateData = {
8580
- /**
8581
- * Property key
8582
- */
8583
- key: string;
8584
- requestBody: UpdatePropertyDto;
8585
- };
8586
-
8587
- export type PropertyControllerUpdateResponse = unknown;
8588
-
8589
- export type PropertyControllerDeleteData = {
8590
- /**
8591
- * Property key
8592
- */
8593
- key: string;
8594
9388
  };
8595
9389
 
8596
- export type PropertyControllerDeleteResponse = void;
9390
+ export type ForecastControllerGetForecastResponse = ForecastResponseDto;
8597
9391
 
8598
9392
  export type TransactionRuleControllerCreateData = {
8599
9393
  /**
@@ -9289,7 +10083,7 @@ export type EventControllerGetSliceResponse = unknown;
9289
10083
 
9290
10084
  export type OnboardingControllerBootstrapData = {
9291
10085
  /**
9292
- * 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)
9293
10087
  */
9294
10088
  region:
9295
10089
  | 'ad'
@@ -9299,24 +10093,190 @@ export type OnboardingControllerBootstrapData = {
9299
10093
  | 'al'
9300
10094
  | 'am'
9301
10095
  | 'ao'
10096
+ | 'ar'
10097
+ | 'at'
9302
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'
9303
10111
  | 'br'
10112
+ | 'bs'
10113
+ | 'bt'
10114
+ | 'bw'
10115
+ | 'by'
10116
+ | 'bz'
9304
10117
  | 'ca'
10118
+ | 'cd'
10119
+ | 'cf'
10120
+ | 'cg'
10121
+ | 'ch'
10122
+ | 'ci'
10123
+ | 'cl'
10124
+ | 'cm'
9305
10125
  | 'cn'
10126
+ | 'co'
10127
+ | 'cr'
10128
+ | 'cu'
10129
+ | 'cv'
10130
+ | 'cy'
10131
+ | 'cz'
9306
10132
  | 'de'
10133
+ | 'dj'
10134
+ | 'dk'
10135
+ | 'dm'
10136
+ | 'do'
9307
10137
  | 'dz'
10138
+ | 'ec'
10139
+ | 'ee'
10140
+ | 'eg'
10141
+ | 'er'
9308
10142
  | 'es'
10143
+ | 'et'
10144
+ | 'fj'
10145
+ | 'fm'
9309
10146
  | 'fr'
10147
+ | 'ga'
9310
10148
  | 'gb'
10149
+ | 'gd'
10150
+ | 'ge'
10151
+ | 'gh'
10152
+ | 'gm'
10153
+ | 'gn'
10154
+ | 'gq'
10155
+ | 'gr'
10156
+ | 'gt'
10157
+ | 'gw'
10158
+ | 'gy'
9311
10159
  | 'hk'
10160
+ | 'hn'
10161
+ | 'hr'
10162
+ | 'ht'
10163
+ | 'hu'
10164
+ | 'id'
10165
+ | 'ie'
10166
+ | 'il'
9312
10167
  | 'in'
10168
+ | 'iq'
10169
+ | 'ir'
10170
+ | 'is'
9313
10171
  | 'it'
10172
+ | 'jm'
10173
+ | 'jo'
9314
10174
  | 'jp'
10175
+ | 'ke'
10176
+ | 'kg'
10177
+ | 'kh'
10178
+ | 'ki'
10179
+ | 'km'
10180
+ | 'kn'
9315
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'
9316
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'
9317
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'
9318
10263
  | 'tw'
9319
- | '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';
9320
10280
  requestBody: OnboardingDto;
9321
10281
  };
9322
10282
 
@@ -9467,7 +10427,7 @@ export type ReconciliationControllerHistoryData = {
9467
10427
  export type ReconciliationControllerHistoryResponse =
9468
10428
  Array<ReconciliationRecordDto>;
9469
10429
 
9470
- export type ExportControllerExportBeancountResponse = unknown;
10430
+ export type ExportControllerExportBeancountResponse = Blob | File;
9471
10431
 
9472
10432
  export type FileImportControllerImportFileData = {
9473
10433
  /**
@@ -10225,6 +11185,24 @@ export type PlatformControllerMatchPlatformsData = {
10225
11185
 
10226
11186
  export type PlatformControllerMatchPlatformsResponse = PlatformMatchResponseDto;
10227
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
+
10228
11206
  export type PlatformControllerUpdateData = {
10229
11207
  /**
10230
11208
  * Platform ID
@@ -10474,6 +11452,42 @@ export type AuthControllerAccessTokenLoginData = {
10474
11452
 
10475
11453
  export type AuthControllerAccessTokenLoginResponse = AnonymousLoginResponseDto;
10476
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
+
10477
11491
  export type CacheControllerFlushCacheResponse = unknown;
10478
11492
 
10479
11493
  export type ExchangeRateControllerGetExchangeRateData = {
@@ -11167,7 +12181,7 @@ export type $OpenApiTs = {
11167
12181
  /**
11168
12182
  * Payee profile unverified successfully
11169
12183
  */
11170
- 200: PayeeProfileResponseDto;
12184
+ 204: void;
11171
12185
  /**
11172
12186
  * Admin access required
11173
12187
  */
@@ -11274,598 +12288,598 @@ export type $OpenApiTs = {
11274
12288
  };
11275
12289
  };
11276
12290
  };
11277
- '/api/v1/{region}/bean/prices': {
11278
- post: {
11279
- req: PriceControllerCreateData;
12291
+ '/api/v1/{region}/reporting/portfolio/trends': {
12292
+ get: {
12293
+ req: ReportingControllerGetPortfolioTrendsData;
11280
12294
  res: {
11281
12295
  /**
11282
- * Price created successfully
11283
- */
11284
- 201: PriceResponseDto;
11285
- /**
11286
- * Currency or quoteCurrency commodity not found
11287
- */
11288
- 404: unknown;
11289
- /**
11290
- * Price already exists for this currency pair and date
12296
+ * Trends retrieved successfully
11291
12297
  */
11292
- 409: unknown;
11293
- };
11294
- };
11295
- get: {
11296
- req: PriceControllerFindAllData;
11297
- res: {
12298
+ 200: PortfolioTrendsResponseDto;
11298
12299
  /**
11299
- * Prices retrieved successfully
12300
+ * User not authenticated
11300
12301
  */
11301
- 200: PriceListResponseDto;
12302
+ 401: unknown;
11302
12303
  };
11303
12304
  };
11304
12305
  };
11305
- '/api/v1/{region}/bean/prices/{id}': {
12306
+ '/api/v1/{region}/reporting/cash-flow/trends': {
11306
12307
  get: {
11307
- req: PriceControllerFindOneData;
11308
- res: {
11309
- /**
11310
- * Price retrieved successfully
11311
- */
11312
- 200: PriceResponseDto;
11313
- /**
11314
- * Price not found
11315
- */
11316
- 404: unknown;
11317
- };
11318
- };
11319
- put: {
11320
- req: PriceControllerUpdateData;
12308
+ req: ReportingControllerGetCashFlowTrendsData;
11321
12309
  res: {
11322
12310
  /**
11323
- * Price updated successfully
11324
- */
11325
- 200: PriceResponseDto;
11326
- /**
11327
- * Price not found
12311
+ * Cash-flow trends retrieved successfully
11328
12312
  */
11329
- 404: unknown;
12313
+ 200: CashFlowTrendsResponseDto;
11330
12314
  /**
11331
- * Updated price conflicts with existing price
12315
+ * User not authenticated
11332
12316
  */
11333
- 409: unknown;
12317
+ 401: unknown;
11334
12318
  };
11335
12319
  };
11336
- delete: {
11337
- req: PriceControllerDeleteData;
12320
+ };
12321
+ '/api/v1/{region}/reporting/snapshots/generate': {
12322
+ post: {
12323
+ req: ReportingControllerGenerateSnapshotData;
11338
12324
  res: {
11339
12325
  /**
11340
- * Price deleted successfully
12326
+ * Snapshot generated successfully
11341
12327
  */
11342
- 204: void;
12328
+ 200: GenerateSnapshotResponse;
11343
12329
  /**
11344
- * Price not found
12330
+ * Invalid date format
11345
12331
  */
11346
- 404: unknown;
11347
- };
11348
- };
11349
- };
11350
- '/api/v1/{region}/bean/prices/bulk': {
11351
- post: {
11352
- req: PriceControllerBulkCreateData;
11353
- res: {
12332
+ 400: unknown;
11354
12333
  /**
11355
- * Prices created successfully
12334
+ * User not authenticated
11356
12335
  */
11357
- 201: Array<PriceResponseDto>;
12336
+ 401: unknown;
11358
12337
  };
11359
12338
  };
11360
12339
  };
11361
- '/api/v1/{region}/bean/recurring-rules': {
12340
+ '/api/v1/{region}/reporting/snapshots/backfill': {
11362
12341
  post: {
11363
- req: RecurringRuleControllerCreateData;
12342
+ req: ReportingControllerBackfillSnapshotsData;
11364
12343
  res: {
11365
12344
  /**
11366
- * Rule created successfully
12345
+ * Backfill completed successfully
11367
12346
  */
11368
- 201: RecurringRuleResponseDto;
12347
+ 200: BackfillSnapshotsResponse;
11369
12348
  /**
11370
- * Invalid input data (e.g., autoCreate without accounts)
12349
+ * Invalid date format or range
11371
12350
  */
11372
12351
  400: unknown;
11373
12352
  /**
11374
- * Rule with same name already exists
12353
+ * User not authenticated
11375
12354
  */
11376
- 409: unknown;
11377
- };
11378
- };
11379
- get: {
11380
- req: RecurringRuleControllerFindAllData;
11381
- res: {
12355
+ 401: unknown;
11382
12356
  /**
11383
- * Rules retrieved successfully
12357
+ * Backfill already in progress for this user
11384
12358
  */
11385
- 200: Array<RecurringRuleResponseDto>;
12359
+ 409: unknown;
11386
12360
  };
11387
12361
  };
11388
12362
  };
11389
- '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}': {
12363
+ '/api/v1/{region}/bean/prices': {
11390
12364
  post: {
11391
- req: RecurringRuleControllerCreateFromTransactionData;
12365
+ req: PriceControllerCreateData;
11392
12366
  res: {
11393
12367
  /**
11394
- * Rule created successfully
12368
+ * Price created successfully
12369
+ */
12370
+ 201: PriceResponseDto;
12371
+ /**
12372
+ * Currency or quoteCurrency commodity not found
11395
12373
  */
11396
- 201: RecurringRuleResponseDto;
12374
+ 404: unknown;
11397
12375
  /**
11398
- * Transaction not found
12376
+ * Price already exists for this currency pair and date
11399
12377
  */
11400
- 404: ApiProblemResponseDto;
12378
+ 409: unknown;
12379
+ };
12380
+ };
12381
+ get: {
12382
+ req: PriceControllerFindAllData;
12383
+ res: {
11401
12384
  /**
11402
- * Rule with same name already exists or transaction already linked
12385
+ * Prices retrieved successfully
11403
12386
  */
11404
- 409: ApiProblemResponseDto;
12387
+ 200: PriceListResponseDto;
11405
12388
  };
11406
12389
  };
11407
12390
  };
11408
- '/api/v1/{region}/bean/recurring-rules/{id}': {
12391
+ '/api/v1/{region}/bean/prices/{id}': {
11409
12392
  get: {
11410
- req: RecurringRuleControllerFindOneData;
12393
+ req: PriceControllerFindOneData;
11411
12394
  res: {
11412
12395
  /**
11413
- * Rule retrieved successfully
12396
+ * Price retrieved successfully
11414
12397
  */
11415
- 200: RecurringRuleResponseDto;
12398
+ 200: PriceResponseDto;
11416
12399
  /**
11417
- * Rule not found
12400
+ * Price not found
11418
12401
  */
11419
12402
  404: unknown;
11420
12403
  };
11421
12404
  };
11422
- patch: {
11423
- req: RecurringRuleControllerUpdateData;
12405
+ put: {
12406
+ req: PriceControllerUpdateData;
11424
12407
  res: {
11425
12408
  /**
11426
- * Rule updated successfully
12409
+ * Price updated successfully
11427
12410
  */
11428
- 200: RecurringRuleResponseDto;
12411
+ 200: PriceResponseDto;
11429
12412
  /**
11430
- * Invalid input data
12413
+ * Price not found
11431
12414
  */
11432
- 400: unknown;
12415
+ 404: unknown;
11433
12416
  /**
11434
- * Rule not found
12417
+ * Updated price conflicts with existing price
11435
12418
  */
11436
- 404: unknown;
12419
+ 409: unknown;
11437
12420
  };
11438
12421
  };
11439
12422
  delete: {
11440
- req: RecurringRuleControllerDeleteData;
12423
+ req: PriceControllerDeleteData;
11441
12424
  res: {
11442
12425
  /**
11443
- * Rule deleted successfully
12426
+ * Price deleted successfully
11444
12427
  */
11445
12428
  204: void;
11446
12429
  /**
11447
- * Rule not found
12430
+ * Price not found
11448
12431
  */
11449
12432
  404: unknown;
11450
12433
  };
11451
12434
  };
11452
12435
  };
11453
- '/api/v1/{region}/bean/recurring-rules/{id}/stats': {
11454
- get: {
11455
- req: RecurringRuleControllerGetWithStatsData;
12436
+ '/api/v1/{region}/bean/prices/bulk': {
12437
+ post: {
12438
+ req: PriceControllerBulkCreateData;
11456
12439
  res: {
11457
12440
  /**
11458
- * Rule with stats retrieved successfully
11459
- */
11460
- 200: RecurringRuleWithStatsResponseDto;
11461
- /**
11462
- * Rule not found
12441
+ * Prices created successfully
11463
12442
  */
11464
- 404: unknown;
12443
+ 201: Array<PriceResponseDto>;
11465
12444
  };
11466
12445
  };
11467
12446
  };
11468
- '/api/v1/{region}/bean/expected-transactions': {
11469
- get: {
11470
- req: ExpectedTransactionControllerFindAllData;
12447
+ '/api/v1/users': {
12448
+ delete: {
12449
+ req: UserControllerDeleteOwnUserData;
11471
12450
  res: {
11472
12451
  /**
11473
- * Expected transactions retrieved successfully
12452
+ * User deleted successfully
11474
12453
  */
11475
- 200: ExpectedTransactionListResponseDto;
11476
- };
11477
- };
11478
- };
11479
- '/api/v1/{region}/bean/expected-transactions/overdue': {
11480
- get: {
11481
- req: ExpectedTransactionControllerFindOverdueData;
11482
- res: {
12454
+ 204: void;
11483
12455
  /**
11484
- * Overdue transactions retrieved successfully
12456
+ * Invalid access token
11485
12457
  */
11486
- 200: ExpectedTransactionListResponseDto;
12458
+ 403: unknown;
11487
12459
  };
11488
12460
  };
11489
- };
11490
- '/api/v1/{region}/bean/expected-transactions/{id}': {
11491
12461
  get: {
11492
- req: ExpectedTransactionControllerFindOneData;
12462
+ req: UserControllerGetUserData;
11493
12463
  res: {
11494
12464
  /**
11495
- * Expected transaction retrieved successfully
11496
- */
11497
- 200: ExpectedTransactionResponseDto;
11498
- /**
11499
- * Expected transaction not found
12465
+ * User retrieved successfully
11500
12466
  */
11501
- 404: unknown;
12467
+ 200: UserResponseDto;
11502
12468
  };
11503
12469
  };
11504
- };
11505
- '/api/v1/{region}/bean/expected-transactions/{id}/skip': {
11506
12470
  post: {
11507
- req: ExpectedTransactionControllerSkipData;
12471
+ req: UserControllerSignupUserData;
11508
12472
  res: {
11509
12473
  /**
11510
- * Expected transaction skipped successfully
12474
+ * User created successfully
11511
12475
  */
11512
- 200: ExpectedTransactionResponseDto;
12476
+ 201: SignupResponseDto;
11513
12477
  /**
11514
- * Cannot skip - not in PENDING status
12478
+ * Invalid Turnstile token (when Turnstile is enabled)
11515
12479
  */
11516
12480
  400: unknown;
11517
12481
  /**
11518
- * Expected transaction not found
12482
+ * User signup is disabled
11519
12483
  */
11520
- 404: unknown;
12484
+ 403: unknown;
11521
12485
  };
11522
12486
  };
12487
+ };
12488
+ '/api/v1/users/{id}': {
11523
12489
  delete: {
11524
- req: ExpectedTransactionControllerUndoSkipData;
12490
+ req: UserControllerDeleteUserData;
11525
12491
  res: {
11526
12492
  /**
11527
- * Skip undone successfully
11528
- */
11529
- 200: ExpectedTransactionResponseDto;
11530
- /**
11531
- * Cannot undo - not in SKIPPED status
12493
+ * User deleted successfully
11532
12494
  */
11533
- 400: unknown;
12495
+ 204: void;
11534
12496
  /**
11535
- * Expected transaction not found
12497
+ * Cannot delete own account or insufficient permissions
11536
12498
  */
11537
- 404: unknown;
12499
+ 403: unknown;
11538
12500
  };
11539
12501
  };
11540
12502
  };
11541
- '/api/v1/{region}/bean/expected-transactions/{id}/match': {
11542
- post: {
11543
- req: ExpectedTransactionControllerConfirmMatchData;
12503
+ '/api/v1/users/{id}/info': {
12504
+ get: {
12505
+ req: UserControllerGetUserInfoData;
11544
12506
  res: {
11545
12507
  /**
11546
- * Match confirmed successfully
12508
+ * User info retrieved successfully
11547
12509
  */
11548
12510
  200: unknown;
11549
12511
  /**
11550
- * Cannot match - not in PENDING status
11551
- */
11552
- 400: unknown;
11553
- /**
11554
- * Expected or actual transaction not found
11555
- */
11556
- 404: unknown;
11557
- /**
11558
- * Actual transaction already matched to another rule
12512
+ * Cannot access other user info without admin permission
11559
12513
  */
11560
- 409: unknown;
12514
+ 403: unknown;
11561
12515
  };
11562
12516
  };
11563
- delete: {
11564
- req: ExpectedTransactionControllerUnmatchData;
12517
+ };
12518
+ '/api/v1/users/setting': {
12519
+ put: {
12520
+ req: UserControllerUpdateUserSettingData;
11565
12521
  res: {
11566
12522
  /**
11567
- * Match removed successfully
12523
+ * Settings updated successfully
11568
12524
  */
11569
12525
  200: unknown;
11570
12526
  /**
11571
- * Cannot unmatch - not in COMPLETED status
11572
- */
11573
- 400: unknown;
11574
- /**
11575
- * Expected transaction not found
12527
+ * Insufficient permissions
11576
12528
  */
11577
- 404: unknown;
12529
+ 403: unknown;
11578
12530
  };
11579
12531
  };
11580
12532
  };
11581
- '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
11582
- post: {
11583
- req: ExpectedTransactionControllerEnterNowData;
12533
+ '/api/v1/users/settings-by-page': {
12534
+ get: {
12535
+ req: UserControllerGetAllUserSettingsByPageData;
11584
12536
  res: {
11585
12537
  /**
11586
- * Transaction created successfully
11587
- */
11588
- 201: unknown;
11589
- /**
11590
- * Cannot enter - not in PENDING status or missing accounts
11591
- */
11592
- 400: unknown;
11593
- /**
11594
- * Expected transaction or accounts not found
12538
+ * Settings list retrieved successfully
11595
12539
  */
11596
- 404: unknown;
12540
+ 200: unknown;
11597
12541
  };
11598
12542
  };
11599
12543
  };
11600
- '/api/v1/{region}/bean/recurring/forecast': {
12544
+ '/api/v1/users/asset-liability-summary': {
11601
12545
  get: {
11602
- req: ForecastControllerGetForecastData;
11603
12546
  res: {
11604
12547
  /**
11605
- * Forecast retrieved successfully
12548
+ * Summary retrieved successfully
11606
12549
  */
11607
- 200: ForecastResponseDto;
12550
+ 200: unknown;
11608
12551
  };
11609
12552
  };
11610
12553
  };
11611
- '/api/v1/{region}/reporting/portfolio/trends': {
12554
+ '/api/v1/admin/properties': {
11612
12555
  get: {
11613
- req: ReportingControllerGetPortfolioTrendsData;
11614
12556
  res: {
11615
12557
  /**
11616
- * Trends retrieved successfully
12558
+ * Properties retrieved successfully
11617
12559
  */
11618
- 200: PortfolioTrendsResponseDto;
12560
+ 200: unknown;
11619
12561
  /**
11620
- * User not authenticated
12562
+ * Unauthorized
11621
12563
  */
11622
12564
  401: unknown;
12565
+ /**
12566
+ * Forbidden - insufficient permissions
12567
+ */
12568
+ 403: unknown;
11623
12569
  };
11624
12570
  };
11625
12571
  };
11626
- '/api/v1/{region}/reporting/cash-flow/trends': {
12572
+ '/api/v1/admin/properties/{key}': {
11627
12573
  get: {
11628
- req: ReportingControllerGetCashFlowTrendsData;
12574
+ req: PropertyControllerGetByKeyData;
11629
12575
  res: {
11630
12576
  /**
11631
- * Cash-flow trends retrieved successfully
12577
+ * Property retrieved successfully
11632
12578
  */
11633
- 200: CashFlowTrendsResponseDto;
12579
+ 200: unknown;
11634
12580
  /**
11635
- * User not authenticated
12581
+ * Unauthorized
11636
12582
  */
11637
12583
  401: unknown;
12584
+ /**
12585
+ * Forbidden - insufficient permissions
12586
+ */
12587
+ 403: unknown;
12588
+ /**
12589
+ * Property not found
12590
+ */
12591
+ 404: unknown;
11638
12592
  };
11639
12593
  };
11640
- };
11641
- '/api/v1/{region}/reporting/snapshots/generate': {
11642
- post: {
11643
- req: ReportingControllerGenerateSnapshotData;
12594
+ put: {
12595
+ req: PropertyControllerUpdateData;
11644
12596
  res: {
11645
12597
  /**
11646
- * Snapshot generated successfully
12598
+ * Property updated successfully
11647
12599
  */
11648
- 200: GenerateSnapshotResponse;
12600
+ 200: unknown;
11649
12601
  /**
11650
- * Invalid date format
12602
+ * Unauthorized
11651
12603
  */
11652
- 400: unknown;
12604
+ 401: unknown;
11653
12605
  /**
11654
- * 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
11655
12620
  */
11656
12621
  401: unknown;
12622
+ /**
12623
+ * Forbidden - insufficient permissions
12624
+ */
12625
+ 403: unknown;
12626
+ /**
12627
+ * Property not found
12628
+ */
12629
+ 404: unknown;
11657
12630
  };
11658
12631
  };
11659
12632
  };
11660
- '/api/v1/{region}/reporting/snapshots/backfill': {
12633
+ '/api/v1/{region}/bean/recurring-rules': {
11661
12634
  post: {
11662
- req: ReportingControllerBackfillSnapshotsData;
12635
+ req: RecurringRuleControllerCreateData;
11663
12636
  res: {
11664
12637
  /**
11665
- * Backfill completed successfully
12638
+ * Rule created successfully
11666
12639
  */
11667
- 200: BackfillSnapshotsResponse;
12640
+ 201: RecurringRuleResponseDto;
11668
12641
  /**
11669
- * Invalid date format or range
12642
+ * Invalid input data (e.g., autoCreate without accounts)
11670
12643
  */
11671
12644
  400: unknown;
11672
12645
  /**
11673
- * User not authenticated
12646
+ * Rule with same name already exists
11674
12647
  */
11675
- 401: unknown;
12648
+ 409: unknown;
12649
+ };
12650
+ };
12651
+ get: {
12652
+ req: RecurringRuleControllerFindAllData;
12653
+ res: {
11676
12654
  /**
11677
- * Backfill already in progress for this user
12655
+ * Rules retrieved successfully
11678
12656
  */
11679
- 409: unknown;
12657
+ 200: Array<RecurringRuleResponseDto>;
11680
12658
  };
11681
12659
  };
11682
12660
  };
11683
- '/api/v1/users': {
11684
- delete: {
11685
- req: UserControllerDeleteOwnUserData;
12661
+ '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}': {
12662
+ post: {
12663
+ req: RecurringRuleControllerCreateFromTransactionData;
11686
12664
  res: {
11687
12665
  /**
11688
- * User deleted successfully
12666
+ * Rule created successfully
11689
12667
  */
11690
- 204: void;
12668
+ 201: RecurringRuleResponseDto;
11691
12669
  /**
11692
- * Invalid access token
12670
+ * Transaction not found
11693
12671
  */
11694
- 403: unknown;
12672
+ 404: ApiProblemResponseDto;
12673
+ /**
12674
+ * Rule with same name already exists or transaction already linked
12675
+ */
12676
+ 409: ApiProblemResponseDto;
11695
12677
  };
11696
12678
  };
12679
+ };
12680
+ '/api/v1/{region}/bean/recurring-rules/{id}': {
11697
12681
  get: {
11698
- req: UserControllerGetUserData;
12682
+ req: RecurringRuleControllerFindOneData;
11699
12683
  res: {
11700
12684
  /**
11701
- * User retrieved successfully
12685
+ * Rule retrieved successfully
11702
12686
  */
11703
- 200: UserResponseDto;
12687
+ 200: RecurringRuleResponseDto;
12688
+ /**
12689
+ * Rule not found
12690
+ */
12691
+ 404: unknown;
11704
12692
  };
11705
12693
  };
11706
- post: {
11707
- req: UserControllerSignupUserData;
12694
+ patch: {
12695
+ req: RecurringRuleControllerUpdateData;
11708
12696
  res: {
11709
12697
  /**
11710
- * User created successfully
12698
+ * Rule updated successfully
11711
12699
  */
11712
- 201: SignupResponseDto;
12700
+ 200: RecurringRuleResponseDto;
11713
12701
  /**
11714
- * Invalid Turnstile token (when Turnstile is enabled)
12702
+ * Invalid input data
11715
12703
  */
11716
12704
  400: unknown;
11717
12705
  /**
11718
- * User signup is disabled
12706
+ * Rule not found
11719
12707
  */
11720
- 403: unknown;
12708
+ 404: unknown;
11721
12709
  };
11722
12710
  };
11723
- };
11724
- '/api/v1/users/{id}': {
11725
12711
  delete: {
11726
- req: UserControllerDeleteUserData;
12712
+ req: RecurringRuleControllerDeleteData;
11727
12713
  res: {
11728
12714
  /**
11729
- * User deleted successfully
12715
+ * Rule deleted successfully
11730
12716
  */
11731
12717
  204: void;
11732
12718
  /**
11733
- * Cannot delete own account or insufficient permissions
12719
+ * Rule not found
11734
12720
  */
11735
- 403: unknown;
12721
+ 404: unknown;
11736
12722
  };
11737
12723
  };
11738
12724
  };
11739
- '/api/v1/users/{id}/info': {
12725
+ '/api/v1/{region}/bean/recurring-rules/{id}/stats': {
11740
12726
  get: {
11741
- req: UserControllerGetUserInfoData;
12727
+ req: RecurringRuleControllerGetWithStatsData;
11742
12728
  res: {
11743
12729
  /**
11744
- * User info retrieved successfully
12730
+ * Rule with stats retrieved successfully
11745
12731
  */
11746
- 200: unknown;
12732
+ 200: RecurringRuleWithStatsResponseDto;
11747
12733
  /**
11748
- * Cannot access other user info without admin permission
12734
+ * Rule not found
11749
12735
  */
11750
- 403: unknown;
12736
+ 404: unknown;
11751
12737
  };
11752
12738
  };
11753
12739
  };
11754
- '/api/v1/users/setting': {
11755
- put: {
11756
- req: UserControllerUpdateUserSettingData;
12740
+ '/api/v1/{region}/bean/expected-transactions': {
12741
+ get: {
12742
+ req: ExpectedTransactionControllerFindAllData;
11757
12743
  res: {
11758
12744
  /**
11759
- * Settings updated successfully
11760
- */
11761
- 200: unknown;
11762
- /**
11763
- * Insufficient permissions
12745
+ * Expected transactions retrieved successfully
11764
12746
  */
11765
- 403: unknown;
12747
+ 200: ExpectedTransactionListResponseDto;
11766
12748
  };
11767
12749
  };
11768
12750
  };
11769
- '/api/v1/users/settings-by-page': {
12751
+ '/api/v1/{region}/bean/expected-transactions/overdue': {
11770
12752
  get: {
11771
- req: UserControllerGetAllUserSettingsByPageData;
12753
+ req: ExpectedTransactionControllerFindOverdueData;
11772
12754
  res: {
11773
12755
  /**
11774
- * Settings list retrieved successfully
12756
+ * Overdue transactions retrieved successfully
11775
12757
  */
11776
- 200: unknown;
12758
+ 200: ExpectedTransactionListResponseDto;
11777
12759
  };
11778
12760
  };
11779
12761
  };
11780
- '/api/v1/users/asset-liability-summary': {
12762
+ '/api/v1/{region}/bean/expected-transactions/{id}': {
11781
12763
  get: {
12764
+ req: ExpectedTransactionControllerFindOneData;
11782
12765
  res: {
11783
12766
  /**
11784
- * Summary retrieved successfully
12767
+ * Expected transaction retrieved successfully
11785
12768
  */
11786
- 200: unknown;
12769
+ 200: ExpectedTransactionResponseDto;
12770
+ /**
12771
+ * Expected transaction not found
12772
+ */
12773
+ 404: unknown;
11787
12774
  };
11788
12775
  };
11789
12776
  };
11790
- '/api/v1/admin/properties': {
11791
- get: {
12777
+ '/api/v1/{region}/bean/expected-transactions/{id}/skip': {
12778
+ post: {
12779
+ req: ExpectedTransactionControllerSkipData;
11792
12780
  res: {
11793
12781
  /**
11794
- * Properties retrieved successfully
12782
+ * Expected transaction skipped successfully
11795
12783
  */
11796
- 200: unknown;
12784
+ 200: ExpectedTransactionResponseDto;
11797
12785
  /**
11798
- * Unauthorized
12786
+ * Cannot skip - not in PENDING status
11799
12787
  */
11800
- 401: unknown;
12788
+ 400: unknown;
11801
12789
  /**
11802
- * Forbidden - insufficient permissions
12790
+ * Expected transaction not found
11803
12791
  */
11804
- 403: unknown;
12792
+ 404: unknown;
11805
12793
  };
11806
12794
  };
11807
- };
11808
- '/api/v1/admin/properties/{key}': {
11809
- get: {
11810
- req: PropertyControllerGetByKeyData;
12795
+ delete: {
12796
+ req: ExpectedTransactionControllerUndoSkipData;
11811
12797
  res: {
11812
12798
  /**
11813
- * Property retrieved successfully
11814
- */
11815
- 200: unknown;
11816
- /**
11817
- * Unauthorized
12799
+ * Skip undone successfully
11818
12800
  */
11819
- 401: unknown;
12801
+ 204: void;
11820
12802
  /**
11821
- * Forbidden - insufficient permissions
12803
+ * Cannot undo - not in SKIPPED status
11822
12804
  */
11823
- 403: unknown;
12805
+ 400: unknown;
11824
12806
  /**
11825
- * Property not found
12807
+ * Expected transaction not found
11826
12808
  */
11827
12809
  404: unknown;
11828
12810
  };
11829
12811
  };
11830
- put: {
11831
- req: PropertyControllerUpdateData;
12812
+ };
12813
+ '/api/v1/{region}/bean/expected-transactions/{id}/match': {
12814
+ post: {
12815
+ req: ExpectedTransactionControllerConfirmMatchData;
11832
12816
  res: {
11833
12817
  /**
11834
- * Property updated successfully
12818
+ * Match confirmed successfully
11835
12819
  */
11836
12820
  200: unknown;
11837
12821
  /**
11838
- * Unauthorized
12822
+ * Cannot match - not in PENDING status
11839
12823
  */
11840
- 401: unknown;
12824
+ 400: unknown;
11841
12825
  /**
11842
- * Forbidden - insufficient permissions
12826
+ * Expected or actual transaction not found
11843
12827
  */
11844
- 403: unknown;
12828
+ 404: unknown;
12829
+ /**
12830
+ * Actual transaction already matched to another rule
12831
+ */
12832
+ 409: unknown;
11845
12833
  };
11846
12834
  };
11847
12835
  delete: {
11848
- req: PropertyControllerDeleteData;
12836
+ req: ExpectedTransactionControllerUnmatchData;
11849
12837
  res: {
11850
12838
  /**
11851
- * Property deleted successfully
12839
+ * Match removed successfully
11852
12840
  */
11853
12841
  204: void;
11854
12842
  /**
11855
- * Unauthorized
12843
+ * Cannot unmatch - not in COMPLETED status
11856
12844
  */
11857
- 401: unknown;
12845
+ 400: unknown;
11858
12846
  /**
11859
- * Forbidden - insufficient permissions
12847
+ * Expected transaction not found
11860
12848
  */
11861
- 403: unknown;
12849
+ 404: unknown;
12850
+ };
12851
+ };
12852
+ };
12853
+ '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
12854
+ post: {
12855
+ req: ExpectedTransactionControllerEnterNowData;
12856
+ res: {
11862
12857
  /**
11863
- * 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
11864
12867
  */
11865
12868
  404: unknown;
11866
12869
  };
11867
12870
  };
11868
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
+ };
11869
12883
  '/api/v1/{region}/bean/transaction-rules': {
11870
12884
  post: {
11871
12885
  req: TransactionRuleControllerCreateData;
@@ -12263,7 +13277,10 @@ export type $OpenApiTs = {
12263
13277
  '/api/v1/{region}/bean/export/beancount': {
12264
13278
  get: {
12265
13279
  res: {
12266
- 200: unknown;
13280
+ /**
13281
+ * ZIP archive (application/zip) streamed as an attachment
13282
+ */
13283
+ 200: Blob | File;
12267
13284
  };
12268
13285
  };
12269
13286
  };
@@ -12644,6 +13661,17 @@ export type $OpenApiTs = {
12644
13661
  };
12645
13662
  };
12646
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
+ };
12647
13675
  '/api/v1/bean/platforms/{id}': {
12648
13676
  put: {
12649
13677
  req: PlatformControllerUpdateData;
@@ -12791,10 +13819,48 @@ export type $OpenApiTs = {
12791
13819
  };
12792
13820
  };
12793
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
+ };
12794
13853
  '/api/v1/cache/flush': {
12795
13854
  post: {
12796
13855
  res: {
12797
- 201: unknown;
13856
+ /**
13857
+ * Cache flushed successfully
13858
+ */
13859
+ 200: unknown;
13860
+ /**
13861
+ * Admin access required
13862
+ */
13863
+ 403: ApiProblemResponseDto;
12798
13864
  };
12799
13865
  };
12800
13866
  };