---
id: service-download-my-data
title: "Request to download the data of the individual"
description: "Makes a request of the individual to download its data in your organisation. The request starts in state `1` (initiated), and your organisation gets the webhook event `data.download.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 download 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 download the data of the individual</h1>

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



Makes a request of the individual to download its data in your organisation. The request starts in state `1` (initiated), and your organisation gets the webhook event `data.download.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 download 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 download request (`Request (Download 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 (Download 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>
      