Skip to content

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.

The People directory with site assignment and asset countpublic/screenshots/tenancy-people.png
  • 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.

A grouping for tenants, so related tenants roll up together — a customer portfolio, a region, a division.

Fields

FieldTypeNotes
namestring · required
slugstringunique; auto-derived from name if omitted
descriptionstring

APIGET/POST /api/tenant-groups, GET/PATCH/DELETE /api/tenant-groups/{id}.

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

FieldTypeNotes
namestring · required
slugstringunique; auto-derived from name if omitted
groupIduuid → Tenant Groupsset null on group delete
descriptionstring

APIGET/POST /api/tenants, GET/PATCH/DELETE /api/tenants/{id}.

The Tenants list grouped by tenant grouppublic/screenshots/tenancy-tenants.png

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

FieldTypeNotes
fullNamestring · required
emailstringunique
phonestring
jobTitlestring
departmentstring
employeeIdstring
siteIduuid → SitesInfrastructure site; set null on site delete
profileIduuid → Profilesunique; links to an Aethers login; set null on profile delete
statusstringdefault active
startDatedate
notesstring

APIGET/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.

Classification for contacts — billing, technical, escalation, and so on.

Fields

FieldTypeNotes
namestring · required
slugstringunique; auto-derived from name if omitted
descriptionstring

APIGET/POST /api/contact-roles, GET/PATCH/DELETE /api/contact-roles/{id}.

A grouping for contacts, so related contacts roll up together.

Fields

FieldTypeNotes
namestring · required
slugstringunique; auto-derived from name if omitted
descriptionstring

APIGET/POST /api/contact-groups, GET/PATCH/DELETE /api/contact-groups/{id}.

The contact records — named people or addresses attached to tenants and other records, optionally grouped and scoped to a tenant.

Fields

FieldTypeNotes
namestring · required
emailstring
phonestring
titlestring
groupIduuid → Contact Groupsset null on group delete
tenantIduuid → Tenantsset null on tenant delete
notesstring

APIGET/POST /api/contacts, GET/PATCH/DELETE /api/contacts/{id}.

The Contacts list with role and tenantpublic/screenshots/tenancy-contacts.png
  • 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}/assets lists open assignments; GET /api/people/{id}/asset-history lists every assignment (with a computed durationDays, open or returned). The People list also embeds a live assetCount of currently-held assets per person.
  • Deleting a person doesn’t delete their assets. Open assignments are unlinked (their personId is set to null) rather than removed, so asset records survive.
  • email is unique on both People and login profiles; a profileId can link to only one person at a time. The API rejects duplicate emails and already-linked profiles with 409.
  • Contacts reference a Contact Group via groupId but the name field 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.