---
id: config-read-digital-wallet-open-id-transaction-data
title: "Read transaction data"
description: "Reads one transaction data record by its `transactionDataId`."
sidebar_label: "Read transaction data"
hide_title: true
hide_table_of_contents: true
api: eJztWW1vGzcS/isDfoqB1Ysdp5cTiqKOnbZKg9qolbhAYkDUciQx3iU3JFeyTtB/Pwy5r9LKyfVegEPzJZF3l8N5febhcMsE2tjIzEmt2Ij9jlxY0ArBGa4sj+k5CO44GIy1ETDbgHQWpo33V9zxsZj2P6qParJEEHIhHU9gzZMEHeg5uCWCNguupOVeYppbBzMEgVmiNyj6MJ6DdCAtKO0iv8CiWaEBruwajYW1dEv4ZTK5gfPhsP9RsYjpDI2XNxZsxGKt5nJBFlwFBe78/tcZqrGYtNVlEcu44Sk6NJaNPmz3/PBOyc85ghSonJxLNGQFP+oUbq2OJXcogpocYoN+LU8AH+MlVwvss4hJEp5xt2QRUzxFNmIHjmQRM/g5lwYFGzmTY8RsvMSUs9GWuU1Gi6wzUi3Ybhfta37tf/CkD502eMdyJWb6sR0RpyG3CHNtwC2lBVIBrevD3RIVbHQOFpUI75bIBZo6SjJGMLmyIc5lUEAq/yDWyuFjlQdktujUgQRyyoEI+IJLZZ1f0Ewj7rq150pQ4rTWpVyqJ3KwD2+Rr9A/DwaBzl3phz0BVW5X5vpCaXgDtEo2sC6dxXO3JL/H3GGZEzPkhhI6jtFacPoBVcO9HSsUXNyM4QE3bVc7/oD2eCTnRqf+bbHYO0culDbY0rgPE01hK/bp0acxTxKKGz8SoJn0OYBertPHlfAGTG/eTWCwOhuE0hxwkUo14Jl8wM1gyzP5K27GYjcoJPS0WUyB4odceI9P/+jd5rMQgrGYEjzQjgIzg7EvN8qmEN2mXQ1nUfZJlZPp2rs+cyBdBLPcAYkPW1+bBclfS2VBzut0n2m3LMTaOge6DPaIho/SuqhEt0SrBe260bk5TNdDCLxQkKsHpdeqUbQRhWcfh7orOBSPr4NSaOS3akvw3wXtglNAyPkcDSq3p2WSQMofQjH4zJhzmewBcQlqwUk1rLVd28K0OU/sU6AWMXzkaZbQs+9evvw7nvLz+MXsbP58OBye8ufib6dDtrsnkTbTyqIlIWfDIf3XRsNJ3UcMutwUGFWAG4pjiE5medxSjoTyLEuoMKVWg0+WJG8b6meGMM/JoMcenv8irdNm063aE7sXPtGzTxg7aletTaQ49Fu0t8FYOTSKJ2WTOmwEx7aHcZVIocBThBVPcgTe3fnhIlnzjfXI2fHeZ5kQxsOed3+wchd1dL8v2nXY13xGNyjDQq5CvT9p5DsP89I2JRUtizp06SRCekAlMi2V8zrXvf110dq/Ru3xgfsbHEFam3MVIyxDupQxKywj3Ns3o67gAHghQNJStWOauQ0ERUJPqt3eLH2lu5TwRmpPm64bePDnjPT06+r8/WWBSSnBjDdrxRMpPIh3hakrO15xi9+d24Ya3Bi+OdAifJebBFDFWnSVedDf1qlDxqOBFRpSX7SYBDU76nzkzTd3kz1/T1WeJNPazfuSlC5281jpMLWdRI5l3DsnsNYL59A6Hgz6ktdvwkq4qCmENvDeK8BnCcKNQYvKlUzvAVVt+FInRF/ofZfPG7tXWMSFkIFl3jRQKVDVPZDb93vGN4nmggotS4hfvbm9/i3ytLMA/aIAN4i+d9FfPNW5cqH1FV76QgwKgIdFyfDKfTsALGTLtMv490UMG06YaZ0gVwcxmJL5T2RBJxQtuV2ifTLXSKtVNqGYXaFP5n8vIoWQyiFFmf6JZPmqKoh1noiCktDGwQ+e+hZQSghw4RpGqTydeSZxAPuP4GRKZZFmEWWQxVgrYaPSiFTX6NJoB8Um5bmm6j15Jv77myfcOghdYl+DXZMUfaCe3tUPj/SbIwj9BIwcz+5mHJpuuScV91OtqfIRrnO/o4UFbWajLf11HujZV5Oq5jZojDaXWiCLwu+rRnDuv8SV6tV1mKVyuPBxrqjm+XC46xDfAb41O33lkSzLHVTTBLbbeesPyV6LW0tbcv2o0SbL4+oBi9eG2six8UPKXUw40kXN2GEgTv/CgXin6JytjfyHz/u2a178pXO0Oi8UyOW32fPRLmIW49xIt/FTswt/hmejD/c0iXrlBxzEQvwTspovaLzGiokcBFSCZxUrPGERG/tWQU5K0S01zfIW6H1Eg7IRa0wQitFiL9TJgCBQioEVn9Zu0Ej+HlXHYHtQDjtG+pN1XUO/K0x1YTzBoEnoWOtcZkeDgcBU93gm+3JhuHJ9qdnh7O3GaJGH8jwi5ksSbh1fUOc/styG1/uK3NdRuaXkDDlVxqYmy+HBkQP7RVEXZbNoK1bNkmqK6WdoNQco2uC0JWdaTsfKaUdmcC4fyznpNOgIU3imtMOSJMnE+yDjMZ5EgP1Ff0/sCIqF39NshdxB06sfAodrZuGWhaHbT9qk3LERe3M3ObStMZCDjFtbqhckFTpTz28pAZUHPSJ4cugX1Kd3ipvv81LNdQktPPbQgimXFFubZ5k27sc6nlVI5M/1o3YiNHNoz5pqEWRGr6QgfgmxJjRwCJL+Tyt61zqkeRbeIIKXFe+wMC4PqM+ufd2OTzw7717YYpBVrd+ckEZOxzqxlDjS+gklKlpji/YYXOsPp55BRp5yhjGW59Kb6nohbqiXW58xjivBjbA9b6/kysE80evi8qDwtNf27vklvL+EZ2/uJicRjF9PfoLbq96buwm8vwy7jW+v4fTl8PR57wWkVzoepFdvm6fluU8pSw02kTEq67G7LKaMx0uEs/7wIHTr9brP/eu+NotBsdYO3o4vX/92+7pHa4h2SZe0csA7S+g4r6LHIkZIFsJ+Njw77z/vn9LaTFuXctXQh25FDujDfiE0Ot//2UVQUW50zTDwx0pP78nt26KJfGCrszDTm0t/gG41koJNewbum0mbLPcKb40O2fl9xJbaOtpgu51xi+9MstvR4885Gt8ZI7bixhdG6DnS0u96Dno0Bs9+L/jFSfddzn/gPqrTcWW7UNQrPLizEWMRe6Bu0nFC2d1XbP9ftPDbZdW3y6pvl1XfLqv+h5dVnYgXkO3gyqrCPiLq4ZsLH5TGu4MT4q55jvn5NdFNXnDRmoc/eB5e/CDM7MTcfUoeVKB/SaHOJd9THf2Kmx+qz8ObowsqEhu+Jn/Q+Oaf+8Yb0Q==
sidebar_class_name: "get 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"}>Read transaction data</h1>

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



Reads one transaction data record by its `transactionDataId`.

The digital wallet of the organisation must be deployed. If it is not, the server answers with HTTP 400.


## Request

<details style={{"marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collapsed={false} open={true}><summary style={{}}><h3 className={"openapi-markdown__details-summary-header-params"}>Path Parameters</h3></summary><div><ul><ParamsItem className={"paramsItem"} param={{"description":"Unique identifier of a transaction data record associated with a credential exchange.","in":"path","name":"transactionDataId","required":true,"schema":{"type":"string"}}}></ParamsItem></ul></div></details><details style={{"marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collapsed={false} open={true}><summary style={{}}><h3 className={"openapi-markdown__details-summary-header-params"}>Header Parameters</h3></summary><div><ul><ParamsItem className={"paramsItem"} param={{"description":"Optional. Unique identifier of the sandbox organisation to use for this request. When you send this header, the service runs the operation in the context of the named sandbox organisation, that is, against the wallet of that sandbox organisation and not against the main wallet of the organisation. Leave the header out to use the main wallet.\n\nThe service reads this header only when you authenticate with a bearer access token. When you authenticate with an API key, the service takes the sandbox organisation from the API key and ignores this header. To run an API-key call in a sandbox organisation, bind the key to the sandbox organisation with `PUT /v2/config/admin/apikey/{apiKeyId}/sandbox-org` instead.\n\n`X-SubwalletId` is the deprecated name of this header. The service continues to accept it, but `X-SandboxOrgId` wins if you send both headers.\n\nThe sandbox organisation must exist, must belong to your organisation and must be deployed. An unknown identifier, an identifier of a sandbox organisation that is not deployed, and an identifier that belongs to a different organisation all make the call fail with HTTP 400.","in":"header","name":"X-SandboxOrgId","required":false,"schema":{"type":"string"},"example":"6889e1a4c5b2f30001a3d710"}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The server returns the requested transaction data record.

</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 className={"openapi-schema__divider"}></span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The transaction data record.

</div><SchemaItem collapsible={false} name={"id"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Internal record identifier of the transaction data record. It is not the same value as `transactionDataId`. Always use `transactionDataId` to address the record."}}></SchemaItem><SchemaItem collapsible={false} name={"transactionDataId"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Unique identifier that the server gives to the transaction data record. Use this identifier in the path of the read endpoint."}}></SchemaItem><SchemaItem collapsible={false} name={"credentialExchangeId"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Identifier of the credential issuance history record that this transaction data belongs to. The value is an empty string when the record belongs to no credential issuance."}}></SchemaItem><SchemaItem collapsible={false} name={"openIdOrganisationId"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Identifier of the OpenID4VC deployment that validated the transaction data."}}></SchemaItem><SchemaItem collapsible={false} name={"transactionDataBase64s"} required={false} schemaName={"string[]"} qualifierMessage={undefined} schema={{"type":"array","description":"Base64url encoded transaction data strings that the issuer verified against the key binding JWT. The value is `null` when the issuer verified no string.","items":{"type":"string"}}}></SchemaItem><SchemaItem collapsible={false} name={"paymentWalletAttestation"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Payment Authenticator Verifiable Presentation token that the holder sent."}}></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></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

Transaction data payload in plain JSON, for example the payee and the amount of a payment. The value is `null` when the request gave the payload as `transactionDataBase64`.

</div><SchemaItem name={"property name*"} required={false} schemaName={"any"} qualifierMessage={undefined} schema={{"type":"object","additionalProperties":true,"description":"Transaction data payload in plain JSON, for example the payee and the amount of a payment. The value is `null` when the request gave the payload as `transactionDataBase64`."}} collapsible={false} discriminator={false}></SchemaItem></div></details></SchemaItem><SchemaItem collapsible={false} name={"transactionDataVerified"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"`true` when the issuer verified the transaction data hashes 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 that the holder sent. The value is `null` when the issuer could not decode the token.

</div><SchemaItem name={"property name*"} required={false} schemaName={"any"} qualifierMessage={undefined} schema={{"type":"object","additionalProperties":true,"description":"Decoded payload of the Verifiable Presentation token that the holder sent. The value is `null` when the issuer could not decode the token."}} collapsible={false} discriminator={false}></SchemaItem></div></details></SchemaItem><SchemaItem collapsible={false} name={"createdAt"} required={true} schemaName={"number"} qualifierMessage={undefined} schema={{"type":"number","description":"Unix timestamp, in seconds, of the moment that the server created this record."}}></SchemaItem><SchemaItem collapsible={false} name={"updatedAt"} required={true} schemaName={"number"} qualifierMessage={undefined} schema={{"type":"number","description":"Unix timestamp, in seconds, of the moment that the server last changed this record."}}></SchemaItem></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"transactionDataHistory\": {\n    \"id\": \"string\",\n    \"transactionDataId\": \"string\",\n    \"credentialExchangeId\": \"string\",\n    \"openIdOrganisationId\": \"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={"400"} value={"400"}><div>

The organisation is unknown, the OpenID wallet is not deployed, or no transaction data record matches `transactionDataId`.

</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={"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>
      