Core concepts
Verification
A short-lived EIP-712 object signed by Base. Your contract checks it through the Base Verify registry. It contains:
identityHash— a one-way hash of the user's real-world identity.policyHash— binds the verification to your contract's policy on a specific chain.expiration— unix seconds; verifications are short-lived (~5 minutes).
identityHash (your dedupe key)
Deterministic per identity and per contract: the same person always produces the same identityHash for your contract, across any wallet. You store it and reject repeats. It's one-way — you can't recover the user's identity from it, and it's different for every contract, so it can't be correlated across apps.
Policy (provider + conditions)
Your contract declares who is eligible: one provider and one or more conditions (e.g. an active Coinbase One membership, or X followers ≥ 1000). Base reads this policy directly from your contract and checks the user's credential against it before signing. See Policies & conditions.
Your contract can also declare an optional cutoffBlock: Base won't sign for a user whose credential was last authenticated before that block, returning needs_reauth so you can send them to re-verify. It defaults to 0 (no cutoff).
Eligibility is enforced by Base
Conditions are read from your contract and checked against the user's stored credential — never taken from the user — so they can't be faked. If the user isn't eligible, no verification is issued.