EU Age Verification Blueprint

Age verification.
One API call.

DSA Article 28 compliance via the official EU standard. Your users verify their age. You get a boolean. No wallet expertise required.

integration.js① Token
// 1. Get access token const { access_token } = await fetch( 'https://api.espuni.com/api/oauth2/token', { method: 'POST', headers: { Authorization: 'Basic …' } } ).then(r => r.json());
// 2. Create verification session const { session, crossDeviceUri } = await fetch( 'https://api.espuni.com/api/verifier/offer', { method: 'POST', headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify({ response_type: 'uri' }) } ).then(r => r.json()); // render QR from crossDeviceUri
// 3. Webhook result { "session": "a1b2c3d4", "verified": true, "claims": { "age_over_18": true } }
espuni · Age Verification

Generating session…

Verified

age_over_18true

npm install @espuni/node@espuni/node ↗@espuni/browser ↗@espuni/core ↗

Live

Age verification (EU AV Blueprint)

Proof of age against conformant EUDI wallets, anchored in the European Trusted List.

Livesame-device

Zero-knowledge proof

Prove someone is of age without revealing their date of birth — mathematical privacy, not a contractual promise.

01

Call the API

POST /api/verifier/offer with requestId: "age-verification". Receive session, uri and crossDeviceUri for the QR.

02

User verifies

Opens their EU Age Verification App or EUDI Wallet — scanning the QR or QR-less on the same device (Digital Credentials API) — and approves the presentation.

03

Receive the result

age_over_18: true/false via webhook or GET /api/session/:id. No personal data exposed.

Your platform
espuni
User + AV app
  1. 1You request a verificationone API call
  2. 2espuni guides the userQR with their age verification app, or QR-less in the browser (Digital Credentials API)
  3. 3The user approves in their appshares only “over 18” — nothing else
  4. 4espuni validates the credentialsignature and issuer against the EU Trusted List
  5. 5You receive the resultage_over_18: true/false · webhook or polling
The whole flow, from your API call to the boolean. Cryptography, the EUDI standard and the EU Trusted List stay inside espuni.

One integration. Any EUDI wallet.

Your platform confirms age without building the infrastructure or handling identity. espuni resolves the EUDI ecosystem for you: you ask for the claim and get a verified answer.

  • A single integration works with any conformant EUDI wallet.
  • You don't build or operate verification infrastructure.
  • You never handle the end user's identity data.
  • Every verification leaves auditable evidence, downloadable as JSON.

Full age verification flow using the EU Age Verification App. This is exactly what your users would see when you integrate into your platform.

Need AV credentials?

Get a Proof-of-Age credential in the official EU AV Reference App, then verify it in the demo.

Recommended wallet

Any wallet conforming to the EU Age Verification Blueprint works. The official reference app is the one we recommend for testing.

EU AV Reference App (official)

01

Official EU standard

Built on the EU Age Verification Blueprint by the European Commission.

02

OpenWallet Foundation

Powered by EUDIPLO, the reference middleware for the EU AV ecosystem.

03

Practitioners, not consultants

Built by people who work with these specifications day to day — not just advise on them.

// pricing

Simple, usage-based pricing.

Start free. Scale when you're ready.
No contracts. No setup fees.

Free tier includes 100 verifications/month. Production pricing based on volume — contact us for a quote.

What's next

Everything above is usable today. This isn't yet — and we'd rather say so.

Previewinvitation only

Trust-Lab by espuni and Flows by espuni

Every trust list, a relying party register with its access and registration certificates, and the PID that do not exist in production yet, issued in the same formats as the Commission and wired to your espuni account.

Explore Trust-Lab by espuni and Flows by espuni →

Explorationverification logic complete · no real wallet accepts our access and registration certificates yet · tested with the espuni wallet, Trust-Lab by espuni and Flows by espuni

Age via EUDI Wallet PID

Some member states — Germany among them — chose to answer age from the PID rather than with a separate AV credential. Where that attribute exists, it is the only one requested.

Explorationrequest built and tested · not wired into the product

Google Wallet

A different trust ecosystem (ID Pass), outside the EUDI framework. Proof of concept done; the decision to operate it is open.