Generate a GDPR data subject request response checklist
A GDPR data subject request needs more than a quick acknowledgement. It needs a clear owner, a defensible search, careful review, secure delivery, and a deadline that remains visible throughout the work.
Run — free
This generator turns an access, deletion, or portability request type into a practical response checklist. It identifies the common operational steps, adds actions specific to the selected right, and states the standard response period and extension notice to track. The result is a planning aid, not legal advice or a substitute for reviewing the request's facts and applicable law.
Start the clock and establish control
Begin by recording the date the organization received the request, the channel used, the right invoked, and the person responsible for the response. The standard GDPR target is to respond without undue delay and within one calendar month of receipt. A request may arrive through an unexpected channel or without using legal terminology, so teams should train customer support, human resources, and other likely recipients to recognize and route it. Confirm identity proportionately, especially where disclosure or deletion could create harm, but do not demand unnecessary documents by default. If an authorized representative acts for the data subject, verify the authority as well as the relevant identity. Clarify ambiguous scope promptly and document what was agreed. Keep the deadline visible even while questions are being resolved. For complex or multiple requests, an extension of up to two additional months may be available when necessary, but the data subject must be told within the initial month and given reasons. Track that notice as its own task rather than assuming the final deadline alone is sufficient. Record every calculation and decision so another reviewer can reconstruct the timeline.
Search, assess, and apply the selected right
Build a search plan that covers the systems, processors, archives, mailboxes, business teams, and account identifiers reasonably likely to contain personal data in scope. Document both successful searches and places checked with no results. The selected right then changes the substantive work. For access, compile the personal data and the supplementary information required for a meaningful response, while protecting the rights and freedoms of other people. For deletion, identify the applicable ground for erasure and test whether a legal obligation, legal claims, freedom of expression, public interest, or another exception requires continued processing. Where deletion is required, address active systems, downstream workflows, processors, and defensibly controlled retained copies. For portability, separate eligible data provided by the data subject and processed by automated means on consent or contract from data outside the right. Produce eligible data in a structured, commonly used, machine-readable form, and assess direct transmission when requested and technically feasible. Across all three paths, avoid treating the checklist as an automatic legal conclusion: exemptions, sector rules, litigation holds, and local guidance may alter the correct action. Escalate uncertain decisions to the appropriate privacy or legal owner.
Review, deliver securely, and close the record
Before responding, review the package against the original request and the documented scope. Confirm that the correct person's data is included, that unnecessary personal data is excluded, and that third-party information has been handled proportionately. Check the response language: it should clearly say what action was taken, identify any limitation or refusal, give reasons where required, and explain relevant complaint and judicial-remedy rights. If the organization considers a request manifestly unfounded or excessive, the decision to refuse or charge should receive appropriate review and must still be communicated within the applicable initial period. Choose a delivery method that matches the sensitivity of the material. An export containing identity documents, communications, or account history should not be attached casually to an unverified address. Validate destination details for direct portability transfers and retain evidence of delivery. Finally, record the response date, approver, delivery method, data sources searched, exceptions applied, processor or recipient notifications, and any follow-up commitment. Use the generated list as a repeatable control, then adapt it to organizational policy and the request's facts. At $0.002 per API request, it can also support consistent intake workflows without replacing professional judgment.
What you can do with it
Triage an access request
Give the privacy coordinator a structured list for identity checks, searches, supplementary information, redaction, review, and secure delivery.
Coordinate an erasure workflow
Help legal, records, product, and processor owners track the erasure assessment, exceptions, system actions, notifications, and final response.
Prepare a portability export
Separate eligible data, choose a machine-readable format, validate a receiving controller when needed, and document secure transmission.
FAQ
Which request types are supported?
The generator supports access, deletion, and portability. Any other request type returns an invalid input error.
What deadline does the checklist track?
It states the standard requirement to respond without undue delay and within one calendar month of receipt, plus the conditional extension and notice rules.
Does it calculate a calendar date?
No. It provides the rule to track, but it does not accept a receipt date or calculate a date. Record and verify the exact deadline under applicable guidance.
Can the one-month period be extended?
When necessary because of complexity or the number of requests, the period may be extended by up to two additional months. The data subject must be notified within the initial month and told why.
Is this legal advice?
No. It is an operational planning checklist. Applicable law, regulatory guidance, exemptions, sector obligations, and the specific facts require appropriate professional review.
What does an API request cost?
Each API request costs $0.002. The capability uses deterministic local logic without external services.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/legal2/gdpr-dsar-response-checklist \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"request_type":"access"}'const res = await fetch("https://api.kit.forhosting.com/legal2/gdpr-dsar-response-checklist", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"request_type": "access"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/legal2/gdpr-dsar-response-checklist",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"request_type": "access"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/legal2/gdpr-dsar-response-checklist", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"request_type":"access"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"request_type":"access"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/legal2/gdpr-dsar-response-checklist", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"request_type": "access"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "legal2.gdpr_dsar_response_checklist",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |