It's like 1inch but for proof of Humanity. One API that checks more than 20 protocols
There is no good way to know whether a real person is behind an account, and that matters more every year now that bots are cheap and AI agents are transacting on their own. Plenty of projects have tried to fix this. World scans irises, Proof of Humanity uses social vouching, Circles builds a trust graph, and there are dozens more. If you want to check all of them you have to integrate each one separately. Print reads these protocols through a single API and gives you one answer. It groups them by what they check underneath, so overlapping credentials only count once.
Real use cases: A dating app wants to know its users are real people and not one scammer running hundreds of profiles. Ticketmaster wants one human to get one allocation instead of losing the whole queue to bots. And now AI agents are transacting on their own, so a service needs to know whether a real person is accountable for the agent it is dealing with. None of those places can ask for a passport. Their users would walk away, and holding that kind of data creates a liability nobody wants. What they need is much smaller than identity. They just need to know a person is there.
It runs in the browser against public blockchains. There is no server of ours in the middle, no account to create and no API key. We never see or store anyone's identity, so you learn that a real person is there without learning who they are, and you get your answer without holding personal data you would then have to protect.
The SDK is TypeScript and viem, and it runs entirely in the browser with no backend of ours. Every protocol gets its own adapter that reads its contract directly, and ten of those are live right now against World Chain, Gnosis, Base and Sepolia. The part that decides which protocols share an underlying check lives in a registry contract on Sepolia rather than in the code, so the rules are public and every change to them is an event you can query. For World I used AgentKit on both sides of the flow. The agent uses createAgentkitClient and the counterparty is a real AgentKit resource server. For The Graph I used two products together. There is a subgraph on Subgraph Studio indexing Proof of Humanity v2 and Circles v2 on Gnosis, and a self hosted graph-node indexing my own registry. An indexer is necessary because a contract call cannot tell me when a credential was issued or where an account sits in a trust graph. For ENS I registered print.eth on Sepolia. The parent name carries the set of wallets a person declares as theirs, and each agent gets a subname that points back at the human behind it

