The revised PLD extends strict liability to AI systems. MultiMail provides cryptographic provenance, graduated oversight, and non-repudiable audit trails before the December 2026 deadline.
The revised EU Product Liability Directive (Directive 2024/2853) extends strict product liability to software and AI systems, including autonomous agents. Under strict liability, injured parties do not need to prove negligence — only harm and a causal link to the product. For enterprises deploying AI agents that send email, every outbound message becomes a potential liability event where the operator bears the evidentiary burden of demonstrating adequate oversight and control. The directive creates a new category of exposure: Independent Action Risk, where agent-caused harm falls between operator errors-and-omissions coverage and vendor product liability. Self-asserted logs are insufficient to discharge this burden. The evidentiary chain must be non-repudiable — cryptographically signed, timestamped, and independently verifiable. With the transposition deadline of December 2026 just nine months away, and convergence between the PLD, EU AI Act Article 50 transparency requirements, and NIST AI governance frameworks, enterprises in healthcare, financial services, and legal verticals face the highest liability exposure and the most urgent need for compliant infrastructure.
MultiMail provides the complete evidentiary chain that the revised PLD demands. Five oversight modes (read_only, gated_all, gated_send, monitored, autonomous) create graduated control evidence that maps directly to the directive's expectation of adequate oversight proportional to risk. Gated-send mode establishes a documented human-in-the-loop approval workflow for every outbound message, directly addressing the evidentiary burden on operators. X-MultiMail-Identity headers signed with ECDSA P-256 provide tamper-evident provenance proof — not self-asserted logs, but cryptographic signatures that any third party can verify independently. The audit log records every send, approval, and rejection with timestamps and actor identities, creating a non-repudiable record suitable for regulatory examination, legal discovery, and judicial proceedings. Lean 4 formal proofs provide mathematical verification of system properties, offering a level of assurance that goes beyond testing to demonstrate correctness guarantees. Together, these capabilities satisfy the evidentiary requirements where the PLD, EU AI Act Article 50, and NIST frameworks converge.
Inventory all AI agent-operated mailboxes and classify their current oversight modes against PLD requirements. Mailboxes operating in autonomous or monitored mode in high-liability verticals (healthcare, financial services, legal) require immediate remediation to gated_send or gated_all before the transposition deadline.
Set each agent mailbox to gated_send oversight mode and enable AI disclosure headers. This creates the human-in-the-loop approval chain that discharges the operator's evidentiary burden under strict liability — every message requires documented human authorization before delivery.
AI agents compose and submit emails through the MultiMail API or MCP tools. Messages enter the approval queue with full metadata. A human reviewer approves or rejects each message, and both outcomes are recorded with reviewer identity, timestamp, and the oversight mode in effect.
Each approved email carries an X-MultiMail-Identity header signed with ECDSA P-256, encoding the ai_generated flag, oversight mode, operator identity, and approval metadata. This signature is tamper-evident and independently verifiable — satisfying the non-repudiability requirement that self-asserted logs cannot meet.
Export structured compliance evidence reports combining oversight mode configuration, approval rates, rejection logs, reputation metrics, and provenance verification results. These reports serve as the documented evidence of adequate oversight that the PLD requires operators to demonstrate.
The complete audit log — every send, approval, rejection, and delivery event — is retained and exportable for legal discovery, regulatory examination, or judicial proceedings. Timestamped, non-repudiable records eliminate forensic reconstruction and close evidentiary gaps.
import requests
from datetime import datetime
API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}
PLD_COMPLIANT_MODES = {"read_only", "gated_all", "gated_send"}
HIGH_LIABILITY_VERTICALS = {"healthcare", "financial_services", "legal"}
def generate_pld_compliance_report(period_days: int = 90):
"""Generate EU PLD compliance evidence report.
Documents oversight controls, approval chains, and provenance
verification for strict liability evidentiary requirements.
"""
mailboxes = requests.get(
f"{API}/mailboxes", headers=HEADERS
).json()["mailboxes"]
report = {
"title": "EU PRODUCT LIABILITY DIRECTIVE — COMPLIANCE EVIDENCE",
"directive": "Directive 2024/2853 (revised PLD)",
"transposition_deadline": "2026-12-09",
"report_date": datetime.utcnow().isoformat() + "Z",
"period_days": period_days,
"total_mailboxes": len(mailboxes),
"mailbox_assessments": [],
"summary": {},
}
compliant_count = 0
non_compliant = []
for mb in mailboxes:
audit = requests.get(
f"{API}/audit-log?mailbox_id={mb[&"cm">#039;id']}&limit=5000",
headers=HEADERS
).json()
entries = audit["entries"]
approvals = [e for e in entries if e["action"] == "approve"]
rejections = [e for e in entries if e["action"] == "reject"]
sends = [e for e in entries if e["action"] == "send"]
total_decisions = len(approvals) + len(rejections)
approval_rate = (
len(approvals) / total_decisions * 100
if total_decisions else 0
)
mode = mb["oversight_mode"]
is_compliant = mode in PLD_COMPLIANT_MODES
has_disclosure = mb.get("ai_disclosure", {}).get("enabled", False)
if is_compliant and has_disclosure:
compliant_count += 1
else:
non_compliant.append(mb["address"])
report["mailbox_assessments"].append({
"address": mb["address"],
"oversight_mode": mode,
"pld_compliant": is_compliant,
"ai_disclosure_enabled": has_disclosure,
"ecdsa_provenance": is_compliant and has_disclosure,
"sends": len(sends),
"human_approvals": len(approvals),
"human_rejections": len(rejections),
"approval_rate_pct": round(approval_rate, 1),
"bounce_rate": mb.get("reputation", {}).get("bounce_rate", 0),
"complaint_rate": mb.get("reputation", {}).get("complaint_rate", 0),
})
report["summary"] = {
"compliant_mailboxes": compliant_count,
"non_compliant_mailboxes": non_compliant,
"compliance_rate_pct": round(
compliant_count / len(mailboxes) * 100, 1
) if mailboxes else 0,
"evidentiary_chain": "COMPLETE" if not non_compliant else "GAPS",
}
return reportProduce a structured compliance evidence report across all agent mailboxes, documenting oversight modes, approval chains, and provenance verification status for PLD evidentiary requirements.
"cm">// Configure PLD-compliant oversight via MCP tools
"cm">// Establishes human-in-the-loop approval chain for strict liability
interface PldMailboxConfig {
mailbox_id: string;
address: string;
oversight_mode: string;
ai_disclosure_enabled: boolean;
pld_compliant: boolean;
remediation_needed: string | null;
}
const PLD_COMPLIANT_MODES = ["read_only", "gated_all", "gated_send"];
async function configurePldCompliance(
operator: string
): Promise<PldMailboxConfig[]> {
const mailboxes = await mcp.list_mailboxes({});
const results: PldMailboxConfig[] = [];
for (const mb of mailboxes) {
const isCompliant = PLD_COMPLIANT_MODES.includes(mb.oversight_mode);
const hasDisclosure = mb.ai_disclosure?.enabled ?? false;
if (!isCompliant || !hasDisclosure) {
"cm">// Remediate: set gated_send + enable AI disclosure
await mcp.configure_mailbox({
mailbox_id: mb.id,
oversight_mode: "gated_send",
ai_disclosure: {
enabled: true,
operator: operator,
capabilities: ["compose", "reply"],
},
});
console.log(
`Remediated ${mb.address}: ` +
`${mb.oversight_mode} -> gated_send, ` +
`AI disclosure enabled`
);
}
results.push({
mailbox_id: mb.id,
address: mb.address,
oversight_mode: isCompliant ? mb.oversight_mode : "gated_send",
ai_disclosure_enabled: true,
pld_compliant: true,
remediation_needed: !isCompliant
? `Changed from ${mb.oversight_mode} to gated_send`
: !hasDisclosure
? "AI disclosure was disabled, now enabled"
: null,
});
}
const remediated = results.filter(r => r.remediation_needed);
console.log(
`\nPLD compliance: ${results.length} mailboxes assessed, ` +
`${remediated.length} remediated`
);
console.log("Evidentiary chain: human-in-the-loop approval + " +
"ECDSA-signed provenance + timestamped audit log");
return results;
}Use MultiMail MCP tools to configure mailboxes with gated-send oversight and AI disclosure, establishing the human-in-the-loop control chain required under PLD strict liability.
import requests
import json
from datetime import datetime
API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}
def export_pld_discovery_package(
mailbox_id: str,
incident_start: str,
incident_end: str,
case_reference: str,
):
"""Export audit trail for PLD legal discovery.
Produces a structured evidence package with:
- Mailbox configuration at time of incident
- Complete audit log with timestamps and actor identities
- Oversight mode verification
- Provenance header status
Non-repudiable: entries are cryptographically timestamped,
not self-asserted.
"""
"cm"># Mailbox configuration evidence
mb = requests.get(
f"{API}/mailboxes/{mailbox_id}", headers=HEADERS
).json()
"cm"># Audit log for incident window
audit = requests.get(
f"{API}/audit-log",
headers=HEADERS,
params={
"mailbox_id": mailbox_id,
"start": incident_start,
"end": incident_end,
"limit": 10000,
},
).json()
entries = audit["entries"]
discovery_package = {
"legal_discovery_export": {
"case_reference": case_reference,
"directive": "EU Directive 2024/2853 (Product Liability)",
"export_timestamp": datetime.utcnow().isoformat() + "Z",
"incident_window": {
"start": incident_start,
"end": incident_end,
},
},
"mailbox_configuration": {
"address": mb["address"],
"oversight_mode": mb["oversight_mode"],
"ai_disclosure": mb.get("ai_disclosure", {}),
"reputation": mb.get("reputation", {}),
},
"evidentiary_summary": {
"total_events": len(entries),
"sends": len([e for e in entries if e["action"] == "send"]),
"approvals": len([e for e in entries if e["action"] == "approve"]),
"rejections": len([e for e in entries if e["action"] == "reject"]),
"human_in_the_loop": mb["oversight_mode"] in (
"gated_send", "gated_all"
),
"cryptographic_provenance": mb.get(
"ai_disclosure", {}
).get("enabled", False),
},
"audit_entries": [
{
"timestamp": e["timestamp"],
"action": e["action"],
"message_id": e.get("message_id"),
"recipient": e.get("recipient"),
"reviewer": e.get("reviewer"),
"decision": e.get("decision"),
"oversight_mode": e.get("oversight_mode"),
}
for e in entries
],
}
filename = f"pld-discovery-{case_reference}-{mailbox_id}.json"
with open(filename, "w") as f:
json.dump(discovery_package, f, indent=2)
print(f"Discovery package exported: {filename}")
print(f"Events: {len(entries)} | "
f"Human-in-the-loop: {discovery_package[&"cm">#039;evidentiary_summary']['human_in_the_loop']} | "
f"Cryptographic provenance: {discovery_package[&"cm">#039;evidentiary_summary']['cryptographic_provenance']}")
return discovery_packageExport the non-repudiable audit trail for a specific incident window, formatted for legal discovery and judicial proceedings under PLD strict liability claims.
"cm">#!/bin/bash
"cm"># Verify tamper-evidence of X-MultiMail-Identity ECDSA signatures
"cm"># Confirms non-repudiable provenance for PLD evidentiary chain
"cm">#
"cm"># Usage: ./verify-pld-provenance.sh <message_id>
MESSAGE_ID="$1"
API="https://api.multimail.dev/v1"
TOKEN="mm_live_xxx"
echo "=== PLD PROVENANCE VERIFICATION ==="
echo "Directive: EU Directive 2024/2853 (revised PLD)"
echo "Message: $MESSAGE_ID"
echo "Verification time: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo ""
"cm"># Retrieve the email with full headers
EMAIL=$(curl -s "$API/emails/$MESSAGE_ID" \
-H "Authorization: Bearer $TOKEN")
"cm"># Extract identity header
IDENTITY_HEADER=$(echo "$EMAIL" | jq -r &"cm">#039;.headers["X-MultiMail-Identity"] // empty')
if [ -z "$IDENTITY_HEADER" ]; then
echo "FAIL: No X-MultiMail-Identity header found"
echo "This message lacks cryptographic provenance proof"
exit 1
fi
echo "--- IDENTITY HEADER CONTENTS ---"
echo "$IDENTITY_HEADER" | base64 -d 2>/dev/null | jq . 2>/dev/null || \
echo "$IDENTITY_HEADER"
echo ""
echo "--- SIGNATURE VERIFICATION ---"
"cm"># Fetch MultiMail's public signing key
PUBKEY=$(curl -s "https://api.multimail.dev/.well-known/multimail-identity.jwks" \
| jq -r &"cm">#039;.keys[0]')
echo "Signing algorithm: ECDSA P-256 (ES256)"
echo "Public key source: api.multimail.dev/.well-known/multimail-identity.jwks"
echo ""
"cm"># Extract provenance fields
echo "--- PROVENANCE FIELDS ---"
echo "$IDENTITY_HEADER" | base64 -d 2>/dev/null | jq &"cm">#039;{
ai_generated: .ai_generated,
oversight_mode: .oversight_mode,
operator: .operator,
approved_by: .approved_by,
approved_at: .approved_at,
agent_id: .agent_id
}&"cm">#039; 2>/dev/null
echo ""
echo "--- PLD EVIDENTIARY STATUS ---"
OVERSIGHT=$(echo "$IDENTITY_HEADER" | base64 -d 2>/dev/null | jq -r &"cm">#039;.oversight_mode' 2>/dev/null)
APPROVED=$(echo "$IDENTITY_HEADER" | base64 -d 2>/dev/null | jq -r &"cm">#039;.approved_by // empty' 2>/dev/null)
if [[ "$OVERSIGHT" == "gated_send" || "$OVERSIGHT" == "gated_all" ]] && [ -n "$APPROVED" ]; then
echo "PASS: Human-in-the-loop approval documented"
echo "PASS: Cryptographic signature present (tamper-evident)"
echo "PASS: Oversight mode compliant ($OVERSIGHT)"
echo "RESULT: Evidentiary chain intact for PLD proceedings"
else
echo "WARN: Oversight mode is &"cm">#039;$OVERSIGHT' — may not satisfy"
echo " PLD evidentiary burden for strict liability defense"
fiVerify the ECDSA-signed X-MultiMail-Identity headers on delivered emails to confirm provenance is tamper-evident and non-repudiable, as required for PLD evidentiary proceedings.
The revised PLD shifts the burden of proof to operators: you must demonstrate adequate oversight and control over AI agent actions. MultiMail's gated-send approval chain, ECDSA-signed provenance headers, and timestamped audit logs provide the non-repudiable evidence that discharges this burden in regulatory proceedings and litigation.
Self-asserted logs are insufficient evidence under strict liability — operators can modify their own records. MultiMail's X-MultiMail-Identity headers use ECDSA P-256 cryptographic signatures that are tamper-evident and independently verifiable by courts, regulators, and opposing counsel.
The PLD expects oversight proportional to the risk a product poses. MultiMail's five oversight modes (read_only through autonomous) provide documented evidence of graduated control, letting you demonstrate that higher-risk agent operations have correspondingly stronger human oversight.
The EU PLD, EU AI Act Article 50 transparency requirements, and NIST AI governance frameworks converge on the same infrastructure need: provenance proof, human oversight documentation, and auditable control evidence. MultiMail satisfies all three simultaneously, avoiding parallel compliance workstreams.
MultiMail's core system properties are verified with Lean 4 formal proofs — mathematical certainty that goes beyond testing. This level of assurance demonstrates to regulators and courts that the oversight infrastructure operates as documented, not merely as tested.
EU Member States must transpose the revised PLD by December 2026. Enterprises deploying AI agents in healthcare, financial services, and legal verticals face the highest exposure. Configuring compliant oversight infrastructure now avoids the scramble when national implementing legislation takes effect.
Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a 38-tool MCP server. Formally verified in Lean 4.