import {z} from 'zod' export type AbuseApplicantExternalDecisionReason = 'automatedBehavior' | 'accountSharing' | 'multiAccounting' | 'promotionAbuse' | 'termsViolation'; export type DeviceApplicantExternalDecisionReason = 'blacklistedDevice' | 'suspiciousDevice'; export type FinanceApplicantExternalDecisionReason = 'chargeback' | 'suspiciousAccounts' | 'highRiskPaymentMethod' | 'moneyMuling' | 'cardScam'; export type FraudApplicantExternalDecisionReason = 'documentForgery' | 'multiAccounting' | 'fakeContactData' | 'locationManipulation' | 'imageManipulation' | 'stolenIdentity' | 'socialEngineering' | 'elderAbuse'; export type ManualApplicantExternalDecisionReason = 'riskTeamDecision' | 'additionalDocumentRequest'; export type RegulationApplicantExternalDecisionReason = 'sanctionedJurisdiction' | 'sanctionedPerson' | 'missingRequiredDocuments'; export type ApplicantExternalDecisionReasons = {abuse?: Array | undefined, device?: Array | undefined, finance?: Array | undefined, fraud?: Array | undefined, manual?: Array | undefined, regulation?: Array | undefined}; export type ApplicantExternalDecision = {note?: string | undefined, reasons?: ApplicantExternalDecisionReasons | undefined, tags?: Array | undefined}; export type CreateApiResourcesApplicantsApplicantIdInitArgs = {applicantId: string, body: ApplicantExternalDecision}; export type CreateApiResourcesApplicantsApplicantIdInitOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const applicantAgreementType = z.enum(["onboarding", "reusableKyc"]); export const applicantAgreementItem = z.object({acceptedAt: z.string().optional(), createdAt: z.string().optional(), id: z.string().optional(), ip: z.string().optional(), recordIds: z.array(z.string()).optional(), source: z.string().optional(), type: applicantAgreementType.optional()}); export const applicantAgreement = z.object({acceptedAt: z.string().optional(), content: z.string().optional(), createdAt: z.string().optional(), items: z.array(applicantAgreementItem).optional(), link: z.string().optional(), privacyNoticeUrl: z.string().optional(), recordIds: z.array(z.string()).optional(), source: z.string().optional(), targets: z.array(z.string()).optional()}); export const entityActionTrail = z.object({clientSubject: z.string().optional(), date: z.string().optional(), subjectId: z.string().optional()}); export const applicantRiskLevel = z.object({label: z.string().max(256).optional(), styleClass: z.string().max(128).optional()}); export const applicantRiskLevelOverrideType = z.string(); export const applicantRiskLevelOverride = z.object({created: entityActionTrail.optional(), freezeUntil: z.string().optional(), type: applicantRiskLevelOverrideType.optional()}); export const companyBeneficiaryAssessmentAggregate = z.enum(["sum", "avg", "max"]); export const companyBeneficiaryType = z.enum(["shareholder", "representative", "director", "ubo", "companyOfficer", "secretary", "founder", "investor", "legalAdvisor", "authorizedSignatory", "trustee", "trustBeneficiary", "trustSettlor", "trustProtector", "managingPartner", "equityPartner", "fundInvestor", "fundManager", "investmentManager", "investmentAdviser", "fundAdministrator", "depositary", "custodian", "primeBroker", "accountUser", "payer"]); export const companyBeneficiaryAssessmentSettings = z.object({aggregateFunction: companyBeneficiaryAssessmentAggregate.optional(), beneficiaryType: companyBeneficiaryType, includeOwnershipPercentage: z.boolean().optional(), weight: z.number().optional()}); export const kytTxnRuleReference = z.object({id: z.string().optional(), name: z.string().optional(), revision: z.number().int().optional(), tags: z.array(z.string()).optional(), title: z.string().optional()}); export const applicantAssessmentResult = z.object({aggregateFunction: companyBeneficiaryAssessmentAggregate.optional(), beneficiaryApplicantId: z.string().optional(), beneficiaryAssessmentSettings: z.array(companyBeneficiaryAssessmentSettings).optional(), createdAt: z.string().optional(), includeInTotalScore: z.boolean().optional(), includeOwnershipPercentage: z.boolean().optional(), rules: z.array(kytTxnRuleReference).optional(), score: z.number().optional(), scoreWeight: z.number().optional(), tag: z.string().optional(), txnId: z.string().optional()}); export const applicantAssessment = z.object({beneficiaryScore: z.number().optional(), modified: entityActionTrail.optional(), riskLevel: applicantRiskLevel.optional(), riskLevelFrozen: z.boolean().optional(), riskLevelOverride: applicantRiskLevelOverride.optional(), scores: z.array(applicantAssessmentResult).optional(), totalScore: z.number().optional()}); export const locationCoords = z.object({accuracy: z.number().optional(), lat: z.number().optional(), lon: z.number().optional()}); export const locationPosition = z.object({formattedAddress: z.string().optional(), locationCoords: locationCoords.optional(), skipped: z.boolean().optional()}); export const addressSource = z.enum(["manual", "autoComplete", "gps", "externalDb", "proofOfAddress", "proofOfIdentity"]); export const address = z.object({buildingName: z.string().optional(), buildingNumber: z.string().optional(), country: z.string().optional(), endDate: z.string().optional(), flatNumber: z.string().optional(), formattedAddress: z.string().optional(), locationPosition: locationPosition.optional(), postCode: z.string().optional(), providedLocationPosition: locationPosition.optional(), source: addressSource.optional(), startDate: z.string().optional(), state: z.string().optional(), stateCode: z.string().optional(), stateEn: z.string().optional(), street: z.string().optional(), streetEn: z.string().optional(), subStreet: z.string().optional(), subStreetEn: z.string().optional(), town: z.string().optional(), townEn: z.string().optional()}); export const companyLegalForm = z.string(); export const applicantMetadataKV = z.object({key: z.string().optional(), value: z.string().optional()}); export const companyBeneficiaryInfo = z.object({alternativeNames: z.array(z.string()).optional(), buildingNumber: z.string().optional(), companyName: z.string().optional(), controlScheme: z.string().optional(), country: z.string().optional(), countryOfBirth: z.string().optional(), dob: z.string().optional(), email: z.string().optional(), externalUserId: z.string().max(512).optional(), firstName: z.string().optional(), flatNumber: z.string().optional(), gender: z.string().optional(), incorporatedOn: z.string().optional(), lastName: z.string().optional(), legalAddress: z.string().optional(), legalForm: companyLegalForm.optional(), legalName: z.string().optional(), leiCode: z.string().optional(), metadata: z.array(applicantMetadataKV).optional(), middleName: z.string().optional(), nationality: z.string().optional(), phone: z.string().optional(), placeOfBirth: z.string().optional(), postCode: z.string().optional(), postalAddress: z.string().optional(), registrationLocation: z.string().optional(), registrationNumber: z.string().optional(), shareSize: z.number().optional(), state: z.string().optional(), stateOfBirth: z.string().optional(), street: z.string().optional(), subStreet: z.string().optional(), taxId: z.string().optional(), taxResidenceCountry: z.string().optional(), tin: z.string().optional(), town: z.string().optional(), type: z.string().optional(), website: z.string().optional()}); export const companyBeneficiarySubtype = z.enum(["ownershipUbo", "controlUbo", "substituteUbo"]); export const companyBeneficiary = z.object({applicantId: z.string().optional(), appointedOn: z.string().optional(), beneficiaryInfo: companyBeneficiaryInfo.optional(), id: z.string().optional(), imageIds: z.array(z.string()).optional(), inRegistry: z.boolean().optional(), matched: z.boolean().optional(), natureOfControl: z.string().max(255).optional(), positions: z.array(z.string()).optional(), resignedOn: z.string().optional(), shareSize: z.number().optional(), submitted: z.boolean().optional(), subtypes: z.array(companyBeneficiarySubtype).optional(), type: companyBeneficiaryType.optional(), types: z.array(companyBeneficiaryType).optional()}); export const companyAddressType = z.enum(["trade", "legal", "postal"]); export const companyAddress = z.object({address: address, addressTypes: z.array(companyAddressType).optional(), id: z.string().max(256).optional(), imageId: z.number().int().optional(), main: z.boolean().optional()}); export const applicantCompanyInfoCustomInfoItem = z.object({key: z.string().max(255).optional(), value: z.string().max(255).optional()}); export const idDocSubType = z.enum(["FRONT_SIDE", "BACK_SIDE", "PAGES", "INCORPORATION_CERT", "INCORPORATION_ARTICLES", "ARTICLES_OF_ASSOCIATION", "PARTNERSHIP_AGREEMENT", "REGULATORY_LICENSE", "TRADE_LICENSE", "SHAREHOLDER_REGISTRY", "DIRECTORS_REGISTRY", "STATE_REGISTRY", "OWNERSHIP_STRUCTURE_CHART", "INCUMBENCY_CERT", "PROOF_OF_ADDRESS", "TAX_CERT", "PROOF_OF_NATURE_OF_BUSINESS", "SELF_DECLARATION_FORM", "POWER_OF_ATTORNEY", "PROOF_OF_DOMAIN", "TRUST_AGREEMENT", "INFORMATION_STATEMENT", "GOOD_STANDING_CERT", "OTHER"]); export const idDocType = z.enum(["ID_CARD", "PASSPORT", "TRAVEL_PASSPORT", "DRIVERS", "SNILS", "RESIDENCE_PERMIT", "WORK_PERMIT", "WORK_PATENT", "VISA", "EMPLOYMENT_CERTIFICATE", "DRIVERS_TRANSLATION", "PASSPORT_TRANSLATION", "UTILITY_BILL", "UTILITY_BILL2", "ID_AS_POA", "SELFIE", "VIDEO_SELFIE", "PAYMENT_SELFIE", "STUDENT_ID", "BANK_CARD", "PROOF_OF_PAYMENT", "BANK_STATEMENT", "PROFILE_IMAGE", "PROFILE_SCREENSHOT", "ID_DOC_PHOTO", "MRZ_DOCUMENT", "AGREEMENT", "OTHER", "OTHER2", "OTHER3", "CONTRACT", "SIGNED_CONTRACT", "INVESTOR_DOC", "COMPANY_DOC", "VAT_CERTIFICATE", "POWER_OF_ATTORNEY", "TRANSPARENCY_REGISTRY_EXTRACT", "INCOME_SOURCE", "VEHICLE_REGISTRATION_CERTIFICATE", "VEHICLE_PASSPORT", "LEGAL_ENTITY", "MIGRATION_CARD", "ARRIVAL_NOTICE", "PAYMENT_METHOD", "PAYMENT_SOURCE", "INSURANCE_CERTIFICATE", "TAXI_LICENSE", "COVID_VACCINATION_FORM", "COVID_TEST_FORM", "TAX_PAYER_NUMBER_DOC", "FILE_ATTACHMENT", "ARBITRARY_DOC", "VOTER_ID", "IDENTITY_VIDEO", "EXTERNAL_DB_DOC", "DEBUG"]); export const companyDocumentExpirationInfo = z.object({expirationDate: z.string().optional(), idDocSubType: idDocSubType.optional(), idDocType: idDocType.optional(), imageId: z.number().int().optional()}); export const applicantCompanyInfo = z.object({address: address.optional(), alternativeNames: z.array(z.string()).optional(), applicantPosition: z.string().optional(), beneficiaries: z.array(companyBeneficiary).optional(), companyAddresses: z.array(companyAddress).optional(), companyName: z.string().optional(), companyNameEn: z.string().max(255).optional(), controlScheme: z.string().optional(), country: z.string().optional(), customInfo: z.array(applicantCompanyInfoCustomInfoItem).optional(), email: z.string().optional(), incorporatedOn: z.string().optional(), legalAddress: z.string().optional(), legalForm: companyLegalForm.optional(), leiCode: z.string().optional(), licenseNumber: z.string().max(64).optional(), noDirectors: z.boolean().optional(), noDocs: z.boolean().optional(), noRepresentatives: z.boolean().optional(), noShareholders: z.boolean().optional(), noUBOs: z.boolean().optional(), ownershipStructureDepth: z.number().int().optional(), phone: z.string().optional(), postalAddress: z.string().optional(), primaryContactBeneficiaryId: z.string().max(64).optional(), registrationLocation: z.string().optional(), registrationNumber: z.string().optional(), skippedTypes: z.array(companyBeneficiaryType).optional(), taxId: z.string().optional(), type: z.string().optional(), upcomingDocumentExpiration: companyDocumentExpirationInfo.optional(), website: z.string().optional()}); export const cryptoWallet = z.object({currency: z.string().optional(), wallet: z.string().optional()}); export const gender = z.enum(["M", "F", "X"]); export const barcodeInfo = z.object({additionalNumber: z.string().max(64).optional(), category: z.string().max(64).optional(), country: z.string().max(3).optional(), dob: z.string().optional(), firstName: z.string().max(128).optional(), gender: gender.optional(), issuedDate: z.string().optional(), lastName: z.string().max(128).optional(), middleName: z.string().max(128).optional(), number: z.string().max(64).optional(), placeOfBirth: z.string().max(128).optional(), rawAddress: z.string().max(550).optional(), validUntil: z.string().optional()}); export const maritalStatus = z.enum(["A", "D", "I", "L", "M", "C", "P", "T", "U", "S", "W"]); export const vehicleInfo = z.object({color: z.string().optional(), make: z.string().optional(), model: z.string().optional(), type: z.string().optional()}); export const visaType = z.enum(["A", "C", "D"]); export const applicantIdDoc: z.ZodType = z.object({additionalNumber: z.string().optional(), address: address.optional(), aliasName: z.string().optional(), aliasNameEn: z.string().max(100).optional(), arbitraryDocType: z.string().optional(), barcodeInfo: barcodeInfo.optional(), barcodeLine: z.string().optional(), bgCheckViolations: z.array(z.string()).optional(), category: z.string().optional(), country: z.string().optional(), detectedLanguages: z.array(z.string()).optional(), digital: z.boolean().optional(), dlCategoryAmIssuedDate: z.string().optional(), dlCategoryBIssuedDate: z.string().optional(), dlCategoryBRestrictions: z.string().max(100).optional(), dlCategoryBValidUntil: z.string().optional(), dob: z.string().optional(), employer: z.string().optional(), entitlementDate: z.string().optional(), ethnicity: z.string().optional(), extendedValidUntil: z.string().optional(), firstIssuedDate: z.string().optional(), firstName: z.string().optional(), firstNameEn: z.string().optional(), gender: z.string().optional(), grandparentName1: z.string().optional(), grandparentName1En: z.string().optional(), grandparentName2: z.string().optional(), grandparentName2En: z.string().optional(), idDocType: idDocType.optional(), insuranceNumber: z.string().optional(), issuanceStatus: z.string().optional(), issueAuthority: z.string().optional(), issueAuthorityCode: z.string().optional(), issueNumber: z.string().optional(), issuedDate: z.string().optional(), lastName: z.string().optional(), lastNameEn: z.string().optional(), maritalStatus: maritalStatus.optional(), metadata: z.array(applicantMetadataKV).optional(), middleName: z.string().optional(), middleNameEn: z.string().optional(), mrzLine1: z.string().optional(), mrzLine2: z.string().optional(), mrzLine3: z.string().optional(), nationality: z.string().optional(), number: z.string().optional(), occupation: z.string().optional(), ocrDocType: z.string().optional(), parentName1: z.string().optional(), parentName1En: z.string().optional(), parentName2: z.string().optional(), parentName2En: z.string().optional(), placeOfBirth: z.string().optional(), profileTrust: z.number().optional(), rawAddress: z.string().max(550).optional(), requiredIdDoc: z.lazy(() => applicantIdDoc.optional()), securityCode: z.string().max(64).optional(), serialNumber: z.string().max(64).optional(), spouseName: z.string().max(150).optional(), ssn: z.string().optional(), termless: z.boolean().optional(), tin: z.string().optional(), title: z.string().optional(), txnAmount: z.string().optional(), uncertainFields: z.array(z.string()).optional(), validUntil: z.string().optional(), vehicleInfo: vehicleInfo.optional(), visaType: visaType.optional(), withNfc: z.boolean().optional()}); export const currencyRange = z.object({currency: z.string().optional(), from: z.number().int().optional(), to: z.number().int().optional()}); export const incomeSourceType = z.enum(["salary", "rent", "investments", "other"]); export const investabilityType = z.enum(["person", "company"]); export const investmentKnowledgeLevel = z.string(); export const applicantInvestability = z.object({annualIncome: currencyRange.optional(), incomeSourceDesc: z.string().optional(), incomeSourceType: incomeSourceType.optional(), incomeSourceTypeOther: z.string().optional(), investabilityType: investabilityType.optional(), investmentKnowledgeLevel: investmentKnowledgeLevel.optional(), netWorth: currencyRange.optional(), transactionAmount: z.number().optional()}); export const imageTestAnswer = z.enum(["IGNORED", "GREEN", "YELLOW", "RED", "ERROR"]); export const bankCardBinInfo = z.object({bankUrl: z.string().max(128).optional(), bin: z.string().max(64).optional(), brand: z.string().max(64).optional(), category: z.string().max(128).optional(), commercial: z.boolean().optional(), country: z.string().max(64).optional(), gift: z.boolean().optional(), issuer: z.string().max(128).optional(), lat: z.number().optional(), lon: z.number().optional(), prepaid: z.boolean().optional(), type: z.string().max(64).optional(), virtual: z.boolean().optional()}); export const bankCardRiskScoreInfo = z.object({binInfo: bankCardBinInfo.optional(), countryIpMatch: imageTestAnswer.optional(), countryMatch: imageTestAnswer.optional(), crossCheck: imageTestAnswer.optional(), emailFirstSeenAt: z.string().optional(), freeEmail: z.boolean().optional(), highRiskEmailCheck: imageTestAnswer.optional(), ipCountry: z.string().optional(), ipRiskScore: z.number().optional(), nameMatch: imageTestAnswer.optional(), riskScore: z.number().optional(), unexpired: imageTestAnswer.optional()}); export const paymentMethodCheckType = z.string(); export const cryptoAddressClusterInfo = z.object({category: z.string().optional(), name: z.string().optional()}); export const exposureType = z.enum(["direct", "indirect"]); export const cryptoAddressExposureInfo = z.object({amountInDefaultCurrency: z.number().optional(), amountUsd: z.number().optional(), category: z.string().optional(), exposureType: exposureType.optional(), riskLevel: imageTestAnswer.optional(), riskLevelRaw: z.string().optional(), triggerMessage: z.string().optional()}); export const cryptoAddressIdentificationInfo = z.object({category: z.string().optional(), description: z.string().optional(), name: z.string().optional()}); export const riskLevel = z.enum(["Low", "Medium", "High", "Severe"]); export const cryptoAddressTriggerInfo = z.object({category: z.string().optional(), exposureType: exposureType.optional(), message: z.string().optional(), percentage: z.number().optional(), riskLevel: imageTestAnswer.optional(), riskLevelRaw: z.string().optional()}); export const cryptoAddressAlertInfo = z.object({address: z.string().optional(), cluster: cryptoAddressClusterInfo.optional(), exposures: z.array(cryptoAddressExposureInfo).optional(), identifications: z.array(cryptoAddressIdentificationInfo).optional(), reason: z.string().optional(), riskLevel: imageTestAnswer.optional(), riskLevelRaw: riskLevel.optional(), triggers: z.array(cryptoAddressTriggerInfo).optional()}); export const cryptoAlertInfo = z.object({alertAmountInDefaultCurrency: z.number().optional(), alertAmountUsd: z.number().optional(), alertLevel: imageTestAnswer.optional(), category: z.string().optional(), exposureType: exposureType.optional(), riskLevelRaw: riskLevel.optional(), service: z.string().optional()}); export const chainalysisMonitorDataResult = z.object({addressAlert: cryptoAddressAlertInfo.optional(), alerts: z.array(cryptoAlertInfo).optional(), alertsAnswer: imageTestAnswer.optional(), alertsRiskLevelRaw: riskLevel.optional(), assetSupported: z.boolean().optional(), externalId: z.string().optional()}); export const cipherOwlRiskContribution = z.object({category: z.string().optional(), direction: z.string().optional(), hops: z.number().int().optional(), riskContribution: z.number().optional(), usdValue: z.number().optional()}); export const cipherOwlWalletScreeningResult = z.object({address: z.string().optional(), answer: imageTestAnswer.optional(), breakdown: z.array(cipherOwlRiskContribution).optional(), chain: z.string().optional(), chainSupported: z.boolean().optional(), config: z.string().optional(), foundRisk: z.boolean().optional(), reportingAvailable: z.boolean().optional(), riskBand: z.string().optional(), riskScore: z.number().optional(), version: z.string().optional()}); export const cipherOwlMonitorDataResult = z.object({walletScreening: cipherOwlWalletScreeningResult.optional()}); export const crystalEntity = z.object({country: z.string().optional(), currency: z.array(z.string()).optional(), currencyBasic: z.array(z.string()).optional(), getnTx: z.number().int().optional(), globalId: z.number().int().optional(), grade: z.string().optional(), name: z.string().optional(), slug: z.string().optional(), subtype: z.string().optional(), type: z.string().optional()}); export const crystalCounterpartyConnections = z.object({atm: z.number().optional(), child_exploitation: z.number().optional(), dark_market: z.number().optional(), dark_service: z.number().optional(), enforcement_action: z.number().optional(), exchange: z.number().optional(), exchange_fraudulent: z.number().optional(), exchange_licensed: z.number().optional(), exchange_mlrisk_high: z.number().optional(), exchange_mlrisk_low: z.number().optional(), exchange_mlrisk_moderate: z.number().optional(), exchange_mlrisk_veryhigh: z.number().optional(), exchange_unlicensed: z.number().optional(), gambling: z.number().optional(), illegal_service: z.number().optional(), liquidity_pools: z.number().optional(), marketplace: z.number().optional(), miner: z.number().optional(), mixer: z.number().optional(), other: z.number().optional(), p2p_exchange_licensed: z.number().optional(), p2p_exchange_mlrisk_high: z.number().optional(), p2p_exchange_mlrisk_low: z.number().optional(), p2p_exchange_unlicensed: z.number().optional(), payment: z.number().optional(), ransom: z.number().optional(), sanctions: z.number().optional(), scam: z.number().optional(), seized_assets: z.number().optional(), stolen_coins: z.number().optional(), terrorism_financing: z.number().optional(), trusted_exchange: z.number().optional(), wallet: z.number().optional()}); export const crystalSignals = z.object({received: crystalCounterpartyConnections.optional(), sent: crystalCounterpartyConnections.optional()}); export const crystalCounterparty = z.object({address: z.string().optional(), blocklist: z.boolean().optional(), entity: crystalEntity.optional(), received: z.number().optional(), riskScore: z.number().optional(), sent: z.number().optional(), signals: crystalSignals.optional(), tags: z.array(z.string()).optional(), type: z.string().optional()}); export const crystalMonitorDataResultV2 = z.object({amount: z.number().optional(), answer: imageTestAnswer.optional(), assetSupported: z.boolean().optional(), blockchains: z.array(z.string()).optional(), counterparty: crystalCounterparty.optional(), fiat: z.number().optional(), signals: crystalCounterpartyConnections.optional(), time: z.string().optional()}); export const riskType = z.object({name: z.string().optional(), riskScore: z.string().optional()}); export const categoryScore = z.object({riskScore: z.string().optional(), riskTypes: z.array(riskType).optional()}); export const cyversAddressComplianceEntity = z.object({name: z.string().optional()}); export const cyversAddressComplianceResult = z.object({address: z.string().optional(), answer: imageTestAnswer.optional(), assetSupported: z.boolean().optional(), blockchainPlatform: z.string().optional(), compliance: categoryScore.optional(), entity: cyversAddressComplianceEntity.optional(), label: z.string().optional(), riskScore: z.string().optional(), scam: categoryScore.optional(), security: categoryScore.optional(), tags: z.array(z.string()).optional(), whitelisted: z.boolean().optional()}); export const cyversAddressFraudResult = z.object({address: z.string().optional(), answer: imageTestAnswer.optional(), assetSupported: z.boolean().optional(), blockchainPlatform: z.string().optional(), riskCategory: z.string().optional(), riskScore: z.string().optional(), riskType: z.string().optional(), whitelisted: z.boolean().optional()}); export const cyversMonitorDataResult = z.object({addressCompliance: cyversAddressComplianceResult.optional(), addressFraud: cyversAddressFraudResult.optional()}); export const addressInfo = z.object({hasReceived: z.boolean().optional(), hasSent: z.boolean().optional()}); export const amount = z.object({nativeAmount: z.number().optional(), nativeMajor: z.number().optional(), usd: z.number().optional()}); export const label = z.object({category: z.string().optional(), isPrimaryEntity: z.boolean().optional(), name: z.string().optional(), primaryEntity: z.boolean().optional()}); export const transactionIO = z.object({amount: amount.optional(), hash: z.string().optional(), index: z.number().int().optional(), labels: z.array(label).optional()}); export const transactionInfo = z.object({inputs: z.array(transactionIO).optional(), outputs: z.array(transactionIO).optional(), time: z.string().optional(), value: amount.optional()}); export const transferBlockchainInfo = z.object({address: addressInfo.optional(), transaction: transactionInfo.optional(), value: z.string().optional()}); export const value = z.object({usd: z.number().optional()}); export const txnAnalysisContributionEntity = z.object({actorId: z.number().int().optional(), category: z.string().optional(), categoryId: z.string().optional(), entityId: z.string().optional(), isPrimaryEntity: z.boolean().optional(), isVasp: z.boolean().optional(), name: z.string().optional(), primaryEntity: z.boolean().optional(), vasp: z.boolean().optional()}); export const txnAnalysisContribution = z.object({contributionPercentage: z.number().optional(), contributionValue: value.optional(), counterpartyPercentage: z.number().optional(), counterpartyValue: value.optional(), entities: z.array(txnAnalysisContributionEntity).optional(), indirectPercentage: z.number().optional(), indirectValue: value.optional(), isScreenedAddress: z.boolean().optional(), minNumberOfHops: z.number().int().optional(), screenedAddress: z.boolean().optional()}); export const ellipticTransferMonitoringResult = z.object({analysisId: z.string(), answer: imageTestAnswer.optional(), assetSupported: z.boolean().optional(), blockchainInfo: transferBlockchainInfo.optional(), contributions: z.array(txnAnalysisContribution).optional(), dustTransaction: z.boolean().optional(), processStatus: z.string().optional(), riskScore: z.number().optional()}); export const ellipticAssetTier = z.enum(["full", "sanctions"]); export const blockchainInfo = z.object({incomingTotal: z.number().optional(), outgoingTotal: z.number().optional()}); export const direction = z.enum(["in", "out"]); export const contributionEntity = z.object({category: z.string().optional(), name: z.string().optional(), vasp: z.boolean().optional()}); export const walletExposureContribution = z.object({amount: z.number().optional(), direction: direction.optional(), entity: contributionEntity.optional(), minNumberOfHops: z.number().int().optional(), percentage: z.number().optional()}); export const externalRule = z.object({name: z.string().optional(), type: z.string().optional()}); export const ellipticWalletExposureMonitorDataResult = z.object({analysisId: z.string().optional(), assetSupported: z.boolean().optional(), assetTier: ellipticAssetTier.optional(), blockchainInfo: blockchainInfo.optional(), contributions: z.array(walletExposureContribution).optional(), riskScore: z.number().optional(), triggeredRules: z.array(externalRule).optional(), updatedAt: z.string().optional()}); export const ellipticMonitorDataResult = z.object({transferScreening: ellipticTransferMonitoringResult.optional(), walletExposure: ellipticWalletExposureMonitorDataResult.optional()}); export const inputOutput = z.object({address: z.string().optional(), amount: z.number().optional(), vaspId: z.string().optional()}); export const kytTxnCryptoExplorerInfo = z.object({amountInputs: z.number().optional(), amountOutputs: z.number().optional(), countInputs: z.number().int().optional(), countOutputs: z.number().int().optional(), inputs: z.array(inputOutput).optional(), outputs: z.array(inputOutput).optional()}); export const exposure = z.object({exposureType: z.string().optional(), tagNameVerbose: z.string().optional(), tagSubtypeVerbose: z.string().optional(), tagTypeVerbose: z.string().optional(), totalValueUsd: z.string().optional()}); export const digitalAsset = z.object({name: z.string().optional(), symbol: z.string().optional(), value: z.string().optional(), valueUsd: z.string().optional()}); export const merkleTransferMonitoringResult = z.object({address: z.string().optional(), assetSupported: z.boolean().optional(), beneficiary: z.array(exposure).optional(), blockTimestamp: z.string().optional(), blockchain: z.number().int().optional(), blockchainVerbose: z.string().optional(), createdAt: z.string().optional(), customerId: z.string().optional(), digitalAssets: z.array(digitalAsset).optional(), fee: z.string().optional(), feeUsd: z.string().optional(), identifier: z.string().optional(), originator: z.array(exposure).optional(), riskLevel: z.number().int().optional(), riskLevelVerbose: z.string().optional(), type: z.number().int().optional(), typeVerbose: z.string().optional(), updatedAt: z.string().optional(), value: z.string().optional(), valueUsd: z.string().optional()}); export const partyExposure = z.object({exposureType: z.string().optional(), tagNameVerbose: z.string().optional(), tagSubTypeVerbose: z.string().optional(), tagTypeVerbose: z.string().optional(), totalValueUsd: z.string().optional()}); export const tag = z.object({tagNameVerbose: z.string().optional(), tagSubTypeVerbose: z.string().optional(), tagTypeVerbose: z.string().optional()}); export const tags = z.object({owner: tag.optional(), user: tag.optional()}); export const merkleWalletScreeningResult = z.object({assetSupported: z.boolean().optional(), balance: z.string().optional(), beneficiary: z.array(partyExposure).optional(), blockchain: z.number().int().optional(), blockchainVerbose: z.string().optional(), createdAt: z.string().optional(), customTags: z.array(z.string()).optional(), customerId: z.string().optional(), digitalAssets: z.array(digitalAsset).optional(), earliestTransactionTime: z.string().optional(), identifier: z.string().optional(), latestTransactionTime: z.string().optional(), originator: z.array(partyExposure).optional(), riskLevel: z.number().int().optional(), riskLevelVerbose: z.string().optional(), tags: tags.optional(), totalIncomingValue: z.string().optional(), totalIncomingValueUsd: z.string().optional(), totalOutgoingValue: z.string().optional(), totalOutgoingValueUsd: z.string().optional(), type: z.number().int().optional(), typeVerbose: z.string().optional(), updatedAt: z.string().optional()}); export const merkleMonitorDataResult = z.object({transferScreening: merkleTransferMonitoringResult.optional(), walletScreening: merkleWalletScreeningResult.optional()}); export const nominisExposure = z.object({amount: z.number().optional(), coin: z.string().optional(), coinName: z.string().optional(), firstTx: z.number().int().optional(), lastTx: z.number().int().optional(), proximity: z.number().optional(), receiver: z.string().optional(), receiverClassification: z.array(z.string()).optional(), receiverName: z.string().optional(), receiverQuickScore: z.string().optional(), receiverRiskFactors: z.array(z.string()).optional(), sender: z.string().optional(), senderClassification: z.array(z.string()).optional(), senderName: z.string().optional(), senderQuickScore: z.string().optional(), senderRiskFactors: z.array(z.string()).optional(), totalTx: z.number().int().optional(), usdValue: z.number().optional()}); export const nominisRiskCategory = z.object({classification: z.string().optional(), proximity: z.array(z.number().int()).optional()}); export const nominisTransferScreeningResult = z.object({answer: imageTestAnswer.optional(), behavioralIndicators: z.array(z.string()).optional(), chain: z.string().optional(), chainSupported: z.boolean().optional(), createdAt: z.number().int().optional(), depth: z.number().int().optional(), exposure: z.array(nominisExposure).optional(), requestId: z.string().optional(), riskCategories: z.array(nominisRiskCategory).optional(), riskScore: z.string().optional(), txHash: z.string().optional(), usdValue: z.number().optional()}); export const nominisGeoSignal = z.object({country: z.string().optional(), share: z.number().optional()}); export const nominisWalletScreeningResult = z.object({address: z.string().optional(), addressName: z.string().optional(), answer: imageTestAnswer.optional(), chain: z.string().optional(), chainSupported: z.boolean().optional(), classification: z.array(z.string()).optional(), depth: z.number().int().optional(), exposure: z.array(nominisExposure).optional(), geoSignals: z.array(nominisGeoSignal).optional(), requestId: z.string().optional(), riskCategories: z.array(nominisRiskCategory).optional(), riskFactors: z.array(z.string()).optional(), riskScore: z.string().optional(), riskScoreNumeric: z.number().optional(), screeningMode: z.string().optional()}); export const nominisMonitorDataResult = z.object({transferScreening: nominisTransferScreeningResult.optional(), walletScreening: nominisWalletScreeningResult.optional()}); export const trmLabsTransferMonitoringAlert = z.object({accountUuid: z.string().optional(), closedAt: z.string().optional(), closedJustification: z.string().optional(), closedReason: z.string().optional(), issuedAt: z.string().optional(), ownedByUserEmail: z.string().optional(), riskScoreLevel: z.number().int().optional(), riskScoreLevelLabel: z.string().optional(), ruleUuid: z.string().optional(), status: z.string().optional(), statusUpdatedAt: z.string().optional(), statusUpdatedByUserEmail: z.string().optional(), transferAccountExternalId: z.string().optional(), transferExternalId: z.string().optional(), transferUuid: z.string().optional(), trmAppUrl: z.string().optional(), updatedAt: z.string().optional(), updatedByUserEmail: z.string().optional(), uuid: z.string().optional(), valid: z.boolean().optional()}); export const trmLabsTransferMonitoringResult = z.object({accountExternalId: z.string().optional(), accountUuid: z.string().optional(), alerts: z.array(trmLabsTransferMonitoringAlert).optional(), answer: imageTestAnswer.optional(), asset: z.string().optional(), assetAmount: z.string().optional(), assetSupported: z.boolean().optional(), chain: z.string().optional(), destinationAddress: z.string().optional(), externalId: z.string().optional(), fiatCurrency: z.string().optional(), fiatValue: z.string().optional(), onchainReference: z.string().optional(), riskScoreLevel: z.number().int().optional(), riskScoreLevelLabel: z.string().optional(), screenStatus: z.string().optional(), screenStatusFailedReason: z.string().optional(), submittedAt: z.string().optional(), timestamp: z.string().optional(), transferType: z.string().optional(), trmAppUrl: z.string().optional(), uuid: z.string().optional()}); export const riskIndicator = z.object({category: z.string().optional(), categoryId: z.string().optional(), categoryRiskScoreLevel: z.number().int().optional(), categoryRiskScoreLevelLabel: z.string().optional(), incomingVolumePercent: z.string().optional(), incomingVolumeUsd: z.string().optional(), outgoingVolumePercent: z.string().optional(), outgoingVolumeUsd: z.string().optional(), riskType: z.string().optional(), totalVolumePercent: z.string().optional(), totalVolumeUsd: z.string().optional()}); export const trmLabsWalletScreeningEntity = z.object({category: z.string().optional(), categoryId: z.string().optional(), confidenceScoreLabel: z.string().optional(), entity: z.string().optional(), riskScoreLevel: z.number().int().optional(), riskScoreLevelLabel: z.string().optional(), trmAppUrl: z.string().optional(), trmUrn: z.string().optional()}); export const trmLabsWalletScreeningResult = z.object({accountExternalId: z.string().optional(), accountUuid: z.string().optional(), address: z.string().optional(), addressHighestRiskScoreLevel: z.number().int().optional(), addressHighestRiskScoreLevelLabel: z.string().optional(), addressIncomingVolumeUsd: z.string().optional(), addressOutgoingVolumeUsd: z.string().optional(), addressRiskIndicators: z.array(riskIndicator).optional(), addressSubmitted: z.string().optional(), addressTotalVolumeUsd: z.string().optional(), answer: imageTestAnswer.optional(), assetSupported: z.boolean().optional(), chain: z.string().optional(), entities: z.array(trmLabsWalletScreeningEntity).optional(), externalId: z.string().optional(), trmAppUrl: z.string().optional()}); export const trmLabsMonitorDataResult = z.object({transferScreening: trmLabsTransferMonitoringResult.optional(), walletScreening: trmLabsWalletScreeningResult.optional()}); export const riskScoreEntitySignals = z.object({atm: z.number().optional(), child_exploitation: z.number().optional(), dark_market: z.number().optional(), dark_service: z.number().optional(), enforcement_action: z.number().optional(), exchange: z.number().optional(), exchange_fraudulent: z.number().optional(), exchange_licensed: z.number().optional(), exchange_mlrisk_high: z.number().optional(), exchange_mlrisk_low: z.number().optional(), exchange_mlrisk_moderate: z.number().optional(), exchange_mlrisk_veryhigh: z.number().optional(), exchange_unlicensed: z.number().optional(), gambling: z.number().optional(), illegal_service: z.number().optional(), liquidity_pools: z.number().optional(), marketplace: z.number().optional(), miner: z.number().optional(), mixer: z.number().optional(), other: z.number().optional(), p2p_exchange_licensed: z.number().optional(), p2p_exchange_mlrisk_high: z.number().optional(), p2p_exchange_mlrisk_low: z.number().optional(), p2p_exchange_unlicensed: z.number().optional(), payment: z.number().optional(), ransom: z.number().optional(), sanctions: z.number().optional(), scam: z.number().optional(), seized_assets: z.number().optional(), stolen_coins: z.number().optional(), terrorism_financing: z.number().optional(), trusted_exchange: z.number().optional(), wallet: z.number().optional()}); export const txnMonitorCounterpartySignals = z.object({bwd: riskScoreEntitySignals.optional(), fwd: riskScoreEntitySignals.optional()}); export const txnMonitorCounterparty = z.object({address: z.string().optional(), id: z.string().optional(), name: z.string().optional(), receivedFiatAmount: z.number().optional(), sentFiatAmount: z.number().optional(), signals: txnMonitorCounterpartySignals.optional()}); export const crystalMonitorDataResult = z.object({address: z.string().optional(), amount: z.number().int().optional(), answer: imageTestAnswer.optional(), assetSupported: z.boolean().optional(), counterparty: txnMonitorCounterparty.optional(), counterpartyAddress: z.string().optional(), direction: z.string().optional(), fiat: z.number().int().optional(), fiatCode: z.string().optional(), fiatInDefaultCurrency: z.number().optional(), id: z.string().optional(), riskLevel: z.string().optional(), riskscore: z.number().optional(), riskyVolume: z.number().optional(), riskyVolumeFiat: z.number().optional(), riskyVolumeFiatInDefaultCurrency: z.number().optional(), signals: riskScoreEntitySignals.optional(), status: z.string().optional(), time: z.string().optional(), txn: z.string().optional(), updatedAt: z.string().optional()}); export const cryptoTxnRiskScoreInfo = z.object({answer: imageTestAnswer.optional(), chainalysisMonitorData: chainalysisMonitorDataResult.optional(), cipherOwlMonitorData: cipherOwlMonitorDataResult.optional(), crystalMonitorData: crystalMonitorDataResultV2.optional(), cyversMonitorData: cyversMonitorDataResult.optional(), ellipticMonitorData: ellipticMonitorDataResult.optional(), errorName: z.string().optional(), explorerInfo: kytTxnCryptoExplorerInfo.optional(), merkleMonitorData: merkleMonitorDataResult.optional(), nominisMonitorData: nominisMonitorDataResult.optional(), trmLabsMonitorData: trmLabsMonitorDataResult.optional(), txnMonitorData: crystalMonitorDataResult.optional()}); export const owner = z.object({firstActivity: z.string().optional(), globalId: z.number().int().optional(), grade: z.number().int().optional(), id: z.number().int().optional(), lastActivity: z.string().optional(), name: z.string().optional(), size: z.number().int().optional(), slug: z.string().optional(), status: z.string().optional(), subtype: z.string().optional(), type: z.string().optional(), website: z.string().optional()}); export const updateTypeEnum = z.string(); export const riskScoreEntityUpdated = z.object({time: z.number().int().optional(), type: updateTypeEnum.optional()}); export const riskScoreEntity = z.object({riskScoreEntitySignals: riskScoreEntitySignals.optional(), updatedList: z.array(riskScoreEntityUpdated).optional(), value: z.number().optional()}); export const statusEnum = z.string(); export const topTxsDataSituational = z.object({delta: z.number().int().optional()}); export const topTxsData = z.object({block_time: z.number().int().optional(), confirmations: z.number().int().optional(), count_in: z.number().int().optional(), count_out: z.number().int().optional(), hash: z.string().optional(), pool_time: z.number().int().optional(), situational: topTxsDataSituational.optional(), total_in: z.number().int().optional(), total_out: z.number().int().optional()}); export const addressSummaryData = z.object({address: z.string().optional(), balance: z.number().int().optional(), firstActivity: z.string().optional(), getnTx: z.number().int().optional(), lastActivity: z.string().optional(), owner: owner.optional(), received: z.number().int().optional(), riskscore: riskScoreEntity.optional(), sharedBalance: z.number().int().optional(), sharedReceived: z.number().int().optional(), status: statusEnum.optional(), topTxs: z.array(topTxsData).optional()}); export const cryptoWalletRiskScoreInfo = z.object({addressSummaryData: addressSummaryData.optional(), riskScore: z.number().optional()}); export const paymentMethodCheck = z.object({answer: imageTestAnswer.optional(), bankCardRiskScoreInfo: bankCardRiskScoreInfo.optional(), checkType: paymentMethodCheckType.optional(), createdAt: z.string().optional(), cryptoTxnRiskScoreInfo: cryptoTxnRiskScoreInfo.optional(), cryptoWalletRiskScoreInfo: cryptoWalletRiskScoreInfo.optional(), id: z.string().optional(), inputData: applicantIdDoc.optional()}); export const reviewLabel = z.enum(["FORGERY", "HIGH_RISK", "CRIMINAL", "DOCUMENT_TEMPLATE", "LOW_QUALITY", "SPAM", "NOT_DOCUMENT", "SELFIE_MISMATCH", "ID_INVALID", "DOCUMENT_DEPRIVED", "FOREIGNER", "DUPLICATE", "BAD_AVATAR", "WRONG_USER_REGION", "WRONG_ADDRESS", "INCOMPLETE_DOCUMENT", "BLOCKLIST", "OTHER", "UNSATISFACTORY_PHOTOS", "GRAPHIC_EDITOR", "DOCUMENT_PAGE_MISSING", "DOCUMENT_DAMAGED", "DIGITAL_DOCUMENT", "REGULATIONS_VIOLATIONS", "INCONSISTENT_PROFILE", "PROBLEMATIC_APPLICANT_DATA", "GPS_AS_POA_SKIPPED", "ADDITIONAL_DOCUMENT_REQUIRED", "MORE_DOCUMENTS_REQUIRED", "AGE_REQUIREMENT_MISMATCH", "REQUESTED_DATA_MISMATCH", "EXPERIENCE_REQUIREMENT_MISMATCH", "COMPROMISED_PERSONS", "PEP", "ADVERSE_MEDIA", "FRAUDULENT_PATTERNS", "STOLEN_DOCS", "SCAM_VICTIM", "SANCTIONS", "NOT_ALL_CHECKS_COMPLETED", "FRONT_SIDE_MISSING", "BACK_SIDE_MISSING", "SCREENSHOTS", "BLACK_AND_WHITE", "INCOMPATIBLE_LANGUAGE", "EXPIRATION_DATE", "UNFILLED_ID", "BAD_SELFIE", "BAD_VIDEO_SELFIE", "BAD_FACE_MATCHING", "BAD_PROOF_OF_IDENTITY", "BAD_PROOF_OF_ADDRESS", "BAD_PROOF_OF_PAYMENT", "SUSPICIOUS_DOCUMENT", "SELFIE_WITH_PAPER", "FRAUDULENT_LIVENESS", "EXTERNAL_DECISION_REJECTION", "OK", "COMPANY_NOT_DEFINED_STRUCTURE", "COMPANY_NOT_DEFINED_BENEFICIARIES", "COMPANY_NOT_VALIDATED_BENEFICIAL_OWNERS", "COMPANY_NOT_VALIDATED_BENEFICIARIES", "COMPANY_NOT_VALIDATED_DIRECTORS", "COMPANY_NOT_DEFINED_REPRESENTATIVES", "COMPANY_NOT_VALIDATED_REPRESENTATIVES", "UNSUITABLE_DOCUMENT", "OUTDATED_DOCUMENT_VERSION", "COMPANY_NOT_DEFINED_OWNERSHIP_STRUCTURE", "COMPANY_INACTIVE_ENTITY", "COMPANY_INCORRECT_DATA", "COMPANY_PROBLEMATIC_STRUCTURE", "COMPANY_DATA_MISMATCH", "APPLICANT_INTERRUPTED_INTERVIEW", "DOCUMENT_MISSING", "UNSUITABLE_ENV", "CONNECTION_INTERRUPTED", "UNSUPPORTED_LANGUAGE", "THIRD_PARTY_INVOLVED", "INCORRECT_SOCIAL_NUMBER", "CHECK_UNAVAILABLE", "DB_DATA_NOT_FOUND", "DB_DATA_MISMATCH", "DB_NO_DATA_SOURCE", "ESIGN_FAILED", "RESTRICTED_PERSON", "NO_APPLICANT", "NO_SUITABLE_DOCS", "NOT_ALONE", "CONNECTION_ISSUES", "CAMERA_OR_LIGHTING_ISSUES", "SOUND_ISSUES", "PHONE_VERIFICATION_ISSUES", "OTHER_VI_ISSUES", "REFUSED_TO_CONTINUE", "VIDEO_FILTERS_OR_MASKS", "SUPPORTED_LANGUAGE_IS_NOT_AVAILABLE", "ADDITIONAL_DATA_REQUIRED", "VI_ATTEMPTS_LIMIT_REACHED", "BEHAVIOR", "PERSON_MISMATCH", "THIRD_PARTY_GUIDANCE", "SPONSORED_VERIFICATION", "INSUFFICIENT_DATA", "INCORRECT_PATTERNS"]); export const idDocDef = z.object({arbitraryDocType: z.string().optional(), country: z.string().optional(), idDocSubType: idDocSubType.optional(), idDocType: idDocType.optional(), pages: z.string().optional()}); export const reviewCreator = z.object({subjectName: z.string().max(256).optional()}); export const reviewRejectType = z.enum(["FINAL", "RETRY"]); export const reviewResult = z.object({buttonIds: z.array(z.string()).optional(), clientComment: z.string().optional(), moderationComment: z.string().optional(), rejectLabels: z.array(reviewLabel).optional(), requiredAdditionalIdDocs: z.array(idDocDef).optional(), reviewAnswer: imageTestAnswer.optional(), reviewCreator: reviewCreator.optional(), reviewRejectType: reviewRejectType.optional()}); export const idDocSetType = z.enum(["APPLICANT_DATA", "EMAIL_VERIFICATION", "PHONE_VERIFICATION", "IDENTITY", "IDENTITY2", "IDENTITY3", "IDENTITY4", "SELFIE", "SELFIE2", "PROOF_OF_RESIDENCE", "PROOF_OF_RESIDENCE2", "PROOF_OF_PAYMENT", "PAYMENT_METHODS", "INVESTABILITY", "COMPANY", "ACCREDITED_INVESTOR", "E_SIGN", "QUESTIONNAIRE", "QUESTIONNAIRE2", "QUESTIONNAIRE3", "QUESTIONNAIRE4", "E_KYC", "OTHER_DOCS", "COMPANY_DATA", "COMPANY_DOCUMENTS", "COMPANY_BENEFICIARIES", "COMPANY_ADDRESSES", "TR_RECIPIENT_INFORMATION", "DEVICE_CHECK", "SOLANA_ATTESTATION", "LINEA_ATTESTATION", "CHAINLINK_ATTESTATION"]); export const trackingData = z.object({applicantId: z.string().optional(), deviceFingerprint: z.string().optional(), externalDeviceFingerprint: z.string().optional(), idDocSetType: idDocSetType.optional(), ip: z.string().optional(), languages: z.array(z.string().max(8)).optional(), sessionId: z.string().optional(), timezoneOffset: z.string().max(10).optional(), userAgent: z.string().optional(), xClientId: z.string().optional(), xClientVersion: z.string().optional()}); export const paymentMethodType = z.enum(["bankCard", "eWallet", "wireTransfer", "cryptoWallet"]); export const paymentMethod = z.object({checks: z.array(paymentMethodCheck).optional(), createdAt: z.string().optional(), data: applicantIdDoc.optional(), deleted: z.boolean().optional(), direction: z.string().optional(), externalId: z.string().optional(), id: z.string().optional(), imageIds: z.array(z.string()).optional(), reviewResult: reviewResult.optional(), subType: z.string().optional(), tokenId: z.string().optional(), trackingData: trackingData.optional(), type: paymentMethodType.optional()}); export const paymentInfo = z.object({paymentMethods: z.array(paymentMethod).optional(), reviewResult: reviewResult.optional()}); export const applicantTin = z.object({country: z.string().max(3).optional(), tin: z.string().max(64).optional()}); export const applicantInfo = z.object({addresses: z.array(address).optional(), aliasName: z.string().optional(), aliasNameEn: z.string().max(100).optional(), companyInfo: applicantCompanyInfo.optional(), country: z.string().optional(), countryOfBirth: z.string().optional(), cryptoWallets: z.array(cryptoWallet).optional(), dob: z.string().optional(), estimatedAge: z.number().optional(), firstName: z.string().optional(), firstNameEn: z.string().optional(), gender: z.string().optional(), idDocs: z.array(applicantIdDoc).optional(), investability: applicantInvestability.optional(), lastName: z.string().optional(), lastNameEn: z.string().optional(), legalName: z.string().optional(), middleName: z.string().optional(), middleNameEn: z.string().optional(), mobilePhone: z.string().optional(), nationality: z.string().optional(), parentName1: z.string().max(128).optional(), parentName2: z.string().max(128).optional(), paymentInfo: paymentInfo.optional(), phone: z.string().optional(), placeOfBirth: z.string().optional(), placeOfBirthEn: z.string().optional(), residenceCountry: z.string().optional(), stateOfBirth: z.string().optional(), taxResidenceCountry: z.string().optional(), tin: z.string().optional(), tins: z.array(applicantTin).optional(), title: z.string().optional()}); export const applicantReference = z.object({applicantId: z.string().optional(), fullName: z.string().optional(), inactive: z.boolean().optional()}); export const applicantNote = z.object({clientEntry: z.boolean().optional(), createdAt: z.string().optional(), moderatorName: z.string().optional(), note: z.string().optional()}); export const questionnaireItemDataScore = z.object({score: z.number().optional(), value: z.string().optional()}); export const questionnaireItemData = z.object({dataScores: z.array(questionnaireItemDataScore).optional(), score: z.number().optional(), value: z.string().optional(), values: z.array(z.string()).optional()}); export const questionnaireSectionData = z.object({items: z.record(z.string(), questionnaireItemData).optional(), score: z.number().optional()}); export const questionnaireData = z.object({completionLevel: z.string().optional(), id: z.string().optional(), score: z.number().optional(), sections: z.record(z.string(), questionnaireSectionData).optional(), systemDefinition: z.boolean().optional()}); export const applicantDataSettings = z.object({prefill: z.boolean().optional()}); export const applicantIdDocSetCaptureMode = z.enum(["manualAndAuto", "manualOnly", "manualAfterTimeout", "seamless"]); export const checkSource = z.object({sourceId: z.string().optional()}); export const checkSourceConfig = z.object({sources: z.array(checkSource).optional()}); export const backgroundCheckType = z.string(); export const fallbackReason = z.string(); export const checkSourceExecutionConfiguration = z.object({fallbackReasons: z.array(fallbackReason), sourceId: z.string()}); export const checkSourceSettingsGroupType = z.string(); export const checkSourceCountrySettings = z.object({checkType: backgroundCheckType.optional(), country: z.string().optional(), executionConfigurations: z.array(checkSourceExecutionConfiguration).optional(), groupType: checkSourceSettingsGroupType.optional()}); export const checkSourceLevelSettings = z.object({countrySettings: z.array(checkSourceCountrySettings).optional()}); export const applicantIdDocSetField = z.object({immutableIfPresent: z.boolean().optional(), name: z.string(), prefill: z.boolean().optional(), required: z.boolean().optional()}); export const companyAddressGroupDefinition = z.object({addressType: companyAddressType.optional(), enableAddressGeoVerification: z.boolean().optional(), fields: z.array(applicantIdDocSetField).optional(), imageRequired: z.boolean().optional()}); export const companyBeneficiaryGroupCategory = z.enum(["ubos", "shareholders", "directors", "representatives", "companyOfficers", "secretaries", "founders", "investors", "legalAdvisors", "authorizedSignatories", "trustees", "trustBeneficiaries", "trustSettlors", "trustProtectors", "managingPartners", "equityPartners", "fundInvestors", "fundManagers", "investmentManagers", "investmentAdvisers", "fundAdministrators", "depositaries", "custodians", "primeBrokers", "accountUsers", "payers"]); export const applicantIdDocSetCustomField = z.object({displayName: z.string().optional(), immutableIfPresent: z.boolean().optional(), name: z.string(), required: z.boolean().optional()}); export const companyBeneficiaryTypeDefinition = z.object({customFields: z.array(applicantIdDocSetCustomField).optional(), enabled: z.boolean().optional(), fields: z.array(applicantIdDocSetField).optional(), levelName: z.string().optional()}); export const companyBeneficiaryGroupDefinition = z.object({canSkip: z.boolean().optional(), category: companyBeneficiaryGroupCategory.optional(), company: companyBeneficiaryTypeDefinition.optional(), individual: companyBeneficiaryTypeDefinition.optional(), maxAllowed: z.number().int().gte(1).lte(100).optional(), minRequired: z.number().int().gte(1).lte(100).optional()}); export const companyDocsGroupLabel = z.enum(["legalPresence", "companyDetails", "ownershipStructure", "controlStructure", "representativesAuthorization", "other1", "other2", "other3"]); export const companyDocsGroupDefinition = z.object({label: companyDocsGroupLabel.optional(), required: z.boolean().optional(), subTypes: z.array(idDocSubType).optional()}); export const emailVerificationSettings = z.object({immutableEmailIfPresent: z.boolean().optional()}); export const eSignFieldMapping = z.object({fieldName: z.string().max(256), fillAtSigning: z.boolean().optional(), valueExpr: z.string().max(2048)}); export const eSignSignaturePageSetting = z.object({height: z.number().int().optional(), page: z.number().int().optional(), width: z.number().int().optional(), x: z.number().int().optional(), y: z.number().int().optional()}); export const eSignSignatureSetting = z.object({pages: z.array(eSignSignaturePageSetting).optional()}); export const eSignDocSetting = z.object({agreementText: z.string().max(1000).optional(), fieldMappings: z.array(eSignFieldMapping).optional(), fieldNames: z.array(z.string().max(256)).optional(), fileImageId: z.string().max(64).optional(), imageFileName: z.string().max(128).optional(), optional: z.boolean().optional(), signatures: z.array(eSignSignatureSetting).optional()}); export const eSignSignatureType = z.string(); export const eSignSettings = z.object({docSettings: z.array(eSignDocSetting).optional(), signatureType: eSignSignatureType.optional(), signingConsentText: z.string().max(1000).optional()}); export const applicantIdDocSetMode = z.string(); export const nfcVerificationMode = z.enum(["disabled", "optional", "required"]); export const nfcVerificationSettings = z.object({mode: nfcVerificationMode.optional()}); export const requiredPhotosAmount = z.string(); export const applicantPaymentMethodSettings = z.object({customFields: z.array(applicantIdDocSetCustomField).optional(), definitionsSubTypes: z.array(z.string()).optional(), fields: z.array(applicantIdDocSetField).optional(), requiredPhotos: z.boolean().optional(), requiredPhotosAmount: requiredPhotosAmount.optional(), subTypes: z.array(z.string()).optional(), type: z.string().optional()}); export const paymentSourceType = z.enum(["bankCard", "bankStatement", "eWallet", "cryptoWallet"]); export const paymentSourceBankAccountLevelSettings = z.object({allowBankStatementUpload: z.boolean().optional(), allowExternalSourcesCheck: z.boolean().optional(), allowUserToProvideNameForVopCheck: z.boolean().optional(), allowed: z.boolean().optional(), performVopCheck: z.boolean().optional()}); export const paymentSourceBankCardImagesCount = z.string(); export const paymentSourceBankCardLevelSettings = z.object({allowed: z.boolean().optional(), countImages: paymentSourceBankCardImagesCount.optional(), extractIban: z.boolean().optional(), extractNationalBankAccountNumbers: z.boolean().optional(), performVopCheck: z.boolean().optional(), requireBankAccountNumber: z.boolean().optional()}); export const paymentSourceUnhostedWalletCheckType = z.enum(["signature", "quickproof", "form", "satoshiTest", "manualByClient"]); export const paymentSourceUnhostedWalletFormType = z.string(); export const paymentSourceCryptoWalletLevelSettings = z.object({allowed: z.boolean().optional(), cryptoSignatureAllowed: z.boolean().optional(), primaryVerificationMethod: paymentSourceUnhostedWalletCheckType.optional(), satoshiTestAllowed: z.boolean().optional(), unhostedWalletFormType: paymentSourceUnhostedWalletFormType.optional()}); export const paymentSourceEWalletLevelSettings = z.object({allowed: z.boolean().optional()}); export const paymentSourceTypeLevelSettings = z.object({bankAccount: paymentSourceBankAccountLevelSettings.optional(), bankCard: paymentSourceBankCardLevelSettings.optional(), cryptoWallet: paymentSourceCryptoWalletLevelSettings.optional(), eWallet: paymentSourceEWalletLevelSettings.optional()}); export const walletScreeningProvider = z.enum(["crystal", "merkle", "trmLabs", "chainalysis", "elliptic", "cyvers", "nominis", "cipherOwl"]); export const paymentSourceLevelSettings = z.object({allowScreenshots: z.boolean().optional(), riskScorePaymentSourceType: paymentSourceType.optional(), skipOwnershipCheck: z.boolean().optional(), skipRiskScoreCheck: z.boolean().optional(), typeSettings: paymentSourceTypeLevelSettings.optional(), unhostedWalletFormType: paymentSourceUnhostedWalletFormType.optional(), walletScreeningProvider: walletScreeningProvider.optional()}); export const phoneVerificationSettings = z.object({immutablePhoneIfPresent: z.boolean().optional()}); export const questionnaireProcessingSettings = z.object({skipIfFilled: z.boolean().optional()}); export const selfieProcessingSettings = z.object({skipFaceMatchCheck: z.boolean().optional(), skipLivenessCheck: z.boolean().optional()}); export const applicantIdDocSetStep = z.object({applicantLevelName: z.string().optional(), captureMode: z.string().optional(), customFields: z.array(applicantIdDocSetCustomField).optional(), fields: z.array(applicantIdDocSetField).optional(), idDocSubTypes: z.array(idDocSubType).optional(), idDocTypes: z.array(idDocType).optional(), minDocsCnt: z.number().int().optional(), name: z.string().optional()}); export const applicantIdDocSetUploaderMode = z.enum(["always", "never", "fallback"]); export const videoRequired = z.enum(["disabled", "enabled", "photoRequired", "passiveLiveness", "docapture"]); export const applicantIdDocSet = z.object({applicantDataSettings: applicantDataSettings.optional(), captureMode: applicantIdDocSetCaptureMode.optional(), checkSourceConfig: checkSourceConfig.optional(), checkSourceSettings: checkSourceLevelSettings.optional(), companyAddressGroupDefinitions: z.array(companyAddressGroupDefinition).optional(), companyBeneficiaryDefinitions: z.array(companyBeneficiaryGroupDefinition).optional(), companyDocsGroupDefinitions: z.array(companyDocsGroupDefinition).optional(), customFields: z.array(applicantIdDocSetCustomField).optional(), emailVerificationSettings: emailVerificationSettings.optional(), esignSettings: eSignSettings.optional(), fields: z.array(applicantIdDocSetField).optional(), idDocSetType: idDocSetType.optional(), mode: applicantIdDocSetMode.optional(), nfcVerificationSettings: nfcVerificationSettings.optional(), paymentMethods: z.array(applicantPaymentMethodSettings).optional(), paymentSourceSettings: paymentSourceLevelSettings.optional(), phoneVerificationSettings: phoneVerificationSettings.optional(), poaStepSettingsId: z.string().optional(), questionnaireDefId: z.string().optional(), questionnaireProcessingSettings: questionnaireProcessingSettings.optional(), restrictCountries: z.boolean().optional(), selfieProcessingSettings: selfieProcessingSettings.optional(), skipAllowed: z.boolean().optional(), steps: z.array(applicantIdDocSetStep).optional(), subTypes: z.array(idDocSubType).optional(), types: z.array(idDocType).optional(), uploaderMode: applicantIdDocSetUploaderMode.optional(), videoRequired: videoRequired.optional()}); export const applicantDocumentsKybSettings = z.object({disableCompanySearchAndPrefill: z.boolean().optional(), enableBeneficiariesAutoCheck: z.boolean().optional(), primaryContactLevelName: z.string().optional(), primaryContactRequired: z.boolean().optional(), shareholderThreshold: z.number().optional(), uboThreshold: z.number().optional()}); export const realTimeIdentificationRecordingReviewMode = z.enum(["managedReview", "clientReview", "autoReview"]); export const realTimeIdentificationRecordingSettings = z.object({recordingReviewMode: realTimeIdentificationRecordingReviewMode.optional()}); export const applicantDocumentsVideoIdentSettings = z.object({extendPreuploadCandidateDocs: z.array(idDocSetType).optional(), resetAllStepsOnEachAttempt: z.boolean().optional()}); export const applicantDocuments = z.object({country: z.string().optional(), docSets: z.array(applicantIdDocSet).optional(), excludedCountries: z.array(z.string()).optional(), includedCountries: z.array(z.string()).optional(), kybSettings: applicantDocumentsKybSettings.optional(), realTimeIdentificationRecording: z.boolean().optional(), realTimeIdentificationRecordingSettings: realTimeIdentificationRecordingSettings.optional(), stepsOutsideVideoId: z.array(z.string()).optional(), videoIdent: z.boolean().optional(), videoIdentSettings: applicantDocumentsVideoIdentSettings.optional(), videoIdentUploadTypes: z.array(z.string()).optional()}); export const reviewMode = z.string(); export const reviewStatus = z.enum(["init", "pending", "queued", "awaitingUser", "onHold", "prechecked", "completed", "awaitingService"]); export const inspectionReview = z.object({attemptCnt: z.number().int().optional(), attemptId: z.string().optional(), confirmed: z.boolean().optional(), createDate: z.string().optional(), elapsedSincePendingMs: z.number().int().optional(), elapsedSinceQueuedMs: z.number().int().optional(), expireDate: z.string().optional(), lastResetDate: z.string().optional(), levelName: z.string().optional(), officerName: z.string().optional(), priority: z.number().int().optional(), reprocessing: z.boolean().optional(), reuseAttemptId: z.string().optional(), reviewDate: z.string().optional(), reviewId: z.string().optional(), reviewMode: reviewMode.optional(), reviewReasonCode: z.string().optional(), reviewResult: reviewResult.optional(), reviewStatus: reviewStatus.optional(), startDate: z.string().optional()}); export const amlRiskLabel = z.enum(["pep", "sanctions", "terrorism", "crime", "adverseMedia", "fitnessProbity"]); export const companyRiskLabel = z.enum(["companyAdditionalDataNotFound", "companyDataMismatch", "companyDocumentMissedRequiredField", "companyDocumentDataMismatch", "companyOwnershipDataNotFound", "companyBeneficialOwnershipDataNotFound", "companyOfficersDataNotFound", "companyRepresentativeMissed", "companyDocumentGraphicEditor", "companyAddressGeoRegistryMismatch", "companyAssociatedPartyDataMismatch", "companyExcessiveAssociatedParties", "companyHasBeneficiaryRejected", "companyAddressDoesntExist", "companyTradeAddressDoesntMatchThePlace"]); export const crossCheckRiskLabel = z.enum(["diverseIdDocCountries", "manyAccountDuplicates", "accountsInManyServices", "addressCountryVsIpCountryMismatch", "idDocCountryVsIpCountryMismatch", "exifCountryVsIdDocCountryOrIpCountryMismatch", "ipLocationVsTimezoneMismatch", "browserLanguageMismatch", "emailDomainCountryMismatch", "strongLinkToFraudulentApplicants", "potentialLinkToFraudulentApplicants"]); export const deviceRiskLabel = z.enum(["vpnUsage", "torUsage", "proxyUsage", "hostingProviderUsage", "relayUsage", "mediumRiskIp", "highRiskIp", "multipleDevices", "multipleMobileDevices", "lengthySession", "quickSession", "failedSessionContinuation", "distantIpLocations", "thirdPartyLinkAccess", "riskySessionContinuation", "nightTimeActivity", "manyApplicantsSameDevice", "mediumChanceResidentialProxy", "highChanceResidentialProxy"]); export const antifraudDeviceCheckRiskLabel = z.enum(["badBot", "tampering", "antiDetectBrowser", "virtualMachine", "privacySettingsMode", "factoryReset", "rooted", "emulator", "clonedApp", "jailbroken", "fridaTool", "locationSpoofing", "mitmAttack", "goodBot", "incognito", "developerTools", "highActivity", "adblock"]); export const emailRiskLabel = z.enum(["mediumRisk", "highRisk", "disposable", "noWebRegistrations", "noWebsiteExists", "nonDeliverable", "invalidEmail", "gibberish", "freshEmail", "plusAddressing", "excessiveDots"]); export const personRiskLabel = z.enum(["famousPerson", "strangeName", "noPhoneNamesFromWebServices", "phoneNamePartialMismatchFromWebServices", "phoneNameMismatchFromWebServices", "noEmailNamesFromWebServices", "emailNamePartialMismatchFromWebServices", "emailNameMismatchFromWebServices", "manyUniquePersonsLinkedToContactData"]); export const phoneRiskLabel = z.enum(["mediumRisk", "highRisk", "virtual", "noWebRegistrations", "disposable", "freshPhone", "phoneCountryVsApplicantCountryMismatch", "phoneCountryVsIpCountryMismatch", "phoneCountryVsAddressCountryMismatch", "phoneCountryVsEmailDomainCountryMismatch", "phoneCountryVsCompanyCountryMismatch"]); export const selfieRiskLabel = z.enum(["asleep", "estimatedAgeMismatch", "virtualCameraPresent", "manyAttempts", "sameFaceWithDifferentData", "thirdPartyInvolved", "phone"]); export const applicantRiskLabels = z.object({aml: z.array(amlRiskLabel).optional(), attemptId: z.string().optional(), company: z.array(companyRiskLabel).optional(), createdAt: z.string().optional(), crossCheck: z.array(crossCheckRiskLabel).optional(), device: z.array(deviceRiskLabel).optional(), deviceCheck: z.array(antifraudDeviceCheckRiskLabel).optional(), email: z.array(emailRiskLabel).optional(), person: z.array(personRiskLabel).optional(), phone: z.array(phoneRiskLabel).optional(), selfie: z.array(selfieRiskLabel).optional()}); export const applicantReadonlyScope = z.string(); export const applicantStructuredMetadata = z.object({readOnlySettings: z.array(applicantReadonlyScope).optional()}); export const applicantType = z.enum(["individual", "company"]); export const applicantPublicDto = z.object({agreement: applicantAgreement.optional(), applicantPlatform: z.string().optional(), assessment: applicantAssessment.optional(), authCode: z.string().optional(), clientId: z.string().optional(), createdAt: z.string().optional(), deleted: z.boolean().optional(), email: z.string().optional(), externalUserId: z.string().max(512).optional(), fixedInfo: applicantInfo.optional(), id: z.string().optional(), info: applicantInfo.optional(), inspectionId: z.string().optional(), ipCountry: z.string().optional(), lang: z.string().optional(), memberOf: z.array(applicantReference).optional(), metadata: z.array(applicantMetadataKV).optional(), notes: z.array(applicantNote).optional(), phone: z.string().optional(), questionnaires: z.array(questionnaireData).optional(), registrationDate: z.string().optional(), requiredIdDocs: applicantDocuments.optional(), review: inspectionReview.optional(), riskLabels: applicantRiskLabels.optional(), sourceKey: z.string().optional(), structuredMetadata: applicantStructuredMetadata.optional(), tags: z.array(z.string()).optional(), type: applicantType.optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * POST /resources/applicants/{applicantId}/-/init */ export const createApiResourcesApplicantsApplicantIdInit = async (args: CreateApiResourcesApplicantsApplicantIdInitArgs, options: CreateApiResourcesApplicantsApplicantIdInitOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json;charset=UTF-8") headers.set('accept', "application/json;charset=UTF-8") const url = `${baseUrl.replace(/\/+$/, '')}/resources/applicants/${encodeURIComponent(String(args.applicantId))}/-/init${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(applicantPublicDto, await res.json()) };