---
id: onboard-update-organisation-logo-image
title: "Update organisation logo image"
description: "Replaces the logo image of the organisation of the API key or token. Send the image as `multipart/form-data` in the `orgimage` field: a PNG, JPEG, GIF or WebP image (the service reads the type from the bytes) of at most 5 MiB and 4096 x 4096 pixels (the defaults of the installation)."
sidebar_label: "Update organisation logo image"
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"}>Update organisation logo image</h1>

<MethodEndpoint method={"post"} path={"/v4/onboard/platform/organisation/logoimage"}></MethodEndpoint>



Replaces the logo image of the organisation of the API key or token. Send the image as `multipart/form-data` in the `orgimage` field: a PNG, JPEG, GIF or WebP image (the service reads the type from the bytes) of at most 5 MiB and 4096 x 4096 pixels (the defaults of the installation).

The service stores the image and sets a new `logoImageId`; the `logoImageUrl` of [Read organisation](/docs/openid4vc-api/onboard-read-organisation) then points to it. The organisation wallet gets the new image a moment after the response. When the first admin of the organisation still has the default avatar image, the logo also becomes the avatar image of that admin.

## Request

<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"}}>

The new logo image.

</div></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"orgimage"} required={true} schemaName={"binary"} qualifierMessage={undefined} schema={{"type":"string","format":"binary","description":"The image file (PNG, JPEG, GIF or WebP)."}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The image is stored. 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 file is not a PNG, JPEG, GIF or WebP image (`Image type is not supported: use PNG, JPEG, GIF or WebP`), it cannot be read (`Image is not readable`), or it is larger than 4096 x 4096 pixels (`Image is too large: the limit is 4096 x 4096 pixels`).

</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={"401"} value={"401"}><div>

The `Authorization` header is missing, or the API key or token is not valid.

</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={"403"} value={"403"}><div>

The API key or token does not allow this call. An API key without the scope of the operation gets the older body `{"Code", "Message"}`. An `X-SandboxOrgId` header that names another sandbox organisation than the one of the API key gets `{"errorCode", "errorDescription"}`. When a platform admin has turned off the feature of the operation for the organisation, the answer has `errorKey` `feature_disabled` and the member `feature` (the name of the feature).

</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"}}><div><span className={"badge badge--info"}>anyOf</span><SchemaTabs><TabItem label={"MOD1"} value={"0-item-properties"}><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></TabItem><TabItem label={"Older error body"} value={"1-item-properties"}><SchemaItem collapsible={false} name={"Code"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"The HTTP status.","example":403}}></SchemaItem><SchemaItem collapsible={false} name={"Message"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"What went wrong.","example":"Unauthorized access;User doesn't have enough permissions;"}}></SchemaItem></TabItem></SchemaTabs></div></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"Code\": 403,\n  \"Message\": \"Unauthorized access;User doesn't have enough permissions;\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"404"} value={"404"}><div>

The first admin of the organisation cannot be read (`failed to find organisation admin`). The new logo image is stored all the same.

</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={"413"} value={"413"}><div>

The image is larger than 5 MiB: `Image is too large: the limit is 5 MiB`.

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

Unexpected server error, also when the body is not `multipart/form-data` or has no `orgimage` field (`Failed to extract image organization: <organisationId>`).

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