World ID
Identity
Official
Best for: Proving the agent has a real human operator behind it; Sybil resistance; one-human-one-agent enforcement
Not ideal for: Multiple agents per person; privacy-critical applications (iris biometrics); non-Worldcoin ecosystems
Key Signals
Verification Type
Proof-of-personhood
Pricing
Free verification
Features
👁️
Iris-Based Proof-of-Personhood
Worldcoin's Orb device scans a user's iris to generate a unique biometric commitment stored as a hash — not the raw biometric data. This creates an unforgeable proof that the holder is a unique real human, distinct from all other registered humans.
🔒
ZK Proofs (Privacy-Preserving)
World ID uses zero-knowledge proofs so users can prove personhood without revealing their identity or which specific iris registration they hold. The verifying contract learns only that the prover is a unique human — nothing else about them.
⛓️
On-chain Verification
Verification happens via on-chain smart contracts on Optimism and Ethereum. Applications can add a World ID check directly to contract logic — e.g., a DeFi protocol can require proof-of-personhood before allowing protocol participation.
🛡️
Sybil Resistance
The biometric uniqueness guarantee means each real human can only register once globally. For AI agents, this enforces one-human-one-agent policies — preventing any single operator from deploying thousands of agents that all claim "human" status.
Ratings
Ratings based on documentation review, GitHub activity, and public developer reports. Not independently verified in production.
Integration
npm install @worldcoin/minikit-js
npm install @worldcoin/idkit
import { IDKitWidget, VerificationLevel } from '@worldcoin/idkit';
function AgentOperatorVerification({ onSuccess }) {
return (
<IDKitWidget
app_id="app_YOUR_APP_ID"
action="verify-agent-operator"
verification_level={VerificationLevel.Orb}
onSuccess={onSuccess}
>
{({ open }) => (
<button onClick={open}>Verify with World ID</button>
)}
</IDKitWidget>
);
}
const response = await fetch('https://developer.worldcoin.org/api/v1/verify/app_YOUR_APP_ID', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
nullifier_hash: proof.nullifier_hash,
merkle_root: proof.merkle_root,
proof: proof.proof,
verification_level: 'orb',
action: 'verify-agent-operator',
}),
});
const { success } = await response.json();