demo · v141

Age Verification

The birthday-correction flow Google Wallet ships against. Instead of asking the user to photograph their driver's licence, request a single boolean claim from a mobile wallet — age over 18 / 21 — and verify the wallet's signed response. Minimum disclosure, maximum privacy.

Heads up Available behind chrome://flags/#web-identity-digital-credentials on Chrome 141 desktop. Production use cases are Android with the Credential Manager and a wallet (Google Wallet, IDPass). On unsupported platforms the call is recorded but no presentment dialog opens.
checking support…
awaiting credential request…

the call

// Request only the boolean age claim — no DOB, no name, no licence number
const dcr = await navigator.credentials.get({
  mediation: "required",
  digital: {
    requests: [{
      protocol: "openid4vp",
      data: {
        response_type: "vp_token",
        presentation_definition: {
          id: "age-over-18",
          input_descriptors: [{
            id: "org.iso.18013.5.1.mDL",
            format: { mso_mdoc: { alg: ["ES256"] } },
            constraints: {
              limit_disclosure: "required",
              fields: [{ path: ["$['org.iso.18013.5.1']['age_over_18']"], intent_to_retain: false }],
            },
          }],
        },
      },
    }],
  },
});
const vpToken = dcr.data.vp_token;  // pass to verifier backend for cryptographic check

why this angle

Mobile driver's-licence (mDL) credentials in mDoc format support boolean derived claims like age_over_18 and age_over_21 precisely so age-gated services can do compliance without seeing the date of birth. Google's documented deployment is the canonical example. This concept focuses on the request shape — the actual disclosure happens in the OS picker, and the verifier signature check runs server-side over the returned vp_token.

see also