Loading…
Loading…
Everything you need to integrate KUMPLY — smart contracts, SDK, REST API, the Compliance L1, and the KYA Tier-5 primitive.
Two-layer compliance primitive: on-chain attestations on C-Chain (live) + a dedicated KYB-gated Avalanche L1 (registered on Fuji, not yet activated). All five tiers (KYC, KYB, KYA) compose with any DApp via the ComplianceGate contract.
Install the SDK and verify any address’s tier in under a minute. Deployed on Mainnet C-Chain as a read-only beta; attestations are issued on Fuji today.
pnpm add @kumply/sdk viemimport { KumplyClient } from "@kumply/sdk";
const client = new KumplyClient({
network: "mainnet",
contractAddress: "0xa116261Ed3a848A9E1cd34923D5A0442D1455F71",
});
const { verified, tier, expiry } = await client.verify(
"0xUserAddress…"
);
// Tiers 1-3: people (a ladder). 4: business (KYB). 5: agent (KYA).
if (verified && tier === 4) {
// the counterparty is a KYB-verified business: proceed
}// Solidity: gate your own functions with verify()
interface IAttestationStore {
function verify(address) external view
returns (bool, uint32, uint64, uint64);
}
contract MyDApp {
IAttestationStore constant kumply =
IAttestationStore(0xa116261Ed3a848A9E1cd34923D5A0442D1455F71);
function deposit() external {
(bool ok, uint32 tier, , ) = kumply.verify(msg.sender);
// people with Standard (2) or Enhanced (3) KYC only
require(ok && tier >= 2 && tier <= 3, "person KYC required");
// your logic
}
}All KUMPLY contracts are deployed and verified on Avalanche Mainnet C-Chain and Fuji. Each is open-source, audited internally, and documented with NatSpec.
0xa116261Ed3a848A9E1cd34923D5A0442D1455F710x01BEEA13A485c7bAD58f926E345325e9e3773bEe0xa3Bc5564A18e107807aF41fF2a5215Db050b22dD0xcFDdeA5482baE9A6733B58F6a39FC36BCe6164cFNote: both deployed ComplianceGate contracts check tier >= requiredTier with requiredTier = 2, the old single-ladder rule, so a Tier 4 business or a Tier 5 agent passes them. They are immutable; a category-aware gate is planned for mainnet hardening. For new integrations, call verify() and compare by category (see the tier rule).
0x935114966Ac6CB6Ec569c8C6959aDF5Ceb9E6f64// AttestationStore
verify(address) → (bool, uint32, uint64, uint64)
checkCompliance(address) payable → (bool, uint32)
issueAttestation(address, uint32 tier, uint64 expiry)
revoke(address)
setSubscription(address gate, bool)
setVerificationFee(uint256 wei)
// ComplianceGate
protectedAction() payable
updateRequiredTier(uint32)
getVerificationFee() view
// KumplyValidatorSetManager (ACP-99)
initiateValidatorRegistration(nodeID, blsKey, balOwner, disOwner, weight)
completeValidatorRegistration(messageIndex)
initiateValidatorRemoval(validationID)
completeValidatorRemoval(messageIndex)
initiateValidatorWeightUpdate(validationID, newWeight)
disableExpiredValidator(validationID)TypeScript-first, built on viem. Tree-shakable, zero runtime dependencies beyond viem.
import { KumplyClient, ATTESTATION_STORE_ABI, TIER } from "@kumply/sdk";
const client = new KumplyClient({
network: "mainnet",
contractAddress: "0xa116261Ed3a848A9E1cd34923D5A0442D1455F71",
});
// Read methods (free, no gas)
await client.verify(address); // → { verified, tier, timestamp, expiry }
await client.isVerified(address); // → boolean
await client.isPersonAtLeast(address, TIER.STANDARD); // → boolean (person, tier 2-3)
await client.isBusiness(address); // → boolean (exactly tier 4)
await client.isAgent(address); // → boolean (exactly tier 5)
await client.getTotalAttestations(); // → bigint
await client.getVerificationFee(); // → wei (current pay-per-use price)
// Network info
client.network; // "fuji" | "mainnet"
client.chainId; // 43113 | 43114
client.publicClient; // viem PublicClient (advanced use)Full API reference and type definitions live in the @kumply/sdk package. All reads are gas-free; writes require a verifier role.
Express + TypeScript backend that proxies Sumsub and bridges KYC results to on-chain attestations via HMAC-verified webhooks.
GET /healthHealth probe for load balancers.
POST /api/tokenGenerate a Sumsub access token for the WebSDK. API-key protected.
POST /webhook/sumsubSumsub webhook receiver. HMAC-SHA256 verified, idempotent.
GET /attestation/:addressLook up the on-chain attestation for any address.
GET /feeCurrent per-call pay-per-use fee in wei (AVAX).
OpenAPI 3.0 spec: openapi.yaml ↗
Dedicated Avalanche L1 (Subnet-EVM), KYB-gated at the security layer, open to all 5 tiers as users.
2buHAwNvaybnQ6vQYRS4TeXizZhAo33bhpnonAJu21CKYLZoST2pyvAQK1WQ318yHtnv4ZQeL9hWeJmmgMp9MEHqpJnDYttQEL6b43210KMP — utility gas only · not listed · not for saleKUMPLY's primitive for autonomous AI agents. As agentic DeFi grows, protocols need a way to tell accountable, bounded agents from anonymous scripts. KUMPLY's approach: agent verification tied to a KYB-verified owner, inside the same attestation system as KYC and KYB. Today a Tier 5 attestation records the agent's tier and expiry; the fields below are planned.
Terminology note: "KYA" is KUMPLY's own tier name, unrelated to KYA-OS, the DIF-governed identity protocol for MCP agents (github.com/decentralized-identity/kya-os-mcp) — same acronym, different standard.
Each tier maps to a real-world verification depth and unlocks different on-chain actions.
Full system diagrams (Mermaid, GitHub-rendered) plus deep dives into the ACP-99 two-phase Warp lifecycle.
Everything else — repo, paper, explorers, standards, and contact.