Skip to main content

German PID Rulebook (PID-DE)

Version 1.0.0 – Draft for Consultation
ARF PID Rulebook Version used for this document: 1.6

This rulebook is defining requirements. The current status of implementation is described in the Developer Guide.

Introduction

Purpose

This Rulebook specifies how the ARF PID Rulebook and PID Definition in CIR 2026/1731 are applied within the German EUDI Wallet ecosystem. It defines national specifications required by German legislation, system architecture, and operational constraints. The document ensures full interoperability with the EU EUDI ecosystem while reflecting the decisions made within the German ecosystem:

  • There will be just one PID Provider in Germany.
  • The PID Provider is a backend service that translates from the German national eID scheme into the eIDAS/EUDI Wallet scheme by issuing a PID in the mdoc and in SD-JWT VC formats, suitable for eIDAS Level of Assurance (LoA) High. The Wallet receives issued credentials from the PID Provider and presents them to a Relying Party.

What is the PID?

In the context of the EUDI Wallet, Person Identification Data (PID) refers to the set of identity attributes that uniquely identify a natural person, such as the person's name, date of birth, and other identifying information. These attributes are issued by the PID Provider (PP) as a verifiable credential, encoded in a supported credential format such as ISO/IEC 18013-5 mdoc or SD-JWT VC. While the term PID is commonly used as shorthand for both the identity data and the issued credential, the term PID credential is technically more precise whenever referring to issuance, storage, presentation, or verification of the credential itself.

Relationship to CIR 2026/1731 and ARF

The CIR 2026/1731 remains the baseline reference. The ARF is adding more explanation referenced in this rulebook, but isn't a regulatory reference. This document provides German national specializations. In case of conflict, German national specializations prevail.

Scope

Applies to:

  • the German PID Provider,
  • German Wallet Providers,
  • Relying Parties in Germany,
  • Trust and governance entities.

Attributes and Metadata

Important for Relying Parties.

All string values in eIDs are stored uppercase, following ICAO Doc 9303 for machine readable travel documents. It uses ISO/IEC 8859-1, following BSI TR-03110 Part 3 D.2.1.4. This also means that letters like "Ö" (ISO/IEC 8859-1 0xD6) are used and not replaced by "OE".

One main component of the PID Provider is the connection to an eID-Server according to BSI TR-03130 that manages an eID authorization certificate that is allowed to request the relevant attributes according to the PID specification of eIDAS. The eID-Client reads the identity data from the German eID Card or the German electronic Residence Permit, sends it to the eID-Server that validates the data.

The second main component of the PID Provider is a service that creates the credential in mdoc or SD-JWT format. This includes the creation of a digital signature over the identity data read by the eID-Server. The signature recognized as the PID attestation under eIDAS by Relying Parties and must fulfill eIDAS LoA high. Hence, the respective key material and access to the key material must be stored and managed in a way to resist attackers with high attack potential.

Mandatory attributes as specified in CIR 2026/1731

The full list of mandatory attributes specified in CIR 2026/1731 Annex 1 Table 1 is supported (apart from the portrait initially). German eIDs issued before November 2019 do not contain any information on nationality, so nationality is therefore assigned automatically as "DE" in case of a german eID Card.

Annex 1, Table 1 Data IdentifierBSI TR-03130 eID attributePID-Format: SD-JWT VC / ISO 18013-5 mdoc
family_nameFamilyNamesstring / tstr
given_nameGivenNamesstring / tstr
birth_dateDateOfBirthstring, ISO 8601-1, YYYY-MM-DD format / full-date
- year always set
- eID values 00 for month as well as day are possible
- they become converted to the maximum possible value which replace the 00, e.g. 31st of December, to fulfil RFC 3339
- if just month or day are 00, they are set to the maximum, e.g. 31 in January, or 12 for 00 month
- base format is casted
birth_placePlaceOfBirthJSON object / place_of_birth
nationalityNationalityarray of strings / [+ tstr]
- German PID contains just one item
- ISO 3166-1 country code as alpha-2 string
- "QU" when nationality is unknown
- "QS" when person does not hold a nationality
- see German mapping rules for country codes
portraitcurrently not included in the German PID

Optional attributes as specified in CIR 2026/1731

Annex 1, Table 2 Data IdentifierBSI TR-03130 eID attributePID-Format: SD-JWT VC / ISO 18013-5 mdoc
resident_addressnot availablenot included in the German PID
resident_countryPlaceOfResidence.Countrystring / tstr
resident_statePlaceOfResidence.Statestring / tstr
resident_cityPlaceOfResidence.Citystring / tstr
resident_postal_codePlaceOfResidence.ZipCodestring / tstr
resident_streetPlaceOfResidence.Streetstring / tstr
personal_administrative_numbernot availablenot included in the German PID
family_name_birthnot availablenot included in the German PID
given_name_birthnot availablenot included in the German PID
sexnot availablenot included in the German PID
email_addressnot availablenot included in the German PID
mobile_phone_numbernot availablenot included in the German PID

The German eID may contain a field NoPlaceInfo in case the issuing authority could not verify the address. The attributes resident_country, resident_state, resident_city, resident_postal_code and resident_street will be an empty string in this case.

Additional national attributes of German PID

Included in the national namespace section "eu.europa.ec.eudi.pid.de.1" for ISO mdoc.

Info

The following attributes MAY remain unpopulated. If an attribute is not populated and of type string/tstr, the corresponding claim SHALL be an empty string.

Data identifierBSI TR-03130 eID attributePID-Format: SD-JWT VC / ISO 18013-5 mdoc
source_document_typeDocumentTypestring / tstr; "ID" = german eID, can also be "AR", "AS" or "AF" for Residence Permit
age_equal_or_over.NN (sd-jwt), age_over_NN (mdoc)AgeVerificationRequestTypeArray of key-value-pairs, values are boolean / bool
- NN is defined as age group.
- Age groups are 12, 14, 16, 18, 21 and 65
- Example: age_equal_or_over.12 (sd-jwt) or age_over_12 (mdoc)
academic_titleAcademicTitlestring / tstr
birth_nameBirthNamestring / tstr
- field is used as the base document may contain given name or familiy name at birth or a combination of both with any marker to divide
- see BSI TR 03130-1 Chapter 5.5.6
raw_eid_birth_dateDateOfBirthstring / tstr
- containing the birth-date from the eID in the format yyyy-mm-dd, may contain 00 values if set in the eID for month, day or both
- purpose is to clarify if there is a difference between the interoperable and the eID birth date

The age is calculated at the moment the PID-credential is issued. Usage of the age_equal_or_over.NN/age_over_NN groups shall reflect this fact. These claims only guarantee that the holder of the PID is above a certain age. If a claim is false, it can not be deducted that the holder is below a certain age. Wallet users shall request the issuance of a new batch of PIDs, when their age has changed regarding these age-groups.

Metadata as specified in CIR 2026/1731

Annex 1, Table 5 Data IdentifierBSI TR-03130 eID attributePresencePID-Format: SD-JWT VC / ISO 18013-5 mdoc
issuing_authoritynot available, fixed value "DE" usedmandatorystring / tstr
issuing_countryIssuingState, always "DE"mandatorystring / tstr
expiry_datenot usedoptionalnot included in the German PID
document_numbernot availableoptionalnot included in the German PID
issuing_jurisdictionnot availableoptionalnot included in the German PID
issuance_datenot availableoptionalnot included in the German PID
statusnot availablemandatoryReference to Token Status List in format of (IETF OAuth TSL)
Shards and sizes are depending on the change frequency of status. Always included in the German PID

Note that expiry_date as defined in the CIR is the administrative validity period (e.g., validity of the underlying eID), not the technical validity period of the PID. The technical validity period of the PID is expressed via credential format specific attributes (nbf, exp for SD-JWT VC and validFrom, validUntil for mdoc).

Formatting, encoding and mapping rules

Formatting

Format follows CIR 2026/1731, Annex 1 which defines the two possible formats of a PID based on ISO/IEC 18013-5 (Personal identification — ISO-compliant driving licence — Part5) as well as SD-JWT VC.

German format specializations for ISO/IEC 18013-5 / mdoc

Attribute identifierEncodingformat ISO mdocComments
birth_datefull-date (rfc3339)zero values in German eID for month and day are mapped to the possible maximum (e.g. 12 for month).
see Mandatory attributes as specified in CIR 2026/1731
place_of_birthCBOR Major Type 5 (map) / tobjectJust locality can be present. Can be an address string. If value in eID is "NoPlaceInfo", locality will be empty string this case, but shall be set.
nationality[+ tstr] (rfc8610)one or more alpha-2 country codes as specified in ISO 3166-1, mapped from eID field with pattern "[A-Z]{1,3}"
see German mapping rules for country codes
resident_countrytstr (rfc8610)alpha-2 country codes as specified in ISO 3166-1, mapped from eID field with pattern "[A-Z]{1,3}"
see German mapping rules for country codes

German format specializations for SD-JWT VC-based encoding

Attribute identifierEncodingformat SD-JWT VCComments
birthdatestring, ISO 8601-1 [ISO8601‑1] YYYY-MM-DD formatzero values in German eID for month and day are mapped to the maximum possible value in context
place_of_birthJSON objectSection 4.1 of [EKYC]; Just locality will be present. If FreetextPlace comes from eID, this is placed as locality. If value in eID is "NoPlaceInfo", locality will be empty, but shall be set.
nationalitiesarray of stringsSection 4.1 of [EKYC]; using alpha-2 country codes as defined in Section 2.2, mapped from eID field with pattern "[A-Z]{1,3}"
see German mapping rules for country codes
address.countrystringalpha-2 country codes as specified in ISO 3166-1, mapped from eID field with pattern "[A-Z]{1,3}"
see German mapping rules for country codes

Note that the claims vct, vct#integrity, cnf and metadata cannot be issued as selectively disclosable claims.

Encoding

Encoding shall be UTF-8, full unicode range in both cases, ISO/IEC mdoc and SD-JWT VC. Regarding CIR 2026/1731 Annex 1, Chapter 4.1 tstr should have a maximum length of 150 characters. With this rulebook it is requested, that all strings shall have a maximum length of 150 characters in any format, ISO/IEC mdoc as well as SD-JWT VC.

Mapping

As there are mappings between data identifiers following CIR 2026/1731, ISO/IEC 18013-5 and SD-JWT VC the table below highlights and explains these mapping.

CIR 2026/1731 data identifierISO/IEC 18013-5 attribute identifierSD-JWT VC attribute identifier
family_namefamily_namefamily_name
given_namegiven_namegiven_name
birth_datebirth_datebirthdate
birth_placeplace_of_birthplace_of_birth
nationalitynationalitynationalities
resident_countryresident_countryaddress.country
resident_stateresident_stateaddress.region
resident_cityresident_cityaddress.locality
resident_postal_coderesident_postal_codeaddress.postal_code
resident_streetresident_streetaddress.street_address
issuing_authorityissuing_authorityissuing_authority
issuing_countryissuing_countryissuing_country
age_over_NNage_equal_or_over

German mapping rules for country codes

German eIDs may contain country or nationality codes that are reserved for national use and are therefore not defined by ISO 3166. These user-defined codes are permitted within the German eID ecosystem and can be returned by an eID server compliant with BSI TR-03110 during the authentication process. Applications consuming eID data should therefore not assume that all returned country codes are valid ISO values. For example, the code XK is used to represent Kosovo, although it is not officially assigned in ISO 3166-1. The German XRepository country code list extends the ISO code set with these nationally defined codes and should be used to correctly interpret such values.

German mapping rules for ISO/IEC 18013-5 / mdoc

Mapping of German eID data into mdoc compatible values

Attribute identifiermdoc formateID formatMapping
birth_datetdate (rfc8610) or full-date (rfc3339) format: YYYY-MM-DDDateOfBirth string: pattern [0-9-]{10}, format: yyyy-mm-dddate conversion, see Mandatory attributes as specified in CIR 2026/1731
place_of_birthCBOR Major Type 5 (map) / tobjectPlaceOfBirth (sequence)string conversion from sequence elements of eID to string which will be placed as attribute locality. If value in eID is "NoPlaceInfo", locality will be empty string this case.
nationality[+ tstr] (rfc8610)Nationality (string) pattern: [A-Z]{1,3}Mapping from ICAO Country codes to alpha-2 country codes as specified in ISO 3166-1.
- "QU" when nationality is unknown
- "QS" when person does not hold a nationality.
- see German mapping rules for country codes
resident_countrytstr (rfc8610) pattern: [A-Z]{2}PlaceOfResidence.Country (string: pattern [A-Z ]{1,3})Mapping from ICAO Country codes to alpha-2 country codes as specified in ISO 3166-1.
- ISO 3166-1 country code as alpha-2 string
- see German mapping rules for country codes
issuing_countrytstr (rfc8610) pattern: [A-Z]{2}IssuingState (string: pattern [A-Z]{1,3})Always "DE" for German PID

German mapping rules for SD-JWT VC

Mapping of German eID data into SD-JWT VC compatible values

Attribute identifierSD-JWT VC formateID formatMapping
birthdatestring, ISO 8601-1 [ISO8601‑1] format YYYY-MM-DDDateOfBirth string: pattern [0-9-]{10}, format: yyyy-mm-dddate conversion, see Mandatory attributes as specified in CIR 2026/1731
place_of_birthJSON objectPlaceOfBirth (sequence)string conversion from sequence elements of eID to string which will be placed as attribute locality. If value in eID is "NoPlaceInfo", locality will be empty string this case.
nationalitiesarray of stringsNationality (string) pattern: [A-Z]{1,3}Mapping from ICAO Country codes to alpha-2 country codes as specified in ISO 3166-1. Codes beginning with X, e.g. XK for Kosovo, are not officially recognized. However, they are unofficial codes in ISO 3166-1. See German mapping rules for country codes.
address.countrystringPlaceOfResidence.Country (string: pattern [A-Z]{1,3})Mapping from ICAO Country codes to alpha-2 country codes as specified in ISO 3166-1. Codes beginning with X, e.g. XK for Kosovo, are not officially recognized. However, they are unofficial codes in ISO 3166-1. See German mapping rules for country codes.
issuing_countrystringIssuingState (string: pattern [A-Z]{1,3}}Mapping from ICAO Country codes to alpha-2 country codes as specified in ISO 3166-1

Namespaces

ISO/IEC 18013-5 / mdoc

In accordance with CIR 2026/1731, Annex 1 the mdoc-based German PID uses the DocType “eu.europa.ec.eudi.pid.1” and the two NameSpace data elements “eu.europa.ec.eudi.pid.1” and “eu.europa.ec.eudi.pid.de.1”. Specific German attributes are contained in the namespace “eu.europa.ec.eudi.pid.de.1”.

SD-JWT VC

In accordance with CIR 2026/1731, Annex 1 the SD-JWT VC based German PID uses the namespace urn:eudi:pid🇩🇪1, compact serialized format is used.

Examples

Note that the following examples are non-normative and are missing some metadata/technical values like the status entries.

ISO/IEC mdoc

{
"DocType": "eu.europa.ec.eudi.pid.1", # metadata that would define this as a PID (namespace "eu.europa.ec.eudi.pid.1"), includes data of the "eu.europa.ec.eudi.pid.de.1" namespace too
"issuerSigned": {
"NameSpaces": {

"eu.europa.ec.eudi.pid.1": {

## Mandatory attributes specified in CIR 2026/1731

"family_name": {
"digestID": 0,
"random": "h'1A2B3C4D5E6F708192A3B4C5D6E7F809'",
"elementIdentifier": "family_name",
"elementValue": "MUSTERMANN"
},

"given_name": {
"digestID": 1,
"random": "h'2B3C4D5E6F708192A3B4C5D6E7F8091A'",
"elementIdentifier": "given_name",
"elementValue": "ERIKA"
},

"birth_date": {
"digestID": 2,
"random": "h'3C4D5E6F708192A3B4C5D6E7F8091A2B'",
"elementIdentifier": "birth_date",
"elementValue": "1983-08-12"
},

"place_of_birth": {
"digestID": 3,
"random": "h'4D5E6F708192A3B4C5D6E7F8091A2B3C'",
"elementIdentifier": "place_of_birth",
"elementValue": {
"locality": "BERLIN"
}
},

"nationality": {
"digestID": 4,
"random": "h'5E6F708192A3B4C5D6E7F8091A2B3C4D'",
"elementIdentifier": "nationality",
"elementValue": ["DE"] # "DE" for german eID cards issued before Nov. 2019, otherwise eID based data
},

## Optional attributes specified in CIR 2026/1731

"resident_country": {
"digestID": 5,
"random": "h'6408192A3B4C5D6C87F8091A2B3C4D5E'",
"elementIdentifier": "resident_country",
"elementValue": "DE"
},

"resident_state": {
"digestID": 6,
"random": "h'6FC408192A3B4C5D6E7F8091A2B3C4F3'",
"elementIdentifier": "resident_state",
"elementValue": "NORDRHEIN-WESTFALEN"
},

"resident_city": {
"digestID": 7,
"random": "h'7472A3B4C5D6E7F8091A2B3C4D5E6B3A'",
"elementIdentifier": "resident_city",
"elementValue": "KÖLN"
},

"resident_postal_code": {
"digestID": 8,
"random": "h'7522A3B4C5D6E7F8091A2B3C46B3AD5E'",
"elementIdentifier": "resident_postal_code",
"elementValue": "51147"
},

"resident_street":{
"digestID": 9,
"random": "h'6E7F7472A3B4C5D8091D5E6B3AA2B3C4'",
"elementIdentifier": "resident_street",
"elementValue": "HEIDESTRASSE 17" # CIR 2026/1731 now offically request the house number as part of the street
},

"issuing_authority": {
"digestID": 12,
"random": "h'A0B3C4D5E6F708192A3B4C5D6E7F8091'",
"elementIdentifier": "issuing_authority",
"elementValue": "DE" # value to expect in German PID
},

"issuing_country": {
"digestID": 13,
"random": "h'B0C4D5E6F708192A3B4C5D6E7F8091A2'",
"elementIdentifier": "issuing_country",
"elementValue": "DE" # ISO 3166-1 alpha-2 country code derived from ICAO country code used for eID Card
}

},

"eu.europa.ec.eudi.pid.de.1": {

## Additional attributes

"birth_name": {
"digestID": 14,
"random": "h'E1D5E6F708192A3B4C5D6E7AA091A2B3'",
"elementIdentifier": "birth_name",
"elementValue": "GABLER" # may contain both, given and family name at birth, see notes at "Additional national attributes of German PID"
},

"source_document_type": {
"digestID": 15,
"random": "h'C0D5E6F708192A3B4C5D6E7F8091A2B3'",
"elementIdentifier": "source_document_type",
"elementValue": "ID" # "ID" = german eID, can also be "AR", "AS" or "AF" for Residence Permit
},

"age_over_12": {
"digestID": 16,
"random": "h'D0E6F708192A3B4C5D6E7F8091A2B3C4'",
"elementIdentifier": "age_over_12",
"elementValue": true
},

"age_over_14": {
"digestID": 17,
"random": "h'A3F1C8D209B4E6F7812D3C5A9E0F47B2'",
"elementIdentifier": "age_over_14",
"elementValue": true
},

"age_over_16": {
"digestID": 18,
"random": "h'5D8E0A91B2C3F4E60718A9BC3D4F5E60'",
"elementIdentifier": "age_over_16",
"elementValue": true
},

"age_over_18": {
"digestID": 19,
"random": "h'9B0E7C4A12F3D568A1C2E4F907B8D6E3'",
"elementIdentifier": "age_over_18",
"elementValue": true
},

"age_over_21": {
"digestID": 20,
"random": "h'C4A1F9037E5B2D8C190AF6E4B3D27589'",
"elementIdentifier": "age_over_21",
"elementValue": true
},

"age_over_65": {
"digestID": 21,
"random": "h'F7D2A9C403B1E6D5809C4E1F2A7B3D65'",
"elementIdentifier": "age_over_65",
"elementValue": false
},

"academic_title": {
"digestID": 22,
"random": "h'4f3be788e225ab8a323b18efd4b1449e'",
"elementIdentifier": "academic_title",
"elementValue": ""
},

"raw_eid_birth_date": {
"digestID": 23,
"random": "h'81e95c0ba1158ea2b651f797db158b7b'",
"elementIdentifier": "raw_eid_birth_date",
"elementValue": "1983-08-12"
}
}
},
"issuerAuth": {}
},
"deviceSigned": {}
}

SD-JWT VC

{
## Base data (SD-JWT VC DM)
"vct": "urn:eudi:pid:de:1",

## Mandatory attributes specified in CIR 2026/1731

"family_name": "MUSTERMANN",
"given_name": "ERIKA",
"birthdate": "1983-08-12",
"place_of_birth": {
"locality": "BERLIN"
}, # may be containing a full address when separate values are not available
"nationalities": ["DE"], # "DE" for german eID cards issued before Nov. 2019, otherwise eID based data

## Optional attributes specified in CIR 2026/1731

"address": {
"country": "DE", # ISO 3166-1 alpha-2 country code derived from ICAO country code of eID Card
"region": "NORDRHEIN-WESTFALEN", # State
"locality": "KÖLN", # City
"postal_code": "51147", # ZipCode
"street_address": "HEIDESTRASSE 17" # Street and house number
},

"issuing_authority": "DE", # not available in german eID card but mandatory, that's why the value out of issuing country is used (DE)

"issuing_country": "DE", # ISO 3166-1 alpha-2 country code derived from ICAO country code used for eID Card

## Additional attributes

"birth_name": "GABLER", # may be empty, may contain both, given and family name at birth

"source_document_type": "ID", # "ID" = german eID, can also be "AR", "AS" or "AF" for Residence Permit

"age_equal_or_over": {
"12": true,
"14": true,
"16": true,
"18": true,
"21": true,
"65": false
}, # see notes at the end of chapter "Additional national attributes of German PID"

"academic_title": "",
"raw_eid_birth_date": "1983-08-12",

# example for key binding (SD-JWT VC DM)
"cnf": {
"jwk": {
"kty": "EC",
"crv": "P-256",
"x": "52aDI_ur05n1f_p3jiYGUU82oKZr3m4LsAErM536crQ",
"y": "ckhZ-KQ5aXNL91R8Eufg1aOf8Z5pZJnIvuCzNGfdnzo"
}
}

}

Operational notes

Issuance

PID issuance in Germany will be based on eID card. The issuance will be executed by only one PID provider in Germany. PIDs will be issued in batches of separate PIDs within one credential issuance request and every PID is used only once to avoid linkability. When the PIDs have run out (or before, to allow for offline cases), a new batch is issued based on the Refresh Token used as seed credential. See also German National EUDI Wallet Architecture Documentation on Refresh Token.

The lifetime of the Refresh Token is 2 years. The lifetime of PIDs is 2 months, after this period new PIDs have to be requested with a valid Refresh Token.

To obtain a newly issued Refresh Token, the eID shall be presented again after the period corresponding to (Refresh Token lifetime − PID lifetime) has elapsed. For example, if the Refresh Token lifetime is 2 years and the PID lifetime is 2 months, the eID shall be presented again after 22 months.

Renewal

The PID must be renewed by the owners themselves in the event of changes to the eID, e.g., name change or new eID. Following 10a (4) PAuswG PID shall not be used furthermore in case that data has changed.

There is no automatic renewal.

Revocation

Revocation is done by IETF Token Status Lists.