For Relying Parties
Verify SDKs
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.
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)}
/>
);
}<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>