---
id: config-read-digital-wallet-open-id-image
title: "Read image"
description: "Returns an image of the image store as image bytes: an image of [Upload image](/docs/openid4vc-api/config-create-digital-wallet-open-id-image), whose `imageUrl` is this URL. The call is public: it needs no `Authorization` header, and anybody who knows the image ID can read the image."
sidebar_label: "Read image"
hide_title: true
hide_table_of_contents: true
api: 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
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 image</h1>

<MethodEndpoint method={"get"} path={"/v4/config/ows/wallet/images/{imageId}"}></MethodEndpoint>



Returns an image of the image store as image bytes: an image of [Upload image](/docs/openid4vc-api/config-create-digital-wallet-open-id-image), whose `imageUrl` is this URL. The call is public: it needs no `Authorization` header, and anybody who knows the image ID can read the image.

## 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":"The ID of the image: the last path segment of the `imageUrl` of [Upload image](/docs/openid4vc-api/config-create-digital-wallet-open-id-image).","in":"path","name":"imageId","required":true,"schema":{"type":"string"},"example":"6af0c4254a55cecc6011ecd8"}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The image bytes. The `Content-Type` header is always `image/jpeg`, also for a PNG, GIF or WebP image.

</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={"image/jpeg"} value={"image/jpeg"}><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"}}><div style={{"marginTop":".5rem","marginBottom":".5rem","marginLeft":"1rem"}}>

string

</div></ul></details></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"404"} value={"404"}><div>

No image has this ID: `No image has the id: <imageId>`.

</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><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"500"} value={"500"}><div>

The server cannot read the stored image (`Failed to fetch image with id: <imageId>`).

</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><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      