Skip to main content

Overview

Xenia’s asset management system allows you to track equipment, machinery, and other physical assets across your locations. Key features include:
  • Hierarchical assets: Create parent-child relationships (e.g., HVAC System → Compressor → Filter)
  • Location binding: Associate assets with specific locations
  • Service tracking: Schedule and record maintenance activities
  • QR codes: Enable quick asset identification via QR scanning
  • Task integration: Link tasks to specific assets for maintenance workflows

Asset CRUD Operations

List All Assets

Retrieve assets with optional filtering and pagination.
curl -X GET "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}"
Query Parameters:
ParameterTypeDescription
pagenumberPagination page number
perPagenumberItems per page (0 or omit = return all)
searchTextstringSearch filter for asset name/description
Response:
{
  "status": "success",
  "code": 200,
  "data": {
    "assets": [
      {
        "id": "asset-uuid-1",
        "name": "HVAC Unit #1",
        "description": "Main building HVAC system",
        "model": "Carrier 24ACC636A003",
        "serialNumber": "SN-2024-001234",
        "purchaseDate": "2022-03-15",
        "LocationId": "location-uuid",
        "Location": {
          "id": "location-uuid",
          "name": "Building A - Roof"
        },
        "ParentId": null,
        "isQREnable": true,
        "attachments": ["https://storage.example.com/manual.pdf"],
        "createdAt": "2022-03-20T10:00:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "perPage": 50,
      "total": 127,
      "totalPages": 3
    }
  }
}

List Assets by Location

Get all assets at a specific location.
curl -X GET "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/locations/{locationId}/assets" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}"

List Assets with Location Filter (POST)

Filter assets by multiple locations.
curl -X POST "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/list" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}" \
  -H "Content-Type: application/json" \
  -d '{
    "locations": ["location-uuid-1", "location-uuid-2"]
  }'

Get Asset by ID

Retrieve detailed information about a specific asset.
curl -X GET "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/{assetId}" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}"
Response:
{
  "status": "success",
  "code": 200,
  "data": {
    "id": "asset-uuid",
    "name": "HVAC Unit #1",
    "description": "Main building HVAC system - Rooftop unit serving floors 1-5",
    "model": "Carrier 24ACC636A003",
    "serialNumber": "SN-2024-001234",
    "purchaseDate": "2022-03-15",
    "LocationId": "location-uuid",
    "Location": {
      "id": "location-uuid",
      "name": "Building A - Roof"
    },
    "ParentId": null,
    "SubAssets": [
      {
        "id": "sub-asset-1",
        "name": "Compressor",
        "model": "Copeland ZR57K3E"
      },
      {
        "id": "sub-asset-2",
        "name": "Air Filter",
        "model": "MERV-13 24x24x2"
      }
    ],
    "isQREnable": true,
    "avatar": "https://storage.example.com/hvac-photo.jpg",
    "attachments": [
      "https://storage.example.com/installation-manual.pdf",
      "https://storage.example.com/warranty.pdf"
    ],
    "createdAt": "2022-03-20T10:00:00Z",
    "updatedAt": "2024-06-15T14:30:00Z"
  }
}

Create Asset

Create a new asset with optional sub-assets.
curl -X POST "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Industrial Refrigerator",
    "description": "Walk-in cooler for kitchen storage",
    "model": "True TWT-48SD",
    "serialNumber": "TWT48-2024-5678",
    "purchaseDate": "2024-01-10",
    "LocationId": "kitchen-location-uuid",
    "isQREnable": true
  }'
Request Body:
FieldTypeRequiredDescription
namestringYesAsset name
descriptionstringNoDetailed description
modelstringNoModel number/name
serialNumberstringNoSerial number
purchaseDatestringNoPurchase date (ISO 8601)
LocationIdUUIDNoLocation where asset is installed
ParentIdUUIDNoParent asset ID (for sub-assets)
SubAssetsobjectNoNested sub-assets structure
attachmentsstring[]NoURLs to attached documents
isQREnablebooleanNoEnable QR code for this asset
Permission Required: CAN_MANAGE_ASSETS
Asset creation may be limited by your subscription plan. Contact support if you receive a paywall error.

Update Asset

Modify an existing asset’s details.
curl -X PATCH "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/{assetId}" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "HVAC Unit #1 (Primary)",
    "description": "Updated description with maintenance notes",
    "LocationId": "new-location-uuid"
  }'

Delete Assets

Delete one or more assets.
curl -X DELETE "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}" \
  -H "Content-Type: application/json" \
  -d '{
    "assetIds": ["asset-uuid-1", "asset-uuid-2"]
  }'
Deleting a parent asset will also delete all sub-assets in its hierarchy.

Asset Tasks

Get all tasks associated with an asset.
curl -X GET "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/{assetId}/tasks" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}"
Response:
{
  "status": "success",
  "code": 200,
  "data": [
    {
      "id": "task-uuid-1",
      "title": "Monthly HVAC Filter Replacement",
      "status": "Open",
      "dueDate": "2024-12-31T17:00:00Z",
      "assignees": [
        { "id": "user-uuid", "fullName": "John Smith" }
      ]
    },
    {
      "id": "task-uuid-2",
      "title": "Annual HVAC Inspection",
      "status": "Completed",
      "dueDate": "2024-06-15T17:00:00Z"
    }
  ]
}

Asset Services (Maintenance Tracking)

Track scheduled maintenance, service history, and costs for your assets.
Feature Required: Asset services require the ASSET_SERVICE feature to be enabled for your workspace.

List Asset Services

Retrieve services with filtering and pagination.
curl -X POST "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/services/list" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}" \
  -H "Content-Type: application/json" \
  -d '{
    "offset": 0,
    "limit": 100
  }'
Request Body:
FieldTypeDescription
filters.assetstring[]Filter by asset IDs
filters.statusstringFilter by status: "upcoming", "overdue", "completed"
sortarraySort criteria
offsetnumberSkip N records (default: 0)
limitnumberMax records to return (default: 100)
Response:
{
  "status": "success",
  "code": 200,
  "data": {
    "services": [
      {
        "id": "service-uuid-1",
        "title": "Quarterly Filter Replacement",
        "description": "Replace MERV-13 filters",
        "date": "2024-12-15T10:00:00Z",
        "isCompleted": false,
        "cost": null,
        "Asset": {
          "id": "asset-uuid",
          "name": "HVAC Unit #1"
        },
        "reminder": {
          "enabled": true,
          "daysBefore": 7
        }
      }
    ],
    "counts": {
      "upcoming": 5,
      "overdue": 2,
      "completed": 48
    }
  }
}

Get Service by ID

curl -X GET "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/services/{serviceId}" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}"

Create Asset Service

Schedule a new maintenance service.
curl -X POST "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/services" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}" \
  -H "Content-Type: application/json" \
  -d '{
    "assetId": "asset-uuid",
    "title": "Annual Compressor Inspection",
    "description": "Full inspection of compressor unit including refrigerant levels, electrical connections, and performance test",
    "date": "2025-03-15T09:00:00Z",
    "reminder": {
      "enabled": true,
      "daysBefore": 14
    }
  }'
Request Body:
FieldTypeRequiredDescription
assetIdstringYesAsset this service is for
titlestringYesService title
descriptionstringNoDetailed service description
datestringYesScheduled service date (ISO 8601)
reminderobjectNoReminder configuration
reminder.enabledbooleanNoEnable reminder notifications
reminder.daysBeforenumberNoDays before service to send reminder
isCompletedbooleanNoMark as already completed
costnumberNoService cost (if completed)
Response:
{
  "status": "success",
  "code": 200,
  "data": {
    "id": "new-service-uuid",
    "title": "Annual Compressor Inspection",
    "date": "2025-03-15T09:00:00Z",
    "isCompleted": false,
    "AssetId": "asset-uuid"
  }
}

Update Asset Service

Modify a scheduled service.
curl -X PATCH "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/services/{serviceId}" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Annual Compressor Inspection (Rescheduled)",
    "date": "2025-04-01T09:00:00Z",
    "description": "Rescheduled due to parts availability"
  }'

Complete Asset Service

Mark a service as completed with optional cost and comments.
curl -X PATCH "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/services/{serviceId}/complete" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}" \
  -H "Content-Type: application/json" \
  -d '{
    "cost": 450.00,
    "comment": "Replaced capacitor, recharged refrigerant to spec. System operating normally."
  }'
Request Body:
FieldTypeRequiredDescription
costnumberNoTotal service cost
commentstringNoCompletion notes/comments

Delete Asset Service

curl -X DELETE "https://api.xenia.team/api/v1/mgt/workspaces/{workspaceId}/assets/services/{serviceId}" \
  -H "x-client-key: YOUR_CLIENT_KEY" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -H "workspace-id: {workspaceId}"

Common Workflows

Importing Assets from CMMS/EAM

Example Integration:
# Step 1: Create parent asset
PARENT_ID=$(curl -X POST ".../assets" \
  -d '{
    "name": "Chiller System #1",
    "model": "Trane CVHE",
    "serialNumber": "CVHE-2020-1234",
    "LocationId": "mechanical-room-uuid"
  }' | jq -r '.data.id')

# Step 2: Create child assets
curl -X POST ".../assets" \
  -d "{
    \"name\": \"Chiller Compressor\",
    \"model\": \"Trane CHHP\",
    \"ParentId\": \"${PARENT_ID}\"
  }"

# Step 3: Schedule maintenance
curl -X POST ".../assets/services" \
  -d "{
    \"assetId\": \"${PARENT_ID}\",
    \"title\": \"Annual Chiller Inspection\",
    \"date\": \"2025-06-01T08:00:00Z\",
    \"reminder\": {\"enabled\": true, \"daysBefore\": 30}
  }"

Tracking Maintenance Costs

# Get all completed services for cost analysis
curl -X POST ".../assets/services/list" \
  -d '{
    "filters": {
      "status": "completed"
    },
    "limit": 1000
  }'

# Sum costs by asset for reporting
# Response includes cost field for each completed service

Asset Lifecycle Management

# 1. Create asset when purchased
curl -X POST ".../assets" \
  -d '{
    "name": "New Equipment",
    "purchaseDate": "2024-12-01",
    "model": "Model XYZ"
  }'

# 2. Schedule initial services
curl -X POST ".../assets/services" \
  -d '{
    "assetId": "asset-uuid",
    "title": "Initial Setup & Calibration",
    "date": "2024-12-15T09:00:00Z"
  }'

# 3. Track ongoing maintenance via services
# 4. When asset is retired, delete it
curl -X DELETE ".../assets" \
  -d '{"assetIds": ["asset-uuid"]}'

Best Practices

Break down complex systems into parent/child assets. This enables granular maintenance tracking and makes it easier to identify which component needs service.
Always populate model and serialNumber fields. This helps with warranty claims, parts ordering, and maintenance documentation.
Use the attachments field to link manuals, warranty documents, and installation guides directly to assets.
Set isQREnable: true for assets that field workers need to quickly identify. They can scan the QR to pull up asset details and history.
Create service records for all planned maintenance. Use reminders to ensure nothing is missed.
Always record cost when completing services. This data enables total cost of ownership analysis and budget planning.