Transaction Data Profiles
transaction-data-profiles.conf defines the transaction data types the verifier and wallet recognize for binding presentations to specific actions (e.g., payment authorization, account access).
Transaction data types act as namespaces that:
- Enforce which types the wallet will accept in authorization requests
- Define the structure and fields for UI/discovery endpoints
- Are validated by the wallet's
TransactionDataTypeRegistry
The transaction-data-profiles feature is enabled by default for Verifier2 and backs the runtime discovery endpoint:
GET /transaction-data-profiles
The same profile format is also used by the walt.id Wallet API, which exposes:
GET /wallet-api/transaction-data-profiles
Fields
transactionDataProfiles
Array of Objects — List of recognized transaction data types. Each profile defines:
| Field | Type | Description |
|---|---|---|
type | String | Required. The transaction data type identifier. Used as the type field in transaction data entries and as the namespace for mdoc DeviceSigned binding. Example: "org.waltid.transaction-data.payment-authorization" |
displayName | String | Human-readable name for this type. Used in UIs and discovery endpoints. Defaults to type if not specified. |
fields | Array | List of expected field names for this type. Used for documentation and UI generation. Example: ["amount", "currency", "payee"] |
Built-in Profiles
The default configuration includes two profiles:
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"]
}
]
Adding Custom Types
To add a custom transaction data type:
- Add a new entry to the
transactionDataProfilesarray in both the verifier and wallet config files:- Verifier:
waltid-services/waltid-verifier-api2/config/transaction-data-profiles.conf - Wallet:
waltid-services/waltid-wallet-api/config/transaction-data-profiles.conf
- Verifier:
- Restart both services to load the new configuration
Example: Adding a subscription authorization type:
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"]
}
]
Important: Transaction data types must be configured on both the verifier and wallet. Mismatched configurations will cause the wallet to reject authorization requests with unknown types.
Usage in Verification Requests
Once configured, use the type in your verification session transaction data:
{
"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 complete usage details.
