Anthropic quietly rewrites its enterprise data retention rules
For teams running regulated workloads — healthcare, finance, legal — this isn't administrative noise. It's a compliance event. SOC 2 auditors will ask why retention tripled without a corresponding risk assessment. GDPR teams will need to update their data processing addendums. And if you're feeding proprietary codebases or PII into Claude via the API, that data now lingers three times longer in a jurisdiction you may not control.
The kicker: the opt-out mechanism isn't in the console. You have to email [email protected] with your organization ID and a written request. No self-serve toggle. No API endpoint. That alone tells you where this sits on their priority ladder.
I've been running a side-by-side comparison between Anthropic's API and OpenAI's enterprise tier for a client migration. OpenAI lets you set retention to zero days via the dashboard today. Anthropic's new default makes that look generous by comparison. The model quality gap has narrowed enough that policy details like this are becoming the deciding factor for procurement teams.
What's frustrating is the lack of granularity. You can't say "retain coding prompts for 7 days but keep legal contract reviews for 90." It's a blunt instrument. For a practical tutorial on how to strip metadata before sending requests, I've been using a lightweight proxy layer that scrubs timestamps, user IDs, and file hashes — reduces the blast radius if retention policies shift again.
# Minimal scrubbing proxy example
import re
from typing import Dict, Any
def sanitize_payload(payload: Dict[str, Any]) -> Dict[str, Any]:
"""Remove identifiable metadata before forwarding to Anthropic API."""
cleaned = payload.copy()
# Strip user/session identifiers
cleaned.pop("user_id", None)
cleaned.pop("session_id", None)
cleaned.pop("metadata", None)
# Redact potential PII in message content
if "messages" in cleaned:
for msg in cleaned["messages"]:
if isinstance(msg.get("content"), str):
msg["content"] = re.sub(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', '[EMAIL]', msg["content"])
msg["content"] = re.sub(r'\b\d{3}-\d{2}-\d{4}\b', '[SSN]', msg["content"])
return cleanedThis isn't about Anthropic being malicious. It's about enterprise AI infrastructure maturing past the "trust us" phase. If you're building a real-world deployment, treat retention policy as a configuration parameter you control, not a vendor default you accept.