Pulse is a verification layer for Web3 wallets. Check in once a day for a week, mint a soulbound badge, and any contract can read it in one line. You never hand over an ID or an iris scan, and the only thing that ever leaves your wallet is a signature.
Airdrops, governance, allocations, retroactive rewards. Anywhere a protocol pays out, fake users show up at industrial scale. Clean wallet histories are commodity priced. A thousand fake users costs less than a single real customer acquisition.
The mainstream answer is to collect identity. Iris scans, KYC, biometric capture. These work, and most users reasonably refuse them. The fallback answer is CAPTCHAs and social graphs, both of which farms cracked years ago. Pulse is the third thing.
Connect a wallet and sign one message a day. It costs nothing, it isn't a transaction, and your personal data stays out of it entirely. The signature is the whole ceremony.
One check-in a day, seven days in a row. Let 48 hours pass since your last check-in and the streak resets. You can't buy your way past the week, and nobody gets an exception.
After day seven, the backend reviews the week against internal rules. If it signs off, the wallet mints a permanent, non-transferable badge on Base. The daily ritual ends there. Bronze never expires, and it's only the first tier.
$ curl https://pulse-protocol-production-44ef.up.railway.app/reputation/<wallet> { "wallet": "0x1d5d4f8a…61a21", "tier": "bronze", "streak": 7, "lastCheckInAt": "2026-05-20T21:27Z" }
Entry tier. Seven consecutive daily check-ins, each one signed from the wallet. The Phase 0 baseline.
LIVE · PHASE 0
Layered signals beyond the streak. Sustained activity over longer windows.
PHASE 1
The hardest signal to fake. Reserved for wallets that compound participation across protocols and time.
PHASE 2PHASE 0 SHIPS BRONZE ONLY · THE REST ARRIVES WHEN IT'S READY
Call balanceOf on the Pulse Badge contract. One means a human did the week. Zero means they didn't. It's a standard ERC-721 read, so your contract already knows how to make it.
// the whole integration bool human = pulseBadge.balanceOf(wallet) > 0;
GET /reputation/{wallet} returns tier, streak, and last check-in time. It's the same endpoint shown above, already answering, and it works from any backend in any language.
$ curl https://pulse-protocol-production-44ef.up.railway.app/reputation/<wallet>
Integration takes under an hour. Contract addresses and a walkthrough ship in the partner pack. We're not announcing, we're looking for partners who'd rather see receipts than slides. Ask in private: @pulseproofed.