squarefi-bff-api-module 1.36.76 → 1.36.78

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.
@@ -1942,109 +1942,6 @@ export interface paths {
1942
1942
  patch?: never;
1943
1943
  trace?: never;
1944
1944
  };
1945
- "/frontend/counterparty/destinations": {
1946
- parameters: {
1947
- query?: never;
1948
- header?: never;
1949
- path?: never;
1950
- cookie?: never;
1951
- };
1952
- get?: never;
1953
- put?: never;
1954
- /**
1955
- * Create destination
1956
- * @description counterparty_account_id in body. Caller must be owner or admin of the account's wallet and the wallet's KYC must be APPROVED; other members receive 403.
1957
- *
1958
- * **Banking types**: banking_data required. `banking_data.address` (the bank address) is mandatory; `banking_data.beneficiary_address` (the recipient's own postal address, same shape) is optional — when present it must be complete (city, country_id, postcode, street1; state_id on US rails), is never overwritten by bank-directory enrichment, is exempt from the bank-country check, and payouts use it in place of the bank address.
1959
- * **Crypto types**: crypto_data required
1960
- * **Internal type**: internal_data required (target wallet on the same platform)
1961
- *
1962
- */
1963
- post: {
1964
- parameters: {
1965
- query?: never;
1966
- header?: never;
1967
- path?: never;
1968
- cookie?: never;
1969
- };
1970
- requestBody: {
1971
- content: {
1972
- "application/json": {
1973
- /** Format: uuid */
1974
- counterparty_account_id: string;
1975
- /** @enum {string} */
1976
- type: "ACH" | "RTP" | "SWIFT" | "SEPA" | "CRYPTO_EXTERNAL" | "CRYPTO_INTERNAL" | "CHAPS" | "FPS" | "FEDWIRE" | "INTERNAL";
1977
- nickname?: string;
1978
- banking_data?: Record<string, never>;
1979
- crypto_data?: Record<string, never>;
1980
- /** @description Required for type INTERNAL — points at the receiver wallet. */
1981
- internal_data?: {
1982
- /**
1983
- * Format: uuid
1984
- * @description Target (receiver) wallet uuid on the same platform.
1985
- */
1986
- wallet_id: string;
1987
- /** @description Optional, reserved for future use. */
1988
- description?: string;
1989
- };
1990
- };
1991
- };
1992
- };
1993
- responses: {
1994
- /** @description Created */
1995
- 201: {
1996
- headers: {
1997
- [name: string]: unknown;
1998
- };
1999
- content: {
2000
- "application/json": {
2001
- /** @example true */
2002
- success: boolean;
2003
- data: {
2004
- destination: components["schemas"]["CounterpartyDestination"];
2005
- /** @example Destination created successfully */
2006
- message: string;
2007
- };
2008
- };
2009
- };
2010
- };
2011
- /** @description Validation error (type-specific payload missing or invalid, target wallet inactive, or the address country contradicts the bank code country — error code BANK_COUNTRY_MISMATCH) */
2012
- 400: {
2013
- headers: {
2014
- [name: string]: unknown;
2015
- };
2016
- content: {
2017
- "application/json": components["schemas"]["ErrorResponse"];
2018
- };
2019
- };
2020
- /** @description Access denied, or (Clerk tenants) the second-factor verification is
2021
- * stale — `TWO_FACTOR_REVERIFICATION_REQUIRED`: re-verify and retry.
2022
- * */
2023
- 403: {
2024
- headers: {
2025
- [name: string]: unknown;
2026
- };
2027
- content: {
2028
- "application/json": components["schemas"]["ErrorResponse"];
2029
- };
2030
- };
2031
- /** @description Account not found */
2032
- 404: {
2033
- headers: {
2034
- [name: string]: unknown;
2035
- };
2036
- content: {
2037
- "application/json": components["schemas"]["ErrorResponse"];
2038
- };
2039
- };
2040
- };
2041
- };
2042
- delete?: never;
2043
- options?: never;
2044
- head?: never;
2045
- patch?: never;
2046
- trace?: never;
2047
- };
2048
1945
  "/frontend/crypto_wallets/wallet/{wallet_id}": {
2049
1946
  parameters: {
2050
1947
  query?: never;
@@ -3846,6 +3743,71 @@ export interface paths {
3846
3743
  patch?: never;
3847
3744
  trace?: never;
3848
3745
  };
3746
+ "/frontend/issuing/cards/{card_id}/transactions/csv": {
3747
+ parameters: {
3748
+ query?: never;
3749
+ header?: never;
3750
+ path?: never;
3751
+ cookie?: never;
3752
+ };
3753
+ /**
3754
+ * Download card transactions as CSV
3755
+ * @description Every transaction on the card — vendor transactions and the card's top-ups
3756
+ * and withdrawals — newest first, with a running balance.
3757
+ *
3758
+ * **Authentication**: Bearer token with x-tenant-id header required
3759
+ *
3760
+ * **Access Control**: User must have access to the card's transactions
3761
+ *
3762
+ */
3763
+ get: {
3764
+ parameters: {
3765
+ query?: {
3766
+ /** @description Only transactions up to this moment (inclusive), ISO 8601 */
3767
+ to_date?: string;
3768
+ };
3769
+ header?: never;
3770
+ path: {
3771
+ /** @description The ID of the card */
3772
+ card_id: string;
3773
+ };
3774
+ cookie?: never;
3775
+ };
3776
+ requestBody?: never;
3777
+ responses: {
3778
+ /** @description CSV file with the card's transactions */
3779
+ 200: {
3780
+ headers: {
3781
+ [name: string]: unknown;
3782
+ };
3783
+ content: {
3784
+ "text/csv": string;
3785
+ };
3786
+ };
3787
+ /** @description Invalid query parameter */
3788
+ 400: {
3789
+ headers: {
3790
+ [name: string]: unknown;
3791
+ };
3792
+ content?: never;
3793
+ };
3794
+ /** @description Access denied to this card */
3795
+ 403: {
3796
+ headers: {
3797
+ [name: string]: unknown;
3798
+ };
3799
+ content?: never;
3800
+ };
3801
+ };
3802
+ };
3803
+ put?: never;
3804
+ post?: never;
3805
+ delete?: never;
3806
+ options?: never;
3807
+ head?: never;
3808
+ patch?: never;
3809
+ trace?: never;
3810
+ };
3849
3811
  "/frontend/issuing/cards/{card_id}/limits": {
3850
3812
  parameters: {
3851
3813
  query?: never;
@@ -4560,6 +4522,77 @@ export interface paths {
4560
4522
  patch?: never;
4561
4523
  trace?: never;
4562
4524
  };
4525
+ "/frontend/issuing/sub-accounts/{sub_account_id}/transactions/csv": {
4526
+ parameters: {
4527
+ query?: never;
4528
+ header?: never;
4529
+ path?: never;
4530
+ cookie?: never;
4531
+ };
4532
+ /**
4533
+ * Download sub-account transactions as CSV
4534
+ * @description Every transaction on the sub-account — vendor transactions, pending
4535
+ * authorizations and top-ups — newest first, with a running balance.
4536
+ *
4537
+ * **Authentication**: Bearer token with x-tenant-id header required
4538
+ *
4539
+ * **Access Control**: User must have access to the sub-account
4540
+ *
4541
+ */
4542
+ get: {
4543
+ parameters: {
4544
+ query?: {
4545
+ /** @description Only this card's transactions */
4546
+ card_id?: string;
4547
+ /** @description Only transactions with this status */
4548
+ status?: string;
4549
+ /** @description Only transactions from this moment (inclusive), ISO 8601 */
4550
+ from_date?: string;
4551
+ /** @description Only transactions up to this moment (inclusive), ISO 8601 */
4552
+ to_date?: string;
4553
+ };
4554
+ header?: never;
4555
+ path: {
4556
+ /** @description The ID of the sub-account */
4557
+ sub_account_id: string;
4558
+ };
4559
+ cookie?: never;
4560
+ };
4561
+ requestBody?: never;
4562
+ responses: {
4563
+ /** @description CSV file with the sub-account's transactions */
4564
+ 200: {
4565
+ headers: {
4566
+ [name: string]: unknown;
4567
+ };
4568
+ content: {
4569
+ "text/csv": string;
4570
+ };
4571
+ };
4572
+ /** @description Invalid query parameter */
4573
+ 400: {
4574
+ headers: {
4575
+ [name: string]: unknown;
4576
+ };
4577
+ content?: never;
4578
+ };
4579
+ /** @description Access denied to this sub-account */
4580
+ 403: {
4581
+ headers: {
4582
+ [name: string]: unknown;
4583
+ };
4584
+ content?: never;
4585
+ };
4586
+ };
4587
+ };
4588
+ put?: never;
4589
+ post?: never;
4590
+ delete?: never;
4591
+ options?: never;
4592
+ head?: never;
4593
+ patch?: never;
4594
+ trace?: never;
4595
+ };
4563
4596
  "/frontend/issuing/sub-accounts/{sub_account_id}/deposit": {
4564
4597
  parameters: {
4565
4598
  query?: never;
@@ -10868,42 +10901,36 @@ export interface paths {
10868
10901
  patch?: never;
10869
10902
  trace?: never;
10870
10903
  };
10871
- "/frontend/rfi/{wallet_id}": {
10904
+ "/frontend/reports/{wallet_id}": {
10872
10905
  parameters: {
10873
10906
  query?: never;
10874
10907
  header?: never;
10875
10908
  path?: never;
10876
10909
  cookie?: never;
10877
10910
  };
10878
- /**
10879
- * List compliance requests (RFI) of an account, with the banner counters
10880
- * @description Requests for information compliance sent about this account, newest first. `summary`
10881
- * counts every open request regardless of paging — use it for the home-screen banner:
10882
- * `action_required > 0` shows it, `overdue > 0` turns it red, `next_due_at` is the
10883
- * nearest deadline. Any wallet member except the scoped `user` role may read.
10884
- * Refresh on the realtime `data.changed` hint with entity `WALLET_RFI`.
10885
- *
10886
- */
10911
+ /** List the wallet's reports, newest first */
10887
10912
  get: {
10888
10913
  parameters: {
10889
10914
  query?: {
10890
- /** @description `open` — everything still in progress (`action_required` + `awaiting_compliance`), the Open tab; `closed` — the Resolved tab. */
10891
- status?: "open" | "action_required" | "awaiting_compliance" | "closed";
10892
- /** @description Only the requests covering this transaction — what the transaction screen asks by to decide whether to show "compliance has questions". A transaction of another account, or one no request covers, returns an empty page. */
10893
- order_uuid?: string;
10894
- limit?: number;
10915
+ /** @description Comma-separated report types */
10916
+ type?: string;
10917
+ /** @description Comma-separated statuses (PENDING, GENERATING, READY, FAILED) */
10918
+ status?: string;
10919
+ created_from?: string;
10920
+ created_to?: string;
10895
10921
  offset?: number;
10922
+ limit?: number;
10896
10923
  };
10897
10924
  header?: never;
10898
10925
  path: {
10899
- /** @description The account the requests are about. Requests and their conversations are kept per account. */
10900
- wallet_id: components["parameters"]["RfiWalletId"];
10926
+ /** @description Wallet the report belongs to */
10927
+ wallet_id: components["parameters"]["ReportWalletId"];
10901
10928
  };
10902
10929
  cookie?: never;
10903
10930
  };
10904
10931
  requestBody?: never;
10905
10932
  responses: {
10906
- /** @description Page of requests and the open-request counters */
10933
+ /** @description One page of reports */
10907
10934
  200: {
10908
10935
  headers: {
10909
10936
  [name: string]: unknown;
@@ -10913,43 +10940,438 @@ export interface paths {
10913
10940
  /** @example true */
10914
10941
  success?: boolean;
10915
10942
  data?: {
10916
- summary?: {
10917
- action_required?: number;
10918
- overdue?: number;
10919
- awaiting_compliance?: number;
10920
- /** Format: date-time */
10921
- next_due_at?: string | null;
10922
- };
10923
- items?: components["schemas"]["RfiCase"][];
10943
+ items?: components["schemas"]["WalletReport"][];
10924
10944
  total?: number;
10925
- limit?: number;
10926
10945
  offset?: number;
10946
+ limit?: number;
10927
10947
  };
10928
10948
  };
10929
10949
  };
10930
10950
  };
10931
- 403: components["responses"]["ForbiddenError"];
10951
+ /** @description Invalid filter (VALIDATION_ERROR) */
10952
+ 400: {
10953
+ headers: {
10954
+ [name: string]: unknown;
10955
+ };
10956
+ content: {
10957
+ "application/json": components["schemas"]["ErrorResponse"];
10958
+ };
10959
+ };
10932
10960
  };
10933
10961
  };
10934
10962
  put?: never;
10935
- post?: never;
10936
- delete?: never;
10937
- options?: never;
10938
- head?: never;
10939
- patch?: never;
10940
- trace?: never;
10941
- };
10942
- "/frontend/rfi/{wallet_id}/{case_id}": {
10943
- parameters: {
10944
- query?: never;
10945
- header?: never;
10946
- path?: never;
10947
- cookie?: never;
10948
- };
10949
10963
  /**
10950
- * Get a compliance request with its conversation and covered transactions
10951
- * @description The conversation holds compliance's questions and the client's answers, oldest first.
10952
- * A request of another account answers 404.
10964
+ * Ask for a report — it is generated in the background
10965
+ * @description Stores the request and starts the generation; the answer comes back at once
10966
+ * with the report in `PENDING`. When it is ready the wallet's owner and admins
10967
+ * (and the requester) get a `REPORT_READY` in-app notification, and the wallet
10968
+ * channel receives `data.changed` with entity `WALLET_REPORTS` on every status change.
10969
+ *
10970
+ * The same report (type, format and params) asked again while the first one is
10971
+ * still being generated returns that first report with 200 instead of starting
10972
+ * another. Up to 3 reports of a wallet are generated at once.
10973
+ *
10974
+ */
10975
+ post: {
10976
+ parameters: {
10977
+ query?: never;
10978
+ header?: never;
10979
+ path: {
10980
+ /** @description Wallet the report belongs to */
10981
+ wallet_id: components["parameters"]["ReportWalletId"];
10982
+ };
10983
+ cookie?: never;
10984
+ };
10985
+ requestBody: {
10986
+ content: {
10987
+ "application/json": {
10988
+ /** @enum {string} */
10989
+ type: "TRANSACTION_STATEMENT" | "ACCOUNT_STATEMENT" | "ACCOUNT_CONFIRMATION";
10990
+ /**
10991
+ * @description CSV / XLSX for TRANSACTION_STATEMENT, PDF for ACCOUNT_STATEMENT and ACCOUNT_CONFIRMATION
10992
+ * @enum {string}
10993
+ */
10994
+ format: "CSV" | "XLSX" | "PDF";
10995
+ params: components["schemas"]["WalletReportParams"];
10996
+ };
10997
+ };
10998
+ };
10999
+ responses: {
11000
+ /** @description An identical report is already being generated — that one is returned */
11001
+ 200: {
11002
+ headers: {
11003
+ [name: string]: unknown;
11004
+ };
11005
+ content: {
11006
+ "application/json": {
11007
+ /** @example true */
11008
+ success?: boolean;
11009
+ data?: components["schemas"]["WalletReport"];
11010
+ };
11011
+ };
11012
+ };
11013
+ /** @description Generation started */
11014
+ 202: {
11015
+ headers: {
11016
+ [name: string]: unknown;
11017
+ };
11018
+ content: {
11019
+ "application/json": {
11020
+ /** @example true */
11021
+ success?: boolean;
11022
+ data?: components["schemas"]["WalletReport"];
11023
+ };
11024
+ };
11025
+ };
11026
+ /** @description Invalid body (VALIDATION_ERROR), a period that ends before it starts or a card period over 100 days (INVALID_REPORT_PARAMS), or a format the report is not offered in (REPORT_FORMAT_NOT_SUPPORTED) */
11027
+ 400: {
11028
+ headers: {
11029
+ [name: string]: unknown;
11030
+ };
11031
+ content: {
11032
+ "application/json": components["schemas"]["ErrorResponse"];
11033
+ };
11034
+ };
11035
+ /** @description Not a member of the wallet, or KYC read access denied */
11036
+ 403: {
11037
+ headers: {
11038
+ [name: string]: unknown;
11039
+ };
11040
+ content: {
11041
+ "application/json": components["schemas"]["ErrorResponse"];
11042
+ };
11043
+ };
11044
+ /** @description The card, sub-account or virtual account the report is about is not the wallet's (REPORT_SUBJECT_NOT_FOUND) */
11045
+ 404: {
11046
+ headers: {
11047
+ [name: string]: unknown;
11048
+ };
11049
+ content: {
11050
+ "application/json": components["schemas"]["ErrorResponse"];
11051
+ };
11052
+ };
11053
+ /** @description 3 reports of the wallet are already being generated (REPORT_QUEUE_FULL) */
11054
+ 409: {
11055
+ headers: {
11056
+ [name: string]: unknown;
11057
+ };
11058
+ content: {
11059
+ "application/json": components["schemas"]["ErrorResponse"];
11060
+ };
11061
+ };
11062
+ /** @description More than 20 report requests of the wallet within an hour (RATE_LIMIT_EXCEEDED) */
11063
+ 429: {
11064
+ headers: {
11065
+ [name: string]: unknown;
11066
+ };
11067
+ content: {
11068
+ "application/json": components["schemas"]["ErrorResponse"];
11069
+ };
11070
+ };
11071
+ };
11072
+ };
11073
+ delete?: never;
11074
+ options?: never;
11075
+ head?: never;
11076
+ patch?: never;
11077
+ trace?: never;
11078
+ };
11079
+ "/frontend/reports/{wallet_id}/{id}": {
11080
+ parameters: {
11081
+ query?: never;
11082
+ header?: never;
11083
+ path?: never;
11084
+ cookie?: never;
11085
+ };
11086
+ /** Get one report */
11087
+ get: {
11088
+ parameters: {
11089
+ query?: never;
11090
+ header?: never;
11091
+ path: {
11092
+ /** @description Wallet the report belongs to */
11093
+ wallet_id: components["parameters"]["ReportWalletId"];
11094
+ id: components["parameters"]["ReportId"];
11095
+ };
11096
+ cookie?: never;
11097
+ };
11098
+ requestBody?: never;
11099
+ responses: {
11100
+ /** @description The report */
11101
+ 200: {
11102
+ headers: {
11103
+ [name: string]: unknown;
11104
+ };
11105
+ content: {
11106
+ "application/json": {
11107
+ /** @example true */
11108
+ success?: boolean;
11109
+ data?: components["schemas"]["WalletReport"];
11110
+ };
11111
+ };
11112
+ };
11113
+ /** @description Not found in this wallet (REPORT_NOT_FOUND) */
11114
+ 404: {
11115
+ headers: {
11116
+ [name: string]: unknown;
11117
+ };
11118
+ content: {
11119
+ "application/json": components["schemas"]["ErrorResponse"];
11120
+ };
11121
+ };
11122
+ };
11123
+ };
11124
+ put?: never;
11125
+ post?: never;
11126
+ delete?: never;
11127
+ options?: never;
11128
+ head?: never;
11129
+ patch?: never;
11130
+ trace?: never;
11131
+ };
11132
+ "/frontend/reports/{wallet_id}/{id}/download": {
11133
+ parameters: {
11134
+ query?: never;
11135
+ header?: never;
11136
+ path?: never;
11137
+ cookie?: never;
11138
+ };
11139
+ /**
11140
+ * Get a short-lived download link to a ready report
11141
+ * @description The link is valid for 2 minutes and downloads the file as an attachment. Ask for a new one on every download.
11142
+ */
11143
+ get: {
11144
+ parameters: {
11145
+ query?: never;
11146
+ header?: never;
11147
+ path: {
11148
+ /** @description Wallet the report belongs to */
11149
+ wallet_id: components["parameters"]["ReportWalletId"];
11150
+ id: components["parameters"]["ReportId"];
11151
+ };
11152
+ cookie?: never;
11153
+ };
11154
+ requestBody?: never;
11155
+ responses: {
11156
+ /** @description The link */
11157
+ 200: {
11158
+ headers: {
11159
+ [name: string]: unknown;
11160
+ };
11161
+ content: {
11162
+ "application/json": {
11163
+ /** @example true */
11164
+ success?: boolean;
11165
+ data?: {
11166
+ /** Format: uri */
11167
+ url?: string;
11168
+ /** Format: date-time */
11169
+ expires_at?: string;
11170
+ };
11171
+ };
11172
+ };
11173
+ };
11174
+ /** @description Not found in this wallet (REPORT_NOT_FOUND) */
11175
+ 404: {
11176
+ headers: {
11177
+ [name: string]: unknown;
11178
+ };
11179
+ content: {
11180
+ "application/json": components["schemas"]["ErrorResponse"];
11181
+ };
11182
+ };
11183
+ /** @description The report is not ready (REPORT_NOT_READY) */
11184
+ 409: {
11185
+ headers: {
11186
+ [name: string]: unknown;
11187
+ };
11188
+ content: {
11189
+ "application/json": components["schemas"]["ErrorResponse"];
11190
+ };
11191
+ };
11192
+ };
11193
+ };
11194
+ put?: never;
11195
+ post?: never;
11196
+ delete?: never;
11197
+ options?: never;
11198
+ head?: never;
11199
+ patch?: never;
11200
+ trace?: never;
11201
+ };
11202
+ "/frontend/reports/{wallet_id}/{id}/retry": {
11203
+ parameters: {
11204
+ query?: never;
11205
+ header?: never;
11206
+ path?: never;
11207
+ cookie?: never;
11208
+ };
11209
+ get?: never;
11210
+ put?: never;
11211
+ /**
11212
+ * Generate a failed report again
11213
+ * @description Starts the next attempt with the same parameters. A report is generated at most
11214
+ * 3 times in total; after the 3rd failure it stays FAILED with `can_retry: false`.
11215
+ * If an identical report is already being generated, that one is returned with 200
11216
+ * and the failed one is left as it is.
11217
+ *
11218
+ */
11219
+ post: {
11220
+ parameters: {
11221
+ query?: never;
11222
+ header?: never;
11223
+ path: {
11224
+ /** @description Wallet the report belongs to */
11225
+ wallet_id: components["parameters"]["ReportWalletId"];
11226
+ id: components["parameters"]["ReportId"];
11227
+ };
11228
+ cookie?: never;
11229
+ };
11230
+ requestBody?: never;
11231
+ responses: {
11232
+ /** @description An identical report is already being generated — that one is returned */
11233
+ 200: {
11234
+ headers: {
11235
+ [name: string]: unknown;
11236
+ };
11237
+ content: {
11238
+ "application/json": {
11239
+ /** @example true */
11240
+ success?: boolean;
11241
+ data?: components["schemas"]["WalletReport"];
11242
+ };
11243
+ };
11244
+ };
11245
+ /** @description Next attempt started */
11246
+ 202: {
11247
+ headers: {
11248
+ [name: string]: unknown;
11249
+ };
11250
+ content: {
11251
+ "application/json": {
11252
+ /** @example true */
11253
+ success?: boolean;
11254
+ data?: components["schemas"]["WalletReport"];
11255
+ };
11256
+ };
11257
+ };
11258
+ /** @description Not found in this wallet (REPORT_NOT_FOUND) */
11259
+ 404: {
11260
+ headers: {
11261
+ [name: string]: unknown;
11262
+ };
11263
+ content: {
11264
+ "application/json": components["schemas"]["ErrorResponse"];
11265
+ };
11266
+ };
11267
+ /** @description The report is not FAILED (INVALID_STATE), it already failed 3 times (REPORT_RETRY_LIMIT_REACHED), or 3 reports of the wallet are being generated (REPORT_QUEUE_FULL) */
11268
+ 409: {
11269
+ headers: {
11270
+ [name: string]: unknown;
11271
+ };
11272
+ content: {
11273
+ "application/json": components["schemas"]["ErrorResponse"];
11274
+ };
11275
+ };
11276
+ /** @description More than 20 report requests of the wallet within an hour (RATE_LIMIT_EXCEEDED) */
11277
+ 429: {
11278
+ headers: {
11279
+ [name: string]: unknown;
11280
+ };
11281
+ content: {
11282
+ "application/json": components["schemas"]["ErrorResponse"];
11283
+ };
11284
+ };
11285
+ };
11286
+ };
11287
+ delete?: never;
11288
+ options?: never;
11289
+ head?: never;
11290
+ patch?: never;
11291
+ trace?: never;
11292
+ };
11293
+ "/frontend/rfi/{wallet_id}": {
11294
+ parameters: {
11295
+ query?: never;
11296
+ header?: never;
11297
+ path?: never;
11298
+ cookie?: never;
11299
+ };
11300
+ /**
11301
+ * List compliance requests (RFI) of an account, with the banner counters
11302
+ * @description Requests for information compliance sent about this account, newest first. `summary`
11303
+ * counts every open request regardless of paging — use it for the home-screen banner:
11304
+ * `action_required > 0` shows it, `overdue > 0` turns it red, `next_due_at` is the
11305
+ * nearest deadline. Any wallet member except the scoped `user` role may read.
11306
+ * Refresh on the realtime `data.changed` hint with entity `WALLET_RFI`.
11307
+ *
11308
+ */
11309
+ get: {
11310
+ parameters: {
11311
+ query?: {
11312
+ /** @description `open` — everything still in progress (`action_required` + `awaiting_compliance`), the Open tab; `closed` — the Resolved tab. */
11313
+ status?: "open" | "action_required" | "awaiting_compliance" | "closed";
11314
+ /** @description Only the requests covering this transaction — what the transaction screen asks by to decide whether to show "compliance has questions". A transaction of another account, or one no request covers, returns an empty page. */
11315
+ order_uuid?: string;
11316
+ limit?: number;
11317
+ offset?: number;
11318
+ };
11319
+ header?: never;
11320
+ path: {
11321
+ /** @description The account the requests are about. Requests and their conversations are kept per account. */
11322
+ wallet_id: components["parameters"]["RfiWalletId"];
11323
+ };
11324
+ cookie?: never;
11325
+ };
11326
+ requestBody?: never;
11327
+ responses: {
11328
+ /** @description Page of requests and the open-request counters */
11329
+ 200: {
11330
+ headers: {
11331
+ [name: string]: unknown;
11332
+ };
11333
+ content: {
11334
+ "application/json": {
11335
+ /** @example true */
11336
+ success?: boolean;
11337
+ data?: {
11338
+ summary?: {
11339
+ action_required?: number;
11340
+ overdue?: number;
11341
+ awaiting_compliance?: number;
11342
+ /** Format: date-time */
11343
+ next_due_at?: string | null;
11344
+ };
11345
+ items?: components["schemas"]["RfiCase"][];
11346
+ total?: number;
11347
+ limit?: number;
11348
+ offset?: number;
11349
+ };
11350
+ };
11351
+ };
11352
+ };
11353
+ 403: components["responses"]["ForbiddenError"];
11354
+ };
11355
+ };
11356
+ put?: never;
11357
+ post?: never;
11358
+ delete?: never;
11359
+ options?: never;
11360
+ head?: never;
11361
+ patch?: never;
11362
+ trace?: never;
11363
+ };
11364
+ "/frontend/rfi/{wallet_id}/{case_id}": {
11365
+ parameters: {
11366
+ query?: never;
11367
+ header?: never;
11368
+ path?: never;
11369
+ cookie?: never;
11370
+ };
11371
+ /**
11372
+ * Get a compliance request with its conversation and covered transactions
11373
+ * @description The conversation holds compliance's questions and the client's answers, oldest first.
11374
+ * A request of another account answers 404.
10953
11375
  *
10954
11376
  */
10955
11377
  get: {
@@ -13699,6 +14121,93 @@ export interface paths {
13699
14121
  patch?: never;
13700
14122
  trace?: never;
13701
14123
  };
14124
+ "/frontend/wallets/{wallet_id}/statement-pdf": {
14125
+ parameters: {
14126
+ query?: never;
14127
+ header?: never;
14128
+ path?: never;
14129
+ cookie?: never;
14130
+ };
14131
+ /**
14132
+ * Download wallet statement as PDF
14133
+ * @description Account statement for the wallet: holder details, bank details and crypto
14134
+ * addresses, then transactions grouped by currency. Branding comes from the
14135
+ * wallet's tenant. Covers at most the 10,100 most recent transactions of the period.
14136
+ *
14137
+ * **Authentication**: Bearer token with x-tenant-id header required
14138
+ *
14139
+ * **Access Control**: User must have access to the wallet
14140
+ *
14141
+ */
14142
+ get: {
14143
+ parameters: {
14144
+ query?: {
14145
+ /** @description Start of the period (inclusive), ISO 8601 */
14146
+ from_date?: string;
14147
+ /** @description End of the period (inclusive), ISO 8601 */
14148
+ to_date?: string;
14149
+ /** @description Statement for this currency only; every currency when omitted */
14150
+ currency_uuid?: string;
14151
+ /** @description When false (default), dust transactions below threshold are hidden */
14152
+ show_low_balance?: boolean;
14153
+ };
14154
+ header?: never;
14155
+ path: {
14156
+ /** @description The ID of the wallet */
14157
+ wallet_id: string;
14158
+ };
14159
+ cookie?: never;
14160
+ };
14161
+ requestBody?: never;
14162
+ responses: {
14163
+ /** @description PDF statement file */
14164
+ 200: {
14165
+ headers: {
14166
+ "Content-Disposition"?: string;
14167
+ [name: string]: unknown;
14168
+ };
14169
+ content: {
14170
+ "application/pdf": string;
14171
+ };
14172
+ };
14173
+ /** @description Invalid query parameter */
14174
+ 400: {
14175
+ headers: {
14176
+ [name: string]: unknown;
14177
+ };
14178
+ content?: never;
14179
+ };
14180
+ /** @description Access denied to this wallet */
14181
+ 403: {
14182
+ headers: {
14183
+ [name: string]: unknown;
14184
+ };
14185
+ content?: never;
14186
+ };
14187
+ /** @description Wallet not found */
14188
+ 404: {
14189
+ headers: {
14190
+ [name: string]: unknown;
14191
+ };
14192
+ content?: never;
14193
+ };
14194
+ /** @description Server error */
14195
+ 500: {
14196
+ headers: {
14197
+ [name: string]: unknown;
14198
+ };
14199
+ content?: never;
14200
+ };
14201
+ };
14202
+ };
14203
+ put?: never;
14204
+ post?: never;
14205
+ delete?: never;
14206
+ options?: never;
14207
+ head?: never;
14208
+ patch?: never;
14209
+ trace?: never;
14210
+ };
13702
14211
  "/frontend/wallets/{wallet_id}/transactions/{transaction_id}": {
13703
14212
  parameters: {
13704
14213
  query?: never;
@@ -17057,7 +17566,7 @@ export interface components {
17057
17566
  /** Format: uuid */
17058
17567
  id: string;
17059
17568
  /** @enum {string} */
17060
- type: "DEPOSIT_RECEIVED" | "DEPOSIT_NOT_ACCEPTED" | "TRANSFER_RECEIVED" | "ORDER_STATUS_CHANGED" | "KYC_STATUS_CHANGED" | "ANNOUNCEMENT" | "SYSTEM_MESSAGE" | "MASS_PAYOUT_STATUS_CHANGED" | "CARD_OTP" | "RFI_REQUESTED" | "RFI_RESOLVED";
17569
+ type: "DEPOSIT_RECEIVED" | "DEPOSIT_NOT_ACCEPTED" | "TRANSFER_RECEIVED" | "ORDER_STATUS_CHANGED" | "KYC_STATUS_CHANGED" | "ANNOUNCEMENT" | "SYSTEM_MESSAGE" | "MASS_PAYOUT_STATUS_CHANGED" | "CARD_OTP" | "RFI_REQUESTED" | "RFI_RESOLVED" | "REPORT_READY";
17061
17570
  /** @description Structured fact snapshot; the client renders the presentation. Shape depends on `type`; evolution is additive-only. */
17062
17571
  payload: Record<string, never>;
17063
17572
  /** Format: uuid */
@@ -17228,6 +17737,131 @@ export interface components {
17228
17737
  /** @description The report is sent to Telegram every month. Always false while not linked. */
17229
17738
  enabled?: boolean;
17230
17739
  };
17740
+ /**
17741
+ * Format: date
17742
+ * @description First day of the period, UTC.
17743
+ * @example 2026-09-01
17744
+ */
17745
+ ReportPeriodFrom: string;
17746
+ /**
17747
+ * Format: date
17748
+ * @description Last day of the period (inclusive), UTC.
17749
+ * @example 2026-09-24
17750
+ */
17751
+ ReportPeriodTo: string;
17752
+ /** @description Transaction statement → Banking & crypto — the wallet's orders of a period. Formats CSV, XLSX. */
17753
+ BankingCryptoStatementParams: {
17754
+ /**
17755
+ * @description Tab of the Transaction statement dialog — the feed the rows come from.
17756
+ * @enum {string}
17757
+ */
17758
+ source: "BANKING_CRYPTO";
17759
+ from: components["schemas"]["ReportPeriodFrom"];
17760
+ to: components["schemas"]["ReportPeriodTo"];
17761
+ /** @description Orders whose sent OR received currency is one of these. Empty or absent — every currency. */
17762
+ currency_ids?: string[];
17763
+ /** @description Order statuses to include; empty or absent — every status. Every status an unfiltered report can hold is accepted.
17764
+ * Design checkboxes: Pending → PENDING, Processing → PROCESSING, Complete → COMPLETE, Failed → FAILED,
17765
+ * Cancelled → CANCELED, Pending approval → NEW, Scheduled → EXPECTED, Refunded → REFUNDED. ERROR exists on legacy orders only.
17766
+ * */
17767
+ statuses?: ("NEW" | "PENDING" | "PROCESSING" | "COMPLETE" | "FAILED" | "ERROR" | "CANCELED" | "EXPECTED" | "REFUNDED")[];
17768
+ };
17769
+ /** @description Transaction statement → Debit cards — the transactions of one or several cards of the wallet, one file. Formats CSV, XLSX. Period up to 100 days. */
17770
+ DebitCardStatementParams: {
17771
+ /** @enum {string} */
17772
+ source: "DEBIT_CARD";
17773
+ from: components["schemas"]["ReportPeriodFrom"];
17774
+ to: components["schemas"]["ReportPeriodTo"];
17775
+ /** @description Cards of the wallet (the id the card endpoints take), in the order their rows follow one another. A card of another wallet → 404 REPORT_SUBJECT_NOT_FOUND. */
17776
+ card_ids: string[];
17777
+ };
17778
+ /** @description Transaction statement → Account cards — the transactions of a sub-account (card program) of the wallet. Formats CSV, XLSX. Period up to 100 days. */
17779
+ AccountCardStatementParams: {
17780
+ /** @enum {string} */
17781
+ source: "ACCOUNT_CARD";
17782
+ from: components["schemas"]["ReportPeriodFrom"];
17783
+ to: components["schemas"]["ReportPeriodTo"];
17784
+ /**
17785
+ * Format: uuid
17786
+ * @description Sub-account of the wallet. Another wallet's → 404 REPORT_SUBJECT_NOT_FOUND.
17787
+ */
17788
+ sub_account_id: string;
17789
+ /** @description Transaction status to keep, as the sub-account CSV export takes it; null or absent — every status. */
17790
+ status?: string | null;
17791
+ };
17792
+ /** @description Account statement — the wallet's transactions journal of a period, one page per currency, with a balance summary (Opening + Money in − Money out = Closing). Format PDF. */
17793
+ AccountStatementParams: {
17794
+ from: components["schemas"]["ReportPeriodFrom"];
17795
+ to: components["schemas"]["ReportPeriodTo"];
17796
+ /**
17797
+ * Format: uuid
17798
+ * @description One currency only; null or absent — every currency of the wallet.
17799
+ */
17800
+ crypto_id?: string | null;
17801
+ /**
17802
+ * @description Show dust transactions (is_threshold_amount) in the table too. The summary counts them either way.
17803
+ * @default false
17804
+ */
17805
+ show_low_balance: boolean;
17806
+ };
17807
+ /** @description Account details — the bank-details letter of a virtual account of the wallet. Format PDF. */
17808
+ AccountConfirmationParams: {
17809
+ /**
17810
+ * Format: uuid
17811
+ * @description Virtual account of the wallet. Another wallet's → 404 REPORT_SUBJECT_NOT_FOUND.
17812
+ */
17813
+ virtual_account_id: string;
17814
+ /**
17815
+ * @description Every deposit-enabled account of the wallet's KYC entity, not only this one.
17816
+ * @default false
17817
+ */
17818
+ all_accounts: boolean;
17819
+ };
17820
+ /** @description Params by type (and params.source for TRANSACTION_STATEMENT). The same shape comes back in the report. */
17821
+ WalletReportParams: components["schemas"]["BankingCryptoStatementParams"] | components["schemas"]["DebitCardStatementParams"] | components["schemas"]["AccountCardStatementParams"] | components["schemas"]["AccountStatementParams"] | components["schemas"]["AccountConfirmationParams"];
17822
+ WalletReport: {
17823
+ /** Format: uuid */
17824
+ id?: string;
17825
+ /** @enum {string} */
17826
+ type?: "TRANSACTION_STATEMENT" | "ACCOUNT_STATEMENT" | "ACCOUNT_CONFIRMATION";
17827
+ /**
17828
+ * @description CSV / XLSX for TRANSACTION_STATEMENT, PDF for ACCOUNT_STATEMENT and ACCOUNT_CONFIRMATION
17829
+ * @enum {string}
17830
+ */
17831
+ format?: "CSV" | "XLSX" | "PDF";
17832
+ /**
17833
+ * @description PENDING and GENERATING are shown as "Generating"; only READY can be downloaded.
17834
+ * @enum {string}
17835
+ */
17836
+ status?: "PENDING" | "GENERATING" | "READY" | "FAILED";
17837
+ params?: components["schemas"]["WalletReportParams"];
17838
+ /**
17839
+ * @description TIMEOUT — the attempt was still generating 30 minutes after it was queued; it is failed on the wallet's next report request.
17840
+ * @enum {string|null}
17841
+ */
17842
+ failure_code?: "GENERATION_ERROR" | "QUEUE_ERROR" | "TIMEOUT" | null;
17843
+ /** @description Generation attempt. A report is generated at most 3 times in total. */
17844
+ attempt?: number;
17845
+ /** @description FAILED with an attempt left — show the retry button. false after the 3rd failure. */
17846
+ can_retry?: boolean;
17847
+ /** @description Present when READY. */
17848
+ file?: {
17849
+ /**
17850
+ * @description What the report is and its period (transaction-statement-<source>_<from>_<to>, account-statement_<from>_<to>, account-details_<day>); the download link saves the file under this name.
17851
+ * @example transaction-statement-banking-crypto_2026-09-01_2026-09-24.xlsx
17852
+ */
17853
+ name?: string;
17854
+ content_type?: string;
17855
+ size_bytes?: number;
17856
+ row_count?: number;
17857
+ } | null;
17858
+ /** Format: uuid */
17859
+ requested_by?: string | null;
17860
+ /** Format: date-time */
17861
+ created_at?: string;
17862
+ /** Format: date-time */
17863
+ completed_at?: string | null;
17864
+ };
17231
17865
  RfiCase: {
17232
17866
  /** Format: uuid */
17233
17867
  id?: string;
@@ -17381,6 +18015,9 @@ export interface components {
17381
18015
  MassPayoutWalletId: string;
17382
18016
  MassPayoutId: string;
17383
18017
  MassPayoutTemplateId: string;
18018
+ /** @description Wallet the report belongs to */
18019
+ ReportWalletId: string;
18020
+ ReportId: string;
17384
18021
  /** @description The account the requests are about. Requests and their conversations are kept per account. */
17385
18022
  RfiWalletId: string;
17386
18023
  RfiCaseId: string;