---
id: config-update-digital-wallet-open-id-credential-logo-image
title: "Update credential definition logo image"
description: "Uploads or updates the logo image of an OID4VCI credential definition. This operation is the only way to upload your own logo, because the create and update credential definition operations ignore `display.logo.uri`. The server stores the image, then sets `display.logo.uri` of the credential definition and of every credential configuration that it holds to the URL of the new image. Use this operation after you create the credential definition."
sidebar_label: "Update credential definition logo image"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "put 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"}>Update credential definition logo image</h1>

<MethodEndpoint method={"put"} path={"/v2/config/digital-wallet/openid/sdjwt/credential-definition/{credentialDefinitionId}/logoimage"}></MethodEndpoint>



Uploads or updates the logo image of an OID4VCI credential definition. This operation is the only way to upload your own logo, because the create and update credential definition operations ignore `display.logo.uri`. The server stores the image, then sets `display.logo.uri` of the credential definition and of every credential configuration that it holds to the URL of the new image. Use this operation after you create the credential definition.


## 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 the credential definition that specifies the credential format, type, and claims structure for OID4VCI issuance.","in":"path","name":"credentialDefinitionId","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><MimeTabs className={"openapi-tabs__mime"}><TabItem label={"multipart/form-data"} value={"multipart/form-data-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><strong className={"openapi-schema__required"}>required</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}><div style={{"marginTop":"1rem","marginBottom":"1rem"}}>

Multipart form that holds the image file in the `logoimage` field.

</div></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"logoimage"} required={true} schemaName={"binary"} qualifierMessage={undefined} schema={{"format":"binary","type":"string","description":"Image file to store as the credential card logo of the credential definition."}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The server stored the image and updated the credential definition. The response body is empty.

</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></div></TabItem><TabItem label={"400"} value={"400"}><div>

The organisation is unknown, no credential definition matches `credentialDefinitionId`, or the issuer cannot save the new image reference.

</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>

The server cannot read the uploaded file from the `logoimage` form field, or cannot store the 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={"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>
      