squarefi-bff-api-module 1.36.78 → 1.36.80
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.
- package/dist/api/frontend.d.ts +6 -0
- package/dist/api/frontend.js +8 -0
- package/dist/api/kyc.d.ts +1 -0
- package/dist/api/kyc.js +1 -0
- package/dist/api/types/autogen/apiV1External.types.d.ts +6 -1
- package/dist/api/types/autogen/apiV1Frontend.types.d.ts +556 -78
- package/dist/api/types/autogen/apiV1Tenant.types.d.ts +2 -0
- package/dist/api/types/types.d.ts +44 -7
- package/package.json +1 -1
package/dist/api/frontend.d.ts
CHANGED
|
@@ -70,6 +70,12 @@ export declare const frontend: {
|
|
|
70
70
|
getAll: ({ wallet_id, ...params }: API.Frontend.VirtualAccounts.Programs.List.Request) => Promise<API.Frontend.VirtualAccounts.Programs.List.Response>;
|
|
71
71
|
};
|
|
72
72
|
};
|
|
73
|
+
kycRails: {
|
|
74
|
+
getAll: ({ wallet_id }: API.Frontend.KycRails.List.Request) => Promise<API.Frontend.KycRails.List.Response>;
|
|
75
|
+
getById: ({ wallet_id, rail_id }: API.Frontend.KycRails.Get.Request) => Promise<API.Frontend.KycRails.Get.Response>;
|
|
76
|
+
submit: ({ wallet_id, rail_id, }: API.Frontend.KycRails.Submit.Request) => Promise<API.Frontend.KycRails.Submit.Response>;
|
|
77
|
+
confirmTerms: ({ wallet_id, rail_id, }: API.Frontend.KycRails.ConfirmTerms.Request) => Promise<API.Frontend.KycRails.ConfirmTerms.Response>;
|
|
78
|
+
};
|
|
73
79
|
reference: {
|
|
74
80
|
exchangeRates: {
|
|
75
81
|
list: (params?: API.Frontend.Reference.ExchangeRates.List.Request) => Promise<API.Frontend.Reference.ExchangeRates.List.Response>;
|
package/dist/api/frontend.js
CHANGED
|
@@ -144,6 +144,14 @@ export const frontend = {
|
|
|
144
144
|
getAll: ({ wallet_id, ...params }) => apiClientV1Frontend.getRequest(`/frontend/virtual-accounts/programs/wallet/${wallet_id}`, { params }),
|
|
145
145
|
},
|
|
146
146
|
},
|
|
147
|
+
// Frontend twin of `kyc.rails.*` (BFF `/kyc/{wallet_id}/rails`). Reads take any wallet member; `submit` and
|
|
148
|
+
// `confirmTerms` take the wallet admin or owner, and only they get the rail's `extra_actions`.
|
|
149
|
+
kycRails: {
|
|
150
|
+
getAll: ({ wallet_id }) => apiClientV1Frontend.getRequest(`/frontend/wallets/${wallet_id}/kyc-rails`),
|
|
151
|
+
getById: ({ wallet_id, rail_id }) => apiClientV1Frontend.getRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}`),
|
|
152
|
+
submit: ({ wallet_id, rail_id, }) => apiClientV1Frontend.postRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}`),
|
|
153
|
+
confirmTerms: ({ wallet_id, rail_id, }) => apiClientV1Frontend.postRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}/terms-and-conditions`),
|
|
154
|
+
},
|
|
147
155
|
reference: {
|
|
148
156
|
// Frontend twin of `exchange.byOrderType.*` (legacy `GET /exchange/`): the same tenant pairs, but paged in
|
|
149
157
|
// memory — 50 per page by default, 500 at most, in no particular order — and behind the bearer session.
|
package/dist/api/kyc.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare const kyc: {
|
|
|
17
17
|
init: ({ kyc_entity_id, ...params }: API.KYC.Entity.Init.Request) => Promise<API.KYC.Entity.Init.Response>;
|
|
18
18
|
resume: ({ kyc_entity_id, verification_ref, }: API.KYC.Entity.Resume.Request) => Promise<API.KYC.Entity.Resume.Response>;
|
|
19
19
|
};
|
|
20
|
+
/** @deprecated BFF rails are replaced by CORE `/frontend/wallets/{wallet_id}/kyc-rails` (SFI-2614). Use `frontend.kycRails`. */
|
|
20
21
|
rails: {
|
|
21
22
|
info: {
|
|
22
23
|
getAll: ({ wallet_id }: API.KYC.Rails.RailInfo.List.Request) => Promise<API.KYC.Rails.RailInfo.List.Response>;
|
package/dist/api/kyc.js
CHANGED
|
@@ -17,6 +17,7 @@ export const kyc = {
|
|
|
17
17
|
init: ({ kyc_entity_id, ...params }) => apiClientV2.postRequest(`/kyc/entities/${kyc_entity_id}/init`, { params }),
|
|
18
18
|
resume: ({ kyc_entity_id, verification_ref, }) => apiClientV2.postRequest(`/kyc/entities/${kyc_entity_id}/resume/${verification_ref}`),
|
|
19
19
|
},
|
|
20
|
+
/** @deprecated BFF rails are replaced by CORE `/frontend/wallets/{wallet_id}/kyc-rails` (SFI-2614). Use `frontend.kycRails`. */
|
|
20
21
|
rails: {
|
|
21
22
|
info: {
|
|
22
23
|
getAll: ({ wallet_id }) => apiClientV2.getRequest(`/kyc/${wallet_id}/rails`),
|
|
@@ -2428,6 +2428,8 @@ export interface paths {
|
|
|
2428
2428
|
* Pass `status=FAILED` to get them back.
|
|
2429
2429
|
* */
|
|
2430
2430
|
status?: ("ACTIVE" | "INACTIVE" | "SUSPENDED" | "CANCELED")[];
|
|
2431
|
+
/** @description Only cards issued to this cardholder. */
|
|
2432
|
+
cardholder_id?: string;
|
|
2431
2433
|
/** @description Filter cards by last 4 digits of the card number (partial, case-insensitive match) */
|
|
2432
2434
|
last4?: string;
|
|
2433
2435
|
/** @description Number of items to skip */
|
|
@@ -4261,7 +4263,10 @@ export interface paths {
|
|
|
4261
4263
|
/**
|
|
4262
4264
|
* Withdraw funds from sub-account
|
|
4263
4265
|
* @description Withdraws funds from a sub-account back to the associated wallet.
|
|
4264
|
-
*
|
|
4266
|
+
* The sub-account is debited in its account_currency. The wallet is credited
|
|
4267
|
+
* in the tenant's base currency when the tenant has auto-exchange on (converted
|
|
4268
|
+
* at the tenant's WITHDRAW_CARD_SUBACCOUNT rate inside the same order), otherwise
|
|
4269
|
+
* — or when that pair has no rate — in the sub-account's account_currency.
|
|
4265
4270
|
*
|
|
4266
4271
|
* **Authentication**: x-api-key header required
|
|
4267
4272
|
*
|
|
@@ -2903,6 +2903,8 @@ export interface paths {
|
|
|
2903
2903
|
* client can act on. Pass `status=FAILED` to get them back.
|
|
2904
2904
|
* */
|
|
2905
2905
|
status?: ("ACTIVE" | "INACTIVE" | "FROZEN" | "CANCELED" | "CLOSED" | "BLOCKED" | "FAILED" | "PENDING")[];
|
|
2906
|
+
/** @description Only cards issued to this cardholder. */
|
|
2907
|
+
cardholder_id?: string;
|
|
2906
2908
|
/** @description Filter cards by last 4 digits of the card number (partial, case-insensitive match) */
|
|
2907
2909
|
last4?: string;
|
|
2908
2910
|
/** @description Number of items to skip */
|
|
@@ -4764,7 +4766,10 @@ export interface paths {
|
|
|
4764
4766
|
/**
|
|
4765
4767
|
* Withdraw funds from sub-account
|
|
4766
4768
|
* @description Withdraws funds from a sub-account back to the associated wallet.
|
|
4767
|
-
*
|
|
4769
|
+
* The sub-account is debited in its account_currency. The wallet is credited
|
|
4770
|
+
* in the tenant's base currency when the tenant has auto-exchange on (converted
|
|
4771
|
+
* at the tenant's WITHDRAW_CARD_SUBACCOUNT rate inside the same order), otherwise
|
|
4772
|
+
* — or when that pair has no rate — in the sub-account's account_currency.
|
|
4768
4773
|
*
|
|
4769
4774
|
* **Authentication**: Bearer token with x-tenant-id header required
|
|
4770
4775
|
*
|
|
@@ -9633,6 +9638,13 @@ export interface paths {
|
|
|
9633
9638
|
* Besides order columns it accepts `mass_payout_id` (uuid), which narrows the
|
|
9634
9639
|
* result to the orders of one mass payout batch — the same batch reported by
|
|
9635
9640
|
* the `mass_payout_id` field of each order. A non-uuid value is rejected with 400.
|
|
9641
|
+
*
|
|
9642
|
+
* It also accepts `rfi_case_id` (uuid), e.g. `[{"rfi_case_id":"<uuid>"}]`: only the
|
|
9643
|
+
* orders a compliance request covers — the same ones as `transactions` of
|
|
9644
|
+
* `GET /frontend/rfi/{wallet_id}/{case_id}`, closed requests included; dust orders
|
|
9645
|
+
* among them show only with `show_low_balance=true`, as everywhere in this list. It
|
|
9646
|
+
* combines with the other filters and the dates. A request of another account, or an
|
|
9647
|
+
* unknown id, gives an empty result; a non-uuid value is rejected with 400.
|
|
9636
9648
|
* */
|
|
9637
9649
|
filters?: string;
|
|
9638
9650
|
date_from?: string;
|
|
@@ -9662,6 +9674,15 @@ export interface paths {
|
|
|
9662
9674
|
};
|
|
9663
9675
|
};
|
|
9664
9676
|
};
|
|
9677
|
+
/** @description `INVALID_REQUEST` — `filters` is not a JSON array, or `mass_payout_id` / `rfi_case_id` is not a uuid */
|
|
9678
|
+
400: {
|
|
9679
|
+
headers: {
|
|
9680
|
+
[name: string]: unknown;
|
|
9681
|
+
};
|
|
9682
|
+
content: {
|
|
9683
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
9684
|
+
};
|
|
9685
|
+
};
|
|
9665
9686
|
/** @description Access denied to wallet */
|
|
9666
9687
|
403: {
|
|
9667
9688
|
headers: {
|
|
@@ -9704,6 +9725,13 @@ export interface paths {
|
|
|
9704
9725
|
* Besides order columns it accepts `mass_payout_id` (uuid), which narrows the
|
|
9705
9726
|
* result to the orders of one mass payout batch — the same batch reported by
|
|
9706
9727
|
* the `mass_payout_id` field of each order. A non-uuid value is rejected with 400.
|
|
9728
|
+
*
|
|
9729
|
+
* It also accepts `rfi_case_id` (uuid), e.g. `[{"rfi_case_id":"<uuid>"}]`: only the
|
|
9730
|
+
* orders a compliance request covers — the same ones as `transactions` of
|
|
9731
|
+
* `GET /frontend/rfi/{wallet_id}/{case_id}`, closed requests included; dust orders
|
|
9732
|
+
* among them show only with `show_low_balance=true`, as everywhere in this list. It
|
|
9733
|
+
* combines with the other filters and the dates. A request of another account, or an
|
|
9734
|
+
* unknown id, gives an empty result; a non-uuid value is rejected with 400.
|
|
9707
9735
|
* */
|
|
9708
9736
|
filters?: string;
|
|
9709
9737
|
/** @description If `true`, includes dust orders (amount below render threshold for either currency). Defaults to `false` — dust orders are hidden. */
|
|
@@ -9726,6 +9754,15 @@ export interface paths {
|
|
|
9726
9754
|
"text/csv": string;
|
|
9727
9755
|
};
|
|
9728
9756
|
};
|
|
9757
|
+
/** @description `INVALID_REQUEST` — `filters` is not a JSON array, or `mass_payout_id` / `rfi_case_id` is not a uuid */
|
|
9758
|
+
400: {
|
|
9759
|
+
headers: {
|
|
9760
|
+
[name: string]: unknown;
|
|
9761
|
+
};
|
|
9762
|
+
content: {
|
|
9763
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
9764
|
+
};
|
|
9765
|
+
};
|
|
9729
9766
|
/** @description Access denied to wallet */
|
|
9730
9767
|
403: {
|
|
9731
9768
|
headers: {
|
|
@@ -11299,11 +11336,15 @@ export interface paths {
|
|
|
11299
11336
|
};
|
|
11300
11337
|
/**
|
|
11301
11338
|
* List compliance requests (RFI) of an account, with the banner counters
|
|
11302
|
-
* @description Requests for information compliance sent about this account, newest first.
|
|
11303
|
-
*
|
|
11304
|
-
*
|
|
11305
|
-
*
|
|
11306
|
-
*
|
|
11339
|
+
* @description Requests for information compliance sent about this account, newest first. RFI in
|
|
11340
|
+
* the app is being rolled out per workspace: while a workspace still works RFI by
|
|
11341
|
+
* email, the list is empty, `summary` is all zeros and every request answers 404 —
|
|
11342
|
+
* its requests stay in the client's mailbox. `summary` counts every open request regardless of paging — use it for the
|
|
11343
|
+
* home-screen banner: `action_required > 0` shows it, `overdue > 0` turns it red,
|
|
11344
|
+
* `next_due_at` is the nearest deadline. Any wallet member except the scoped `user` role
|
|
11345
|
+
* may read. Refresh on the realtime `data.changed` hint with entity `WALLET_RFI`; a new
|
|
11346
|
+
* question, a new message from compliance and the closing also arrive as the
|
|
11347
|
+
* `RFI_REQUESTED` / `RFI_RESOLVED` notifications (in-app, push, email).
|
|
11307
11348
|
*
|
|
11308
11349
|
*/
|
|
11309
11350
|
get: {
|
|
@@ -11313,6 +11354,7 @@ export interface paths {
|
|
|
11313
11354
|
status?: "open" | "action_required" | "awaiting_compliance" | "closed";
|
|
11314
11355
|
/** @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
11356
|
order_uuid?: string;
|
|
11357
|
+
/** @description Page size, from 1 to 100; 20 when omitted. */
|
|
11316
11358
|
limit?: number;
|
|
11317
11359
|
offset?: number;
|
|
11318
11360
|
};
|
|
@@ -11333,24 +11375,41 @@ export interface paths {
|
|
|
11333
11375
|
content: {
|
|
11334
11376
|
"application/json": {
|
|
11335
11377
|
/** @example true */
|
|
11336
|
-
success
|
|
11337
|
-
data
|
|
11338
|
-
summary
|
|
11339
|
-
action_required
|
|
11340
|
-
overdue
|
|
11341
|
-
awaiting_compliance
|
|
11378
|
+
success: boolean;
|
|
11379
|
+
data: {
|
|
11380
|
+
summary: {
|
|
11381
|
+
action_required: number;
|
|
11382
|
+
overdue: number;
|
|
11383
|
+
awaiting_compliance: number;
|
|
11342
11384
|
/** Format: date-time */
|
|
11343
|
-
next_due_at
|
|
11385
|
+
next_due_at: string | null;
|
|
11344
11386
|
};
|
|
11345
|
-
items
|
|
11346
|
-
total
|
|
11347
|
-
limit
|
|
11348
|
-
offset
|
|
11387
|
+
items: components["schemas"]["RfiCase"][];
|
|
11388
|
+
total: number;
|
|
11389
|
+
limit: number;
|
|
11390
|
+
offset: number;
|
|
11349
11391
|
};
|
|
11350
11392
|
};
|
|
11351
11393
|
};
|
|
11352
11394
|
};
|
|
11353
|
-
|
|
11395
|
+
/** @description `VALIDATION_ERROR` — `limit` outside 1–100, a negative `offset`, an unknown `status` */
|
|
11396
|
+
400: {
|
|
11397
|
+
headers: {
|
|
11398
|
+
[name: string]: unknown;
|
|
11399
|
+
};
|
|
11400
|
+
content: {
|
|
11401
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11402
|
+
};
|
|
11403
|
+
};
|
|
11404
|
+
/** @description `ACCESS_DENIED` — not a member of this account */
|
|
11405
|
+
403: {
|
|
11406
|
+
headers: {
|
|
11407
|
+
[name: string]: unknown;
|
|
11408
|
+
};
|
|
11409
|
+
content: {
|
|
11410
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11411
|
+
};
|
|
11412
|
+
};
|
|
11354
11413
|
};
|
|
11355
11414
|
};
|
|
11356
11415
|
put?: never;
|
|
@@ -11371,7 +11430,8 @@ export interface paths {
|
|
|
11371
11430
|
/**
|
|
11372
11431
|
* Get a compliance request with its conversation and covered transactions
|
|
11373
11432
|
* @description The conversation holds compliance's questions and the client's answers, oldest first.
|
|
11374
|
-
* A request of another account answers 404
|
|
11433
|
+
* A request of another account answers 404, and so does every request of a workspace
|
|
11434
|
+
* that still works RFI by email.
|
|
11375
11435
|
*
|
|
11376
11436
|
*/
|
|
11377
11437
|
get: {
|
|
@@ -11395,12 +11455,38 @@ export interface paths {
|
|
|
11395
11455
|
content: {
|
|
11396
11456
|
"application/json": {
|
|
11397
11457
|
/** @example true */
|
|
11398
|
-
success
|
|
11399
|
-
data
|
|
11458
|
+
success: boolean;
|
|
11459
|
+
data: components["schemas"]["RfiCaseDetail"];
|
|
11400
11460
|
};
|
|
11401
11461
|
};
|
|
11402
11462
|
};
|
|
11403
|
-
|
|
11463
|
+
/** @description `VALIDATION_ERROR` — `case_id` is not a UUID */
|
|
11464
|
+
400: {
|
|
11465
|
+
headers: {
|
|
11466
|
+
[name: string]: unknown;
|
|
11467
|
+
};
|
|
11468
|
+
content: {
|
|
11469
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11470
|
+
};
|
|
11471
|
+
};
|
|
11472
|
+
/** @description `ACCESS_DENIED` — not a member of this account */
|
|
11473
|
+
403: {
|
|
11474
|
+
headers: {
|
|
11475
|
+
[name: string]: unknown;
|
|
11476
|
+
};
|
|
11477
|
+
content: {
|
|
11478
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11479
|
+
};
|
|
11480
|
+
};
|
|
11481
|
+
/** @description `NOT_FOUND` — no such request on this account */
|
|
11482
|
+
404: {
|
|
11483
|
+
headers: {
|
|
11484
|
+
[name: string]: unknown;
|
|
11485
|
+
};
|
|
11486
|
+
content: {
|
|
11487
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11488
|
+
};
|
|
11489
|
+
};
|
|
11404
11490
|
};
|
|
11405
11491
|
};
|
|
11406
11492
|
put?: never;
|
|
@@ -11422,10 +11508,18 @@ export interface paths {
|
|
|
11422
11508
|
put?: never;
|
|
11423
11509
|
/**
|
|
11424
11510
|
* Answer a compliance request
|
|
11425
|
-
* @description `multipart/form-data` with a `body` text field and up to 10
|
|
11426
|
-
* (PDF, JPEG, PNG, WebP, TXT, DOCX, XLSX; 20 MB each). At least one
|
|
11511
|
+
* @description `multipart/form-data` with a `body` text field (up to 20 000 characters) and up to 10
|
|
11512
|
+
* files under `files` (PDF, JPEG, PNG, WebP, TXT, DOCX, XLSX; 20 MB each). At least one
|
|
11513
|
+
* of the two is required.
|
|
11514
|
+
*
|
|
11515
|
+
* Each file is checked by its content, not by the `Content-Type` the browser sends: the
|
|
11516
|
+
* content must be one of these formats and the file name must end in its extension
|
|
11517
|
+
* (`.pdf`, `.jpg`/`.jpeg`, `.png`, `.webp`, `.txt`, `.docx`, `.xlsx`). The file is stored
|
|
11518
|
+
* under the type its content proves.
|
|
11519
|
+
*
|
|
11427
11520
|
* The request moves to `awaiting_compliance`; answering again while compliance reviews is
|
|
11428
|
-
* allowed, and compliance may ask further rounds. Requires the `admin` role on the
|
|
11521
|
+
* allowed, and compliance may ask further rounds. Requires the `owner` or `admin` role on the
|
|
11522
|
+
* wallet — an `auditor` reads only (`can_reply` is false for them).
|
|
11429
11523
|
* Do not set `Content-Type` manually — the browser adds the multipart boundary.
|
|
11430
11524
|
*
|
|
11431
11525
|
*/
|
|
@@ -11443,6 +11537,7 @@ export interface paths {
|
|
|
11443
11537
|
requestBody: {
|
|
11444
11538
|
content: {
|
|
11445
11539
|
"multipart/form-data": {
|
|
11540
|
+
/** @description The answer, up to 20 000 characters */
|
|
11446
11541
|
body?: string;
|
|
11447
11542
|
files?: string[];
|
|
11448
11543
|
};
|
|
@@ -11457,32 +11552,59 @@ export interface paths {
|
|
|
11457
11552
|
content: {
|
|
11458
11553
|
"application/json": {
|
|
11459
11554
|
/** @example true */
|
|
11460
|
-
success
|
|
11461
|
-
data
|
|
11555
|
+
success: boolean;
|
|
11556
|
+
data: components["schemas"]["RfiMessage"];
|
|
11462
11557
|
};
|
|
11463
11558
|
};
|
|
11464
11559
|
};
|
|
11465
|
-
/** @description `VALIDATION_ERROR`
|
|
11560
|
+
/** @description - `VALIDATION_ERROR` — no text and no files, more than 10 files, text over 20 000 characters, an empty file, `case_id` not a UUID
|
|
11561
|
+
* - `FILE_TOO_LARGE` — a file over 20 MB
|
|
11562
|
+
* - `UNSUPPORTED_FILE_TYPE` — a file whose content is not one of the formats, or does not match its name's extension
|
|
11563
|
+
* - `INVALID_REQUEST` — malformed multipart, or files under a field other than `files`
|
|
11564
|
+
* */
|
|
11466
11565
|
400: {
|
|
11467
11566
|
headers: {
|
|
11468
11567
|
[name: string]: unknown;
|
|
11469
11568
|
};
|
|
11470
|
-
content
|
|
11569
|
+
content: {
|
|
11570
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11571
|
+
};
|
|
11572
|
+
};
|
|
11573
|
+
/** @description `ACCESS_DENIED` — not a member of this account, or a member who only reads (`auditor`); `can_reply` in the detail is false for them */
|
|
11574
|
+
403: {
|
|
11575
|
+
headers: {
|
|
11576
|
+
[name: string]: unknown;
|
|
11577
|
+
};
|
|
11578
|
+
content: {
|
|
11579
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11580
|
+
};
|
|
11581
|
+
};
|
|
11582
|
+
/** @description `NOT_FOUND` — no such request on this account */
|
|
11583
|
+
404: {
|
|
11584
|
+
headers: {
|
|
11585
|
+
[name: string]: unknown;
|
|
11586
|
+
};
|
|
11587
|
+
content: {
|
|
11588
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11589
|
+
};
|
|
11471
11590
|
};
|
|
11472
|
-
404: components["responses"]["NotFoundError"];
|
|
11473
11591
|
/** @description `RFI_CLOSED` — the request no longer accepts replies */
|
|
11474
11592
|
409: {
|
|
11475
11593
|
headers: {
|
|
11476
11594
|
[name: string]: unknown;
|
|
11477
11595
|
};
|
|
11478
|
-
content
|
|
11596
|
+
content: {
|
|
11597
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11598
|
+
};
|
|
11479
11599
|
};
|
|
11480
|
-
/** @description
|
|
11600
|
+
/** @description `RATE_LIMIT_EXCEEDED` — more than 20 replies a minute */
|
|
11481
11601
|
429: {
|
|
11482
11602
|
headers: {
|
|
11483
11603
|
[name: string]: unknown;
|
|
11484
11604
|
};
|
|
11485
|
-
content
|
|
11605
|
+
content: {
|
|
11606
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11607
|
+
};
|
|
11486
11608
|
};
|
|
11487
11609
|
};
|
|
11488
11610
|
};
|
|
@@ -11522,16 +11644,42 @@ export interface paths {
|
|
|
11522
11644
|
content: {
|
|
11523
11645
|
"application/json": {
|
|
11524
11646
|
/** @example true */
|
|
11525
|
-
success
|
|
11526
|
-
data
|
|
11527
|
-
url
|
|
11647
|
+
success: boolean;
|
|
11648
|
+
data: {
|
|
11649
|
+
url: string;
|
|
11528
11650
|
/** @example 120 */
|
|
11529
|
-
expires_in
|
|
11651
|
+
expires_in: number;
|
|
11530
11652
|
};
|
|
11531
11653
|
};
|
|
11532
11654
|
};
|
|
11533
11655
|
};
|
|
11534
|
-
|
|
11656
|
+
/** @description `VALIDATION_ERROR` — `case_id` or `attachment_id` is not a UUID */
|
|
11657
|
+
400: {
|
|
11658
|
+
headers: {
|
|
11659
|
+
[name: string]: unknown;
|
|
11660
|
+
};
|
|
11661
|
+
content: {
|
|
11662
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11663
|
+
};
|
|
11664
|
+
};
|
|
11665
|
+
/** @description `ACCESS_DENIED` — not a member of this account */
|
|
11666
|
+
403: {
|
|
11667
|
+
headers: {
|
|
11668
|
+
[name: string]: unknown;
|
|
11669
|
+
};
|
|
11670
|
+
content: {
|
|
11671
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11672
|
+
};
|
|
11673
|
+
};
|
|
11674
|
+
/** @description `NOT_FOUND` — no such request or file on this account */
|
|
11675
|
+
404: {
|
|
11676
|
+
headers: {
|
|
11677
|
+
[name: string]: unknown;
|
|
11678
|
+
};
|
|
11679
|
+
content: {
|
|
11680
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
11681
|
+
};
|
|
11682
|
+
};
|
|
11535
11683
|
};
|
|
11536
11684
|
};
|
|
11537
11685
|
put?: never;
|
|
@@ -15127,6 +15275,279 @@ export interface paths {
|
|
|
15127
15275
|
patch?: never;
|
|
15128
15276
|
trace?: never;
|
|
15129
15277
|
};
|
|
15278
|
+
"/frontend/wallets/{wallet_id}/kyc-rails": {
|
|
15279
|
+
parameters: {
|
|
15280
|
+
query?: never;
|
|
15281
|
+
header?: never;
|
|
15282
|
+
path?: never;
|
|
15283
|
+
cookie?: never;
|
|
15284
|
+
};
|
|
15285
|
+
/**
|
|
15286
|
+
* KYC rails of the wallet
|
|
15287
|
+
* @description The tenant's KYC rails of the wallet's entity type and the universal ones, each with the wallet's
|
|
15288
|
+
* application on it. A rail is listed while it is active; an archived rail stays listed only when the
|
|
15289
|
+
* wallet is approved on it. `can_submit` tells whether `POST …/kyc-rails/{rail_id}` would be accepted now.
|
|
15290
|
+
*
|
|
15291
|
+
* Replaces the BFF `GET /kyc/{wallet_id}/rails`; items have its shape plus `can_submit`.
|
|
15292
|
+
*
|
|
15293
|
+
* **Access Control**: any member of the wallet except the scoped `user` role. No KYC gate.
|
|
15294
|
+
*
|
|
15295
|
+
*/
|
|
15296
|
+
get: {
|
|
15297
|
+
parameters: {
|
|
15298
|
+
query?: never;
|
|
15299
|
+
header?: never;
|
|
15300
|
+
path: {
|
|
15301
|
+
wallet_id: components["parameters"]["KycRailsWalletId"];
|
|
15302
|
+
};
|
|
15303
|
+
cookie?: never;
|
|
15304
|
+
};
|
|
15305
|
+
requestBody?: never;
|
|
15306
|
+
responses: {
|
|
15307
|
+
/** @description Rails of the wallet */
|
|
15308
|
+
200: {
|
|
15309
|
+
headers: {
|
|
15310
|
+
[name: string]: unknown;
|
|
15311
|
+
};
|
|
15312
|
+
content: {
|
|
15313
|
+
"application/json": {
|
|
15314
|
+
/** @example true */
|
|
15315
|
+
success: boolean;
|
|
15316
|
+
data: components["schemas"]["WalletKycRail"][];
|
|
15317
|
+
count: number;
|
|
15318
|
+
};
|
|
15319
|
+
};
|
|
15320
|
+
};
|
|
15321
|
+
401: components["responses"]["UnauthorizedError"];
|
|
15322
|
+
403: components["responses"]["ForbiddenError"];
|
|
15323
|
+
/** @description Wallet not found (NOT_FOUND) */
|
|
15324
|
+
404: {
|
|
15325
|
+
headers: {
|
|
15326
|
+
[name: string]: unknown;
|
|
15327
|
+
};
|
|
15328
|
+
content?: never;
|
|
15329
|
+
};
|
|
15330
|
+
};
|
|
15331
|
+
};
|
|
15332
|
+
put?: never;
|
|
15333
|
+
post?: never;
|
|
15334
|
+
delete?: never;
|
|
15335
|
+
options?: never;
|
|
15336
|
+
head?: never;
|
|
15337
|
+
patch?: never;
|
|
15338
|
+
trace?: never;
|
|
15339
|
+
};
|
|
15340
|
+
"/frontend/wallets/{wallet_id}/kyc-rails/{rail_id}": {
|
|
15341
|
+
parameters: {
|
|
15342
|
+
query?: never;
|
|
15343
|
+
header?: never;
|
|
15344
|
+
path?: never;
|
|
15345
|
+
cookie?: never;
|
|
15346
|
+
};
|
|
15347
|
+
/**
|
|
15348
|
+
* One KYC rail of the wallet
|
|
15349
|
+
* @description One rail with the wallet's application on it, under the visibility rule of the list.
|
|
15350
|
+
*
|
|
15351
|
+
* Replaces the BFF `GET /kyc/{wallet_id}/rails/{rail_id}`.
|
|
15352
|
+
*
|
|
15353
|
+
* **Access Control**: any member of the wallet except the scoped `user` role. No KYC gate.
|
|
15354
|
+
*
|
|
15355
|
+
*/
|
|
15356
|
+
get: {
|
|
15357
|
+
parameters: {
|
|
15358
|
+
query?: never;
|
|
15359
|
+
header?: never;
|
|
15360
|
+
path: {
|
|
15361
|
+
wallet_id: components["parameters"]["KycRailsWalletId"];
|
|
15362
|
+
/** @description `kyc_rails.id` of the wallet's tenant */
|
|
15363
|
+
rail_id: components["parameters"]["KycRailId"];
|
|
15364
|
+
};
|
|
15365
|
+
cookie?: never;
|
|
15366
|
+
};
|
|
15367
|
+
requestBody?: never;
|
|
15368
|
+
responses: {
|
|
15369
|
+
/** @description The rail */
|
|
15370
|
+
200: {
|
|
15371
|
+
headers: {
|
|
15372
|
+
[name: string]: unknown;
|
|
15373
|
+
};
|
|
15374
|
+
content: {
|
|
15375
|
+
"application/json": components["schemas"]["WalletKycRailResponse"];
|
|
15376
|
+
};
|
|
15377
|
+
};
|
|
15378
|
+
/** @description `rail_id` is not a UUID (VALIDATION_ERROR) */
|
|
15379
|
+
400: {
|
|
15380
|
+
headers: {
|
|
15381
|
+
[name: string]: unknown;
|
|
15382
|
+
};
|
|
15383
|
+
content?: never;
|
|
15384
|
+
};
|
|
15385
|
+
401: components["responses"]["UnauthorizedError"];
|
|
15386
|
+
403: components["responses"]["ForbiddenError"];
|
|
15387
|
+
/** @description No such rail on the wallet's tenant, or an archived rail the wallet is not approved on (RAIL_NOT_FOUND) */
|
|
15388
|
+
404: {
|
|
15389
|
+
headers: {
|
|
15390
|
+
[name: string]: unknown;
|
|
15391
|
+
};
|
|
15392
|
+
content?: never;
|
|
15393
|
+
};
|
|
15394
|
+
};
|
|
15395
|
+
};
|
|
15396
|
+
put?: never;
|
|
15397
|
+
/**
|
|
15398
|
+
* Submit the wallet to a KYC rail
|
|
15399
|
+
* @description Puts the wallet on the rail, the way compliance does from the panel: a rail whose vendor CORE onboards
|
|
15400
|
+
* itself is submitted here, any other goes through the KYC-admin service. A manual rail waits for
|
|
15401
|
+
* compliance (`WAITING_ON_REVIEW`); a universal rail is approved on the spot. An application the vendor
|
|
15402
|
+
* sent back (`HOLD`, `SOFT_REJECT`) is resubmitted. No body.
|
|
15403
|
+
*
|
|
15404
|
+
* Refused unless the rail has an onboarding implementation (Rail.io rails never do), takes submissions,
|
|
15405
|
+
* fits the entity type, and the entity's KYC is `APPROVED` or `WAITING_ON_REVIEW`. On a tenant without KYC
|
|
15406
|
+
* only the tenant's default universal rail can be submitted without it.
|
|
15407
|
+
*
|
|
15408
|
+
* Replaces the BFF `POST /kyc/{wallet_id}/rails/{rail_id}`.
|
|
15409
|
+
*
|
|
15410
|
+
* **Access Control**: wallet `admin` or `owner`. No KYC gate.
|
|
15411
|
+
*
|
|
15412
|
+
*/
|
|
15413
|
+
post: {
|
|
15414
|
+
parameters: {
|
|
15415
|
+
query?: never;
|
|
15416
|
+
header?: never;
|
|
15417
|
+
path: {
|
|
15418
|
+
wallet_id: components["parameters"]["KycRailsWalletId"];
|
|
15419
|
+
/** @description `kyc_rails.id` of the wallet's tenant */
|
|
15420
|
+
rail_id: components["parameters"]["KycRailId"];
|
|
15421
|
+
};
|
|
15422
|
+
cookie?: never;
|
|
15423
|
+
};
|
|
15424
|
+
requestBody?: never;
|
|
15425
|
+
responses: {
|
|
15426
|
+
/** @description The rail after the submission */
|
|
15427
|
+
200: {
|
|
15428
|
+
headers: {
|
|
15429
|
+
[name: string]: unknown;
|
|
15430
|
+
};
|
|
15431
|
+
content: {
|
|
15432
|
+
"application/json": components["schemas"]["WalletKycRailResponse"];
|
|
15433
|
+
};
|
|
15434
|
+
};
|
|
15435
|
+
/** @description `rail_id` is not a UUID (VALIDATION_ERROR); the rail has no onboarding implementation, or is a universal
|
|
15436
|
+
* rail other than the tenant's default on a tenant without KYC (RAIL_NOT_AVAILABLE); the rail takes no
|
|
15437
|
+
* submissions (RAIL_SUBMIT_UNAVAILABLE); the rail is of the other entity type (RAIL_TYPE_MISMATCH); the
|
|
15438
|
+
* onboarding behind the rail refused the submission (RAIL_SUBMISSION_REJECTED — the vendor's reason is
|
|
15439
|
+
* logged, never returned)
|
|
15440
|
+
* */
|
|
15441
|
+
400: {
|
|
15442
|
+
headers: {
|
|
15443
|
+
[name: string]: unknown;
|
|
15444
|
+
};
|
|
15445
|
+
content?: never;
|
|
15446
|
+
};
|
|
15447
|
+
401: components["responses"]["UnauthorizedError"];
|
|
15448
|
+
/** @description Not an admin of the wallet (ACCESS_DENIED), or the entity's KYC is not approved or under review (KYC_NOT_APPROVED) */
|
|
15449
|
+
403: {
|
|
15450
|
+
headers: {
|
|
15451
|
+
[name: string]: unknown;
|
|
15452
|
+
};
|
|
15453
|
+
content?: never;
|
|
15454
|
+
};
|
|
15455
|
+
/** @description No such rail on the wallet's tenant, or an archived one (RAIL_NOT_FOUND) */
|
|
15456
|
+
404: {
|
|
15457
|
+
headers: {
|
|
15458
|
+
[name: string]: unknown;
|
|
15459
|
+
};
|
|
15460
|
+
content?: never;
|
|
15461
|
+
};
|
|
15462
|
+
/** @description Already approved on the rail (RAIL_ALREADY_APPROVED), an application is with the vendor
|
|
15463
|
+
* (RAIL_SUBMISSION_IN_PROGRESS), or the same submission is being processed (OPERATION_IN_PROGRESS)
|
|
15464
|
+
* */
|
|
15465
|
+
409: {
|
|
15466
|
+
headers: {
|
|
15467
|
+
[name: string]: unknown;
|
|
15468
|
+
};
|
|
15469
|
+
content?: never;
|
|
15470
|
+
};
|
|
15471
|
+
/** @description The onboarding behind the rail failed or is unreachable (RAIL_SUBMISSION_FAILED), or the lock service is down (SERVICE_UNAVAILABLE) */
|
|
15472
|
+
503: {
|
|
15473
|
+
headers: {
|
|
15474
|
+
[name: string]: unknown;
|
|
15475
|
+
};
|
|
15476
|
+
content?: never;
|
|
15477
|
+
};
|
|
15478
|
+
};
|
|
15479
|
+
};
|
|
15480
|
+
delete?: never;
|
|
15481
|
+
options?: never;
|
|
15482
|
+
head?: never;
|
|
15483
|
+
patch?: never;
|
|
15484
|
+
trace?: never;
|
|
15485
|
+
};
|
|
15486
|
+
"/frontend/wallets/{wallet_id}/kyc-rails/{rail_id}/terms-and-conditions": {
|
|
15487
|
+
parameters: {
|
|
15488
|
+
query?: never;
|
|
15489
|
+
header?: never;
|
|
15490
|
+
path?: never;
|
|
15491
|
+
cookie?: never;
|
|
15492
|
+
};
|
|
15493
|
+
get?: never;
|
|
15494
|
+
put?: never;
|
|
15495
|
+
/**
|
|
15496
|
+
* Accept the terms of a KYC rail
|
|
15497
|
+
* @description Records that the wallet accepted the rail's terms (`wallet_rail.terms_confirmed`). The wallet must have
|
|
15498
|
+
* submitted to the rail first. No body.
|
|
15499
|
+
*
|
|
15500
|
+
* Replaces the BFF `POST /kyc/{wallet_id}/rails/{rail_id}/terms-and-conditions`.
|
|
15501
|
+
*
|
|
15502
|
+
* **Access Control**: wallet `admin` or `owner`. No KYC gate.
|
|
15503
|
+
*
|
|
15504
|
+
*/
|
|
15505
|
+
post: {
|
|
15506
|
+
parameters: {
|
|
15507
|
+
query?: never;
|
|
15508
|
+
header?: never;
|
|
15509
|
+
path: {
|
|
15510
|
+
wallet_id: components["parameters"]["KycRailsWalletId"];
|
|
15511
|
+
/** @description `kyc_rails.id` of the wallet's tenant */
|
|
15512
|
+
rail_id: components["parameters"]["KycRailId"];
|
|
15513
|
+
};
|
|
15514
|
+
cookie?: never;
|
|
15515
|
+
};
|
|
15516
|
+
requestBody?: never;
|
|
15517
|
+
responses: {
|
|
15518
|
+
/** @description The rail with the terms accepted */
|
|
15519
|
+
200: {
|
|
15520
|
+
headers: {
|
|
15521
|
+
[name: string]: unknown;
|
|
15522
|
+
};
|
|
15523
|
+
content: {
|
|
15524
|
+
"application/json": components["schemas"]["WalletKycRailResponse"];
|
|
15525
|
+
};
|
|
15526
|
+
};
|
|
15527
|
+
/** @description `rail_id` is not a UUID (VALIDATION_ERROR) */
|
|
15528
|
+
400: {
|
|
15529
|
+
headers: {
|
|
15530
|
+
[name: string]: unknown;
|
|
15531
|
+
};
|
|
15532
|
+
content?: never;
|
|
15533
|
+
};
|
|
15534
|
+
401: components["responses"]["UnauthorizedError"];
|
|
15535
|
+
403: components["responses"]["ForbiddenError"];
|
|
15536
|
+
/** @description No such rail (RAIL_NOT_FOUND), or the wallet never submitted to it (RAIL_NOT_SUBMITTED) */
|
|
15537
|
+
404: {
|
|
15538
|
+
headers: {
|
|
15539
|
+
[name: string]: unknown;
|
|
15540
|
+
};
|
|
15541
|
+
content?: never;
|
|
15542
|
+
};
|
|
15543
|
+
};
|
|
15544
|
+
};
|
|
15545
|
+
delete?: never;
|
|
15546
|
+
options?: never;
|
|
15547
|
+
head?: never;
|
|
15548
|
+
patch?: never;
|
|
15549
|
+
trace?: never;
|
|
15550
|
+
};
|
|
15130
15551
|
"/frontend/notifications/test": {
|
|
15131
15552
|
parameters: {
|
|
15132
15553
|
query?: never;
|
|
@@ -17007,6 +17428,50 @@ export interface components {
|
|
|
17007
17428
|
email: string | null;
|
|
17008
17429
|
phone: string | null;
|
|
17009
17430
|
};
|
|
17431
|
+
/** @description A terms-and-conditions document of a KYC rail. */
|
|
17432
|
+
WalletKycRailTerms: {
|
|
17433
|
+
title: string;
|
|
17434
|
+
description: string | null;
|
|
17435
|
+
link: string | null;
|
|
17436
|
+
};
|
|
17437
|
+
/** @description Something the user has to do with the rail vendor: `verification` — a vendor self-verification link (`type` names it, `full_name` the person it is for); `kyb_onboarding` — the vendor-hosted onboarding link. */
|
|
17438
|
+
WalletKycRailExtraAction: {
|
|
17439
|
+
/** @enum {string} */
|
|
17440
|
+
action: "verification" | "kyb_onboarding";
|
|
17441
|
+
type: string;
|
|
17442
|
+
full_name: string | null;
|
|
17443
|
+
/** Format: uri */
|
|
17444
|
+
url: string;
|
|
17445
|
+
};
|
|
17446
|
+
/** @description The wallet's application on the rail. `null` on the rail while the wallet never submitted to it. */
|
|
17447
|
+
WalletKycRailApplication: {
|
|
17448
|
+
/**
|
|
17449
|
+
* @description `APPROVED` — onboarded. `PROCESSING` / `PENDING` — with the vendor. `HOLD` / `SOFT_REJECT` — the vendor asked for a resubmission. `WAITING_ON_REVIEW` — a manual rail waiting for compliance.
|
|
17450
|
+
* @enum {string}
|
|
17451
|
+
*/
|
|
17452
|
+
status: "APPROVED" | "DECLINED" | "PENDING" | "PROCESSING" | "HOLD" | "NEEDS_ATTENTION" | "DOUBLE" | "SOFT_REJECT" | "REJECT" | "UNVERIFIED" | "WAITING_ON_UBOS" | "WAITING_ON_REVIEW";
|
|
17453
|
+
/** @description Neutral text for the status, for display. Never the vendor's or compliance's own words. */
|
|
17454
|
+
message: string | null;
|
|
17455
|
+
terms_confirmed: boolean;
|
|
17456
|
+
/** @description Vendor links to follow. Always empty for a caller below wallet `admin` — the links are one-time capabilities. */
|
|
17457
|
+
extra_actions: components["schemas"]["WalletKycRailExtraAction"][];
|
|
17458
|
+
/** @description The terms the rail had when the wallet first submitted — what the user accepted. */
|
|
17459
|
+
terms_and_conditions: components["schemas"]["WalletKycRailTerms"][];
|
|
17460
|
+
};
|
|
17461
|
+
/** @description A KYC rail of the wallet's tenant with the wallet's application on it. Same shape as the BFF `GET /kyc/{wallet_id}/rails` item, plus `can_submit`. Vendor texts are not returned: `wallet_rail.message` is a neutral text for the status. */
|
|
17462
|
+
WalletKycRail: {
|
|
17463
|
+
/** Format: uuid */
|
|
17464
|
+
id: string;
|
|
17465
|
+
code: string | null;
|
|
17466
|
+
name: string;
|
|
17467
|
+
/** @description The rail takes submissions at all. */
|
|
17468
|
+
is_submit_available: boolean;
|
|
17469
|
+
/** @description The wallet can submit to the rail right now: it has an onboarding implementation, is of the entity's type or universal, the entity's KYC is approved or under review, and no application is approved or with the vendor. */
|
|
17470
|
+
can_submit: boolean;
|
|
17471
|
+
/** @description The rail's active terms, in display order. */
|
|
17472
|
+
terms_and_conditions: components["schemas"]["WalletKycRailTerms"][];
|
|
17473
|
+
wallet_rail: components["schemas"]["WalletKycRailApplication"] | null;
|
|
17474
|
+
};
|
|
17010
17475
|
/** @description One aggregated crypto balance of the wallet: every balance row sharing the same symbol is merged into a single entry, and `details[]` keeps the per-row breakdown. */
|
|
17011
17476
|
WalletBalanceEntry: {
|
|
17012
17477
|
symbol: string;
|
|
@@ -17864,87 +18329,97 @@ export interface components {
|
|
|
17864
18329
|
};
|
|
17865
18330
|
RfiCase: {
|
|
17866
18331
|
/** Format: uuid */
|
|
17867
|
-
id
|
|
18332
|
+
id: string;
|
|
17868
18333
|
/**
|
|
17869
18334
|
* @description Human-facing id — quoted in the notification email
|
|
17870
18335
|
* @example RFI-000042
|
|
17871
18336
|
*/
|
|
17872
|
-
reference
|
|
18337
|
+
reference: string;
|
|
17873
18338
|
/** @enum {string} */
|
|
17874
|
-
type
|
|
18339
|
+
type: "onboarding" | "transaction" | "ongoing";
|
|
18340
|
+
/**
|
|
18341
|
+
* @description What the request is about — the subject compliance wrote when opening it. Show it as is above the conversation; `messages` hold the question itself.
|
|
18342
|
+
* @example Incoming payments of $10,970 and $7,500
|
|
18343
|
+
*/
|
|
18344
|
+
subject: string;
|
|
17875
18345
|
/**
|
|
17876
18346
|
* @description `action_required` — compliance asked and waits for the client; `awaiting_compliance` — the client answered, compliance is reviewing; `closed` — no longer accepts replies.
|
|
17877
18347
|
* @enum {string}
|
|
17878
18348
|
*/
|
|
17879
|
-
status
|
|
18349
|
+
status: "action_required" | "awaiting_compliance" | "closed";
|
|
17880
18350
|
/**
|
|
17881
18351
|
* Format: date-time
|
|
17882
18352
|
* @description When the answer is due
|
|
17883
18353
|
*/
|
|
17884
|
-
due_at
|
|
18354
|
+
due_at: string | null;
|
|
17885
18355
|
/** @description True only while `action_required` and past `due_at` (red banner) */
|
|
17886
|
-
overdue
|
|
18356
|
+
overdue: boolean;
|
|
17887
18357
|
/** @description One of the covered transactions is held until the request closes */
|
|
17888
|
-
holds_transaction
|
|
18358
|
+
holds_transaction: boolean;
|
|
17889
18359
|
/** @description The account is on hold while the request is open */
|
|
17890
|
-
holds_account
|
|
18360
|
+
holds_account: boolean;
|
|
17891
18361
|
/** @description How many transactions the request covers */
|
|
17892
|
-
transactions_count
|
|
18362
|
+
transactions_count: number;
|
|
17893
18363
|
/** @description The last message of the conversation, for the card — null while nothing is visible yet */
|
|
17894
|
-
last_message
|
|
18364
|
+
last_message: {
|
|
17895
18365
|
/** @enum {string} */
|
|
17896
|
-
author
|
|
18366
|
+
author: "compliance" | "client";
|
|
17897
18367
|
/** @description One line of the message, up to 140 characters, cut at a word */
|
|
17898
|
-
preview
|
|
18368
|
+
preview: string | null;
|
|
17899
18369
|
/** Format: date-time */
|
|
17900
|
-
created_at
|
|
18370
|
+
created_at: string;
|
|
17901
18371
|
} | null;
|
|
17902
18372
|
/** Format: date-time */
|
|
17903
|
-
created_at
|
|
18373
|
+
created_at: string;
|
|
17904
18374
|
/** Format: date-time */
|
|
17905
|
-
updated_at
|
|
18375
|
+
updated_at: string;
|
|
17906
18376
|
/** Format: date-time */
|
|
17907
|
-
closed_at
|
|
18377
|
+
closed_at: string | null;
|
|
17908
18378
|
};
|
|
17909
18379
|
RfiAttachment: {
|
|
17910
18380
|
/** Format: uuid */
|
|
17911
|
-
id
|
|
17912
|
-
file_name
|
|
17913
|
-
|
|
17914
|
-
|
|
18381
|
+
id: string;
|
|
18382
|
+
file_name: string;
|
|
18383
|
+
/** @description The type the file's content proves (for files sent in the app); null only on some files that came by email */
|
|
18384
|
+
content_type: string | null;
|
|
18385
|
+
size_bytes: number | null;
|
|
17915
18386
|
/** Format: date-time */
|
|
17916
|
-
created_at
|
|
18387
|
+
created_at: string;
|
|
17917
18388
|
};
|
|
17918
18389
|
RfiMessage: {
|
|
17919
18390
|
/** Format: uuid */
|
|
17920
|
-
id
|
|
17921
|
-
/** @enum {string} */
|
|
17922
|
-
author?: "compliance" | "client";
|
|
18391
|
+
id: string;
|
|
17923
18392
|
/**
|
|
17924
|
-
* @description
|
|
17925
|
-
* @
|
|
18393
|
+
* @description Which side wrote the message. The analyst is never named — show a placeholder (e.g. "Compliance team") for `compliance` and "You" for `client`.
|
|
18394
|
+
* @enum {string}
|
|
17926
18395
|
*/
|
|
17927
|
-
|
|
17928
|
-
body
|
|
17929
|
-
attachments
|
|
18396
|
+
author: "compliance" | "client";
|
|
18397
|
+
body: string;
|
|
18398
|
+
attachments: components["schemas"]["RfiAttachment"][];
|
|
17930
18399
|
/** Format: date-time */
|
|
17931
|
-
created_at
|
|
18400
|
+
created_at: string;
|
|
17932
18401
|
};
|
|
17933
18402
|
RfiTransaction: {
|
|
17934
|
-
order_uuid
|
|
17935
|
-
order_type
|
|
17936
|
-
status
|
|
17937
|
-
amount_from
|
|
17938
|
-
amount_to
|
|
18403
|
+
order_uuid: string;
|
|
18404
|
+
order_type: string | null;
|
|
18405
|
+
status: string | null;
|
|
18406
|
+
amount_from: number | null;
|
|
18407
|
+
amount_to: number | null;
|
|
17939
18408
|
/** Format: date-time */
|
|
17940
|
-
created_at
|
|
18409
|
+
created_at: string | null;
|
|
17941
18410
|
};
|
|
17942
18411
|
RfiCaseDetail: components["schemas"]["RfiCase"] & {
|
|
17943
|
-
|
|
18412
|
+
/** @description Whether YOU may answer this request now: it is open (`action_required` or `awaiting_compliance`) and your role on the account writes — `owner` or `admin`. False on a closed request and for an `auditor`, who reads the conversation only: show it read-only, without the answer box. Otherwise `POST …/messages` answers 409 `RFI_CLOSED` or 403 `ACCESS_DENIED` respectively. */
|
|
18413
|
+
can_reply: boolean;
|
|
17944
18414
|
/** @description The conversation, oldest first */
|
|
17945
|
-
messages
|
|
17946
|
-
/** @description Every transaction the request covers, in the order compliance linked them */
|
|
17947
|
-
transactions
|
|
18415
|
+
messages: components["schemas"]["RfiMessage"][];
|
|
18416
|
+
/** @description Every transaction the request covers, in the order compliance linked them. For the full table (currencies, paging) open the order list with `filters=[{"rfi_case_id":"<id>"}]`. */
|
|
18417
|
+
transactions: components["schemas"]["RfiTransaction"][];
|
|
18418
|
+
};
|
|
18419
|
+
WalletKycRailResponse: {
|
|
18420
|
+
/** @example true */
|
|
18421
|
+
success: boolean;
|
|
18422
|
+
data: components["schemas"]["WalletKycRail"];
|
|
17948
18423
|
};
|
|
17949
18424
|
};
|
|
17950
18425
|
responses: {
|
|
@@ -18021,6 +18496,9 @@ export interface components {
|
|
|
18021
18496
|
/** @description The account the requests are about. Requests and their conversations are kept per account. */
|
|
18022
18497
|
RfiWalletId: string;
|
|
18023
18498
|
RfiCaseId: string;
|
|
18499
|
+
KycRailsWalletId: string;
|
|
18500
|
+
/** @description `kyc_rails.id` of the wallet's tenant */
|
|
18501
|
+
KycRailId: string;
|
|
18024
18502
|
};
|
|
18025
18503
|
requestBodies: never;
|
|
18026
18504
|
headers: never;
|
|
@@ -6513,6 +6513,8 @@ export interface paths {
|
|
|
6513
6513
|
* Accepts a single value or a comma-separated list, e.g. `status=ACTIVE,CANCELED`.
|
|
6514
6514
|
* */
|
|
6515
6515
|
status?: ("ACTIVE" | "INACTIVE" | "SUSPENDED" | "CANCELED")[];
|
|
6516
|
+
/** @description Only cards issued to this cardholder. */
|
|
6517
|
+
cardholder_id?: string;
|
|
6516
6518
|
sub_account_type?: "balance" | "prepaid";
|
|
6517
6519
|
offset?: number;
|
|
6518
6520
|
limit?: number;
|
|
@@ -816,6 +816,33 @@ export declare namespace API {
|
|
|
816
816
|
}
|
|
817
817
|
export {};
|
|
818
818
|
}
|
|
819
|
+
namespace KycRails {
|
|
820
|
+
type ListRoot = pathsV1Frontend['/frontend/wallets/{wallet_id}/kyc-rails'];
|
|
821
|
+
type RailRoot = pathsV1Frontend['/frontend/wallets/{wallet_id}/kyc-rails/{rail_id}'];
|
|
822
|
+
type TermsRoot = pathsV1Frontend['/frontend/wallets/{wallet_id}/kyc-rails/{rail_id}/terms-and-conditions'];
|
|
823
|
+
export type WalletKycRail = componentsV1Frontend['schemas']['WalletKycRail'];
|
|
824
|
+
export type WalletKycRailApplication = componentsV1Frontend['schemas']['WalletKycRailApplication'];
|
|
825
|
+
export type WalletKycRailExtraAction = componentsV1Frontend['schemas']['WalletKycRailExtraAction'];
|
|
826
|
+
export type WalletKycRailTerms = componentsV1Frontend['schemas']['WalletKycRailTerms'];
|
|
827
|
+
export type RailStatus = WalletKycRailApplication['status'];
|
|
828
|
+
export namespace List {
|
|
829
|
+
type Request = ListRoot['get']['parameters']['path'];
|
|
830
|
+
type Response = ListRoot['get']['responses'][200]['content']['application/json'];
|
|
831
|
+
}
|
|
832
|
+
export namespace Get {
|
|
833
|
+
type Request = RailRoot['get']['parameters']['path'];
|
|
834
|
+
type Response = RailRoot['get']['responses'][200]['content']['application/json'];
|
|
835
|
+
}
|
|
836
|
+
export namespace Submit {
|
|
837
|
+
type Request = RailRoot['post']['parameters']['path'];
|
|
838
|
+
type Response = RailRoot['post']['responses'][200]['content']['application/json'];
|
|
839
|
+
}
|
|
840
|
+
export namespace ConfirmTerms {
|
|
841
|
+
type Request = TermsRoot['post']['parameters']['path'];
|
|
842
|
+
type Response = TermsRoot['post']['responses'][200]['content']['application/json'];
|
|
843
|
+
}
|
|
844
|
+
export {};
|
|
845
|
+
}
|
|
819
846
|
namespace Reference {
|
|
820
847
|
namespace ExchangeRates {
|
|
821
848
|
type ExchangeRatesRoot = pathsV1Frontend['/frontend/reference/exchange_rates'];
|
|
@@ -1666,8 +1693,7 @@ export declare namespace API {
|
|
|
1666
1693
|
* transactions, answered by the account's team with text and files.
|
|
1667
1694
|
*
|
|
1668
1695
|
* Every path is scoped by `wallet_id`, so each Request carries it. Responses are the frontend
|
|
1669
|
-
* `{ success, data }` envelope as the spec declares it.
|
|
1670
|
-
* because the spec declares no `required`; the types tighten on the regeneration that adds it.
|
|
1696
|
+
* `{ success, data }` envelope as the spec declares it.
|
|
1671
1697
|
*/
|
|
1672
1698
|
namespace Rfi {
|
|
1673
1699
|
type CasesRoot = pathsV1Frontend['/frontend/rfi/{wallet_id}'];
|
|
@@ -1679,12 +1705,17 @@ export declare namespace API {
|
|
|
1679
1705
|
export type Message = componentsV1Frontend['schemas']['RfiMessage'];
|
|
1680
1706
|
export type Attachment = componentsV1Frontend['schemas']['RfiAttachment'];
|
|
1681
1707
|
export type Transaction = componentsV1Frontend['schemas']['RfiTransaction'];
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1708
|
+
/**
|
|
1709
|
+
* The body of every RFI error response (`400`, `403`, `404`, `409`, `429`). The client rejects with
|
|
1710
|
+
* the `AxiosError`, so read it from `response.data`; the RFI code is its `error.code`.
|
|
1711
|
+
*/
|
|
1712
|
+
export type ErrorResponse = componentsV1Frontend['schemas']['ErrorResponse'];
|
|
1713
|
+
export type CaseStatus = Case['status'];
|
|
1714
|
+
export type CaseType = Case['type'];
|
|
1715
|
+
export type MessageAuthor = Message['author'];
|
|
1685
1716
|
/** The list's `status` filter. `open` = `action_required` + `awaiting_compliance`; no case has it. */
|
|
1686
1717
|
export type ListStatus = NonNullable<List.Request['status']>;
|
|
1687
|
-
export type Summary =
|
|
1718
|
+
export type Summary = List.Response['data']['summary'];
|
|
1688
1719
|
export namespace List {
|
|
1689
1720
|
type Request = CasesRoot['get']['parameters']['path'] & NonNullable<CasesRoot['get']['parameters']['query']>;
|
|
1690
1721
|
type Response = CasesRoot['get']['responses']['200']['content']['application/json'];
|
|
@@ -2395,7 +2426,13 @@ export declare namespace API {
|
|
|
2395
2426
|
* is refused with 400.
|
|
2396
2427
|
*/
|
|
2397
2428
|
type OrderListMassPayoutFilter = Record<'mass_payout_id', string>;
|
|
2398
|
-
|
|
2429
|
+
/**
|
|
2430
|
+
* Narrows the feed to the orders a compliance request covers — the same ones as
|
|
2431
|
+
* `transactions` in the request's detail, closed requests included. A single uuid only
|
|
2432
|
+
* (not an array); a non-uuid value is refused with 400.
|
|
2433
|
+
*/
|
|
2434
|
+
type OrderListRfiCaseFilter = Record<'rfi_case_id', string>;
|
|
2435
|
+
type OrderListFilter = OrderListStatusFilter | OrderListOrderTypeFilter | OrderListFromUuidFilter | OrderListToUuidFilter | OrderListMassPayoutFilter | OrderListRfiCaseFilter;
|
|
2399
2436
|
interface Request {
|
|
2400
2437
|
wallet_uuid: string;
|
|
2401
2438
|
offset?: number;
|