The verifier catalog is code-first. Backend verifierRegistry.js is the single source of truth; the API exposes it:
GET https://api.neus.network/api/v1/verification/verifiers
Code-first: Always use the API response as the source of truth. This page provides use cases and field reference. Full schema and validation rules come from GET /api/v1/verification/verifiers or OpenAPI VerifierData_<id>. Backend: neus-nut/src/services/verification/verifiers/verifierRegistry.js.
By Use Case
| What You Need | Verifier(s) | Flow |
|---|
| Prove wallet ownership | ownership-basic | Instant |
| Prove social account (X, Discord, etc.) | ownership-social | Interactive |
| Prove domain ownership | ownership-dns-txt | Lookup |
| Prove org membership (Google/Microsoft) | ownership-org-oauth | Interactive |
| Gate by NFT ownership | nft-ownership | Lookup |
| Gate by token balance | token-holding | Lookup |
| Prove smart contract control | contract-ownership | Lookup |
| Reduce bots (human verification) | proof-of-human | Interactive |
| Link multiple wallets | wallet-link | Instant |
| Check wallet risk before payments | wallet-risk | Lookup |
| Register AI/automation agent | agent-identity | Instant |
| Delegate authority to agent | agent-delegation | Instant |
| Moderate content safety | ai-content-moderation | Lookup |
| Pseudonymous handle binding | ownership-pseudonym | Instant |
Flow Types
| Flow | Meaning | Examples |
|---|
| Instant | One API call, signature only | ownership-basic, agent-identity |
| Interactive | User completes OAuth or ZK flow first | ownership-social, proof-of-human |
| Lookup | API checks on-chain or external data | nft-ownership, wallet-risk |
Verifier Reference
ownership-basic
Use case: Prove you control a wallet. Foundation for content ownership, attestations, and identity.
| Field | Required | Type | Use |
|---|
owner | Yes | universal-address | Must match signer wallet |
content | No | string | Content being claimed (max 50KB) |
contentHash | No | 0x64 hex | Pre-computed hash |
contentType | No | string | MIME hint (max 100 chars) |
reference | No | object | Link to resource (url, ipfs, contract, etc.) |
provenance | No | object | Human/AI/mixed declaration |
Example: { "owner": "0x..." }
Compatible with: agent-identity, proof-of-human, ai-content-moderation
ownership-social
Use case: Prove you own a social account (X, Discord, GitHub, etc.). Requires hosted checkout—users sign in via NEUS.
| Field | Required | Type | Use |
|---|
provider | Yes | enum | discord, github, facebook, x, farcaster, linkedin, telegram, coinbase |
internalSocialToken | Yes | string | From hosted flow (do not pass raw OAuth token) |
walletAddress | No | universal-address | Optional override |
Example: { "provider": "github", "internalSocialToken": "<from-hosted-flow>" }
Compatible with: ownership-basic
ownership-dns-txt
Use case: Prove you control a domain by adding a TXT record. Common for org verification and domain-gated access.
| Field | Required | Type | Use |
|---|
domain | Yes | hostname | Domain to verify |
walletAddress | No | universal-address | Optional |
Example: { "domain": "example.com" }
Compatible with: ownership-basic, agent-identity
ownership-org-oauth
Use case: Prove membership in an organization via Google or Microsoft. For enterprise and team access.
| Field | Required | Type | Use |
|---|
provider | Yes | enum | google, microsoft |
internalSocialToken | Yes | string | From hosted flow |
walletAddress | No | universal-address | Optional |
expectedOrgDomain | No | hostname | Restrict to org domain |
Example: { "provider": "google", "internalSocialToken": "<from-hosted-flow>" }
Compatible with: agent-delegation
ownership-pseudonym
Use case: Bind a pseudonymous handle to a wallet. For usernames and display names without revealing identity.
| Field | Required | Type | Use |
|---|
pseudonymId | Yes | string | Handle (3–32 chars, [a-z0-9][a-z0-9._-]{1,30}[a-z0-9]) |
namespace | No | string | Default: neus (max 64 chars) |
displayName | No | string | Human-readable name (max 64 chars) |
metadata | No | object | Extra data |
Example: { "pseudonymId": "alice123" }
Compatible with: ownership-basic
nft-ownership
Use case: Gate access by NFT ownership. User must hold a specific NFT (ERC-721/ERC-1155 on EVM, or SPL NFT on Solana).
Supported chains: EVM (use chainId) or Solana (use chain: solana:mainnet or solana:devnet)
| Field | Required | Type | Use |
|---|
contractAddress | Yes | address | NFT contract (EVM) or mint address (Solana) |
tokenId | Yes | string | Token ID (EVM); omit or use for Solana metadata |
chainId | EVM | integer | Chain (e.g. 8453 for Base) |
chain | Solana | CAIP-2 | e.g. solana:mainnet |
ownerAddress | No | address | Override subject |
tokenType | No | enum | erc721, erc1155 |
blockNumber | No | integer | Point-in-time block |
Example (EVM): { "contractAddress": "0x...", "tokenId": "1", "chainId": 8453 }
Example (Solana): { "contractAddress": "<mint>", "tokenId": "1", "chain": "solana:mainnet" }
Compatible with: token-holding, ownership-basic
token-holding
Use case: Gate access by token balance. User must hold at least minBalance of the token.
Supported chains: EVM (use chainId) or Solana (use chain: solana:mainnet or solana:devnet)
| Field | Required | Type | Use |
|---|
contractAddress | Yes | address | Token contract (EVM) or SPL mint (Solana) |
minBalance | Yes | string | Minimum balance (e.g. “100”) |
chainId | EVM | integer | Chain |
chain | Solana | CAIP-2 | e.g. solana:mainnet |
ownerAddress | No | address | Override subject |
blockNumber | No | integer | Point-in-time block |
Example (EVM): { "contractAddress": "0x...", "minBalance": "100", "chainId": 8453 }
Example (Solana): { "contractAddress": "<mint>", "minBalance": "100", "chain": "solana:mainnet" }
Compatible with: nft-ownership, ownership-basic
contract-ownership
Use case: Prove you own or control a smart contract (owner, admin, or access control role).
Supported chains: EVM (chainId)
| Field | Required | Type | Use |
|---|
contractAddress | Yes | EVM address | Contract |
chainId | Yes | integer | Chain |
walletAddress | No | EVM address | Override subject |
method | No | enum | owner, admin, accessControl |
Example: { "contractAddress": "0x...", "chainId": 8453 }
Compatible with: wallet-link, wallet-risk, agent-identity
proof-of-human
Use case: Reduce bots. User completes a human verification flow (e.g. ZK Passport). Requires hosted checkout.
| Field | Required | Type | Use |
|---|
proofs | Yes | array | ZK proof payload (1–10 items) |
queryResult | Yes | object | Provider result |
provider | No | enum | zkpassport |
scope | No | string | Scope (e.g. [a-zA-Z0-9_-]{1,64}) |
Example: { "proofs": [...], "queryResult": {...} } (from hosted flow)
Compatible with: ownership-basic, ownership-social, ai-content-moderation
wallet-link
Use case: Link a secondary wallet to a primary via signature. For multi-wallet identity and delegation.
| Field | Required | Type | Use |
|---|
primaryWalletAddress | Yes | universal-address | Primary wallet |
secondaryWalletAddress | Yes | universal-address | Secondary wallet |
signature | Yes | string | Secondary’s signature |
chain | Yes | CAIP-2 | Chain (e.g. eip155:8453) |
signatureMethod | Yes | string | e.g. eip191 |
signedTimestamp | Yes | integer | Unix ms |
relationshipType | No | enum | primary, personal, org, affiliate, agent, linked |
label | No | string | Human label (max 64 chars) |
Example: { "primaryWalletAddress": "0x...", "secondaryWalletAddress": "0x...", "signature": "0x...", "chain": "eip155:8453", "signatureMethod": "eip191", "signedTimestamp": 1234567890000 }
Compatible with: contract-ownership, ownership-basic, wallet-risk, agent-identity
wallet-risk
Use case: Check wallet risk before payments or high-value actions. Uses external provider (e.g. Webacy).
| Field | Required | Type | Use |
|---|
walletAddress | Yes | EVM or Solana address | Wallet to assess |
provider | No | enum | webacy |
chain | No | enum | eth, base, bsc, pol, opt, arb, sol, ton, sei, sui, btc, stellar |
chainId | No | integer | Chain ID |
Example: { "walletAddress": "0x...", "chain": "base" }
Compatible with: ownership-basic, proof-of-human, agent-identity
ai-content-moderation
Use case: Verify content safety (images, text). For AI-generated content or user uploads.
| Field | Required | Type | Use |
|---|
content | Yes | string | Content to moderate |
contentType | Yes | enum | image/jpeg, image/png, image/webp, image/gif, text/plain, text/markdown, text/x-markdown, application/json, application/xml |
provider | No | enum | google-vision, google-perspective |
Example: { "content": "<base64>", "contentType": "image/jpeg" }
Compatible with: ownership-basic, agent-identity, proof-of-human
agent-identity
Use case: Register an AI agent, bot, or automation. ERC-8004 compatible. Foundation for agent delegation.
| Field | Required | Type | Use |
|---|
agentId | Yes | string | Unique agent ID (1–128 chars) |
agentAccountId or agentWallet | One required | CAIP-10 or universal-address | Agent’s wallet |
agentLabel | No | string | Display name (max 128 chars) |
agentType | No | enum | ai, bot, service, automation, agent |
description | No | string | Human description (max 500 chars) |
capabilities | No | array | Capability strings (max 32 items, each 128 chars) |
instructions | No | string | Instructions (max 4000 chars) |
skills | No | array | Skill IDs (max 48 items, each 64 chars) |
services | No | array | Endpoints (max 16 items, name + endpoint required) |
Example: { "agentId": "my-agent-1", "agentWallet": "0x..." }
Compatible with: agent-delegation, ai-content-moderation, ownership-dns-txt, contract-ownership, wallet-link
agent-delegation
Use case: Delegate authority from a controller wallet to an agent. For payments, actions, and scoped access. ERC-8004 compatible.
| Field | Required | Type | Use |
|---|
controllerWallet | Yes | universal-address | Delegating wallet (must match signer). Or use controllerAccountId + agentAccountId (CAIP-10). |
agentWallet | Yes | universal-address | Agent wallet. Or use agentAccountId with controllerAccountId (CAIP-10). |
agentId | No | string | Agent ID (1–128 chars) |
scope | No | string | Scope (e.g. payments:x402, max 128 chars) |
permissions | No | array | Permission strings (max 32 items, each 64 chars) |
maxSpend | No | string | Max spend in wei (decimal string) |
allowedPaymentTypes | No | array | Payment types (max 8 items) |
receiptDisclosure | No | enum | none, summary, full |
expiresAt | No | integer | Unix ms expiry |
instructions | No | string | Instructions (max 4000 chars) |
skills | No | array | Skill IDs (max 48 items, each 64 chars) |
Example: { "controllerWallet": "0x...", "agentWallet": "0x...", "scope": "payments:x402" }
Compatible with: agent-identity, ownership-org-oauth, wallet-risk, wallet-link
Recommended Bundles
| Bundle | Verifiers | Use Case |
|---|
| AI trust receipt | ownership-basic + ai-content-moderation + proof-of-human | AI content with human attestation |
| Verifiable agents | agent-identity + agent-delegation + wallet-risk | AI agents with delegated authority |
| Community gating | token-holding or nft-ownership + proof-of-human | Token/NFT holders with sybil resistance |
| Org access | ownership-org-oauth + ownership-dns-txt + contract-ownership | Organization and domain verification |