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.
@@ -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
  };
@@ -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, or the fee cannot be priced in this currency (AML_FEE_NOT_PRICEABLE) */
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) or a fee that cannot be priced (AML_FEE_NOT_PRICEABLE) */
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 Name of the on-chain analytics partner, for the "Screening by …" line */
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
- * "role": "UBO",
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 range carries its upper bound. 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.
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 owner's `role` as sent in the form — a code of the `ubo_role` dictionary, its labels in the `options` of the form's role field; null when none.
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 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`. 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`. */
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 owner's identity document on record: uploaded through `…/owners/{owner_id}/document`, or read from the provider after the owner passed. One item per side however many times it was uploaded. It 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. Empty for a company and for the filler's own row. */
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 side, as `type` in the answer of the upload.
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 field, in the language of the request.
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].role`, the list as a whole `beneficial_owners`). `FORM_FIELD_NOT_ALLOWED`, `KYC_FORM_CONDITIONS_CYCLE`: `fields` is a list of keys. */
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].role`; 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), 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), `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 */
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 Missing required fields, wallet already has KYC, or wallet has no active owner */
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?: never;
1673
+ content: {
1674
+ "application/json": components["schemas"]["ErrorResponse"];
1675
+ };
1661
1676
  };
1662
- /** @description Wallet not found */
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?: never;
1691
+ content: {
1692
+ "application/json": components["schemas"]["ErrorResponse"];
1693
+ };
1668
1694
  };
1669
- /** @description Concurrent creation for this wallet is in progress — retry later */
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?: never;
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 No KYC found for this wallet */
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?: never;
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 Entity is not in UNVERIFIED or SOFT_REJECT status */
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?: never;
1880
+ content: {
1881
+ "application/json": components["schemas"]["ErrorResponse"];
1882
+ };
1837
1883
  };
1838
- /** @description KYC entity not found */
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?: never;
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 Not in a submittable status */
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?: never;
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 KYC not found */
2045
+ /** @description `KYC_ENTITY_NOT_FOUND` */
1976
2046
  404: {
1977
2047
  headers: {
1978
2048
  [name: string]: unknown;
1979
2049
  };
1980
- content?: never;
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'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "squarefi-bff-api-module",
3
- "version": "1.36.105",
3
+ "version": "1.36.106",
4
4
  "description": "Squarefi BFF API client module",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",