Data Type Extraction
When a wallet receives a credential, the system extracts claim data types from the issuer's schema. You do not control that schema, so extraction must be configured to adapt to whatever the issuer used.
The system identifies credentials by their schema type identifier: the
vct of SD-JWT VCs or the DocType of ISO mdocs. The first time it
receives a credential with a new identifier, it extracts the schema and
data types, stores them, and reuses them to validate every later
credential with that identifier. Extracted data types also serve as
display hints in the wallet.
Configure holder.valueExtraction on your data types. Without it, the
system cannot accept credentials through issuance protocols of type
OPENID4VCI_FINAL1.
For all base types and their parameters, see the data types reference.
Extraction tiers
Set holder.valueExtraction on each data type to place it in a tier:
| Value | Behavior |
|---|---|
ENABLED | Tried first, in no particular order. The first data type that successfully extracts the claim is used. |
ENABLED_FALLBACK | Tried only if every ENABLED data type fails. Use for broad, permissive types. |
DISABLED | Default. Not used for extraction. |
The parameter goes under params.private.holder or params.public.holder.
See Recommended configuration for an
example.
Data type capabilities
Each base type declares which CBOR and JSON types it can extract. Check
the capabilities of each data type in the GET /api/config/v1
response:
"datatype": {
"DATE": {
"capabilities": {
"supportedCborTypes": ["T_DATE", "FULL_DATE"],
"supportedJsonTypes": ["STRING"]
}
}
}
ISO mdoc credentials use CBOR. All other supported credential formats use JSON.
Recommended configuration
Extraction that is too strict causes problems later: if a future credential with the same schema identifier contains slightly different data, the system cannot accept it.
- Set
ENABLED_FALLBACKon broad base types such asSTRING,NUMBER, andBOOLEAN, as a safety net when more specific extraction fails. - Set
ENABLEDon types with clear format requirements, such asDATEandPICTURE.
datatype:
STRING:
display: "datatype.string"
type: "STRING"
order: 100
params:
private:
holder:
valueExtraction: ENABLED_FALLBACK
ARRAY:
display: "datatype.array"
type: "ARRAY"
order: 101
params: null
NUMBER:
display: "datatype.number"
type: "NUMBER"
order: 200
params:
private:
holder:
valueExtraction: ENABLED_FALLBACK
DATE:
display: "datatype.date"
type: "DATE"
order: 300
params:
private:
holder:
valueExtraction: ENABLED
BOOLEAN:
display: "datatype.boolean"
type: "BOOLEAN"
order: 301
params:
private:
holder:
valueExtraction: ENABLED_FALLBACK
PICTURE:
display: "datatype.picture"
type: "PICTURE"
order: 400
params:
private:
holder:
valueExtraction: ENABLED
MDL_PICTURE:
display: "datatype.mdlPicture"
type: "PICTURE"
order: 402
params:
private:
holder:
valueExtraction: ENABLED
SWIYU_PICTURE:
display:
en: "Picture (SWIYU)"
de: "Bild (SWIYU)"
type: "SWIYU_PICTURE"
order: 403
params:
private:
holder:
valueExtraction: ENABLED
OBJECT:
display: "datatype.object"
type: "OBJECT"
order: 500
params: null