Entros Developer Docs
Build with proof of personhood on Solana.
Entros is a Solana protocol that proves a wallet is operated by a returning human, with the raw biometric signal never persisted or exposed.
These docs cover the integration paths: drop-in React components, on-chain reads, SAS attestations, Realms voter-weight, and Agent Anchor. They also publish the technical reference for the SDK and on-chain programs, and the public roadmap for what comes next.
Three integration paths
Pick the path that matches your use case. Each integrator only needs one.
Tier 1, drop-in trigger. You want a button that takes a user from "unverified wallet" to "verified human" with a single click. The popup hosts the wallet connect, the 12-second behavioral capture, the proof, and the on-chain mint. Your app stays wallet-adapter-free until a verified payload arrives on the callback. Install: @entros/verify. Five lines of JSX.
Tier 2, programmatic SDK. You want to own the verification UX: custom capture canvas, branded loading states, inline rather than popup, mobile-native. The Pulse SDK exposes the lower-level primitives the popup is built on. Install: @entros/pulse-sdk. Same package powers Tier 1 internally.
Tier 3, read-only. You display an existing Anchor, or gate something where a live capture would be more friction than the action is worth. One function call, free reads, no API key. Install: @entros/pulse-sdk. For anything with real stakes, pair it with a Tier 1 trigger at the point of the action.
Where to start
- New to Entros? Begin with Concepts → Proof of Personhood.
- Most integrators (Tier 1)? Drop in
<EntrosVerify />— see the verification flow. - Custom UX (Tier 2)? See the Pulse SDK reference.
- Read-only (Tier 3)? Jump to the gate-a-route quickstart or read-on-chain.
- Gating something valuable? See what to gate on.
- Curious where this is going? See the Roadmap.
The shape of a Tier 3 read
A read pulls one piece of on-chain state: the Anchor PDA, or an attestation issued through SAS. There is no API key, no billing relationship, no off-chain dependency. The user pays a small protocol fee at verification time. Integrators read for free.
import { verifyEntrosAttestation } from "@entros/pulse-sdk";
const attestation = await verifyEntrosAttestation(walletAddress, connection);
if (attestation?.isHuman && attestation.trustScore >= 100 && !attestation.expired) {
// proceed
}Two numbers, two questions. The score says how consistently this wallet has verified. Recency says how long ago it last did.
For an airdrop claim, a governance vote or anything else worth the friction, run a verification at the point of the action and read the Anchor after it. The score is a history. The verification is the person. <EntrosVerify /> does it in five lines. See the verification flow.