Transaction Data Profiles

transaction-data-profiles.conf defines the transaction data types your Enterprise Verifier2 service recognizes for OpenID4VP transaction_data requests.

The transaction-data-profiles feature is enabled by default in the Enterprise API.

Transaction data types act as namespaces that:

  • Enforce which transaction_data.type values the verifier accepts
  • Define the fields exposed by the Verifier2 transaction-data discovery endpoint
  • Drive the Enterprise Verifier2 creation UI, which renders transaction-data inputs from these profiles
  • Define the DeviceSigned namespace used for mso_mdoc transaction-data binding

File Location

The Enterprise Stack reads this configuration from:

waltid-enterprise-api/config/transaction-data-profiles.conf

Fields

transactionDataProfiles

Array of Objects — List of recognized transaction data types. Each profile defines:

FieldTypeDescription
typeStringRequired. The transaction data type identifier. Used as the type field in transaction data entries and as the namespace for mso_mdoc DeviceSigned binding. Example: "org.waltid.transaction-data.payment-authorization"
displayNameStringHuman-readable name for this type. Used in the Enterprise Verifier2 UI and discovery endpoint responses. Defaults to type if not specified.
fieldsArrayList of field names expected for this type. Used for UI generation and documentation. Example: ["amount", "currency", "payee"]

Built-in Profiles

The default Enterprise configuration includes two profiles:

transaction-data-profiles.conf
transactionDataProfiles = [
  {
    type = "org.waltid.transaction-data.payment-authorization"
    displayName = "Payment Authorization"
    fields = ["amount", "currency", "payee"]
  },
  {
    type = "org.waltid.transaction-data.account-access"
    displayName = "Account Access"
    fields = ["account_identifier", "access_scope"]
  }
]

Discovery Endpoint

Enterprise Verifier2 exposes the configured profiles at:

GET /v1/{target}/verifier2-service-api/transaction-data-profiles

This endpoint requires the CREATE_VERIFIER_SESSION permission on the Verifier2 service target.

Adding Custom Types

To add a custom transaction data type:

  1. Add a new entry to transactionDataProfiles in waltid-enterprise-api/config/transaction-data-profiles.conf
  2. Restart the Enterprise API so the new configuration is loaded
  3. If your holders use a wallet you manage, ensure that wallet recognizes the same transaction-data type identifiers

Example: Adding a subscription authorization type:

transaction-data-profiles.conf
transactionDataProfiles = [
  {
    type = "org.waltid.transaction-data.payment-authorization"
    displayName = "Payment Authorization"
    fields = ["amount", "currency", "payee"]
  },
  {
    type = "org.waltid.transaction-data.account-access"
    displayName = "Account Access"
    fields = ["account_identifier", "access_scope"]
  },
  {
    type = "org.example.subscription-authorization"
    displayName = "Subscription Authorization"
    fields = ["service_name", "billing_cycle", "price"]
  }
]

Only wallets that recognize the same transaction-data type identifiers can successfully present these requests. Keep your verifier and wallet type registries aligned.

Usage in Verification Requests

Once configured, use the profile type in the verification session request:

{
  "flow_type": "cross_device",
  "core_flow": {
    "dcql_query": { ... }
  },
  "openid": {
    "transactionData": [
      {
        "type": "org.example.subscription-authorization",
        "credential_ids": ["pid"],
        "require_cryptographic_holder_binding": true,
        "transaction_data_hashes_alg": ["sha-256"],
        "service_name": "Premium Streaming",
        "billing_cycle": "monthly",
        "price": "12.99"
      }
    ]
  }
}

See Transaction Data Authorization for request constraints and end-to-end examples.

Last updated on June 15, 2026