---
id: config-delete-digital-wallet-open-id-trust-source
title: "Delete trust source"
description: "Deletes one trust source of the organisation. A source in use cannot be deleted: an accepted list names it, or a stored DCQL query has its URL as an `etsi_tl` value. The answer is then `400` (`trust_source.in_use`). [Read trust source usage](/docs/openid4vc-api/config-read-digital-wallet-open-id-trust-source-usage) tells where it is used. Remove the source from these settings first."
sidebar_label: "Delete trust source"
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 trust source</h1>

<MethodEndpoint method={"delete"} path={"/v4/config/ows/trust/sources/{trustSourceId}"}></MethodEndpoint>



Deletes one trust source of the organisation. A source in use cannot be deleted: an accepted list names it, or a stored DCQL query has its URL as an `etsi_tl` value. The answer is then `400` (`trust_source.in_use`). [Read trust source usage](/docs/openid4vc-api/config-read-digital-wallet-open-id-trust-source-usage) tells where it is used. Remove the source from these settings first.

API key scope: `trust-sources:delete` (the older `trust-anchors:delete` still works for a period).


## 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 a trust source of the organisation, from [List trust sources](/docs/openid4vc-api/config-list-digital-wallet-open-id-trust-source). A value that is not a UUID gives HTTP 404, as an unknown ID.","in":"path","name":"trustSourceId","required":true,"schema":{"type":"string","format":"uuid"},"example":"6d2c0b8e-3f4a-4c1d-9e2b-7a5f1c3d8e90"}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"204"} value={"204"}><div>

Deleted. No body.

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

The trust source is in use (`trust_source.in_use`, `The trust source is in use: <usage>`), or the organisation is unknown or 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={"404"} value={"404"}><div>

The organisation has no trust source with this ID, or the ID is not a UUID (`Trust source 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></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>
      