@firela/api-types 0.0.0-canary.4a3fac0c → 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 = {
2728
- /**
2729
- * Transaction ID to match with
2730
- */
2731
- transactionId: string;
2732
- };
2733
-
2734
- export type EnterNowDto = {
2849
+ export type CreateRuleFromTransactionDto = {
2735
2850
  /**
2736
- * Override expense account (uses rule default if not provided)
2851
+ * Recurring frequency
2737
2852
  */
2738
- expenseAccount?: string;
2853
+ frequency:
2854
+ | 'WEEKLY'
2855
+ | 'BIWEEKLY'
2856
+ | 'MONTHLY'
2857
+ | 'BIMONTHLY'
2858
+ | 'QUARTERLY'
2859
+ | 'YEARLY'
2860
+ | 'CUSTOM';
2739
2861
  /**
2740
- * Override payment account (uses rule default if not provided)
2862
+ * Optional name override (default: transaction payee)
2741
2863
  */
2742
- paymentAccount?: string;
2864
+ name?: string;
2743
2865
  /**
2744
- * Override amount (uses expected amount if not provided)
2866
+ * Optional icon emoji
2745
2867
  */
2746
- amount?: number;
2868
+ icon?: string;
2869
+ };
2870
+
2871
+ export type RecurringRuleWithStatsResponseDto = {
2747
2872
  /**
2748
- * Override payee (uses rule default if not provided)
2873
+ * Rule ID
2749
2874
  */
2750
- payee?: string;
2875
+ id: string;
2751
2876
  /**
2752
- * Optional narration
2877
+ * User ID
2753
2878
  */
2754
- narration?: string;
2755
- };
2756
-
2757
- export type ForecastItemDto = {
2879
+ userId: string;
2758
2880
  /**
2759
2881
  * Rule name
2760
2882
  */
2761
- rule: string;
2883
+ name: string;
2762
2884
  /**
2763
- * Rule ID
2885
+ * Icon emoji
2764
2886
  */
2765
- ruleId: string;
2887
+ icon?: string;
2888
+ /**
2889
+ * Recurring frequency
2890
+ */
2891
+ frequency: string;
2766
2892
  /**
2767
2893
  * Expected amount
2768
2894
  */
2769
- amount: number;
2895
+ expectedAmount: number;
2770
2896
  /**
2771
- * Expected date (YYYY-MM-DD)
2897
+ * Expected day of month
2772
2898
  */
2773
- date: string;
2899
+ expectedDay?: number;
2774
2900
  /**
2775
- * Rule icon emoji
2901
+ * Custom interval in days
2776
2902
  */
2777
- icon: string | null;
2903
+ customIntervalDays?: number;
2778
2904
  /**
2779
2905
  * Currency code
2780
2906
  */
2781
2907
  currency: string;
2782
- };
2783
-
2784
- export type MonthlyForecastDto = {
2785
2908
  /**
2786
- * Month (YYYY-MM)
2909
+ * Payee matching pattern
2787
2910
  */
2788
- month: string;
2911
+ matchPayeePattern?: string;
2789
2912
  /**
2790
- * Total expected outflow for the month
2913
+ * Amount tolerance percentage
2791
2914
  */
2792
- expectedOutflow: number;
2915
+ matchAmountTolerance: number;
2793
2916
  /**
2794
- * Number of expected transactions
2917
+ * Default expense account
2795
2918
  */
2796
- itemCount: number;
2919
+ defaultExpenseAccount?: string;
2797
2920
  /**
2798
- * Breakdown by currency
2921
+ * Default payment account
2799
2922
  */
2800
- byCurrency: {
2801
- [key: string]: unknown;
2802
- };
2923
+ defaultPaymentAccount?: string;
2803
2924
  /**
2804
- * Individual forecast items
2925
+ * Default payee
2805
2926
  */
2806
- items: Array<ForecastItemDto>;
2807
- };
2808
-
2809
- export type ForecastResponseDto = {
2927
+ defaultPayee?: string;
2810
2928
  /**
2811
- * Monthly forecast data
2929
+ * Whether rule is active
2812
2930
  */
2813
- forecast: Array<MonthlyForecastDto>;
2931
+ isActive: boolean;
2814
2932
  /**
2815
- * Total expected outflow across all months
2933
+ * Rule start date (YYYY-MM-DD)
2816
2934
  */
2817
- totalOutflow: number;
2935
+ startDate: string;
2818
2936
  /**
2819
- * Total by currency across all months
2937
+ * Rule end date (YYYY-MM-DD)
2820
2938
  */
2821
- totalByCurrency: {
2822
- [key: string]: unknown;
2823
- };
2939
+ endDate?: string;
2824
2940
  /**
2825
- * Number of active recurring rules included
2941
+ * Auto-create transaction on expected date
2826
2942
  */
2827
- rulesCount: number;
2943
+ autoCreate: boolean;
2828
2944
  /**
2829
- * Forecast period start date
2945
+ * Last matched occurrence date (YYYY-MM-DD)
2830
2946
  */
2831
- periodStart: string;
2947
+ lastOccurrence?: string;
2832
2948
  /**
2833
- * Forecast period end date
2949
+ * Total matched transactions count
2834
2950
  */
2835
- periodEnd: string;
2836
- };
2837
-
2838
- export type CurrencyBalanceDto = {
2951
+ totalCount: number;
2839
2952
  /**
2840
- * ISO 4217 currency code
2953
+ * Created at timestamp
2841
2954
  */
2842
- currency: string;
2955
+ createdAt: string;
2843
2956
  /**
2844
- * Balance amount
2957
+ * Updated at timestamp
2845
2958
  */
2846
- balance: string;
2847
- };
2848
-
2849
- export type TimeSeriesPointDto = {
2959
+ updatedAt: string;
2850
2960
  /**
2851
- * Date in YYYY-MM-DD format
2961
+ * Number of pending expected transactions
2852
2962
  */
2853
- date: string;
2963
+ pendingCount: number;
2854
2964
  /**
2855
- * Value at this date (in base currency)
2965
+ * Number of overdue expected transactions
2856
2966
  */
2857
- value: string;
2967
+ overdueCount: number;
2858
2968
  /**
2859
- * Change from previous point
2969
+ * Next expected date (YYYY-MM-DD)
2860
2970
  */
2861
- change?: {
2862
- [key: string]: unknown;
2863
- };
2971
+ nextExpectedDate?: string;
2864
2972
  /**
2865
- * Total assets at this date (in base currency)
2973
+ * Total amount of all matched transactions
2866
2974
  */
2867
- assets?: string;
2975
+ totalAmount: number;
2868
2976
  /**
2869
- * Total liabilities at this date (in base currency)
2977
+ * Average amount per transaction
2870
2978
  */
2871
- liabilities?: string;
2979
+ averageAmount: number;
2872
2980
  /**
2873
- * Multi-currency breakdown for this point
2981
+ * Number of matched transactions
2874
2982
  */
2875
- byCurrency?: Array<CurrencyBalanceDto>;
2876
- };
2877
-
2878
- export type TrendSummaryDto = {
2983
+ transactionCount: number;
2879
2984
  /**
2880
- * Value at start of period
2985
+ * First matched transaction date (YYYY-MM-DD)
2881
2986
  */
2882
- startValue: string;
2987
+ firstDate?: string;
2883
2988
  /**
2884
- * Value at end of period
2989
+ * Last matched transaction date (YYYY-MM-DD)
2885
2990
  */
2886
- endValue: string;
2991
+ lastDate?: string;
2887
2992
  /**
2888
- * Total change over period
2993
+ * Amount variance (standard deviation squared)
2889
2994
  */
2890
- totalChange: string;
2995
+ variance: number;
2891
2996
  /**
2892
- * Total change percentage
2997
+ * Number of upcoming expected transactions
2893
2998
  */
2894
- totalChangePercentage: string;
2999
+ upcomingCount: number;
2895
3000
  };
2896
3001
 
2897
- export type MultiCurrencyPointDto = {
3002
+ export type UpdateRecurringRuleDto = {
2898
3003
  /**
2899
- * Date in YYYY-MM-DD format
3004
+ * Rule name (unique per user)
2900
3005
  */
2901
- date: string;
3006
+ name?: string;
2902
3007
  /**
2903
- * Balances by currency
3008
+ * Icon emoji
2904
3009
  */
2905
- byCurrency: Array<CurrencyBalanceDto>;
2906
- };
2907
-
2908
- export type PortfolioTrendsResponseDto = {
3010
+ icon?: string;
2909
3011
  /**
2910
- * Time series data points
3012
+ * Recurring frequency
2911
3013
  */
2912
- series: Array<TimeSeriesPointDto>;
3014
+ frequency?:
3015
+ | 'WEEKLY'
3016
+ | 'BIWEEKLY'
3017
+ | 'MONTHLY'
3018
+ | 'BIMONTHLY'
3019
+ | 'QUARTERLY'
3020
+ | 'YEARLY'
3021
+ | 'CUSTOM';
2913
3022
  /**
2914
- * Period summary
3023
+ * Expected amount (positive number)
2915
3024
  */
2916
- summary: TrendSummaryDto;
3025
+ expectedAmount?: number;
2917
3026
  /**
2918
- * Period requested
3027
+ * Expected day of month (1-31)
2919
3028
  */
2920
- period: string;
3029
+ expectedDay?: number;
2921
3030
  /**
2922
- * Data granularity
3031
+ * Currency code
2923
3032
  */
2924
- granularity: string;
3033
+ currency?: string;
2925
3034
  /**
2926
- * Base currency for converted values
3035
+ * Payee matching pattern (supports wildcards)
2927
3036
  */
2928
- currency: string;
3037
+ matchPayeePattern?: string;
2929
3038
  /**
2930
- * Multi-currency time series (each point has currency breakdown)
3039
+ * Amount tolerance percentage (0-1)
2931
3040
  */
2932
- byCurrency?: Array<MultiCurrencyPointDto>;
3041
+ matchAmountTolerance?: number;
2933
3042
  /**
2934
- * Exchange rate warnings
3043
+ * Default expense account for auto-create
2935
3044
  */
2936
- warnings?: Array<ExchangeRateWarningDto>;
2937
- };
2938
-
2939
- export type CashFlowPointDto = {
3045
+ defaultExpenseAccount?: string;
2940
3046
  /**
2941
- * Month key (YYYY-MM)
3047
+ * Default payment account for auto-create
2942
3048
  */
2943
- month: string;
3049
+ defaultPaymentAccount?: string;
2944
3050
  /**
2945
- * Income in base currency (absolute, converted)
3051
+ * Default payee for auto-create
2946
3052
  */
2947
- income: string;
3053
+ defaultPayee?: string;
2948
3054
  /**
2949
- * Expense in base currency (absolute, converted)
3055
+ * Auto-create transaction when expected date arrives
2950
3056
  */
2951
- expense: string;
3057
+ autoCreate?: boolean;
2952
3058
  /**
2953
- * netSavings = income − expense (savings positive)
3059
+ * Rule end date (ISO format)
2954
3060
  */
2955
- netSavings: string;
3061
+ endDate?: string;
3062
+ /**
3063
+ * Custom interval in days
3064
+ */
3065
+ customIntervalDays?: number;
3066
+ /**
3067
+ * Rule active status
3068
+ */
3069
+ isActive?: boolean;
2956
3070
  };
2957
3071
 
2958
- export type CashFlowTrendSummaryDto = {
3072
+ export type ExpectedTransactionRuleDto = {
2959
3073
  /**
2960
- * Total income across the period
3074
+ * Rule name
2961
3075
  */
2962
- totalIncome: string;
3076
+ name: string;
2963
3077
  /**
2964
- * Total expense across the period
3078
+ * Rule icon
2965
3079
  */
2966
- totalExpense: string;
3080
+ icon?: string;
2967
3081
  /**
2968
- * income − expense across the period
3082
+ * Rule frequency
2969
3083
  */
2970
- totalNetSavings: string;
3084
+ frequency: string;
2971
3085
  /**
2972
- * totalNetSavings divided by the window length (N months, incl. zero-filled)
3086
+ * Currency code
2973
3087
  */
2974
- averageMonthlyNetSavings: string;
3088
+ currency: string;
2975
3089
  };
2976
3090
 
2977
- export type CashFlowTrendsResponseDto = {
3091
+ export type ExpectedTransactionResponseDto = {
2978
3092
  /**
2979
- * Monthly cash-flow series (fixed N-month window, zero-filled)
3093
+ * Expected transaction ID
2980
3094
  */
2981
- series: Array<CashFlowPointDto>;
3095
+ id: string;
2982
3096
  /**
2983
- * Period totals
3097
+ * User ID
2984
3098
  */
2985
- summary: CashFlowTrendSummaryDto;
3099
+ userId: string;
2986
3100
  /**
2987
- * Period requested
3101
+ * Associated rule ID
2988
3102
  */
2989
- period: string;
3103
+ ruleId: string;
2990
3104
  /**
2991
- * Data granularity (v1 returns month buckets)
3105
+ * Expected date (YYYY-MM-DD)
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;
3112
+ /**
3113
+ * Status (PENDING, COMPLETED, SKIPPED)
3114
+ */
3115
+ status: string;
2998
3116
  /**
2999
- * Exchange rate warnings (e.g. missing rate for a currency)
3117
+ * Matched transaction ID
3000
3118
  */
3001
- warnings?: Array<ExchangeRateWarningDto>;
3002
- };
3003
-
3004
- export type GenerateSnapshotBody = unknown;
3005
-
3006
- export type GenerateSnapshotResponse = unknown;
3007
-
3008
- export type BackfillSnapshotsBody = unknown;
3009
-
3010
- export type BackfillSnapshotsResponse = unknown;
3011
-
3012
- export type DeleteOwnUserDto = {
3119
+ matchedTransactionId?: string;
3013
3120
  /**
3014
- * Access token for user verification
3121
+ * Match timestamp (ISO 8601)
3015
3122
  */
3016
- accessToken: string;
3017
- };
3018
-
3019
- export type UserSettingsResponseDto = {
3123
+ matchedAt?: string;
3020
3124
  /**
3021
- * Base currency (ISO 4217) for net-worth/report aggregation. Independent of region (ADR-0006).
3125
+ * Match confidence score (0-1)
3022
3126
  */
3023
- baseCurrency: string | null;
3024
- };
3025
-
3026
- export type UserResponseDto = {
3127
+ matchConfidence?: number;
3027
3128
  /**
3028
- * User ID
3129
+ * Whether this expected transaction is overdue
3029
3130
  */
3030
- id: string;
3131
+ isOverdue: boolean;
3031
3132
  /**
3032
- * Assigned user role
3133
+ * Rule information
3033
3134
  */
3034
- role: string;
3135
+ rule: ExpectedTransactionRuleDto;
3035
3136
  /**
3036
- * Permission strings
3137
+ * Created at timestamp
3037
3138
  */
3038
- permissions: Array<string>;
3139
+ createdAt: string;
3039
3140
  /**
3040
- * User settings
3141
+ * Updated at timestamp
3041
3142
  */
3042
- settings: UserSettingsResponseDto;
3143
+ updatedAt: string;
3043
3144
  };
3044
3145
 
3045
- export type SignupDto = {
3146
+ export type ExpectedTransactionListResponseDto = {
3147
+ items: Array<ExpectedTransactionResponseDto>;
3046
3148
  /**
3047
- * Cloudflare Turnstile verification token (optional when Turnstile disabled)
3149
+ * Total count
3048
3150
  */
3049
- turnstileToken?: string;
3151
+ total: number;
3050
3152
  };
3051
3153
 
3052
- export type SignupResponseDto = {
3053
- /**
3054
- * JWT auth token
3055
- */
3056
- authToken: string;
3057
- /**
3058
- * Auto-generated access token
3059
- */
3060
- accessToken: string;
3154
+ export type ConfirmMatchDto = {
3061
3155
  /**
3062
- * Assigned user role
3156
+ * Transaction ID to match with
3063
3157
  */
3064
- role: 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
3158
+ transactionId: string;
3065
3159
  };
3066
3160
 
3067
- /**
3068
- * Assigned user role
3069
- */
3070
- export type role = 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
3071
-
3072
- export type UpdateUserSettingDto = {
3161
+ export type EnterNowDto = {
3073
3162
  /**
3074
- * Security ID
3163
+ * Override expense account (uses rule default if not provided)
3075
3164
  */
3076
- secId?: number;
3165
+ expenseAccount?: string;
3077
3166
  /**
3078
- * Annual interest rate
3167
+ * Override payment account (uses rule default if not provided)
3079
3168
  */
3080
- annualInterestRate?: number;
3169
+ paymentAccount?: string;
3081
3170
  /**
3082
- * Currency code
3171
+ * Override amount (uses expected amount if not provided)
3083
3172
  */
3084
- currency?: string;
3173
+ amount?: number;
3085
3174
  /**
3086
- * Base currency code
3175
+ * Override payee (uses rule default if not provided)
3087
3176
  */
3088
- baseCurrency?: string;
3177
+ payee?: string;
3089
3178
  /**
3090
- * Benchmark symbol
3179
+ * Optional narration
3091
3180
  */
3092
- benchmark?: string;
3181
+ narration?: string;
3182
+ };
3183
+
3184
+ export type ForecastItemDto = {
3093
3185
  /**
3094
- * Color scheme
3186
+ * Rule name
3095
3187
  */
3096
- colorScheme?: 'DARK' | 'LIGHT';
3188
+ rule: string;
3097
3189
  /**
3098
- * Date range filter
3190
+ * Rule ID
3099
3191
  */
3100
- dateRange?: string;
3192
+ ruleId: string;
3101
3193
  /**
3102
- * Emergency fund amount
3194
+ * Expected amount
3103
3195
  */
3104
- emergencyFund?: number;
3196
+ amount: number;
3105
3197
  /**
3106
- * Account filter IDs
3198
+ * Expected date (YYYY-MM-DD)
3107
3199
  */
3108
- 'filters.accounts'?: Array<string>;
3200
+ date: string;
3109
3201
  /**
3110
- * Asset class filters
3202
+ * Rule icon emoji
3111
3203
  */
3112
- 'filters.assetClasses'?: Array<string>;
3204
+ icon: string | null;
3113
3205
  /**
3114
- * Data source filter
3206
+ * Currency code
3115
3207
  */
3116
- 'filters.dataSource'?: string;
3208
+ currency: string;
3209
+ };
3210
+
3211
+ export type MonthlyForecastDto = {
3117
3212
  /**
3118
- * Symbol filter
3213
+ * Month (YYYY-MM)
3119
3214
  */
3120
- 'filters.symbol'?: string;
3215
+ month: string;
3121
3216
  /**
3122
- * Tag filters
3217
+ * Total expected outflow for the month
3123
3218
  */
3124
- 'filters.tags'?: Array<string>;
3219
+ expectedOutflow: number;
3125
3220
  /**
3126
- * Enable experimental features
3221
+ * Number of expected transactions
3127
3222
  */
3128
- isExperimentalFeatures?: boolean;
3223
+ itemCount: number;
3129
3224
  /**
3130
- * Enable restricted view mode
3225
+ * Breakdown by currency
3131
3226
  */
3132
- isRestrictedView?: boolean;
3227
+ byCurrency: {
3228
+ [key: string]: unknown;
3229
+ };
3133
3230
  /**
3134
- * Language code
3231
+ * Individual forecast items
3135
3232
  */
3136
- language?: string;
3233
+ items: Array<ForecastItemDto>;
3234
+ };
3235
+
3236
+ export type ForecastResponseDto = {
3137
3237
  /**
3138
- * Locale code
3238
+ * Monthly forecast data
3139
3239
  */
3140
- locale?: string;
3240
+ forecast: Array<MonthlyForecastDto>;
3141
3241
  /**
3142
- * Projected total amount
3242
+ * Total expected outflow across all months
3143
3243
  */
3144
- projectedTotalAmount?: number;
3244
+ totalOutflow: number;
3145
3245
  /**
3146
- * Retirement date in ISO 8601 format
3246
+ * Total by currency across all months
3147
3247
  */
3148
- retirementDate?: string;
3248
+ totalByCurrency: {
3249
+ [key: string]: unknown;
3250
+ };
3149
3251
  /**
3150
- * Savings rate percentage
3252
+ * Number of active recurring rules included
3151
3253
  */
3152
- savingsRate?: number;
3254
+ rulesCount: number;
3153
3255
  /**
3154
- * View mode
3256
+ * Forecast period start date
3155
3257
  */
3156
- viewMode?: 'DEFAULT' | 'ZEN';
3157
- };
3158
-
3159
- /**
3160
- * Color scheme
3161
- */
3162
- export type colorScheme = 'DARK' | 'LIGHT';
3163
-
3164
- /**
3165
- * View mode
3166
- */
3167
- export type viewMode = 'DEFAULT' | 'ZEN';
3168
-
3169
- export type UpdatePropertyDto = {
3258
+ periodStart: string;
3170
3259
  /**
3171
- * Property value
3260
+ * Forecast period end date
3172
3261
  */
3173
- value: string;
3262
+ periodEnd: string;
3174
3263
  };
3175
3264
 
3176
3265
  export type CreateTransactionRuleDto = {
@@ -3489,14 +3578,14 @@ export type UpdateTransactionRuleDto = {
3489
3578
  */
3490
3579
  amountMax?: number;
3491
3580
  priority?: number;
3492
- /**
3493
- * Enable or disable the rule
3494
- */
3495
- enabled?: boolean;
3496
3581
  additionalTags?: Array<unknown[]>;
3497
3582
  additionalMetadata?: {
3498
3583
  [key: string]: unknown;
3499
3584
  };
3585
+ /**
3586
+ * Enable or disable the rule
3587
+ */
3588
+ enabled?: boolean;
3500
3589
  };
3501
3590
 
3502
3591
  export type TestRuleDto = {
@@ -3686,6 +3775,10 @@ export type OnboardingAccountDto = {
3686
3775
  * Platform ID to bind the account to (references Platform.id); omit for unbound
3687
3776
  */
3688
3777
  platformId?: string;
3778
+ /**
3779
+ * User-set display name override (omit/null = keep the derived name)
3780
+ */
3781
+ displayName?: string | null;
3689
3782
  };
3690
3783
 
3691
3784
  export type OnboardingDto = {
@@ -4355,11 +4448,28 @@ export type ProcessNlpDto = {
4355
4448
  */
4356
4449
  selectedRuleId?: string;
4357
4450
  /**
4358
- * confirm_account echo-back: account path selected from the prior confirm_account response (suggestedAccount, similarAccounts[i], or a typed path). Applied directly when the session is confirming_account — no NL re-parse.
4451
+ * confirm_account echo-back: account path selected from the prior confirm_account response (suggestedAccount, similarAccounts[i].path, or a typed path). Applied directly when the session is confirming_account — no NL re-parse.
4359
4452
  */
4360
4453
  selectedAccount?: string;
4454
+ /**
4455
+ * Viewpoint account hint: the beancount path the user drilled into (e.g. from an account drill-down). Tie-break only — never overrides accounts resolved from the text. Must be an owned, OPEN Assets:/Liabilities: account; unresolvable hints are silently ignored.
4456
+ */
4457
+ viewpointAccount?: string;
4458
+ /**
4459
+ * Viewpoint category hint: the ADR-0075 Group segment the user drilled into (e.g. 'Food'). Resolved to a concrete OPEN account in that group; tie-break only — never overrides a category resolved from the text.
4460
+ */
4461
+ viewpointCategory?: string;
4462
+ /**
4463
+ * Companion flow root for viewpointCategory ('income' | 'expense'), mirroring the ADR-0126 list-endpoint invariant. Derived from the session's routed intent (multi-turn) when absent; a first-turn flow-less category hint is dropped — send the flow explicitly.
4464
+ */
4465
+ viewpointFlow?: 'income' | 'expense';
4361
4466
  };
4362
4467
 
4468
+ /**
4469
+ * Companion flow root for viewpointCategory ('income' | 'expense'), mirroring the ADR-0126 list-endpoint invariant. Derived from the session's routed intent (multi-turn) when absent; a first-turn flow-less category hint is dropped — send the flow explicitly.
4470
+ */
4471
+ export type viewpointFlow = 'income' | 'expense';
4472
+
4363
4473
  export type NlpTransactionInfoDto = {
4364
4474
  /**
4365
4475
  * Transaction ID
@@ -4585,6 +4695,17 @@ export type NlpRuleConfirmationDataDto = {
4585
4695
  reasons: Array<string>;
4586
4696
  };
4587
4697
 
4698
+ export type NlpAccountCandidateDto = {
4699
+ /**
4700
+ * Canonical beancount account path (echo back on selection)
4701
+ */
4702
+ path: string;
4703
+ /**
4704
+ * Localized display name (ADR-0114 read-time projection, user locale)
4705
+ */
4706
+ name: string;
4707
+ };
4708
+
4588
4709
  export type NlpAccountConfirmationDataDto = {
4589
4710
  /**
4590
4711
  * The invalid account name
@@ -4595,9 +4716,9 @@ export type NlpAccountConfirmationDataDto = {
4595
4716
  */
4596
4717
  suggestedAccount?: string;
4597
4718
  /**
4598
- * Similar accounts for user selection
4719
+ * Similar accounts for user selection (path + localized name, #680)
4599
4720
  */
4600
- similarAccounts: Array<string>;
4721
+ similarAccounts: Array<NlpAccountCandidateDto>;
4601
4722
  /**
4602
4723
  * Error message explaining the issue
4603
4724
  */
@@ -4781,7 +4902,12 @@ export type NlpResponseDto = {
4781
4902
  /**
4782
4903
  * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
4783
4904
  */
4784
- assetSubType?: 'transfer' | 'banking' | 'investment';
4905
+ assetSubType?:
4906
+ | 'transfer'
4907
+ | 'banking'
4908
+ | 'investment'
4909
+ | 'lend'
4910
+ | 'lend_collect';
4785
4911
  /**
4786
4912
  * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
4787
4913
  */
@@ -4898,7 +5024,12 @@ export type intent = 'expense' | 'asset' | 'income' | 'liability' | 'equity';
4898
5024
  /**
4899
5025
  * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
4900
5026
  */
4901
- export type assetSubType = 'transfer' | 'banking' | 'investment';
5027
+ export type assetSubType =
5028
+ | 'transfer'
5029
+ | 'banking'
5030
+ | 'investment'
5031
+ | 'lend'
5032
+ | 'lend_collect';
4902
5033
 
4903
5034
  /**
4904
5035
  * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
@@ -4963,7 +5094,7 @@ export type PlatformListItemDto = {
4963
5094
  /**
4964
5095
  * Platform type
4965
5096
  */
4966
- export type type3 =
5097
+ export type type4 =
4967
5098
  | 'BANK'
4968
5099
  | 'BROKERAGE'
4969
5100
  | 'CRYPTO_EXCHANGE'
@@ -5047,6 +5178,55 @@ export type PlatformMatchResponseDto = {
5047
5178
  */
5048
5179
  export type matchType2 = 'none' | 'exact' | 'prefix' | 'substring';
5049
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
+
5050
5230
  export type CreatePlatformDto = {
5051
5231
  /**
5052
5232
  * Platform name
@@ -5216,7 +5396,7 @@ export type AccountItemDto = {
5216
5396
  */
5217
5397
  name: string;
5218
5398
  /**
5219
- * Display name (last part of account path)
5399
+ * Display name: user-set name if provided (#762), else last part of account path
5220
5400
  */
5221
5401
  displayName: string;
5222
5402
  /**
@@ -5243,11 +5423,11 @@ export type PlatformGroupDto = {
5243
5423
  */
5244
5424
  platformName: string;
5245
5425
  /**
5246
- * Accounts within this platform
5426
+ * Accounts within this platform (Assets and Liabilities rows, #696)
5247
5427
  */
5248
5428
  accounts: Array<AccountItemDto>;
5249
5429
  /**
5250
- * FX-converted total balance in base currency
5430
+ * FX-converted total balance in base currency (nets Assets + Liabilities rows; can be negative)
5251
5431
  */
5252
5432
  totalBalance: string;
5253
5433
  /**
@@ -5259,7 +5439,7 @@ export type PlatformGroupDto = {
5259
5439
  */
5260
5440
  convertedBalance?: string;
5261
5441
  /**
5262
- * 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)
5263
5443
  */
5264
5444
  sharePct: number;
5265
5445
  };
@@ -5285,7 +5465,7 @@ export type AccountExchangeRateWarningDto = {
5285
5465
 
5286
5466
  export type AccountsSummaryDto = {
5287
5467
  /**
5288
- * Total number of accounts
5468
+ * Total number of accounts (balance sheet: Assets + Liabilities, #696)
5289
5469
  */
5290
5470
  totalAccounts: number;
5291
5471
  /**
@@ -5323,7 +5503,7 @@ export type AccountItemWithAssetClassDto = {
5323
5503
  */
5324
5504
  name: string;
5325
5505
  /**
5326
- * Display name (last part of account path)
5506
+ * Display name: user-set name if provided (#762), else last part of account path
5327
5507
  */
5328
5508
  displayName: string;
5329
5509
  /**
@@ -5637,9 +5817,7 @@ export type MonetaryDto = {
5637
5817
  /**
5638
5818
  * Converted to user base currency (Decimal string)
5639
5819
  */
5640
- baseCcyEquivalent?: {
5641
- [key: string]: unknown;
5642
- } | null;
5820
+ baseCcyEquivalent?: string | null;
5643
5821
  };
5644
5822
 
5645
5823
  export type CurrentPriceDto = {
@@ -5691,15 +5869,11 @@ export type HoldingPnlRowDto = {
5691
5869
  /**
5692
5870
  * Account settlement currency (ISO 4217), from cost currency
5693
5871
  */
5694
- accountCcy?: {
5695
- [key: string]: unknown;
5696
- } | null;
5872
+ accountCcy?: string | null;
5697
5873
  /**
5698
5874
  * Broker type derived from Platform.type
5699
5875
  */
5700
- brokerType?: {
5701
- [key: string]: unknown;
5702
- } | null;
5876
+ brokerType?: string | null;
5703
5877
  /**
5704
5878
  * Commodity symbol
5705
5879
  */
@@ -5709,9 +5883,7 @@ export type HoldingPnlRowDto = {
5709
5883
  */
5710
5884
  chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
5711
5885
  assetClass: string;
5712
- assetSubClass?: {
5713
- [key: string]: unknown;
5714
- } | null;
5886
+ assetSubClass?: string | null;
5715
5887
  /**
5716
5888
  * Net held units (Decimal string)
5717
5889
  */
@@ -5735,15 +5907,11 @@ export type HoldingPnlRowDto = {
5735
5907
  /**
5736
5908
  * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
5737
5909
  */
5738
- unrealizedPnlBase?: {
5739
- [key: string]: unknown;
5740
- } | null;
5910
+ unrealizedPnlBase?: string | null;
5741
5911
  /**
5742
5912
  * Unrealized P&L % (Decimal string)
5743
5913
  */
5744
- unrealizedPnlPct?: {
5745
- [key: string]: unknown;
5746
- } | null;
5914
+ unrealizedPnlPct?: string | null;
5747
5915
  /**
5748
5916
  * Historical FX rate applied to cost basis
5749
5917
  */
@@ -5755,9 +5923,7 @@ export type HoldingPnlRowDto = {
5755
5923
  /**
5756
5924
  * Share of invested assets % (Decimal string); only for invested chartTokens
5757
5925
  */
5758
- pctOfInvestedAssets?: {
5759
- [key: string]: unknown;
5760
- } | null;
5926
+ pctOfInvestedAssets?: string | null;
5761
5927
  /**
5762
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
5763
5929
  */
@@ -5781,21 +5947,15 @@ export type HoldingPnlWarningDto = {
5781
5947
  | 'OVERSOLD_LOTS'
5782
5948
  | 'NO_PRICE'
5783
5949
  | 'MIXED_COST_CURRENCY';
5784
- symbol?: {
5785
- [key: string]: unknown;
5786
- } | null;
5787
- accountId?: {
5788
- [key: string]: unknown;
5789
- } | null;
5790
- currency?: {
5791
- [key: string]: unknown;
5792
- } | null;
5950
+ symbol?: string | null;
5951
+ accountId?: string | null;
5952
+ currency?: string | null;
5793
5953
  };
5794
5954
 
5795
5955
  /**
5796
5956
  * Warning type
5797
5957
  */
5798
- export type type4 =
5958
+ export type type5 =
5799
5959
  | 'MISSING_COST_FX_RATE'
5800
5960
  | 'MISSING_MARKET_FX_RATE'
5801
5961
  | 'MISSING_SALE_PRICE'
@@ -5834,132 +5994,205 @@ export type AnonymousLoginResponseDto = {
5834
5994
  authToken: string;
5835
5995
  };
5836
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
+
5837
6114
  export type SymbolSearchResultDto = {
5838
6115
  symbol: string;
5839
- name?: {
5840
- [key: string]: unknown;
5841
- } | null;
5842
- exchange?: {
5843
- [key: string]: unknown;
5844
- } | null;
6116
+ name?: string | null;
6117
+ exchange?: string | null;
5845
6118
  /**
5846
6119
  * OpenBB asset_type (e.g. stock, etf)
5847
6120
  */
5848
- assetType?: {
5849
- [key: string]: unknown;
5850
- } | null;
6121
+ assetType?: string | null;
5851
6122
  /**
5852
6123
  * IGN asset class (region.types.ts ASSET_CLASSES)
5853
6124
  */
5854
- assetClass?: {
5855
- [key: string]: unknown;
5856
- } | null;
6125
+ assetClass?: string | null;
5857
6126
  /**
5858
6127
  * IGN asset sub-class (region.types.ts ASSET_SUB_CLASSES)
5859
6128
  */
5860
- assetSubClass?: {
5861
- [key: string]: unknown;
5862
- } | null;
6129
+ assetSubClass?: string | null;
5863
6130
  /**
5864
6131
  * Trading currency (extra_data or inferred from exchange)
5865
6132
  */
5866
- currency?: {
5867
- [key: string]: unknown;
5868
- } | null;
6133
+ currency?: string | null;
5869
6134
  };
5870
6135
 
5871
6136
  export type SymbolQuoteDto = {
5872
6137
  symbol?: string;
5873
- name?: {
5874
- [key: string]: unknown;
5875
- } | null;
5876
- exchange?: {
5877
- [key: string]: unknown;
5878
- } | null;
6138
+ name?: string | null;
6139
+ exchange?: string | null;
5879
6140
  /**
5880
6141
  * OpenBB asset_type
5881
6142
  */
5882
- assetType?: {
5883
- [key: string]: unknown;
5884
- } | null;
6143
+ assetType?: string | null;
5885
6144
  /**
5886
6145
  * IGN asset class
5887
6146
  */
5888
- assetClass?: {
5889
- [key: string]: unknown;
5890
- } | null;
6147
+ assetClass?: string | null;
5891
6148
  /**
5892
6149
  * IGN asset sub-class
5893
6150
  */
5894
- assetSubClass?: {
5895
- [key: string]: unknown;
5896
- } | null;
6151
+ assetSubClass?: string | null;
5897
6152
  /**
5898
6153
  * Trading currency (extra_data or inferred from exchange)
5899
6154
  */
5900
- currency?: {
5901
- [key: string]: unknown;
5902
- } | null;
6155
+ currency?: string | null;
5903
6156
  /**
5904
6157
  * Latest price (Decimal string)
5905
6158
  */
5906
- price?: {
5907
- [key: string]: unknown;
5908
- } | null;
6159
+ price?: string | null;
5909
6160
  /**
5910
6161
  * Date the price was observed (ISO yyyy-MM-dd)
5911
6162
  */
5912
- priceDate?: {
5913
- [key: string]: unknown;
5914
- } | null;
6163
+ priceDate?: string | null;
5915
6164
  /**
5916
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.
5917
6166
  */
5918
- changePercent?: {
5919
- [key: string]: unknown;
5920
- } | null;
6167
+ changePercent?: number | null;
5921
6168
  /**
5922
6169
  * Previous close (Decimal string)
5923
6170
  */
5924
- prevClose?: {
5925
- [key: string]: unknown;
5926
- } | null;
6171
+ prevClose?: string | null;
5927
6172
  /**
5928
6173
  * Day open (Decimal string)
5929
6174
  */
5930
- open?: {
5931
- [key: string]: unknown;
5932
- } | null;
6175
+ open?: string | null;
5933
6176
  /**
5934
6177
  * Day high (Decimal string)
5935
6178
  */
5936
- high?: {
5937
- [key: string]: unknown;
5938
- } | null;
6179
+ high?: string | null;
5939
6180
  /**
5940
6181
  * Day low (Decimal string)
5941
6182
  */
5942
- low?: {
5943
- [key: string]: unknown;
5944
- } | null;
6183
+ low?: string | null;
5945
6184
  /**
5946
6185
  * Day volume (Decimal string)
5947
6186
  */
5948
- volume?: {
5949
- [key: string]: unknown;
5950
- } | null;
6187
+ volume?: string | null;
5951
6188
  /**
5952
6189
  * 52-week high (Decimal string)
5953
6190
  */
5954
- yearHigh?: {
5955
- [key: string]: unknown;
5956
- } | null;
6191
+ yearHigh?: string | null;
5957
6192
  /**
5958
6193
  * 52-week low (Decimal string)
5959
6194
  */
5960
- yearLow?: {
5961
- [key: string]: unknown;
5962
- } | null;
6195
+ yearLow?: string | null;
5963
6196
  };
5964
6197
 
5965
6198
  export type AccountControllerCreateData = {
@@ -6290,7 +6523,7 @@ export type AccountControllerAddOpeningBalanceResponse =
6290
6523
 
6291
6524
  export type AccountStandardsControllerGetTemplatesData = {
6292
6525
  /**
6293
- * Region code (cn, us, de)
6526
+ * Region code (any ISO alpha-2; not-yet-open codes return the universal-only catalog)
6294
6527
  */
6295
6528
  region:
6296
6529
  | 'ad'
@@ -6300,26 +6533,192 @@ export type AccountStandardsControllerGetTemplatesData = {
6300
6533
  | 'al'
6301
6534
  | 'am'
6302
6535
  | 'ao'
6536
+ | 'ar'
6537
+ | 'at'
6303
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'
6304
6551
  | 'br'
6552
+ | 'bs'
6553
+ | 'bt'
6554
+ | 'bw'
6555
+ | 'by'
6556
+ | 'bz'
6305
6557
  | 'ca'
6558
+ | 'cd'
6559
+ | 'cf'
6560
+ | 'cg'
6561
+ | 'ch'
6562
+ | 'ci'
6563
+ | 'cl'
6564
+ | 'cm'
6306
6565
  | 'cn'
6566
+ | 'co'
6567
+ | 'cr'
6568
+ | 'cu'
6569
+ | 'cv'
6570
+ | 'cy'
6571
+ | 'cz'
6307
6572
  | 'de'
6573
+ | 'dj'
6574
+ | 'dk'
6575
+ | 'dm'
6576
+ | 'do'
6308
6577
  | 'dz'
6578
+ | 'ec'
6579
+ | 'ee'
6580
+ | 'eg'
6581
+ | 'er'
6309
6582
  | 'es'
6583
+ | 'et'
6584
+ | 'fj'
6585
+ | 'fm'
6310
6586
  | 'fr'
6587
+ | 'ga'
6311
6588
  | 'gb'
6589
+ | 'gd'
6590
+ | 'ge'
6591
+ | 'gh'
6592
+ | 'gm'
6593
+ | 'gn'
6594
+ | 'gq'
6595
+ | 'gr'
6596
+ | 'gt'
6597
+ | 'gw'
6598
+ | 'gy'
6312
6599
  | 'hk'
6600
+ | 'hn'
6601
+ | 'hr'
6602
+ | 'ht'
6603
+ | 'hu'
6604
+ | 'id'
6605
+ | 'ie'
6606
+ | 'il'
6313
6607
  | 'in'
6608
+ | 'iq'
6609
+ | 'ir'
6610
+ | 'is'
6314
6611
  | 'it'
6612
+ | 'jm'
6613
+ | 'jo'
6315
6614
  | 'jp'
6615
+ | 'ke'
6616
+ | 'kg'
6617
+ | 'kh'
6618
+ | 'ki'
6619
+ | 'km'
6620
+ | 'kn'
6316
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'
6317
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'
6318
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'
6319
6703
  | 'tw'
6320
- | 'us';
6321
- /**
6322
- * 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
6323
6722
  */
6324
6723
  search?: string;
6325
6724
  /**
@@ -6337,7 +6736,7 @@ export type AccountStandardsControllerGetTemplateMetadataData = {
6337
6736
  */
6338
6737
  path: string;
6339
6738
  /**
6340
- * Region code for tenant context
6739
+ * Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
6341
6740
  */
6342
6741
  region:
6343
6742
  | 'ad'
@@ -6347,24 +6746,190 @@ export type AccountStandardsControllerGetTemplateMetadataData = {
6347
6746
  | 'al'
6348
6747
  | 'am'
6349
6748
  | 'ao'
6749
+ | 'ar'
6750
+ | 'at'
6350
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'
6351
6764
  | 'br'
6765
+ | 'bs'
6766
+ | 'bt'
6767
+ | 'bw'
6768
+ | 'by'
6769
+ | 'bz'
6352
6770
  | 'ca'
6771
+ | 'cd'
6772
+ | 'cf'
6773
+ | 'cg'
6774
+ | 'ch'
6775
+ | 'ci'
6776
+ | 'cl'
6777
+ | 'cm'
6353
6778
  | 'cn'
6779
+ | 'co'
6780
+ | 'cr'
6781
+ | 'cu'
6782
+ | 'cv'
6783
+ | 'cy'
6784
+ | 'cz'
6354
6785
  | 'de'
6786
+ | 'dj'
6787
+ | 'dk'
6788
+ | 'dm'
6789
+ | 'do'
6355
6790
  | 'dz'
6791
+ | 'ec'
6792
+ | 'ee'
6793
+ | 'eg'
6794
+ | 'er'
6356
6795
  | 'es'
6796
+ | 'et'
6797
+ | 'fj'
6798
+ | 'fm'
6357
6799
  | 'fr'
6800
+ | 'ga'
6358
6801
  | 'gb'
6802
+ | 'gd'
6803
+ | 'ge'
6804
+ | 'gh'
6805
+ | 'gm'
6806
+ | 'gn'
6807
+ | 'gq'
6808
+ | 'gr'
6809
+ | 'gt'
6810
+ | 'gw'
6811
+ | 'gy'
6359
6812
  | 'hk'
6813
+ | 'hn'
6814
+ | 'hr'
6815
+ | 'ht'
6816
+ | 'hu'
6817
+ | 'id'
6818
+ | 'ie'
6819
+ | 'il'
6360
6820
  | 'in'
6821
+ | 'iq'
6822
+ | 'ir'
6823
+ | 'is'
6361
6824
  | 'it'
6825
+ | 'jm'
6826
+ | 'jo'
6362
6827
  | 'jp'
6828
+ | 'ke'
6829
+ | 'kg'
6830
+ | 'kh'
6831
+ | 'ki'
6832
+ | 'km'
6833
+ | 'kn'
6363
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'
6364
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'
6365
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'
6366
6916
  | 'tw'
6367
- | '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';
6368
6933
  };
6369
6934
 
6370
6935
  export type AccountStandardsControllerGetTemplateMetadataResponse =
@@ -6372,7 +6937,7 @@ export type AccountStandardsControllerGetTemplateMetadataResponse =
6372
6937
 
6373
6938
  export type AccountStandardsControllerGetRegionsData = {
6374
6939
  /**
6375
- * Region code for tenant context
6940
+ * Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
6376
6941
  */
6377
6942
  region:
6378
6943
  | 'ad'
@@ -6382,24 +6947,190 @@ export type AccountStandardsControllerGetRegionsData = {
6382
6947
  | 'al'
6383
6948
  | 'am'
6384
6949
  | 'ao'
6950
+ | 'ar'
6951
+ | 'at'
6385
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'
6386
6965
  | 'br'
6966
+ | 'bs'
6967
+ | 'bt'
6968
+ | 'bw'
6969
+ | 'by'
6970
+ | 'bz'
6387
6971
  | 'ca'
6972
+ | 'cd'
6973
+ | 'cf'
6974
+ | 'cg'
6975
+ | 'ch'
6976
+ | 'ci'
6977
+ | 'cl'
6978
+ | 'cm'
6388
6979
  | 'cn'
6980
+ | 'co'
6981
+ | 'cr'
6982
+ | 'cu'
6983
+ | 'cv'
6984
+ | 'cy'
6985
+ | 'cz'
6389
6986
  | 'de'
6987
+ | 'dj'
6988
+ | 'dk'
6989
+ | 'dm'
6990
+ | 'do'
6390
6991
  | 'dz'
6992
+ | 'ec'
6993
+ | 'ee'
6994
+ | 'eg'
6995
+ | 'er'
6391
6996
  | 'es'
6997
+ | 'et'
6998
+ | 'fj'
6999
+ | 'fm'
6392
7000
  | 'fr'
7001
+ | 'ga'
6393
7002
  | 'gb'
7003
+ | 'gd'
7004
+ | 'ge'
7005
+ | 'gh'
7006
+ | 'gm'
7007
+ | 'gn'
7008
+ | 'gq'
7009
+ | 'gr'
7010
+ | 'gt'
7011
+ | 'gw'
7012
+ | 'gy'
6394
7013
  | 'hk'
7014
+ | 'hn'
7015
+ | 'hr'
7016
+ | 'ht'
7017
+ | 'hu'
7018
+ | 'id'
7019
+ | 'ie'
7020
+ | 'il'
6395
7021
  | 'in'
7022
+ | 'iq'
7023
+ | 'ir'
7024
+ | 'is'
6396
7025
  | 'it'
7026
+ | 'jm'
7027
+ | 'jo'
6397
7028
  | 'jp'
7029
+ | 'ke'
7030
+ | 'kg'
7031
+ | 'kh'
7032
+ | 'ki'
7033
+ | 'km'
7034
+ | 'kn'
6398
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'
6399
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'
6400
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'
6401
7117
  | 'tw'
6402
- | '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';
6403
7134
  };
6404
7135
 
6405
7136
  export type AccountStandardsControllerGetRegionsResponse =
@@ -6449,7 +7180,7 @@ export type TransactionControllerListData = {
6449
7180
  */
6450
7181
  accountId?: string;
6451
7182
  /**
6452
- * 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).
6453
7184
  */
6454
7185
  category?: string;
6455
7186
  /**
@@ -6460,6 +7191,10 @@ export type TransactionControllerListData = {
6460
7191
  * Filter by end date (inclusive), format: YYYY-MM-DD
6461
7192
  */
6462
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';
6463
7198
  /**
6464
7199
  * Number of items per page (1-100, default: 20)
6465
7200
  */
@@ -6502,9 +7237,9 @@ export type TransactionControllerListData = {
6502
7237
  */
6503
7238
  search?: string;
6504
7239
  /**
6505
- * 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).
6506
7241
  */
6507
- status?: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
7242
+ status?: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED' | 'ALL';
6508
7243
  };
6509
7244
 
6510
7245
  export type TransactionControllerListResponse = TransactionListResponseDto;
@@ -7261,8 +7996,7 @@ export type PayeeProfileAdminControllerUnverifyData = {
7261
7996
  id: string;
7262
7997
  };
7263
7998
 
7264
- export type PayeeProfileAdminControllerUnverifyResponse =
7265
- PayeeProfileResponseDto;
7999
+ export type PayeeProfileAdminControllerUnverifyResponse = void;
7266
8000
 
7267
8001
  export type CommodityControllerCreateData = {
7268
8002
  /**
@@ -7526,7 +8260,168 @@ export type CommodityControllerBulkCreateData = {
7526
8260
  | 'us';
7527
8261
  };
7528
8262
 
7529
- 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;
7530
8425
 
7531
8426
  export type PriceControllerCreateData = {
7532
8427
  /**
@@ -7775,6 +8670,93 @@ export type PriceControllerBulkCreateData = {
7775
8670
 
7776
8671
  export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
7777
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
+
7778
8760
  export type RecurringRuleControllerCreateData = {
7779
8761
  /**
7780
8762
  * Region code for tenant context
@@ -8251,8 +9233,7 @@ export type ExpectedTransactionControllerUndoSkipData = {
8251
9233
  | 'us';
8252
9234
  };
8253
9235
 
8254
- export type ExpectedTransactionControllerUndoSkipResponse =
8255
- ExpectedTransactionResponseDto;
9236
+ export type ExpectedTransactionControllerUndoSkipResponse = void;
8256
9237
 
8257
9238
  export type ExpectedTransactionControllerConfirmMatchData = {
8258
9239
  /**
@@ -8329,7 +9310,7 @@ export type ExpectedTransactionControllerUnmatchData = {
8329
9310
  | 'us';
8330
9311
  };
8331
9312
 
8332
- export type ExpectedTransactionControllerUnmatchResponse = unknown;
9313
+ export type ExpectedTransactionControllerUnmatchResponse = void;
8333
9314
 
8334
9315
  export type ExpectedTransactionControllerEnterNowData = {
8335
9316
  /**
@@ -8370,170 +9351,11 @@ export type ExpectedTransactionControllerEnterNowData = {
8370
9351
 
8371
9352
  export type ExpectedTransactionControllerEnterNowResponse = unknown;
8372
9353
 
8373
- export type ForecastControllerGetForecastData = {
8374
- /**
8375
- * Number of months to forecast (1-12, default 3)
8376
- */
8377
- months?: number;
8378
- /**
8379
- * Region code for tenant context
8380
- */
8381
- region:
8382
- | 'ad'
8383
- | 'ae'
8384
- | 'af'
8385
- | 'ag'
8386
- | 'al'
8387
- | 'am'
8388
- | 'ao'
8389
- | 'au'
8390
- | 'br'
8391
- | 'ca'
8392
- | 'cn'
8393
- | 'de'
8394
- | 'dz'
8395
- | 'es'
8396
- | 'fr'
8397
- | 'gb'
8398
- | 'hk'
8399
- | 'in'
8400
- | 'it'
8401
- | 'jp'
8402
- | 'kr'
8403
- | 'nl'
8404
- | 'sg'
8405
- | 'tw'
8406
- | 'us';
8407
- };
8408
-
8409
- export type ForecastControllerGetForecastResponse = ForecastResponseDto;
8410
-
8411
- export type ReportingControllerGetPortfolioTrendsData = {
8412
- /**
8413
- * Data granularity
8414
- */
8415
- granularity?: 'day' | 'week' | 'month';
8416
- /**
8417
- * Time period
8418
- */
8419
- period?: '1m' | '3m' | '6m' | '1y';
8420
- /**
8421
- * Region code for tenant context
8422
- */
8423
- region:
8424
- | 'ad'
8425
- | 'ae'
8426
- | 'af'
8427
- | 'ag'
8428
- | 'al'
8429
- | 'am'
8430
- | 'ao'
8431
- | 'au'
8432
- | 'br'
8433
- | 'ca'
8434
- | 'cn'
8435
- | 'de'
8436
- | 'dz'
8437
- | 'es'
8438
- | 'fr'
8439
- | 'gb'
8440
- | 'hk'
8441
- | 'in'
8442
- | 'it'
8443
- | 'jp'
8444
- | 'kr'
8445
- | 'nl'
8446
- | 'sg'
8447
- | 'tw'
8448
- | 'us';
8449
- };
8450
-
8451
- export type ReportingControllerGetPortfolioTrendsResponse =
8452
- PortfolioTrendsResponseDto;
8453
-
8454
- export type ReportingControllerGetCashFlowTrendsData = {
8455
- /**
8456
- * Data granularity (accepted for API symmetry; v1 returns month buckets)
8457
- */
8458
- granularity?: 'day' | 'week' | 'month';
8459
- /**
8460
- * Time period
8461
- */
8462
- period?: '1m' | '3m' | '6m' | '1y';
8463
- /**
8464
- * Region code for tenant context
8465
- */
8466
- region:
8467
- | 'ad'
8468
- | 'ae'
8469
- | 'af'
8470
- | 'ag'
8471
- | 'al'
8472
- | 'am'
8473
- | 'ao'
8474
- | 'au'
8475
- | 'br'
8476
- | 'ca'
8477
- | 'cn'
8478
- | 'de'
8479
- | 'dz'
8480
- | 'es'
8481
- | 'fr'
8482
- | 'gb'
8483
- | 'hk'
8484
- | 'in'
8485
- | 'it'
8486
- | 'jp'
8487
- | 'kr'
8488
- | 'nl'
8489
- | 'sg'
8490
- | 'tw'
8491
- | 'us';
8492
- };
8493
-
8494
- export type ReportingControllerGetCashFlowTrendsResponse =
8495
- CashFlowTrendsResponseDto;
8496
-
8497
- export type ReportingControllerGenerateSnapshotData = {
8498
- /**
8499
- * Region code for tenant context
8500
- */
8501
- region:
8502
- | 'ad'
8503
- | 'ae'
8504
- | 'af'
8505
- | 'ag'
8506
- | 'al'
8507
- | 'am'
8508
- | 'ao'
8509
- | 'au'
8510
- | 'br'
8511
- | 'ca'
8512
- | 'cn'
8513
- | 'de'
8514
- | 'dz'
8515
- | 'es'
8516
- | 'fr'
8517
- | 'gb'
8518
- | 'hk'
8519
- | 'in'
8520
- | 'it'
8521
- | 'jp'
8522
- | 'kr'
8523
- | 'nl'
8524
- | 'sg'
8525
- | 'tw'
8526
- | 'us';
8527
- /**
8528
- * Optional date (defaults to today)
8529
- */
8530
- requestBody: GenerateSnapshotBody;
8531
- };
8532
-
8533
- export type ReportingControllerGenerateSnapshotResponse =
8534
- GenerateSnapshotResponse;
8535
-
8536
- export type ReportingControllerBackfillSnapshotsData = {
9354
+ export type ForecastControllerGetForecastData = {
9355
+ /**
9356
+ * Number of months to forecast (1-12, default 3)
9357
+ */
9358
+ months?: number;
8537
9359
  /**
8538
9360
  * Region code for tenant context
8539
9361
  */
@@ -8563,98 +9385,9 @@ export type ReportingControllerBackfillSnapshotsData = {
8563
9385
  | 'sg'
8564
9386
  | 'tw'
8565
9387
  | 'us';
8566
- requestBody: BackfillSnapshotsBody;
8567
- };
8568
-
8569
- export type ReportingControllerBackfillSnapshotsResponse =
8570
- BackfillSnapshotsResponse;
8571
-
8572
- export type UserControllerDeleteOwnUserData = {
8573
- requestBody: DeleteOwnUserDto;
8574
- };
8575
-
8576
- export type UserControllerDeleteOwnUserResponse = void;
8577
-
8578
- export type UserControllerGetUserData = {
8579
- acceptLanguage: string;
8580
- };
8581
-
8582
- export type UserControllerGetUserResponse = UserResponseDto;
8583
-
8584
- export type UserControllerSignupUserData = {
8585
- requestBody: SignupDto;
8586
- };
8587
-
8588
- export type UserControllerSignupUserResponse = SignupResponseDto;
8589
-
8590
- export type UserControllerDeleteUserData = {
8591
- /**
8592
- * User ID to delete
8593
- */
8594
- id: string;
8595
- };
8596
-
8597
- export type UserControllerDeleteUserResponse = void;
8598
-
8599
- export type UserControllerGetUserInfoData = {
8600
- /**
8601
- * User ID
8602
- */
8603
- id: string;
8604
- };
8605
-
8606
- export type UserControllerGetUserInfoResponse = unknown;
8607
-
8608
- export type UserControllerUpdateUserSettingData = {
8609
- requestBody: UpdateUserSettingDto;
8610
- };
8611
-
8612
- export type UserControllerUpdateUserSettingResponse = unknown;
8613
-
8614
- export type UserControllerGetAllUserSettingsByPageData = {
8615
- /**
8616
- * Page number
8617
- */
8618
- pageNo: number;
8619
- /**
8620
- * Page size
8621
- */
8622
- pageSize: number;
8623
- };
8624
-
8625
- export type UserControllerGetAllUserSettingsByPageResponse = unknown;
8626
-
8627
- export type UserControllerGetAssetLiabilitySummaryResponse = unknown;
8628
-
8629
- export type PropertyControllerGetAllResponse = unknown;
8630
-
8631
- export type PropertyControllerGetByKeyData = {
8632
- /**
8633
- * Property key
8634
- */
8635
- key: string;
8636
- };
8637
-
8638
- export type PropertyControllerGetByKeyResponse = unknown;
8639
-
8640
- export type PropertyControllerUpdateData = {
8641
- /**
8642
- * Property key
8643
- */
8644
- key: string;
8645
- requestBody: UpdatePropertyDto;
8646
- };
8647
-
8648
- export type PropertyControllerUpdateResponse = unknown;
8649
-
8650
- export type PropertyControllerDeleteData = {
8651
- /**
8652
- * Property key
8653
- */
8654
- key: string;
8655
9388
  };
8656
9389
 
8657
- export type PropertyControllerDeleteResponse = void;
9390
+ export type ForecastControllerGetForecastResponse = ForecastResponseDto;
8658
9391
 
8659
9392
  export type TransactionRuleControllerCreateData = {
8660
9393
  /**
@@ -9350,7 +10083,7 @@ export type EventControllerGetSliceResponse = unknown;
9350
10083
 
9351
10084
  export type OnboardingControllerBootstrapData = {
9352
10085
  /**
9353
- * 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)
9354
10087
  */
9355
10088
  region:
9356
10089
  | 'ad'
@@ -9360,24 +10093,190 @@ export type OnboardingControllerBootstrapData = {
9360
10093
  | 'al'
9361
10094
  | 'am'
9362
10095
  | 'ao'
10096
+ | 'ar'
10097
+ | 'at'
9363
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'
9364
10111
  | 'br'
10112
+ | 'bs'
10113
+ | 'bt'
10114
+ | 'bw'
10115
+ | 'by'
10116
+ | 'bz'
9365
10117
  | 'ca'
10118
+ | 'cd'
10119
+ | 'cf'
10120
+ | 'cg'
10121
+ | 'ch'
10122
+ | 'ci'
10123
+ | 'cl'
10124
+ | 'cm'
9366
10125
  | 'cn'
10126
+ | 'co'
10127
+ | 'cr'
10128
+ | 'cu'
10129
+ | 'cv'
10130
+ | 'cy'
10131
+ | 'cz'
9367
10132
  | 'de'
10133
+ | 'dj'
10134
+ | 'dk'
10135
+ | 'dm'
10136
+ | 'do'
9368
10137
  | 'dz'
10138
+ | 'ec'
10139
+ | 'ee'
10140
+ | 'eg'
10141
+ | 'er'
9369
10142
  | 'es'
10143
+ | 'et'
10144
+ | 'fj'
10145
+ | 'fm'
9370
10146
  | 'fr'
10147
+ | 'ga'
9371
10148
  | 'gb'
10149
+ | 'gd'
10150
+ | 'ge'
10151
+ | 'gh'
10152
+ | 'gm'
10153
+ | 'gn'
10154
+ | 'gq'
10155
+ | 'gr'
10156
+ | 'gt'
10157
+ | 'gw'
10158
+ | 'gy'
9372
10159
  | 'hk'
10160
+ | 'hn'
10161
+ | 'hr'
10162
+ | 'ht'
10163
+ | 'hu'
10164
+ | 'id'
10165
+ | 'ie'
10166
+ | 'il'
9373
10167
  | 'in'
10168
+ | 'iq'
10169
+ | 'ir'
10170
+ | 'is'
9374
10171
  | 'it'
10172
+ | 'jm'
10173
+ | 'jo'
9375
10174
  | 'jp'
10175
+ | 'ke'
10176
+ | 'kg'
10177
+ | 'kh'
10178
+ | 'ki'
10179
+ | 'km'
10180
+ | 'kn'
9376
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'
9377
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'
9378
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'
9379
10263
  | 'tw'
9380
- | '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';
9381
10280
  requestBody: OnboardingDto;
9382
10281
  };
9383
10282
 
@@ -9528,7 +10427,7 @@ export type ReconciliationControllerHistoryData = {
9528
10427
  export type ReconciliationControllerHistoryResponse =
9529
10428
  Array<ReconciliationRecordDto>;
9530
10429
 
9531
- export type ExportControllerExportBeancountResponse = unknown;
10430
+ export type ExportControllerExportBeancountResponse = Blob | File;
9532
10431
 
9533
10432
  export type FileImportControllerImportFileData = {
9534
10433
  /**
@@ -10286,6 +11185,24 @@ export type PlatformControllerMatchPlatformsData = {
10286
11185
 
10287
11186
  export type PlatformControllerMatchPlatformsResponse = PlatformMatchResponseDto;
10288
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
+
10289
11206
  export type PlatformControllerUpdateData = {
10290
11207
  /**
10291
11208
  * Platform ID
@@ -10535,6 +11452,42 @@ export type AuthControllerAccessTokenLoginData = {
10535
11452
 
10536
11453
  export type AuthControllerAccessTokenLoginResponse = AnonymousLoginResponseDto;
10537
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
+
10538
11491
  export type CacheControllerFlushCacheResponse = unknown;
10539
11492
 
10540
11493
  export type ExchangeRateControllerGetExchangeRateData = {
@@ -11228,7 +12181,7 @@ export type $OpenApiTs = {
11228
12181
  /**
11229
12182
  * Payee profile unverified successfully
11230
12183
  */
11231
- 200: PayeeProfileResponseDto;
12184
+ 204: void;
11232
12185
  /**
11233
12186
  * Admin access required
11234
12187
  */
@@ -11335,598 +12288,598 @@ export type $OpenApiTs = {
11335
12288
  };
11336
12289
  };
11337
12290
  };
11338
- '/api/v1/{region}/bean/prices': {
11339
- post: {
11340
- req: PriceControllerCreateData;
12291
+ '/api/v1/{region}/reporting/portfolio/trends': {
12292
+ get: {
12293
+ req: ReportingControllerGetPortfolioTrendsData;
11341
12294
  res: {
11342
12295
  /**
11343
- * Price created successfully
11344
- */
11345
- 201: PriceResponseDto;
11346
- /**
11347
- * Currency or quoteCurrency commodity not found
11348
- */
11349
- 404: unknown;
11350
- /**
11351
- * Price already exists for this currency pair and date
12296
+ * Trends retrieved successfully
11352
12297
  */
11353
- 409: unknown;
11354
- };
11355
- };
11356
- get: {
11357
- req: PriceControllerFindAllData;
11358
- res: {
12298
+ 200: PortfolioTrendsResponseDto;
11359
12299
  /**
11360
- * Prices retrieved successfully
12300
+ * User not authenticated
11361
12301
  */
11362
- 200: PriceListResponseDto;
12302
+ 401: unknown;
11363
12303
  };
11364
12304
  };
11365
12305
  };
11366
- '/api/v1/{region}/bean/prices/{id}': {
12306
+ '/api/v1/{region}/reporting/cash-flow/trends': {
11367
12307
  get: {
11368
- req: PriceControllerFindOneData;
11369
- res: {
11370
- /**
11371
- * Price retrieved successfully
11372
- */
11373
- 200: PriceResponseDto;
11374
- /**
11375
- * Price not found
11376
- */
11377
- 404: unknown;
11378
- };
11379
- };
11380
- put: {
11381
- req: PriceControllerUpdateData;
12308
+ req: ReportingControllerGetCashFlowTrendsData;
11382
12309
  res: {
11383
12310
  /**
11384
- * Price updated successfully
11385
- */
11386
- 200: PriceResponseDto;
11387
- /**
11388
- * Price not found
12311
+ * Cash-flow trends retrieved successfully
11389
12312
  */
11390
- 404: unknown;
12313
+ 200: CashFlowTrendsResponseDto;
11391
12314
  /**
11392
- * Updated price conflicts with existing price
12315
+ * User not authenticated
11393
12316
  */
11394
- 409: unknown;
12317
+ 401: unknown;
11395
12318
  };
11396
12319
  };
11397
- delete: {
11398
- req: PriceControllerDeleteData;
12320
+ };
12321
+ '/api/v1/{region}/reporting/snapshots/generate': {
12322
+ post: {
12323
+ req: ReportingControllerGenerateSnapshotData;
11399
12324
  res: {
11400
12325
  /**
11401
- * Price deleted successfully
12326
+ * Snapshot generated successfully
11402
12327
  */
11403
- 204: void;
12328
+ 200: GenerateSnapshotResponse;
11404
12329
  /**
11405
- * Price not found
12330
+ * Invalid date format
11406
12331
  */
11407
- 404: unknown;
11408
- };
11409
- };
11410
- };
11411
- '/api/v1/{region}/bean/prices/bulk': {
11412
- post: {
11413
- req: PriceControllerBulkCreateData;
11414
- res: {
12332
+ 400: unknown;
11415
12333
  /**
11416
- * Prices created successfully
12334
+ * User not authenticated
11417
12335
  */
11418
- 201: Array<PriceResponseDto>;
12336
+ 401: unknown;
11419
12337
  };
11420
12338
  };
11421
12339
  };
11422
- '/api/v1/{region}/bean/recurring-rules': {
12340
+ '/api/v1/{region}/reporting/snapshots/backfill': {
11423
12341
  post: {
11424
- req: RecurringRuleControllerCreateData;
12342
+ req: ReportingControllerBackfillSnapshotsData;
11425
12343
  res: {
11426
12344
  /**
11427
- * Rule created successfully
12345
+ * Backfill completed successfully
11428
12346
  */
11429
- 201: RecurringRuleResponseDto;
12347
+ 200: BackfillSnapshotsResponse;
11430
12348
  /**
11431
- * Invalid input data (e.g., autoCreate without accounts)
12349
+ * Invalid date format or range
11432
12350
  */
11433
12351
  400: unknown;
11434
12352
  /**
11435
- * Rule with same name already exists
12353
+ * User not authenticated
11436
12354
  */
11437
- 409: unknown;
11438
- };
11439
- };
11440
- get: {
11441
- req: RecurringRuleControllerFindAllData;
11442
- res: {
12355
+ 401: unknown;
11443
12356
  /**
11444
- * Rules retrieved successfully
12357
+ * Backfill already in progress for this user
11445
12358
  */
11446
- 200: Array<RecurringRuleResponseDto>;
12359
+ 409: unknown;
11447
12360
  };
11448
12361
  };
11449
12362
  };
11450
- '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}': {
12363
+ '/api/v1/{region}/bean/prices': {
11451
12364
  post: {
11452
- req: RecurringRuleControllerCreateFromTransactionData;
12365
+ req: PriceControllerCreateData;
11453
12366
  res: {
11454
12367
  /**
11455
- * Rule created successfully
12368
+ * Price created successfully
12369
+ */
12370
+ 201: PriceResponseDto;
12371
+ /**
12372
+ * Currency or quoteCurrency commodity not found
11456
12373
  */
11457
- 201: RecurringRuleResponseDto;
12374
+ 404: unknown;
11458
12375
  /**
11459
- * Transaction not found
12376
+ * Price already exists for this currency pair and date
11460
12377
  */
11461
- 404: ApiProblemResponseDto;
12378
+ 409: unknown;
12379
+ };
12380
+ };
12381
+ get: {
12382
+ req: PriceControllerFindAllData;
12383
+ res: {
11462
12384
  /**
11463
- * Rule with same name already exists or transaction already linked
12385
+ * Prices retrieved successfully
11464
12386
  */
11465
- 409: ApiProblemResponseDto;
12387
+ 200: PriceListResponseDto;
11466
12388
  };
11467
12389
  };
11468
12390
  };
11469
- '/api/v1/{region}/bean/recurring-rules/{id}': {
12391
+ '/api/v1/{region}/bean/prices/{id}': {
11470
12392
  get: {
11471
- req: RecurringRuleControllerFindOneData;
12393
+ req: PriceControllerFindOneData;
11472
12394
  res: {
11473
12395
  /**
11474
- * Rule retrieved successfully
12396
+ * Price retrieved successfully
11475
12397
  */
11476
- 200: RecurringRuleResponseDto;
12398
+ 200: PriceResponseDto;
11477
12399
  /**
11478
- * Rule not found
12400
+ * Price not found
11479
12401
  */
11480
12402
  404: unknown;
11481
12403
  };
11482
12404
  };
11483
- patch: {
11484
- req: RecurringRuleControllerUpdateData;
12405
+ put: {
12406
+ req: PriceControllerUpdateData;
11485
12407
  res: {
11486
12408
  /**
11487
- * Rule updated successfully
12409
+ * Price updated successfully
11488
12410
  */
11489
- 200: RecurringRuleResponseDto;
12411
+ 200: PriceResponseDto;
11490
12412
  /**
11491
- * Invalid input data
12413
+ * Price not found
11492
12414
  */
11493
- 400: unknown;
12415
+ 404: unknown;
11494
12416
  /**
11495
- * Rule not found
12417
+ * Updated price conflicts with existing price
11496
12418
  */
11497
- 404: unknown;
12419
+ 409: unknown;
11498
12420
  };
11499
12421
  };
11500
12422
  delete: {
11501
- req: RecurringRuleControllerDeleteData;
12423
+ req: PriceControllerDeleteData;
11502
12424
  res: {
11503
12425
  /**
11504
- * Rule deleted successfully
12426
+ * Price deleted successfully
11505
12427
  */
11506
12428
  204: void;
11507
12429
  /**
11508
- * Rule not found
12430
+ * Price not found
11509
12431
  */
11510
12432
  404: unknown;
11511
12433
  };
11512
12434
  };
11513
12435
  };
11514
- '/api/v1/{region}/bean/recurring-rules/{id}/stats': {
11515
- get: {
11516
- req: RecurringRuleControllerGetWithStatsData;
12436
+ '/api/v1/{region}/bean/prices/bulk': {
12437
+ post: {
12438
+ req: PriceControllerBulkCreateData;
11517
12439
  res: {
11518
12440
  /**
11519
- * Rule with stats retrieved successfully
11520
- */
11521
- 200: RecurringRuleWithStatsResponseDto;
11522
- /**
11523
- * Rule not found
12441
+ * Prices created successfully
11524
12442
  */
11525
- 404: unknown;
12443
+ 201: Array<PriceResponseDto>;
11526
12444
  };
11527
12445
  };
11528
12446
  };
11529
- '/api/v1/{region}/bean/expected-transactions': {
11530
- get: {
11531
- req: ExpectedTransactionControllerFindAllData;
12447
+ '/api/v1/users': {
12448
+ delete: {
12449
+ req: UserControllerDeleteOwnUserData;
11532
12450
  res: {
11533
12451
  /**
11534
- * Expected transactions retrieved successfully
12452
+ * User deleted successfully
11535
12453
  */
11536
- 200: ExpectedTransactionListResponseDto;
11537
- };
11538
- };
11539
- };
11540
- '/api/v1/{region}/bean/expected-transactions/overdue': {
11541
- get: {
11542
- req: ExpectedTransactionControllerFindOverdueData;
11543
- res: {
12454
+ 204: void;
11544
12455
  /**
11545
- * Overdue transactions retrieved successfully
12456
+ * Invalid access token
11546
12457
  */
11547
- 200: ExpectedTransactionListResponseDto;
12458
+ 403: unknown;
11548
12459
  };
11549
12460
  };
11550
- };
11551
- '/api/v1/{region}/bean/expected-transactions/{id}': {
11552
12461
  get: {
11553
- req: ExpectedTransactionControllerFindOneData;
12462
+ req: UserControllerGetUserData;
11554
12463
  res: {
11555
12464
  /**
11556
- * Expected transaction retrieved successfully
11557
- */
11558
- 200: ExpectedTransactionResponseDto;
11559
- /**
11560
- * Expected transaction not found
12465
+ * User retrieved successfully
11561
12466
  */
11562
- 404: unknown;
12467
+ 200: UserResponseDto;
11563
12468
  };
11564
12469
  };
11565
- };
11566
- '/api/v1/{region}/bean/expected-transactions/{id}/skip': {
11567
12470
  post: {
11568
- req: ExpectedTransactionControllerSkipData;
12471
+ req: UserControllerSignupUserData;
11569
12472
  res: {
11570
12473
  /**
11571
- * Expected transaction skipped successfully
12474
+ * User created successfully
11572
12475
  */
11573
- 200: ExpectedTransactionResponseDto;
12476
+ 201: SignupResponseDto;
11574
12477
  /**
11575
- * Cannot skip - not in PENDING status
12478
+ * Invalid Turnstile token (when Turnstile is enabled)
11576
12479
  */
11577
12480
  400: unknown;
11578
12481
  /**
11579
- * Expected transaction not found
12482
+ * User signup is disabled
11580
12483
  */
11581
- 404: unknown;
12484
+ 403: unknown;
11582
12485
  };
11583
12486
  };
12487
+ };
12488
+ '/api/v1/users/{id}': {
11584
12489
  delete: {
11585
- req: ExpectedTransactionControllerUndoSkipData;
12490
+ req: UserControllerDeleteUserData;
11586
12491
  res: {
11587
12492
  /**
11588
- * Skip undone successfully
11589
- */
11590
- 200: ExpectedTransactionResponseDto;
11591
- /**
11592
- * Cannot undo - not in SKIPPED status
12493
+ * User deleted successfully
11593
12494
  */
11594
- 400: unknown;
12495
+ 204: void;
11595
12496
  /**
11596
- * Expected transaction not found
12497
+ * Cannot delete own account or insufficient permissions
11597
12498
  */
11598
- 404: unknown;
12499
+ 403: unknown;
11599
12500
  };
11600
12501
  };
11601
12502
  };
11602
- '/api/v1/{region}/bean/expected-transactions/{id}/match': {
11603
- post: {
11604
- req: ExpectedTransactionControllerConfirmMatchData;
12503
+ '/api/v1/users/{id}/info': {
12504
+ get: {
12505
+ req: UserControllerGetUserInfoData;
11605
12506
  res: {
11606
12507
  /**
11607
- * Match confirmed successfully
12508
+ * User info retrieved successfully
11608
12509
  */
11609
12510
  200: unknown;
11610
12511
  /**
11611
- * Cannot match - not in PENDING status
11612
- */
11613
- 400: unknown;
11614
- /**
11615
- * Expected or actual transaction not found
11616
- */
11617
- 404: unknown;
11618
- /**
11619
- * Actual transaction already matched to another rule
12512
+ * Cannot access other user info without admin permission
11620
12513
  */
11621
- 409: unknown;
12514
+ 403: unknown;
11622
12515
  };
11623
12516
  };
11624
- delete: {
11625
- req: ExpectedTransactionControllerUnmatchData;
12517
+ };
12518
+ '/api/v1/users/setting': {
12519
+ put: {
12520
+ req: UserControllerUpdateUserSettingData;
11626
12521
  res: {
11627
12522
  /**
11628
- * Match removed successfully
12523
+ * Settings updated successfully
11629
12524
  */
11630
12525
  200: unknown;
11631
12526
  /**
11632
- * Cannot unmatch - not in COMPLETED status
11633
- */
11634
- 400: unknown;
11635
- /**
11636
- * Expected transaction not found
12527
+ * Insufficient permissions
11637
12528
  */
11638
- 404: unknown;
12529
+ 403: unknown;
11639
12530
  };
11640
12531
  };
11641
12532
  };
11642
- '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
11643
- post: {
11644
- req: ExpectedTransactionControllerEnterNowData;
12533
+ '/api/v1/users/settings-by-page': {
12534
+ get: {
12535
+ req: UserControllerGetAllUserSettingsByPageData;
11645
12536
  res: {
11646
12537
  /**
11647
- * Transaction created successfully
11648
- */
11649
- 201: unknown;
11650
- /**
11651
- * Cannot enter - not in PENDING status or missing accounts
11652
- */
11653
- 400: unknown;
11654
- /**
11655
- * Expected transaction or accounts not found
12538
+ * Settings list retrieved successfully
11656
12539
  */
11657
- 404: unknown;
12540
+ 200: unknown;
11658
12541
  };
11659
12542
  };
11660
12543
  };
11661
- '/api/v1/{region}/bean/recurring/forecast': {
12544
+ '/api/v1/users/asset-liability-summary': {
11662
12545
  get: {
11663
- req: ForecastControllerGetForecastData;
11664
12546
  res: {
11665
12547
  /**
11666
- * Forecast retrieved successfully
12548
+ * Summary retrieved successfully
11667
12549
  */
11668
- 200: ForecastResponseDto;
12550
+ 200: unknown;
11669
12551
  };
11670
12552
  };
11671
12553
  };
11672
- '/api/v1/{region}/reporting/portfolio/trends': {
12554
+ '/api/v1/admin/properties': {
11673
12555
  get: {
11674
- req: ReportingControllerGetPortfolioTrendsData;
11675
12556
  res: {
11676
12557
  /**
11677
- * Trends retrieved successfully
12558
+ * Properties retrieved successfully
11678
12559
  */
11679
- 200: PortfolioTrendsResponseDto;
12560
+ 200: unknown;
11680
12561
  /**
11681
- * User not authenticated
12562
+ * Unauthorized
11682
12563
  */
11683
12564
  401: unknown;
12565
+ /**
12566
+ * Forbidden - insufficient permissions
12567
+ */
12568
+ 403: unknown;
11684
12569
  };
11685
12570
  };
11686
12571
  };
11687
- '/api/v1/{region}/reporting/cash-flow/trends': {
12572
+ '/api/v1/admin/properties/{key}': {
11688
12573
  get: {
11689
- req: ReportingControllerGetCashFlowTrendsData;
12574
+ req: PropertyControllerGetByKeyData;
11690
12575
  res: {
11691
12576
  /**
11692
- * Cash-flow trends retrieved successfully
12577
+ * Property retrieved successfully
11693
12578
  */
11694
- 200: CashFlowTrendsResponseDto;
12579
+ 200: unknown;
11695
12580
  /**
11696
- * User not authenticated
12581
+ * Unauthorized
11697
12582
  */
11698
12583
  401: unknown;
12584
+ /**
12585
+ * Forbidden - insufficient permissions
12586
+ */
12587
+ 403: unknown;
12588
+ /**
12589
+ * Property not found
12590
+ */
12591
+ 404: unknown;
11699
12592
  };
11700
12593
  };
11701
- };
11702
- '/api/v1/{region}/reporting/snapshots/generate': {
11703
- post: {
11704
- req: ReportingControllerGenerateSnapshotData;
12594
+ put: {
12595
+ req: PropertyControllerUpdateData;
11705
12596
  res: {
11706
12597
  /**
11707
- * Snapshot generated successfully
12598
+ * Property updated successfully
11708
12599
  */
11709
- 200: GenerateSnapshotResponse;
12600
+ 200: unknown;
11710
12601
  /**
11711
- * Invalid date format
12602
+ * Unauthorized
11712
12603
  */
11713
- 400: unknown;
12604
+ 401: unknown;
11714
12605
  /**
11715
- * 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
11716
12620
  */
11717
12621
  401: unknown;
12622
+ /**
12623
+ * Forbidden - insufficient permissions
12624
+ */
12625
+ 403: unknown;
12626
+ /**
12627
+ * Property not found
12628
+ */
12629
+ 404: unknown;
11718
12630
  };
11719
12631
  };
11720
12632
  };
11721
- '/api/v1/{region}/reporting/snapshots/backfill': {
12633
+ '/api/v1/{region}/bean/recurring-rules': {
11722
12634
  post: {
11723
- req: ReportingControllerBackfillSnapshotsData;
12635
+ req: RecurringRuleControllerCreateData;
11724
12636
  res: {
11725
12637
  /**
11726
- * Backfill completed successfully
12638
+ * Rule created successfully
11727
12639
  */
11728
- 200: BackfillSnapshotsResponse;
12640
+ 201: RecurringRuleResponseDto;
11729
12641
  /**
11730
- * Invalid date format or range
12642
+ * Invalid input data (e.g., autoCreate without accounts)
11731
12643
  */
11732
12644
  400: unknown;
11733
12645
  /**
11734
- * User not authenticated
12646
+ * Rule with same name already exists
11735
12647
  */
11736
- 401: unknown;
12648
+ 409: unknown;
12649
+ };
12650
+ };
12651
+ get: {
12652
+ req: RecurringRuleControllerFindAllData;
12653
+ res: {
11737
12654
  /**
11738
- * Backfill already in progress for this user
12655
+ * Rules retrieved successfully
11739
12656
  */
11740
- 409: unknown;
12657
+ 200: Array<RecurringRuleResponseDto>;
11741
12658
  };
11742
12659
  };
11743
12660
  };
11744
- '/api/v1/users': {
11745
- delete: {
11746
- req: UserControllerDeleteOwnUserData;
12661
+ '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}': {
12662
+ post: {
12663
+ req: RecurringRuleControllerCreateFromTransactionData;
11747
12664
  res: {
11748
12665
  /**
11749
- * User deleted successfully
12666
+ * Rule created successfully
11750
12667
  */
11751
- 204: void;
12668
+ 201: RecurringRuleResponseDto;
11752
12669
  /**
11753
- * Invalid access token
12670
+ * Transaction not found
11754
12671
  */
11755
- 403: unknown;
12672
+ 404: ApiProblemResponseDto;
12673
+ /**
12674
+ * Rule with same name already exists or transaction already linked
12675
+ */
12676
+ 409: ApiProblemResponseDto;
11756
12677
  };
11757
12678
  };
12679
+ };
12680
+ '/api/v1/{region}/bean/recurring-rules/{id}': {
11758
12681
  get: {
11759
- req: UserControllerGetUserData;
12682
+ req: RecurringRuleControllerFindOneData;
11760
12683
  res: {
11761
12684
  /**
11762
- * User retrieved successfully
12685
+ * Rule retrieved successfully
11763
12686
  */
11764
- 200: UserResponseDto;
12687
+ 200: RecurringRuleResponseDto;
12688
+ /**
12689
+ * Rule not found
12690
+ */
12691
+ 404: unknown;
11765
12692
  };
11766
12693
  };
11767
- post: {
11768
- req: UserControllerSignupUserData;
12694
+ patch: {
12695
+ req: RecurringRuleControllerUpdateData;
11769
12696
  res: {
11770
12697
  /**
11771
- * User created successfully
12698
+ * Rule updated successfully
11772
12699
  */
11773
- 201: SignupResponseDto;
12700
+ 200: RecurringRuleResponseDto;
11774
12701
  /**
11775
- * Invalid Turnstile token (when Turnstile is enabled)
12702
+ * Invalid input data
11776
12703
  */
11777
12704
  400: unknown;
11778
12705
  /**
11779
- * User signup is disabled
12706
+ * Rule not found
11780
12707
  */
11781
- 403: unknown;
12708
+ 404: unknown;
11782
12709
  };
11783
12710
  };
11784
- };
11785
- '/api/v1/users/{id}': {
11786
12711
  delete: {
11787
- req: UserControllerDeleteUserData;
12712
+ req: RecurringRuleControllerDeleteData;
11788
12713
  res: {
11789
12714
  /**
11790
- * User deleted successfully
12715
+ * Rule deleted successfully
11791
12716
  */
11792
12717
  204: void;
11793
12718
  /**
11794
- * Cannot delete own account or insufficient permissions
12719
+ * Rule not found
11795
12720
  */
11796
- 403: unknown;
12721
+ 404: unknown;
11797
12722
  };
11798
12723
  };
11799
12724
  };
11800
- '/api/v1/users/{id}/info': {
12725
+ '/api/v1/{region}/bean/recurring-rules/{id}/stats': {
11801
12726
  get: {
11802
- req: UserControllerGetUserInfoData;
12727
+ req: RecurringRuleControllerGetWithStatsData;
11803
12728
  res: {
11804
12729
  /**
11805
- * User info retrieved successfully
12730
+ * Rule with stats retrieved successfully
11806
12731
  */
11807
- 200: unknown;
12732
+ 200: RecurringRuleWithStatsResponseDto;
11808
12733
  /**
11809
- * Cannot access other user info without admin permission
12734
+ * Rule not found
11810
12735
  */
11811
- 403: unknown;
12736
+ 404: unknown;
11812
12737
  };
11813
12738
  };
11814
12739
  };
11815
- '/api/v1/users/setting': {
11816
- put: {
11817
- req: UserControllerUpdateUserSettingData;
12740
+ '/api/v1/{region}/bean/expected-transactions': {
12741
+ get: {
12742
+ req: ExpectedTransactionControllerFindAllData;
11818
12743
  res: {
11819
12744
  /**
11820
- * Settings updated successfully
11821
- */
11822
- 200: unknown;
11823
- /**
11824
- * Insufficient permissions
12745
+ * Expected transactions retrieved successfully
11825
12746
  */
11826
- 403: unknown;
12747
+ 200: ExpectedTransactionListResponseDto;
11827
12748
  };
11828
12749
  };
11829
12750
  };
11830
- '/api/v1/users/settings-by-page': {
12751
+ '/api/v1/{region}/bean/expected-transactions/overdue': {
11831
12752
  get: {
11832
- req: UserControllerGetAllUserSettingsByPageData;
12753
+ req: ExpectedTransactionControllerFindOverdueData;
11833
12754
  res: {
11834
12755
  /**
11835
- * Settings list retrieved successfully
12756
+ * Overdue transactions retrieved successfully
11836
12757
  */
11837
- 200: unknown;
12758
+ 200: ExpectedTransactionListResponseDto;
11838
12759
  };
11839
12760
  };
11840
12761
  };
11841
- '/api/v1/users/asset-liability-summary': {
12762
+ '/api/v1/{region}/bean/expected-transactions/{id}': {
11842
12763
  get: {
12764
+ req: ExpectedTransactionControllerFindOneData;
11843
12765
  res: {
11844
12766
  /**
11845
- * Summary retrieved successfully
12767
+ * Expected transaction retrieved successfully
11846
12768
  */
11847
- 200: unknown;
12769
+ 200: ExpectedTransactionResponseDto;
12770
+ /**
12771
+ * Expected transaction not found
12772
+ */
12773
+ 404: unknown;
11848
12774
  };
11849
12775
  };
11850
12776
  };
11851
- '/api/v1/admin/properties': {
11852
- get: {
12777
+ '/api/v1/{region}/bean/expected-transactions/{id}/skip': {
12778
+ post: {
12779
+ req: ExpectedTransactionControllerSkipData;
11853
12780
  res: {
11854
12781
  /**
11855
- * Properties retrieved successfully
12782
+ * Expected transaction skipped successfully
11856
12783
  */
11857
- 200: unknown;
12784
+ 200: ExpectedTransactionResponseDto;
11858
12785
  /**
11859
- * Unauthorized
12786
+ * Cannot skip - not in PENDING status
11860
12787
  */
11861
- 401: unknown;
12788
+ 400: unknown;
11862
12789
  /**
11863
- * Forbidden - insufficient permissions
12790
+ * Expected transaction not found
11864
12791
  */
11865
- 403: unknown;
12792
+ 404: unknown;
11866
12793
  };
11867
12794
  };
11868
- };
11869
- '/api/v1/admin/properties/{key}': {
11870
- get: {
11871
- req: PropertyControllerGetByKeyData;
12795
+ delete: {
12796
+ req: ExpectedTransactionControllerUndoSkipData;
11872
12797
  res: {
11873
12798
  /**
11874
- * Property retrieved successfully
11875
- */
11876
- 200: unknown;
11877
- /**
11878
- * Unauthorized
12799
+ * Skip undone successfully
11879
12800
  */
11880
- 401: unknown;
12801
+ 204: void;
11881
12802
  /**
11882
- * Forbidden - insufficient permissions
12803
+ * Cannot undo - not in SKIPPED status
11883
12804
  */
11884
- 403: unknown;
12805
+ 400: unknown;
11885
12806
  /**
11886
- * Property not found
12807
+ * Expected transaction not found
11887
12808
  */
11888
12809
  404: unknown;
11889
12810
  };
11890
12811
  };
11891
- put: {
11892
- req: PropertyControllerUpdateData;
12812
+ };
12813
+ '/api/v1/{region}/bean/expected-transactions/{id}/match': {
12814
+ post: {
12815
+ req: ExpectedTransactionControllerConfirmMatchData;
11893
12816
  res: {
11894
12817
  /**
11895
- * Property updated successfully
12818
+ * Match confirmed successfully
11896
12819
  */
11897
12820
  200: unknown;
11898
12821
  /**
11899
- * Unauthorized
12822
+ * Cannot match - not in PENDING status
11900
12823
  */
11901
- 401: unknown;
12824
+ 400: unknown;
11902
12825
  /**
11903
- * Forbidden - insufficient permissions
12826
+ * Expected or actual transaction not found
11904
12827
  */
11905
- 403: unknown;
12828
+ 404: unknown;
12829
+ /**
12830
+ * Actual transaction already matched to another rule
12831
+ */
12832
+ 409: unknown;
11906
12833
  };
11907
12834
  };
11908
12835
  delete: {
11909
- req: PropertyControllerDeleteData;
12836
+ req: ExpectedTransactionControllerUnmatchData;
11910
12837
  res: {
11911
12838
  /**
11912
- * Property deleted successfully
12839
+ * Match removed successfully
11913
12840
  */
11914
12841
  204: void;
11915
12842
  /**
11916
- * Unauthorized
12843
+ * Cannot unmatch - not in COMPLETED status
11917
12844
  */
11918
- 401: unknown;
12845
+ 400: unknown;
11919
12846
  /**
11920
- * Forbidden - insufficient permissions
12847
+ * Expected transaction not found
11921
12848
  */
11922
- 403: unknown;
12849
+ 404: unknown;
12850
+ };
12851
+ };
12852
+ };
12853
+ '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
12854
+ post: {
12855
+ req: ExpectedTransactionControllerEnterNowData;
12856
+ res: {
11923
12857
  /**
11924
- * 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
11925
12867
  */
11926
12868
  404: unknown;
11927
12869
  };
11928
12870
  };
11929
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
+ };
11930
12883
  '/api/v1/{region}/bean/transaction-rules': {
11931
12884
  post: {
11932
12885
  req: TransactionRuleControllerCreateData;
@@ -12324,7 +13277,10 @@ export type $OpenApiTs = {
12324
13277
  '/api/v1/{region}/bean/export/beancount': {
12325
13278
  get: {
12326
13279
  res: {
12327
- 200: unknown;
13280
+ /**
13281
+ * ZIP archive (application/zip) streamed as an attachment
13282
+ */
13283
+ 200: Blob | File;
12328
13284
  };
12329
13285
  };
12330
13286
  };
@@ -12705,6 +13661,17 @@ export type $OpenApiTs = {
12705
13661
  };
12706
13662
  };
12707
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
+ };
12708
13675
  '/api/v1/bean/platforms/{id}': {
12709
13676
  put: {
12710
13677
  req: PlatformControllerUpdateData;
@@ -12852,10 +13819,48 @@ export type $OpenApiTs = {
12852
13819
  };
12853
13820
  };
12854
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
+ };
12855
13853
  '/api/v1/cache/flush': {
12856
13854
  post: {
12857
13855
  res: {
12858
- 201: unknown;
13856
+ /**
13857
+ * Cache flushed successfully
13858
+ */
13859
+ 200: unknown;
13860
+ /**
13861
+ * Admin access required
13862
+ */
13863
+ 403: ApiProblemResponseDto;
12859
13864
  };
12860
13865
  };
12861
13866
  };