How it works API Features Compare FAQ Download APK Free
Open Source  ·  v0.1.0

Prove You're Human.
Not a Bot.

Tap a moving dot five times. Get a signed proof. One API call to verify. No KYC, no orb, no biometrics stored — just cryptographic evidence of humanity.

$0.10 / verify 24h valid Zero PII stored
✓
Identity Verified 0.96
Built with
Flutter Play Integrity TFLite ML Vercel Edge Redis

Four steps to verified humanity

No hardware. No biometrics. No waiting. Your phone and a tap are all you need.

01
📲

Download APK

Sideload the open-source Flutter app from GitHub Releases. Android only, no Play Store required.

02
👆

Behavior Challenge

Tap a moving dot 5 times. On-device TFLite model scores your gesture — bots can't fake human timing and pressure.

03
🔐

Get Your Proof

Receive a signed JWT with nullifier, device_hash, and behavior_score. Valid 24 hours. No personal data inside.

04
⚡

Projects Verify

POST the JWT to our API. Get valid: true back in milliseconds. Done.


One endpoint.
Ship in minutes.

No API key for the first 1,000 calls. No SDK. No wrapper. Just curl.

bash
$ curl -X POST \
  https://poh-api.vercel.app/api/verify \
  -H "Content-Type: application/json" \
  -d '{
    "proof": "eyJhbGciOiJFUzI1NiJ9..."
  }'
{
  "valid": true,
  "nullifier": "0xa3f9...c8d2",
  "human_score": 0.96,
  "expires_at": "2026-04-09T..."
}

● score ≥ 0.85 = human   ● nullifier prevents replay


Built different.
For a reason.

📱

Mobile-Native

Built entirely in Flutter. The verification happens on a real Android device — where 3B+ humans already live.

🧠

On-Device ML

TFLite model scores your tap gesture locally. Your behavior data never leaves your phone. Score ≥ 0.85 proves humanity.

🛡️

Play Integrity

Google Play Integrity API confirms a genuine, unmodified Android device. Emulators, rooted phones, and bots are rejected at the gate.

🔁

Replay Protection

Every proof contains a cryptographic nullifier stored in Redis with 24h TTL. The same JWT can never be used twice.

⚡

One API Call

POST a JWT, get a boolean back. No SDK. No dependency. No ceremony. If you can curl, you can integrate in under five minutes.

💰

$0.10 / Verify

Flat rate. No tiers, no minimums. First 1,000 verifications are completely free — no credit card, no KYC to start.


How we stack up

Honest comparison. We're early. But the fundamentals are right.

Feature Proof of Human Worldcoin Gitcoin Passport Civic
Privacy-preserving ✓ ✗ Partial Partial
No hardware required ✓ ✗ ✓ ✓
Mobile-native verification ✓ ✗ ✗ Partial
No biometric storage ✓ ✗ ✓ Partial
Simple REST API ✓ Partial ✗ ✓
No KYC required ✓ ✗ ✗ ✗
Under $0.50/verify ✓ ✗ Partial Partial
✓ Fully supported Partial Limited or partial ✗ Not supported

Common questions

No personal data is stored anywhere. The server stores only a cryptographic nullifier — a random hex string — in Redis with a 24-hour TTL. Its sole purpose is preventing replay attacks. Your device_hash and behavior_score exist only inside the signed JWT on your device. No email. No name. No biometrics stored.
Two independent layers: 1) Google Play Integrity API confirms your device is a genuine, unmodified Android phone — not an emulator, not a rooted device. 2) An on-device TFLite ML model scores your tap gesture against patterns bots cannot replicate — timing variance, pressure, trajectory. A behavior score ≥ 0.85 is required. Both layers must pass to generate a valid proof.
One API call: POST https://poh-api.vercel.app/api/verify with the user's JWT proof in the request body. You receive { valid: true, nullifier: "0x...", human_score: 0.96 } back. First 1,000 verifications are completely free — no API key required. For volume access, reach out on Twitter @ProofOfHumanApp.
Get Started

Stop bots.
Start building.

First 1,000 verifications free. No credit card. No KYC.
Deploy in 5 minutes with a single API endpoint.

Open source · MIT license · Built solo on an Android phone in Termux

Need enterprise plan or custom integration?

DM @ProofOfHumanApp for Enterprise Access
💳 Pay with Card — $9.99
⬡ Pay with USDC (Polygon)