{
 "voice": "One card of the book.",
 "agent": {
  "slug": "proof-holdings",
  "name": "Proof Holdings",
  "specialty": null,
  "description": "One API, all things verified — control, delegation, human approval, anti-impersonation.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-10-28T23:10:56.514Z",
  "card": "/agent/proof-holdings",
  "url": "https://allagents.app/agent/proof-holdings",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://api.proof.holdings/mcp",
   "site": "https://proof.holdings"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [
   "npm"
  ],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://proof.holdings",
   "hire": null
  },
  "bubble": "closed",
  "score": 48,
  "score_label": "Getting started",
  "mcp_tools": {
   "seen": "2026-10-29",
   "total": 25,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "create_verification",
     "description": "Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address…"
    },
    {
     "name": "get_verification",
     "description": "Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified. Before calling this for a challenge you…"
    },
    {
     "name": "list_verifications",
     "description": "List verifications with optional filters. Returns paginated results. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →…"
    },
    {
     "name": "trigger_verification",
     "description": "Trigger a DNS/HTTP verification check for a pending domain verification. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →…"
    },
    {
     "name": "submit_verification_code",
     "description": "Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and…"
    },
    {
     "name": "resend_verification",
     "description": "Resend a verification message (email channel only). Generates and sends a new code. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp…"
    },
    {
     "name": "test_verify",
     "description": "Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery. ACCESS: needs a Proof account…"
    },
    {
     "name": "list_verified_users",
     "description": "List verified users grouped by external_user_id. Shows all verifications per user. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp…"
    },
    {
     "name": "get_verified_user",
     "description": "Get a single verified user and their verifications by external user ID. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →…"
    },
    {
     "name": "start_domain_verification",
     "description": "Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete. ACCESS: needs a Proof account…"
    },
    {
     "name": "check_domain_verification",
     "description": "Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status. ACCESS: needs a Proof account. Authenticate this…"
    },
    {
     "name": "delete_domain_verification",
     "description": "Delete a domain verification attempt that is not verified (pending, verifying or failed) — nothing is revoked. A verified domain, or one that needs…"
    },
    {
     "name": "wait_for_verification",
     "description": "Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max)…"
    },
    {
     "name": "create_multi_channel_verification",
     "description": "Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes…"
    },
    {
     "name": "get_multi_channel_verification_status",
     "description": "Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one…"
    },
    {
     "name": "create_verification_request",
     "description": "Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow…"
    },
    {
     "name": "get_verification_request",
     "description": "Get a verification request by ID. Returns the request with all its asset verification statuses. ACCESS: needs a Proof account. Authenticate this client…"
    },
    {
     "name": "get_request_proofs",
     "description": "Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification. ACCESS: needs a Proof account…"
    },
    {
     "name": "list_verification_requests",
     "description": "List verification requests with optional filters. Returns paginated results. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →…"
    },
    {
     "name": "get_request_by_reference",
     "description": "Get a verification request by its reference ID (your unique identifier). ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →…"
    },
    {
     "name": "cancel_verification_request",
     "description": "Cancel a pending verification request. Only pending requests can be cancelled. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →…"
    },
    {
     "name": "wait_for_request",
     "description": "Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with…"
    },
    {
     "name": "validate_proof",
     "description": "Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the…"
    },
    {
     "name": "get_proof_status",
     "description": "Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked…"
    },
    {
     "name": "revoke_proof",
     "description": "Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://api.proof.holdings/mcp",
   "answers": true,
   "checked": "2026-10-29T05:56:58.670Z",
   "http": 405,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-10-29T06:40:58.707Z",
     "since": "2026-10-29T06:40:58.707Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-10-29T06:40:58.707Z",
    "since": "2026-10-29T06:40:58.707Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 405,
   "checked": "2026-10-29T05:56:58.670Z"
  }
 }
}