csrf_token — obtain one from GET /api/security/csrf-token.
Tenant contact fields (
tenant_name, tenant_email, tenant_number_primary, tenant_number_work) are encrypted at rest using XSalsa20-Poly1305. They are transparently decrypted in API responses. A plaintext search index is maintained alongside encrypted data to support name-based searches without decrypting every row.Tenants
List tenants
GET /api/tenants/manage?action=list
Returns a paginated list of tenant records.
Required permission: api.tenants.manage.manage
Must be
list.Search by tenant name.
Filter tenants assigned to a specific property address.
true returns only active tenants; false returns inactive.Set to
true to return tenants not currently assigned to a property.Maximum records to return (max 200).
Number of records to skip.
Get a single tenant
GET /api/tenants/manage?action=get&uuid=<uuid>
Must be
get.Tenant UUID.
Create a tenant
POST /api/tenants/manage
Required permission: api.tenants.manage.manage
Full name of the tenant. Encrypted at rest.
Tenant email address. Encrypted at rest.
Primary phone number. Encrypted at rest.
Work phone number. Encrypted at rest.
ID of the property address to assign the tenant to.
CSRF token.
Update a tenant
PUT /api/tenants/manage
Update one or more fields on an existing tenant record.
UUID of the tenant to update.
CSRF token.
Delete a tenant
DELETE /api/tenants/manage
Removes a tenant record. Before deleting, confirm the tenant has no active job associations.
UUID of the tenant to delete.
CSRF token.
GDPR Data Export
This endpoint satisfies the UK GDPR right of access (Article 15 UK GDPR, Data Protection Act 2018). Use it when a tenant submits a Subject Access Request (SAR). The export includes all personal data held for that individual. Every call is recorded in the audit trail.
Export GDPR report
GET /api/tenants/gdpr-report
Exports a complete, portable report of all personal data held for a tenant. The response includes data from every relevant table — contact details, addresses, job history, case note references, consent records, and activity logs.
Required permission: api.tenants.gdpr_report.view (staff only)
UUID of the tenant to export data for.
GDPR Consent
Record consent
POST /api/gdpr/consent
Records a versioned consent entry. Use this when a tenant or landlord accepts your terms of service, privacy policy, or a specific data processing activity. Each entry stores a timestamp, the policy version, and an IP fingerprint.
UUID of the user giving consent.
The type of consent being recorded (e.g.
privacy_policy, terms_of_service, marketing).The version of the document being consented to (e.g.
1.2).CSRF token.
Retrieve consent records
GET /api/gdpr/consent
Returns all consent records for a user, ordered by most recent first. Useful for auditing and subject access responses.
Required permission: Staff account required.
UUID of the user whose consent records to retrieve.
Tenant List (Lightweight)
The/api/tenants/list endpoint is a lighter-weight alternative to /api/tenants/manage designed for dropdown population and job assignment workflows. It returns the same tenant data with support for list, get, and create actions.
List tenants for assignment
GET /api/tenants/list?action=list
Returns tenants suitable for assignment to jobs or addresses. Supports filtering by address, search term, active state, and unassigned status.
Required permission: api.tenants.list.manage
Must be
list.Search by tenant name, email, or phone number.
Filter tenants assigned to a specific address. Also includes unassigned tenants in the results.
Set to
true to return only tenants not currently assigned to any address.1 for active tenants, 0 for inactive.Maximum records to return (max 1000).
Number of records to skip.
Get a tenant by ID
GET /api/tenants/list?action=get&id=<id>
Returns a single tenant record by numeric ID.
Required permission: api.tenants.list.manage
Must be
get.Numeric ID of the tenant to retrieve.
Create a tenant (lightweight)
POST /api/tenants/list with action=create
Creates a new tenant record. Equivalent to POST /api/tenants/manage but routed through the list endpoint.
Required permission: api.tenants.list.manageRequires CSRF token.
Must be
create.Full name of the tenant. Encrypted at rest.
Email address. Encrypted at rest.
Primary phone number. Encrypted at rest.
Work phone number. Encrypted at rest.
ID of the property address to assign the tenant to.
CSRF token from
GET /api/security/csrf-token.Assign Address
Assign a tenant to an address
POST /api/tenants/assign-address
Assigns or moves a tenant to a specific property address. Updates the tenant’s tenant_address_id field. If the tenant was previously assigned to another address, this replaces that assignment.
Required permission: api.tenants.assign_address.manageRequires CSRF token.
Numeric ID of the tenant to reassign.
Numeric ID of the target property address.
CSRF token from
GET /api/security/csrf-token.