All products
Private age checks

Check age.Keep identity outof your database.

Your site receives a signed age result. The verifier handles the identity check.

18+ confirmedSigned result · fictional example
Demo

Try every outcome.

Choose a synthetic outcome and threshold. The request is checked by the demo service and database.

Database-backed demonot sent
Demo provider · sandbox
1 Request2 Verify3 Decide
DEMO PROVIDER

Ready to run the check?

The verifier returns an age band. Your site never sees the document.

Requested proofover 15 · no date of birthready
No identity input is collected.Run a synthetic request to see the database-backed result.

Try cancelled, expired, and provider-error states to see the recovery paths.

Data boundary

Your site gets the answer.
The verifier keeps the ID.

Store the signed decision, not the document behind it.

Traditional approach
IDPassport / DOBfull identity data
DBWebsite databaselong-lived exposure
×

More data to secure, delete and explain.

Privacy-preserving approach
PExternal providerdocument stays there
Signed yes / noage band only

Store a non-identifying decision record.

What your site stores

Enough to explain the decision. No identity database required.

verification_result.json
{
  "age_verified": true,
  "threshold": 15,
  "provider": "demo_provider",
  "verified_at": "timestamp",
  "verification_id": "non-identifying reference"
}
How it works

A small handoff, kept separate.

Your site calls the connector. The connector handles the verifier and returns signed age proof.

signed
01
</>
Website requests proofThreshold is set by the client.
02
Provider verifies the userDocuments stay at the provider.
03
Signed result returnsOnly the requested age proof.
04
Access is decidedAllow, block or recover.
Operations

Monitor checks,
not people.

This fictional view tracks outcomes and provider health. It contains no names, birth dates, or document data.

AgeHandoff / demo workspace
Demo dataAC
OVERVIEW / LAST 30 DAYS

Verification activity

Total attempts0↑ 12.4% vs last period
Approval rate0%↑ 3.1% vs last period
Failed sessions0↓ 8.7% vs last period
Cancelled0↓ 4.2% vs last period
OUTCOME MIX

Approved vs. rejected

Approved Rejected
100%75%50%25%0%
01 Jul
08 Jul
15 Jul
22 Jul
CURRENT POLICY

Access rule

Active
over15years
Provider status Healthy
Last eventreq_7fd2a1
Identity data stored0 fields
Integration

One connector.
Clear provider boundaries.

This sample shows the handoff, not a live provider API. Endpoints and payloads will vary.

CONNECTOR SURFACE

Keep provider logic in one connector. Future verifier changes stay manageable.

Create a verification sessiondemo only
// Ask the connector for a provider session
const session = await fetch('/verification/session', {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({
    threshold: 15,
    return_url: '/signup/age-check/complete'
  })
});

const { redirect_url } = await session.json();
window.location.href = redirect_url;
Mock response · no live provider connectedJSON / HTTPS
Technical readiness audit

Decide what your age check needs
before you build it.

I can review your signup flow, verification routes, thresholds, and recovery states. You get a practical integration plan.

Request an audit Technical guidance only. No legal certification or compliance guarantee.
01 Map the signup flow02 Compare verification routes03 Plan every outcome04 Document the handoff

Start with your current flow.

Tell me where the age check appears and what your product needs to decide.

Replies go to the work email you provide.

Copied to clipboard