Privacy Tools Guide

How to Request Human Review of AI Automated Decision That Affects You Legally

Automated decision-making systems increasingly influence significant aspects of daily life, from credit approvals and employment screening to insurance underwriting and housing applications. When these AI systems make decisions that legally impact you, you have the right to request human review. This guide provides practical strategies for exercising that right, with templates and technical context for developers building compliant systems.

Under GDPR Article 22, individuals have the right not to be subject to decisions based solely on automated processing that produce legal or similarly significant effects. This includes decisions made through profiling. Similar protections exist in CCPA/CPRA (California), VCDPA (Virginia), and other privacy regulations worldwide.

The right includes:

When This Right Applies

This right triggers when an automated decision:

How to Submit a Human Review Request

Step 1: Identify the Decision-Maker

First, determine which organization made the automated decision. This might be:

Step 2: Locate the Privacy Policy

Check the organization’s privacy policy for:

Step 3: Submit Your Request

Use this template to submit your human review request:

Subject: Request for Human Review of Automated Decision

To: [Organization Privacy Officer / Data Protection Officer]

I am writing to request human review of an automated decision that affects me.

Decision in question: [Describe the decision - e.g., credit application denial, job application rejection, insurance premium increase]

Date of decision: [Date you became aware of the decision]

I am exercising my right under [GDPR Article 22 / CCPA Section 1798.130 / applicable regulation] to request:
1. Human intervention in the decision-making process
2. The ability to present my position regarding this decision
3. Information about the logic involved in the automated decision

Please provide:
- The reasoning behind this decision
- The personal data used to make this decision
- Your process for human review
- The timeline for receiving a response

My contact information:
Name: [Your name]
Email: [Your email]
Account/Application reference: [If applicable]

Please confirm receipt of this request and provide a timeline for response as required by applicable data protection law.

[Your signature]
[Date]

Technical Implementation: Building Request Handling Systems

For developers implementing human review request workflows, here are practical patterns.

Request Intake API Endpoint

# Python FastAPI example for human review requests
from fastapi import FastAPI, Request, HTTPException
from pydantic import BaseModel
from datetime import datetime
import logging

app = FastAPI()

class HumanReviewRequest(BaseModel):
    decision_type: str  # e.g., "credit_decision", "employment_decision"
    decision_date: datetime
    user_id: str
    description: str
    requester_email: str

@app.post("/api/v1/human-review-request")
async def submit_human_review_request(request: HumanReviewRequest):
    """
    Endpoint for users to request human review of automated decisions.
    Implements GDPR Article 22 requirements.
    """
    # Validate request contains required information
    if not request.decision_type or not request.description:
        raise HTTPException(
            status_code=400,
            detail="decision_type and description are required"
        )

    # Log the request for tracking
    request_id = f"HRR-{datetime.utcnow().timestamp()}"
    logging.info(
        f"Human review request {request_id}: "
        f"type={request.decision_type}, user={request.user_id}"
    )

    # Create ticket in review queue
    review_ticket = {
        "request_id": request_id,
        "user_id": request.user_id,
        "decision_type": request.decision_type,
        "decision_date": request.decision_date,
        "description": request.description,
        "status": "pending_human_review",
        "created_at": datetime.utcnow(),
        "required_response_deadline": datetime.utcnow()  # Set based on regulation
    }

    # Store in database (implementation depends on your stack)
    # await db.human_review_requests.insert(review_ticket)

    return {
        "request_id": request_id,
        "status": "submitted",
        "message": "Your request for human review has been received"
    }

Decision Explanation Endpoint

// Express.js endpoint to explain automated decisions
app.get('/api/v1/decision/:decisionId/explanation', async (req, res) => {
  const { decisionId } = req.params;
  const { userId } = req.query;

  // Verify user owns this decision
  const decision = await getDecisionFromDatabase(decisionId);

  if (!decision || decision.userId !== userId) {
    return res.status(403).json({ error: 'Unauthorized' });
  }

  // Return decision explanation per GDPR Article 22
  res.json({
    decisionId: decision.id,
    decisionType: decision.type,
    decisionDate: decision.createdAt,
    outcome: decision.outcome,
    factors: decision.factors, // Anonymized factors used
    modelType: decision.modelType, // General category, not proprietary details
    humanReviewAvailable: true,
    requestHumanReviewEndpoint: `/api/v1/human-review-request`
  });
});

Audit Trail for Compliance

import hashlib
from datetime import datetime

class DecisionAuditLogger:
    """Audit log for automated decisions - GDPR Article 22 compliance"""

    def log_decision(self, user_id: str, decision_type: str,
                     outcome: str, factors: list):
        audit_entry = {
            "timestamp": datetime.utcnow().isoformat(),
            "user_id": self._hash_identifier(user_id),
            "decision_type": decision_type,
            "outcome": outcome,
            "factors_used": factors,
            "human_review_requested": False,
            "human_review_outcome": None,
            "request_id": None
        }

        # Store audit entry
        # This supports demonstrating compliance during regulatory inquiries

        return audit_entry["request_id"]  # Returns reference ID

    def log_human_review_request(self, user_id: str, request_id: str):
        """Record when a user requests human review"""
        # Update the original decision audit entry
        # Mark that human review was requested and processed

    def _hash_identifier(self, user_id: str) -> str:
        """Hash user identifiers for audit log privacy"""
        return hashlib.sha256(user_id.encode()).hexdigest()[:16]

Common Scenarios and How to Handle Them

Credit Application Denied

Banks use automated systems to evaluate credit applications. If denied:

  1. Request the specific reasons for denial
  2. Ask what data was used in the evaluation
  3. Request human review of the decision
  4. Ask if the decision can be reconsidered with additional information

Employment Decision

AI-powered recruitment tools or performance systems may make employment decisions:

  1. Ask if AI was used in the decision-making process
  2. Request information about the criteria used
  3. Ask for human review if you believe the AI made an error

Insurance Premium Increase

Insurers increasingly use algorithms to set premiums:

  1. Request explanation of factors affecting your premium
  2. Ask for human review if you believe the assessment is inaccurate
  3. Request the data used in the calculation

What Organizations Must Provide

When you request human review, the organization must:

  1. Provide timely response (typically 30 days under GDPR)
  2. Explain the logic of the automated decision
  3. Allow you to present your perspective
  4. Review the decision with meaningful human intervention
  5. Provide a specific outcome from the human review

Building This Into Your Applications

For developers building systems that interface with automated decision-making:

# Example: User-facing notification about automated decisions
def notify_user_of_decision(user_email: str, decision: dict):
    """
    Notify users when an automated decision is made,
    including their right to human review.
    """
    email_content = f"""
    A decision has been made regarding your application.

    Decision: {decision['outcome']}
    Date: {decision['timestamp']}

    You have the right to request human review of this decision.
    To request review, visit: {config.HUMAN_REVIEW_URL}

    You may also request:
    - Explanation of the decision logic
    - Access to data used in the decision
    - Correction of inaccurate data

    Response timeline: 30 days per GDPR Article 22
    """
    send_email(user_email, "Decision Notification", email_content)

Built by theluckystrike — More at zovo.one