@kypacs/sdk 1.1.2 → 1.3.0

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.
@@ -689,7 +689,7 @@ export type paths = {
689
689
  put?: never;
690
690
  /**
691
691
  * Approve identified officers and resume screening
692
- * @description Resumes a KYB verification paused at OFFICERS_IDENTIFIED (when the tenant has enabled requireOfficerReviewBeforeScreening). Runs sanctions screening for the entity, officers, and UBOs, then finalises the decision.
692
+ * @description Resumes a KYB verification paused at OFFICERS_IDENTIFIED (when the tenant has enabled requireOfficerReviewBeforeScreening). Runs sanctions screening for the entity, officers, and UBOs, then finalises the decision. Returns the updated BusinessDetail so SDK consumers can read the post-approval state without a follow-up GET.
693
693
  */
694
694
  post: operations["BusinessController_approveOfficers"];
695
695
  delete?: never;
@@ -698,6 +698,26 @@ export type paths = {
698
698
  patch?: never;
699
699
  trace?: never;
700
700
  };
701
+ "/api/v1/businesses/{id}/officers/{officerId}/link-verification": {
702
+ parameters: {
703
+ query?: never;
704
+ header?: never;
705
+ path?: never;
706
+ cookie?: never;
707
+ };
708
+ get?: never;
709
+ put?: never;
710
+ /**
711
+ * Link an existing APPROVED individual KYC to a business officer
712
+ * @description Connects an already-completed individual verification to a `BusinessOfficer`. Use this when the applicant completed personal KYC before starting the business application; for the inverse flow (officer who has NOT yet completed KYC), use `verifyUbo`. Re-runs sanctions screening using the *decrypted* full name from the linked verification — registry names and KYC names often differ in formatting, and screening on the KYC name yields a more accurate AML match. Rejects if the officer is already linked.
713
+ */
714
+ post: operations["BusinessController_linkOfficerVerification"];
715
+ delete?: never;
716
+ options?: never;
717
+ head?: never;
718
+ patch?: never;
719
+ trace?: never;
720
+ };
701
721
  "/api/v1/businesses/{id}/refresh-registry": {
702
722
  parameters: {
703
723
  query?: never;
@@ -818,6 +838,46 @@ export type paths = {
818
838
  patch?: never;
819
839
  trace?: never;
820
840
  };
841
+ "/api/v1/businesses/{id}/ubos/{uboId}/link-verification": {
842
+ parameters: {
843
+ query?: never;
844
+ header?: never;
845
+ path?: never;
846
+ cookie?: never;
847
+ };
848
+ get?: never;
849
+ put?: never;
850
+ /**
851
+ * Link an existing APPROVED individual KYC to a beneficial owner
852
+ * @description Same as `linkOfficerVerification` but for a `BeneficialOwner`. Rejects corporate UBOs (`ownerType: COMPANY`) — corporate UBOs need chain-of-ownership investigation, not a personal KYC link.
853
+ */
854
+ post: operations["BusinessController_linkUboVerification"];
855
+ delete?: never;
856
+ options?: never;
857
+ head?: never;
858
+ patch?: never;
859
+ trace?: never;
860
+ };
861
+ "/api/v1/businesses/lookup-officers": {
862
+ parameters: {
863
+ query?: never;
864
+ header?: never;
865
+ path?: never;
866
+ cookie?: never;
867
+ };
868
+ get?: never;
869
+ put?: never;
870
+ /**
871
+ * Look up officer hints for a registered business (no entity created)
872
+ * @description Returns trimmed officer hints from the registry without creating a `BusinessEntity` and without consuming KYB quota. Designed for "which officer am I?" pickers in multi-step KYB intake wizards. Rate-limited at 100 requests/hour per user (the endpoint returns officer PII, so this throttles abuse). Returns `{ officers: [] }` for jurisdictions without an officer-capable registry adapter.
873
+ */
874
+ post: operations["BusinessController_lookupOfficers"];
875
+ delete?: never;
876
+ options?: never;
877
+ head?: never;
878
+ patch?: never;
879
+ trace?: never;
880
+ };
821
881
  "/api/v1/businesses/search": {
822
882
  parameters: {
823
883
  query?: never;
@@ -1246,6 +1306,66 @@ export type paths = {
1246
1306
  patch?: never;
1247
1307
  trace?: never;
1248
1308
  };
1309
+ "/api/v1/documents/attach": {
1310
+ parameters: {
1311
+ query?: never;
1312
+ header?: never;
1313
+ path?: never;
1314
+ cookie?: never;
1315
+ };
1316
+ get?: never;
1317
+ put?: never;
1318
+ /**
1319
+ * Attach a CLEAN pre-staged document to a verification
1320
+ * @description Copies the pre-staged storage object from `pre-stage/...` to the verification prefix (`{verificationId}/...`), creates a Document row in CLEAN status (already scanned), and marks the pre-stage row as attached so the cleanup job leaves it alone. The pre-stage must be CLEAN (scanning succeeded), not expired, and owned by the same tenant as the verification. Verification must be in PENDING or DOCUMENT_UPLOADED.
1321
+ */
1322
+ post: operations["DocumentController_attach"];
1323
+ delete?: never;
1324
+ options?: never;
1325
+ head?: never;
1326
+ patch?: never;
1327
+ trace?: never;
1328
+ };
1329
+ "/api/v1/documents/pre-stage": {
1330
+ parameters: {
1331
+ query?: never;
1332
+ header?: never;
1333
+ path?: never;
1334
+ cookie?: never;
1335
+ };
1336
+ get?: never;
1337
+ put?: never;
1338
+ /**
1339
+ * Generate a pre-signed upload URL for a document BEFORE a verification exists
1340
+ * @description Used by multi-step KYB intake wizards that collect documents and officer selections locally and commit on submit. The returned `preStageId` is the capability token: after PUTting the file to `uploadUrl`, call `/pre-stage/:preStageId/confirm` to virus-scan, then `/attach` to attach it to a verification. Pre-staged documents expire after 4 hours.
1341
+ */
1342
+ post: operations["DocumentController_preStageUpload"];
1343
+ delete?: never;
1344
+ options?: never;
1345
+ head?: never;
1346
+ patch?: never;
1347
+ trace?: never;
1348
+ };
1349
+ "/api/v1/documents/pre-stage/{preStageId}/confirm": {
1350
+ parameters: {
1351
+ query?: never;
1352
+ header?: never;
1353
+ path?: never;
1354
+ cookie?: never;
1355
+ };
1356
+ get?: never;
1357
+ put?: never;
1358
+ /**
1359
+ * Confirm a pre-staged upload completed; enqueue virus scan
1360
+ * @description Verifies the bytes exist in storage, transitions the pre-stage row from UPLOADED to SCANNING, and enqueues a virus-scan job. Call after the client PUTs to the pre-signed URL returned by `/pre-stage`. Tenant scoping is re-checked here — a leaked preStageId cannot be confirmed from another tenant's context (returns 404).
1361
+ */
1362
+ post: operations["DocumentController_confirmPreStage"];
1363
+ delete?: never;
1364
+ options?: never;
1365
+ head?: never;
1366
+ patch?: never;
1367
+ trace?: never;
1368
+ };
1249
1369
  "/api/v1/documents/supported-countries": {
1250
1370
  parameters: {
1251
1371
  query?: never;
@@ -3577,6 +3697,18 @@ export type components = {
3577
3697
  */
3578
3698
  assigneeId: string;
3579
3699
  };
3700
+ AttachPreStagedDocumentSwaggerDto: {
3701
+ /**
3702
+ * Format: uuid
3703
+ * @description Pre-stage UUID returned by /documents/pre-stage
3704
+ */
3705
+ preStageId: string;
3706
+ /**
3707
+ * Format: uuid
3708
+ * @description Target verification UUID
3709
+ */
3710
+ verificationId: string;
3711
+ };
3580
3712
  AuditLogPaginatedResponseDto: {
3581
3713
  data: components["schemas"]["AuditLogRecordDto"][];
3582
3714
  hasMore: boolean;
@@ -5417,6 +5549,13 @@ export type components = {
5417
5549
  name: string;
5418
5550
  ruleCount: number;
5419
5551
  };
5552
+ LinkVerificationSwaggerDto: {
5553
+ /**
5554
+ * Format: uuid
5555
+ * @description UUID of an existing INDIVIDUAL verification in APPROVED status to link.
5556
+ */
5557
+ verificationId: string;
5558
+ };
5420
5559
  LogoutDto: {
5421
5560
  /**
5422
5561
  * @description Refresh token to revoke, effectively logging the user out
@@ -5424,6 +5563,22 @@ export type components = {
5424
5563
  */
5425
5564
  refresh_token: string;
5426
5565
  };
5566
+ LookupOfficersResponseDto: {
5567
+ officers: components["schemas"]["OfficerHintDto"][];
5568
+ };
5569
+ LookupOfficersSwaggerDto: {
5570
+ /**
5571
+ * @description Jurisdiction ISO country code
5572
+ * @example NZ
5573
+ * @enum {string}
5574
+ */
5575
+ jurisdiction: "NZ" | "AU" | "AS" | "CK" | "FJ" | "KI" | "NR" | "NU" | "PG" | "SB" | "TK" | "TO" | "TV" | "VU" | "WS";
5576
+ /**
5577
+ * @description Registration number (NZBN, NZ Company Number, ABN, or ACN)
5578
+ * @example 9429041910672
5579
+ */
5580
+ registrationNumber: string;
5581
+ };
5427
5582
  MonitoringAlertResponseDto: {
5428
5583
  /** Format: date-time */
5429
5584
  acknowledgedAt: Record<string, never> | null;
@@ -5478,6 +5633,19 @@ export type components = {
5478
5633
  /** @enum {string} */
5479
5634
  status: "LICENSED" | "NOT_FOUND" | "NOT_APPLICABLE";
5480
5635
  };
5636
+ OfficerHintDto: {
5637
+ /** Format: date */
5638
+ appointmentDate: Record<string, never> | null;
5639
+ /** @description Full name as recorded by the registry */
5640
+ fullName: string;
5641
+ /** @enum {string} */
5642
+ role: "DIRECTOR" | "SHAREHOLDER" | "SECRETARY" | "OTHER";
5643
+ /**
5644
+ * @description Whether the officer is currently active or has ceased.
5645
+ * @enum {string}
5646
+ */
5647
+ state: "current" | "historical";
5648
+ };
5481
5649
  OwnershipNodeDto: {
5482
5650
  /** @description Recursive child ownership nodes */
5483
5651
  children: components["schemas"]["OwnershipNodeDto"][];
@@ -5640,6 +5808,61 @@ export type components = {
5640
5808
  month: string;
5641
5809
  rejectedCount: number;
5642
5810
  };
5811
+ PreStagedDocumentResponseDto: {
5812
+ /**
5813
+ * Format: uuid
5814
+ * @description If the pre-stage has been attached, the resulting Document UUID
5815
+ */
5816
+ attachedDocumentId: Record<string, never> | null;
5817
+ /** Format: date-time */
5818
+ createdAt: string;
5819
+ /** Format: date-time */
5820
+ expiresAt: string;
5821
+ fileName: string;
5822
+ /** @description Size in bytes */
5823
+ fileSize: number;
5824
+ /** Format: uuid */
5825
+ id: string;
5826
+ mimeType: string;
5827
+ /** @enum {string} */
5828
+ status: "UPLOADED" | "SCANNING" | "CLEAN" | "INFECTED" | "PROCESSING" | "PROCESSED" | "FAILED";
5829
+ /** Format: uuid */
5830
+ tenantId: string;
5831
+ /** @enum {string} */
5832
+ type: "PASSPORT" | "DRIVERS_LICENCE" | "NATIONAL_ID" | "BIRTH_CERTIFICATE" | "UTILITY_BILL" | "BANK_STATEMENT" | "COMPANY_REGISTRATION" | "SELFIE" | "OTHER";
5833
+ };
5834
+ PreStageUploadSwaggerDto: {
5835
+ /**
5836
+ * @description MIME type
5837
+ * @enum {string}
5838
+ */
5839
+ contentType: "image/jpeg" | "image/png" | "image/webp" | "application/pdf";
5840
+ /** @description Original file name */
5841
+ fileName: string;
5842
+ /** @description Expected file size in bytes (max 20MB) */
5843
+ fileSize: number;
5844
+ /**
5845
+ * @description Document type
5846
+ * @enum {string}
5847
+ */
5848
+ type: "PASSPORT" | "DRIVERS_LICENCE" | "NATIONAL_ID" | "BIRTH_CERTIFICATE" | "UTILITY_BILL" | "BANK_STATEMENT" | "COMPANY_REGISTRATION" | "SELFIE" | "OTHER";
5849
+ };
5850
+ PreStageUploadUrlResponseDto: {
5851
+ /**
5852
+ * Format: date-time
5853
+ * @description When the pre-signed URL expires
5854
+ */
5855
+ expiresAt: string;
5856
+ /** @description Internal storage key under the pre-stage/ prefix */
5857
+ key: string;
5858
+ /**
5859
+ * Format: uuid
5860
+ * @description New pre-stage UUID — pass back to /documents/pre-stage/:preStageId/confirm
5861
+ */
5862
+ preStageId: string;
5863
+ /** @description Pre-signed SeaweedFS URL the client PUTs the file to */
5864
+ uploadUrl: string;
5865
+ };
5643
5866
  RefreshTokenDto: {
5644
5867
  /**
5645
5868
  * @description Refresh token obtained from a previous token exchange or refresh
@@ -8641,12 +8864,14 @@ export interface operations {
8641
8864
  };
8642
8865
  requestBody?: never;
8643
8866
  responses: {
8644
- /** @description Officers approved; screening + decision complete */
8867
+ /** @description Officers approved; returns the updated business detail */
8645
8868
  200: {
8646
8869
  headers: {
8647
8870
  [name: string]: unknown;
8648
8871
  };
8649
- content?: never;
8872
+ content: {
8873
+ "application/json": components["schemas"]["BusinessDetailResponseDto"];
8874
+ };
8650
8875
  };
8651
8876
  /** @description Business entity not found */
8652
8877
  404: {
@@ -8668,6 +8893,62 @@ export interface operations {
8668
8893
  };
8669
8894
  };
8670
8895
  };
8896
+ BusinessController_linkOfficerVerification: {
8897
+ parameters: {
8898
+ query?: never;
8899
+ header?: never;
8900
+ path: {
8901
+ /** @description Business entity UUID */
8902
+ id: string;
8903
+ /** @description Business officer UUID */
8904
+ officerId: string;
8905
+ };
8906
+ cookie?: never;
8907
+ };
8908
+ requestBody: {
8909
+ content: {
8910
+ "application/json": components["schemas"]["LinkVerificationSwaggerDto"];
8911
+ };
8912
+ };
8913
+ responses: {
8914
+ /** @description Officer linked; returns the updated officer with new screeningId */
8915
+ 200: {
8916
+ headers: {
8917
+ [name: string]: unknown;
8918
+ };
8919
+ content: {
8920
+ "application/json": components["schemas"]["BusinessOfficerResponseDto"];
8921
+ };
8922
+ };
8923
+ /** @description Business or officer not found */
8924
+ 404: {
8925
+ headers: {
8926
+ [name: string]: unknown;
8927
+ };
8928
+ content: {
8929
+ "application/json": components["schemas"]["ErrorResponseDto"];
8930
+ };
8931
+ };
8932
+ /** @description Officer is already linked to a verification */
8933
+ 409: {
8934
+ headers: {
8935
+ [name: string]: unknown;
8936
+ };
8937
+ content: {
8938
+ "application/json": components["schemas"]["ErrorResponseDto"];
8939
+ };
8940
+ };
8941
+ /** @description Verification cannot be linked (wrong type, status, or tenant) */
8942
+ 422: {
8943
+ headers: {
8944
+ [name: string]: unknown;
8945
+ };
8946
+ content: {
8947
+ "application/json": components["schemas"]["ErrorResponseDto"];
8948
+ };
8949
+ };
8950
+ };
8951
+ };
8671
8952
  BusinessController_refreshRegistry: {
8672
8953
  parameters: {
8673
8954
  query?: never;
@@ -8870,6 +9151,104 @@ export interface operations {
8870
9151
  };
8871
9152
  };
8872
9153
  };
9154
+ BusinessController_linkUboVerification: {
9155
+ parameters: {
9156
+ query?: never;
9157
+ header?: never;
9158
+ path: {
9159
+ /** @description Business entity UUID */
9160
+ id: string;
9161
+ /** @description Beneficial owner UUID */
9162
+ uboId: string;
9163
+ };
9164
+ cookie?: never;
9165
+ };
9166
+ requestBody: {
9167
+ content: {
9168
+ "application/json": components["schemas"]["LinkVerificationSwaggerDto"];
9169
+ };
9170
+ };
9171
+ responses: {
9172
+ /** @description UBO linked; returns the updated UBO with new screeningId */
9173
+ 200: {
9174
+ headers: {
9175
+ [name: string]: unknown;
9176
+ };
9177
+ content: {
9178
+ "application/json": components["schemas"]["BeneficialOwnerResponseDto"];
9179
+ };
9180
+ };
9181
+ /** @description Business or UBO not found */
9182
+ 404: {
9183
+ headers: {
9184
+ [name: string]: unknown;
9185
+ };
9186
+ content: {
9187
+ "application/json": components["schemas"]["ErrorResponseDto"];
9188
+ };
9189
+ };
9190
+ /** @description UBO is already linked to a verification */
9191
+ 409: {
9192
+ headers: {
9193
+ [name: string]: unknown;
9194
+ };
9195
+ content: {
9196
+ "application/json": components["schemas"]["ErrorResponseDto"];
9197
+ };
9198
+ };
9199
+ /** @description Verification cannot be linked, or UBO is COMPANY type */
9200
+ 422: {
9201
+ headers: {
9202
+ [name: string]: unknown;
9203
+ };
9204
+ content: {
9205
+ "application/json": components["schemas"]["ErrorResponseDto"];
9206
+ };
9207
+ };
9208
+ };
9209
+ };
9210
+ BusinessController_lookupOfficers: {
9211
+ parameters: {
9212
+ query?: never;
9213
+ header?: never;
9214
+ path?: never;
9215
+ cookie?: never;
9216
+ };
9217
+ requestBody: {
9218
+ content: {
9219
+ "application/json": components["schemas"]["LookupOfficersSwaggerDto"];
9220
+ };
9221
+ };
9222
+ responses: {
9223
+ /** @description Officer hints from the registry (possibly empty) */
9224
+ 200: {
9225
+ headers: {
9226
+ [name: string]: unknown;
9227
+ };
9228
+ content: {
9229
+ "application/json": components["schemas"]["LookupOfficersResponseDto"];
9230
+ };
9231
+ };
9232
+ /** @description Invalid request body */
9233
+ 400: {
9234
+ headers: {
9235
+ [name: string]: unknown;
9236
+ };
9237
+ content: {
9238
+ "application/json": components["schemas"]["ErrorResponseDto"];
9239
+ };
9240
+ };
9241
+ /** @description Rate limit exceeded — too many lookups per hour */
9242
+ 429: {
9243
+ headers: {
9244
+ [name: string]: unknown;
9245
+ };
9246
+ content: {
9247
+ "application/json": components["schemas"]["ErrorResponseDto"];
9248
+ };
9249
+ };
9250
+ };
9251
+ };
8873
9252
  BusinessController_search: {
8874
9253
  parameters: {
8875
9254
  query?: never;
@@ -10288,6 +10667,131 @@ export interface operations {
10288
10667
  };
10289
10668
  };
10290
10669
  };
10670
+ DocumentController_attach: {
10671
+ parameters: {
10672
+ query?: never;
10673
+ header?: never;
10674
+ path?: never;
10675
+ cookie?: never;
10676
+ };
10677
+ requestBody: {
10678
+ content: {
10679
+ "application/json": components["schemas"]["AttachPreStagedDocumentSwaggerDto"];
10680
+ };
10681
+ };
10682
+ responses: {
10683
+ /** @description Document attached */
10684
+ 201: {
10685
+ headers: {
10686
+ [name: string]: unknown;
10687
+ };
10688
+ content: {
10689
+ "application/json": components["schemas"]["DocumentResponseDto"];
10690
+ };
10691
+ };
10692
+ /** @description Pre-stage or verification not found */
10693
+ 404: {
10694
+ headers: {
10695
+ [name: string]: unknown;
10696
+ };
10697
+ content: {
10698
+ "application/json": components["schemas"]["ErrorResponseDto"];
10699
+ };
10700
+ };
10701
+ /** @description Pre-stage not CLEAN, already attached, or verification not in an upload-accepting status */
10702
+ 409: {
10703
+ headers: {
10704
+ [name: string]: unknown;
10705
+ };
10706
+ content: {
10707
+ "application/json": components["schemas"]["ErrorResponseDto"];
10708
+ };
10709
+ };
10710
+ /** @description Pre-stage has expired */
10711
+ 410: {
10712
+ headers: {
10713
+ [name: string]: unknown;
10714
+ };
10715
+ content: {
10716
+ "application/json": components["schemas"]["ErrorResponseDto"];
10717
+ };
10718
+ };
10719
+ };
10720
+ };
10721
+ DocumentController_preStageUpload: {
10722
+ parameters: {
10723
+ query?: never;
10724
+ header?: never;
10725
+ path?: never;
10726
+ cookie?: never;
10727
+ };
10728
+ requestBody: {
10729
+ content: {
10730
+ "application/json": components["schemas"]["PreStageUploadSwaggerDto"];
10731
+ };
10732
+ };
10733
+ responses: {
10734
+ /** @description Pre-signed upload URL generated */
10735
+ 201: {
10736
+ headers: {
10737
+ [name: string]: unknown;
10738
+ };
10739
+ content: {
10740
+ "application/json": components["schemas"]["PreStageUploadUrlResponseDto"];
10741
+ };
10742
+ };
10743
+ /** @description Invalid body or content type */
10744
+ 400: {
10745
+ headers: {
10746
+ [name: string]: unknown;
10747
+ };
10748
+ content: {
10749
+ "application/json": components["schemas"]["ErrorResponseDto"];
10750
+ };
10751
+ };
10752
+ };
10753
+ };
10754
+ DocumentController_confirmPreStage: {
10755
+ parameters: {
10756
+ query?: never;
10757
+ header?: never;
10758
+ path: {
10759
+ /** @description Pre-stage UUID */
10760
+ preStageId: string;
10761
+ };
10762
+ cookie?: never;
10763
+ };
10764
+ requestBody?: never;
10765
+ responses: {
10766
+ /** @description Upload confirmed; scanning enqueued */
10767
+ 200: {
10768
+ headers: {
10769
+ [name: string]: unknown;
10770
+ };
10771
+ content: {
10772
+ "application/json": components["schemas"]["PreStagedDocumentResponseDto"];
10773
+ };
10774
+ };
10775
+ /** @description Pre-stage not found */
10776
+ 404: {
10777
+ headers: {
10778
+ [name: string]: unknown;
10779
+ };
10780
+ content: {
10781
+ "application/json": components["schemas"]["ErrorResponseDto"];
10782
+ };
10783
+ };
10784
+ /** @description Pre-stage is not in UPLOADED state */
10785
+ 409: {
10786
+ headers: {
10787
+ [name: string]: unknown;
10788
+ };
10789
+ content: {
10790
+ "application/json": components["schemas"]["ErrorResponseDto"];
10791
+ };
10792
+ };
10793
+ };
10794
+ };
10291
10795
  DocumentController_getSupportedCountries: {
10292
10796
  parameters: {
10293
10797
  query?: never;