lemma.id demo
One lemma.id. A different private ID on every site.
Three concepts: Create a passkey-protected lemma.id on your device, Verify it on demo sites to mint unlinkable private IDs, then Enforce site policy, set assurance, doubt a user, or ban a PPID. Credentials stay on your device; sites verify proofs offline.
Stuck or mixing old state? Use Clear demo data above, close demo site tabs, then start again.
Create your lemma.id
Your lemma.id is passkey-protected on this device. Continuity means the same lemma.id is back, not a unique human. Sites ask it for signed presentations at whatever assurance level their policy requires.
Your lemma.id is a proof container only you control. Sites can't read it; all they can do is ask it for site-private proofs.
Passkeys and seeds never leave your device. Routine site checks run locally; lemma.id does not observe your browsing on relying sites.
Verify on demo sites
Each site declares the assurance it requires. Your lemma.id mints a site-private proof and the site verifies it offline. Same wallet, different private ID on every hostname.
This is the whole integrator loop: the site declares the assurance it requires, your lemma.id mints a site-private proof, and the site verifies it offline. Neither site sees your real identity, and neither can see the other site's ID.
SaaS trial demo site
Same lemma.id. Different private IDs.
Ticketing and Trials receive different identifiers, even though both proofs come from the same lemma.id.
Proof receipt
Presence High-value actions can require a fresh passkey when the presentation is signed, see the presale demo for action stamps.
Developer view: signed presentations
Each site receives a signed presentation your backend verifies offline, not government ID, email, or cross-site identifiers.
Verify both sites to inspect their presentations here.
View complete presentation JSON
{}
Enforce
Each site decides on its private ID, doubt for a fresh proof, or ban. Scoped per site: action on presale does not affect SaaS trial.
,
Not verified
,
Not verified
Verify both sites above, then enforce on a row.
Set assurance level (presale)
Require human proof on presale. Same PPID after step-up, only the assurance tier changes.
Passkey only
Would denyAfter human proof
Would acceptSame site-private ID after step-up
Assurance: ,
Developer view: operator tools & integrator reference
Manual verification, admin-gated SiteDoubt step-up, ops smoke checks, and operator debug. The main demo flow above covers the product story; this panel is for integration testing.
Manual site verification
Verify one site at a time or both together without leaving the hub.
Admin: legacy SiteDoubt step-up
Creates a SiteDoubt row via admin token. The main flow uses /api/demo/ishuman/site-doubt and client-side policy toggles instead.
Raise ticketing policy
Complete step-up
Same site-private ID after step-up (advanced)
Relying-site demos
Reserve a ticket or start a trial on separate origins. Each site verifies the signed presentation on its own backend.
Reset demo
Clear your lemma.id and demo caches so you can run the full flow again from a clean state.
Operations Check
Run the full lemma.id lifecycle and see pass/fail evidence for each operation. Passkey and IDV steps require manual interaction in this browser.
{}
Three levels of proof
lemma.id passkey
- Continuity: same lemma.id, site-private PPID.
- Fast unlock; no IDV required.
- Not Sybil-resistant alone, anyone can create another lemma.id.
Presence proof
- Fresh passkey when the presentation is signed.
- Shows the holder is at the device right now.
- Still not “one human”, use a human proof for that.
Human proof ishuman
- Enforcement: one verified human per account.
- Same PPID. The proof level changes, not the account.
- Completed via IDV when site policy demands it.
Integration snippet
Start with lemma.id continuity; raise to a human proof only when your site policy requires one verified human. Presence is the fresh-passkey ceremony on the presentation.
Last verify: ,