Skip to main content
This page is for app developers who need to know that a user is a real, unique human, or that they meet an age or nationality rule, without collecting their documents. Self is an open-source identity protocol: the user scans a passport, EU ID card or Indian Aadhaar with their phone, a zero-knowledge proof is generated on the device, and your app receives only the facts the user chose to disclose. Attestations are recorded on Celo. If you are giving an AI agent an identity rather than verifying a person, go to Self Agent ID.

How it works

  1. Scan. The user scans the NFC chip of their passport, EU ID card or Aadhaar with the Self app.
  2. Prove. The app generates a zero-knowledge proof over the document, disclosing only the attributes your app asked for — for example “over 18” or “not on a sanctions list”, never the passport number.
  3. Share. The user scans your app’s QR code (or taps a deeplink) and the proof is delivered to your backend or smart contract, where it is verified against Self’s hub contract on Celo.
No personal data leaves the device. The same proof also yields a nullifier, so you can tell one human from another without knowing who they are.

What you can check

Get started

  1. Try the playground to see which attributes a proof can disclose.
  2. Follow the Self quickstart to add the QR-code flow to your frontend with the QRCode SDK.
  3. Verify proofs either on-chain with the contract integration guide — deployed hub addresses are in Deployed contracts — or in your backend with the backend integration guide.
Self’s contracts on Celo follow the same fee rules as any other contract: your users can pay gas in USDm, USDC or USDT through fee abstraction, so a verification flow never requires them to hold CELO.

Resources