AI generates custom offer letters from approved templates. HR verifies compensation, terms, and attachments before delivery to the candidate.
Offer letters with incorrect compensation, wrong start dates, or missing benefits information create legal liability and damage candidate trust. But delays in sending offers risk losing top candidates to competing offers. HR teams need to move fast while ensuring every detail is accurate — a tension that manual processes handle poorly.
MultiMail's AI agent generates offer letters from approved templates, populating them with the candidate's specific compensation, role details, and start date. It drafts a professional cover email and attaches the complete offer package. Gated_all oversight ensures HR reviews every element — compensation numbers, equity details, benefits summary, and e-signature links — before the candidate sees anything.
When the hiring team approves extending an offer, your AI agent receives the offer details: compensation, equity, start date, role, reporting structure, and benefits tier.
The agent populates your approved offer letter template with the candidate-specific details and generates a professional PDF document.
The AI composes a warm, professional cover email that congratulates the candidate, highlights key offer points, and includes e-signature and response deadline information.
Under gated_all oversight, the complete package — cover email, offer letter PDF, and any supplemental documents — enters the review queue. HR verifies every detail before approving delivery.
import requests
API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}
def send_offer_letter(candidate: dict, offer: dict):
"cm"># Generate offer letter PDF from template
offer_pdf = generate_offer_pdf(candidate, offer)
cover_email = (
f"Dear {candidate[&"cm">#039;name']},\n\n"
f"We are thrilled to extend an offer for the "
f"{offer[&"cm">#039;role']} position at {offer['company']}!\n\n"
f"Key highlights:\n"
f" Base salary: ${offer[&"cm">#039;base_salary']:,}\n"
f" Start date: {offer[&"cm">#039;start_date']}\n"
f" Reporting to: {offer[&"cm">#039;manager_name']}\n\n"
f"Please find your formal offer letter attached. "
f"We&"cm">#039;d appreciate your response by {offer['deadline']}.\n\n"
f"Sign here: {offer[&"cm">#039;esign_url']}\n\n"
f"We&"cm">#039;re excited about the possibility of you joining "
f"the team. Don&"cm">#039;t hesitate to reach out with questions."
)
# Queued for full HR review
response = requests.post(
f"{API}/send",
headers=HEADERS,
json={
"from": "[email protected]",
"to": candidate["email"],
"subject": f"Offer letter: {offer[&"cm">#039;role']} at {offer['company']}",
"text_body": cover_email,
"html_body": build_offer_html(candidate, offer)
}
)
print(f"Offer queued for HR review: {response.json()[&"cm">#039;id']}")Create a custom offer letter and deliver it with a professional cover email.
import requests
API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}
def track_offer_response(candidate_email: str):
"cm"># Check for candidate reply
inbox = requests.get(
f"{API}/mailboxes/hr-mailbox-id/inbox",
headers=HEADERS,
params={"from": candidate_email, "status": "unread"}
).json()
for msg in inbox["emails"]:
email = requests.get(
f"{API}/emails/{msg[&"cm">#039;id']}", headers=HEADERS
).json()
# Classify response
response_type = classify_offer_response(email["text_body"])
requests.post(
f"{API}/emails/{email[&"cm">#039;id']}/tags",
headers=HEADERS,
json={"tags": [f"offer-{response_type}"]}
)
if response_type == "question":
# Draft response to candidate question
draft_answer(email)
elif response_type == "negotiation":
"cm"># Flag for hiring manager review
escalate_to_hiring_manager(email)Monitor for candidate responses and track offer acceptance.
"cm">// Using MultiMail MCP tools for offer letter delivery
async function deliverOfferLetter(
candidate: Candidate,
offer: OfferDetails
) {
"cm">// Send offer (queued for full HR review under gated_all)
await mcp.send_email({
to: candidate.email,
subject: `Offer letter: ${offer.role} at ${offer.company}`,
text_body: [
`Dear ${candidate.name},`,
``,
`We're thrilled to offer you the ${offer.role} position!`,
``,
` Base salary: $${offer.baseSalary.toLocaleString()}`,
` Start date: ${offer.startDate}`,
` Manager: ${offer.managerName}`,
``,
`Please review the attached offer letter.`,
`Sign here: ${offer.esignUrl}`,
`Response deadline: ${offer.deadline}`
].join("\n")
});
"cm">// Track candidate in contacts
await mcp.add_contact({
email: candidate.email,
name: candidate.name,
metadata: {
role: offer.role,
stage: "offer-extended",
offer_date: new Date().toISOString(),
deadline: offer.deadline
}
});
}Deliver offer letters using MultiMail MCP tools.
AI generates the offer letter and cover email in minutes. HR only needs to review and approve, cutting turnaround from days to hours.
Gated_all oversight ensures HR verifies every number — base salary, equity, bonus, benefits — before the candidate sees the offer. No more embarrassing corrections.
A polished, timely offer letter with clear terms and e-signature links shows candidates you run a tight operation. First impressions of the company start here.
Every offer letter, review, and candidate communication is logged. When questions arise about what was offered, you have the definitive record.
Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a 38-tool MCP server. Formally verified in Lean 4.