Verify SDKs

Drop-in components for web onboarding

Embed NexielVerifyButton on any signup flow. The widget handles QR vs deep link choice, wallet polling, localization, and emits a result-first receipt (status, checks, audit metadata) when the wallet completes. Default verificationMode="gate"returns booleans only (no PII). Use match for reason codes, or data only if allow-listed and approved.

React

import { NexielVerifyButton } from '@nexiel/verify-react';

export default function Onboarding() {
  return (
    <NexielVerifyButton
      clientKey="pk_sandbox_abc123"
      credentialTypes={['age_attestation']} // minimal disclosure by default
      verificationMode="gate" // gate = booleans only; match=data requires allow-list/approval
      scope={['age_over_18']} // request only the age boolean
      onSuccess={(receipt) => {
        console.log('Verification receipt:', {
          session: receipt.session_id,
          result: receipt.result,
          checks: receipt.checks,
        });
        // Forward to your backend
      }}
      onError={(error) => console.error(error)}
    />
  );
}

Vanilla JS

<script src="https://js.nexiel.io/verify.js"></script>

<div id="nexiel-verify"></div>

<script>
  Nexiel.Verify({
    element: '#nexiel-verify',
    clientKey: 'pk_sandbox_abc123',
    credentialTypes: ['age_attestation'],
    verificationMode: 'gate', // 'match' | 'data' (data requires allow-listed attributes + approval)
    scope: ['age_over_18'],
    onSuccess: (receipt) => {
      console.log('Verification receipt', {
        session: receipt.session_id,
        result: receipt.result,
        checks: receipt.checks, // { age_over_18: true }
      });
    },
    onError: console.error,
  });
</script>

Why use the widget?

  • • Auto-detects desktop vs mobile wallets, fallback QR, and deep links.
  • • Built-in polling interval with exponential backoff to reduce API load.
  • • Emits structured `onSuccess`, `onError`, and `onClose` callbacks.
  • • Supports theming (logo, accent colors, fonts) to match your brand.
  • • Uses publishable client keys so no secret material touches the browser.