Consent Withdrawal logo

Consent Withdrawal

Community
mukul975
consent-withdrawal

Implementation guide for GDPR Article 7(3) consent withdrawal mechanisms. Covers the equal ease requirement ensuring withdrawal is as easy as giving consent, one-click withdrawal implementation, cascading effects on downstream processing, third-party notification workflows, and technical architecture for real-time consent revocation.

Overview

Publishermukul975
RepositoryPrivacy-Data-Protection-Skills
Skill nameconsent-withdrawal
Stars
279
Forks
59
Bundled files
4
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 4 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by mukul975 on GitHub. Read the source before you install it.

Installation

Install the Consent Withdrawal AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git /tmp/Privacy-Data-Protection-Skills
mkdir -p .claude/skills
cp -r /tmp/Privacy-Data-Protection-Skills/plugins/consent-management-skills/skills/consent-withdrawal .claude/skills/consent-withdrawal
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Consent Withdrawal in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Consent Withdrawal on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Consent Withdrawal is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Implementing Consent Withdrawal

Overview

GDPR Article 7(3) states: "The data subject shall have the right to withdraw his or her consent at any time. The withdrawal of consent shall not affect the lawfulness of processing based on consent before its withdrawal. Prior to giving consent, the data subject shall be informed thereof. It shall be as easy to withdraw consent as to give it."

The "equal ease" requirement is the most technically demanding aspect. If consent was given with a single checkbox tick during sign-up, withdrawal must be achievable with a comparable level of effort — not buried behind multiple navigation layers, settings pages, or dark patterns.

Equal Ease Analysis

Measuring Consent Complexity

Quantify the effort required to give consent and ensure withdrawal meets or exceeds this standard:

MetricHow to MeasureTarget
Click CountNumber of clicks/taps from entry point to completionWithdrawal clicks <= consent clicks
Page NavigationsNumber of page loads between start and completionWithdrawal pages <= consent pages
Form FieldsNumber of inputs requiredWithdrawal fields <= consent fields
Time to CompleteMeasured in usability testingWithdrawal time <= consent time
Cognitive LoadComprehension difficulty of instructionsWithdrawal instructions equally clear
AccessibilitySteps required with keyboard-only navigationEqual keyboard accessibility

CloudVault SaaS Inc. Compliance Analysis

ActionMethodClick CountPagesFields
Give consent (sign-up)Unticked checkbox tick1 clickSame page0
Withdraw consent (preference center)Toggle switch off + confirm2 clicks1 page0
Withdraw consent (email unsubscribe)Unsubscribe link click1 click1 page0

The preference center withdrawal requires one additional click (confirmation dialog). This is acceptable because it protects against accidental withdrawal, and the EDPB acknowledges that a confirmation step does not violate equal ease (Guidelines 05/2020, paragraph 116).

One-Click Withdrawal Architecture

Withdrawal Entry Points

CloudVault SaaS Inc. provides withdrawal access from multiple locations:

  1. Preference Center: Settings > Privacy (2 clicks from any page)
  2. Footer Link: "Privacy Choices" link in page footer (1 click + toggle)
  3. Email Unsubscribe: One-click unsubscribe link in every marketing email (1 click, per RFC 8058 List-Unsubscribe-Post)
  4. Account Dashboard: Privacy widget showing current consent state (1 click + toggle)
  5. API Endpoint: PUT /api/v1/consent/preferences/{subject_id} for programmatic withdrawal

Withdrawal Processing Pipeline

TRIGGER: User clicks withdrawal toggle for a specific purpose
  ├─► Step 1: Client-Side
  │     ├─ Display confirmation dialog:
  │     │   "Withdraw consent for [purpose name]?"
  │     │   "This will stop [specific processing description]."
  │     │   "You can re-enable this at any time."
  │     │   [Cancel] [Withdraw]
  │     │
  │     └─ User clicks [Withdraw]
  ├─► Step 2: API Call
  │     PUT /api/v1/consent/preferences/{subject_id}
  │     Body: { decisions: [{ purpose_id: "pur_analytics_01", decision: "withdrawn", mechanism: "toggle_switch" }] }
  ├─► Step 3: Backend Processing (within 100ms)
  │     ├─ Create ConsentDecision record (decision: "withdrawn")
  │     ├─ Validate request (subject exists, purpose exists, consent was previously granted)
  │     ├─ Update consent state cache (Redis/in-memory)
  │     └─ Return success response to client
  ├─► Step 4: Cascading Effects (async, within 1 hour)
  │     ├─ Dispatch withdrawal events to message queue (Kafka/RabbitMQ/SQS)
  │     ├─ Each downstream system receives withdrawal notification:
  │     │
  │     │   Purpose: "Service Improvement Analytics" (pur_analytics_001)
  │     │   ├─ Stop analytics SDK data collection for this user
  │     │   ├─ Remove user from analytics cohorts
  │     │   └─ Flag existing analytics data for review/deletion
  │     │
  │     │   Purpose: "Product Update Emails" (pur_marketing_002)
  │     │   ├─ Remove user from email marketing lists
  │     │   ├─ Add user to suppression list
  │     │   ├─ Cancel any scheduled email campaigns for this user
  │     │   └─ Confirm with email service provider (ESP)
  │     │
  │     │   Purpose: "Industry Benchmarking" (pur_benchmarking_003)
  │     │   ├─ Stop data sharing with Datalytics Partners Ltd.
  │     │   ├─ Notify Datalytics Partners Ltd. via API
  │     │   ├─ Request confirmation of processing cessation
  │     │   └─ Flag shared data for deletion per DPA terms
  │     │
  │     └─ Log all propagation events with status tracking
  ├─► Step 5: Downstream Acknowledgment (within 24 hours)
  │     ├─ Each downstream system sends acknowledgment
  │     ├─ System monitors for missing acknowledgments
  │     ├─ Escalation workflow for unacknowledged withdrawals:
  │     │   ├─ T+1 hour: Automated retry
  │     │   ├─ T+4 hours: Alert to engineering team
  │     │   └─ T+24 hours: Escalate to DPO
  │     └─ All acknowledgments logged in propagation table
  └─► Step 6: User Confirmation
        ├─ UI updates: toggle shows "off" state
        ├─ Confirmation message: "Consent withdrawn. Processing will stop within 24 hours."
        ├─ Confirmation email sent to user
        └─ Consent receipt updated and available for download

Third-Party Notification Protocol

When consent is withdrawn for a purpose involving third-party data sharing:

  1. Immediate API Notification: Send structured notification to third party via pre-established API endpoint (defined in the Data Processing Agreement).

  2. Notification Payload:

json
{
    "notification_type": "consent_withdrawal",
    "subject_reference": "hashed_subject_id",
    "purpose_id": "pur_benchmarking_003",
    "withdrawal_timestamp": "2026-03-14T10:30:00Z",
    "required_action": "cease_processing",
    "action_deadline": "2026-03-15T10:30:00Z",
    "acknowledgment_required": true,
    "controller": "CloudVault SaaS Inc."
}
  1. Expected Response:
json
{
    "acknowledgment": true,
    "received_at": "2026-03-14T10:30:05Z",
    "action_status": "processing_cessation_initiated",
    "estimated_completion": "2026-03-14T12:00:00Z"
}
  1. DPA Enforcement: The Data Processing Agreement with Datalytics Partners Ltd. (Section 8.3) requires acknowledgment within 4 hours and processing cessation within 24 hours. Failure to comply constitutes a DPA breach.

Handling Re-Consent After Withdrawal

When a user withdraws consent and later wants to re-consent:

  • Re-consent is permitted and should use the same mechanism as initial consent
  • The consent record must show a clear audit trail: granted → withdrawn → granted
  • If the consent text has changed since the last grant, the new version must be displayed
  • No "nudging" or dark patterns to encourage re-consent (EDPB Guidelines 05/2020)
  • A reasonable cooling-off period is not required but may be implemented for fraud prevention

Key Regulatory References

  • GDPR Article 7(3) — Right to withdraw consent; equal ease requirement
  • GDPR Recital 42 — Consent not freely given if withdrawal causes detriment
  • EDPB Guidelines 05/2020 on Consent — Paragraphs 108-120 on withdrawal
  • RFC 8058 — Signaling One-Click Functionality for List Email Headers (List-Unsubscribe-Post)
  • CNIL Enforcement (Google, January 2022) — EUR 150M fine partly for difficult consent withdrawal
  • AEPD Enforcement (CaixaBank, January 2021) — EUR 6M fine for inadequate withdrawal mechanisms

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Consent Withdrawal AI skill do?

Implementation guide for GDPR Article 7(3) consent withdrawal mechanisms. Covers the equal ease requirement ensuring withdrawal is as easy as giving consent, one-click withdrawal implementation, cascading effects on downstream processing, third-party notification workflows, and technical architecture for real-time consent revocation.

Why use Consent Withdrawal on TypingMind?

Because you install it once and use it with any model. Consent Withdrawal is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Consent Withdrawal in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/plugins/consent-management-skills/skills/consent-withdrawal. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Consent Withdrawal?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Consent Withdrawal?

As many as you like. As long as a model supports skills, you can use Consent Withdrawal with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Consent Withdrawal AI skill free?

Yes. It is published on GitHub by mukul975 under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇