# Proof of Human

**Proof of Human** answers "**Is this a unique, real person?**". The user proves they hold a genuine government document, and the proof carries a **nullifier** that is the same every time the same person verifies with you. One person, one account, enforced cryptographically instead of with CAPTCHAs and phone numbers.

## What the user proves

- They hold a **genuine, government-signed document** (at your chosen [security level](/docs/self-enterprise/flows/disclosures/#security-level)), so they're a real person, not a bot or a burner identity.
- Optionally, that they **clear the OFAC sanctions list**.

## What you receive

- A `valid` / `invalid` result via the [`verification.completed` webhook](/docs/self-enterprise/webhooks/events/).
- The **`nullifier`**: the heart of this workspace. It's derived from the document, **stable per person within your organization** (the same across all your workspaces and flows), and **unlinkable across organizations**, so users can't be tracked between services. Store it with a uniqueness constraint and duplicates reject themselves:

```ts
// on `verification.completed` with status 'valid':
await db.query(
  'INSERT INTO verified_humans (nullifier, user_id) VALUES ($1, $2) ON CONFLICT (nullifier) DO NOTHING',
  [event.nullifier, event.external_uuid],
);
```

No name, no nationality, no document details. You learn that the person is real and unique, and nothing else. See [How verification works](/docs/self-enterprise/get-started/how-it-works/#one-account-per-person-nullifiers).

## Rules you can configure

| Rule | Default | Notes |
| --- | --- | --- |
| Security level | Hi-security | Standard also accepts non-chip documents. |
| OFAC | On | Checked against the daily-updated US Treasury list. |

No age or country rules and no reveals: uniqueness is the workspace. If you need more, use [Pre-KYC](/docs/self-enterprise/workspaces/pre-kyc/).

## Use cases

- **Sybil resistance for airdrops and rewards**: one claim per human, not per wallet. The [on-chain mode](/docs/self-enterprise/flows/onchain-verification/) is a natural fit: each verified person gets a soulbound token, and its contract enforces one token per person.
- **Anti-bot for signups and communities**: keep automated accounts out of launches, waitlists, and forums without punishing real users with friction.
- **One-person-one-vote**: governance, polls, and review systems where duplicate identities break the mechanism.
- **Fair usage limits**: free tiers, promotions, and referral programs that can't be farmed with throwaway accounts.

## Cost

**10 credits** per completed verification. See [Credits and usage](/docs/self-enterprise/billing/credits-and-usage/).

## Related

- [On-chain verification](/docs/self-enterprise/flows/onchain-verification/): mint each verified human a soulbound token.
- [Webhook best practices](/docs/self-enterprise/webhooks/best-practices/): dedup and idempotency patterns.
- [Workspaces overview](/docs/self-enterprise/workspaces/): compare all four workspaces.
