Skip to main content
Start with ownership-basic when the user has a browser wallet. Social, human, or org flows: Hosted Verify. Before production: Get started (app link, billing).

1. Install

npm install @neus/sdk

2. Create a proof

client.verify() defaults private. VerifyGate defaults differ - Widgets, Security and trust.
import { NeusClient } from '@neus/sdk';

const client = new NeusClient({
  appId: 'your-app-id', // production: create in NEUS Apps — see [Get started](./get-started)
});

const proof = await client.verify({
  verifier: 'ownership-basic',
  content: 'My content or claim',
  wallet: window.ethereum,
});

const proofId = proof.proofId;
Save proofId. Same value is qHash in some API paths - Verification results. Check before asking the user to verify again. Other verifiers: SDK verifications. No in-page wallet: Hosted Verify.

3. Poll

const status = await client.pollProofStatus(proofId, {
  interval: 3000,
  timeout: 60000,
});

4. Gate (React)

import { VerifyGate } from '@neus/sdk/widgets';

<VerifyGate
  appId="your-app-id"
  requiredVerifiers={['ownership-basic']}
>
  <ProtectedContent />
</VerifyGate>
VerifyGate | Integration

5. Server check

  • gateCheck address = wallet that signed verify().
  • Prefer a stored id + check before a new verify.
  • Verifier list must match what you issued.
const result = await client.gateCheck({
  address: '0x...',
  verifierIds: ['ownership-basic'],
});

See also

Get startedApp, billing, production
Choose a pathSDK, widgets, API, MCP
IntegrationCheck, verify, save, reuse
ExamplesRepositories