Age verification · mdoc · data minimisation

Prove you are over 18, not who you are

The EU proof-of-age attestation says one thing: whether you are over 18. No name, no birth date, no photo. CodeB issues it from a passport or ID card chip it has checked, and asks for nothing else when it verifies age.

In one sentence: After a passport or ID card check, CodeB Wallet can hold the EU proof-of-age attestation (doctype eu.europa.ec.av.1), which contains only age_over_18 (true or false); a website that asks with it learns yes or no and nothing else.

EU age verification blueprint · ISO/IEC 18013-5 mdoc · OpenID4VCI · OpenID4VP + DCQL · Token Status List

Closed beta, in testing. Test credential. Not certified.

In short

What
The EU proof-of-age attestation: an ISO mdoc with doctype and namespace eu.europa.ec.av.1, issued by this site’s credential issuer.
Contents
age_over_18, true or false. The operator may add further thresholds (for example 16 or 21). Nothing else: no name, no birth date, no document number.
Source
Only a birth date read from a passport or ID card chip and released in the identity check. A typed birth date is never used.
Validity
90 days by default, and never beyond the day a stated answer would stop being true. Revocable through the status list.
Binding
Issued only to the CodeB Wallet that read the document, bound to its key.
Verification
The age check asks only for age_over_18, with no intention to keep it, and signs nobody in.

How you get and use it

Checked once, shown as yes or no.

Check your passport or ID card once

Open or confirm your account with a passport or ID card chip read by CodeB Wallet. Your birth date comes from the chip, not from typing.

Ask for the proof of age

Sign in in CodeB Wallet and add the proof of age from the list of documents, or collect it from an offer of the administrator. Only the phone that read your document can collect it.

Show it where age matters

A website or shop asks for “over 18” only. The wallet shows you the request; you agree, and the answer is yes or no – nothing else.

For websites and shops

  • age-verify.html lets the visitor choose the EU Wallet PID or the proof-of-age attestation.
  • The attestation request asks for age_over_18 alone, with intent_to_retain false.
  • Any other document is refused; nobody is signed in.

Why not the PID?

  • The PID can answer “over 18” too, but it is a full identity document.
  • The proof-of-age attestation holds no identity data at all, so it can be shown where an identity has no business.
  • Both work on the age check; the visitor chooses.

Privacy by design

Data minimisation

The attestation itself holds only age answers. A verifier cannot learn more, even by mistake.

Truthful for its whole life

An attestation that says “false” for a threshold ends before that birthday can begin anywhere in the world; a “true” is only stated once the birthday has begun everywhere.

No birth date in logs

The birth date is used to compute the answers when the attestation is issued; it never goes into a log or an error message.

Revocable

Every attestation has a status entry. If the wallet is revoked, its attestations are revoked with it.

Bound to your phone

Only the phone that read your document can collect the attestation; it is bound to that phone’s key.

No tracking

No third-party scripts, no analytics on the age check.

Frequently asked questions

What is the EU proof-of-age attestation?

A digital document defined by the EU age verification blueprint that states only whether its holder is over a certain age, mainly over 18. It is an ISO mdoc with doctype eu.europa.ec.av.1 and contains no name and no birth date.

How do I get one from CodeB?

Check your passport or ID card once with CodeB Wallet (account opening or account check). After the check is released, sign in in the app and add the proof of age from the list, or collect an offer from the administrator. It is a test credential during the closed beta.

What does a website learn when I show it?

Only whether you are over 18. The CodeB age check asks for age_over_18 alone, says it will not keep it, and does not sign you in.

How long is it valid?

90 days by default (the operator may set 1 to 365 days), and never longer than the answers stay true. A new one can be collected after that.

Can I collect it on another phone?

No. It is bound to the CodeB Wallet that read your passport or ID card. On a new phone, read the document again first.

What if collecting it fails half-way?

Open the same offer again on the same phone within 15 minutes (up to three times). The documents of the failed attempt are revoked, so only one set stays valid.

Is this certified?

No. It is designed to follow the EU age verification blueprint, but neither the issuer nor the age check is certified, and no level of assurance is claimed.

Age checks for your service?

Write to us about privacy-preserving age verification with EU wallets. Testers for CodeB Wallet are welcome too.