Skip to main content
All Docs
FeaturesPurple PepperUpdated April 7, 2026

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

  1. Open the Tenancy Overview for the relevant tenancy
  2. Click "Send Renewal Notice" — available in:
    • The header action bar (top of the overview)
    • The Renewals tab (alongside "Start New Renewal")
  3. In the dialog, select the recipients:
    • Landlord only
    • Tenant only
    • Both (default — requires both parties to have email addresses)
  4. Review the property address and term end date shown in the dialog summary
  5. Optionally review previous delivery history (timestamps of prior notices sent to each recipient)
  6. Click "Send Notice" to dispatch the emails
  7. 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:

LocationDisplay
Tenancy headerNoticeStatusBadge shown inline next to the tenancy status badge
Renewals tabRenewalNoticeStatus 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 events
  • renewalNotificationSend — 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:

  • orgId
  • tenancyTermId
  • recipientType (landlord or tenant)
  • email address used
  • success status
  • timestamp

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
  };
}