Investor onboarding
Registration through to an address on the compliance registry
Screening happens once per investor and covers every approved token on the platform. That is the whole point of a shared registry rather than a per-asset whitelist.
Real elapsed time: minutes to two business days · 2 external system call(s) · simulated round trip 9,675 msInvestor submits an application
Identity details and a document reference. The account exists immediately but cannot subscribe to anything yet.
{
"fullName" : "Omar Haddad",
"email" : "omar@example.ae",
"residency" : "UAE resident",
"idDocument" : "Emirates ID 784-1982-*******"
}
{
"accountRef" : "INV-104",
"kycStatus" : "Pending",
"canBrowse" : true,
"canFund" : true,
"canSubscribe" : false
}
What changed
- Account INV-104 created
- Screening queued
- Subscription blocked
Identity verification with the KYC provider
Document authenticity, liveness and a data match against the identity issuer. The platform never performs this itself — it integrates a licensed provider.
{
"applicantRef" : "INV-104",
"documentType" : "emirates_id",
"checks" : ["authenticity", "liveness", "data_match"],
"callbackUrl" : "https://platform/webhooks/kyc"
}
{
"verificationId" : "VER-88214",
"documentValid" : true,
"livenessScore" : 0.97,
"dataMatch" : "exact",
"result" : "clear"
}
What changed
- Identity verified
- Verification VER-88214 retained as evidence
Sanctions and adverse media screening
Screened against sanctions lists, politically exposed person lists and adverse media. This is re-run periodically, not only at onboarding.
{
"applicantRef" : "INV-104",
"lists" : ["UN", "OFAC", "EU", "UAE local terror list"],
"pepCheck" : true,
"adverseMedia" : true,
"monitoring" : "ongoing"
}
{
"screeningId" : "SCR-44197",
"sanctionsHits": 0,
"pepHits" : 0,
"adverseMedia" : 0,
"riskRating" : "low",
"result" : "clear",
"ongoingMonitoring" : "enabled"
}
What changed
- No sanctions or PEP hits
- Ongoing monitoring enabled on this account
Ongoing monitoring matters: an investor who is clear today can become a hit later, and the registry has to be able to revoke.
Compliance officer records the decision
A human decision, not an automatic pass. The provider gives evidence; a named officer accepts or refuses it, and the decision is attributable.
{
"accountRef" : "INV-104",
"decision" : "approve",
"basis" : ["VER-88214", "SCR-44197"],
"note" : "Emirates ID verified, source of funds evidenced.",
"decidedBy" : "compliance officer"
}
{
"kycStatus" : "Approved",
"decidedAt" : "recorded",
"registryWrite": "queued"
}
What changed
- Account status Approved
- Decision attributable to a named officer
Address written to the on-chain registry
The whitelist is on-chain, shared by every asset. From this moment the investor is eligible for every approved token on the platform, and the contract will accept transfers to them.
{
"method" : "IdentityRegistry.registerIdentity",
"params" : {
"address" : "0x4b8e2f91cc07a5d3e6148b0f7a92dd3410e5c6b8",
"accountRef" : "INV-104",
"country" : "AE",
"claims" : ["kyc_verified", "sanctions_clear"],
"expiry" : "2027-08-12"
},
"registry" : "0x72570b72a4dc3b5de89155470ee0072df40c2d29"
}
{
"registered" : true,
"txHash" : "0x3ac1...9e07",
"eligibleAssets" : "all approved tokens",
"note" : "No per-asset whitelisting required"
}
What changed
- Address on the shared registry
- Eligible across every approved asset
- Claim expires in 12 months, forcing re-screening
One write, not one per property. A competitor who whitelists per asset pays that cost on every new listing forever.