---
id: config-digital-wallet-open-id-delete-certificate-chain
title: "Delete certificate chain"
description: "Removes the certificate chain of a key. The key then has no `x5c`, `x5t` and `x5t#S256` values, and it cannot sign with the `x509` format until you upload a new chain with the upload certificate chain operation."
sidebar_label: "Delete certificate chain"
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 certificate chain</h1>

<MethodEndpoint method={"delete"} path={"/v2/config/digital-wallet/openid/key-management/keys/{keyId}/certificate-chain"}></MethodEndpoint>



Removes the certificate chain of a key. The key then has no `x5c`, `x5t` and `x5t#S256` values, and it cannot sign with the `x509` format until you upload a new chain with the upload certificate chain operation.

This operation is for keys in a key store with the capability `certificateChain` (`local`, `vault`, `gcp-kms`, `aws-kms`, `azure-key-vault` and `dpod`). It needs a request body: send `{"confirm": "DELETE"}`. A sandbox organisation cannot remove a certificate chain.

The wallet refuses to remove the chain while the key signs with the `x509` format: a credential definition, a presentation definition, a status list, the signed issuer metadata or the wallet provider global configuration that uses the key with `cryptographicKeyFormat` `x509`. Select another key for these uses first. When the key has a test certificate, the test CA revokes it, and the new CRL is made in the same change.


## 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":"Unique identifier of the key","in":"path","name":"keyId","required":true,"schema":{"type":"string"}}}></ParamsItem></ul></div></details><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 style={{"marginTop":"1rem","marginBottom":"1rem"}}>

Confirmation of the delete operation.

</div></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"confirm"} required={true} schemaName={"string"} qualifierMessage={"**Possible values:** [`DELETE`]"} schema={{"type":"string","description":"Confirmation string. Set the value to `DELETE`.","enum":["DELETE"],"example":"DELETE"}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The wallet removed the certificate chain.

</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"}>affectedCredentialConfigurations</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 credential configurations whose signing key check fitted with the chain and gives `does-not-fit` without the chain. They then show `does-not-fit` in their `signingKeyCheck`. An empty list when there is none.

</div><li><div style={{"fontSize":"var(--ifm-code-font-size)","opacity":"0.6","marginLeft":"-.5rem","paddingBottom":".5rem"}}>Array [</div></li><SchemaItem collapsible={false} name={"credentialDefinitionId"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The credential definition of the configuration.","example":"6f1c2a7e-0d4b-4c55-9a43-2f7e1b9d8c10"}}></SchemaItem><SchemaItem collapsible={false} name={"credentialConfigurationId"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The credential configuration id, as in the OID4VCI Credential Issuer Metadata.","example":"EmployeeBadge-sdjwt"}}></SchemaItem><SchemaItem collapsible={false} name={"name"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The `label` of the configuration, else its `display.name`, else the `label` of the credential definition.","example":"Employee badge"}}></SchemaItem><SchemaItem collapsible={false} name={"credentialCategory"} required={false} schemaName={"object"} qualifierMessage={undefined} schema={{"type":"string","title":"CredentialCategoryId","description":"The id of a credential category (the list credential categories operation): the eIDAS category of a credential configuration. `none` (no certificate rule), `pid` (person identification data), `eaa` (non-qualified attestation), `qeaa` (qualified attestation) or `pub-eaa` (attestation issued by or for a public sector body).","enum":["none","pid","eaa","qeaa","pub-eaa"],"example":"eaa"}}></SchemaItem><SchemaItem collapsible={false} name={"messages"} required={true} schemaName={"string[]"} qualifierMessage={undefined} schema={{"type":"array","description":"The rules that the new certificate does not fit, with the fix, as in `signingKeyCheck.messages`.","items":{"type":"string","description":"One text."}}}></SchemaItem><li><div style={{"fontSize":"var(--ifm-code-font-size)","opacity":"0.6","marginLeft":"-.5rem"}}>]</div></li></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"affectedCredentialConfigurations\": []\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"400"} value={"400"}><div>

The confirmation string is missing or is not `DELETE`, the key has no certificate chain, the key store of the key does not take a certificate chain (`A certificate chain delete is not available for a key of a QTSP key store: the chain comes from the QTSP.`), or the organisation is a sandbox 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={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></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

Unauthorized

</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></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"404"} value={"404"}><div>

The organisation has no key with this key ID.

</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></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"409"} value={"409"}><div>

The key signs with the `x509` format (`Certificate chain is in use with cryptographicKeyFormat x509: <counts>. Select another key for these uses first.`). `<counts>` is for example `1 credential definition(s), 1 presentation definition(s), 1 status list(s), 1 signed issuer metadata, 1 wallet provider global configuration(s)`.

</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></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"500"} value={"500"}><div>

Internal 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></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      