---
id: config-delete-digital-wallet-open-id-oidc-provider
title: "Delete external OpenID provider"
description: "Deletes an external OpenID provider of the organisation. A provider that a credential definition names (`externalOpenidProviderId`) cannot be deleted: remove it from those definitions first. You cannot delete the built-in OpenID Conformance login provider; turn off the OpenID Conformance extension to remove it. The response has no body."
sidebar_label: "Delete external OpenID provider"
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"}>Delete external OpenID provider</h1>

<MethodEndpoint method={"delete"} path={"/v4/config/ows/issuer/openid-providers/{providerId}"}></MethodEndpoint>



Deletes an external OpenID provider of the organisation. A provider that a credential definition names (`externalOpenidProviderId`) cannot be deleted: remove it from those definitions first. You cannot delete the built-in OpenID Conformance login provider; turn off the OpenID Conformance extension to remove it. The response has no body.


## 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":"The `id` of an external OpenID provider of the organisation, from [List external OpenID providers](/docs/openid4vc-api/config-list-digital-wallet-open-id-oidc-providers). A value that is not a UUID gives HTTP 400 (`providerId: invalid type`).","in":"path","name":"providerId","required":true,"schema":{"type":"string","format":"uuid"},"example":"3f6c2a9e-7b1d-4c58-9e2f-1a4b6d8c0e57"}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"204"} value={"204"}><div>

The provider is deleted.

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

`providerId` is not a UUID; the organisation has no provider with this ID (`OIDC provider not found with ID: <providerId>`); credential definitions use the provider (`The OIDC provider is used by <n> credential definition(s). Remove it from them first.`); or the provider is the built-in OpenID Conformance login. Also when the organisation has no deployed wallet.

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

Unexpected server error.

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