Renewal Notice Delivery
Renewal Notice Delivery
Agents can send branded renewal notice emails to landlords, tenants, or both directly from the tenancy overview. Delivery status is tracked per recipient and surfaced inline throughout the UI.
Overview
The renewal notice workflow is a communication step that precedes actioning a renewal type. It ensures all parties are informed about an upcoming renewal decision before any changes to tenancy terms are made.
Sending a Renewal Notice
Prerequisites
- The tenancy must be in active or expiring status
- At least one of the landlord or tenant must have an email address configured on the tenancy term
Steps
- Open the Tenancy Overview for the relevant tenancy
- Click "Send Renewal Notice" — available in:
- The header action bar (top of the overview)
- The Renewals tab (alongside "Start New Renewal")
- In the dialog, select the recipients:
- Landlord only
- Tenant only
- Both (default — requires both parties to have email addresses)
- Review the property address and term end date shown in the dialog summary
- Optionally review previous delivery history (timestamps of prior notices sent to each recipient)
- Click "Send Notice" to dispatch the emails
- The dialog displays a per-recipient result (Sent / Failed) immediately after submission
Missing Email Addresses
If a recipient does not have an email address configured, the system automatically adjusts:
- If only one party has an email, the recipient selection defaults to that party
- If neither party has an email, the dialog shows a warning and prevents sending — update the tenancy term details before retrying
Delivery Status
Once a notice has been sent, delivery status is visible in two places:
| Location | Display |
|---|---|
| Tenancy header | NoticeStatusBadge shown inline next to the tenancy status badge |
| Renewals tab | RenewalNoticeStatus component showing per-recipient last-sent timestamps |
Automated Background Scanning
In addition to manual sends, two background jobs run automatically:
renewalNotificationScan— a daily cron job that scans for tenancies approaching renewal and triggers notice eventsrenewalNotificationSend— an event-driven job that processes and delivers individual notices
These jobs operate independently of manual sends and use the same delivery and tracking infrastructure.
Audit Trail
Every notice send — whether manual or automated — is recorded in the renewal_notifications table. Each record includes:
orgIdtenancyTermIdrecipientType(landlordortenant)emailaddress usedsuccessstatustimestamp
A corresponding audit log entry is also created with full send metadata.
API Reference
The renewal notice functionality is exposed via two tRPC procedures under the renewalNotification router.
renewalNotification.sendNotice
Sends renewal notice emails for a given tenancy term.
Input
{
tenancyTermId: string; // ID of the tenancy term
recipients: "landlord" | "tenant" | "both"; // Who to notify
notificationType: "agent_manual" | string; // Trigger type
}
Output
{
success: boolean;
allDelivered: boolean;
message: string;
results: Array<{
recipientType: "landlord" | "tenant";
success: boolean;
error?: string;
}>;
}
renewalNotification.getNoticeStatus
Returns the current delivery status for each recipient on a tenancy term.
Input
{
tenancyTermId: string;
}
Output
{
landlord: {
lastSentAt: string | null; // ISO timestamp of last successful send
email: string | null;
// attempt history included
};
tenant: {
lastSentAt: string | null;
email: string | null;
// attempt history included
};
}