> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trusset.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Customers Overview

> Customer lifecycle management - onboarding, verification, and synchronization

The `customers` module covers the full investor lifecycle: creating customer records, verifying identities on-chain via the <Tooltip tip="UUPS-upgradeable smart contract managing KYC/AML state for regulated token transfers">IdentityRegistry</Tooltip> contract, sending KYC verification links, and bulk-synchronizing with your existing databases.

```typescript theme={null}
const trusset = new TrussetClient({ apiKey: '...' })

// All customer operations live under trusset.customers
trusset.customers.manage    // CRUD, search, wallet linking
trusset.customers.identity  // On-chain verification, claims, compliance checks
trusset.customers.idLinks   // KYC verification links via Sumsub
trusset.customers.profiles  // Verification profiles of the instance (beta)
trusset.customers.sync      // Bulk import/export for database migration
```

## Sub-modules

<CardGroup cols={2}>
  <Card title="KYC Proofs" icon="fingerprint" href="/sdk/customers/kyc-proofs">
    The core journey: generate zk-STARK KYC proofs locally, verify customers on-chain with the root hash, add proof-backed claims.
  </Card>

  <Card title="Management" icon="address-book" href="/sdk/customers/management">
    Create, update, search, and archive customer records. Link wallets to pre-registered customers. Query by name, address, external ID, or reference key.
  </Card>

  <Card title="Identity Verification" icon="shield-check" href="/sdk/customers/identity">
    Verify identities on-chain, manage claims, check KYC status, run transfer compliance checks. Single and batch operations with full transaction receipts.
  </Card>

  <Card title="ID Links" icon="link" href="/sdk/customers/id-links">
    Generate and manage Sumsub-powered KYC verification links. Send via email or SMS, optionally charge a fee, track status, revoke or resend.
  </Card>

  <Card title="Verification Profiles" icon="id-card" href="/sdk/customers/verification-profiles">
    Read the reusable KYC requirement sets configured on your instance (beta).
  </Card>

  <Card title="Database Sync" icon="rotate" href="/sdk/customers/sync">
    Bulk-import customer records from existing systems. Configurable conflict resolution, optional on-chain verification, progress tracking.
  </Card>
</CardGroup>

## Typical integration flow

A bank onboarding existing customers onto tokenized assets typically follows this sequence:

<Steps>
  <Step title="Import existing customers">
    Use `sync.importRecords` to batch-import customer records from your core banking system, mapped by your internal customer ID (`externalId`). Customers without a wallet address receive a `referenceKey` for later linking.
  </Step>

  <Step title="Generate KYC proofs locally">
    Run the [KYC proof tool](/sdk/customers/kyc-proofs) against the customers you have already KYC'd. It produces a proof bundle and a root hash per customer - no KYC data ever leaves your infrastructure.
  </Step>

  <Step title="Collect wallets">
    For customers who already have a wallet, use `manage.linkWallet` to associate their address with their Trusset record. For investors who still need identity verification, send hosted KYC links via `idLinks.create` instead - they complete Sumsub and connect a wallet themselves.
  </Step>

  <Step title="Verify on-chain">
    Call `identity.verifyFromManifest` per customer, or `identity.batchVerify` with each subject's root hash, to register identities on the IdentityRegistry contract. This enables compliant token transfers for those addresses.
  </Step>

  <Step title="Add claims">
    Use `identity.addClaimsFromProof` to attach proof-backed claims (KYC, residency, citizenship, accreditation) and `identity.addClaim` for your own attestations (AML, sanctions, PEP, tax residency).
  </Step>

  <Step title="Ongoing compliance">
    Use `identity.canTransfer` before token operations to check real-time compliance. Use `identity.getStatus` to monitor KYC expiry and on-chain state.
  </Step>
</Steps>
