---
id: onboard-operator-read-organisation-features
title: "Read organisation features"
description: "Reads the features of an organisation: the four product features and the feature preview. See [Organisation features](/docs/platform-admin-guide/#organisation-features)."
sidebar_label: "Read organisation features"
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 organisation features</h1>

<MethodEndpoint method={"get"} path={"/v4/onboard/platform/operator/organisation/{organisationId}/features"}></MethodEndpoint>



Reads the features of an organisation: the four product features and the feature preview. See [Organisation features](/docs/platform-admin-guide/#organisation-features).

## 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={{"name":"organisationId","in":"path","required":true,"description":"The ID of the organisation, from [List organisations of the installation](/docs/openid4vc-api/onboard-operator-list-organisations).","schema":{"type":"string","maxLength":256,"example":"6731f0c2a1b2c3d4e5f60789"}}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The features of the organisation.

</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"}>configuredFeatures</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 features of an organisation. The four product features decide which parts of the platform the organisation can use: when one is off, the API refuses its operations for the organisation with `403` and `errorKey` `feature_disabled`. Getting Started, Account, Webhooks and Activity Logs have no feature and are always on. See [Organisation features](/docs/platform-admin-guide/#organisation-features).

</div><SchemaItem collapsible={false} name={"issuerVerifier"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"Issuer & Verifier: the issuer, the verifier, the extensions, the files of the verifier and the sandbox organisations. On for a new organisation.","example":true}}></SchemaItem><SchemaItem collapsible={false} name={"walletUnit"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"Wallet Unit (Holder): the wallet unit of the organisation and the sandbox organisations.","example":false}}></SchemaItem><SchemaItem collapsible={false} name={"consentManagement"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"Consent Management: the individuals, the data agreements, the personal data and the privacy dashboard.","example":false}}></SchemaItem><SchemaItem collapsible={false} name={"dataDisclosureAgreements"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"Data Marketplace: the data disclosure agreements and the data space, with the data agreements.","example":false}}></SchemaItem><SchemaItem collapsible={false} name={"apiKeyScopesUi"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"A feature preview, not a product feature: the dashboard shows the scope picker of the new API key scopes. Off by default.","example":false}}></SchemaItem></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"configuredFeatures\": {\n    \"issuerVerifier\": true,\n    \"walletUnit\": false,\n    \"consentManagement\": false,\n    \"dataDisclosureAgreements\": false,\n    \"apiKeyScopesUi\": false\n  }\n}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"configuredFeatures\": {\n    \"issuerVerifier\": true,\n    \"walletUnit\": true,\n    \"consentManagement\": false,\n    \"dataDisclosureAgreements\": false,\n    \"apiKeyScopesUi\": false\n  }\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

The `Authorization` header is missing, or the access token is not valid or has expired.

</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 caller cannot call the operations of a platform admin. A login of an admin who is not a platform admin (an admin of another organisation, or an admin of the platform operator organisation without the platform admin right) gets `errorKey` `not_platform_admin`. An API key gets the older body `{"Code", "Message"}`: no API key can call these operations.

</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  \"errorCode\": 403,\n  \"errorKey\": \"not_platform_admin\",\n  \"errorDescription\": \"Access denied: only a platform admin of the platform operator organisation can call this route\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"404"} value={"404"}><div>

No organisation has the ID (`errorKey` `organisation_not_found`).

</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><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"errorCode\": 404,\n  \"errorKey\": \"organisation_not_found\",\n  \"errorDescription\": \"The organisation does not exist\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      