Credential Configuration
Credential configurations define the structure and behavior of individual credentials. Each credential type has its own configuration.
Basic Structure
Each credential configuration is a JSON object that defines how a specific credential type should be issued. The configuration includes metadata, display information, field definitions (fields[]), and optional features like key binding and status management.
For a complete configuration example, see the Complete Configuration Example section at the bottom of this page.
The data object for the import can be found in the API Documentation
Configuration Fields
Required Fields
id: REQUIRED - Unique identifier for the credential configuration that will be used to reference this credential in the issuance metadata or in the credential offer.config: REQUIRED - Entry for credential_configuration_supported.format: REQUIRED - The format of the credential. Supported formats:dc+sd-jwt- Selective Disclosure JWT Verifiable Credentialsmso_mdoc- Mobile Document (ISO 18013-5)
display: REQUIRED - Display configuration for the credential, including name, description, locale, colors, and images.docType: REQUIRED for mso_mdoc - Document type identifier (e.g.,org.iso.18013.5.1.mDL).namespace: OPTIONAL for mso_mdoc - Default namespace for claims (e.g.,org.iso.18013.5.1). If not provided, derived from docType.
Optional Fields
description: OPTIONAL - Human-readable description of the credential. Will not be displayed to the end user.vct: OPTIONAL - VC Type Metadata provided via the/{tenantId}/credentials-metadata/vct/{id}endpoint. This link will be automatically added to the credential.keyChainId: OPTIONAL - Unique identifier for the key chain used to sign the credential. If not provided, the key chain withattestationusage type will be used. See Signing Key Chain for details.lifeTime: OPTIONAL - Credential expiration time in seconds. If specified, credentials will include anexpclaim calculated asiat + lifeTime. See Credential Expiration for details.statusManagement: OPTIONAL - Enable OAuth Token Status Lists for credential revocation. Whentrue, credentials include astatusclaim with revocation information. See Status Management for details.keyBinding: OPTIONAL - Enable cryptographic key binding. Whentrue, credentials include acnfclaim with the holder's public key and require proof of possession. See Cryptographic Key Binding for details.fields: REQUIRED - Field definitions (ClaimFieldDefinition[]) that describe claim paths, data types, defaults, disclosure behavior, and optional display labels.attributeProviderId: OPTIONAL - Reference to an Attribute Provider that fetches claims dynamically. See Attribute Providers for details.webhookEndpointId: OPTIONAL - Reference to a Webhook Endpoint for receiving notifications about the issuance process. See Notifications for details.sdJwtTrustFormat: OPTIONAL (SD-JWT only) - Controls trust signaling in issued SD-JWT credentials:x5c(default): include the X.509 chain in the JWT headerfederation: use federation issuer identity (iss) for trust resolution
credentialReusePolicy: OPTIONAL - Publishes a PID/EAA reuse policy in the credential metadata. See Credential Reuse Policy for details.embeddedDisclosurePolicy: OPTIONAL - Defines the embedded disclosure policy for the credential. See Embedded Disclosure Policy for details.iaeActions: OPTIONAL - Sequence of Interactive Authorization actions required before credential issuance. See Interactive Authorization Actions for details.
:::info Schema Metadata is managed separately TS11 Schema Metadata is managed in the dedicated Schema Metadata flow, not in the Credential Configuration editor. Use Schema Metadata to create and version schema metadata entries. :::
Configuring Fields
In the current configuration model, claim content is configured through fields[]. Each entry can describe either:
- a leaf claim (for example
path: ["given_name"]), or - a container claim (
object/array) with nestedchildren.
Nested child paths can be defined in two ways:
- relative to the parent path (recommended), or
- as a full absolute path (also supported).
For arrays, use numeric child path segments such as [0] to describe item entries.
:::info Claims Priority System EUDIPLO supports multiple ways to provide claims (configuration-level and offer-level), with a priority system that determines which claims are used. For a complete explanation of the claims priority order and when to use each method, see Claims. :::
Static Defaults via fields[]
You can define defaults directly in each field using defaultValue:
{
"fields": [
{
"path": ["given_name"],
"type": "string",
"defaultValue": "ERIKA",
"mandatory": true,
"disclosable": true,
"display": [
{ "lang": "en-US", "label": "Given Name" },
{ "lang": "de-DE", "label": "Vorname" }
]
},
{
"path": ["family_name"],
"type": "string",
"defaultValue": "MUSTERMANN",
"mandatory": true,
"disclosable": true
},
{
"path": ["address"],
"type": "object",
"disclosable": true,
"children": [
{
"path": ["country"],
"type": "string",
"defaultValue": "DE",
"mandatory": true,
"disclosable": true
},
{
"path": ["postal_code"],
"type": "string",
"defaultValue": "51147",
"disclosable": true
}
]
},
{
"path": ["nationalities"],
"type": "array",
"defaultValue": ["DE"],
"mandatory": true,
"disclosable": true,
"constraints": {
"items": {
"type": "string",
"title": "Nationality"
}
},
"children": [
{
"path": [0],
"type": "string",
"defaultValue": "DE",
"disclosable": false
}
]
}
]
}
Static field defaults are useful for:
- Default values for all credentials of this type
- Fixed metadata (e.g., issuing country, issuing authority)
- Development and testing scenarios
Nested Field Groups (children)
Use children when you want to model grouped structures like address, age_equal_or_over, or place_of_birth.
- Parent node: define
pathandtype(objectorarray) - Child nodes: define claim fields under
children[] - Child paths: prefer relative paths (for example
"path": ["street_address"]under parent"path": ["address"])
This structure improves readability in config files and enables grouped rendering in form-based UIs.
Attribute Provider
For dynamic claim retrieval, configure an Attribute Provider that is called during issuance:
{
"attributeProviderId": "my-claims-provider"
}
The Attribute Provider endpoint receives issuance context and returns claim values.
Attribute Providers are useful when:
- Claims need to be fetched from an external system or database
- Claims should be personalized based on the authentication context
- Claims depend on real-time data
For detailed information about creating Attribute Providers, request/response formats, and implementation examples, see Attribute Providers.
Notification Webhook Endpoint
You can configure a webhook endpoint to receive notifications about the issuance process. This allows you to track the status of credential issuance and take appropriate actions.
Reference a pre-configured webhook endpoint by its ID:
{
"webhookEndpointId": "my-notification-webhook"
}
The notification webhook endpoint will be called at various stages of the issuance process, such as:
- When a credential offer is accepted
- When a credential is successfully issued
- When a credential is rejected or an error occurs
For more details about the webhook implementation and payload structure, see Notifications.
When a webhook endpoint is configured on credential config level, notifications are sent to this endpoint by default. It can be overridden per issuance by setting webhookEndpointId on the credential offer request.
Signing Key Chain
The keyChainId field specifies which key chain should be used to sign the credential. If not provided, EUDIPLO uses the key chain with attestation usage type.
Credential Expiration
The lifeTime field determines when the credential expires. When set, EUDIPLO includes an exp claim in the credential calculated as:
exp = iat + lifeTime
Where:
iatis the issuance timestamplifeTimeis the configured lifetime in seconds
Cryptographic Key Binding
When keyBinding is enabled, EUDIPLO:
- Requires the wallet to provide a proof of possession during the credential request
- Includes a
cnf(confirmation) claim in the credential with the wallet's public key - Enables verifiers to cryptographically verify that the credential presenter is the legitimate holder
Credential Reuse Policy
The credentialReusePolicy field publishes policy information in the credential metadata about whether and how the credential can be reused.
Embedded Disclosure Policy
The embeddedDisclosurePolicy field defines rules for selective disclosure when the credential is presented.
Interactive Authorization Actions
The iaeActions field defines a sequence of interactive authorization steps required before credential issuance. See the Architecture documentation for details on the Interactive Authorization Endpoint (IAE).
Complete Configuration Example
{
"id": "citizen-credential",
"description": "Citizen credential with full features",
"config": {
"format": "dc+sd-jwt",
"display": [
{
"name": "Citizen Credential",
"locale": "en-US",
"logo": {
"url": "/img/citizen-logo.png"
},
"background_color": "#12107c",
"text_color": "#FFFFFF"
}
]
},
"vct": "urn:citizen:credential:1",
"keyChainId": "default-signing-key",
"lifeTime": 31536000,
"statusManagement": true,
"keyBinding": true,
"attributeProviderId": "citizen-claims-provider",
"webhookEndpointId": "issuance-notifications",
"fields": [
{
"path": ["given_name"],
"type": "string",
"mandatory": true,
"disclosable": true,
"display": [
{ "lang": "en-US", "label": "Given Name" }
]
},
{
"path": ["family_name"],
"type": "string",
"mandatory": true,
"disclosable": true
},
{
"path": ["birthdate"],
"type": "string",
"mandatory": true,
"disclosable": true
}
]
}