Igrantio eu age verification
Skill L3-iGrant/skills/workflows/igrantio-eu-age-verification
EU Age Verification on the iGrant.io Organisation Wallet Suite: issue an age verification attestation as an ISO/IEC 18013-5 mdoc (doctype eu.europa.ec.av.1, boolean age_over_NN claims) via OpenID4VCI InTime, then verify a selectively disclosed age_over_18 proof via OpenID4VP + DCQL - no birthdate or identity revealed. Implements the EU Age Verification solution profile for EUDI Wallet (EUDIW) under eIDAS 2.0. Use for age-restricted content, products, or services.From its SKILL.md
npx -y skills add L3-iGrant/skills --skill igrantio-eu-age-verificationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 26 days oldThe repository was created 26 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.3 KB, 657 tokens by cl100k_base, as published. Nobody here has run it
EU Age Verification (EUDI Wallet)
When to use
Prove an age threshold (18, 21, 65, any age_over_NN) without revealing
birthdate or identity. The attestation is an ISO/IEC 18013-5 mdoc,
doctype eu.europa.ec.av.1, with boolean age_over_NN claims and
selective disclosure.
Before you build: run the integrator intake in igrantio-ows-overview - environment, API key, tenancy, backend host, webhooks, frontend - one question at a time, a recommended default with each.
Workflow
Issuer side (once per user):
- Create a credential definition: format
mso_mdoc, doctypeeu.europa.ec.av.1, claims such asage_over_18,age_over_21,age_over_65. - Issue InTime with the boolean claim values, e.g.
{ "age_over_18": true, "age_over_21": false, "age_over_65": false }. The response carriesCredentialExchangeId+ theopenid-credential-offer://QR/deeplink (render withigrantio-qr-code). Completion signal: webhookopenid.credential.credential_acked.
Verifier side (per check):
3. Create a presentation definition (DCQL) for mso_mdoc /
eu.europa.ec.av.1 requesting only the needed boolean, e.g.
age_over_18.
4. Send the verification request (v3) with that
presentationDefinitionId; render the openid4vp:// QR / deeplink.
5. Wallet discloses only the boolean; done on
openid.presentation.presentation_acked.v3 with verified === true.
Endpoints, payload shapes, and response fields: igrantio-ows-overview
api-reference §1 and §2.
Adjust for your deployment
- Pick the
age_over_NNclaims your use case needs; request exactly one boolean per verification - requesting more defeats data minimisation. - Same-device flows can use the Digital Credentials API instead of a QR:
see
igrantio-dcapi-android/igrantio-dcapi-ios. - If you only verify (a national issuer provides the attestation), skip the issuer steps and keep 3-5.
Cross-references
igrantio-dcql-claim-sets- age check with a birthdate fallback when the wallet lacks a boolean claim.igrantio-verifier-frontend- QR + DC API rendering;igrantio-qr-codefor the QR panel.
Source of truth
This workflow mirrors https://docs.igrant.io/docs/eu-age-verification/. Before implementing, fetch that page; if it disagrees with this skill (doctype, claim names, endpoints), the documentation wins - follow it and report the drift so the skill can be updated.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.