Age Verified.
Privacy Preserved.
The first ZK proof age verification solution hosted in Switzerland. Compliant with DSA, GDPR and NLPD.
Deploy in minutes.
Current age verification methods
involve personal data processing
This creates compliance, security, and privacy challenges for both users and businesses.
Three steps. Full privacy.
Zero personal data.
The user completes KYC only once. All subsequent verifications are 100% anonymous.
One-time KYC
The user verifies their ID document on privexzk.ch/verify. Cost: CHF 1.90. We only confirm age β₯ 18 β nothing else is stored.
Credential stored locally
The JSON credential is stored on the user's device. No database. No server knows their identity. Valid for 1 year across all partner platforms.
ZK Proof generated locally
On your platform, the widget generates a cryptographic proof in under 5 seconds. Your server receives only the result.
Your nullifier secret never leaves the device. The ZK proof mathematically verifies the credential without revealing any personal information β not even to PRIVEX ZK Age.
From zero to verification
in minutes.
Add PRIVEX ZK Age to your platform with just a few lines of code. Compatible with HTML, React, Vue, PHP and WordPress.
Widget bundle: 9.5KB gzip β zero LCP impact
Shadow DOM isolated β no CSS conflicts
Dark / Light mode auto-detected
Multilingual: EN Β· FR Β· DE Β· IT
Secret API key never exposed client-side
id="age-gate"
data-platform-key="pk_live_xxx"
data-min-age="18"
data-verify-endpoint="/api/verify-age"
>
import { useEffect } from 'react' export function AgeGate({ onVerified }) { useEffect(() => { window.PrivexAgeGate?.init({ platformKey: 'pk_live_xxx', verifyEndpoint: '/api/verify-age', theme: 'dark', onVerified: (result) => onVerified(result) }) }, []) returnid="privex-age-gate" /> }// relay.php β keeps sk_live secret server-side $body = file_get_contents('php://input'); $ch = curl_init('https://api.privexzk.ch/verify/proof'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'X-API-Key: ' . $_ENV['PRIVEX_SECRET_KEY'] ] ]); echo curl_exec($ch);// functions.php add_action('wp_footer', function() { echo ''; }); // REST relay endpoint add_action('rest_api_init', function() { register_rest_route('privex/v1', '/verify', [ 'methods' => 'POST', 'callback' => 'privex_relay_handler', ]); });
Clear, honest pricing.
Plans below are for businesses integrating PRIVEX ZK Age into their platform. No hidden fees. No surprises.
CHF 1.90 β paid directly by the user on privexzk.ch/verify. Your platform pays nothing for this step.
CHF 0.90 β paid by the user once a year. No re-verification of identity required.
Custom pricing, SLA and white-label available. Contact us to discuss your needs.
Frequently asked questions
A Zero-Knowledge Proof (ZKP) allows one party to prove a statement is true without revealing any underlying data. In our case, the user proves they are over 18 without showing their ID card, date of birth, or any personal information. PRIVEX ZK Age uses Groth16 β one of the most battle-tested ZK algorithms β to generate this proof locally in the user's browser in under 5 seconds.
No. The user completes the KYC process once (CHF 1.90) and receives a credential valid for 1 year, reusable across all platforms that integrate PRIVEX ZK Age. Think of it as an anonymous age passport β verified once, used everywhere.
Yes. Our solution is built around the principle of data minimisation:
only { "verified": true } is transmitted to your platform.
No personal data transits after the initial verification.
The French data protection authority (CNIL) has officially recognised
ZK proofs as a privacy-friendly model for age verification.
Our architecture is fully compliant with DSA Art.28, GDPR, and NLPD.
100% in Switzerland and the EU. Our backend runs on Railway EU, our database on Supabase EU. No US servers. No data transfers outside Europe. Our company is registered in Switzerland (Grand-Lancy, Geneva) and fully compliant with Swiss NLPD and European GDPR.
The user can simply redo the KYC process (CHF 1.90) to obtain
a new credential. The process takes less than 2 minutes.
We recommend users store their credential.json file
securely β for example in a password manager or encrypted storage.
Yes. We provide a full sandbox environment on the Sepolia testnet (Ethereum test network). No credit card required to test. Contact us at hello@privexzk.ch to get your sandbox API keys and start integrating today.
Ready to protect your users
and stay compliant?
The first ZK proof age verification built for businesses.
No personal data. No complexity. Just results.