Automate recall notifications, service reminders, and delivery updates across OEM, dealer, and owner networks — with monitored oversight and full auditability.
Automotive and EV brands operate across layered networks: OEMs, regional distributors, franchise dealers, service centers, and direct-to-consumer channels. Each layer generates communication obligations — recall notices, warranty claims, service scheduling, financing follow-ups, delivery confirmations, and charger installation coordination. AI agents can handle much of this volume, but the stakes are uneven. A missed recall notification or a stale pricing claim creates regulatory and reputational exposure. Emails referencing connected-car telemetry or owner PII must comply with CCPA and GDPR. CAN-SPAM governs promotional messages. The FTC Act applies to financing and incentive claims. MultiMail's monitored oversight mode lets agents send autonomously while keeping a human in the loop through notifications — the right posture for a medium-risk industry where speed matters but errors have real consequences.
Recall emails must reach the correct vehicle owners with accurate VIN references, remedy descriptions, and scheduling instructions. Errors or delays create NHTSA compliance exposure and customer safety risk. Manual processes across large owner databases are slow and error-prone.
OEMs must distribute service bulletins, allocation updates, and campaign materials to hundreds or thousands of dealers with varying systems and contact lists. Tracking delivery, opens, and responses across a distributed network requires automation that maintains per-dealer audit trails.
Service reminders triggered by vehicle telemetry (oil life, battery health, upcoming service intervals) contain data tied to specific vehicles and owners. Referencing this data in outbound email falls under CCPA and GDPR — agents must treat it accordingly and not retain it beyond the transaction.
Lease and financing follow-ups must include required disclosures under applicable state and federal regulations. Agents generating these messages need guardrails to ensure disclosures are included and that APR, payment, and incentive figures remain current.
EV deliveries involve multiple parties — logistics, delivery teams, customers, and sometimes third-party charger installers. Coordinating these workflows over email across different time zones and systems requires agents that can thread conversations, track approvals, and surface blockers without human intervention on each step.
Agents use send_email to dispatch recall notifications with VIN-specific content, remedy instructions, and dealer scheduling links. Monitored oversight means notifications go out at scale without per-message approval, while every send is logged with full message content and delivery status for regulatory audit.
Webhook-triggered agents receive telemetry events, call check_inbox to verify no recent service communication exists for that owner, and dispatch personalized reminders via send_email. The full message and metadata are retained for CCPA compliance without storing the underlying vehicle data.
Agents iterate over dealer lists, send tailored service bulletins or campaign materials using send_email with per-dealer mailboxes, then log delivery and read receipts via webhooks. tag_email marks threads by dealer ID, enabling filtered audit pulls across distributed networks.
For high-stakes delivery confirmations involving financing terms or custom configurations, agents draft communications and hold them in gated_send mode. The delivery coordinator reviews and approves before the message reaches the customer — preventing errors on irreversible commitments.
Agents handle post-application financing follow-ups and rate expiry reminders. gated_all oversight ensures a compliance reviewer approves any message containing APR figures, payment estimates, or promotional financing terms before delivery — satisfying FTC and state dealer regulation requirements.
Agents coordinate between customers, electricians, and utility providers for home charger installations. check_inbox and get_thread let agents read installer replies and surface scheduling conflicts, while reply_email handles routine confirmations autonomously under monitored oversight.
import requests
API_KEY = "$MULTIMAIL_API_KEY"
BASE_URL = "https://api.multimail.dev"
def send_recall_notification(owner_email: str, owner_name: str, vin: str, recall_id: str, remedy: str):
response = requests.post(
f"{BASE_URL}/send_email",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"from": "[email protected]",
"to": owner_email,
"subject": f"Important Safety Recall Notice — {recall_id}",
"body": (
f"Dear {owner_name},\n\n"
f"A safety recall has been issued for your vehicle (VIN: {vin}).\n\n"
f"Remedy: {remedy}\n\n"
"Please contact your nearest authorized dealer to schedule the free repair. "
"Parts are in stock at most locations.\n\n"
"This service is free of charge under NHTSA recall {recall_id}.\n"
),
"tags": ["recall", recall_id, f"vin:{vin}"],
"metadata": {
"vin": vin,
"recall_id": recall_id,
"notification_type": "safety_recall"
}
}
)
response.raise_for_status()
return response.json()
"cm"># Usage
result = send_recall_notification(
owner_email="[email protected]",
owner_name="Jane Doe",
vin="1HGBH41JXMN109186",
recall_id="NHTSA-2026-0042",
remedy="Reprogram battery management firmware to prevent thermal event under rapid charge cycle."
)
print(f"Sent: {result[&"cm">#039;message_id']}")
Send a recall notification to a specific vehicle owner using the REST API, including VIN reference in metadata for auditability.
from multimail_sdk import MultimailClient
from datetime import datetime, timedelta
client = MultimailClient(api_key="$MULTIMAIL_API_KEY")
def handle_telemetry_event(event: dict):
owner_email = event["owner_email"]
owner_name = event["owner_name"]
service_type = event["service_type"] "cm"># e.g. "oil_change", "tire_rotation"
vehicle_model = event["vehicle_model"]
"cm"># Check for recent reminder to avoid duplicate sends
cutoff = (datetime.utcnow() - timedelta(days=30)).isoformat() + "Z"
inbox = client.check_inbox(
mailbox="[email protected]",
query=f"to:{owner_email} tag:service-reminder",
since=cutoff
)
if inbox["count"] > 0:
print(f"Skipping {owner_email} — reminder already sent in last 30 days")
return
result = client.send_email(
from_address="[email protected]",
to=owner_email,
subject=f"Your {vehicle_model} is due for {service_type.replace(&"cm">#039;_', ' ').title()}",
body=(
f"Hi {owner_name},\n\n"
f"Your vehicle&"cm">#039;s onboard system has indicated it's time for a {service_type.replace('_', ' ')}.\n\n"
"Schedule online or call your dealer directly. Most appointments are available within 48 hours.\n\n"
"Reply to this email to confirm your preferred dealer and time."
),
tags=["service-reminder", service_type],
metadata={"trigger": "telemetry", "service_type": service_type}
)
print(f"Reminder sent: {result[&"cm">#039;message_id']}")
# Example event from telemetry pipeline
handle_telemetry_event({
"owner_email": "[email protected]",
"owner_name": "John",
"service_type": "oil_change",
"vehicle_model": "2024 Model Y Long Range"
})
Handle an inbound telemetry event and send a service reminder only if no reminder was sent in the last 30 days. Uses check_inbox to verify before sending.
const API_KEY = process.env.MM_API_KEY!;
const BASE_URL = "https://api.multimail.dev";
interface Dealer {
id: string;
name: string;
contact_email: string;
region: string;
}
async function broadcastDealerBulletin(
dealers: Dealer[],
bulletin: { id: string; subject: string; body: string }
): Promise<void> {
const results = await Promise.allSettled(
dealers.map(async (dealer) => {
const res = await fetch(`${BASE_URL}/send_email`, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
from: "[email protected]",
to: dealer.contact_email,
subject: `[Service Bulletin ${bulletin.id}] ${bulletin.subject}`,
body: `Dear ${dealer.name} Service Team,\n\n${bulletin.body}\n\nPlease confirm receipt by replying to this message.`,
tags: ["service-bulletin", bulletin.id, `dealer:${dealer.id}`, `region:${dealer.region}`],
metadata: {
bulletin_id: bulletin.id,
dealer_id: dealer.id,
distribution_type: "service_bulletin",
},
}),
});
if (!res.ok) throw new Error(`Failed for dealer ${dealer.id}: ${res.status}`);
const data = await res.json();
return { dealer_id: dealer.id, message_id: data.message_id };
})
);
const failed = results.filter((r) => r.status === "rejected");
if (failed.length > 0) {
console.error(`${failed.length} dealer sends failed:`, failed);
}
console.log(`Bulletin ${bulletin.id} sent to ${results.length - failed.length}/${dealers.length} dealers`);
}
broadcastDealerBulletin(
[
{ id: "DLR-001", name: "Downtown Auto Group", contact_email: "[email protected]", region: "northeast" },
{ id: "DLR-002", name: "Westside Motors", contact_email: "[email protected]", region: "west" },
],
{
id: "SB-2026-114",
subject: "Updated Brake Caliper Torque Spec — Model Year 2024-2025",
body: "The factory torque specification for front brake caliper bolts on MY2024-2025 vehicles has been updated from 85 Nm to 92 Nm. Apply this spec on all brake service work effective immediately. Updated workshop manual pages attached.",
}
);
Broadcast a service bulletin to all dealers in a network, tagging each thread by dealer ID for later audit retrieval.
import requests
API_KEY = "$MULTIMAIL_API_KEY"
BASE_URL = "https://api.multimail.dev"
def draft_delivery_confirmation(customer_email: str, order: dict):
"""Draft delivery confirmation under gated_send — sends only after human approves."""
body = (
f"Dear {order[&"cm">#039;customer_name']},\n\n"
f"Your {order[&"cm">#039;vehicle']} is ready for delivery.\n\n"
f"Delivery Date: {order[&"cm">#039;delivery_date']}\n"
f"Location: {order[&"cm">#039;delivery_location']}\n"
f"Final Purchase Price: ${order[&"cm">#039;final_price']:,.2f}\n"
f"Financing: {order[&"cm">#039;financing_summary']}\n\n"
"Please bring a valid government-issued ID and proof of insurance. "
"Your delivery coordinator will walk you through the vehicle features and answer any questions.\n\n"
f"Questions? Reply to this email or call {order[&"cm">#039;coordinator_phone']}."
)
# gated_send: agent drafts, human approves before delivery
response = requests.post(
f"{BASE_URL}/send_email",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"from": "[email protected]",
"to": customer_email,
"subject": f"Your {order[&"cm">#039;vehicle']} Delivery Confirmation",
"body": body,
"oversight_mode": "gated_send",
"tags": ["delivery-confirmation", f"order:{order[&"cm">#039;id']}"],
"metadata": {"order_id": order["id"], "requires_coordinator_review": True}
}
)
response.raise_for_status()
data = response.json()
print(f"Draft held for approval — approve at: {data[&"cm">#039;approval_url']}")
return data
draft_delivery_confirmation(
customer_email="[email protected]",
order={
"id": "ORD-2026-8841",
"customer_name": "Alex Patel",
"vehicle": "2026 Rivian R1T Quad-Motor",
"delivery_date": "April 28, 2026 at 10:00 AM",
"delivery_location": "Rivian Service Center, 2300 N Clark St, Chicago IL",
"final_price": 78450.00,
"financing_summary": "72 months at 5.99% APR through Rivian Financial Services",
"coordinator_phone": "(312) 555-0194"
}
)
Draft a delivery confirmation email containing pricing and configuration details, then hold it for human approval before it reaches the customer.
| Regulation | Requirement | How MultiMail helps |
|---|---|---|
| CAN-SPAM Act | Commercial email messages must include a physical mailing address, a clear unsubscribe mechanism, and honest subject lines. Promotional content about incentives, pricing, or new models triggers CAN-SPAM obligations even when sent by an AI agent. | MultiMail enforces unsubscribe header injection and tracks opt-out status at the mailbox level. Agents calling send_email cannot override suppression lists, ensuring promotional messages sent by automated pipelines remain CAN-SPAM compliant. |
| CCPA / GDPR | Vehicle telemetry data and owner PII used to trigger or personalize service reminders constitute personal data under CCPA and GDPR. Retention, processing purpose, and cross-border transfer must be documented. Data subjects have deletion and access rights. | MultiMail stores message content and metadata only — it does not retain the underlying vehicle or telemetry data that triggered the send. Per-message metadata and tags create the audit trail required to respond to data subject access requests without exposing telemetry records. |
| FTC Act | Promotional claims about EV range, incentive amounts, lease rates, and financing terms must be accurate and substantiated at the time of communication. Deceptive or misleading claims in agent-generated emails are attributable to the business. | gated_send and gated_all oversight modes require human review before messages containing pricing, incentive, or financing content are delivered. This creates a mandatory check that prevents stale or inaccurate claims from reaching customers. |
| State Dealer Regulations | Many states require specific disclosures in dealer-to-consumer communications about financing, trade-in values, and advertised prices. Requirements vary by state and apply regardless of whether the message was written by a human or generated by an AI agent. | gated_all oversight ensures compliance reviewers approve outbound financing and pricing communications before delivery. Full message logging with timestamps provides the documentation trail required during dealer audits or state regulatory reviews. |
| NHTSA Recall Requirements | Vehicle manufacturers must notify all registered owners of recalled vehicles within a defined timeframe and retain records of notification attempts. Errors in owner identification or failure to document delivery can result in regulatory penalties. | MultiMail's per-message delivery status webhooks and metadata tagging (VIN, recall ID) let recall notification pipelines confirm and log every delivery attempt. Failed deliveries trigger webhook events that agents can use to escalate or retry through alternative channels. |
Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a 50-tool MCP server. Formally verified in Lean 4.