Automate appointment reminders, prescription alerts, and boarding updates while keeping medical and billing communications under staff review.
Veterinary clinics and pet care facilities send a high volume of time-sensitive communications: appointment confirmations, vaccine due dates, prescription refill notices, boarding check-in instructions, and post-visit follow-ups. Front desk staff handle most of this manually today, creating bottlenecks and missed touchpoints. AI agents can absorb the routine volume, but messages that reference treatment details, medications, or payment information still warrant a human eye before delivery. State veterinary practice laws vary on what constitutes medical advice, and both CAN-SPAM and CCPA apply to commercial email sent to clients. The result is a use case that benefits significantly from automation while requiring selective gating on higher-stakes outbound messages.
A practice with 40 daily appointments generates dozens of reminder, confirmation, and follow-up emails. Sending these manually is error-prone; sending them too early or too late reduces show rates. Agents need reliable scheduling tied to the appointment system, not a cron job.
Refill alerts must reference the correct pet, medication, dosage, and prescribing vet. An error in any of these fields creates a client trust problem and potential liability. These messages need to be drafted by an agent but reviewed before they go out.
A single boarding stay may generate check-in confirmation, daily updates, and a pickup reminder. Coordinating these across a shared inbox without a structured workflow leads to duplicate sends or missed messages when staff changes shift.
Emails referencing a pet's medical history, lab results, or treatment plan must only reach the authorized account holder. Sending to an unverified or outdated address violates CCPA and erodes trust. Auditability of who received what is a practical necessity.
Annual wellness plan renewal emails are commercial in nature and fall under CAN-SPAM and CCPA. They must include unsubscribe mechanisms, honor opt-outs, and not misrepresent plan terms. Automating this without compliance guardrails creates regulatory exposure.
Use `send_email` in `monitored` mode to dispatch appointment reminders, vaccine due notices, and post-visit follow-ups automatically. Staff receive a notification feed without needing to approve each message, keeping throughput high while maintaining visibility.
Route prescription refill and medication pickup notices through `gated_send`. The agent drafts the message with pet name, medication, and refill window pulled from your system; a staff member approves before delivery. `list_pending` surfaces the queue for the front desk to process in batches.
Agents can send check-in confirmations and daily boarding updates autonomously using `monitored` mode. The practice receives a notification log for each send, and the client gets consistent updates without front desk intervention on routine messages.
Use `gated_send` for wellness plan renewal emails. The agent identifies clients with expiring plans, drafts a renewal notice with accurate plan details, and holds for staff approval before sending. This preserves CAN-SPAM compliance review and prevents incorrect pricing in outbound messages.
Use `check_inbox` and `read_email` in `read_only` mode to let an agent classify and summarize incoming client emails — appointment requests, medication questions, boarding inquiries — and route them to the right staff queue without taking any send actions.
import requests
response = requests.post(
"https://api.multimail.dev/send_email",
headers={"Authorization": "Bearer $MULTIMAIL_API_KEY"},
json={
"from": "[email protected]",
"to": "[email protected]",
"subject": "Reminder: Appointment for Biscuit tomorrow at 10:00 AM",
"body": (
"Hi Sarah,\n\n"
"This is a reminder that Biscuit has an appointment with Dr. Patel "
"tomorrow, April 20th at 10:00 AM at Riverside Animal Hospital.\n\n"
"Please arrive 5 minutes early and bring any current medications. "
"Reply to this email or call (555) 234-5678 to reschedule.\n\n"
"See you tomorrow,\nRiverside Animal Hospital"
),
"oversight_mode": "monitored",
"tags": ["appointment-reminder", "patient:biscuit-47821"]
}
)
print(response.json())Dispatch a 24-hour appointment reminder using the MultiMail REST API. The message is sent in `monitored` mode — staff see it in the notification feed but do not need to approve it.
import requests
"cm"># Draft refill notice — held pending staff approval
response = requests.post(
"https://api.multimail.dev/send_email",
headers={"Authorization": "Bearer $MULTIMAIL_API_KEY"},
json={
"from": "[email protected]",
"to": "[email protected]",
"subject": "Prescription refill ready: Apoquel 16mg for Biscuit",
"body": (
"Hi Sarah,\n\n"
"Biscuit&"cm">#039;s prescription for Apoquel 16mg (30-day supply) is ready for pickup "
"at our front desk. This refill was authorized by Dr. Patel on April 18th.\n\n"
"Pickup hours: Mon–Fri 8 AM–6 PM, Sat 9 AM–2 PM.\n\n"
"If you have questions about dosing or side effects, reply here and a staff "
"member will follow up.\n\nRiverside Animal Hospital Pharmacy"
),
"oversight_mode": "gated_send",
"tags": ["prescription", "refill", "patient:biscuit-47821"]
}
)
message_id = response.json()["message_id"]
print(f"Queued for review: {message_id}")
# Fetch pending queue to confirm
pending = requests.get(
"https://api.multimail.dev/list_pending",
headers={"Authorization": "Bearer $MULTIMAIL_API_KEY"}
)
print(pending.json())Draft a prescription refill alert and hold it in the approval queue using `gated_send`. Staff review and release it via `list_pending` or the MultiMail dashboard before it reaches the client.
import requests
base_url = "https://api.multimail.dev"
headers = {"Authorization": "Bearer $MULTIMAIL_API_KEY"}
"cm"># Fetch recent inbound messages
inbox = requests.get(
f"{base_url}/check_inbox",
headers=headers,
params={"mailbox": "[email protected]", "limit": 20, "unread": True}
)
categories = {"appointment": [], "medication": [], "boarding": [], "other": []}
for msg in inbox.json()["messages"]:
detail = requests.get(
f"{base_url}/read_email",
headers=headers,
params={"message_id": msg["message_id"]}
).json()
subject = detail["subject"].lower()
body = detail["body"].lower()
if any(kw in subject + body for kw in ["appointment", "schedule", "book"]):
categories["appointment"].append(msg["message_id"])
elif any(kw in subject + body for kw in ["medication", "prescription", "refill", "apoquel"]):
categories["medication"].append(msg["message_id"])
elif any(kw in subject + body for kw in ["boarding", "kennel", "drop off", "pickup"]):
categories["boarding"].append(msg["message_id"])
else:
categories["other"].append(msg["message_id"])
print(categories)Use `check_inbox` and `read_email` to pull recent inbound messages and classify them by type — appointment request, medication question, boarding inquiry — without taking any send action.
import requests
from datetime import date
response = requests.post(
"https://api.multimail.dev/send_email",
headers={"Authorization": "Bearer $MULTIMAIL_API_KEY"},
json={
"from": "[email protected]",
"to": "[email protected]",
"subject": "Max has checked in at Riverside Animal Hospital Boarding",
"body": (
"Hi James,\n\n"
f"Max checked in to our boarding facility today, {date.today().strftime(&"cm">#039;%B %d')}. "
"He&"cm">#039;s settled in Suite 4B and has been given his evening meal.\n\n"
"Pickup is scheduled for April 23rd after 9:00 AM. We&"cm">#039;ll send a reminder "
"the evening before.\n\n"
"Questions? Reply here or call (555) 234-5678.\n\n"
"The Boarding Team, Riverside Animal Hospital"
),
"oversight_mode": "monitored",
"tags": ["boarding", "check-in", "patient:max-38201"]
}
)
print(response.json())Confirm a pet's boarding check-in with a structured status update. Uses `monitored` mode — sent automatically, logged in the staff notification feed.
| Regulation | Requirement | How MultiMail helps |
|---|---|---|
| State Veterinary Practice Laws | Emails referencing diagnoses, treatment plans, or prescription details must be sent only to the authorized client of record. Some states restrict AI-generated medical communications that could be construed as veterinary advice. | `gated_send` mode holds prescription and treatment-related messages for staff review before delivery. The `tag_email` tool and per-message audit logs record who sent what and when, supporting state licensing board inquiries. |
| CAN-SPAM | Commercial emails — including wellness plan renewals, promotional offers, and service marketing — must include a physical mailing address, clear sender identification, and a functioning opt-out mechanism honored within 10 business days. | MultiMail's outbound send flow preserves message headers and sender identity. Tagging promotional messages separately (e.g., `wellness-promo`) lets you filter audit logs and verify opt-out compliance per campaign. |
| CCPA | California clients have the right to know what personal data is collected and to request deletion. Pet health records, payment history, and contact information referenced in email content are covered. Data shared with third-party AI services during email drafting may constitute a sale under CCPA. | Email content and metadata stay within your MultiMail tenant and are not shared with third-party training pipelines. `read_email` and `get_thread` retrieve records tied to a specific mailbox, making it straightforward to respond to data access or deletion requests. |
| GDPR | For EU-based clients or practices with EU operations, processing client contact data for automated email requires a lawful basis (typically contract performance or legitimate interest for transactional messages, consent for marketing). Data minimization applies — don't include more medical or personal detail than the message requires. | Oversight modes let you separate transactional sends (lawful basis: contract) from promotional sends (lawful basis: consent) into distinct agent workflows with different approval gates. Audit logs support data processing records required under GDPR Article 30. |
Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a 50-tool MCP server. Formally verified in Lean 4.