---
id: config-delete-individual-by-mapper-id
title: "Delete individual by mapper ID"
description: "Deletes the individual of the organisation that has this `mapperId`. It works as Delete individual: the service marks the record as deleted and deletes the login account of the individual, if it has one. The consent records of the individual are not deleted."
sidebar_label: "Delete individual by mapper ID"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "delete api-method"
info_path: docs/consent-management-admin-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 individual by mapper ID</h1>

<MethodEndpoint method={"delete"} path={"/v4/config/platform/individual/mapper/{mapperId}"}></MethodEndpoint>



Deletes the individual of the organisation that has this `mapperId`. It works as Delete individual: the service marks the record as deleted and deletes the login account of the individual, if it has one. The consent records of the individual are not deleted.

## 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":"Mapper ID of the individual (`mapperId`).","in":"path","name":"mapperId","required":true,"schema":{"type":"string"},"example":"app-user-2001"}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The deleted individual.

</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={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>individual</strong><span className={"openapi-schema__name"}> object</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

A person whose consent the organisation records, for example a customer. The record can point to the person in another system through `externalId`. Keep personal data in it to the minimum that you need.

</div><SchemaItem collapsible={false} name={"id"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"6af081b138e8f33dcf799628","description":"Individual ID. The server sets it. Send it in the `X-ConsentBB-IndividualId` header of the consent record routes."}}></SchemaItem><SchemaItem collapsible={false} name={"externalId"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"customer-1001","description":"Your own ID of the person, for example a customer number. It is unique in the organisation: a second individual with the same external ID gets `409`."}}></SchemaItem><SchemaItem collapsible={false} name={"externalIdType"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"customerNumber","description":"What kind of ID `externalId` is, for example `customerNumber` or `email`."}}></SchemaItem><SchemaItem collapsible={false} name={"identityProviderId"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"ID of the identity provider of the organisation that the person logs in with, if any."}}></SchemaItem><SchemaItem collapsible={false} name={"name"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Alex Doe","description":"Name of the individual."}}></SchemaItem><SchemaItem collapsible={false} name={"iamId"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"ID of the login account of the individual at the identity service. The server sets it when the individual has an `email`."}}></SchemaItem><SchemaItem collapsible={false} name={"email"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Email address. With an email address, the server also makes a login account for the individual (for the privacy dashboard). An email address that has an account already gets `400`."}}></SchemaItem><SchemaItem collapsible={false} name={"phone"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Phone number."}}></SchemaItem><SchemaItem collapsible={false} name={"pushNotificationToken"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Push notification token of the device of the individual."}}></SchemaItem><SchemaItem collapsible={false} name={"deviceType"} required={false} schemaName={"string"} qualifierMessage={"**Possible values:** [``, `android`, `ios`]"} schema={{"type":"string","description":"Operating system of the device for push notifications. Empty when not set. Any other value gets `400`.","enum":["","android","ios"]}}></SchemaItem><SchemaItem collapsible={false} name={"mapperId"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A second ID of your choice, for example the ID of the person in a mobile app. It is unique in the organisation: a second individual with the same mapper ID gets `409`."}}></SchemaItem></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"individual\": {\n    \"id\": \"6af081b138e8f33dcf799628\",\n    \"externalId\": \"customer-1001\",\n    \"externalIdType\": \"customerNumber\",\n    \"identityProviderId\": \"string\",\n    \"name\": \"Alex Doe\",\n    \"iamId\": \"string\",\n    \"email\": \"string\",\n    \"phone\": \"string\",\n    \"pushNotificationToken\": \"string\",\n    \"deviceType\": \"\",\n    \"mapperId\": \"string\"\n  }\n}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"individual\": {\n    \"id\": \"6af081b138e8f33dcf799628\",\n    \"externalId\": \"customer-1001\",\n    \"externalIdType\": \"customerNumber\",\n    \"identityProviderId\": \"\",\n    \"name\": \"Alex Doe\",\n    \"iamId\": \"3314e64f-b0ab-4078-923f-2250ebbbd9aa\",\n    \"email\": \"reader@example.com\",\n    \"phone\": \"+46700000002\",\n    \"pushNotificationToken\": \"\",\n    \"deviceType\": \"android\",\n    \"mapperId\": \"app-user-2001\"\n  }\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={"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>

No individual has the mapper ID (`Failed to fetch individual by mapper id: <mapperId>`), or the server could not delete the login account or save the change.

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