Tenancy
The Tenancy Aether models who work belongs to — the tenants you serve, the contacts inside them, and the people in your own organisation who use Aethers and hold equipment.
public/screenshots/tenancy-people.pngHow it fits together
Section titled “How it fits together”- Tenant Groups → Tenants model the organisations work is attributed to — a customer, a business unit, a department. Many records across other Aethers can be scoped to a tenant.
- Contact Roles and Contact Groups classify and group Contacts — the named points of contact attached to tenants and other records.
- People is your internal directory — the staff who can be assigned assets, with current holdings and a full assignment history.
Modules
Section titled “Modules”Tenant Groups
Section titled “Tenant Groups”A grouping for tenants, so related tenants roll up together — a customer portfolio, a region, a division.
Fields
| Field | Type | Notes |
|---|---|---|
name | string · required | |
slug | string | unique; auto-derived from name if omitted |
description | string |
API — GET/POST /api/tenant-groups, GET/PATCH/DELETE /api/tenant-groups/{id}.
Tenants
Section titled “Tenants”The tenant records — the organisations or business units work is attributed to. Each tenant can belong to a tenant group and anchors contacts and tenant-scoped records.
Fields
| Field | Type | Notes |
|---|---|---|
name | string · required | |
slug | string | unique; auto-derived from name if omitted |
groupId | uuid → Tenant Groups | set null on group delete |
description | string |
API — GET/POST /api/tenants, GET/PATCH/DELETE /api/tenants/{id}.
public/screenshots/tenancy-tenants.pngPeople
Section titled “People”The internal staff directory. Each person can hold assigned assets, exposing their current holdings and full assignment history, and can optionally be linked to an Aethers login profile.
Fields
| Field | Type | Notes |
|---|---|---|
fullName | string · required | |
email | string | unique |
phone | string | |
jobTitle | string | |
department | string | |
employeeId | string | |
siteId | uuid → Sites | Infrastructure site; set null on site delete |
profileId | uuid → Profiles | unique; links to an Aethers login; set null on profile delete |
status | string | default active |
startDate | date | |
notes | string |
API — GET/POST /api/people, GET/PATCH/DELETE /api/people/{id}, plus
GET /api/people/{id}/assets and GET /api/people/{id}/asset-history.
Notes — the People list is a bespoke handler: GET /api/people accepts
search, status, site, and department filters and returns { data }
(each person carrying a live assetCount), rather than the paginated envelope
the other resources use.
Contact Roles
Section titled “Contact Roles”Classification for contacts — billing, technical, escalation, and so on.
Fields
| Field | Type | Notes |
|---|---|---|
name | string · required | |
slug | string | unique; auto-derived from name if omitted |
description | string |
API — GET/POST /api/contact-roles, GET/PATCH/DELETE /api/contact-roles/{id}.
Contact Groups
Section titled “Contact Groups”A grouping for contacts, so related contacts roll up together.
Fields
| Field | Type | Notes |
|---|---|---|
name | string · required | |
slug | string | unique; auto-derived from name if omitted |
description | string |
API — GET/POST /api/contact-groups, GET/PATCH/DELETE /api/contact-groups/{id}.
Contacts
Section titled “Contacts”The contact records — named people or addresses attached to tenants and other records, optionally grouped and scoped to a tenant.
Fields
| Field | Type | Notes |
|---|---|---|
name | string · required | |
email | string | |
phone | string | |
title | string | |
groupId | uuid → Contact Groups | set null on group delete |
tenantId | uuid → Tenants | set null on tenant delete |
notes | string |
API — GET/POST /api/contacts, GET/PATCH/DELETE /api/contacts/{id}.
public/screenshots/tenancy-contacts.pngGood to know
Section titled “Good to know”- People is the asset-assignment anchor. It’s wired into the Inventory
Aether: assets are assigned to and returned from a person, and each person’s
record surfaces what they currently hold plus the full history.
GET /api/people/{id}/assetslists open assignments;GET /api/people/{id}/asset-historylists every assignment (with a computeddurationDays, open or returned). The People list also embeds a liveassetCountof currently-held assets per person. - Deleting a person doesn’t delete their assets. Open assignments are
unlinked (their
personIdis set to null) rather than removed, so asset records survive. emailis unique on both People and login profiles; aprofileIdcan link to only one person at a time. The API rejects duplicate emails and already-linked profiles with409.- Contacts reference a Contact Group via
groupIdbut thenamefield of Contact Roles is not yet a foreign-key column on the contact — roles classify contacts conceptually rather than via a stored FK today.
Beyond /api/people, resources are exposed under /api/tenant-groups,
/api/tenants, /api/contact-roles, /api/contact-groups, and /api/contacts
— see the API reference.