---
id: onboard-operator-create-organisation-type
title: "Add organisation type"
description: "Adds an organisation type, which an organisation names with `organisation.typeId` in [Add organisation](/docs/openid4vc-api/onboard-operator-create-organisation). The spaces at the ends of the name are removed. An installation has at most 200 organisation types."
sidebar_label: "Add organisation type"
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"}>Add organisation type</h1>

<MethodEndpoint method={"post"} path={"/v4/onboard/platform/operator/organisation-type"}></MethodEndpoint>



Adds an organisation type, which an organisation names with `organisation.typeId` in [Add organisation](/docs/openid4vc-api/onboard-operator-create-organisation). The spaces at the ends of the name are removed. An installation has at most 200 organisation types.

## Request

<MimeTabs className={"openapi-tabs__mime"}><TabItem label={"application/json"} value={"application/json-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><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"type"} required={true} schemaName={"string"} qualifierMessage={"**Possible values:** `<= 100 characters`"} schema={{"type":"string","maxLength":100,"description":"The name of the organisation type.","example":"Insurance"}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"201"} value={"201"}><div>

The organisation type is added.

</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"}>organisationType</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"}}><SchemaItem collapsible={false} name={"id"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The ID of the organisation type.","example":"64e0c1a2b3c4d5e6f7a8b9c2"}}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The name of the organisation type.","example":"Insurance"}}></SchemaItem></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"organisationType\": {\n    \"id\": \"64e0c1a2b3c4d5e6f7a8b9c2\",\n    \"type\": \"Insurance\"\n  }\n}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"organisationType\": {\n    \"id\": \"64e0c1a2b3c4d5e6f7a8b9c2\",\n    \"type\": \"Insurance\"\n  }\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"400"} value={"400"}><div>

The request is not valid (`errorKey` `invalid_request`): for example a body that is not JSON, a member that the operation does not know, a missing required member, or a query value that is not allowed. `errorDescription` names the member.

</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\": 400,\n  \"errorKey\": \"invalid_request\",\n  \"errorDescription\": \"field status must be \\\"suspended\\\" or \\\"active\\\"\"\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={"409"} value={"409"}><div>

The type cannot be added. `errorKey`: `organisation_type_exists` (a type has the name) or `organisation_type_limit_reached` (the installation has 200 organisation types).

</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\": 409,\n  \"errorKey\": \"organisation_type_exists\",\n  \"errorDescription\": \"An organisation type with this name exists\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      