For developers
A reusable human credential and an action receipt. The demos show two ways to apply the gate.
Current integration
Proofit allows public reading and ordinary account sign-in; posting requires HumanProof. Airdroppa requires HumanProof to enter and authorizes one PROOF payout per human.
Both demos share this origin. The action endpoint requires an allowlisted app ID, a verified Privy access token and an account-bound HumanProof session. Separate registered applications can use the identity connection described below; it does not authorize actions.
// Inside this app, after HumanProof sign-in:
// Use useAuthedFetch() to attach the verified Privy access token.
const response = await authedFetch("/api/attest", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ appId: "reviews", contentHash: actionHash }),
});
// 200: { sealId, txHash, appId, explorer }, including recovered receipts
// 401: sign in / restore the account-bound HumanProof session
// 403: complete the credential or use a registered app ID
// 502 / 503: retry the SAME action to recover a pending receiptProofit publishes through /api/reviews, which seals the canonical product, rating and post text before storing the public post. Different posts about the same product are allowed. Exact retries reuse the receipt.
Connect a separate application
Registered applications can request explicit consent at /authorize using an exact registered redirect, random state and S256 PKCE. Their server redeems the two-minute, single-use code at /api/authorize/exchange. The response confirms a completed credential and shares its public ENS name and an application-scoped subject.
No clients are enabled by default. The repository includes docs/external-identity.md and examples/identity-client/server.mjs. This is an initial identity connection, not a complete OAuth/OIDC service. Real-credential end-to-end validation is pending. It grants no wallet spending or posting permission; refresh and continuous revocation are not implemented.
What the receipt proves
The authorized HumanProof server records the human fingerprint and action hash on Base Sepolia after checking the credential. A receipt proves that attestation was recorded; it does not establish that a review is truthful or that the humanity check ran on-chain.
Public receipt discovery
People and agents can query GET /api/receipts without signing in. Filter by app, id or contentHash; limit is capped at 100. The Graph indexes the Base Sepolia contract. Missing or unhealthy infrastructure returns 503.
Explore receipts and compare original content. Content comparison runs in your browser; no document or content upload is required.
Privacy boundaries
The receipt response omits account details, but public chain events use a consistent salted fingerprint across both demos. These events are pseudonymous and linkable. ENS names, wallets and public posts may identify their author. Pairwise identities are not implemented.
World ID staging is the active demo provider so the browser simulator can complete onboarding. The approved Sandbox configuration remains available for the phone path, and Self remains a deliberate fallback. Provider environments are isolated; cross-provider person deduplication is not established.