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
cURL (With Pagination)
cURL (With Search)
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:
Parameter Type Description pagenumber Pagination page number perPagenumber Items per page (0 or omit = return all) searchTextstring Search 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 (Simple)
cURL (With Sub-Assets)
cURL (As Child of Existing Asset)
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:
Field Type Required Description namestring Yes Asset name descriptionstring No Detailed description modelstring No Model number/name serialNumberstring No Serial number purchaseDatestring No Purchase date (ISO 8601) LocationIdUUID No Location where asset is installed ParentIdUUID No Parent asset ID (for sub-assets) SubAssetsobject No Nested sub-assets structure attachmentsstring[] No URLs to attached documents isQREnableboolean No Enable 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 (All Services)
cURL (Filter by Asset)
cURL (Filter by Status)
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:
Field Type Description filters.assetstring[] Filter by asset IDs filters.statusstring Filter by status: "upcoming", "overdue", "completed" sortarray Sort criteria offsetnumber Skip N records (default: 0) limitnumber Max 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:
Field Type Required Description assetIdstring Yes Asset this service is for titlestring Yes Service title descriptionstring No Detailed service description datestring Yes Scheduled service date (ISO 8601) reminderobject No Reminder configuration reminder.enabledboolean No Enable reminder notifications reminder.daysBeforenumber No Days before service to send reminder isCompletedboolean No Mark as already completed costnumber No Service 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:
Field Type Required Description costnumber No Total service cost commentstring No Completion 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
Use hierarchical assets for complex equipment
Break down complex systems into parent/child assets. This enables granular maintenance tracking and makes it easier to identify which component needs service.
Include model and serial numbers
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.
Enable QR codes for field access
Set isQREnable: true for assets that field workers need to quickly identify. They can scan the QR to pull up asset details and history.
Schedule recurring services
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.