X Enterprises
fastify-xadmin

Tenants Routes

Admin tenant management endpoints — list, create, read, update, delete, suspend/activate, plan changes, and settings under /api/admin/tenants.

Tenants Routes

Full tenant lifecycle management. Tenants represent isolated organisations or workspaces within a multi-tenant deployment. Successful writes invalidate the dashboard metrics cache.

Routes

MethodPathPermissionDescription
GET/api/admin/tenantstenants:readList tenants (paginated)
POST/api/admin/tenantstenants:createCreate tenant
GET/api/admin/tenants/:idtenants:readGet tenant (includes userCount)
PUT/api/admin/tenants/:idtenants:updateUpdate tenant
DELETE/api/admin/tenants/:idtenants:deleteDelete tenant
POST/api/admin/tenants/:id/suspendtenants:manageSuspend tenant
POST/api/admin/tenants/:id/activatetenants:manageActivate tenant
PUT/api/admin/tenants/:id/plantenants:manageChange plan
PUT/api/admin/tenants/:id/settingstenants:manageUpdate settings

GET /api/admin/tenants

Paginated tenant list with search, filters, and sorting.

Query Parameters

NameTypeDefaultDescription
pagenumber1Page number (1-indexed).
limitnumberResults per page (1–100).
sortstringOne of name, createdAt, updatedAt, status, plan.
orderstringasc or desc.
searchstringFilter by name or slug (case-insensitive contains).
statusstringFilter by status.
planstringFilter by plan.

Querystring values are type-coerced by JSON Schema validation — ?page=2&limit=20 arrives as numbers.

Response

{
  "success": true,
  "data": [
    { "id": "tnt_abc", "slug": "acme-corp", "name": "Acme Corp", "status": "active", "plan": "pro", "createdAt": "2026-01-15T09:00:00.000Z" }
  ],
  "meta": { "page": 1, "limit": 20, "total": 5, "totalPages": 1 }
}

POST /api/admin/tenants

Create a tenant. Returns 201.

Body Fields

FieldTypeRequiredDescription
namestringYesDisplay name.
slugstringNoURL-safe identifier.
planstringNoPlan name.
planIdstringNoPlan identifier.
settingsobjectNoArbitrary settings object.

New tenants are created with status: "active".


GET /api/admin/tenants/:id

Fetch a single tenant, including a userCount. Returns 404 when the tenant does not exist.


PUT /api/admin/tenants/:id

Update a tenant. Body accepts name, slug, plan, planId, settings (all optional).


DELETE /api/admin/tenants/:id

Permanently delete a tenant. Returns 404 when the tenant does not exist. Response: { "success": true, "data": null }.


POST /api/admin/tenants/:id/suspend

Suspend a tenant. Optional body field reason (string) is stored as suspendedReason. Sets status: "suspended" and suspendedAt.


POST /api/admin/tenants/:id/activate

Re-activate a suspended tenant: sets status: "active" and clears suspendedAt/suspendedReason.


PUT /api/admin/tenants/:id/plan

Change the tenant's plan.

Body Fields

FieldTypeRequiredDescription
planIdstringYesNew plan identifier.

Returns 404 when the tenant does not exist. The response includes previousPlan for display.


PUT /api/admin/tenants/:id/settings

Update tenant settings. Settings are merged with the existing object (including a nested features merge), not replaced.

Body Fields

FieldTypeRequiredDescription
settingsobjectNoSettings to merge.
storageLimitnumberNoStorage limit (integer ≥ 0).
featureFlagsobjectNoMerged into settings.features.

Returns 404 when the tenant does not exist.

AI Context

package: "@xenterprises/fastify-xadmin"
routes:
  - GET /api/admin/tenants — paginated list; query: page, limit (1-100), sort (name/createdAt/updatedAt/status/plan), order, search, status, plan
  - POST /api/admin/tenants — create (name required); 201
  - GET /api/admin/tenants/:id — single tenant + userCount; 404
  - PUT /api/admin/tenants/:id — update name/slug/plan/planId/settings
  - DELETE /api/admin/tenants/:id — permanent delete; 404
  - POST /api/admin/tenants/:id/suspend — body: reason?; sets status suspended
  - POST /api/admin/tenants/:id/activate — clears suspension
  - PUT /api/admin/tenants/:id/plan — body: planId (required); 404
  - PUT /api/admin/tenants/:id/settings — merges settings + featureFlags; storageLimit; 404
permissions: tenants:read/create/update/delete/manage
side-effects: writes audit-log entries; invalidate dashboard metrics cache

See Also

Copyright © 2026