---
id: service-delete-my-data
title: "Request to delete the data of the individual"
description: "Makes a request of the individual to delete its data in your organisation. The request starts in state `1` (initiated), and your organisation gets the webhook event `data.delete.initiated`. Your organisation then handles the request and sets its state with [Update data request](/docs/consent-management-admin-api/config-update-data-request). The request stores the e-mail address of the individual as `userName`."
sidebar_label: "Request to delete the data of the individual"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "post api-method"
info_path: docs/consent-management-individual-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"}>Request to delete the data of the individual</h1>

<MethodEndpoint method={"post"} path={"/v4/service/consent/organisation/data-delete"}></MethodEndpoint>



Makes a request of the individual to delete its data in your organisation. The request starts in state `1` (initiated), and your organisation gets the webhook event `data.delete.initiated`. Your organisation then handles the request and sets its state with [Update data request](/docs/consent-management-admin-api/config-update-data-request). The request stores the e-mail address of the individual as `userName`.

The individual can have only one open delete request at a time: while one is in state `1` or `2`, a new request gets `400`. The answer is `200` with an empty body; read the new request with the list or the status route.

## Request

<details style={{"marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collapsed={false} open={true}><summary style={{}}><h3 className={"openapi-markdown__details-summary-header-params"}>Header Parameters</h3></summary><div><ul><ParamsItem className={"paramsItem"} param={{"in":"header","name":"X-ConsentBB-IndividualId","required":false,"schema":{"type":"string"},"example":"6af081b138e8f33dcf799628","description":"ID of the individual, or its `externalId`. Mandatory with an API key: without it the answer is `400` (\"IndividualId is not present in request header\"), and an unknown individual gets `400` too. With an individual token, leave it out: the server takes the individual from the token. Send it only on the routes that list it: with an API key that has resource scopes (for example `consent-records:read`), another route answers `400` to a request with this header."}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The server saved the request. The body is empty.

</div><div></div></TabItem><TabItem label={"400"} value={"400"}><div>

The `X-ConsentBB-IndividualId` header is missing, the individual does not exist, or the individual already has an open delete request (`Request (Delete Data) ongoing for user: ...`).

</div><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  \"errorDescription\": \"Request (Delete Data) ongoing for user: 6af081b138e8f33dcf799628 organization: 6ae2bf741c3dadfeb27982ec\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

The API key or the token is missing or not valid.

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

The server could not read the e-mail address of the individual (`Failed to read the user name`) or could not save the request.

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

The server could not read the e-mail address of the individual for a short time (`Failed to read data from the api`). Try again later.

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