> ## Documentation Index
> Fetch the complete documentation index at: https://docs.celo.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Build with Self

> Verify that your users are real, unique humans — and prove age or nationality — with zero-knowledge proofs from passports, EU ID cards and Aadhaar, using Self on Celo

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](https://self.xyz/) 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](/build/agents/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

| Check | Typical use |
| - | - |
| Proof of humanity and uniqueness | Sybil-resistant airdrops, quadratic funding, polls, one-account-per-person marketplaces |
| Age | Age-gated products and content |
| Nationality and sanctions status | Geo-restricted or compliance-gated services |
| Wallet recovery | Re-link a wallet to a verified person |

## Get started

1. Try the [playground](https://playground.self.xyz/) to see which attributes a proof can disclose.
2. Follow the [Self quickstart](https://docs.self.xyz/docs/self-pass/quickstart) to add the QR-code flow to your frontend with the [QRCode SDK](https://docs.self.xyz/docs/self-pass/frontend/qrcode-sdk).
3. Verify proofs either on-chain with the [contract integration guide](https://docs.self.xyz/docs/self-pass/contracts/basic-integration) — deployed hub addresses are in [Deployed contracts](https://docs.self.xyz/docs/self-pass/contracts/deployed-contracts) — or in your backend with the [backend integration guide](https://docs.self.xyz/docs/self-pass/backend/basic-integration).

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](/build/fee-abstraction/overview), so a verification flow never requires them to hold CELO.

## Resources

| Resource | Link |
| - | - |
| Self documentation | [docs.self.xyz](https://docs.self.xyz/) |
| Playground | [playground.self.xyz](https://playground.self.xyz/) |
| Staging playground | [playground.staging.self.xyz](https://playground.staging.self.xyz/) |
| Deployed contracts | [docs.self.xyz/docs/self-pass/contracts/deployed-contracts](https://docs.self.xyz/docs/self-pass/contracts/deployed-contracts) |
| Builder group (Telegram) | [t.me/selfprotocolbuilder](https://t.me/selfprotocolbuilder) |
| Celo Discord, `#build-with-celo` | [discord.com/invite/celo](https://discord.com/invite/celo) |

## Related

* [Self Agent ID](/build/agents/self-agent-id) - Proof-of-human identity for AI agents
* [ERC-8004](/build/agents/8004) - Agent identity, reputation and validation registries
* [SocialConnect](/build/build-on-socialconnect) - Map phone numbers to addresses
* [Fee abstraction](/build/fee-abstraction/overview) - Let users pay gas in stablecoins


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.