---
id: service-read-individual
title: "Read individual"
description: "Reads an individual. With a token of an individual (an individual token, a token of the privacy dashboard login or of the identity provider of the organisation), the individual can read only its own record: another ID gets `403`."
sidebar_label: "Read individual"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "get 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"}>Read individual</h1>

<MethodEndpoint method={"get"} path={"/v4/service/platform/individual/{individualId}"}></MethodEndpoint>



Reads an individual. With a token of an individual (an individual token, a token of the privacy dashboard login or of the identity provider of the organisation), the individual can read only its own record: another ID gets `403`.

## 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":"Individual ID.","in":"path","name":"individualId","required":true,"schema":{"type":"string"},"example":"6af0821c38e8f33dcf79962e"}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The 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\": \"6af0821c38e8f33dcf79962e\",\n    \"externalId\": \"customer-1002\",\n    \"externalIdType\": \"customerNumber\",\n    \"identityProviderId\": \"\",\n    \"name\": \"Sam Doe\",\n    \"iamId\": \"\",\n    \"email\": \"\",\n    \"phone\": \"\",\n    \"pushNotificationToken\": \"<push-notification-token>\",\n    \"deviceType\": \"ios\",\n    \"mapperId\": \"\"\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>

A token of an individual (an individual token, a token of the privacy dashboard login or of the identity provider of the organisation) asks for another 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={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 individual does not exist (`Failed to fetch individual`), or the server failed.

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