squarefi-bff-api-module 1.36.37 → 1.36.39
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.
|
@@ -1543,7 +1543,13 @@ export interface paths {
|
|
|
1543
1543
|
* @description Uploads KYC files against a wallet via `multipart/form-data`, with no
|
|
1544
1544
|
* cardholder involved. The form field name is the document type
|
|
1545
1545
|
* (`selfie`, `gov_id_front`, `gov_id_back`); one file per type, 5MB max
|
|
1546
|
-
* each,
|
|
1546
|
+
* each, photos only (png/jpeg).
|
|
1547
|
+
*
|
|
1548
|
+
* Send the file the camera produced, unchanged: cropping, resizing or
|
|
1549
|
+
* re-encoding a document photo can make the vendor's tampering check
|
|
1550
|
+
* answer `Forgery attempt has been made.` — a verdict far worse than the
|
|
1551
|
+
* poor quality it was meant to fix. Too small to read means retake it
|
|
1552
|
+
* (card filling the frame, straight, no glare), not improve the file.
|
|
1547
1553
|
*
|
|
1548
1554
|
* Send one file per request to get per-file progress and retry a single
|
|
1549
1555
|
* file, or send several at once. The response returns an `id` per file;
|
|
@@ -1878,11 +1884,12 @@ export interface paths {
|
|
|
1878
1884
|
*/
|
|
1879
1885
|
cardholder_relationship?: "EMPLOYEE" | "CONTRACTOR";
|
|
1880
1886
|
/**
|
|
1881
|
-
* @description Identity document type (KYC vendors)
|
|
1887
|
+
* @description Identity document type (KYC vendors). Which values are accepted depends on the country that issued the document — read cardholder_requirements.country_rules[gov_id_country].gov_id_types instead of hardcoding the list (id_card_cn is the mainland China resident ID, id_card_hk the HKID).
|
|
1888
|
+
*
|
|
1882
1889
|
* @enum {string}
|
|
1883
1890
|
*/
|
|
1884
|
-
gov_id_type?: "passport" | "id_card" | "driving_license";
|
|
1885
|
-
/** @description Identity document number */
|
|
1891
|
+
gov_id_type?: "passport" | "id_card" | "driving_license" | "residence_permit_eu" | "residence_permit_ae" | "id_card_cn" | "id_card_hk";
|
|
1892
|
+
/** @description Identity document number (passport / driving licence / national ID). */
|
|
1886
1893
|
gov_id_number?: string;
|
|
1887
1894
|
/**
|
|
1888
1895
|
* @description Issuing country of the identity document (2-3 letter code)
|
|
@@ -1896,9 +1903,16 @@ export interface paths {
|
|
|
1896
1903
|
gov_id_issuance_date?: string;
|
|
1897
1904
|
/**
|
|
1898
1905
|
* Format: date
|
|
1899
|
-
* @description Identity document expiry date (YYYY-MM-DD)
|
|
1906
|
+
* @description Identity document expiry date (YYYY-MM-DD). Required by the vendor review even for a document issued for life (an Indonesian KTP, "SEUMUR HIDUP"), which has no expiry printed on it — send the issuance date plus 100 years.
|
|
1907
|
+
*
|
|
1900
1908
|
*/
|
|
1901
1909
|
gov_id_expiration_date?: string;
|
|
1910
|
+
/**
|
|
1911
|
+
* @description Tax identifier of the cardholder, separate from the document number. Required by Interlace CONSUMER programs when nationality is USA, where it must be a valid SSN (9 digits or XXX-XX-XXXX).
|
|
1912
|
+
*
|
|
1913
|
+
* @example 123-45-6789
|
|
1914
|
+
*/
|
|
1915
|
+
tax_identification_number?: string;
|
|
1902
1916
|
/** @description Cardholder's address */
|
|
1903
1917
|
address?: {
|
|
1904
1918
|
/**
|
|
@@ -1913,7 +1927,11 @@ export interface paths {
|
|
|
1913
1927
|
line2?: string;
|
|
1914
1928
|
/** @example New York */
|
|
1915
1929
|
city?: string;
|
|
1916
|
-
/**
|
|
1930
|
+
/**
|
|
1931
|
+
* @description Subdivision. Required for a US or Canadian address and must be the two-letter code (AL, ON); optional elsewhere.
|
|
1932
|
+
*
|
|
1933
|
+
* @example NY
|
|
1934
|
+
*/
|
|
1917
1935
|
state?: string;
|
|
1918
1936
|
/** @example 10001 */
|
|
1919
1937
|
postal_code?: string;
|
|
@@ -2261,6 +2279,16 @@ export interface paths {
|
|
|
2261
2279
|
* **Retryable**: a failed submit leaves the draft untouched — complete the dossier and
|
|
2262
2280
|
* call this endpoint again.
|
|
2263
2281
|
*
|
|
2282
|
+
* **After a rejection**: a cardholder whose identity review came back
|
|
2283
|
+
* `review_status: REJECTED` or `REQUEST` (read it, with `reject_reason`, from
|
|
2284
|
+
* `GET /api/issuing/cardholders/{cardholder_id}`) may be submitted again. Fix what the
|
|
2285
|
+
* vendor named — `PATCH` the field, or upload a better photo and re-attach it via
|
|
2286
|
+
* `POST /cardholders/{cardholder_id}/documents`, which replaces the document of that
|
|
2287
|
+
* type — then call this endpoint once more. The review restarts on the vendor account the
|
|
2288
|
+
* person already has: the same document cannot be registered twice at the vendor, so a
|
|
2289
|
+
* fresh cardholder is NOT the way to retry. While a review is running, another submit is
|
|
2290
|
+
* refused with `409`.
|
|
2291
|
+
*
|
|
2264
2292
|
* **Authentication**: x-api-key header required
|
|
2265
2293
|
*
|
|
2266
2294
|
*/
|
|
@@ -2320,7 +2348,7 @@ export interface paths {
|
|
|
2320
2348
|
"application/json": components["schemas"]["ApiErrorResponse"];
|
|
2321
2349
|
};
|
|
2322
2350
|
};
|
|
2323
|
-
/** @description Cardholder is
|
|
2351
|
+
/** @description Cardholder is live at the vendor, or its review is still running */
|
|
2324
2352
|
409: {
|
|
2325
2353
|
headers: {
|
|
2326
2354
|
[name: string]: unknown;
|
|
@@ -4985,8 +5013,16 @@ export interface paths {
|
|
|
4985
5013
|
* @example b2f3d8c1-4a7e-4d22-9c5f-1e6a8d0b2a44
|
|
4986
5014
|
*/
|
|
4987
5015
|
counterparty_destination_id: string;
|
|
4988
|
-
/**
|
|
5016
|
+
/**
|
|
5017
|
+
* @description Amount to send, in `from_currency_id` units. With `is_reverse: true` — the amount the receiver must be credited.
|
|
5018
|
+
* @example 50
|
|
5019
|
+
*/
|
|
4989
5020
|
amount: number;
|
|
5021
|
+
/**
|
|
5022
|
+
* @description Optional. When true, `amount` is the receive-amount and the debited amount is grossed up with fees.
|
|
5023
|
+
* @default false
|
|
5024
|
+
*/
|
|
5025
|
+
is_reverse?: boolean;
|
|
4990
5026
|
/**
|
|
4991
5027
|
* Format: date-time
|
|
4992
5028
|
* @description Optional. Schedule the transfer for a future time (min 1 hour, max 90 days ahead). No funds are reserved; after approval the order waits in EXPECTED status and executes automatically.
|
|
@@ -5072,10 +5108,10 @@ export interface paths {
|
|
|
5072
5108
|
*
|
|
5073
5109
|
* Two-phase: the order is created in `NEW` status without touching the
|
|
5074
5110
|
* balance; `POST /api/orders/{id}/approve` checks the balance, debits the
|
|
5075
|
-
* funds and dispatches the on-chain send.
|
|
5076
|
-
*
|
|
5077
|
-
*
|
|
5078
|
-
*
|
|
5111
|
+
* funds and dispatches the on-chain send. This endpoint is external-only:
|
|
5112
|
+
* the order always goes on-chain, even if the destination address belongs
|
|
5113
|
+
* to a wallet on this platform. Internal (off-chain) transfers are created
|
|
5114
|
+
* only through the internal transfer endpoint.
|
|
5079
5115
|
*
|
|
5080
5116
|
* **Prerequisites:**
|
|
5081
5117
|
* - A counterparty destination of type `CRYPTO_EXTERNAL` or `CRYPTO_INTERNAL`
|
|
@@ -7355,7 +7391,7 @@ export interface components {
|
|
|
7355
7391
|
*/
|
|
7356
7392
|
level?: "minimal" | "basic" | "full";
|
|
7357
7393
|
/**
|
|
7358
|
-
* @description Required field names; address fields are dotted (address.line1)
|
|
7394
|
+
* @description Required field names; address fields are dotted (address.line1). Interlace CONSUMER also lists gov_id_issuance_date and gov_id_expiration_date (ISO YYYY-MM-DD).
|
|
7359
7395
|
* @example [
|
|
7360
7396
|
* "first_name",
|
|
7361
7397
|
* "last_name",
|
|
@@ -7368,6 +7404,37 @@ export interface components {
|
|
|
7368
7404
|
required?: string[];
|
|
7369
7405
|
/** @description Documents that must be attached; empty below the full level */
|
|
7370
7406
|
required_documents?: ("gov_id_front" | "gov_id_back" | "selfie")[];
|
|
7407
|
+
/** @description Human-readable constraints the field list cannot express. Interlace CONSUMER: if nationality is USA, tax_identification_number is required and must be a valid SSN. */
|
|
7408
|
+
notes?: string[];
|
|
7409
|
+
/** @description What each country changes, keyed by ISO 3166-1 alpha-3 with a `default` entry; empty when the vendor reviews nothing. These fields stay out of `required` because they only hold once the nationality or address country is known: read the rule for the nationality the user picked (required_by_nationality), the rule for the address country (required_by_address), and the rule for the country that issued the document (gov_id_types). */
|
|
7410
|
+
country_rules?: {
|
|
7411
|
+
[key: string]: {
|
|
7412
|
+
/**
|
|
7413
|
+
* @description gov_id_type values accepted for a document issued by this country
|
|
7414
|
+
* @example [
|
|
7415
|
+
* "passport",
|
|
7416
|
+
* "driving_license",
|
|
7417
|
+
* "id_card"
|
|
7418
|
+
* ]
|
|
7419
|
+
*/
|
|
7420
|
+
gov_id_types?: string[];
|
|
7421
|
+
/**
|
|
7422
|
+
* @description Extra fields a person of this nationality must provide
|
|
7423
|
+
* @example [
|
|
7424
|
+
* "tax_identification_number"
|
|
7425
|
+
* ]
|
|
7426
|
+
*/
|
|
7427
|
+
required_by_nationality?: string[];
|
|
7428
|
+
/**
|
|
7429
|
+
* @description Extra fields an address in this country must carry
|
|
7430
|
+
* @example [
|
|
7431
|
+
* "address.state"
|
|
7432
|
+
* ]
|
|
7433
|
+
*/
|
|
7434
|
+
required_by_address?: string[];
|
|
7435
|
+
notes?: string[];
|
|
7436
|
+
};
|
|
7437
|
+
};
|
|
7371
7438
|
};
|
|
7372
7439
|
/** @description Available order types */
|
|
7373
7440
|
order_types?: Record<string, never>[];
|
|
@@ -406,7 +406,20 @@ export interface paths {
|
|
|
406
406
|
* "transaction_currency": "PLN",
|
|
407
407
|
* "vendor_transaction_id": "A2012189003898834946",
|
|
408
408
|
* "timestamp": "2026-01-16T23:43:37.851",
|
|
409
|
-
* "otp": null
|
|
409
|
+
* "otp": null,
|
|
410
|
+
* "cardholder": {
|
|
411
|
+
* "id": "uuid",
|
|
412
|
+
* "first_name": "Paul",
|
|
413
|
+
* "last_name": "Kashuba",
|
|
414
|
+
* "phone": "+15551234567",
|
|
415
|
+
* "email": "p.kashuba@gmail.com",
|
|
416
|
+
* "kyc_level": "basic"
|
|
417
|
+
* },
|
|
418
|
+
* "sub_account": {
|
|
419
|
+
* "id": "uuid",
|
|
420
|
+
* "balance": 181.25,
|
|
421
|
+
* "currency": "USD"
|
|
422
|
+
* }
|
|
410
423
|
* },
|
|
411
424
|
* "created_at": "2026-01-16T15:43:40.168+00"
|
|
412
425
|
* }
|
|
@@ -4175,11 +4188,12 @@ export interface paths {
|
|
|
4175
4188
|
*/
|
|
4176
4189
|
cardholder_relationship?: "EMPLOYEE" | "CONTRACTOR";
|
|
4177
4190
|
/**
|
|
4178
|
-
* @description Identity document type (KYC vendors)
|
|
4191
|
+
* @description Identity document type (KYC vendors). Which values are accepted depends on the country that issued the document — read cardholder_requirements.country_rules[gov_id_country].gov_id_types instead of hardcoding the list (id_card_cn is the mainland China resident ID, id_card_hk the HKID).
|
|
4192
|
+
*
|
|
4179
4193
|
* @enum {string}
|
|
4180
4194
|
*/
|
|
4181
|
-
gov_id_type?: "passport" | "id_card" | "driving_license";
|
|
4182
|
-
/** @description Identity document number */
|
|
4195
|
+
gov_id_type?: "passport" | "id_card" | "driving_license" | "residence_permit_eu" | "residence_permit_ae" | "id_card_cn" | "id_card_hk";
|
|
4196
|
+
/** @description Identity document number (passport / driving licence / national ID). */
|
|
4183
4197
|
gov_id_number?: string;
|
|
4184
4198
|
/**
|
|
4185
4199
|
* @description Issuing country of the identity document (2-3 letter code)
|
|
@@ -4193,9 +4207,16 @@ export interface paths {
|
|
|
4193
4207
|
gov_id_issuance_date?: string;
|
|
4194
4208
|
/**
|
|
4195
4209
|
* Format: date
|
|
4196
|
-
* @description Identity document expiry date (YYYY-MM-DD)
|
|
4210
|
+
* @description Identity document expiry date (YYYY-MM-DD). Required by the vendor review even for a document issued for life (an Indonesian KTP, "SEUMUR HIDUP"), which has no expiry printed on it — send the issuance date plus 100 years.
|
|
4211
|
+
*
|
|
4197
4212
|
*/
|
|
4198
4213
|
gov_id_expiration_date?: string;
|
|
4214
|
+
/**
|
|
4215
|
+
* @description Tax identifier of the cardholder, separate from the document number. Required by Interlace CONSUMER programs when nationality is USA, where it must be a valid SSN (9 digits or XXX-XX-XXXX).
|
|
4216
|
+
*
|
|
4217
|
+
* @example 123-45-6789
|
|
4218
|
+
*/
|
|
4219
|
+
tax_identification_number?: string;
|
|
4199
4220
|
/** @description Cardholder's address */
|
|
4200
4221
|
address?: {
|
|
4201
4222
|
/**
|
|
@@ -4210,7 +4231,11 @@ export interface paths {
|
|
|
4210
4231
|
line2?: string;
|
|
4211
4232
|
/** @example New York */
|
|
4212
4233
|
city?: string;
|
|
4213
|
-
/**
|
|
4234
|
+
/**
|
|
4235
|
+
* @description Subdivision. Required for a US or Canadian address and must be the two-letter code (AL, ON); optional elsewhere.
|
|
4236
|
+
*
|
|
4237
|
+
* @example NY
|
|
4238
|
+
*/
|
|
4214
4239
|
state?: string;
|
|
4215
4240
|
/** @example 10001 */
|
|
4216
4241
|
postal_code?: string;
|
|
@@ -4404,110 +4429,7 @@ export interface paths {
|
|
|
4404
4429
|
};
|
|
4405
4430
|
options?: never;
|
|
4406
4431
|
head?: never;
|
|
4407
|
-
|
|
4408
|
-
* Update cardholder
|
|
4409
|
-
* @description Updates cardholder information.
|
|
4410
|
-
*
|
|
4411
|
-
* **Authentication**: Bearer token with x-tenant-id header required
|
|
4412
|
-
*
|
|
4413
|
-
* **Access Control**: Cardholder must belong to the user's wallet
|
|
4414
|
-
*
|
|
4415
|
-
*/
|
|
4416
|
-
patch: {
|
|
4417
|
-
parameters: {
|
|
4418
|
-
query?: {
|
|
4419
|
-
/** @description Wallet ID for access validation */
|
|
4420
|
-
wallet_id?: string;
|
|
4421
|
-
};
|
|
4422
|
-
header?: never;
|
|
4423
|
-
path: {
|
|
4424
|
-
/** @description The ID of the cardholder to update */
|
|
4425
|
-
cardholder_id: string;
|
|
4426
|
-
};
|
|
4427
|
-
cookie?: never;
|
|
4428
|
-
};
|
|
4429
|
-
requestBody: {
|
|
4430
|
-
content: {
|
|
4431
|
-
"application/json": {
|
|
4432
|
-
/** @description Cardholder's first name */
|
|
4433
|
-
first_name?: string;
|
|
4434
|
-
/** @description Cardholder's last name */
|
|
4435
|
-
last_name?: string;
|
|
4436
|
-
/**
|
|
4437
|
-
* Format: email
|
|
4438
|
-
* @description Cardholder's email address
|
|
4439
|
-
*/
|
|
4440
|
-
email?: string;
|
|
4441
|
-
/** @description Cardholder's phone number */
|
|
4442
|
-
phone?: string;
|
|
4443
|
-
/**
|
|
4444
|
-
* @description Cardholder's nationality as ISO 3166-1 alpha-3 country code
|
|
4445
|
-
* @example USA
|
|
4446
|
-
*/
|
|
4447
|
-
nationality?: string;
|
|
4448
|
-
/** @enum {string} */
|
|
4449
|
-
gender?: "M" | "F";
|
|
4450
|
-
/** @enum {string} */
|
|
4451
|
-
cardholder_relationship?: "EMPLOYEE" | "CONTRACTOR";
|
|
4452
|
-
/** @enum {string} */
|
|
4453
|
-
gov_id_type?: "passport" | "id_card" | "driving_license";
|
|
4454
|
-
gov_id_number?: string;
|
|
4455
|
-
/** @description 2-3 letter uppercase country code */
|
|
4456
|
-
gov_id_country?: string;
|
|
4457
|
-
/** Format: date */
|
|
4458
|
-
gov_id_issuance_date?: string;
|
|
4459
|
-
/** Format: date */
|
|
4460
|
-
gov_id_expiration_date?: string;
|
|
4461
|
-
address?: {
|
|
4462
|
-
line1?: string;
|
|
4463
|
-
line2?: string;
|
|
4464
|
-
city?: string;
|
|
4465
|
-
state?: string;
|
|
4466
|
-
postal_code?: string;
|
|
4467
|
-
country?: string;
|
|
4468
|
-
};
|
|
4469
|
-
};
|
|
4470
|
-
};
|
|
4471
|
-
};
|
|
4472
|
-
responses: {
|
|
4473
|
-
/** @description Cardholder updated successfully */
|
|
4474
|
-
200: {
|
|
4475
|
-
headers: {
|
|
4476
|
-
[name: string]: unknown;
|
|
4477
|
-
};
|
|
4478
|
-
content: {
|
|
4479
|
-
"application/json": {
|
|
4480
|
-
/** @example true */
|
|
4481
|
-
success?: boolean;
|
|
4482
|
-
data?: components["schemas"]["IssuingCardholder"];
|
|
4483
|
-
/** @example Cardholder updated successfully */
|
|
4484
|
-
message?: string;
|
|
4485
|
-
};
|
|
4486
|
-
};
|
|
4487
|
-
};
|
|
4488
|
-
/** @description Invalid request parameters */
|
|
4489
|
-
400: {
|
|
4490
|
-
headers: {
|
|
4491
|
-
[name: string]: unknown;
|
|
4492
|
-
};
|
|
4493
|
-
content?: never;
|
|
4494
|
-
};
|
|
4495
|
-
/** @description Access denied to this cardholder */
|
|
4496
|
-
403: {
|
|
4497
|
-
headers: {
|
|
4498
|
-
[name: string]: unknown;
|
|
4499
|
-
};
|
|
4500
|
-
content?: never;
|
|
4501
|
-
};
|
|
4502
|
-
/** @description Cardholder not found */
|
|
4503
|
-
404: {
|
|
4504
|
-
headers: {
|
|
4505
|
-
[name: string]: unknown;
|
|
4506
|
-
};
|
|
4507
|
-
content?: never;
|
|
4508
|
-
};
|
|
4509
|
-
};
|
|
4510
|
-
};
|
|
4432
|
+
patch?: never;
|
|
4511
4433
|
trace?: never;
|
|
4512
4434
|
};
|
|
4513
4435
|
"/frontend/issuing/cardholders/{cardholder_id}/submit": {
|
|
@@ -4532,8 +4454,17 @@ export interface paths {
|
|
|
4532
4454
|
* **Retryable**: a failed submit leaves the draft untouched. Nothing is rolled back,
|
|
4533
4455
|
* and the same endpoint can be called again once the dossier is complete.
|
|
4534
4456
|
*
|
|
4535
|
-
* **
|
|
4536
|
-
*
|
|
4457
|
+
* **After a rejection**: a cardholder whose identity review came back
|
|
4458
|
+
* `review_status: REJECTED` or `REQUEST` (read it, with `reject_reason`, from
|
|
4459
|
+
* `GET /frontend/issuing/cardholders/{cardholder_id}`) may be submitted again. Fix what
|
|
4460
|
+
* the vendor named — `PATCH` the field, or upload a better photo and re-attach it via
|
|
4461
|
+
* `POST /cardholders/{cardholder_id}/documents`, which replaces the document of that
|
|
4462
|
+
* type — then call this endpoint once more. The review restarts on the vendor account
|
|
4463
|
+
* the person already has: the same document cannot be registered twice at the vendor, so
|
|
4464
|
+
* a fresh cardholder is NOT the way to retry.
|
|
4465
|
+
*
|
|
4466
|
+
* **Idempotency**: while a review is running, or once the cardholder is live, another
|
|
4467
|
+
* submit returns `409 CARDHOLDER_NOT_DRAFT` rather than spending a second review.
|
|
4537
4468
|
*
|
|
4538
4469
|
* **Authentication**: Bearer token with x-tenant-id header required
|
|
4539
4470
|
*
|
|
@@ -4592,7 +4523,7 @@ export interface paths {
|
|
|
4592
4523
|
};
|
|
4593
4524
|
content?: never;
|
|
4594
4525
|
};
|
|
4595
|
-
/** @description Cardholder is
|
|
4526
|
+
/** @description Cardholder is live at the vendor, or its review is still running */
|
|
4596
4527
|
409: {
|
|
4597
4528
|
headers: {
|
|
4598
4529
|
[name: string]: unknown;
|
|
@@ -4628,8 +4559,8 @@ export interface paths {
|
|
|
4628
4559
|
* @description Uploads KYC files against a wallet via `multipart/form-data`, with no
|
|
4629
4560
|
* cardholder involved — the upload step of the create flow runs before the
|
|
4630
4561
|
* cardholder exists. The form field name is the document type (`selfie`,
|
|
4631
|
-
* `gov_id_front`, `gov_id_back`); one file per type, 5MB max each,
|
|
4632
|
-
* png/jpeg
|
|
4562
|
+
* `gov_id_front`, `gov_id_back`); one file per type, 5MB max each, photos
|
|
4563
|
+
* only (png/jpeg).
|
|
4633
4564
|
*
|
|
4634
4565
|
* Send one file per request so the UI can show progress per file and retry
|
|
4635
4566
|
* a single file. The response returns an `id` per file; pass those ids to
|
|
@@ -4640,6 +4571,14 @@ export interface paths {
|
|
|
4640
4571
|
* boundary itself, and the file has to be appended as a `File`/`Blob`, not
|
|
4641
4572
|
* as a name or a base64 string.
|
|
4642
4573
|
*
|
|
4574
|
+
* **Send the file the camera produced, unchanged.** Do not crop, rotate,
|
|
4575
|
+
* resize or re-encode it on the client: the vendor's identity review runs
|
|
4576
|
+
* a tampering check, and a re-encoded document photo can come back as
|
|
4577
|
+
* `Forgery attempt has been made.` — a verdict far worse than the poor
|
|
4578
|
+
* quality it was meant to fix. When a photo is too small or unreadable,
|
|
4579
|
+
* ask the person to retake it (card filling the frame, straight, no
|
|
4580
|
+
* glare) instead of improving the file.
|
|
4581
|
+
*
|
|
4643
4582
|
* An upload that is never attached is deleted by a cleanup sweep.
|
|
4644
4583
|
*
|
|
4645
4584
|
* **Authentication**: Bearer token with x-tenant-id header required
|
|
@@ -6030,8 +5969,8 @@ export interface paths {
|
|
|
6030
5969
|
cookie?: never;
|
|
6031
5970
|
};
|
|
6032
5971
|
/**
|
|
6033
|
-
* Effective
|
|
6034
|
-
* @description
|
|
5972
|
+
* Effective notification preferences
|
|
5973
|
+
* @description Both dimensions in full with defaults applied — delivery channels (`IN_APP` is always enabled) and notification categories (every category is user-configurable).
|
|
6035
5974
|
*/
|
|
6036
5975
|
get: {
|
|
6037
5976
|
parameters: {
|
|
@@ -6042,7 +5981,7 @@ export interface paths {
|
|
|
6042
5981
|
};
|
|
6043
5982
|
requestBody?: never;
|
|
6044
5983
|
responses: {
|
|
6045
|
-
/** @description Effective preference per channel. */
|
|
5984
|
+
/** @description Effective preference per channel and per category. */
|
|
6046
5985
|
200: {
|
|
6047
5986
|
headers: {
|
|
6048
5987
|
[name: string]: unknown;
|
|
@@ -6053,6 +5992,7 @@ export interface paths {
|
|
|
6053
5992
|
success?: boolean;
|
|
6054
5993
|
data?: {
|
|
6055
5994
|
preferences?: components["schemas"]["NotificationPreference"][];
|
|
5995
|
+
categories?: components["schemas"]["NotificationCategoryPreference"][];
|
|
6056
5996
|
};
|
|
6057
5997
|
};
|
|
6058
5998
|
};
|
|
@@ -6061,8 +6001,8 @@ export interface paths {
|
|
|
6061
6001
|
};
|
|
6062
6002
|
};
|
|
6063
6003
|
/**
|
|
6064
|
-
* Update
|
|
6065
|
-
* @description Bulk upsert. Disabling `IN_APP` is rejected with 400 (`INBOX_CHANNEL_LOCKED`). Changes apply from the next delivery.
|
|
6004
|
+
* Update notification preferences
|
|
6005
|
+
* @description Bulk upsert of either or both dimensions. Disabling the `IN_APP` channel is rejected with 400 (`INBOX_CHANNEL_LOCKED`). A disabled category mutes push and email for its notifications; the inbox always receives them. Changes apply from the next delivery.
|
|
6066
6006
|
*/
|
|
6067
6007
|
put: {
|
|
6068
6008
|
parameters: {
|
|
@@ -6074,12 +6014,13 @@ export interface paths {
|
|
|
6074
6014
|
requestBody: {
|
|
6075
6015
|
content: {
|
|
6076
6016
|
"application/json": {
|
|
6077
|
-
preferences
|
|
6017
|
+
preferences?: components["schemas"]["NotificationPreference"][];
|
|
6018
|
+
categories?: components["schemas"]["NotificationCategoryPreference"][];
|
|
6078
6019
|
};
|
|
6079
6020
|
};
|
|
6080
6021
|
};
|
|
6081
6022
|
responses: {
|
|
6082
|
-
/** @description Effective
|
|
6023
|
+
/** @description Effective preferences of both dimensions after the update. */
|
|
6083
6024
|
200: {
|
|
6084
6025
|
headers: {
|
|
6085
6026
|
[name: string]: unknown;
|
|
@@ -6090,6 +6031,7 @@ export interface paths {
|
|
|
6090
6031
|
success?: boolean;
|
|
6091
6032
|
data?: {
|
|
6092
6033
|
preferences?: components["schemas"]["NotificationPreference"][];
|
|
6034
|
+
categories?: components["schemas"]["NotificationCategoryPreference"][];
|
|
6093
6035
|
};
|
|
6094
6036
|
};
|
|
6095
6037
|
};
|
|
@@ -6659,7 +6601,13 @@ export interface paths {
|
|
|
6659
6601
|
* @description Counterparty destination of type INTERNAL (points at the receiver wallet).
|
|
6660
6602
|
*/
|
|
6661
6603
|
counterparty_destination_id: string;
|
|
6604
|
+
/** @description Amount to send, in `from_currency_id` units. With `is_reverse: true` — the amount the receiver must be credited. */
|
|
6662
6605
|
amount: number;
|
|
6606
|
+
/**
|
|
6607
|
+
* @description When true, `amount` is the receive-amount and the debited amount is grossed up with fees.
|
|
6608
|
+
* @default false
|
|
6609
|
+
*/
|
|
6610
|
+
is_reverse?: boolean;
|
|
6663
6611
|
/**
|
|
6664
6612
|
* Format: date-time
|
|
6665
6613
|
* @description Optional. Schedule the transfer for a future time (min 1 hour, max 90 days ahead). No funds are reserved; after approval the order waits in EXPECTED status and executes automatically.
|
|
@@ -6743,10 +6691,13 @@ export interface paths {
|
|
|
6743
6691
|
* the order is created in `NEW` status without touching the balance;
|
|
6744
6692
|
* `POST /frontend/orders/{id}/approve` (OTP-gated, keyed on the order
|
|
6745
6693
|
* id) checks the balance, debits the funds and dispatches the on-chain
|
|
6746
|
-
* send.
|
|
6747
|
-
*
|
|
6748
|
-
*
|
|
6749
|
-
*
|
|
6694
|
+
* send. This endpoint is external-only: the order always goes on-chain,
|
|
6695
|
+
* even if the destination address belongs to a wallet on this platform
|
|
6696
|
+
* (the receiver is then credited by the regular deposit flow). Internal
|
|
6697
|
+
* (off-chain, fee-free) transfers are created only through the internal
|
|
6698
|
+
* transfer endpoint — use
|
|
6699
|
+
* `GET /frontend/counterparty/destinations/{id}/internal-transfer` to
|
|
6700
|
+
* offer that option when the destination supports it.
|
|
6750
6701
|
*
|
|
6751
6702
|
*/
|
|
6752
6703
|
post: {
|
|
@@ -11695,7 +11646,7 @@ export interface paths {
|
|
|
11695
11646
|
put?: never;
|
|
11696
11647
|
/**
|
|
11697
11648
|
* Send mock notification events (development only)
|
|
11698
|
-
* @description Publishes MOCK events straight to the delivery channels so a client can verify its realtime integration: `notification.created` plus a push carrier on the personal channel, and `data.changed` on the wallet channel when `wallet_id` is passed.
|
|
11649
|
+
* @description Publishes MOCK events straight to the delivery channels so a client can verify its realtime integration: `notification.created` plus a push carrier on the personal channel, and `data.changed` on the wallet channel when `wallet_id` is passed. The mock events are not stored. Additionally, when the wallet has at least one order, a REAL `ORDER_STATUS_CHANGED` notification is produced through the regular pipeline for the wallet's newest order — it lands in the inbox of every wallet member and is delivered over realtime and push (`inbox_outcome` reports the result; `null` means no order was found). Available only on development deployments.
|
|
11699
11650
|
*/
|
|
11700
11651
|
post: {
|
|
11701
11652
|
parameters: {
|
|
@@ -11730,6 +11681,16 @@ export interface paths {
|
|
|
11730
11681
|
notification_id?: string;
|
|
11731
11682
|
/** Format: uuid */
|
|
11732
11683
|
signaled_wallet_id?: string | null;
|
|
11684
|
+
/**
|
|
11685
|
+
* @description Result of the real inbox notification; null when no wallet was passed or it has no orders
|
|
11686
|
+
* @enum {string|null}
|
|
11687
|
+
*/
|
|
11688
|
+
inbox_outcome?: "PROCESSED" | "SKIPPED_UNRESOLVED" | "SKIPPED_DUPLICATE" | null;
|
|
11689
|
+
/**
|
|
11690
|
+
* Format: uuid
|
|
11691
|
+
* @description Order the real notification was built from
|
|
11692
|
+
*/
|
|
11693
|
+
inbox_order_uuid?: string | null;
|
|
11733
11694
|
};
|
|
11734
11695
|
};
|
|
11735
11696
|
};
|
|
@@ -12050,9 +12011,20 @@ export interface components {
|
|
|
12050
12011
|
cardholder_requirements?: {
|
|
12051
12012
|
/** @enum {string} */
|
|
12052
12013
|
level?: "minimal" | "basic" | "full";
|
|
12053
|
-
/** @description Required field names; address fields are dotted (address.line1) */
|
|
12014
|
+
/** @description Required field names; address fields are dotted (address.line1). Interlace CONSUMER also lists gov_id_issuance_date and gov_id_expiration_date (ISO YYYY-MM-DD). */
|
|
12054
12015
|
required?: string[];
|
|
12055
12016
|
required_documents?: ("gov_id_front" | "gov_id_back" | "selfie")[];
|
|
12017
|
+
/** @description Human-readable constraints the field list cannot express. Interlace CONSUMER: if nationality is USA, tax_identification_number is required and must be a valid SSN. */
|
|
12018
|
+
notes?: string[];
|
|
12019
|
+
/** @description What each country changes, keyed by ISO 3166-1 alpha-3 with a `default` entry; empty when the vendor reviews nothing. These fields stay out of `required` because they only hold once the nationality or address country is known: read the rule for the nationality the user picked (required_by_nationality), the rule for the address country (required_by_address), and the rule for the country that issued the document (gov_id_types). */
|
|
12020
|
+
country_rules?: {
|
|
12021
|
+
[key: string]: {
|
|
12022
|
+
gov_id_types?: string[];
|
|
12023
|
+
required_by_nationality?: string[];
|
|
12024
|
+
required_by_address?: string[];
|
|
12025
|
+
notes?: string[];
|
|
12026
|
+
};
|
|
12027
|
+
};
|
|
12056
12028
|
};
|
|
12057
12029
|
/** Format: uuid */
|
|
12058
12030
|
account_currency: string;
|
|
@@ -12079,7 +12051,7 @@ export interface components {
|
|
|
12079
12051
|
} & {
|
|
12080
12052
|
[key: string]: unknown;
|
|
12081
12053
|
};
|
|
12082
|
-
/** @description Merchant of a card transaction. */
|
|
12054
|
+
/** @description Merchant of a card transaction. Always present: a row with no merchant (top-up, withdrawal, transfer) carries empty strings, so `merchant.name` is safe to read without a guard. */
|
|
12083
12055
|
TransactionMerchant: {
|
|
12084
12056
|
name?: string;
|
|
12085
12057
|
category_code?: string;
|
|
@@ -12270,7 +12242,19 @@ export interface components {
|
|
|
12270
12242
|
transaction_amount?: number;
|
|
12271
12243
|
/** @example USD */
|
|
12272
12244
|
transaction_currency?: string;
|
|
12245
|
+
/** @description What actually left the card: `billing_amount` plus `fee` for a debit. Show this one when a fee sits inside the operation. */
|
|
12273
12246
|
total_amount?: number;
|
|
12247
|
+
/** @description Fee charged inside this operation, in billing currency. 0 for vendors that bill fees as their own transactions (those arrive as separate rows with `transaction_type: FEE`). */
|
|
12248
|
+
fee?: number;
|
|
12249
|
+
/** @description Vendor's itemisation of `fee`; empty when it gave none. */
|
|
12250
|
+
fee_details?: {
|
|
12251
|
+
amount?: number;
|
|
12252
|
+
/** @example USD */
|
|
12253
|
+
currency?: string;
|
|
12254
|
+
/** @description Vendor's own fee code — no cross-vendor meaning. */
|
|
12255
|
+
type?: string | null;
|
|
12256
|
+
}[];
|
|
12257
|
+
/** @description Units of billing currency per unit of transaction currency, so `transaction_amount * conversion_rate ≈ billing_amount`. 1 when the currencies match. */
|
|
12274
12258
|
conversion_rate?: number;
|
|
12275
12259
|
failure_reason?: string;
|
|
12276
12260
|
adjustment_type?: string | null;
|
|
@@ -12422,12 +12406,30 @@ export interface components {
|
|
|
12422
12406
|
account_currency?: string;
|
|
12423
12407
|
/** Format: uuid */
|
|
12424
12408
|
destination_currency?: string;
|
|
12409
|
+
/** @description Settlement destination address (when the program settles to crypto) */
|
|
12410
|
+
destination_address?: string | null;
|
|
12411
|
+
/** Format: uuid */
|
|
12412
|
+
integration_vendor_id?: string;
|
|
12425
12413
|
vendor_account_id?: string | null;
|
|
12414
|
+
/** @description Customer name the account is held under */
|
|
12415
|
+
customer_name?: string | null;
|
|
12426
12416
|
/** @description Bank account details for deposits, derived from deposit_instructions. Returned null when deposits are disabled for the account. */
|
|
12427
12417
|
account_details?: Record<string, never> | null;
|
|
12428
12418
|
/** @description Deposit requisites (source of truth). Returned null when deposits are disabled for the account. */
|
|
12429
12419
|
deposit_instructions?: Record<string, never> | null;
|
|
12430
12420
|
meta?: Record<string, never> | null;
|
|
12421
|
+
/** @description Account currency details — present on hydrated reads (e.g. embedded in a single-order response) */
|
|
12422
|
+
account_currency_details?: components["schemas"]["CurrencyDetails"] | null;
|
|
12423
|
+
/** @description Destination currency details — present on hydrated reads (e.g. embedded in a single-order response) */
|
|
12424
|
+
destination_currency_details?: components["schemas"]["CurrencyDetails"] | null;
|
|
12425
|
+
/** @description Integration vendor details — present on hydrated reads (e.g. embedded in a single-order response) */
|
|
12426
|
+
integration_vendor?: {
|
|
12427
|
+
/** Format: uuid */
|
|
12428
|
+
id?: string;
|
|
12429
|
+
name?: string;
|
|
12430
|
+
code?: string;
|
|
12431
|
+
type?: string;
|
|
12432
|
+
} | null;
|
|
12431
12433
|
/** Format: date-time */
|
|
12432
12434
|
created_at?: string;
|
|
12433
12435
|
};
|
|
@@ -12446,12 +12448,111 @@ export interface components {
|
|
|
12446
12448
|
/** Format: uuid */
|
|
12447
12449
|
destination_currency_id?: string;
|
|
12448
12450
|
};
|
|
12449
|
-
/** @description
|
|
12451
|
+
/** @description Currency subset joined onto order and virtual-account reads (from the `crypto` table). */
|
|
12452
|
+
CurrencyDetails: {
|
|
12453
|
+
/** Format: uuid */
|
|
12454
|
+
uuid: string;
|
|
12455
|
+
name: string;
|
|
12456
|
+
symbol: string;
|
|
12457
|
+
icon?: string | null;
|
|
12458
|
+
/** @description Number of minor-unit decimals */
|
|
12459
|
+
decimal: number;
|
|
12460
|
+
};
|
|
12461
|
+
/** @description Public order metadata. The stored `meta` JSONB is reduced server-side to a fixed allowlist of public keys — workflow/provider internals never appear. Every field is optional: presence depends on the order type (crypto transfer, fiat off-ramp, exchange, internal transfer, card top-up, deposit). */
|
|
12450
12462
|
OrderMeta: {
|
|
12451
12463
|
/** @description Legacy idempotency key — null on orders created by the current flow */
|
|
12452
12464
|
request_id?: string | null;
|
|
12453
|
-
|
|
12465
|
+
/** @description Amount sent/received (excluding fees) */
|
|
12466
|
+
transaction_amount?: number | null;
|
|
12467
|
+
/** Format: uuid */
|
|
12468
|
+
transaction_amount_currency?: string | null;
|
|
12469
|
+
/** @description Total amount debited (including fees) */
|
|
12470
|
+
billing_amount?: number | null;
|
|
12471
|
+
/** Format: uuid */
|
|
12472
|
+
billing_amount_currency?: string | null;
|
|
12473
|
+
fee?: number | null;
|
|
12474
|
+
/** Format: uuid */
|
|
12475
|
+
fee_currency?: string | null;
|
|
12476
|
+
network_fee?: number | null;
|
|
12477
|
+
/** Format: uuid */
|
|
12478
|
+
network_fee_currency?: string | null;
|
|
12479
|
+
exchange_rate?: number | null;
|
|
12480
|
+
/** @description Blockchain chain ID (null for fiat orders) */
|
|
12481
|
+
chain_id?: number | null;
|
|
12482
|
+
/** @description Source crypto address */
|
|
12483
|
+
from_address?: string | null;
|
|
12484
|
+
/** @description Destination crypto address */
|
|
12485
|
+
to_address?: string | null;
|
|
12486
|
+
/** @description Destination crypto address (crypto transfers) */
|
|
12487
|
+
to_crypto_address?: string | null;
|
|
12488
|
+
/** @description Blockchain transaction id (when settled on-chain) */
|
|
12489
|
+
txid?: string | null;
|
|
12490
|
+
/** @description Blockchain transaction hash (when settled on-chain) */
|
|
12491
|
+
transaction_hash?: string | null;
|
|
12492
|
+
/** Format: uuid */
|
|
12493
|
+
from_currency_id?: string | null;
|
|
12494
|
+
/** Format: uuid */
|
|
12495
|
+
to_currency_id?: string | null;
|
|
12496
|
+
/**
|
|
12497
|
+
* Format: uuid
|
|
12498
|
+
* @description Sender wallet (internal transfers)
|
|
12499
|
+
*/
|
|
12500
|
+
from_wallet_uuid?: string | null;
|
|
12501
|
+
/**
|
|
12502
|
+
* Format: uuid
|
|
12503
|
+
* @description Receiver wallet (internal transfers)
|
|
12504
|
+
*/
|
|
12505
|
+
to_wallet_uuid?: string | null;
|
|
12506
|
+
/**
|
|
12507
|
+
* Format: uuid
|
|
12508
|
+
* @description Mirror-leg order id (internal transfers)
|
|
12509
|
+
*/
|
|
12510
|
+
linked_order_id?: string | null;
|
|
12511
|
+
/**
|
|
12512
|
+
* Format: uuid
|
|
12513
|
+
* @description Mirror-leg order uuid (internal transfers)
|
|
12514
|
+
*/
|
|
12515
|
+
linked_order_uuid?: string | null;
|
|
12516
|
+
/** @description True when the order settled as an internal (on-platform) transfer */
|
|
12517
|
+
is_internal?: boolean | null;
|
|
12518
|
+
/** Format: uuid */
|
|
12519
|
+
counterparty_account_id?: string | null;
|
|
12520
|
+
counterparty_account_name?: string | null;
|
|
12521
|
+
counterparty_account_nickname?: string | null;
|
|
12522
|
+
/** Format: uuid */
|
|
12523
|
+
counterparty_destination_id?: string | null;
|
|
12524
|
+
/** Format: uuid */
|
|
12525
|
+
virtual_account_id?: string | null;
|
|
12526
|
+
virtual_account_name?: string | null;
|
|
12527
|
+
/**
|
|
12528
|
+
* Format: uuid
|
|
12529
|
+
* @description Card sub-account (card top-up orders)
|
|
12530
|
+
*/
|
|
12531
|
+
sub_account_id?: string | null;
|
|
12532
|
+
/** @description Sender details on inbound (deposit) orders, normalized to one canonical shape across rails. Keys: `profile` (sender identity), `account_information` (bank identifiers: account_number, routing_number, iban, swift_bic, sort_code, currency_code, institution_name, intermediary_institution_name), `wallet_information` (crypto counterpart on internal transfers), `reference`, `memo`. */
|
|
12533
|
+
originator?: {
|
|
12534
|
+
[key: string]: unknown;
|
|
12535
|
+
} | null;
|
|
12536
|
+
/** @description Card authorizations: card id */
|
|
12537
|
+
card_id?: string | null;
|
|
12538
|
+
/** @description Card authorizations: merchant name */
|
|
12539
|
+
merchant_name?: string | null;
|
|
12540
|
+
/** @description Card authorizations: merchant category code */
|
|
12541
|
+
mcc?: string | null;
|
|
12542
|
+
/** @description Card authorizations: amount in merchant currency */
|
|
12543
|
+
merchant_amount?: number | null;
|
|
12544
|
+
merchant_currency?: string | null;
|
|
12545
|
+
is_cross_currency?: boolean | null;
|
|
12546
|
+
fx_fee_percent?: number | null;
|
|
12547
|
+
fee_fiat?: number | null;
|
|
12548
|
+
request_type?: string | null;
|
|
12549
|
+
settlement_kind?: string | null;
|
|
12550
|
+
/** @description User-provided payment reference */
|
|
12454
12551
|
reference?: string | null;
|
|
12552
|
+
/** @description User-provided internal note */
|
|
12553
|
+
note?: string | null;
|
|
12554
|
+
/** Format: date-time */
|
|
12555
|
+
completed_at?: string | null;
|
|
12455
12556
|
};
|
|
12456
12557
|
/** @description Order record */
|
|
12457
12558
|
Order: {
|
|
@@ -12492,6 +12593,36 @@ export interface components {
|
|
|
12492
12593
|
/** Format: uuid */
|
|
12493
12594
|
sub_account_id?: string | null;
|
|
12494
12595
|
info?: string | null;
|
|
12596
|
+
fee?: number | null;
|
|
12597
|
+
/** Format: uuid */
|
|
12598
|
+
fee_currency_id?: string | null;
|
|
12599
|
+
network_fee?: number | null;
|
|
12600
|
+
/** Format: uuid */
|
|
12601
|
+
network_fee_currency_id?: string | null;
|
|
12602
|
+
exchange_rate?: number | null;
|
|
12603
|
+
/** Format: uuid */
|
|
12604
|
+
from_currency_id?: string | null;
|
|
12605
|
+
/** Format: uuid */
|
|
12606
|
+
to_currency_id?: string | null;
|
|
12607
|
+
/** @description Editable free-text comment (see PUT /frontend/orders/{order_id}/comment) */
|
|
12608
|
+
comment?: string | null;
|
|
12609
|
+
/**
|
|
12610
|
+
* Format: uuid
|
|
12611
|
+
* @description user_data uuid of the last comment editor
|
|
12612
|
+
*/
|
|
12613
|
+
comment_updated_by?: string | null;
|
|
12614
|
+
/** Format: date-time */
|
|
12615
|
+
comment_updated_at?: string | null;
|
|
12616
|
+
/** @description Async workflow run id (null for synchronous orders) */
|
|
12617
|
+
workflow_run_id?: string | null;
|
|
12618
|
+
/** @description Ledger integrity: signing nonce */
|
|
12619
|
+
nonce?: string | null;
|
|
12620
|
+
/** @description Ledger integrity: row signature */
|
|
12621
|
+
signature?: string | null;
|
|
12622
|
+
/** @description Ledger integrity: signing key version */
|
|
12623
|
+
sig_key_version?: string | null;
|
|
12624
|
+
/** @description Computed dust flag — amount below the render threshold for either currency. Returned by the list endpoint (GET /frontend/orders/wallet/{wallet_uuid}); absent from single-order reads. */
|
|
12625
|
+
is_threshold_amount?: boolean;
|
|
12495
12626
|
meta?: components["schemas"]["OrderMeta"];
|
|
12496
12627
|
/**
|
|
12497
12628
|
* Format: date-time
|
|
@@ -12505,17 +12636,105 @@ export interface components {
|
|
|
12505
12636
|
};
|
|
12506
12637
|
/** @description Single-order read shape (GET /orders/id/{order_id} and GET /orders/uuid/{order_uuid}) — the base Order plus context objects hydrated from its `meta` references. */
|
|
12507
12638
|
OrderDetail: components["schemas"]["Order"] & {
|
|
12639
|
+
/** @description Owning wallet reference */
|
|
12640
|
+
wallet?: {
|
|
12641
|
+
/** Format: uuid */
|
|
12642
|
+
uuid: string;
|
|
12643
|
+
/** Format: uuid */
|
|
12644
|
+
tenant_id: string;
|
|
12645
|
+
};
|
|
12646
|
+
/** @description Source currency details (resolved from `from_uuid`) */
|
|
12647
|
+
from_currency?: components["schemas"]["CurrencyDetails"];
|
|
12648
|
+
/** @description Destination currency details (resolved from `to_uuid`) */
|
|
12649
|
+
to_currency?: components["schemas"]["CurrencyDetails"];
|
|
12508
12650
|
/** @description Virtual account referenced by the order (fiat off-ramp/on-ramp), hydrated with currency and vendor details. Absent/null when the order has no `meta.virtual_account_id`. */
|
|
12509
12651
|
virtual_account?: components["schemas"]["VirtualAccount"] | null;
|
|
12510
|
-
/** @description
|
|
12511
|
-
counterparty_destination?:
|
|
12512
|
-
|
|
12513
|
-
} | null;
|
|
12514
|
-
/** @description Documents attached to the order; empty array when none (or when document loading failed). */
|
|
12652
|
+
/** @description Receiver of the order. Present when the order has a `meta.counterparty_destination_id`; absent otherwise. */
|
|
12653
|
+
counterparty_destination?: components["schemas"]["OrderCounterpartyDestination"] | null;
|
|
12654
|
+
/** @description Documents attached to the order; empty array when none (or when document loading failed). Returned by GET /frontend/orders/id/{order_id} only; absent from the by-uuid read. */
|
|
12515
12655
|
documents?: {
|
|
12516
12656
|
[key: string]: unknown;
|
|
12517
12657
|
}[];
|
|
12518
12658
|
};
|
|
12659
|
+
/** @description Counterparty destination as embedded in single-order reads — the raw `counterparty_destinations` row with its parent account and payload rows. Distinct from the `CounterpartyDestination` shape served by the /frontend/counterparty endpoints (`external_banking_data`/`external_crypto_data` instead of `banking_data`/`crypto_data`/`internal_data`). */
|
|
12660
|
+
OrderCounterpartyDestination: {
|
|
12661
|
+
/** Format: uuid */
|
|
12662
|
+
id: string;
|
|
12663
|
+
/**
|
|
12664
|
+
* Format: uuid
|
|
12665
|
+
* @description Parent counterparty account id
|
|
12666
|
+
*/
|
|
12667
|
+
counterparty_account_id: string;
|
|
12668
|
+
/** @description User-friendly alias */
|
|
12669
|
+
nickname?: string | null;
|
|
12670
|
+
/**
|
|
12671
|
+
* @description Destination / payment rail type
|
|
12672
|
+
* @enum {string}
|
|
12673
|
+
*/
|
|
12674
|
+
type: "ACH" | "SWIFT" | "SEPA" | "CRYPTO_EXTERNAL" | "CRYPTO_INTERNAL" | "CHAPS" | "FPS" | "FEDWIRE" | "INTERNAL";
|
|
12675
|
+
/** Format: uuid */
|
|
12676
|
+
external_banking_data_id?: string | null;
|
|
12677
|
+
/** Format: uuid */
|
|
12678
|
+
external_crypto_data_id?: string | null;
|
|
12679
|
+
/**
|
|
12680
|
+
* Format: uuid
|
|
12681
|
+
* @description Internal-destination payload id (INTERNAL type)
|
|
12682
|
+
*/
|
|
12683
|
+
internal_wallet_data_id?: string | null;
|
|
12684
|
+
/** @description Soft-delete flag; a deleted destination stays readable on historical orders */
|
|
12685
|
+
is_deleted?: boolean | null;
|
|
12686
|
+
/** Format: date-time */
|
|
12687
|
+
deleted_at?: string | null;
|
|
12688
|
+
/** @description Ledger integrity: signing nonce */
|
|
12689
|
+
nonce?: string | null;
|
|
12690
|
+
/** @description Ledger integrity: row signature */
|
|
12691
|
+
signature?: string | null;
|
|
12692
|
+
/** @description Ledger integrity: signing key version */
|
|
12693
|
+
sig_key_version?: string | null;
|
|
12694
|
+
/** Format: date-time */
|
|
12695
|
+
created_at: string;
|
|
12696
|
+
/** Format: date-time */
|
|
12697
|
+
updated_at: string;
|
|
12698
|
+
/** @description Parent counterparty account */
|
|
12699
|
+
counterparty_account?: {
|
|
12700
|
+
/** Format: uuid */
|
|
12701
|
+
id: string;
|
|
12702
|
+
name: string;
|
|
12703
|
+
type: string;
|
|
12704
|
+
email?: string | null;
|
|
12705
|
+
phone?: string | null;
|
|
12706
|
+
/**
|
|
12707
|
+
* Format: uuid
|
|
12708
|
+
* @description Owning wallet uuid
|
|
12709
|
+
*/
|
|
12710
|
+
wallet_id?: string | null;
|
|
12711
|
+
};
|
|
12712
|
+
/** @description Banking details (bank rails); null for crypto/internal destinations */
|
|
12713
|
+
external_banking_data?: {
|
|
12714
|
+
/** Format: uuid */
|
|
12715
|
+
id?: string;
|
|
12716
|
+
account_number?: string | null;
|
|
12717
|
+
/** @description ABA routing number */
|
|
12718
|
+
routing_number?: string | null;
|
|
12719
|
+
bank_name?: string | null;
|
|
12720
|
+
swift_bic?: string | null;
|
|
12721
|
+
iban?: string | null;
|
|
12722
|
+
note?: string | null;
|
|
12723
|
+
/** Format: uuid */
|
|
12724
|
+
address_id?: string | null;
|
|
12725
|
+
} | null;
|
|
12726
|
+
/** @description Crypto address details (crypto rails); null for bank/internal destinations */
|
|
12727
|
+
external_crypto_data?: {
|
|
12728
|
+
/** Format: uuid */
|
|
12729
|
+
id?: string;
|
|
12730
|
+
/** @description Blockchain address */
|
|
12731
|
+
address?: string;
|
|
12732
|
+
/** Format: uuid */
|
|
12733
|
+
currency_id?: string;
|
|
12734
|
+
/** @description Memo/tag (XRP, XLM, …) */
|
|
12735
|
+
memo?: string | null;
|
|
12736
|
+
} | null;
|
|
12737
|
+
};
|
|
12519
12738
|
/** @description Supporting document attached to an order at creation time (persisted to order_documents). */
|
|
12520
12739
|
OrderDocumentInput: {
|
|
12521
12740
|
/**
|
|
@@ -12795,7 +13014,12 @@ export interface components {
|
|
|
12795
13014
|
};
|
|
12796
13015
|
NotificationPreference: {
|
|
12797
13016
|
/** @enum {string} */
|
|
12798
|
-
channel: "IN_APP" | "PUSH";
|
|
13017
|
+
channel: "IN_APP" | "PUSH" | "EMAIL";
|
|
13018
|
+
enabled: boolean;
|
|
13019
|
+
};
|
|
13020
|
+
NotificationCategoryPreference: {
|
|
13021
|
+
/** @enum {string} */
|
|
13022
|
+
category: "TRANSACTIONS" | "COMPLIANCE";
|
|
12799
13023
|
enabled: boolean;
|
|
12800
13024
|
};
|
|
12801
13025
|
};
|
|
@@ -2570,7 +2570,13 @@ export interface paths {
|
|
|
2570
2570
|
* @description Counterparty destination of type INTERNAL (points at the receiver wallet).
|
|
2571
2571
|
*/
|
|
2572
2572
|
counterparty_destination_id: string;
|
|
2573
|
+
/** @description Amount to send, in `from_currency_id` units. With `is_reverse: true` — the amount the receiver must be credited. */
|
|
2573
2574
|
amount: number;
|
|
2575
|
+
/**
|
|
2576
|
+
* @description When true, `amount` is the receive-amount and the debited amount is grossed up with fees.
|
|
2577
|
+
* @default false
|
|
2578
|
+
*/
|
|
2579
|
+
is_reverse?: boolean;
|
|
2574
2580
|
/**
|
|
2575
2581
|
* Format: date-time
|
|
2576
2582
|
* @description Optional. Schedule the transfer for a future time (min 1 hour, max 90 days ahead). No funds are reserved; after approval the order waits in EXPECTED status and executes automatically.
|
|
@@ -2643,10 +2649,10 @@ export interface paths {
|
|
|
2643
2649
|
* @description Sends crypto from the wallet's omnibus balance via a counterparty
|
|
2644
2650
|
* destination. Two-phase: created `NEW` without touching the balance;
|
|
2645
2651
|
* `POST /admin/orders/{id}/approve` checks the balance, debits the funds
|
|
2646
|
-
* and dispatches the on-chain send.
|
|
2647
|
-
*
|
|
2648
|
-
*
|
|
2649
|
-
*
|
|
2652
|
+
* and dispatches the on-chain send. This endpoint is external-only: the
|
|
2653
|
+
* order always goes on-chain, even if the destination address belongs to
|
|
2654
|
+
* a wallet on this platform. Internal (off-chain) transfers are created
|
|
2655
|
+
* only through the internal transfer endpoint.
|
|
2650
2656
|
*
|
|
2651
2657
|
*/
|
|
2652
2658
|
post: {
|
|
@@ -6079,11 +6085,12 @@ export interface paths {
|
|
|
6079
6085
|
*/
|
|
6080
6086
|
cardholder_relationship?: "EMPLOYEE" | "CONTRACTOR";
|
|
6081
6087
|
/**
|
|
6082
|
-
* @description Identity document type (KYC vendors)
|
|
6088
|
+
* @description Identity document type (KYC vendors). Which values are accepted depends on the country that issued the document — read cardholder_requirements.country_rules[gov_id_country].gov_id_types instead of hardcoding the list (id_card_cn is the mainland China resident ID, id_card_hk the HKID).
|
|
6089
|
+
*
|
|
6083
6090
|
* @enum {string}
|
|
6084
6091
|
*/
|
|
6085
|
-
gov_id_type?: "passport" | "id_card" | "driving_license";
|
|
6086
|
-
/** @description Identity document number */
|
|
6092
|
+
gov_id_type?: "passport" | "id_card" | "driving_license" | "residence_permit_eu" | "residence_permit_ae" | "id_card_cn" | "id_card_hk";
|
|
6093
|
+
/** @description Identity document number (passport / driving licence / national ID). */
|
|
6087
6094
|
gov_id_number?: string;
|
|
6088
6095
|
/**
|
|
6089
6096
|
* @description Issuing country of the identity document (2-3 letter code)
|
|
@@ -6097,9 +6104,16 @@ export interface paths {
|
|
|
6097
6104
|
gov_id_issuance_date?: string;
|
|
6098
6105
|
/**
|
|
6099
6106
|
* Format: date
|
|
6100
|
-
* @description Identity document expiry date (YYYY-MM-DD)
|
|
6107
|
+
* @description Identity document expiry date (YYYY-MM-DD). Required by the vendor review even for a document issued for life (an Indonesian KTP, "SEUMUR HIDUP"), which has no expiry printed on it — send the issuance date plus 100 years.
|
|
6108
|
+
*
|
|
6101
6109
|
*/
|
|
6102
6110
|
gov_id_expiration_date?: string;
|
|
6111
|
+
/**
|
|
6112
|
+
* @description Tax identifier of the cardholder, separate from the document number. Required by Interlace CONSUMER programs when nationality is USA, where it must be a valid SSN (9 digits or XXX-XX-XXXX).
|
|
6113
|
+
*
|
|
6114
|
+
* @example 123-45-6789
|
|
6115
|
+
*/
|
|
6116
|
+
tax_identification_number?: string;
|
|
6103
6117
|
/** @description Cardholder's address */
|
|
6104
6118
|
address?: {
|
|
6105
6119
|
/**
|
|
@@ -6114,7 +6128,11 @@ export interface paths {
|
|
|
6114
6128
|
line2?: string;
|
|
6115
6129
|
/** @example New York */
|
|
6116
6130
|
city?: string;
|
|
6117
|
-
/**
|
|
6131
|
+
/**
|
|
6132
|
+
* @description Subdivision. Required for a US or Canadian address and must be the two-letter code (AL, ON); optional elsewhere.
|
|
6133
|
+
*
|
|
6134
|
+
* @example NY
|
|
6135
|
+
*/
|
|
6118
6136
|
state?: string;
|
|
6119
6137
|
/** @example 10001 */
|
|
6120
6138
|
postal_code?: string;
|
|
@@ -6236,67 +6254,7 @@ export interface paths {
|
|
|
6236
6254
|
};
|
|
6237
6255
|
options?: never;
|
|
6238
6256
|
head?: never;
|
|
6239
|
-
|
|
6240
|
-
patch: {
|
|
6241
|
-
parameters: {
|
|
6242
|
-
query?: never;
|
|
6243
|
-
header?: never;
|
|
6244
|
-
path: {
|
|
6245
|
-
cardholder_id: string;
|
|
6246
|
-
};
|
|
6247
|
-
cookie?: never;
|
|
6248
|
-
};
|
|
6249
|
-
requestBody: {
|
|
6250
|
-
content: {
|
|
6251
|
-
"application/json": {
|
|
6252
|
-
/** Format: uuid */
|
|
6253
|
-
wallet_id: string;
|
|
6254
|
-
first_name?: string;
|
|
6255
|
-
last_name?: string;
|
|
6256
|
-
email?: string;
|
|
6257
|
-
phone?: string;
|
|
6258
|
-
/** @description ISO 3166-1 alpha-3 country code */
|
|
6259
|
-
nationality?: string;
|
|
6260
|
-
/** @enum {string} */
|
|
6261
|
-
gender?: "M" | "F";
|
|
6262
|
-
/** @enum {string} */
|
|
6263
|
-
cardholder_relationship?: "EMPLOYEE" | "CONTRACTOR";
|
|
6264
|
-
/** @enum {string} */
|
|
6265
|
-
gov_id_type?: "passport" | "id_card" | "driving_license";
|
|
6266
|
-
gov_id_number?: string;
|
|
6267
|
-
/** @description 2-3 letter uppercase country code */
|
|
6268
|
-
gov_id_country?: string;
|
|
6269
|
-
/** Format: date */
|
|
6270
|
-
gov_id_issuance_date?: string;
|
|
6271
|
-
/** Format: date */
|
|
6272
|
-
gov_id_expiration_date?: string;
|
|
6273
|
-
address?: {
|
|
6274
|
-
line1?: string;
|
|
6275
|
-
line2?: string;
|
|
6276
|
-
city?: string;
|
|
6277
|
-
state?: string;
|
|
6278
|
-
postal_code?: string;
|
|
6279
|
-
country?: string;
|
|
6280
|
-
};
|
|
6281
|
-
};
|
|
6282
|
-
};
|
|
6283
|
-
};
|
|
6284
|
-
responses: {
|
|
6285
|
-
/** @description Cardholder updated */
|
|
6286
|
-
200: {
|
|
6287
|
-
headers: {
|
|
6288
|
-
[name: string]: unknown;
|
|
6289
|
-
};
|
|
6290
|
-
content: {
|
|
6291
|
-
"application/json": {
|
|
6292
|
-
/** @example true */
|
|
6293
|
-
success?: boolean;
|
|
6294
|
-
data?: components["schemas"]["Cardholder"];
|
|
6295
|
-
};
|
|
6296
|
-
};
|
|
6297
|
-
};
|
|
6298
|
-
};
|
|
6299
|
-
};
|
|
6257
|
+
patch?: never;
|
|
6300
6258
|
trace?: never;
|
|
6301
6259
|
};
|
|
6302
6260
|
"/admin/issuing/cardholders/{cardholder_id}/documents": {
|
|
@@ -6395,8 +6353,14 @@ export interface paths {
|
|
|
6395
6353
|
* Upload KYC document files
|
|
6396
6354
|
* @description Uploads KYC files against a wallet via `multipart/form-data`, with no
|
|
6397
6355
|
* cardholder involved. The form field name is the document type (`selfie`,
|
|
6398
|
-
* `gov_id_front`, `gov_id_back`); one file per type, 5MB max each,
|
|
6399
|
-
* png/jpeg
|
|
6356
|
+
* `gov_id_front`, `gov_id_back`); one file per type, 5MB max each, photos
|
|
6357
|
+
* only (png/jpeg).
|
|
6358
|
+
*
|
|
6359
|
+
* Send the file the camera produced, unchanged: cropping, resizing or
|
|
6360
|
+
* re-encoding a document photo can make the vendor's tampering check
|
|
6361
|
+
* answer `Forgery attempt has been made.` — a verdict far worse than the
|
|
6362
|
+
* poor quality it was meant to fix. Too small to read means retake it
|
|
6363
|
+
* (card filling the frame, straight, no glare), not improve the file.
|
|
6400
6364
|
*
|
|
6401
6365
|
* The response returns an `id` per file; pass those to
|
|
6402
6366
|
* `POST /admin/issuing/cardholders/{cardholder_id}/documents` to attach
|
|
@@ -6540,6 +6504,13 @@ export interface paths {
|
|
|
6540
6504
|
* not met; `error.details.missing` lists every field and file still needed. A failed
|
|
6541
6505
|
* submit leaves the draft untouched, so it can be retried.
|
|
6542
6506
|
*
|
|
6507
|
+
* A cardholder whose identity review came back `review_status: REJECTED` or `REQUEST`
|
|
6508
|
+
* (both readable, with `reject_reason`, on the cardholder) may be submitted again: fix
|
|
6509
|
+
* what the vendor named, replace the document if that is what it disliked, and call this
|
|
6510
|
+
* endpoint once more. The review restarts on the vendor account the person already has —
|
|
6511
|
+
* the same document cannot be registered twice at the vendor, so a fresh cardholder is
|
|
6512
|
+
* NOT the way to retry. While a review is running, another submit is refused with `409`.
|
|
6513
|
+
*
|
|
6543
6514
|
*/
|
|
6544
6515
|
post: {
|
|
6545
6516
|
parameters: {
|
|
@@ -6581,7 +6552,7 @@ export interface paths {
|
|
|
6581
6552
|
};
|
|
6582
6553
|
content?: never;
|
|
6583
6554
|
};
|
|
6584
|
-
/** @description Cardholder is
|
|
6555
|
+
/** @description Cardholder is live at the vendor, or its review is still running */
|
|
6585
6556
|
409: {
|
|
6586
6557
|
headers: {
|
|
6587
6558
|
[name: string]: unknown;
|
|
@@ -1969,11 +1969,16 @@ export interface components {
|
|
|
1969
1969
|
readonly support_text?: string | null;
|
|
1970
1970
|
readonly support_phone?: string | null;
|
|
1971
1971
|
};
|
|
1972
|
+
MailingDataEntity: {
|
|
1973
|
+
readonly support_email?: string | null;
|
|
1974
|
+
};
|
|
1972
1975
|
SupportedLocalesEntity: {
|
|
1973
1976
|
default: string;
|
|
1974
1977
|
supported: string[];
|
|
1975
1978
|
};
|
|
1976
1979
|
SystemConfigDto: {
|
|
1980
|
+
tenant_id: string;
|
|
1981
|
+
app_url: string | null;
|
|
1977
1982
|
/** @enum {string} */
|
|
1978
1983
|
default_theme_mode: "dark" | "light";
|
|
1979
1984
|
enable_kyc: boolean;
|
|
@@ -1990,6 +1995,7 @@ export interface components {
|
|
|
1990
1995
|
enable_referral_program: boolean;
|
|
1991
1996
|
readonly metrics_data?: components["schemas"]["MetricsDataEntity"] | null;
|
|
1992
1997
|
readonly statement_branding?: components["schemas"]["StatementBrandingEntity"] | null;
|
|
1998
|
+
readonly mailing_data?: components["schemas"]["MailingDataEntity"] | null;
|
|
1993
1999
|
/** @enum {string} */
|
|
1994
2000
|
kyc_data_provider: "persona" | "sumsub";
|
|
1995
2001
|
readonly supported_locales?: components["schemas"]["SupportedLocalesEntity"] | null;
|