Documentation
Everything you need to integrate proof-of-humanity into your application.
On this page
Get human verification working in your app in under 60 seconds.
1. Install the SDK
npm install @humanlayerlabs/sdk
2. Verify a wallet
import { HumanLayer } from '@humanlayerlabs/sdk';
const isHuman = await HumanLayer.isHuman('0xYourWalletAddress');
// Returns: true | false3. Gate access by score
const access = await HumanLayer.gateAccess(wallet, {
minScore: 60 // Builder tier and above
});
if (access.allowed) {
// Real human — grant access
console.log(access.identity.score); // 82
console.log(access.identity.tierName); // "Builder"
} else {
// Bot or unverified — deny access
}Free tier endpoints require no API key. Paid tier endpoints require an API key passed as a header.
Badge API, /v1/verify/:wallet, /api/identity/:wallet/rank — all open, no authentication needed.
curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.humanlayer.network/api/identity/:wallet/guardian
Get your API key from the dashboard after connecting your wallet.
@humanlayerlabs/sdk — the core SDK for any JavaScript environment.
npm install @humanlayerlabs/sdk
isHuman(wallet)
import { HumanLayer } from '@humanlayerlabs/sdk';
const result = await HumanLayer.isHuman(wallet);
// result: true | falsegateAccess(wallet, options)
const access = await HumanLayer.gateAccess(wallet, {
minScore: 60, // Minimum Human Score required
minTier: 3, // Minimum tier (1–5)
blockAnomalous: true // Block flagged wallets
});
// access.allowed: boolean
// access.identity.score: number (0–144)
// access.identity.tier: number (1–5)
// access.identity.tierName: string
// access.identity.verifiedAt: stringgetIdentity(wallet)
const identity = await HumanLayer.getIdentity(wallet); // identity.wallet: string // identity.score: number // identity.tier: number // identity.tierName: string // identity.verified: boolean // identity.verifiedAt: string // identity.nftTokenId: string
@humanlayerlabs/wagmi-connector — drop-in wagmi connector that silently checks Human Score on every wallet connection.
npm install @humanlayerlabs/wagmi-connector
import { humanlayerConnector } from '@humanlayerlabs/wagmi-connector';
import { createConfig, injected } from 'wagmi';
export const config = createConfig({
connectors: [
injected(),
humanlayerConnector({
minScore: 60, // Block below Builder tier
blockAnomalous: true, // Block AI-flagged wallets
onBlocked: (reason) => {
console.log('Blocked:', reason);
// reason: 'score_too_low' | 'anomalous' | 'unverified'
}
}),
],
})Options
@humanlayerlabs/react — drop-in button and headless hook for React apps.
npm install @humanlayerlabs/react
SignInWithHumanLayer button
import { SignInWithHumanLayer } from '@humanlayerlabs/react';
<SignInWithHumanLayer
minScore={60}
onVerified={(result) => {
console.log(result.wallet); // verified wallet
console.log(result.score); // Human Score
console.log(result.tier); // tier number
console.log(result.token); // signed JWT
}}
onError={(err) => console.error(err)}
/>useHumanLayer hook
import { useHumanLayer } from '@humanlayerlabs/react';
function MyComponent() {
const { identity, isVerified, isLoading } = useHumanLayer();
if (isLoading) return <div>Checking...</div>;
if (!isVerified) return <div>Not verified</div>;
return <div>Human Score: {identity.score}</div>;
}Show a verified human badge next to any wallet address. Free, no API key, open CORS. Built for Birdeye, Dexscreener, Solscan, and any app that displays wallet addresses.
/v1/badge/:walletReturns SVG badge<!-- Embed anywhere — no API key needed --> <img src="https://api.humanlayer.network/v1/badge/0xYourWalletAddress" />
/v1/badge/:wallet/jsonReturns JSON{
"score": 82,
"tier": 3,
"tierLabel": "Builder",
"verified": true,
"verifiedAt": "2026-03-18T12:00:00Z",
"badgeUrl": "https://api.humanlayer.network/v1/badge/0x...",
"profileUrl": "https://humanlayer.network/dashboard"
}The Web3 equivalent of Sign in with Google. Instead of proving you have an email — you prove you're human. Returns a signed JWT with wallet, score, and tier.
1. Register your app
Go to the dashboard → API Keys to register your app and get an app_id.
2. Redirect user to authorize
GET https://humanlayer.network/verify?app_id=YOUR_APP_ID&redirect_uri=YOUR_CALLBACK_URL
3. Exchange code for token
POST https://api.humanlayer.network/oauth/token
Content-Type: application/json
{
"code": "AUTH_CODE_FROM_CALLBACK",
"app_id": "YOUR_APP_ID"
}4. JWT payload
{
"wallet": "0x...",
"score": 82,
"tier": 3,
"tierName": "Builder",
"verified": true,
"verifiedAt": "2026-03-18T12:00:00Z",
"iat": 1234567890,
"exp": 1234654290
}Base URL: https://api.humanlayer.network
/v1/verify/:walletFreeCheck if a wallet is a verified human
{ verified: boolean, score: number, tier: number }/v1/badge/:walletFreeSVG badge for any wallet address
SVG image/v1/badge/:wallet/jsonFreeJSON verification data
{ score, tier, tierLabel, verified, verifiedAt }/api/identity/:wallet/rankFreeHuman Score, tier, and rank
{ rank, score, tier, totalUsers, topPercent }/api/identity/:wallet/guardianStarterAI Guardian behavioral score
{ guardianScore, anomalyFlag, riskLevel }/api/identity/:wallet/agentStarterHuman vs AI agent detection
{ isAgent: boolean, confidence: number }/oauth/tokenStarterExchange OAuth code for JWT
{ token: string }/v1/webhooksStarterRegister webhook endpoint
{ id, url, events, active }/v1/verify/confirmGrowthSubmit ZK proof for verification
{ verified, txHash, nullifier }Get notified in real-time when users verify, scores update, or credentials are issued.
Register a webhook
POST https://api.humanlayer.network/v1/webhooks
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"url": "https://your-app.com/webhooks/humanlayer",
"events": ["verify.success", "reputation.updated"]
}Available events
verify.successUser successfully verified as humancredential.issuedSoulbound NFT minted on-chainreputation.updatedHuman Score changed (up or down)stake.createdUser staked ETH to boost scorebot.blockedAI Guardian blocked a verification attemptWebhook payload
{
"event": "verify.success",
"timestamp": "2026-05-19T12:00:00Z",
"data": {
"wallet": "0x...",
"score": 82,
"tier": 3,
"tierName": "Builder",
"txHash": "0x...",
"nullifier": "0x..."
}
}Core data types returned across all endpoints.
Identity object
type Identity = {
wallet: string; // EVM wallet address
score: number; // Human Score 0–144
tier: number; // Tier 1–5
tierName: string; // "Newcomer" | "Verified" | "Builder" | "Elite" | "Core"
verified: boolean; // Has soulbound NFT
verifiedAt: string; // ISO timestamp
nftTokenId: string; // On-chain token ID
nullifier: string; // ZK nullifier hash
guardianScore?: number; // AI Guardian score (paid)
isAgent?: boolean; // AI agent detection (paid)
}Human Score tiers
All errors return a JSON body with an error field.
not_verified404Wallet has no HumanLayer identityscore_too_low403Score below required thresholdanomalous_wallet403AI Guardian flagged this walletinvalid_api_key401API key missing or invalidrate_limited429Too many requests — upgrade planinvalid_wallet400Wallet address is not a valid EVM addressproof_invalid400ZK proof failed on-chain verificationnullifier_exists409This nullifier has already been usedConnect your wallet and get your API key instantly. Free to start.