Skip to main content

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.

important

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:

ValueBehavior
ENABLEDTried first, in no particular order. The first data type that successfully extracts the claim is used.
ENABLED_FALLBACKTried only if every ENABLED data type fails. Use for broad, permissive types.
DISABLEDDefault. 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"]
}
}
}
note

ISO mdoc credentials use CBOR. All other supported credential formats use JSON.

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_FALLBACK on broad base types such as STRING, NUMBER, and BOOLEAN, as a safety net when more specific extraction fails.
  • Set ENABLED on types with clear format requirements, such as DATE and PICTURE.
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