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

Landlord Management

Landlord Management

The landlord module provides a data model and API layer for managing landlord records within your organisation. Landlords are a core stakeholder entity referenced across properties, tenancies, offers, compliance workflows, and the branded landlord portal.

Data Model

Each landlord record is scoped to an organisation (orgId) and optionally to a branch (branchId).

Field Reference

Contact Details

FieldTypeNotes
titlestring (optional)e.g. Mr, Mrs, Dr
firstNamestring (required)Max 100 chars
lastNamestring (required)Max 100 chars
emailstring (required)Used for portal access and communications
phonestring (optional)Primary phone number
altPhonestring (optional)Secondary / alternative phone

Landlord Type

FieldTypeNotes
landlordType"individual" | "company"Defaults to individual
companyNamestring (optional)Required when type is company
companyRegistrationNumberstring (optional)Companies House number

Address

FieldTypeNotes
addressLine1string (optional)
addressLine2string (optional)
citystring (optional)
countystring (optional)
postcodestring (optional)
countrystring (optional)Defaults to GB

Communication Preferences

FieldTypeDefault
preferredContactMethod"email" | "phone" | "post""email"
emailNotificationsEnabledbooleantrue
smsNotificationsEnabledbooleanfalse

Portal Access

FieldTypeDefault
portalAccessEnabledbooleanfalse
portalTokenIdstring (optional)ID of the associated landlordPortalToken

Financial

FieldTypeNotes
bankAccountNamestring (optional)Account name for rent payments
bankSortCodestring (optional)Max 10 chars
bankAccountNumberstring (optional)Max 20 chars
taxReferencestring (optional)UTR or tax reference
isOverseasbooleanMarks landlord as non-UK resident (NRL scheme). Defaults to false

Status & Tracking

FieldTypeNotes
status"active" | "inactive" | "archived"Defaults to active
notesstring (optional)Internal agent notes, max 5,000 chars
managedByUserIdstring (optional)The agent user responsible for this landlord
createdByUserIdstring (optional)User who created the record

API Reference

All procedures are accessed via the landlord tRPC router namespace.

landlord.list

Returns a cursor-paginated list of landlords for the authenticated organisation.

Input

{
  cursor?: string;           // Cursor for pagination
  limit?: number;            // Page size
  search?: string;           // Searches firstName, lastName, email, companyName, postcode
  status?: "active" | "inactive" | "archived";
  landlordType?: "individual" | "company";
  branchId?: string;
  managedByUserId?: string;
}

Returns: Paginated list of landlord records.


landlord.get

Returns a single landlord record by ID, including a count of linked properties.

Input

{
  id: string; // Landlord ID
}

Returns: Landlord record with an additional propertyCount field.

Errors: NOT_FOUND if the landlord does not exist or belongs to a different org.


landlord.create

Creates a new landlord record.

Input

{
  firstName: string;          // Required
  lastName: string;           // Required
  email: string;              // Required, must be a valid email
  title?: string;
  phone?: string;
  altPhone?: string;
  landlordType?: "individual" | "company";  // Default: "individual"
  companyName?: string;
  companyRegistrationNumber?: string;
  addressLine1?: string;
  addressLine2?: string;
  city?: string;
  county?: string;
  postcode?: string;
  country?: string;            // Default: "GB"
  preferredContactMethod?: "email" | "phone" | "post";  // Default: "email"
  emailNotificationsEnabled?: boolean;  // Default: true
  smsNotificationsEnabled?: boolean;   // Default: false
  bankAccountName?: string;
  bankSortCode?: string;
  bankAccountNumber?: string;
  taxReference?: string;
  isOverseas?: boolean;        // Default: false
  notes?: string;
  managedByUserId?: string;
  branchId?: string;
}

Returns: The newly created landlord record. Produces an audit log entry.


landlord.update

Partially updates an existing landlord record. All fields except id are optional.

Input

{
  id: string;                 // Required — landlord to update
  // ... any subset of create fields, plus:
  portalAccessEnabled?: boolean;
  status?: "active" | "inactive" | "archived";
}

Returns: Updated landlord record. Produces an audit log entry.

Notes: Includes an ownership check — the caller must have access to the record within their org.


landlord.archive

Soft-deletes a landlord by setting their status to "archived".

Input

{
  id: string;
}

Returns: Updated landlord record. Produces an audit log entry.


landlord.listProperties

Returns all properties linked to a given landlord.

Input

{
  id: string; // Landlord ID
}

Returns: Array of property records associated with this landlord.


landlord.anonymise

Performs a GDPR data subject erasure request. Replaces all PII fields with redacted placeholder values. Admin-only.

Input

{
  id: string; // Landlord ID
}

Returns: Updated (anonymised) landlord record. Produces an audit log entry.

⚠️ This action is irreversible. All personally identifiable information is permanently overwritten.


Status Lifecycle

active ──► inactive ──► archived
  └──────────────────────►┘

Use landlord.archive to move a landlord to the archived status. To restore an archived landlord, use landlord.update with status: "active" or "inactive".


GDPR Considerations

The landlord.anonymise procedure satisfies GDPR right-to-erasure requests. It is restricted to admin users and replaces PII (name, email, phone, address, financial details) with redacted placeholders while preserving the record shell for referential integrity with linked properties and tenancies.