squarefi-bff-api-module 1.36.105 → 1.36.106
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
CHANGED
|
@@ -100,6 +100,7 @@ export declare const frontend: {
|
|
|
100
100
|
link: ({ entity_id, owner_id, }: API.Frontend.KycForms.Verification.Owners.Link.Request) => Promise<API.Frontend.KycForms.Verification.Owners.Link.Response>;
|
|
101
101
|
session: ({ entity_id, owner_id, }: API.Frontend.KycForms.Verification.Owners.Session.Request) => Promise<API.Frontend.KycForms.Verification.Owners.Session.Response>;
|
|
102
102
|
document: ({ entity_id, owner_id, file, side, type, country, signal, timeout, onUploadProgress, }: API.Frontend.KycForms.Verification.Owners.Document.Request) => Promise<API.Frontend.KycForms.Verification.Owners.Document.Response>;
|
|
103
|
+
authorityDocument: ({ entity_id, owner_id, file, signal, timeout, onUploadProgress, }: API.Frontend.KycForms.Verification.Owners.AuthorityDocument.Request) => Promise<API.Frontend.KycForms.Verification.Owners.AuthorityDocument.Response>;
|
|
103
104
|
invite: ({ entity_id, }: API.Frontend.KycForms.Verification.Owners.Invite.Request) => Promise<API.Frontend.KycForms.Verification.Owners.Invite.Response>;
|
|
104
105
|
};
|
|
105
106
|
};
|
package/dist/api/frontend.js
CHANGED
|
@@ -215,6 +215,13 @@ export const frontend = {
|
|
|
215
215
|
formData.append('country', country);
|
|
216
216
|
return apiClientV1Frontend.postRequest(`/frontend/kyc/entities/${entity_id}/verification/owners/${owner_id}/document`, { data: formData, signal, timeout, onUploadProgress });
|
|
217
217
|
},
|
|
218
|
+
// The owner's letter of authority: one PDF, JPEG or PNG. It stays with CORE and nothing waits on it.
|
|
219
|
+
// Unlike the other owner routes this one takes the filler's own row (`is_applicant`) too.
|
|
220
|
+
authorityDocument: ({ entity_id, owner_id, file, signal, timeout, onUploadProgress, }) => {
|
|
221
|
+
const formData = new FormData();
|
|
222
|
+
formData.append('file', file);
|
|
223
|
+
return apiClientV1Frontend.postRequest(`/frontend/kyc/entities/${entity_id}/verification/owners/${owner_id}/authority-document`, { data: formData, signal, timeout, onUploadProgress });
|
|
224
|
+
},
|
|
218
225
|
// The provider emails every owner still to pass the check; taken once in 10 minutes
|
|
219
226
|
// (409 KYC_OWNER_INVITES_TOO_SOON, `verification.invites.next_at` of the overview).
|
|
220
227
|
invite: ({ entity_id, }) => apiClientV1Frontend.postRequest(`/frontend/kyc/entities/${entity_id}/verification/owners/invite`),
|
|
@@ -931,7 +931,7 @@ export interface paths {
|
|
|
931
931
|
};
|
|
932
932
|
};
|
|
933
933
|
};
|
|
934
|
-
/** @description Validation error,
|
|
934
|
+
/** @description Validation error, the fee cannot be priced in this currency (AML_FEE_NOT_PRICEABLE) or the tenant's AML screening settings are unusable (AML_CHECK_MISCONFIGURED) */
|
|
935
935
|
400: {
|
|
936
936
|
headers: {
|
|
937
937
|
[name: string]: unknown;
|
|
@@ -1115,7 +1115,7 @@ export interface paths {
|
|
|
1115
1115
|
};
|
|
1116
1116
|
};
|
|
1117
1117
|
};
|
|
1118
|
-
/** @description Validation error (an address that does not fit the network of `currency_id` included), unsupported asset (AML_ASSET_NOT_SUPPORTED), insufficient funds (INSUFFICIENT_FUNDS)
|
|
1118
|
+
/** @description Validation error (an address that does not fit the network of `currency_id` included), unsupported asset (AML_ASSET_NOT_SUPPORTED), insufficient funds (INSUFFICIENT_FUNDS), a fee that cannot be priced (AML_FEE_NOT_PRICEABLE) or unusable AML screening settings of the tenant (AML_CHECK_MISCONFIGURED) */
|
|
1119
1119
|
400: {
|
|
1120
1120
|
headers: {
|
|
1121
1121
|
[name: string]: unknown;
|
|
@@ -1258,7 +1258,7 @@ export interface paths {
|
|
|
1258
1258
|
"application/pdf": string;
|
|
1259
1259
|
};
|
|
1260
1260
|
};
|
|
1261
|
-
/** @description The analytics provider cannot hand the report over right now — retry later (AML_REPORT_PROVIDER_UNAVAILABLE) */
|
|
1261
|
+
/** @description The analytics provider cannot hand the report over right now — retry later (AML_REPORT_PROVIDER_UNAVAILABLE); or the tenant's AML screening settings are unusable (AML_CHECK_MISCONFIGURED) */
|
|
1262
1262
|
400: {
|
|
1263
1263
|
headers: {
|
|
1264
1264
|
[name: string]: unknown;
|
|
@@ -16737,7 +16737,7 @@ export interface paths {
|
|
|
16737
16737
|
};
|
|
16738
16738
|
/**
|
|
16739
16739
|
* The form of an entity for a set of purposes
|
|
16740
|
-
* @description Built on every call from the tenant's requirement profiles and the entity. Without `rails` and `programs` it is the base form. With one rail it is that rail's form: the base profile, the tenant's rail profile and the vendor's minimum merged: a field required by any of them is required, `review` wins over `auto`, and a field is shown when any of them shows it (one asking it without a condition — the vendor's minimum always — shows it always); profiles whose conditions read each other in a circle answer `409 KYC_FORM_CONDITIONS_CYCLE`. Sections are the groups to draw, `visible_when` the show logic, `required_by` the purposes a field is required for, the locks (`saved`, `from_document`, `pending`, `status`) what the client cannot change, `schema_version` what to echo back. Fields that come from the identity document (names, date of birth, citizenship, the document number and dates) are left out until the document is verified; the document itself is asked: its type `gov_id_type` (`PASSPORT`, `ID_CARD`, `RESIDENCE_PERMIT`, `DRIVERS` — the codes `…/owners/{owner_id}/document` takes as `type` too), issuing country `gov_id_country` and photos `gov_id_front` and `gov_id_back` (shown unless a passport) — saved, and no longer asked, once it is verified; `state: complete` on a rail form means nothing is left to ask and the client goes straight to the rail's terms. With one program and `wallet_id` it is the form before a card: the level the program's vendor demands (`minimal`: name, email, phone; `basic`: plus date of birth, citizenship, gender, identity document type and number, residential address; `declared` / `full`: plus the identity document and the face, verified after the form) merged with the tenant's binding for the program, without the base form; what the personal entity already holds is locked `saved`, so `state: complete` means the card can be asked for at once. Several rails and programs at once is the multi form: the base form, every rail and every program merged, each field once with `required_by` naming the purposes. A form whose last submission is `returned` comes back with that submission's answers in `values` — its files too, as files of the draft (`saved: false`, removable by `DELETE …/forms/uploads/{upload_id}`) — until the client saves, uploads or sends again. Access: the owner of the entity, or an owner / admin of a wallet it is linked to.
|
|
16740
|
+
* @description Built on every call from the tenant's requirement profiles and the entity. Without `rails` and `programs` it is the base form. With one rail it is that rail's form: the base profile, the tenant's rail profile and the vendor's minimum merged: a field required by any of them is required, `review` wins over `auto`, and a field is shown when any of them shows it (one asking it without a condition — the vendor's minimum always — shows it always); profiles whose conditions read each other in a circle answer `409 KYC_FORM_CONDITIONS_CYCLE`. Sections are the groups to draw, `visible_when` the show logic, `required_by` the purposes a field is required for, the locks (`saved`, `from_document`, `pending`, `status`) what the client cannot change, `schema_version` what to echo back. Fields that come from the identity document (names, date of birth, citizenship, the document number and dates) are left out until the document is verified; the document itself is asked: its type `gov_id_type` (`PASSPORT`, `ID_CARD`, `RESIDENCE_PERMIT`, `DRIVERS` — the codes `…/owners/{owner_id}/document` takes as `type` too), issuing country `gov_id_country` and photos `gov_id_front` and `gov_id_back` (shown unless a passport) — saved, and no longer asked, once it is verified; `state: complete` on a rail form means nothing is left to ask and the client goes straight to the rail's terms. With one program and `wallet_id` it is the form before a card: the level the program's vendor demands (`minimal`: name, email, phone; `basic`: plus date of birth, citizenship, gender, identity document type and number, residential address; `declared` / `full`: plus the identity document and the face, verified after the form) merged with the tenant's binding for the program, without the base form; what the personal entity already holds is locked `saved`, so `state: complete` means the card can be asked for at once. Several rails and programs at once is the multi form: the base form, every rail and every program merged, each field once with `required_by` naming the purposes. A form whose last submission is `returned` comes back with that submission's answers in `values` — its files too, as files of the draft (`saved: false`, removable by `DELETE …/forms/uploads/{upload_id}`) — until the client saves, uploads or sends again. On a personal entity's form (base, rail, card or multi) that is editable and shows an open `email` nobody has given yet — not saved, not pending, not in the draft — `values.email` carries the email of the entity owner's account as a suggestion: it is not saved until a draft or a submission sends it, the field stays unlocked, `missing_required` and `state` still count it as empty, and a saved, pending or draft value wins over it; a business form gets none, and only the owner of the entity gets it (a wallet admin reading the form does not). Access: the owner of the entity, or an owner / admin of a wallet it is linked to.
|
|
16741
16741
|
*/
|
|
16742
16742
|
get: {
|
|
16743
16743
|
parameters: {
|
|
@@ -16813,7 +16813,7 @@ export interface paths {
|
|
|
16813
16813
|
get?: never;
|
|
16814
16814
|
/**
|
|
16815
16815
|
* Save the draft of a form
|
|
16816
|
-
* @description The form is the one `rails` and `programs` name, as for `GET …/forms`. Replaces the draft as a whole with the given values of open fields; the files of the draft stay, and so do those of a `returned` last submission (they carry over into the draft, those removed excepted). Types are checked, rules and requiredness are not — except that an option chosen together with another one while it excludes the others (`options[].exclusive` of a `multi_enum` field), owner shares over 100% in total, a value whose condition reads an empty required source, and a change to a saved owner the form does not allow (left out of the list, its value cleared, or changed outside a `returned` form) are refused here too, as on the submission: the draft is not saved. Nothing is written to the KYC entity. The first draft of a business form moves the application to `PENDING`. One change to a form at a time — a draft save, an upload, a removal or the submission: another one sent meanwhile, from any tab or member, answers `409 OPERATION_IN_PROGRESS` and changes nothing; send the changes of one form one after another. The entity's owner, or an owner or admin of a linked wallet.
|
|
16816
|
+
* @description The form is the one `rails` and `programs` name, as for `GET …/forms`. Replaces the draft as a whole with the given values of open fields; the files of the draft stay, and so do those of a `returned` last submission (they carry over into the draft, those removed excepted). Types are checked, rules and requiredness are not — except that an option chosen together with another one while it excludes the others (`options[].exclusive` of a `multi_enum` field), owner shares over 100% in total, a value whose condition reads an empty required source, and a change to a saved owner the form does not allow (left out of the list, its value cleared, or changed outside a `returned` form) are refused here too, as on the submission: the draft is not saved. The rules of `validation` (`max_items`, `min_age`, patterns such as Latin letters only) and the owners' roles (`owner_role_missing`, `company_owner_role`) wait for the submission; a PEP detail sent with a value while `pep_declaration` is `false` is refused here as there, with `FORM_FIELD_NOT_ALLOWED`. Nothing is written to the KYC entity. The first draft of a business form moves the application to `PENDING`. One change to a form at a time — a draft save, an upload, a removal or the submission: another one sent meanwhile, from any tab or member, answers `409 OPERATION_IN_PROGRESS` and changes nothing; send the changes of one form one after another. The entity's owner, or an owner or admin of a linked wallet.
|
|
16817
16817
|
*/
|
|
16818
16818
|
put: {
|
|
16819
16819
|
parameters: {
|
|
@@ -17089,7 +17089,7 @@ export interface paths {
|
|
|
17089
17089
|
put?: never;
|
|
17090
17090
|
/**
|
|
17091
17091
|
* Send a form
|
|
17092
|
-
* @description The form is the one `rails` and `programs` name. The full check of every open field (all errors in one `VALIDATION_ERROR`, an option chosen together with another one that `options[].exclusive` says it excludes included), then a submission: `awaiting_verification` when the identity document and face are still needed, `applied` when every profile of the form writes the answers into the KYC entity at once, `in_review` when compliance decides (any profile of the form in review mode). Answers `200` with the form in its new state. One change to a form at a time: a submission sent while a draft save, an upload, a removal or another submission of the form runs answers `409 OPERATION_IN_PROGRESS` and changes nothing; send it again once the others answer. A rail form does not change the application status; once its submission is approved, the rail is submitted through the wallet's existing `POST /frontend/wallets/{wallet_id}/kyc-rails/{rail_id}`. A card form is `auto` unless a profile of it says otherwise and never changes the application status; once applied, the cardholder is created through `POST /frontend/issuing/cardholders` with `user_data_id`. A multi form moves the application like the base form it includes; once applied, every rail and program of the set is satisfied from the shared data. A `returned` submission sent again keeps its files that were not removed. A saved beneficial owner (an item of `beneficial_owners` with an `id`) is the entity's: a list without one, a changed saved value outside a `returned` form, and a saved value sent empty are refused with `VALIDATION_ERROR`, as in the draft. The entity's owner, or an owner or admin of a linked wallet.
|
|
17092
|
+
* @description The form is the one `rails` and `programs` name. The full check of every open field (all errors in one `VALIDATION_ERROR`, an option chosen together with another one that `options[].exclusive` says it excludes included; the rules of `validation` — `max_items`, `min_age`, Latin letters only — and, on a form that asks `beneficial_owners`, at least one person with the role `UBO` and one with `DIRECTOR` (the filler counts by their role), a company only as `SHAREHOLDER`), then a submission: `awaiting_verification` when the identity document and face are still needed, `applied` when every profile of the form writes the answers into the KYC entity at once, `in_review` when compliance decides (any profile of the form in review mode). Answers `200` with the form in its new state. One change to a form at a time: a submission sent while a draft save, an upload, a removal or another submission of the form runs answers `409 OPERATION_IN_PROGRESS` and changes nothing; send it again once the others answer. A rail form does not change the application status; once its submission is approved, the rail is submitted through the wallet's existing `POST /frontend/wallets/{wallet_id}/kyc-rails/{rail_id}`. A card form is `auto` unless a profile of it says otherwise and never changes the application status; once applied, the cardholder is created through `POST /frontend/issuing/cardholders` with `user_data_id`. A multi form moves the application like the base form it includes; once applied, every rail and program of the set is satisfied from the shared data. A `returned` submission sent again keeps its files that were not removed. A saved beneficial owner (an item of `beneficial_owners` with an `id`) is the entity's: a list without one, a changed saved value outside a `returned` form, and a saved value sent empty are refused with `VALIDATION_ERROR`, as in the draft. The entity's owner, or an owner or admin of a linked wallet.
|
|
17093
17093
|
*/
|
|
17094
17094
|
post: {
|
|
17095
17095
|
parameters: {
|
|
@@ -17607,6 +17607,98 @@ export interface paths {
|
|
|
17607
17607
|
patch?: never;
|
|
17608
17608
|
trace?: never;
|
|
17609
17609
|
};
|
|
17610
|
+
"/frontend/kyc/entities/{entity_id}/verification/owners/{owner_id}/authority-document": {
|
|
17611
|
+
parameters: {
|
|
17612
|
+
query?: never;
|
|
17613
|
+
header?: never;
|
|
17614
|
+
path?: never;
|
|
17615
|
+
cookie?: never;
|
|
17616
|
+
};
|
|
17617
|
+
get?: never;
|
|
17618
|
+
put?: never;
|
|
17619
|
+
/**
|
|
17620
|
+
* Upload the letter of authority of a beneficial owner
|
|
17621
|
+
* @description Multipart: `file` (PDF, JPEG or PNG up to 20 MB, told by the bytes). The file is filed as the owner's `auth_letter` document (`source: client`, not verified) as it arrived, and `verification.owners[].documents` of the overview lists it. It stays with CORE: the identity provider and the card vendors never get it, and no applicant is made for it. Neither the sending of the form nor any status waits on it. Unlike the other owner routes this one takes the filler's own row too (`is_applicant`), as the filler is often the representative. Whether to ask for the file (an authorised representative who is not a director) is for the client to decide: any role is taken. Sent again, it is a new row: the newest counts, the older stay on record. Access: the owner of the business entity, or an owner / admin of a wallet it is linked to.
|
|
17622
|
+
*/
|
|
17623
|
+
post: {
|
|
17624
|
+
parameters: {
|
|
17625
|
+
query?: never;
|
|
17626
|
+
header?: never;
|
|
17627
|
+
path: {
|
|
17628
|
+
/** @description `kyc_entity.id` of the caller, or of an entity linked to a wallet the caller owns or administers */
|
|
17629
|
+
entity_id: components["parameters"]["KycFormsEntityId"];
|
|
17630
|
+
/** @description The `id` of a beneficial owner of the business entity — an item of `beneficial_owners` as `GET …/forms` lists it after the base form was sent (every saved item carries its `id`; `verification.owners[].id` of the overview is the same id). A person, not a company; not the owner the filler marked as themselves (`is_applicant`). */
|
|
17631
|
+
owner_id: components["parameters"]["KycFormsOwnerId"];
|
|
17632
|
+
};
|
|
17633
|
+
cookie?: never;
|
|
17634
|
+
};
|
|
17635
|
+
requestBody: {
|
|
17636
|
+
content: {
|
|
17637
|
+
"multipart/form-data": {
|
|
17638
|
+
/**
|
|
17639
|
+
* Format: binary
|
|
17640
|
+
* @description One PDF, JPEG or PNG file, up to 20 MB.
|
|
17641
|
+
*/
|
|
17642
|
+
file: string;
|
|
17643
|
+
};
|
|
17644
|
+
};
|
|
17645
|
+
};
|
|
17646
|
+
responses: {
|
|
17647
|
+
/** @description The document as filed */
|
|
17648
|
+
201: {
|
|
17649
|
+
headers: {
|
|
17650
|
+
[name: string]: unknown;
|
|
17651
|
+
};
|
|
17652
|
+
content: {
|
|
17653
|
+
"application/json": {
|
|
17654
|
+
/** @example true */
|
|
17655
|
+
success: boolean;
|
|
17656
|
+
/** @example {
|
|
17657
|
+
* "document_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
|
|
17658
|
+
* "type": "auth_letter"
|
|
17659
|
+
* } */
|
|
17660
|
+
data: {
|
|
17661
|
+
/**
|
|
17662
|
+
* Format: uuid
|
|
17663
|
+
* @description The `kyc_documents` row.
|
|
17664
|
+
*/
|
|
17665
|
+
document_id: string;
|
|
17666
|
+
/** @enum {string} */
|
|
17667
|
+
type: "auth_letter";
|
|
17668
|
+
};
|
|
17669
|
+
};
|
|
17670
|
+
};
|
|
17671
|
+
};
|
|
17672
|
+
/** @description `VALIDATION_ERROR` — `entity_id` or `owner_id` is not a uuid; `KYC_FORMS_NOT_ENABLED`; `KYC_OWNER_NOT_INDIVIDUAL` — the owner is a company; `DOCUMENT_REJECTED` — a file that is not PDF, JPEG or PNG, empty, or over 20 MB; `INVALID_REQUEST` — no `file` part (or more than one), or an unreadable multipart body. */
|
|
17673
|
+
400: {
|
|
17674
|
+
headers: {
|
|
17675
|
+
[name: string]: unknown;
|
|
17676
|
+
};
|
|
17677
|
+
content: {
|
|
17678
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
17679
|
+
};
|
|
17680
|
+
};
|
|
17681
|
+
401: components["responses"]["UnauthorizedError"];
|
|
17682
|
+
403: components["responses"]["KycFormsAccessDenied"];
|
|
17683
|
+
404: components["responses"]["KycFormsOwnerNotFound"];
|
|
17684
|
+
409: components["responses"]["KycFormsOwnerConflict"];
|
|
17685
|
+
/** @description `SERVICE_UNAVAILABLE` — file storage is not configured on this server, or the locking service is unavailable */
|
|
17686
|
+
503: {
|
|
17687
|
+
headers: {
|
|
17688
|
+
[name: string]: unknown;
|
|
17689
|
+
};
|
|
17690
|
+
content: {
|
|
17691
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
17692
|
+
};
|
|
17693
|
+
};
|
|
17694
|
+
};
|
|
17695
|
+
};
|
|
17696
|
+
delete?: never;
|
|
17697
|
+
options?: never;
|
|
17698
|
+
head?: never;
|
|
17699
|
+
patch?: never;
|
|
17700
|
+
trace?: never;
|
|
17701
|
+
};
|
|
17610
17702
|
"/frontend/notifications/test": {
|
|
17611
17703
|
parameters: {
|
|
17612
17704
|
query?: never;
|
|
@@ -19951,7 +20043,7 @@ export interface components {
|
|
|
19951
20043
|
wallet_id?: string;
|
|
19952
20044
|
};
|
|
19953
20045
|
AmlProvider: {
|
|
19954
|
-
/** @description
|
|
20046
|
+
/** @description Neutral label of the screening provider, for the "Screening by …" line */
|
|
19955
20047
|
display_name?: string;
|
|
19956
20048
|
};
|
|
19957
20049
|
AmlScreeningAsset: {
|
|
@@ -20924,14 +21016,18 @@ export interface components {
|
|
|
20924
21016
|
saved: boolean;
|
|
20925
21017
|
};
|
|
20926
21018
|
/**
|
|
20927
|
-
* @description One item of a `list` field (`beneficial_owners`): an object keyed by the `item.fields[].key` of the field, each value shaped by that item field's `type` (an item field never takes files). `id` is set on a row already saved in the KYC entity (for an owner, the `owner_id` of the owner routes); send it back to keep the row, leave it out for a new one. A saved row is the entity's: the client never removes it — a list (or a draft's list, an empty or `null` one included) without an `id` the form gave is refused with `VALIDATION_ERROR` on the list key, «A saved beneficial owner cannot be removed; contact support»; compliance removes one. Nor does its `owner_type` change, nor is a saved value of it cleared (sent empty: `VALIDATION_ERROR` on the item field, «A saved value cannot be cleared; correct it or contact support»; left out of the item: kept). On a `returned` form the client corrects the other values of the item fields the form asks; outside a return a changed saved value is refused (`VALIDATION_ERROR`, «A saved value cannot be changed; contact support»). Messages come in the language of the form. Do not offer to delete an item with an `id`, nor to change its type. An item with `owner_type: business` requires `corporate_name`, `corporate_country` and `corporate_registration_number` (the form marks them `required` on the item fields): without them the identity provider cannot set the company up, so the submission is refused with `VALIDATION_ERROR` on the item field. An item with `owner_type: individual` other than the filler's own requires `email` (the form marks it `required` on the item fields, whatever `invite_by_email` and the tenant's profiles say): a submission without it, a saved owner of a returned form included, is refused with `VALIDATION_ERROR` on `beneficial_owners[i].email` (required); the draft takes it empty. The filler's own item (`is_applicant: true`) has no `email` field — the email of their account is used. The email is kept either way; `invite_by_email: true` is what has the identity provider email the owner their link to it.
|
|
21019
|
+
* @description One item of a `list` field (`beneficial_owners`): an object keyed by the `item.fields[].key` of the field, each value shaped by that item field's `type` (an item field never takes files). `id` is set on a row already saved in the KYC entity (for an owner, the `owner_id` of the owner routes); send it back to keep the row, leave it out for a new one. A saved row is the entity's: the client never removes it — a list (or a draft's list, an empty or `null` one included) without an `id` the form gave is refused with `VALIDATION_ERROR` on the list key, «A saved beneficial owner cannot be removed; contact support»; compliance removes one. Nor does its `owner_type` change, nor is a saved value of it cleared (sent empty: `VALIDATION_ERROR` on the item field, «A saved value cannot be cleared; correct it or contact support»; left out of the item: kept). On a `returned` form the client corrects the other values of the item fields the form asks; outside a return a changed saved value is refused (`VALIDATION_ERROR`, «A saved value cannot be changed; contact support»). Messages come in the language of the form. Do not offer to delete an item with an `id`, nor to change its type. An item with `owner_type: business` requires `corporate_name`, `corporate_country` and `corporate_registration_number` (the form marks them `required` on the item fields): without them the identity provider cannot set the company up, so the submission is refused with `VALIDATION_ERROR` on the item field. An item with `owner_type: individual` other than the filler's own requires `email` (the form marks it `required` on the item fields, whatever `invite_by_email` and the tenant's profiles say): a submission without it, a saved owner of a returned form included, is refused with `VALIDATION_ERROR` on `beneficial_owners[i].email` (required); the draft takes it empty. The filler's own item (`is_applicant: true`) has no `email` field — the email of their account is used. The email is kept either way; `invite_by_email: true` is what has the identity provider email the owner their link to it. An owner may hold several `roles`; `role` is not an item field: a new item that sends it is refused with `FORM_FIELD_NOT_ALLOWED`, an owner saved with one `role` comes with the `roles` it means. `has_control` is not an item field either (it follows from `roles` and `ubo_basis`): a new item that sends it with a value, `false` included, is refused the same way. `roles` is required (at least one of `UBO`, `SHAREHOLDER`, `DIRECTOR`, `REPRESENTATIVE`); a company owner takes only `SHAREHOLDER`. `share_proportion` (0.01 to 100) is asked of a `SHAREHOLDER` and of a `UBO`, but not of a `UBO` whose `ubo_basis` is `controls_otherwise` or `senior_managing_official`. `ubo_basis` (`owns_shares`, `controls_otherwise`, `senior_managing_official`) is asked of a `UBO` and required on a submission — not of an owner saved before it was asked. `ubo_control_details` (up to 2000 characters) is asked and required when `ubo_basis` is `controls_otherwise`. The names of a person are Latin letters only, up to 50 characters, and a date of birth typed in is of an adult (`validation.min_age`).
|
|
20928
21020
|
* @example {
|
|
20929
21021
|
* "id": "2d7c1b9e-4f30-4a8c-9e21-7b6a5c4d3e2f",
|
|
20930
21022
|
* "owner_type": "individual",
|
|
20931
21023
|
* "first_name": "Anna",
|
|
20932
21024
|
* "last_name": "Berg",
|
|
20933
|
-
* "
|
|
21025
|
+
* "roles": [
|
|
21026
|
+
* "UBO",
|
|
21027
|
+
* "DIRECTOR"
|
|
21028
|
+
* ],
|
|
20934
21029
|
* "share_proportion": 40,
|
|
21030
|
+
* "ubo_basis": "owns_shares",
|
|
20935
21031
|
* "is_applicant": false,
|
|
20936
21032
|
* "invite_by_email": true,
|
|
20937
21033
|
* "email": "anna@example.com"
|
|
@@ -20991,6 +21087,10 @@ export interface components {
|
|
|
20991
21087
|
max?: number | string;
|
|
20992
21088
|
min_length?: number;
|
|
20993
21089
|
max_length?: number;
|
|
21090
|
+
/** @description `multi_enum`, `country_multi`: how many values the answer may hold; `form.messages.too_many_values`. */
|
|
21091
|
+
max_items?: number;
|
|
21092
|
+
/** @description `date` of birth: the full years the person must have reached by today (UTC); `form.messages.min_age`. */
|
|
21093
|
+
min_age?: number;
|
|
20994
21094
|
patterns?: {
|
|
20995
21095
|
regex: string;
|
|
20996
21096
|
message: string;
|
|
@@ -21001,7 +21101,7 @@ export interface components {
|
|
|
21001
21101
|
value: string;
|
|
21002
21102
|
label: string;
|
|
21003
21103
|
/**
|
|
21004
|
-
* @description The number the option stands for in a `gt` / `gte` / `lt` / `lte` condition — a volume
|
|
21104
|
+
* @description The number the option stands for in a `gt` / `gte` / `lt` / `lte` condition — a range (volume, income, number of transactions, employees, turnover) carries its upper bound, the open top range its lower bound plus 1, so a range read back from the entity is the option it was chosen as. Present only on the options of a dictionary that gives numbers: compare it with the condition's `value` to evaluate `visible_when` on an `enum` field.
|
|
21005
21105
|
* @example 50000
|
|
21006
21106
|
*/
|
|
21007
21107
|
numeric?: number;
|
|
@@ -21062,7 +21162,7 @@ export interface components {
|
|
|
21062
21162
|
/** @description How many required visible fields are still empty (saved, pending and draft values together). */
|
|
21063
21163
|
missing_required: number;
|
|
21064
21164
|
/**
|
|
21065
|
-
* @description General validation messages by code (`required`, `min`, `max`, `min_length`, `max_length`, `invalid`); `{value}` stands for the bound.
|
|
21165
|
+
* @description General validation messages by code (`required`, `min`, `max`, `min_length`, `max_length`, `invalid`, `min_age`, `too_many_values`); `{value}` stands for the bound.
|
|
21066
21166
|
* @example {
|
|
21067
21167
|
* "required": "This field is required",
|
|
21068
21168
|
* "min": "The value must be at least {value}",
|
|
@@ -21087,7 +21187,7 @@ export interface components {
|
|
|
21087
21187
|
data: {
|
|
21088
21188
|
form: components["schemas"]["KycFormsForm"];
|
|
21089
21189
|
/**
|
|
21090
|
-
* @description Current value per field key (saved in KYC first, then pending, then the draft), each shaped by the field's `type` (`KycFormsFieldValue`): strings, numbers, booleans, `YYYY-MM-DD` dates, alpha-2 countries, arrays of strings; files as `KycFormsFileValue[]`; lists as `KycFormsListItemValue[]` with an `id` on saved rows. Every field of the form has a key here; empty is null.
|
|
21190
|
+
* @description Current value per field key (saved in KYC first, then pending, then the draft), each shaped by the field's `type` (`KycFormsFieldValue`): strings, numbers, booleans, `YYYY-MM-DD` dates, alpha-2 countries, arrays of strings; files as `KycFormsFileValue[]`; lists as `KycFormsListItemValue[]` with an `id` on saved rows. Every field of the form has a key here; empty is null. On a personal entity's editable form an empty, shown, unlocked `email` carries the email of the entity owner's account as a suggestion: not saved until the draft or the submission sends it, not locked, still counted in `missing_required`; a business form gets none, and only the owner of the entity gets it (a wallet admin reading the form does not).
|
|
21091
21191
|
* @example {
|
|
21092
21192
|
* "email": "user@example.com",
|
|
21093
21193
|
* "citizenship": "DE",
|
|
@@ -21240,11 +21340,13 @@ export interface components {
|
|
|
21240
21340
|
/** @description The owner as the form names them: a person's first and last name, a company's name; null when the form gave none. The filler's own row is null until they pass the identity check — then the name comes from their document. */
|
|
21241
21341
|
name: string | null;
|
|
21242
21342
|
/**
|
|
21243
|
-
* @description The
|
|
21343
|
+
* @description The highest of `roles` in the older list of one role, for those who read one value; a saved `PARTNER` stays as it is; null when none. Draw the owner by `roles`.
|
|
21244
21344
|
* @enum {string|null}
|
|
21245
21345
|
*/
|
|
21246
21346
|
role: "UBO" | "OWNER_OR_OPERATOR" | "PARTNER" | "DIRECTOR_CONTROL_PERSON_OR_LEGAL_REP" | "AGENT_OR_AUTHORISED_PERSON" | null;
|
|
21247
|
-
/** @description
|
|
21347
|
+
/** @description Every role of the owner, the highest first (UBO, shareholder, director, representative) — codes of the form's `roles` field, its labels in that field's `options`. An owner saved with one `role` reads as the role it means. Empty when none. */
|
|
21348
|
+
roles: ("UBO" | "SHAREHOLDER" | "DIRECTOR" | "REPRESENTATIVE")[];
|
|
21349
|
+
/** @description The filler's own row — the item the filler marked as themselves (`is_applicant` in the form), or the one CORE added for them from `applicant_role`. Draw it without the owner actions: the owner routes answer it `400 KYC_OWNER_IS_FILLER`, all but `…/authority-document`. Its `state` is the filler's own check on their personal entity — the same as `verification.applicant.state` for the owner of the business — and it never counts towards `next_step: owners`. */
|
|
21248
21350
|
is_applicant: boolean;
|
|
21249
21351
|
state: components["schemas"]["KycFormsVerificationState"];
|
|
21250
21352
|
/**
|
|
@@ -21252,15 +21354,15 @@ export interface components {
|
|
|
21252
21354
|
* @description When the identity provider last emailed this owner their link — after the form was sent and on each `POST …/verification/owners/invite`, to the persons whose item has `invite_by_email: true` (the email is required by the form); the filler's row too (through the email of their account); null = never (the owner gets the link by hand: `…/owners/{owner_id}/link` or `/session`); always null for a company.
|
|
21253
21355
|
*/
|
|
21254
21356
|
invited_at: string | null;
|
|
21255
|
-
/** @description The files of the
|
|
21357
|
+
/** @description The owner's files on record, one item per type however many times it was filed. `gov_id_front`, `gov_id_back` — the sides of the identity document, uploaded through `…/owners/{owner_id}/document` or read from the provider after the owner passed; not listed for the filler's own row. `proof_of_address` — read from the provider after the owner passed, when their check asks for one; on the filler's own row, for a UBO, the file of their personal form once their check passed, when its type is one of the form's list. `auth_letter` — uploaded through `…/owners/{owner_id}/authority-document`; it decides nothing, no status or step waits on it. An item says a file is there, not that the provider accepted it: `state` tells that, and the item stays after a refusal. Neither the file nor the kind of document (a passport or an ID card) is given. New keys may be added: pick the ones you draw by `key`. Empty for a company. */
|
|
21256
21358
|
documents: {
|
|
21257
21359
|
/**
|
|
21258
|
-
* @description The
|
|
21360
|
+
* @description The kind of file, as `type` in the answer of the upload.
|
|
21259
21361
|
* @enum {string}
|
|
21260
21362
|
*/
|
|
21261
|
-
key: "gov_id_front" | "gov_id_back";
|
|
21363
|
+
key: "gov_id_front" | "gov_id_back" | "proof_of_address" | "auth_letter";
|
|
21262
21364
|
/**
|
|
21263
|
-
* @description The name of the
|
|
21365
|
+
* @description The name of the document, in the language of the request.
|
|
21264
21366
|
* @example Identity document photo
|
|
21265
21367
|
*/
|
|
21266
21368
|
label: string;
|
|
@@ -21458,7 +21560,7 @@ export interface components {
|
|
|
21458
21560
|
}[];
|
|
21459
21561
|
};
|
|
21460
21562
|
};
|
|
21461
|
-
/** @description The structured payload of an error that carries one (absent otherwise — an invalid uuid or a malformed body is a message only). `VALIDATION_ERROR`: `fields` is a map from the field key to its messages (a list item field is `beneficial_owners[0].
|
|
21563
|
+
/** @description The structured payload of an error that carries one (absent otherwise — an invalid uuid or a malformed body is a message only). `VALIDATION_ERROR`: `fields` is a map from the field key to its messages (a list item field is `beneficial_owners[0].roles`, the list as a whole `beneficial_owners`). `FORM_FIELD_NOT_ALLOWED`, `KYC_FORM_CONDITIONS_CYCLE`: `fields` is a list of keys. */
|
|
21462
21564
|
KycFormsErrorDetails: {
|
|
21463
21565
|
fields: {
|
|
21464
21566
|
[key: string]: string[];
|
|
@@ -21549,7 +21651,7 @@ export interface components {
|
|
|
21549
21651
|
"application/json": components["schemas"]["ErrorResponse"];
|
|
21550
21652
|
};
|
|
21551
21653
|
};
|
|
21552
|
-
/** @description `VALIDATION_ERROR` — field errors in `details.fields[key] = [message]` (on a business form the owner list the KYC tables refuse, and owner shares adding up to more than 100%, come back under `beneficial_owners`; an individual beneficial owner other than the filler without an `email` comes back under `beneficial_owners[i].email` on a submission (the draft takes it empty); a saved beneficial owner (an item with an `id`) left out of the list — an empty or `null` list included — comes back under `beneficial_owners`, a saved value of it changed outside a `returned` form, or sent empty, under `beneficial_owners[i].<field>`, and nothing is saved; a value sent for a field whose condition reads a source left empty or wrong comes back as the error of the source, e.g. `beneficial_owners[0].
|
|
21654
|
+
/** @description `VALIDATION_ERROR` — field errors in `details.fields[key] = [message]` (on a business form the owner list the KYC tables refuse, and owner shares adding up to more than 100%, come back under `beneficial_owners`; an individual beneficial owner other than the filler without an `email` comes back under `beneficial_owners[i].email` on a submission (the draft takes it empty); a saved beneficial owner (an item with an `id`) left out of the list — an empty or `null` list included — comes back under `beneficial_owners`, a saved value of it changed outside a `returned` form, or sent empty, under `beneficial_owners[i].<field>`, and nothing is saved; a value sent for a field whose condition reads a source left empty or wrong comes back as the error of the source, e.g. `beneficial_owners[0].roles`; a `multi_enum` field with an option that excludes the others (`options[].exclusive`) chosen together with another one comes back under the field, on the draft too; on a submission only — the draft takes them: a value over the `validation` of its field comes back as the text of the rule with the bound in it — `max_items` «Choose no more than 5», `min_age` «You must be at least 18 years old», a pattern its own message, such as «Use Latin characters only…» for the names and addresses written in Latin letters; a form that asks `beneficial_owners` without a person holding the role `UBO` or `DIRECTOR` — the filler counts by their role, a company counts for none — comes back under `beneficial_owners`, «Add at least one person with the role DIRECTOR», one text for each missing role (the code of the role); a company owner with a role other than `SHAREHOLDER` comes back under `beneficial_owners[i].roles`, «A company can only be a shareholder» — a saved company keeps its roles until they change; the texts are the `message.latin_only`, `message.min_age`, `message.too_many_values`, `message.owner_role_missing` and `message.company_owner_role` of the form texts, in the language of the form), or a message only for a malformed body (`schema_version` missing or longer than 64, `values` not an object) and a path id that is not a uuid; `FORM_FIELD_NOT_ALLOWED` — a key the form does not accept (unknown, locked, hidden, a file field; on a list item a key that is not an item field of the form — `role`, `has_control` — named `beneficial_owners[0].role` in `details.fields`), and, in the draft too, any PEP detail (`pep_full_name`, `pep_relationship`, `pep_country`, `pep_position`, `pep_is_current`, `pep_end_date`, `pep_related_declaration`, `pep_related_position`, `pep_related_country`) sent with a value while `pep_declaration` is `false` (a detail hidden by its condition is refused even empty, like any hidden key: leave it out), `details.fields = [key]`, the whole request refused; `FORM_TARGET_UNSUPPORTED` — a card program named on a business entity; `INVALID_REQUEST` — `wallet_id` missing for a form over card programs; `KYC_BASE_BINDING_MISSING` — the tenant has no base form for this client type; `KYC_FORMS_NOT_ENABLED` — the tenant is not on the forms flow */
|
|
21553
21655
|
KycFormsFieldErrors: {
|
|
21554
21656
|
headers: {
|
|
21555
21657
|
[name: string]: unknown;
|
|
@@ -1520,6 +1520,8 @@ export interface paths {
|
|
|
1520
1520
|
* @description Returns a paginated list of KYC records within the tenant.
|
|
1521
1521
|
* Optionally filter by `wallet_id`.
|
|
1522
1522
|
*
|
|
1523
|
+
* Minimum role: VIEWER.
|
|
1524
|
+
*
|
|
1523
1525
|
*/
|
|
1524
1526
|
get: {
|
|
1525
1527
|
parameters: {
|
|
@@ -1558,6 +1560,15 @@ export interface paths {
|
|
|
1558
1560
|
};
|
|
1559
1561
|
};
|
|
1560
1562
|
};
|
|
1563
|
+
/** @description `WALLET_ACCESS_DENIED`: `wallet_id` is not a wallet of the tenant of the key */
|
|
1564
|
+
403: {
|
|
1565
|
+
headers: {
|
|
1566
|
+
[name: string]: unknown;
|
|
1567
|
+
};
|
|
1568
|
+
content: {
|
|
1569
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1570
|
+
};
|
|
1571
|
+
};
|
|
1561
1572
|
};
|
|
1562
1573
|
};
|
|
1563
1574
|
put?: never;
|
|
@@ -1571,6 +1582,8 @@ export interface paths {
|
|
|
1571
1582
|
* `wallets.kyc_entity_id` — a wallet without an active owner is rejected
|
|
1572
1583
|
* with 400.
|
|
1573
1584
|
*
|
|
1585
|
+
* Minimum role: OPERATOR.
|
|
1586
|
+
*
|
|
1574
1587
|
*/
|
|
1575
1588
|
post: {
|
|
1576
1589
|
parameters: {
|
|
@@ -1581,7 +1594,7 @@ export interface paths {
|
|
|
1581
1594
|
};
|
|
1582
1595
|
requestBody: {
|
|
1583
1596
|
content: {
|
|
1584
|
-
"application/json": {
|
|
1597
|
+
"application/json": components["schemas"]["KycEntityComplianceInput"] & {
|
|
1585
1598
|
/**
|
|
1586
1599
|
* Format: uuid
|
|
1587
1600
|
* @description Wallet to attach the KYC entity to
|
|
@@ -1652,26 +1665,41 @@ export interface paths {
|
|
|
1652
1665
|
};
|
|
1653
1666
|
};
|
|
1654
1667
|
};
|
|
1655
|
-
/** @description
|
|
1668
|
+
/** @description `INVALID_REQUEST`: `wallet_id` or `type` missing, the wallet has no active owner, or a field is malformed (the message names it): `gender`, `documents[]`, `pep_end_date` not `YYYY-MM`, `pep_related_country` not an alpha-3 code, `business_sector` outside the list, `employees_count` not a whole number from 0, `annual_turnover` below 0, a text field over 2000 characters; `INVALID_TYPE`: `type` is neither `individual` nor `business`; `KYC_ENTITY_EXISTS`: the wallet already has a KYC entity (use PATCH) */
|
|
1656
1669
|
400: {
|
|
1657
1670
|
headers: {
|
|
1658
1671
|
[name: string]: unknown;
|
|
1659
1672
|
};
|
|
1660
|
-
content
|
|
1673
|
+
content: {
|
|
1674
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1675
|
+
};
|
|
1661
1676
|
};
|
|
1662
|
-
/** @description
|
|
1677
|
+
/** @description `INSUFFICIENT_ADMIN_ROLE`: the key is below OPERATOR; `WALLET_ACCESS_DENIED`: the wallet does not belong to the tenant of the key */
|
|
1678
|
+
403: {
|
|
1679
|
+
headers: {
|
|
1680
|
+
[name: string]: unknown;
|
|
1681
|
+
};
|
|
1682
|
+
content: {
|
|
1683
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1684
|
+
};
|
|
1685
|
+
};
|
|
1686
|
+
/** @description `WALLET_NOT_FOUND` */
|
|
1663
1687
|
404: {
|
|
1664
1688
|
headers: {
|
|
1665
1689
|
[name: string]: unknown;
|
|
1666
1690
|
};
|
|
1667
|
-
content
|
|
1691
|
+
content: {
|
|
1692
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1693
|
+
};
|
|
1668
1694
|
};
|
|
1669
|
-
/** @description
|
|
1695
|
+
/** @description `OPERATION_IN_PROGRESS`: concurrent creation for this wallet is in progress — retry later */
|
|
1670
1696
|
409: {
|
|
1671
1697
|
headers: {
|
|
1672
1698
|
[name: string]: unknown;
|
|
1673
1699
|
};
|
|
1674
|
-
content
|
|
1700
|
+
content: {
|
|
1701
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1702
|
+
};
|
|
1675
1703
|
};
|
|
1676
1704
|
};
|
|
1677
1705
|
};
|
|
@@ -1693,6 +1721,8 @@ export interface paths {
|
|
|
1693
1721
|
* @description Returns the KYC data (individual or business) associated with the wallet,
|
|
1694
1722
|
* including address and beneficial owners for business entities.
|
|
1695
1723
|
*
|
|
1724
|
+
* Minimum role: VIEWER.
|
|
1725
|
+
*
|
|
1696
1726
|
*/
|
|
1697
1727
|
get: {
|
|
1698
1728
|
parameters: {
|
|
@@ -1719,12 +1749,23 @@ export interface paths {
|
|
|
1719
1749
|
};
|
|
1720
1750
|
};
|
|
1721
1751
|
};
|
|
1722
|
-
/** @description
|
|
1752
|
+
/** @description `WALLET_ACCESS_DENIED`: the wallet does not belong to the tenant of the key */
|
|
1753
|
+
403: {
|
|
1754
|
+
headers: {
|
|
1755
|
+
[name: string]: unknown;
|
|
1756
|
+
};
|
|
1757
|
+
content: {
|
|
1758
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1759
|
+
};
|
|
1760
|
+
};
|
|
1761
|
+
/** @description `KYC_ENTITY_NOT_FOUND`: no KYC found for this wallet */
|
|
1723
1762
|
404: {
|
|
1724
1763
|
headers: {
|
|
1725
1764
|
[name: string]: unknown;
|
|
1726
1765
|
};
|
|
1727
|
-
content
|
|
1766
|
+
content: {
|
|
1767
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1768
|
+
};
|
|
1728
1769
|
};
|
|
1729
1770
|
};
|
|
1730
1771
|
};
|
|
@@ -1755,6 +1796,9 @@ export interface paths {
|
|
|
1755
1796
|
* Once submitted (status moves to PENDING or beyond), the entity becomes immutable
|
|
1756
1797
|
* through this endpoint until the review process returns it to `SOFT_REJECT`.
|
|
1757
1798
|
*
|
|
1799
|
+
* Minimum role: OPERATOR. Only the keys of the body change their columns: an absent key leaves the column
|
|
1800
|
+
* alone, `null` clears it.
|
|
1801
|
+
*
|
|
1758
1802
|
*/
|
|
1759
1803
|
patch: {
|
|
1760
1804
|
parameters: {
|
|
@@ -1768,7 +1812,7 @@ export interface paths {
|
|
|
1768
1812
|
};
|
|
1769
1813
|
requestBody: {
|
|
1770
1814
|
content: {
|
|
1771
|
-
"application/json": {
|
|
1815
|
+
"application/json": components["schemas"]["KycEntityComplianceInput"] & {
|
|
1772
1816
|
/** @enum {string} */
|
|
1773
1817
|
type?: "individual" | "business";
|
|
1774
1818
|
/** Format: email */
|
|
@@ -1828,19 +1872,32 @@ export interface paths {
|
|
|
1828
1872
|
};
|
|
1829
1873
|
};
|
|
1830
1874
|
};
|
|
1831
|
-
/** @description
|
|
1875
|
+
/** @description `ENTITY_NOT_EDITABLE`: the entity is not in `UNVERIFIED` or `SOFT_REJECT` status; `INVALID_TYPE`: `type` is neither `individual` nor `business`; `INVALID_REQUEST`: a field is malformed (the message names it): `gender`, `documents[]`, `pep_end_date` not `YYYY-MM`, `pep_related_country` not an alpha-3 code, `business_sector` outside the list, `employees_count` not a whole number from 0, `annual_turnover` below 0, a text field over 2000 characters */
|
|
1832
1876
|
400: {
|
|
1833
1877
|
headers: {
|
|
1834
1878
|
[name: string]: unknown;
|
|
1835
1879
|
};
|
|
1836
|
-
content
|
|
1880
|
+
content: {
|
|
1881
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1882
|
+
};
|
|
1837
1883
|
};
|
|
1838
|
-
/** @description
|
|
1884
|
+
/** @description `INSUFFICIENT_ADMIN_ROLE`: the key is below OPERATOR; `WALLET_ACCESS_DENIED`: the entity does not belong to the tenant of the key */
|
|
1885
|
+
403: {
|
|
1886
|
+
headers: {
|
|
1887
|
+
[name: string]: unknown;
|
|
1888
|
+
};
|
|
1889
|
+
content: {
|
|
1890
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1891
|
+
};
|
|
1892
|
+
};
|
|
1893
|
+
/** @description `KYC_ENTITY_NOT_FOUND` */
|
|
1839
1894
|
404: {
|
|
1840
1895
|
headers: {
|
|
1841
1896
|
[name: string]: unknown;
|
|
1842
1897
|
};
|
|
1843
|
-
content
|
|
1898
|
+
content: {
|
|
1899
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1900
|
+
};
|
|
1844
1901
|
};
|
|
1845
1902
|
};
|
|
1846
1903
|
};
|
|
@@ -1939,6 +1996,8 @@ export interface paths {
|
|
|
1939
1996
|
*
|
|
1940
1997
|
* This is a one-way action: to cancel a submission, contact support.
|
|
1941
1998
|
*
|
|
1999
|
+
* Minimum role: OPERATOR. At most 5 submissions per hour for one entity.
|
|
2000
|
+
*
|
|
1942
2001
|
*/
|
|
1943
2002
|
post: {
|
|
1944
2003
|
parameters: {
|
|
@@ -1965,19 +2024,41 @@ export interface paths {
|
|
|
1965
2024
|
};
|
|
1966
2025
|
};
|
|
1967
2026
|
};
|
|
1968
|
-
/** @description
|
|
2027
|
+
/** @description `ENTITY_NOT_SUBMITTABLE`: the entity is not in `UNVERIFIED` or `SOFT_REJECT` status */
|
|
1969
2028
|
400: {
|
|
1970
2029
|
headers: {
|
|
1971
2030
|
[name: string]: unknown;
|
|
1972
2031
|
};
|
|
1973
|
-
content
|
|
2032
|
+
content: {
|
|
2033
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2034
|
+
};
|
|
2035
|
+
};
|
|
2036
|
+
/** @description `INSUFFICIENT_ADMIN_ROLE`: the key is below OPERATOR; `WALLET_ACCESS_DENIED`: the entity does not belong to the tenant of the key */
|
|
2037
|
+
403: {
|
|
2038
|
+
headers: {
|
|
2039
|
+
[name: string]: unknown;
|
|
2040
|
+
};
|
|
2041
|
+
content: {
|
|
2042
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2043
|
+
};
|
|
1974
2044
|
};
|
|
1975
|
-
/** @description
|
|
2045
|
+
/** @description `KYC_ENTITY_NOT_FOUND` */
|
|
1976
2046
|
404: {
|
|
1977
2047
|
headers: {
|
|
1978
2048
|
[name: string]: unknown;
|
|
1979
2049
|
};
|
|
1980
|
-
content
|
|
2050
|
+
content: {
|
|
2051
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2052
|
+
};
|
|
2053
|
+
};
|
|
2054
|
+
/** @description `RATE_LIMIT_EXCEEDED`: too many submissions for this entity */
|
|
2055
|
+
429: {
|
|
2056
|
+
headers: {
|
|
2057
|
+
[name: string]: unknown;
|
|
2058
|
+
};
|
|
2059
|
+
content: {
|
|
2060
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2061
|
+
};
|
|
1981
2062
|
};
|
|
1982
2063
|
};
|
|
1983
2064
|
};
|
|
@@ -8940,10 +9021,40 @@ export interface components {
|
|
|
8940
9021
|
/** Format: date-time */
|
|
8941
9022
|
updated_at?: string;
|
|
8942
9023
|
};
|
|
9024
|
+
KycEntityComplianceInput: {
|
|
9025
|
+
pep_position?: string | null;
|
|
9026
|
+
pep_is_current?: boolean | null;
|
|
9027
|
+
/**
|
|
9028
|
+
* @description Month the position ended, `YYYY-MM`; any other shape answers 400
|
|
9029
|
+
* @example 2024-06
|
|
9030
|
+
*/
|
|
9031
|
+
pep_end_date?: string | null;
|
|
9032
|
+
pep_related_declaration?: boolean | null;
|
|
9033
|
+
pep_related_position?: string | null;
|
|
9034
|
+
/**
|
|
9035
|
+
* @description ISO 3166-1 alpha-3 country code; any other value answers 400
|
|
9036
|
+
* @example DEU
|
|
9037
|
+
*/
|
|
9038
|
+
pep_related_country?: string | null;
|
|
9039
|
+
acting_on_own_behalf?: boolean | null;
|
|
9040
|
+
on_behalf_details?: string | null;
|
|
9041
|
+
source_of_funds_other?: string | null;
|
|
9042
|
+
/**
|
|
9043
|
+
* @description One of the values listed on `business_sector` of the KycEntity schema; any other value answers 400
|
|
9044
|
+
* @example OtherServices
|
|
9045
|
+
*/
|
|
9046
|
+
business_sector?: string | null;
|
|
9047
|
+
online_presence?: string | null;
|
|
9048
|
+
employees_count?: number | null;
|
|
9049
|
+
annual_turnover?: number | null;
|
|
9050
|
+
third_party_payments_details?: string | null;
|
|
9051
|
+
sanctions_exposure?: boolean | null;
|
|
9052
|
+
sanctions_details?: string | null;
|
|
9053
|
+
};
|
|
8943
9054
|
/** @description Documents to file for the KYC entity. Each entry is stored as a document of its type; an earlier document of the same type stays on record (several documents of one type are allowed). All entries of one request form one batch in the given order, so a multi-file document (e.g. the pages of a bank statement) is sent as several entries of the same type in one request. A file already on record under its type is not filed again and keeps its dates; to change them, remove the document and file it again. A document is removed through DELETE /admin/kyc_entity/{entity_id}/documents/{document_id}. */
|
|
8944
9055
|
KycDocumentsInput: {
|
|
8945
9056
|
/**
|
|
8946
|
-
* @description Document type: supplementary, gov_id_front, gov_id_back, gov_id_hand_hold, selfie, proof_of_address, auth_letter, formation_doc, proof_of_ownership, certificate_of_registration_doc, business_registration_doc, share_structure, constitution_or_annual_report, articles_of_association, ubo_declaration, partnership_mins_of_meeting, partnership_deed, certificate_of_incumbency, regulatory_license, state_registry_doc, good_standing_cert, business_proof_of_address, invoices, contracts, financial_statements, source_of_funds, business_bank_statement, source_of_wealth_ubo, customer_supplier_agreements.
|
|
9057
|
+
* @description Document type: supplementary, gov_id_front, gov_id_back, gov_id_hand_hold, selfie, proof_of_address, auth_letter, formation_doc, proof_of_ownership, certificate_of_registration_doc, business_registration_doc, share_structure, constitution_or_annual_report, articles_of_association, ubo_declaration, partnership_mins_of_meeting, partnership_deed, certificate_of_incumbency, regulatory_license, state_registry_doc, good_standing_cert, business_proof_of_address, invoices, contracts, financial_statements, source_of_funds, business_bank_statement, source_of_wealth_ubo, customer_supplier_agreements, company_shareholder_documents.
|
|
8947
9058
|
* @example formation_doc
|
|
8948
9059
|
*/
|
|
8949
9060
|
type: string;
|
|
@@ -9147,6 +9258,47 @@ export interface components {
|
|
|
9147
9258
|
certificate_of_registration_doc_type?: string | null;
|
|
9148
9259
|
/** @description Certificate number (business) */
|
|
9149
9260
|
certificate_number?: string | null;
|
|
9261
|
+
/** @description Position of the politically exposed person */
|
|
9262
|
+
pep_position?: string | null;
|
|
9263
|
+
/** @description Whether the position is current */
|
|
9264
|
+
pep_is_current?: boolean | null;
|
|
9265
|
+
/**
|
|
9266
|
+
* @description Month the position ended, `YYYY-MM`
|
|
9267
|
+
* @example 2024-06
|
|
9268
|
+
*/
|
|
9269
|
+
pep_end_date?: string | null;
|
|
9270
|
+
/** @description Whether a relative or partner is a politically exposed person */
|
|
9271
|
+
pep_related_declaration?: boolean | null;
|
|
9272
|
+
/** @description Position of the related politically exposed person */
|
|
9273
|
+
pep_related_position?: string | null;
|
|
9274
|
+
/**
|
|
9275
|
+
* @description Country of the related politically exposed person, ISO 3166-1 alpha-3
|
|
9276
|
+
* @example DEU
|
|
9277
|
+
*/
|
|
9278
|
+
pep_related_country?: string | null;
|
|
9279
|
+
/** @description Whether the individual acts on their own behalf */
|
|
9280
|
+
acting_on_own_behalf?: boolean | null;
|
|
9281
|
+
/** @description On whose behalf the individual acts */
|
|
9282
|
+
on_behalf_details?: string | null;
|
|
9283
|
+
/** @description Describes a source of funds that is not listed */
|
|
9284
|
+
source_of_funds_other?: string | null;
|
|
9285
|
+
/**
|
|
9286
|
+
* @description Industry sector of the business; `business_industry` holds its NAICS codes
|
|
9287
|
+
* @enum {string|null}
|
|
9288
|
+
*/
|
|
9289
|
+
business_sector?: "FinancialServices" | "Cryptocurrency" | "Gaming" | "LuxuryGoods" | "Defense" | "AdultEntertainment" | "ProfessionalServices" | "RealEstate" | "TechnologySoftware" | "TelecommunicationsMedia" | "Healthcare" | "Retail" | "Manufacturing" | "Food&Beverage" | "Construction" | "Energy" | "Transportation" | "Hospitality&Tourism" | "Education&Training" | "Arts" | "Agriculture&Farming" | "NonProfit" | "Government" | "Cannabiis" | "OtherServices" | null;
|
|
9290
|
+
/** @description Where the business appears online */
|
|
9291
|
+
online_presence?: string | null;
|
|
9292
|
+
/** @description Number of employees. An answer from a KYC form holds the upper bound of the chosen range */
|
|
9293
|
+
employees_count?: number | null;
|
|
9294
|
+
/** @description Annual turnover, USD. An answer from a KYC form holds the upper bound of the chosen range */
|
|
9295
|
+
annual_turnover?: number | null;
|
|
9296
|
+
/** @description Payments from or to third parties */
|
|
9297
|
+
third_party_payments_details?: string | null;
|
|
9298
|
+
/** @description Whether the business has links to sanctioned countries or persons */
|
|
9299
|
+
sanctions_exposure?: boolean | null;
|
|
9300
|
+
/** @description Describes the links to sanctioned countries or persons */
|
|
9301
|
+
sanctions_details?: string | null;
|
|
9150
9302
|
/** Format: uuid */
|
|
9151
9303
|
kyc_address_id?: string | null;
|
|
9152
9304
|
/** Format: uuid */
|
|
@@ -9171,7 +9323,17 @@ export interface components {
|
|
|
9171
9323
|
first_name?: string;
|
|
9172
9324
|
last_name?: string;
|
|
9173
9325
|
email?: string | null;
|
|
9326
|
+
/** @description The highest of `roles` in the older list of one role */
|
|
9174
9327
|
role?: string | null;
|
|
9328
|
+
/** @description Every role of the owner, the highest first; empty when none */
|
|
9329
|
+
roles?: ("UBO" | "SHAREHOLDER" | "DIRECTOR" | "REPRESENTATIVE")[];
|
|
9330
|
+
/**
|
|
9331
|
+
* @description Why the owner is a UBO
|
|
9332
|
+
* @enum {string|null}
|
|
9333
|
+
*/
|
|
9334
|
+
ubo_basis?: "owns_shares" | "controls_otherwise" | "senior_managing_official" | null;
|
|
9335
|
+
/** @description How the owner controls the company */
|
|
9336
|
+
ubo_control_details?: string | null;
|
|
9175
9337
|
business_title?: string | null;
|
|
9176
9338
|
has_ownership?: boolean;
|
|
9177
9339
|
has_control?: boolean;
|
|
@@ -898,6 +898,7 @@ export declare namespace API {
|
|
|
898
898
|
type OwnerLinkRoot = pathsV1Frontend['/frontend/kyc/entities/{entity_id}/verification/owners/{owner_id}/link'];
|
|
899
899
|
type OwnerSessionRoot = pathsV1Frontend['/frontend/kyc/entities/{entity_id}/verification/owners/{owner_id}/session'];
|
|
900
900
|
type OwnerDocumentRoot = pathsV1Frontend['/frontend/kyc/entities/{entity_id}/verification/owners/{owner_id}/document'];
|
|
901
|
+
type OwnerAuthorityDocumentRoot = pathsV1Frontend['/frontend/kyc/entities/{entity_id}/verification/owners/{owner_id}/authority-document'];
|
|
901
902
|
type OwnersInviteRoot = pathsV1Frontend['/frontend/kyc/entities/{entity_id}/verification/owners/invite'];
|
|
902
903
|
type Schemas = componentsV1Frontend['schemas'];
|
|
903
904
|
type UploadOptions = Pick<AxiosRequestConfig, 'signal' | 'timeout' | 'onUploadProgress'>;
|
|
@@ -1014,6 +1015,14 @@ export declare namespace API {
|
|
|
1014
1015
|
export type Response = OwnerDocumentRoot['post']['responses'][201]['content']['application/json'];
|
|
1015
1016
|
export {};
|
|
1016
1017
|
}
|
|
1018
|
+
namespace AuthorityDocument {
|
|
1019
|
+
type Body = OwnerAuthorityDocumentRoot['post']['requestBody']['content']['multipart/form-data'];
|
|
1020
|
+
export type Request = OwnerAuthorityDocumentRoot['post']['parameters']['path'] & Omit<Body, 'file'> & {
|
|
1021
|
+
file: File | Blob;
|
|
1022
|
+
} & UploadOptions;
|
|
1023
|
+
export type Response = OwnerAuthorityDocumentRoot['post']['responses'][201]['content']['application/json'];
|
|
1024
|
+
export {};
|
|
1025
|
+
}
|
|
1017
1026
|
namespace Invite {
|
|
1018
1027
|
type Request = OwnersInviteRoot['post']['parameters']['path'];
|
|
1019
1028
|
type Response = OwnersInviteRoot['post']['responses'][200]['content']['application/json'];
|