squarefi-bff-api-module 1.36.96 → 1.36.98

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.
@@ -73,7 +73,7 @@ export declare const frontend: {
73
73
  kycRails: {
74
74
  getAll: ({ wallet_id }: API.Frontend.KycRails.List.Request) => Promise<API.Frontend.KycRails.List.Response>;
75
75
  getById: ({ wallet_id, rail_id }: API.Frontend.KycRails.Get.Request) => Promise<API.Frontend.KycRails.Get.Response>;
76
- submit: ({ wallet_id, rail_id, }: API.Frontend.KycRails.Submit.Request) => Promise<API.Frontend.KycRails.Submit.Response>;
76
+ submit: ({ wallet_id, rail_id, accepted_terms, }: API.Frontend.KycRails.Submit.Request) => Promise<API.Frontend.KycRails.Submit.Response>;
77
77
  confirmTerms: ({ wallet_id, rail_id, }: API.Frontend.KycRails.ConfirmTerms.Request) => Promise<API.Frontend.KycRails.ConfirmTerms.Response>;
78
78
  };
79
79
  kycForms: {
@@ -151,7 +151,9 @@ export const frontend = {
151
151
  kycRails: {
152
152
  getAll: ({ wallet_id }) => apiClientV1Frontend.getRequest(`/frontend/wallets/${wallet_id}/kyc-rails`),
153
153
  getById: ({ wallet_id, rail_id }) => apiClientV1Frontend.getRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}`),
154
- submit: ({ wallet_id, rail_id, }) => apiClientV1Frontend.postRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}`),
154
+ // No `data` without `accepted_terms`, so both clients keep the old request (the fetch one sends no body). On a
155
+ // rail with terms an empty list is a refusal, not an absence (SFI-2865).
156
+ submit: ({ wallet_id, rail_id, accepted_terms, }) => apiClientV1Frontend.postRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}`, accepted_terms == null ? undefined : { data: { accepted_terms } }),
155
157
  confirmTerms: ({ wallet_id, rail_id, }) => apiClientV1Frontend.postRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}/terms-and-conditions`),
156
158
  },
157
159
  // KYC forms (CORE). Personal entity creation is idempotent, a business entity is new on every call. A form is
@@ -194,6 +196,7 @@ export const frontend = {
194
196
  params,
195
197
  paramsSerializer: KYC_FORMS_ARRAY_PARAMS,
196
198
  }),
199
+ // `accepted_terms`: all document ids of `form.terms` (`[]` if none); missing ones come back in `details.terms`.
197
200
  submit: ({ entity_id, rails, programs, wallet_id, locale, ...data }) => apiClientV1Frontend.postRequest(`/frontend/kyc/entities/${entity_id}/forms/submit`, { data, params: { rails, programs, wallet_id, locale }, paramsSerializer: KYC_FORMS_ARRAY_PARAMS }),
198
201
  },
199
202
  verification: {
package/dist/api/kyc.d.ts CHANGED
@@ -17,7 +17,10 @@ export declare const kyc: {
17
17
  init: ({ kyc_entity_id, ...params }: API.KYC.Entity.Init.Request) => Promise<API.KYC.Entity.Init.Response>;
18
18
  resume: ({ kyc_entity_id, verification_ref, }: API.KYC.Entity.Resume.Request) => Promise<API.KYC.Entity.Resume.Response>;
19
19
  };
20
- /** @deprecated BFF rails are replaced by CORE `/frontend/wallets/{wallet_id}/kyc-rails` (SFI-2614). Use `frontend.kycRails`. */
20
+ /**
21
+ * @deprecated BFF rails are replaced by CORE `/frontend/wallets/{wallet_id}/kyc-rails` (SFI-2614). Use `frontend.kycRails`:
22
+ * only its `submit` takes the rail's terms ticked before the submission (`accepted_terms`, SFI-2865).
23
+ */
21
24
  rails: {
22
25
  info: {
23
26
  getAll: ({ wallet_id }: API.KYC.Rails.RailInfo.List.Request) => Promise<API.KYC.Rails.RailInfo.List.Response>;
package/dist/api/kyc.js CHANGED
@@ -17,7 +17,10 @@ export const kyc = {
17
17
  init: ({ kyc_entity_id, ...params }) => apiClientV2.postRequest(`/kyc/entities/${kyc_entity_id}/init`, { params }),
18
18
  resume: ({ kyc_entity_id, verification_ref, }) => apiClientV2.postRequest(`/kyc/entities/${kyc_entity_id}/resume/${verification_ref}`),
19
19
  },
20
- /** @deprecated BFF rails are replaced by CORE `/frontend/wallets/{wallet_id}/kyc-rails` (SFI-2614). Use `frontend.kycRails`. */
20
+ /**
21
+ * @deprecated BFF rails are replaced by CORE `/frontend/wallets/{wallet_id}/kyc-rails` (SFI-2614). Use `frontend.kycRails`:
22
+ * only its `submit` takes the rail's terms ticked before the submission (`accepted_terms`, SFI-2865).
23
+ */
21
24
  rails: {
22
25
  info: {
23
26
  getAll: ({ wallet_id }) => apiClientV2.getRequest(`/kyc/${wallet_id}/rails`),
@@ -2523,6 +2523,12 @@ export interface paths {
2523
2523
  * fresh cardholder is NOT the way to retry. While a review is running, another submit is
2524
2524
  * refused with `409`.
2525
2525
  *
2526
+ * **Final rejection**: a rejection no corrected dossier answers — a forged document,
2527
+ * fraud, an attempt to bypass the liveness check, or a regulatory bar (age, region, a
2528
+ * duplicate applicant) — is final. The submit is refused with
2529
+ * `409 CARDHOLDER_REJECTION_FINAL`, and `error.details.reject_reason` carries the
2530
+ * vendor's reason; no card can be issued for this identity.
2531
+ *
2526
2532
  * **Authentication**: x-api-key header required
2527
2533
  *
2528
2534
  */
@@ -2582,7 +2588,7 @@ export interface paths {
2582
2588
  "application/json": components["schemas"]["ApiErrorResponse"];
2583
2589
  };
2584
2590
  };
2585
- /** @description Cardholder is live at the vendor, or its review is still running. On a program that issues under the wallet's company: `WALLET_BUSINESS_NOT_ONBOARDED` (the wallet's business has not been registered with the card issuer) or `WALLET_BUSINESS_NOT_APPROVED` (its review is not approved yet). */
2591
+ /** @description Cardholder is live at the vendor, or its review is still running (`CARDHOLDER_NOT_DRAFT`). Its rejection is final and cannot be answered by a resubmit (`CARDHOLDER_REJECTION_FINAL`, `error.details.reject_reason`). On a program that issues under the wallet's company: `WALLET_BUSINESS_NOT_ONBOARDED` (the wallet's business has not been registered with the card issuer) or `WALLET_BUSINESS_NOT_APPROVED` (its review is not approved yet). */
2586
2592
  409: {
2587
2593
  headers: {
2588
2594
  [name: string]: unknown;
@@ -6058,7 +6058,10 @@ export interface paths {
6058
6058
  * and poll. Only programs whose vendor reviews the person before issuance ever return
6059
6059
  * this; vendors that issue inline go straight to `READY`.
6060
6060
  * - `REJECTED` — a verification came back with a FINAL rejection; re-running it from the
6061
- * app is not possible (support resets it), so never render a "verify now" action.
6061
+ * app is not possible (support resets it), so never render a "verify now" action. Also
6062
+ * a linked cardholder (`cardholder_id`, `reject_reason`) whose VENDOR rejection is final
6063
+ * — a forged document, fraud, a liveness bypass, a regulatory bar: its submit answers
6064
+ * `409 CARDHOLDER_REJECTION_FINAL`, so never render "fix and resubmit" for it.
6062
6065
  * - `NOT_MEMBER` — the uuid is not an active member of this wallet.
6063
6066
  *
6064
6067
  * **On a tenant of the KYC forms flow** (SFI-2544) the verdict comes from the member's personal
@@ -6139,8 +6142,9 @@ export interface paths {
6139
6142
  */
6140
6143
  required_level?: "minimal" | "basic" | "declared" | "full" | null;
6141
6144
  /** @description What the vendor disliked, on a NEEDS_RESUBMIT verdict — show it before
6142
- * asking for a correction. Null when the vendor named no reason, or the
6143
- * verdict is not a rejection.
6145
+ * asking for a correction — or on a REJECTED one with a linked
6146
+ * cardholder, why the rejection is final. Null when the vendor named no
6147
+ * reason, or the verdict is not a rejection.
6144
6148
  * */
6145
6149
  reject_reason?: string | null;
6146
6150
  }[];
@@ -6215,6 +6219,12 @@ export interface paths {
6215
6219
  * the person already has: the same document cannot be registered twice at the vendor, so
6216
6220
  * a fresh cardholder is NOT the way to retry.
6217
6221
  *
6222
+ * **Final rejection**: a rejection no corrected dossier answers — a forged document,
6223
+ * fraud, an attempt to bypass the liveness check, or a regulatory bar (age, region, a
6224
+ * duplicate applicant) — is final. The submit is refused with
6225
+ * `409 CARDHOLDER_REJECTION_FINAL`, and `error.details.reject_reason` carries the
6226
+ * vendor's reason; no card can be issued for this identity.
6227
+ *
6218
6228
  * **Idempotency**: while a review is running, or once the cardholder is live, another
6219
6229
  * submit returns `409 CARDHOLDER_NOT_DRAFT` rather than spending a second review.
6220
6230
  *
@@ -6275,7 +6285,7 @@ export interface paths {
6275
6285
  };
6276
6286
  content?: never;
6277
6287
  };
6278
- /** @description Cardholder is live at the vendor, or its review is still running. On a program that issues under the wallet's company: `WALLET_BUSINESS_NOT_ONBOARDED` (the wallet's business has not been registered with the card issuer) or `WALLET_BUSINESS_NOT_APPROVED` (its review is not approved yet). */
6288
+ /** @description Cardholder is live at the vendor, or its review is still running (`CARDHOLDER_NOT_DRAFT`). Its rejection is final and cannot be answered by a resubmit (`CARDHOLDER_REJECTION_FINAL`, `error.details.reject_reason`). On a program that issues under the wallet's company: `WALLET_BUSINESS_NOT_ONBOARDED` (the wallet's business has not been registered with the card issuer) or `WALLET_BUSINESS_NOT_APPROVED` (its review is not approved yet). */
6279
6289
  409: {
6280
6290
  headers: {
6281
6291
  [name: string]: unknown;
@@ -11418,7 +11428,8 @@ export interface paths {
11418
11428
  *
11419
11429
  * The same report (type, format and params) asked again while the first one is
11420
11430
  * still being generated returns that first report with 200 instead of starting
11421
- * another. Up to 3 reports of a wallet are generated at once.
11431
+ * another. The order of `card_ids` counts: the same cards in another order are
11432
+ * another report. Up to 3 reports of a wallet are generated at once.
11422
11433
  *
11423
11434
  */
11424
11435
  post: {
@@ -15881,7 +15892,15 @@ export interface paths {
15881
15892
  * @description Puts the wallet on the rail, the way compliance does from the panel: a rail whose vendor CORE onboards
15882
15893
  * itself is submitted here, any other goes through the KYC-admin service. A manual rail waits for
15883
15894
  * compliance (`WAITING_ON_REVIEW`); a universal rail is approved on the spot. An application the vendor
15884
- * sent back (`HOLD`, `SOFT_REJECT`) is resubmitted. No body.
15895
+ * sent back (`HOLD`, `SOFT_REJECT`) is resubmitted.
15896
+ *
15897
+ * Terms: show the rail's `terms_and_conditions` before the submission and send the ids the client ticked as
15898
+ * `accepted_terms`. Every active document of the rail must be among them, or nothing is submitted
15899
+ * (`400 TERMS_NOT_ACCEPTED`). The acceptance is recorded on the application at the time of the submission
15900
+ * (`wallet_rail.terms_confirmed`, the documents in `wallet_rail.terms_and_conditions`), and a vendor that takes
15901
+ * an acceptance date is sent the same time; an account the vendor already holds may keep the date it recorded
15902
+ * first. Without `accepted_terms` (or without a body, or `null`) the submission goes as before and the terms are
15903
+ * accepted later with `POST …/terms-and-conditions`.
15885
15904
  *
15886
15905
  * On the KYC forms flow CORE makes this submission itself for a rail the client sent a rail or multi
15887
15906
  * form for, once the form is accepted and the entity is `APPROVED`, when the form was sent by a wallet `admin` or `owner` and the wallet has no application
@@ -15908,7 +15927,16 @@ export interface paths {
15908
15927
  };
15909
15928
  cookie?: never;
15910
15929
  };
15911
- requestBody?: never;
15930
+ requestBody?: {
15931
+ content: {
15932
+ "application/json": {
15933
+ /** @description Ids of the rail's `terms_and_conditions` the client accepted with this submission. On a rail with
15934
+ * terms an empty list is a refusal (`400 TERMS_NOT_ACCEPTED`), not an absence of the field.
15935
+ * */
15936
+ accepted_terms?: string[] | null;
15937
+ };
15938
+ };
15939
+ };
15912
15940
  responses: {
15913
15941
  /** @description The rail after the submission */
15914
15942
  200: {
@@ -15919,14 +15947,16 @@ export interface paths {
15919
15947
  "application/json": components["schemas"]["WalletKycRailResponse"];
15920
15948
  };
15921
15949
  };
15922
- /** @description `VALIDATION_ERROR` — `rail_id` is not a UUID (a message only); `RAIL_NOT_AVAILABLE` — the rail has no
15923
- * onboarding implementation, or is a universal rail other than the tenant's default on a tenant without
15924
- * KYC; `RAIL_SUBMIT_UNAVAILABLE` — the rail takes no submissions; `RAIL_TYPE_MISMATCH` — the rail is of
15950
+ /** @description `VALIDATION_ERROR` — `rail_id` is not a UUID (a message only), or `accepted_terms` is not an array of uuids
15951
+ * (`details.issues`);
15952
+ * `RAIL_NOT_AVAILABLE` — the rail has no onboarding implementation, or is a universal rail other than the
15953
+ * tenant's default on a tenant without KYC; `RAIL_SUBMIT_UNAVAILABLE` — the rail takes no submissions; `RAIL_TYPE_MISMATCH` — the rail is of
15925
15954
  * the other entity type; `RAIL_SUBMISSION_REJECTED` — the onboarding behind the rail refused the
15926
15955
  * submission (the vendor's reason is logged, never returned); `RAIL_REQUIREMENTS_INCOMPLETE` — on a
15927
15956
  * tenant of the KYC forms flow, the KYC entity misses saved values of required fields of the rail's form
15928
15957
  * (a draft does not count): `details.fields` lists their keys, open
15929
- * `GET /frontend/kyc/entities/{entity_id}/forms?rails={rail_id}` and fill them
15958
+ * `GET /frontend/kyc/entities/{entity_id}/forms?rails={rail_id}` and fill them; `TERMS_NOT_ACCEPTED` —
15959
+ * `accepted_terms` misses an active terms document of the rail, nothing was submitted
15930
15960
  * */
15931
15961
  400: {
15932
15962
  headers: {
@@ -16421,7 +16451,7 @@ export interface paths {
16421
16451
  };
16422
16452
  /**
16423
16453
  * The form of an entity for a set of purposes
16424
- * @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. Access: the owner of the entity, or an owner / admin of a wallet it is linked to.
16454
+ * @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 no field is left to ask. The terms of the form's rails — a rail it names and the rail of each of its card programs — come with the form in `terms`, to be accepted with the submission (`accepted_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. Access: the owner of the entity, or an owner / admin of a wallet it is linked to.
16425
16455
  */
16426
16456
  get: {
16427
16457
  parameters: {
@@ -16497,7 +16527,7 @@ export interface paths {
16497
16527
  get?: never;
16498
16528
  /**
16499
16529
  * Save the draft of a form
16500
- * @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. Types are checked, rules and requiredness are not — except that owner shares over 100% in total and a value whose condition reads an empty required source are refused here too. Nothing is written to the KYC entity. The first draft of a business form moves the application to `PENDING`. The entity's owner, or an owner or admin of a linked wallet.
16530
+ * @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. Types are checked, rules and requiredness are not — except that owner shares over 100% in total and a value whose condition reads an empty required source are refused here too. Nothing is written to the KYC entity. The terms of the form's rails (`form.terms` of `GET …/forms`) are accepted with the submission only: a draft takes no `accepted_terms` (a key of that name is ignored, nothing about the terms is stored) and its answer carries no `terms`. The first draft of a business form moves the application to `PENDING`. The entity's owner, or an owner or admin of a linked wallet.
16501
16531
  */
16502
16532
  put: {
16503
16533
  parameters: {
@@ -16548,7 +16578,7 @@ export interface paths {
16548
16578
  "application/json": components["schemas"]["ErrorResponse"];
16549
16579
  };
16550
16580
  };
16551
- /** @description `FORM_LOCKED` — the form is read-only by the application status, or its last submission waits on the verification or the review; `FORM_OUTDATED` — `schema_version` is not the one the form has now, reload it (`GET …/forms`) and send again; `KYC_FORM_CONDITIONS_CYCLE` — the tenant's form settings show fields on conditions that read each other in a circle */
16581
+ /** @description `FORM_LOCKED` — the form is read-only by the application status, or its last submission waits on the verification or the review; `FORM_OUTDATED` — `schema_version` is not the one the form has now (its fields or the terms documents of its rails changed), reload it (`GET …/forms`) and send again; `KYC_FORM_CONDITIONS_CYCLE` — the tenant's form settings show fields on conditions that read each other in a circle */
16552
16582
  409: {
16553
16583
  headers: {
16554
16584
  [name: string]: unknown;
@@ -16762,7 +16792,7 @@ export interface paths {
16762
16792
  put?: never;
16763
16793
  /**
16764
16794
  * Send a form
16765
- * @description The form is the one `rails` and `programs` name. The full check of every open field (all errors in one `VALIDATION_ERROR`), 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 submission of a form at a time. A form over rails or programs that brings nothing new — no value and no file, every required field already saved in the entity (not just waiting in another submission under review) — is `applied` at once whatever the review mode: there is nothing for compliance to decide. A rail form does not change the application status. A card form is `auto` unless a profile of it says otherwise and never changes the application status. 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. Once a rail, card or multi form is accepted (`applied`, or `approved` by compliance) and the wallet's KYC is `APPROVED` — whichever comes second — when the form was sent by an owner or admin of the wallet (the role those routes ask for), CORE submits the wallet itself: to each rail of the form the wallet has no application on yet — only for a form of the wallet's own KYC entity, a member's form never puts the wallet on a rail — (as `POST /frontend/wallets/{wallet_id}/kyc-rails/{rail_id}` would; it then shows in `GET …/kyc-rails`), and to each program the member has no cardholder in yet (as `POST /frontend/issuing/cardholders` with `user_data_id` and its submit would). The latest form sent for a rail or program decides: returned, rejected or still in review, nothing is submitted. A submission CORE could not make — refused by the rail or the vendor, a program at its limit, a form sent by a member without that role — is left for the client to make with those routes, as before. The entity's owner, or an owner or admin of a linked wallet.
16795
+ * @description The form is the one `rails` and `programs` name. The full check of every open field (all errors in one `VALIDATION_ERROR`) and of the terms — a form with terms documents (`form.terms`) is sent only with every one of their ids in `accepted_terms` (`400 KYC_TERMS_NOT_ACCEPTED` otherwise, nothing written) — 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 submission of a form at a time. A form over rails or programs that brings nothing new — no value and no file, every required field already saved in the entity (not just waiting in another submission under review) — is `applied` at once whatever the review mode: there is nothing for compliance to decide. A rail form does not change the application status. A card form is `auto` unless a profile of it says otherwise and never changes the application status. 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. Once a rail, card or multi form is accepted (`applied`, or `approved` by compliance) and the wallet's KYC is `APPROVED` — whichever comes second — when the form was sent by an owner or admin of the wallet (the role those routes ask for), CORE submits the wallet itself: to each rail of the form the wallet has no application on yet — only for a form of the wallet's own KYC entity, a member's form never puts the wallet on a rail — (as `POST /frontend/wallets/{wallet_id}/kyc-rails/{rail_id}` would; it then shows in `GET …/kyc-rails`), and to each program the member has no cardholder in yet (as `POST /frontend/issuing/cardholders` with `user_data_id` and its submit would). The latest form sent for a rail or program decides: returned, rejected or still in review, nothing is submitted. A rail opened so, or opened before with its terms unconfirmed — a rail of the form, or the rail of one of its programs — gets its terms confirmed (`terms_confirmed: true`) at the time the form was sent, when the form accepted every terms document the application holds; terms changed since the form was sent are left for the client to confirm with `POST …/kyc-rails/{rail_id}/terms-and-conditions`. A submission CORE could not make — refused by the rail or the vendor, a program at its limit, a form sent by a member without that role — is left for the client to make with those routes, as before. The entity's owner, or an owner or admin of a linked wallet.
16766
16796
  */
16767
16797
  post: {
16768
16798
  parameters: {
@@ -16788,7 +16818,7 @@ export interface paths {
16788
16818
  };
16789
16819
  requestBody: {
16790
16820
  content: {
16791
- "application/json": components["schemas"]["KycFormsAnswersRequest"];
16821
+ "application/json": components["schemas"]["KycFormsSubmitRequest"];
16792
16822
  };
16793
16823
  };
16794
16824
  responses: {
@@ -16801,7 +16831,7 @@ export interface paths {
16801
16831
  "application/json": components["schemas"]["KycFormsFormResponse"];
16802
16832
  };
16803
16833
  };
16804
- 400: components["responses"]["KycFormsFieldErrors"];
16834
+ 400: components["responses"]["KycFormsSubmitErrors"];
16805
16835
  401: components["responses"]["UnauthorizedError"];
16806
16836
  403: components["responses"]["KycFormsAccessDenied"];
16807
16837
  /** @description `NOT_FOUND` — the entity does not exist or belongs to another tenant, or a rail / program of the query does not exist for the tenant */
@@ -16813,7 +16843,7 @@ export interface paths {
16813
16843
  "application/json": components["schemas"]["ErrorResponse"];
16814
16844
  };
16815
16845
  };
16816
- /** @description `FORM_LOCKED` — the form is read-only by the application status, or its last submission waits on the verification or the review; `FORM_OUTDATED` — `schema_version` is not the one the form has now, reload it (`GET …/forms`) and send again; `OPERATION_IN_PROGRESS` — a submission of this form is already running; `KYC_FORM_CONDITIONS_CYCLE` — the tenant's form settings show fields on conditions that read each other in a circle */
16846
+ /** @description `FORM_LOCKED` — the form is read-only by the application status, or its last submission waits on the verification or the review; `FORM_OUTDATED` — `schema_version` is not the one the form has now (its fields or the terms documents of its rails changed), reload it (`GET …/forms`) and send again; `OPERATION_IN_PROGRESS` — a submission of this form is already running; `KYC_FORM_CONDITIONS_CYCLE` — the tenant's form settings show fields on conditions that read each other in a circle */
16817
16847
  409: {
16818
16848
  headers: {
16819
16849
  [name: string]: unknown;
@@ -19303,7 +19333,7 @@ export interface components {
19303
19333
  */
19304
19334
  type: "individual" | "business" | "universal";
19305
19335
  /**
19306
- * @description KYC verification status. A refusal is one of three values: `DECLINED`, `REJECT` or `SOFT_REJECT`. Only `APPROVED` (full access) and `HOLD` (read-only) open the wallet. `OFFBOARDED` — final: the work with this company or person is over; `EXPIRED` — the verification lapsed and the client passes it again.
19336
+ * @description KYC verification status. A refusal is one of three values: `DECLINED`, `REJECT` or `SOFT_REJECT`. Only `APPROVED` (full access) and `HOLD` (read-only) open the wallet. `OFFBOARDED` — final: the work with this company or person is over; `EXPIRED` — no activity on the application for over three months; a check passed on it brings it back.
19307
19337
  * @enum {string}
19308
19338
  */
19309
19339
  status: "APPROVED" | "DECLINED" | "PENDING" | "PROCESSING" | "HOLD" | "NEEDS_ATTENTION" | "DOUBLE" | "SOFT_REJECT" | "REJECT" | "UNVERIFIED" | "WAITING_ON_UBOS" | "WAITING_ON_REVIEW" | "EXPIRED" | "OFFBOARDED";
@@ -19315,6 +19345,11 @@ export interface components {
19315
19345
  };
19316
19346
  /** @description A terms-and-conditions document of a KYC rail. */
19317
19347
  WalletKycRailTerms: {
19348
+ /**
19349
+ * Format: uuid
19350
+ * @description Send it in `accepted_terms` of `POST /frontend/wallets/{wallet_id}/kyc-rails/{rail_id}` once the client ticked the document.
19351
+ */
19352
+ id: string;
19318
19353
  title: string;
19319
19354
  description: string | null;
19320
19355
  link: string | null;
@@ -20135,7 +20170,7 @@ export interface components {
20135
20170
  source: "DEBIT_CARD";
20136
20171
  from: components["schemas"]["ReportPeriodFrom"];
20137
20172
  to: components["schemas"]["ReportPeriodTo"];
20138
- /** @description Cards of the wallet (the id the card endpoints take), in the order their rows follow one another. A card of another wallet → 404 REPORT_SUBJECT_NOT_FOUND. */
20173
+ /** @description Cards of the wallet (the id the card endpoints take), in the order their rows follow one another; the order is kept as asked and a repeated id is dropped (the first stays). The same cards in another order are another report. A card of another wallet → 404 REPORT_SUBJECT_NOT_FOUND. */
20139
20174
  card_ids: string[];
20140
20175
  };
20141
20176
  /** @description Transaction statement → Account cards — the transactions of a sub-account (card program) of the wallet. Formats CSV, XLSX. Period up to 100 days. */
@@ -20199,7 +20234,7 @@ export interface components {
20199
20234
  status?: "PENDING" | "GENERATING" | "READY" | "FAILED";
20200
20235
  params?: components["schemas"]["WalletReportParams"];
20201
20236
  /**
20202
- * @description TIMEOUT — the attempt was still generating 30 minutes after it was queued; it is failed on the wallet's next report request.
20237
+ * @description GENERATION_ERROR — the run failed, or the report has nothing to show (e.g. Account details of an account with no deposit details); TIMEOUT — the attempt was still generating 30 minutes after it was queued; it is failed on the wallet's next report request.
20203
20238
  * @enum {string|null}
20204
20239
  */
20205
20240
  failure_code?: "GENERATION_ERROR" | "QUEUE_ERROR" | "TIMEOUT" | null;
@@ -20325,21 +20360,27 @@ export interface components {
20325
20360
  success: boolean;
20326
20361
  data: components["schemas"]["WalletKycRail"];
20327
20362
  };
20328
- /** @description The error envelope of a rail submission: `ErrorResponse`, with `details` only on `RAIL_REQUIREMENTS_INCOMPLETE`. */
20363
+ /** @description The error envelope of a rail submission: `ErrorResponse`, with `details` only on `RAIL_REQUIREMENTS_INCOMPLETE` (`fields`) and on a `VALIDATION_ERROR` of `accepted_terms` (`issues`). */
20329
20364
  WalletKycRailSubmitErrorResponse: components["schemas"]["ErrorResponse"] & {
20330
20365
  error?: {
20331
- /** @description `RAIL_REQUIREMENTS_INCOMPLETE` only (absent on every other code): `fields` lists the keys of the required fields of the rail's form with nothing saved in the KYC entity yet, in form order — the `key` of the fields `GET /frontend/kyc/entities/{entity_id}/forms?rails={rail_id}` answers (`address.city`, `document.proof_of_address`, `beneficial_owners`, …). Open that form and highlight them; a draft or a submission still in review does not count until it is applied. */
20366
+ /** @description Absent on every other code. `RAIL_REQUIREMENTS_INCOMPLETE`: `fields` lists the keys of the required fields of the rail's form with nothing saved in the KYC entity yet, in form order — the `key` of the fields `GET /frontend/kyc/entities/{entity_id}/forms?rails={rail_id}` answers (`address.city`, `document.proof_of_address`, `beneficial_owners`, …). Open that form and highlight them; a draft or a submission still in review does not count until it is applied. `VALIDATION_ERROR` of `accepted_terms`: `issues` names each problem (`field`, e.g. `accepted_terms.0`, and `message`); a bad `rail_id` carries a message only. */
20332
20367
  details?: {
20333
20368
  /** @example [
20334
20369
  * "expected_monthly_volume",
20335
20370
  * "document.proof_of_address"
20336
20371
  * ] */
20337
- fields: string[];
20372
+ fields?: string[];
20373
+ issues?: {
20374
+ /** @example accepted_terms.0 */
20375
+ field?: string;
20376
+ /** @example accepted_terms must hold terms ids (UUID) */
20377
+ message?: string;
20378
+ }[];
20338
20379
  } | null;
20339
20380
  };
20340
20381
  };
20341
20382
  /**
20342
- * @description Raw application status of the KYC entity (`kyc_entity.status`) — the same value the wallet shows as `kyc_info.status` (`WalletKycInfo`); a rail application (`wallet_rail.status`) has its own status of the same set. Build screens by the overview `stage`, not by this value: a status can be added without a release. `PROCESSING` is not set by the forms flow — a vendor sync of the old flow leaves it on an entity — and the overview answers `stage: unknown` for it, as for any status it does not know. `EXPIRED` (a lapsed verification; nothing sets it yet) and `OFFBOARDED` (compliance ended the relationship; final) are set in CORE, never by the identity provider, and no form or provider event moves them — but one: an `EXPIRED` application whose applicant passes the identity check again goes on to its owners (`WAITING_ON_UBOS`) or to compliance (`WAITING_ON_REVIEW`).
20383
+ * @description Raw application status of the KYC entity (`kyc_entity.status`) — the same value the wallet shows as `kyc_info.status` (`WalletKycInfo`); a rail application (`wallet_rail.status`) has its own status of the same set. Build screens by the overview `stage`, not by this value: a status can be added without a release. `PROCESSING` is not set by the forms flow — a vendor sync of the old flow leaves it on an entity — and the overview answers `stage: unknown` for it, as for any status it does not know. `EXPIRED` (no activity on the application for over three months) and `OFFBOARDED` (compliance ended the relationship; final) are set in CORE, never by the identity provider. No form moves either, and no provider event moves `OFFBOARDED`. An `EXPIRED` application comes back once its verification is heard from again — a person's when their identity check passes, a business's on any check outcome of the filler or an owner while the filler's own check stands passed — and goes on to its owners (`WAITING_ON_UBOS`) or to compliance (`WAITING_ON_REVIEW`), never approved by itself.
20343
20384
  * @enum {string}
20344
20385
  */
20345
20386
  KycFormsEntityStatus: "UNVERIFIED" | "PENDING" | "PROCESSING" | "WAITING_ON_REVIEW" | "WAITING_ON_UBOS" | "NEEDS_ATTENTION" | "HOLD" | "APPROVED" | "SOFT_REJECT" | "REJECT" | "DECLINED" | "DOUBLE" | "EXPIRED" | "OFFBOARDED";
@@ -20594,6 +20635,23 @@ export interface components {
20594
20635
  add_label: string;
20595
20636
  };
20596
20637
  };
20638
+ /** @description The terms of one rail of the form: a rail the form names, or the rail of one of its card programs — one group per rail, the programs that go through it listed with it. Draw one checkbox per group that accepts all of its `items`; send their ids in `accepted_terms` of `POST …/forms/submit`. */
20639
+ KycFormsTerms: {
20640
+ /** Format: uuid */
20641
+ rail_id: string;
20642
+ /** @description The card programs of the form that go through this rail; empty when only the rail itself is named. */
20643
+ program_ids: string[];
20644
+ /** @description The rail's active terms documents in display order; empty when the rail has none — nothing to accept. */
20645
+ items: {
20646
+ /** Format: uuid */
20647
+ id: string;
20648
+ /** @example Cardholder Agreement */
20649
+ title: string;
20650
+ description: string | null;
20651
+ /** @example https://example.com/terms.pdf */
20652
+ link: string | null;
20653
+ }[];
20654
+ };
20597
20655
  KycFormsForm: {
20598
20656
  /**
20599
20657
  * @description What the form is for: the base form, a rail, a card program (`card`), or one form over several rails and programs (`multi`).
@@ -20617,7 +20675,7 @@ export interface components {
20617
20675
  */
20618
20676
  locale: string;
20619
20677
  /**
20620
- * @description Hash of the form composition (keys, requiredness, conditions, list item fields; not the texts); echo it back in the draft and the submission. It can change between the load and the send: `409 FORM_OUTDATED`.
20678
+ * @description Hash of the form composition (keys, requiredness, conditions, list item fields, the ids of the terms documents in `terms`; not the texts); echo it back in the draft and the submission. It can change between the load and the send: `409 FORM_OUTDATED`.
20621
20679
  * @example b3f1c2a9
20622
20680
  */
20623
20681
  schema_version: string;
@@ -20646,6 +20704,31 @@ export interface components {
20646
20704
  description: string | null;
20647
20705
  fields: components["schemas"]["KycFormsField"][];
20648
20706
  }[];
20707
+ /**
20708
+ * @description The terms the client accepts with the form, one group per rail of the form: the rails named first, then the rail of each card program. Empty for the base form; a program without a rail adds none. The documents are those in force now: a change after the load answers the submission `409 FORM_OUTDATED`.
20709
+ * @example [
20710
+ * {
20711
+ * "rail_id": "a38b9a0c-5d1e-4f2a-8b3c-4d5e6f708192",
20712
+ * "program_ids": [
20713
+ * "d94ef320-1a2b-4c3d-8e4f-5a6b7c8d9e0f"
20714
+ * ],
20715
+ * "items": [
20716
+ * {
20717
+ * "id": "0c1d2e3f-4a5b-4c6d-8e7f-90a1b2c3d4e5",
20718
+ * "title": "Cardholder Agreement",
20719
+ * "description": null,
20720
+ * "link": "https://example.com/terms.pdf"
20721
+ * }
20722
+ * ]
20723
+ * },
20724
+ * {
20725
+ * "rail_id": "c1d7fac1-2b3c-4d5e-9f60-718293a4b5c6",
20726
+ * "program_ids": [],
20727
+ * "items": []
20728
+ * }
20729
+ * ]
20730
+ */
20731
+ terms: components["schemas"]["KycFormsTerms"][];
20649
20732
  };
20650
20733
  KycFormsFormResponse: {
20651
20734
  /** @example true */
@@ -20691,6 +20774,16 @@ export interface components {
20691
20774
  [key: string]: components["schemas"]["KycFormsAnswerValue"];
20692
20775
  };
20693
20776
  };
20777
+ KycFormsSubmitRequest: components["schemas"]["KycFormsAnswersRequest"] & {
20778
+ /**
20779
+ * @description The ids of every terms document of the form (`form.terms[].items[].id`) — the client ticked the checkbox of each group. Required in full when the form has any: one left out answers `400 KYC_TERMS_NOT_ACCEPTED`, an id that is not a uuid or not of this form `400 VALIDATION_ERROR`. A form without terms documents is sent without it. The terms are checked after the fields: while a field is wrong, only the `VALIDATION_ERROR` comes back.
20780
+ * @default []
20781
+ * @example [
20782
+ * "0c1d2e3f-4a5b-4c6d-8e7f-90a1b2c3d4e5"
20783
+ * ]
20784
+ */
20785
+ accepted_terms: string[];
20786
+ };
20694
20787
  KycFormsDraftSaved: {
20695
20788
  /** @example true */
20696
20789
  success: boolean;
@@ -20757,7 +20850,7 @@ export interface components {
20757
20850
  entity_type: "individual" | "business";
20758
20851
  status: components["schemas"]["KycFormsEntityStatus"];
20759
20852
  /**
20760
- * @description Build the screen by this, not by `status`. `not_required` — the tenant asks nothing of this client type (`base_form` is null); `not_started` — the base form was not started; `incomplete` — a draft exists; `action_required` — the client's move: pass the identity check (`next_step: verification`), or, for a business, get the owners through theirs (`next_step: owners`); `in_review` — the identity provider or compliance is looking; `resubmit` — returned by compliance, the form is open again with `submission.comment`; `on_hold` — frozen by compliance; `verified` — approved; `expired` — the verification lapsed: the applicant passes the identity check again (`next_step: verification`), then compliance looks again; `rejected` — refused, the form is read-only; `offboarded` — compliance ended the relationship, final; `unknown` — a status this contract does not know. The stage of each `status`: `APPROVED` → `verified`; `REJECT`, `DECLINED`, `DOUBLE` → `rejected`; `OFFBOARDED` → `offboarded`; `EXPIRED` → `expired`; `HOLD` → `on_hold`; `WAITING_ON_REVIEW` → `in_review`; `NEEDS_ATTENTION` → `resubmit`; `WAITING_ON_UBOS` → `action_required` while an owner other than the filler's row has a check to start, finish or redo (`next_step: owners`), else `in_review`; `UNVERIFIED`, `PENDING`, `SOFT_REJECT` → by the base form and the identity check: `not_required` (no base form), `not_started`, `incomplete` (a draft), `action_required` (the check is the move), `in_review` (sent, with compliance or the provider), `resubmit` (the latest submission was returned) — the forms flow never sets `SOFT_REJECT`, one left by the old flow shows the screen of its form like `PENDING`; `PROCESSING` → `unknown` (the forms flow never sets it, an old-flow vendor sync may leave it).
20853
+ * @description Build the screen by this, not by `status`. `not_required` — the tenant asks nothing of this client type (`base_form` is null); `not_started` — the base form was not started; `incomplete` — a draft exists; `action_required` — the client's move: pass the identity check (`next_step: verification`), or, for a business, get the owners through theirs (`next_step: owners`); `in_review` — the identity provider or compliance is looking; `resubmit` — returned by compliance, the form is open again with `submission.comment`; `on_hold` — frozen by compliance; `verified` — approved; `expired` — no activity on the application for over three months: a passed identity check brings it back (`next_step: verification`), then compliance looks again; `rejected` — refused, the form is read-only; `offboarded` — compliance ended the relationship, final; `unknown` — a status this contract does not know. The stage of each `status`: `APPROVED` → `verified`; `REJECT`, `DECLINED`, `DOUBLE` → `rejected`; `OFFBOARDED` → `offboarded`; `EXPIRED` → `expired`; `HOLD` → `on_hold`; `WAITING_ON_REVIEW` → `in_review`; `NEEDS_ATTENTION` → `resubmit`; `WAITING_ON_UBOS` → `action_required` while an owner other than the filler's row has a check to start, finish or redo (`next_step: owners`), else `in_review`; `UNVERIFIED`, `PENDING`, `SOFT_REJECT` → by the base form and the identity check: `not_required` (no base form), `not_started`, `incomplete` (a draft), `action_required` (the check is the move), `in_review` (sent, with compliance or the provider), `resubmit` (the latest submission was returned) — the forms flow never sets `SOFT_REJECT`, one left by the old flow shows the screen of its form like `PENDING`; `PROCESSING` → `unknown` (the forms flow never sets it, an old-flow vendor sync may leave it).
20761
20854
  * @enum {string}
20762
20855
  */
20763
20856
  stage: "not_required" | "not_started" | "incomplete" | "action_required" | "in_review" | "resubmit" | "on_hold" | "verified" | "expired" | "rejected" | "offboarded" | "unknown";
@@ -20998,11 +21091,18 @@ export interface components {
20998
21091
  }[];
20999
21092
  };
21000
21093
  };
21001
- /** @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. */
21094
+ /** @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. `KYC_TERMS_NOT_ACCEPTED`: `terms` — and no `fields`. */
21002
21095
  KycFormsErrorDetails: {
21003
- fields: {
21096
+ fields?: {
21004
21097
  [key: string]: string[];
21005
21098
  } | string[];
21099
+ /**
21100
+ * @description The ids of the terms documents of the form left out of `accepted_terms`.
21101
+ * @example [
21102
+ * "0c1d2e3f-4a5b-4c6d-8e7f-90a1b2c3d4e5"
21103
+ * ]
21104
+ */
21105
+ terms?: string[];
21006
21106
  };
21007
21107
  /** @description The error envelope of the KYC forms: `ErrorResponse` with the `details` of the field errors spelled out. */
21008
21108
  KycFormsErrorResponse: components["schemas"]["ErrorResponse"] & {
@@ -21098,6 +21198,15 @@ export interface components {
21098
21198
  "application/json": components["schemas"]["KycFormsErrorResponse"];
21099
21199
  };
21100
21200
  };
21201
+ /** @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`; 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`), or a message only for a malformed body (`schema_version` missing or longer than 64, `values` not an object, `accepted_terms` not a list of at most 200 uuids), an id in `accepted_terms` that is not a terms document of this form, and a path id that is not a uuid; `KYC_TERMS_NOT_ACCEPTED` — `accepted_terms` leaves out a terms document of the form, `details.terms` lists the ids left out, nothing is written; `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_FORM_WALLET_NOT_LINKED` — `wallet_id` of a form over rails is not a wallet of this entity; `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 */
21202
+ KycFormsSubmitErrors: {
21203
+ headers: {
21204
+ [name: string]: unknown;
21205
+ };
21206
+ content: {
21207
+ "application/json": components["schemas"]["KycFormsErrorResponse"];
21208
+ };
21209
+ };
21101
21210
  /** @description `KYC_FORM_CONDITIONS_CYCLE` — the tenant's form settings show fields on conditions that read each other in a circle (`details.fields` lists the keys); nothing the client can fix, report it to support */
21102
21211
  KycFormsConditionsCycle: {
21103
21212
  headers: {
@@ -6930,6 +6930,11 @@ export interface paths {
6930
6930
  * the same document cannot be registered twice at the vendor, so a fresh cardholder is
6931
6931
  * NOT the way to retry. While a review is running, another submit is refused with `409`.
6932
6932
  *
6933
+ * A rejection no corrected dossier answers — a forged document, fraud, an attempt to
6934
+ * bypass the liveness check, or a regulatory bar (age, region, a duplicate applicant) —
6935
+ * is final: the submit is refused with `409 CARDHOLDER_REJECTION_FINAL`, and
6936
+ * `error.details.reject_reason` carries the vendor's reason.
6937
+ *
6933
6938
  */
6934
6939
  post: {
6935
6940
  parameters: {
@@ -6971,7 +6976,7 @@ export interface paths {
6971
6976
  };
6972
6977
  content?: never;
6973
6978
  };
6974
- /** @description Cardholder is live at the vendor, or its review is still running. On a program that issues under the wallet's company: `WALLET_BUSINESS_NOT_ONBOARDED` (the wallet's business has not been registered with the card issuer) or `WALLET_BUSINESS_NOT_APPROVED` (its review is not approved yet). */
6979
+ /** @description Cardholder is live at the vendor, or its review is still running (`CARDHOLDER_NOT_DRAFT`). Its rejection is final and cannot be answered by a resubmit (`CARDHOLDER_REJECTION_FINAL`, `error.details.reject_reason`). On a program that issues under the wallet's company: `WALLET_BUSINESS_NOT_ONBOARDED` (the wallet's business has not been registered with the card issuer) or `WALLET_BUSINESS_NOT_APPROVED` (its review is not approved yet). */
6975
6980
  409: {
6976
6981
  headers: {
6977
6982
  [name: string]: unknown;
@@ -873,7 +873,7 @@ export declare namespace API {
873
873
  type Response = RailRoot['get']['responses'][200]['content']['application/json'];
874
874
  }
875
875
  export namespace Submit {
876
- type Request = RailRoot['post']['parameters']['path'];
876
+ type Request = RailRoot['post']['parameters']['path'] & NonNullable<NonNullable<RailRoot['post']['requestBody']>['content']['application/json']>;
877
877
  type Response = RailRoot['post']['responses'][200]['content']['application/json'];
878
878
  type ErrorDetails = NonNullable<NonNullable<componentsV1Frontend['schemas']['WalletKycRailSubmitErrorResponse']['error']>['details']>;
879
879
  }
@@ -919,6 +919,8 @@ export declare namespace API {
919
919
  export type Form = Schemas['KycFormsForm'];
920
920
  export type FormScope = Form['scope'];
921
921
  export type FormSection = Form['sections'][number];
922
+ export type Terms = Schemas['KycFormsTerms'];
923
+ export type TermsItem = Terms['items'][number];
922
924
  export type FormState = Schemas['KycFormsFormState'];
923
925
  export type Field = Schemas['KycFormsField'];
924
926
  export type FieldType = Field['type'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "squarefi-bff-api-module",
3
- "version": "1.36.96",
3
+ "version": "1.36.98",
4
4
  "description": "Squarefi BFF API client module",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",