---
id: config-digital-wallet-open-id-validate-transaction-data
title: "Validate transaction data"
description: "Validates transaction data submitted during an OID4VCI credential issuance against the defined schema."
sidebar_label: "Validate transaction data"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "post api-method"
info_path: docs/openid4vc-api/igrant-io-api-documentation
custom_edit_url: null
---

> **Build this with an AI coding agent.** Install the iGrant.io Agent Skills, then ask your agent to build the integration:
>
> ```bash
> npx skills add L3-iGrant/skills
> ```


import ApiTabs from "@theme/ApiTabs";
import DiscriminatorTabs from "@theme/DiscriminatorTabs";
import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import SecuritySchemes from "@theme/ApiExplorer/SecuritySchemes";
import MimeTabs from "@theme/MimeTabs";
import ParamsItem from "@theme/ParamsItem";
import ResponseSamples from "@theme/ResponseSamples";
import SchemaItem from "@theme/SchemaItem";
import SchemaTabs from "@theme/SchemaTabs";
import Markdown from "@theme/Markdown";
import OperationTabs from "@theme/OperationTabs";
import TabItem from "@theme/TabItem";

<h1 className={"openapi__heading"}>Validate transaction data</h1>

<MethodEndpoint method={"post"} path={"/v2/config/digital-wallet/openid/sdjwt/transaction-data"}></MethodEndpoint>



Validates transaction data submitted during an OID4VCI credential issuance against the defined schema.

## Request

<MimeTabs className={"openapi-tabs__mime"}><TabItem label={"application/json"} value={"application/json-schema"}><details style={{}} className={"openapi-markdown__details mime"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-mime"}><h3 className={"openapi-markdown__details-summary-header-body"}>Body</h3></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"transactionDataHashesAlg"} required={true} schemaName={"string[]"} qualifierMessage={undefined} schema={{"type":"array","description":"Array of hash algorithm identifiers (e.g. `sha-256`) used to calculate transaction data hashes in the key binding JWT, as defined in the OpenID4VP transaction data extension.","items":{"type":"string"}}}></SchemaItem><SchemaItem collapsible={false} name={"paymentWalletAttestation"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Payment Authenticator Verifiable Credential presented by the holder."}}></SchemaItem><SchemaItem collapsible={false} name={"transactionData"} required={false} schemaName={"object"} qualifierMessage={undefined} schema={{"type":"object","description":"Transaction data payload in plain JSON format."}}></SchemaItem><SchemaItem collapsible={false} name={"transactionDataBase64"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Base64-encoded transaction data string for transport in the OpenID4VP Authorization Request."}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div></div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>transactionDataHistory</strong><span className={"openapi-schema__name"}> object</span></span></summary><div style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"transactionDataId"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Unique identifier for the transaction data record."}}></SchemaItem><SchemaItem collapsible={false} name={"credentialExchangeId"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Identifier of the credential issuance history record linked to this transaction data."}}></SchemaItem><SchemaItem collapsible={false} name={"transactionDataBase64s"} required={false} schemaName={"string[]"} qualifierMessage={undefined} schema={{"type":"array","description":"Array of base64-encoded transaction data strings.","items":{"type":"string"}}}></SchemaItem><SchemaItem collapsible={false} name={"paymentWalletAttestation"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Payment Authenticator Verifiable Presentation token received from the holder."}}></SchemaItem><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>transactionData</strong><span className={"openapi-schema__name"}> object</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><SchemaItem name={"property name*"} required={false} schemaName={"any"} qualifierMessage={undefined} schema={{"type":"object","additionalProperties":true}} collapsible={false} discriminator={false}></SchemaItem></div></details></SchemaItem><SchemaItem collapsible={false} name={"transactionDataVerified"} required={false} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"Indicates whether the transaction data hashes were verified against the key binding JWT."}}></SchemaItem><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>vpTokenDecoded</strong><span className={"openapi-schema__name"}> object</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

Decoded payload of the Verifiable Presentation token presented by the holder.

</div><SchemaItem name={"property name*"} required={false} schemaName={"any"} qualifierMessage={undefined} schema={{"type":"object","additionalProperties":true,"description":"Decoded payload of the Verifiable Presentation token presented by the holder."}} collapsible={false} discriminator={false}></SchemaItem></div></details></SchemaItem><SchemaItem collapsible={false} name={"createdAt"} required={false} schemaName={"number"} qualifierMessage={undefined} schema={{"type":"number","description":"Unix timestamp (in seconds) when this record was created."}}></SchemaItem><SchemaItem collapsible={false} name={"updatedAt"} required={false} schemaName={"number"} qualifierMessage={undefined} schema={{"type":"number","description":"Unix timestamp (in seconds) when this record was last modified."}}></SchemaItem></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"transactionDataHistory\": {\n    \"transactionDataId\": \"string\",\n    \"credentialExchangeId\": \"string\",\n    \"transactionDataBase64s\": [\n      \"string\"\n    ],\n    \"paymentWalletAttestation\": \"string\",\n    \"transactionData\": {},\n    \"transactionDataVerified\": true,\n    \"vpTokenDecoded\": {},\n    \"createdAt\": 0,\n    \"updatedAt\": 0\n  }\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

Unauthorized

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"500"} value={"500"}><div>

Internal server error

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      