v1.0.0
Open & Permissionless

Proof of Humanity
for Every Platform

Open, on-chain identity verification. Let your users prove they're human with a Soulbound Token — no API key needed, 2 lines of code to integrate.

0–255
Humanity Index
7
Verification Methods
2
Lines to Integrate
$0
Forever Free
zkhumanity.twin3.ai
Multi-Factor Humanity Proof

Each verification method adds points to a 0–255 Humanity Index. Higher scores mean stronger proof. All results stored as non-transferable SBTs on BNB Chain.

Soulbound Token (SBT)

Non-transferable NFT permanently bound to the user's wallet. Can't be sold, stolen, or faked. On-chain proof of humanity.

Humanity Index (0–255)

Graduated scoring across 7 methods: reCAPTCHA, Google OAuth, Apple Passkey, Google 2FA, Telegram, Discord, LINE. More methods = higher score.

Privacy First

OAuth-based verification — we never see passwords. Passkeys and 2FA stay on-device. Zero-knowledge attestation on-chain.

Zero-Config Integration

No API key, no registration, no approval process. Add 2 lines of HTML and your site has humanity verification. Forever free.

Permissionless On-Chain

Any smart contract can read SBT scores directly. No API dependency. Build Sybil-resistant DAOs, airdrops, or DeFi protocols.

Referral Tracking

Every integration source is tracked. Know how many users came from your site, bot, or agent. First-touch attribution built in.

One Protocol, Every Platform

zkHumanity works everywhere your users are. Websites, chat bots, mobile apps, AI agents — all use the same verification infrastructure.

Website SDK

Embed widget or popup. 2 lines of code.

✓ Live

REST API

Query scores, verify tokens, get stats.

✓ Live

Telegram Bot

Invite bot to your group for auto-verification.

Coming Soon

Discord Bot

Add bot to your server. Auto-assign verified role.

Coming Soon

AI Agent

OpenClaw Skill to check if users are human.

Coming Soon

On-Chain

Query SBT score directly from any smart contract.

Coming Soon
Give Your Agent Human Detection

Install the zkHumanity skill and your AI agent can verify if any user is a real human. Works with OpenClaw, Claude, Cursor, Codex, Copilot, and any AgentSkills-compatible system.

① Install the Skill

Download the SKILL.md into your agent's skills directory:

Shell curl -o skills/zkhumanity-verify/SKILL.md \ --create-dirs \ https://zkhumanity.twin3.ai/skills/zkhumanity-verify/SKILL.md

Or for OpenClaw:

OpenClaw openclaw skill install \ https://zkhumanity.twin3.ai/skills/zkhumanity-verify/SKILL.md

② Use It

Once installed, your agent can respond to natural language like:

💬 "Is 0x1234...abcd a verified human?"
💬 "Check this user's humanity score"
💬 "Verify human for wallet 0xABC..."

SKILL.md Preview

YAML --- name: zkHumanity — Verify Human description: Verify whether a user is a real human by checking their on-chain zkHumanity SBT and Humanity Index score. triggers: - verify human - is this user human - humanity check - proof of humanity permissions: - internet homepage: https://zkhumanity.twin3.ai user-invocable: true ---

Compatible With

🦞 OpenClaw 🧠 Claude ⚡ Codex 🔮 Cursor 🤖 Copilot 🧩 Any AgentSkills
Integrate in Minutes

Choose your platform. No API key needed — just copy, paste, and go.

Website SDK — 2 Lines

Add the zkHumanity verification button to any website. No backend required. The popup handles the entire flow and returns a signed JWT token.

HTML <!-- 1. Include the SDK --> <script src="https://zkhumanity.twin3.ai/sdk.js"></script> <!-- 2. Place the widget (replace data-ref with your identifier) --> <div id="zkh-verify" data-ref="your-site.com"></div>

Handle the verification result in JavaScript:

JavaScript zkHumanity.onVerified((result) => { console.log(result.address); // "0x1234…abcd" console.log(result.score); // 155 (Humanity Index) console.log(result.token); // JWT signed token // Send token to your backend for verification fetch('/api/verify', { method: 'POST', body: JSON.stringify({ token: result.token }) }); });
1

User clicks "Verify Human"

A popup opens to zkhumanity.twin3.ai with your ref identifier for attribution tracking.

2

User completes multi-factor verification

reCAPTCHA, social logins, passkeys, 2FA — each adds to their Humanity Index (0–255).

3

Result returned via postMessage

Popup closes and your callback receives the wallet address, score, and a signed JWT token.

REST API — Query Verification Data

Query any wallet address for verification status, score, referral source, and method proofs. 🔑 Protected endpoints require an X-API-Key header. Apply for a key →

curl # 1. Check if an address is verified 🔑 Requires API Key $ curl -H 'X-API-Key: sk_live_...' \ https://zkhumanity.twin3.ai/api/v1/verify/0x1234...abcd { "address": "0x1234...abcd", "verified": true, "score": 155, "sbt_minted": true, "ref_source": "tg:my_channel", "ref_type": "telegram", "methods": { "recaptcha": 1, "google": 1, "g2fa": 1 }, "chain": "bnb" }
curl # 2. Check if score meets a threshold 🔑 $ curl -H 'X-API-Key: sk_live_...' \ 'https://zkhumanity.twin3.ai/api/v1/verify/0x1234?min_score=100' { "verified": true, "score": 155, "meets_threshold": true, "min_score_requested": 100 }
curl # 3. ZK method proof — did user pass a specific method? 🔑 # Valid methods: recaptcha, google, apple, g2fa, telegram, discord, line $ curl -H 'X-API-Key: sk_live_...' \ https://zkhumanity.twin3.ai/api/v1/verify/0x1234/method/g2fa { "method": "g2fa", "passed": true, "proof": "eyJhbGciOiJ..." // signed JWT }
curl # 4. Referral stats for your channel 🔑 $ curl -H 'X-API-Key: sk_live_...' \ https://zkhumanity.twin3.ai/api/v1/stats/tg:my_channel { "ref": "tg:my_channel", "total": 1250, "verified": 980, "minted": 742, "avg_score": 112 }
Error Response (401) # Missing or invalid API key { "error": "API key required. Apply at /api/v1/keys/apply" }

Verify JWT Token — Server-Side

After the SDK returns a token, verify it on your backend to ensure the user is authenticated. The token contains the wallet address, score, and referral source.

curl # Validate a JWT token from the SDK callback $ curl "https://zkhumanity.twin3.ai/api/v1/token/verify?token=eyJ..." { "valid": true, "sub": "0x1234...abcd", "score": 155, "ref": "your-site.com", "chain": "bnb", "iat": 1709300000, "exp": 1709303600 }
Node.js const res = await fetch( `https://zkhumanity.twin3.ai/api/v1/token/verify?token=${token}` ); const { valid, sub, score } = await res.json(); if (valid && score >= 90) { // User is a verified human with strong proof grantAccess(sub); }

🤖 Telegram Group — Install Verification Bot

⏳ Telegram Bot is coming soon. Join our channel for launch updates.

Protect your Telegram group from bots and spam. Install the zkHumanity verification bot — new members must verify their humanity before participating.

1

Add @zkhumanity_bot to your group

Open your group settings → Add Members → search @zkhumanity_bot → Add as Admin (needs: Send Messages, Restrict Members).

2

Run /zkh setup in your group

The bot configures itself automatically. Options: /zkh min_score 100 to require a minimum score, /zkh method g2fa to require 2FA.

3

New members verify via inline button

When someone joins, the bot sends a "Verify Human" button. Users complete verification in a Telegram Mini App — no need to leave the chat.

4

Track your group stats via API

Your group's referral ID is tg:your_group. Use the REST API to monitor verified users and average scores.

curl # Check your group's verification stats $ curl https://zkhumanity.twin3.ai/api/v1/stats/tg:your_group

🤖 Discord Server — Install Verification Bot

⏳ Discord Bot is coming soon. Join our server for launch updates.

Protect your Discord server from bots and raids. Install the zkHumanity bot — members verify and receive a "Verified Human" role automatically.

1

Add zkHumanity Bot to your server

Click the invite link below. Grant permissions: Send Messages, Manage Roles, Create Channels.

2

Run /zkh setup in any channel

Bot creates a #verify-human channel with a verification prompt. Options: /zkh min_score 100, /zkh role @YourRole.

3

Members click "Verify Human" and get roles

Members open the verification page, complete the flow, and the bot assigns a "✅ Verified Human" role automatically.

4

Track your server stats via API

Your server's referral ID is dc:your_server. Monitor verified members and their average scores in real-time.

curl # Check your server's verification stats $ curl https://zkhumanity.twin3.ai/api/v1/stats/dc:your_server

🔑 Apply for API Key (Web / App)

Telegram and Discord partners install our bot directly — no key needed. For websites and apps, apply below to receive an API key for accessing verification data.
Rate limit: 1,000 requests/day per key. Need more? Contact us.

1

Submit application

Fill the form above. You’ll receive an Application ID immediately.

2

We review within 24 hours

Check status anytime: GET /api/v1/keys/{id}/status

3

Receive your API key

Once approved, use it with: X-API-Key: sk_live_... header on all API requests.

Endpoints

🔒 Protected endpoints require an X-API-Key header. Apply for a key →
Base URL: https://zkhumanity.twin3.ai

Method Endpoint Description
GET /api/v1/verify/:address 🔑 Verification status, score, referral source, and completed methods
GET /api/v1/verify/:address?min_score=N 🔑 Score threshold check — returns meets_threshold: true/false
GET /api/v1/verify/:address/method/:method 🔑 ZK method proof — check if user passed a specific method (returns signed JWT)
GET /api/v1/stats/:ref 🔑 Referral statistics (scoped to your own ref_id)
POST /api/v1/keys/apply 🌐 Apply for an API key (Web / App partners)
GET /api/v1/keys/:id/status 🌐 Check application status
GET /api/v1/token/verify 🌐 Validate a JWT token — pass ?token=... or Authorization: Bearer ...

Score Thresholds

Score Range Level Meaning
0 Unverified No verification completed
15–50 Basic Passed reCAPTCHA + 1 social login
50–120 Moderate Multiple social + passkey
120–200 Strong Multi-factor with 2FA
200–255 Maximum All active methods completed
2 Lines. That’s It.

Any website can add zkHumanity verification with just a script tag and a div. No backend, no API key, no approval required.

HTML <script src="https://zkhumanity.twin3.ai/sdk.js"></script> <div id="zkh-verify" data-ref="your-site.com"></div>