Desk with paperwork representing KYC review without central warehouse
Worked example 3 min read

A worked example: KYC eligibility without building a PII warehouse

You already have the customer. This walkthrough shows how to answer a new eligibility question without building another database full of passports.

Meet a mid-size UK lender. They onboarded customers years ago. Core banking holds name, address, risk grade, and KYC refresh date. Product wants a new line of credit. Compliance wants evidence the customer still qualifies. Engineering does not want another S3 bucket labelled passports_final_v7.

This walkthrough follows one application from policy definition to signed outcome. Names are fictional. The constraints are not.

Starting state

  • Core record on the lending host (masked account ID, KYC tier, last refresh).
  • Sanctions and PEP lists synced nightly to the same VPC.
  • Decision service that today emails ops for manual checks.
  • Document images in an onboarding archive, not queried for every product change.

Step 1: Define the question narrowly

Compliance writes one sentence: Eligible for Product B if KYC tier at least 2, refresh within 12 months, no active sanctions hit. Everything else is out of scope. No affordability model in this pass. No open banking pull. A narrow question keeps the prove path honest.

Step 2: Map inputs that already exist

InputLocationLeaves host?
KYC tierCore lending DBNo
Last refresh dateCore lending DBNo
Sanctions listVPC object storeNo
OutcomeDecision serviceSigned yes/no only

If a field is missing, the outcome is cannot prove, not a silent pass. That distinction matters for auditors.

Step 3: Prove on the lending host

AffixIO runs beside the record. It evaluates the policy, returns a signed outcome. The decision service stores hash, timestamp, and ML-DSA signature. Ops sees eligible or not eligible in their existing UI. No new data lake. No nightly ETL of document images.

Sample outcome record (illustrative)

  • policy_id: product_b_kyc_v3
  • outcome: eligible
  • proved_at: 2026-08-28T09:14:00+01:00
  • method: on_host_prove
  • signature_alg: ML-DSA-65

Step 4: Wire customer-facing gates

For high-risk paths the lender uses Finance Gate to show the same outcome at the channel edge without exposing internal fields. The customer sees approved or referred. The verifier sees only the signed payload.

They did not build a PII warehouse. They built a habit of proving where the truth already lived.

What they did not build

No central PII warehouse. No nightly export of document images. No duplicate GDPR processor for a copy nobody needed. When policy changes, they bump policy_id and re-prove. Historical outcomes remain verifiable because signatures bind to the policy version.

On the host

The prove step

Where AffixIO fits in this KYC example

This walkthrough is a pattern, not a customer story. The lender already had KYC. The missing piece was a new proof on that host, without a second warehouse.

  1. StaysCore banking
  2. Runs herepolicy_id prove
  3. LeavesChannel yes/no

In this pattern, prove deploys on the lending host inside the VPC that holds core banking. The decision service calls prove with policy_id and account reference. KYC tier, refresh date and sanctions hits are read locally. Channel apps see the signed eligible or not eligible through Finance Gate, not the internal fields.

What stays on the host

  • The KYC file. No new S3 bucket, ETL job, or second processor agreement in the pattern.
  • Policy version. Outcome records bind to the rule that produced them, for later replay.
  • SDK wiring. Integration paths are on Developers.
  • Ops traffic. Straight-through cases do not need a mailbox of screenshots.

What the channel receives

  • Eligible or not eligible. Timestamp, method, algorithm.
  • Reuse of onboarding. The bureau work stays once. Prove answers later questions.
  • A policy_id change. New rules do not require a warehouse rebuild.
  • A trial on your data. Hub proofs run against a policy you define, not a demo persona we invented as a client.

Wire a policy_id on a host you already have

Hub sign-up is free. 100 SDK proof credits for 30 days after email confirmation. No card.

Developers: start at Developers and Product.

Free Hub trial

100 proofs. No card. Yours in minutes.

Sign up free, confirm your email, and redeem 100 SDK proof credits for 30 days. Run real eligibility checks on your stack before you commit to a licence.

  • Free sign-up at Hub
  • 100 proofs after email confirmation
  • 30-day window to use them
  • No overage on trial

Questions we hear often

Short answers for teams evaluating eligibility checks, audits, and privacy posture.

Do we need a data lake of identity documents?

Only if your policy says so. Many eligibility questions can be answered from fields you already validated at onboarding.

What triggers a re-check in this example?

A new product application: the lender must confirm the customer still meets affordability and sanctions policy before increasing exposure.

What gets stored after the check?

A signed outcome, timestamp, policy version, and method. Not a fresh copy of the passport image.

Where does AffixIO sit in the stack?

On the host that can read the core record. It returns the yes/no and signature to your decision service.