---
id: onboard-operator-revoke-platform-admin
title: "Remove platform admin right"
description: "Removes the platform admin right of an admin. The admin stays an admin of the platform operator organisation. The API refuses to remove the right of the last platform admin that is not disabled."
sidebar_label: "Remove platform admin right"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "delete 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"}>Remove platform admin right</h1>

<MethodEndpoint method={"delete"} path={"/v4/onboard/platform/operator/admin/{adminId}"}></MethodEndpoint>



Removes the platform admin right of an admin. The admin stays an admin of the platform operator organisation. The API refuses to remove the right of the last platform admin that is not disabled.

## 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":"adminId","in":"path","required":true,"description":"The ID of a platform admin, from [List platform admins](/docs/openid4vc-api/onboard-operator-list-platform-admins).","schema":{"type":"string","maxLength":256,"example":"6731f1d8a1b2c3d4e5f6078a"}}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"204"} value={"204"}><div>

The right is removed.

</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={"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 account of the operation has the ID (`errorKey` `account_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\": \"account_not_found\",\n  \"errorDescription\": \"The account does not exist\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"409"} value={"409"}><div>

The admin is the last platform admin that is not disabled (`errorKey` `last_platform_admin`).

</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\": \"last_platform_admin\",\n  \"errorDescription\": \"The account is the last platform admin that is not disabled\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      