🇫🇷 France Identité Wallet
France Identité is the French government’s national identity wallet, and is set to become France’s official EUDI Wallet under the European Digital Identity (EUDI) regulation. It allows French citizens to store a digital version of their national identity card and to present identity data and proof of age to verifiers. The wallet issues credentials in ISO 18013-5 mDoc format and presents them over OpenID4VP, which means you can integrate with the France Identité wallet using Paradym without any custom integration.
This guide covers all features Paradym supports with the France Identité wallet. Currently parties are able to verify credentials from the wallet.
For an up-to-date overview of the status of the French wallet and other European wallets, see the EUDI Wallet country explorer .
Desktop flow
Mobile flow
Requirements
To verify credentials from the France Identité wallet you need:
- A Paradym account and project. The default project created with your account is enough to get started.
- Access to the France Identité wallet itself, set up with a PID and Proof of Age attestation (covered below).
- France Identité registered as a trusted entity, so only credentials issued by France Identité are accepted.
- A verifier certificate to sign your presentation requests.
- A presentation template defining the credential and attributes you request.
Test with the Playground
Want to try this out before setting it up in Paradym? Use the Paradym Playground to run issuance and verification flows directly in your browser, no configuration required.
Make sure you have the France Identité wallet set up, then open the verification flow and pick the credential you want to verify from the France Identité wallet.
Available credentials
Getting access to the France Identité wallet
The production France Identité app is available in the Apple App Store and Google Play Store . Using the production app requires you to be a French citizen and to set up the wallet as a citizen would (using a physical national identity card).
If you don’t have access to the production wallet, or want to test your integration without real identity data, you can request access to the pre-production app through the France Identité playground .
Production and Pre-Production
The France Identité Wallet has two different releases:
- Production: The production application that you can download from the public App and Play stores. You need to be a french citizen to set up the wallet, and credentials contain real user data.
- Pre-production: This is the testing environment, also called the “France Identité Partenaires build”. Everyone can install and setup the pre-production application (once you have access), and you don’t need to be a french citizen.
The integration within Paradym for the production and pre-production environments is identical, except for the certificates registered as trusted entities. The pre-production uses separate signing certificates, and it’s important to only trust the certificates for the environment you want to verify credentials from.
There’s two common ways to separate between the two environments:
- Setting up two projects in Paradym, one for production, and one for pre-production. You create one Trusted Entity in each project, and link all templates within that project to the Trusted Entity.
- Setting it up within one project. You create two Trusted Entities within your project (for production and pre-production). Each template should be linked to either the production or pre-production Trusted Entity. We don’t recommend trusting both the production and pre-production certificates on a single template.
We recommend the first approach, so you can properly separate the production and pre-production environments.
Setting up the wallet and receiving the PID and Proof of Age attestations
Before you can present credentials from the wallet, it needs to be initialized and hold a PID and Proof of Age attestation. France Identité documents this setup in their playground, with screenshots for each step:
- App initialization — set up the pre-production app using a pre-registered PID or a specific identifier. In the pre-production app, NFC scanning of the physical card is simulated, so no real card is needed.
- PID and Proof of Age issuance — after initialization, issue the PID and the Proof of Age (AV) attestation into the wallet. Both are issued in mDoc format. This is what you’ll later verify with Paradym.
Once the wallet holds a PID and Proof of Age attestation, you’re ready to verify them with Paradym as described in Verification.
Supported credentials
The France Identité wallet currently supports two credentials, both as mDoc:
| Credential | Doctype / namespace | Description |
|---|---|---|
| Proof of Age (AV) | eu.europa.ec.av.1 | Age attestation following the EU Age Verification specification . Signed under the EAA root. |
| Person Identification Data (PID) | eu.europa.ec.eudi.pid.1 | Core identity data (name, date of birth, nationality, portrait, …). Signed under the PID root. |
The tables below list the attributes each credential can disclose. The Claim column is the attribute identifier you use in a presentation template. The Always Available column indicates whether the attribute is always present in the credential. In order to comply with data miniization principles you should request only the attributes your use case strictly needs.
Proof of Age (AV)
Namespace eu.europa.ec.av.1. An Age Verification credential is issued together with the PID.
| Claim | Always Available | Description |
|---|---|---|
age_over_18 | Yes | Whether the holder is at least 18 years old (true / false). |
age_over_21 | Yes | Whether the holder is at least 21 years old (true / false). |
issuing_country | Yes | ISO 3166-1 alpha-2 country code of the issuing country (e.g. FR). |
expiry_date | Yes | Date the attestation expires (issuance date + 3 months). |
Verification
You can verify Proof of Age and PID credentials from the France Identité wallet with Paradym. Below you’ll walk through the full flow step by step, from creating a verifier certificate to handling the presentation response.
Creating a verifier certificate
To request credentials from the France Identité wallet, you authenticate your presentation requests with an X.509 verifier certificate. The France Identité wallet currently requires no registration or certification of verifiers for the OpenID4VP flow. Any unregistered self-signed certificate is accepted, so you can create a verifier certificate directly in Paradym and start verifying.
Create a verifier root certificate with a P-256 key. The certificates guide contains detailed guidance, but in short:
To create a verifier certificate from the dashboard, go to the Create certificate page under the “Trust” tab of your project, and provide the following:
- Type: Verifier Root
- Key type: P-256
- Country Name: e.g.
NL - Common Name: e.g.
Paradym - Issuer Alternative Name URL: e.g.
https://paradym.id
If you use separate projects for production and pre-production, you will need to create a certificate in both projects.
Registering France Identité as a trusted entity
Trusted Entities in Paradym enable you to define the issuers you trust. Trusted entities can be linked to a specific credential that is requested in a presentation template, and limit who can issue a specific credential. This ensures only the authorized issuers of a credential (in this case France Identité) are trusted during credential verification.
France Identité signs its credentials with its own issuer certificates, and uses different certificates for different credential types: the Proof of Age credential is signed under the EAA root, and the PID credential is signed under the PID root. To configure Paradym to only accept credentials issued by France Identité, you register these issuer certificates on a trusted entity and link it to your presentation template.
Once France publishes a publicly available List of Trusted Entities (LoTE) you will be able to select this list in Paradym. Until then you will have to register the issuer certificates manually. The certificates are published on the France Identité marketplace, under Issuer certificates .
Make sure you register the certificates for the environment you are integrating with. See Production and Pre-Production for more information.
Create a single trusted entity holding both the PID IACA certificate and the EAA IACA certificate for the environment you are integrating with. Note the id of the created trusted entity, as you’ll need it to link it to your presentation template below.
To create the trusted entity from the dashboard, go to the Create trusted entity page under the “Trust” tab of your project, and:
- Give it a recognizable name, e.g.
France Identité Issuer(orFrance Identité Issuer - Pre-production). - Under X.509 Certificates, click + Add certificate and paste the PID IACA certificate for your environment (the
certificatevalue from the matching API example above), naming it e.g.France Identité PID Issuer Certificate. - Click + Add certificate again and paste the EAA IACA certificate used for the Proof of Age credential, naming it e.g.
France Identité EAA Issuer Certificate. - Click Create trusted entity.
Creating the presentation template
A presentation template defines which credential and which attributes you request from the wallet. You create one template per credential you want to verify. Each template:
- uses the X.509 certificate (P-256) authentication method (the verifier certificate you created), and
- links the trusted entity you created for the matching environment, so that only credentials issued by France Identité are accepted.
To create a presentation template from the dashboard, go to the Create presentation template page under the “Templates” tab of your project, and provide the following:
- Name:
Proof of AgeorProof of Identity, depending on the credential. - Description: The reason for requesting this data, e.g. “To grant access to the online gambling platform we need to verify you’re over 18 years old.” This may be displayed by the wallet, but whether it is shown depends on the wallet implementation.
- Authentication method:
X.509 certificate (P-256). - Credentials: Select the pre-made template for
Proof of AgeorPID (mdoc), and keep only the attributes you need:- Proof of Age: keep
issuing_country,expiry_date, andage_over_18orage_over_21depending on the use case. - PID: choose from
family_name,given_name,birth_date,birth_place,nationality,portrait,family_name_birth,expiry_date,issuing_authority,issuing_country,age_over_18,age_in_years, andage_birth_year, and remove the other attributes.
- Proof of Age: keep
- Trusted entity: link the trusted entity you created for the matching environment.
Requesting data from the France Identité wallet
France Identité credentials are mDoc and are presented over OpenID4VP, so you create an OpenID4VP verification request from the presentation template you created above.
Make a POST request to https://api.paradym.id/v1/projects/{projectId}/openid4vc/verification/request, passing the presentationTemplateId of the template. Response encryption is enabled by default, and we recommend keeping it enabled.
{
"presentationTemplateId": "<PRESENTATION_TEMPLATE_ID>"
}The response contains an authorizationRequestUri. Render this as a QR code (for cross-device flows) or as a link (for same-device flows) so the holder can open it in their France Identité wallet and approve the request. You can also render authorizationRequestQrUri directly as image:
{
"id": "cmqv0gmum002b02s6vl2gol70",
"authorizationRequestUri": "https://paradym.id/invitation?request_uri=https%3A%2F%2Fparadym.id%2Finvitation%2F6abba887-8ed8-40a7-8e3f-339cc29f6cab%2Fauthorization-requests%2Fd9530d1e-d52f-488f-bfec-016011704e3b%3Fraw%3Dtrue&client_id=x509_hash%3A1mQ2eeNSaiqjN61UAcakxfKN7msnDb2-YN89fJywqxQ",
"authorizationRequestQrUri": "https://paradym.id/invitation?request_uri=https%3A%2F%2Fparadym.id%2Finvitation%2F6abba887-8ed8-40a7-8e3f-339cc29f6cab%2Fauthorization-requests%2Fd9530d1e-d52f-488f-bfec-016011704e3b%3Fraw%3Dtrue&qr=true"
// ... other parameters ...
}See Verify credentials for the full verification flow, including the dashboard steps.
Handling the presentation response
Once the holder approves the request in the France Identité wallet and the presentation is verified, the received credential data becomes available. The recommended way to receive it is through a webhook. Listen for the following events:
openid4vc.verification.data— emitted when the verification succeeds, containing the disclosed attributes.openid4vc.verification.failed— emitted when the verification fails (for example, when the credential was not issued by a trusted entity, or a certificate in its chain is expired or revoked).
Alternatively, you can retrieve the verification session through the API by making a GET request to https://api.paradym.id/v1/projects/{projectId}/openid4vc/verification/{openId4VcVerificationId} using the id from the verification request response. Note that verification data is only available through the API for a limited time, depending on your project’s “Verification data access” setting.
A completed PID verification looks like this. The disclosed attributes are under credentials[].presentedAttributes, keyed by the credential namespace, and isValid confirms the mDoc issuer and device signatures verified against the trusted entity. The raw value is the base64-encoded mDoc and the portrait is a base64-encoded image — both are truncated below for readability.
{
"id": "cmqv0gmum002b02s6vl2gol70",
"createdAt": "2026-06-26T14:12:58.412Z",
"updatedAt": "2026-06-26T14:13:10.738Z",
"status": "verified",
"error": null,
"presentationTemplateId": "cmqv088ti001l02s6n72tlcxw",
"credentials": [
{
"exchange": "openid4vc",
"format": "mdoc",
"presentedAttributes": {
"eu.europa.ec.eudi.pid.1": {
"portrait": "data:image/jp2;base64,AAAADGpQICANCocKAAAAFGZ0eXBqcDIg…",
"birth_date": "1990-07-13",
"given_name": "Maëlis-Gaëlle Marie",
"expiry_date": "2031-06-26T13:34:00Z",
"family_name": "NOM D'USAGE",
"nationality": ["FR"],
"issuing_country": "FR",
"issuing_authority": "France Titres"
}
},
"raw": "o2d2ZXJzaW9uYzEuMGlkb2N1bWVudHOBo2dkb2NUeXBld2V1LmV1cm9wYS5lYy5ldWRpLnBpZC4x…",
"isValid": true,
"issuer": {
"commonName": "DS",
"certificate": "-----BEGIN CERTIFICATE-----\nMIIDIzCCAsmgAwIBAgIUF…\n-----END CERTIFICATE-----"
},
"holder": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:BhFl4IfPCkV9xRSOIz7RoVG2npQzktCcdramKdZMQ0c"
}
],
"expiresAt": "2026-06-26T14:27:58.408Z"
}See Handling the verification response for the full details on webhooks, the API, and viewing verifications in the dashboard.
That’s it!
You now know how to verify Proof of Age and PID credentials from the France Identité wallet with Paradym. If you have any suggestions, remarks or questions, reach out to us or join the Paradym Slack . Happy building!