MaintainX Core Workflow B: Asset & Location Management

SkillDev tools

'Execute MaintainX secondary workflow: Asset and Location management.

Use MaintainX Core Workflow B: Asset & Location Management in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add MaintainX Core Workflow B: Asset & Location Management and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the MaintainX Core Workflow B: Asset & Location Management skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

MaintainX Core Workflow B: Asset & Location ManagementStart free

What this skill tells your AI

The instructions your AI receives, as published by jeremylongshore/tons-of-skills-marketplace in skills/.curated/maintainx-core-workflow-b/SKILL.md and read by Ahel’s review.

Overview

Manage equipment assets and facility locations in MaintainX. Assets represent equipment that requires maintenance; locations organize your facilities into a manageable hierarchy.

Prerequisites

  • Completed maintainx-install-auth setup
  • MAINTAINX_API_KEY environment variable configured
  • MaintainX account with asset management permissions

Instructions

Step 1: Create a Location Hierarchy

import { MaintainXClient } from './maintainx/client';

const client = new MaintainXClient();

// Create top-level facility
const { data: plant } = await client.request('POST', '/locations', {
  name: 'Manufacturing Plant - Austin',
  description: 'Main production facility',
  address: '1234 Industrial Blvd, Austin, TX 78701',
});

// Create sub-locations
const { data: floor } = await client.request('POST', '/locations', {
  name: 'Production Floor - Building A',
  parentId: plant.id,
  description: 'Primary manufacturing area with 12 production lines',
});

const { data: mechRoom } = await client.request('POST', '/locations', {
  name: 'Mechanical Room - B2',
  parentId: plant.id,
  description: 'Pumps, compressors, and HVAC equipment',
});

console.log(`Location hierarchy created: ${plant.id} → ${floor.id}, ${mechRoom.id}`);

Step 2: Register Assets

// Create an asset linked to a location
const { data: pump } = await client.request('POST', '/assets', {
  name: 'Centrifugal Pump #3',
  description: 'Grundfos CR 45-2, 15HP, installed 2023',
  locationId: mechRoom.id,
  serialNumber: 'GF-CR45-2-00891',
  model: 'CR 45-2',
  manufacturer: 'Grundfos',
});

const { data: conveyor } = await client.request('POST', '/assets', {
  name: 'Conveyor Belt - Line 7',
  description: 'Main assembly line conveyor, 120ft span',
  locationId: floor.id,
  serialNumber: 'DRV-CONV-7-2024',
  model: 'Heavy Duty BD-120',
  manufacturer: 'Dorner',
});

console.log(`Assets registered: Pump #${pump.id}, Conveyor #${conveyor.id}`);

Step 3: List and Filter Assets

// Get all assets at a location
const { data: locationAssets } = await client.getAssets({
  locationId: mechRoom.id,
  limit: 50,
});

for (const asset of locationAssets.assets) {
  console.log(`  ${asset.name} (SN: ${asset.serialNumber || 'N/A'})`);
}

// Paginate through all assets
async function getAllAssets() {
  const all = [];
  let cursor: string | undefined;
  do {
    const { data } = await client.getAssets({ limit: 100, cursor });
    all.push(...data.assets);
    cursor = data.cursor;
  } while (cursor);
  return all;
}

const allAssets = await getAllAssets();
console.log(`Total assets: ${allAssets.length}`);

Step 4: Query Locations

// Get all locations (flat list)
const { data: locations } = await client.getLocations({ limit: 100 });

// Build a tree structure from flat list
function buildTree(locations: any[]) {
  const map = new Map();
  const roots: any[] = [];

  for (const loc of locations) {
    map.set(loc.id, { ...loc, children: [] });
  }
  for (const loc of locations) {
    const node = map.get(loc.id);
    if (loc.parentId && map.has(loc.parentId)) {
      map.get(loc.parentId).children.push(node);
    } else {
      roots.push(node);
    }
  }
  return roots;
}

const tree = buildTree(locations.locations);
console.log(JSON.stringify(tree, null, 2));

Step 5: Create Work Orders Linked to Assets

// Corrective maintenance on a specific asset
const { data: wo } = await client.createWorkOrder({
  title: 'Centrifugal Pump #3 - Bearing Noise',
  description: 'Unusual grinding noise detected during morning inspection.',
  priority: 'HIGH',
  assetId: pump.id,
  locationId: mechRoom.id,
  categories: ['CORRECTIVE'],
});

console.log(`Work order #${wo.id} linked to asset ${pump.id}`);

Output

  • Location hierarchy created with parent-child relationships
  • Assets registered with serial numbers, models, and location links
  • Paginated asset and location queries
  • Work orders linked to specific assets and locations

Error Handling

ErrorCauseSolution
404 Not FoundInvalid asset or location IDVerify ID exists with a GET request first
400 Bad RequestMissing name fieldAssets and locations require at least name
409 ConflictDuplicate serial numberUse unique serial numbers per asset
Empty resultsWrong filter or no dataCheck query parameters, try without filters

Resources

Next Steps

For troubleshooting common issues, see maintainx-common-errors.

Examples

Bulk import assets from CSV:

import { parse } from 'csv-parse/sync';
import { readFileSync } from 'fs';

const csv = readFileSync('assets.csv', 'utf-8');
const rows = parse(csv, { columns: true });

for (const row of rows) {
  await client.request('POST', '/assets', {
    name: row.name,
    serialNumber: row.serial_number,
    locationId: parseInt(row.location_id),
    model: row.model,
    manufacturer: row.manufacturer,
  });
  console.log(`Imported: ${row.name}`);
}

Get maintenance history for an asset:

# Fetch all work orders linked to a specific asset
curl -s "https://api.getmaintainx.com/v1/workorders?assetId=98765&limit=50" \
  -H "Authorization: Bearer $MAINTAINX_API_KEY" \
  | jq '.workOrders[] | {id, title, status, completedAt}'

Signals

GitHub stars
3k
Forks
415
Last commit
Oct 2026
Advanced
Item type
skill
Key
maintainx-core-workflow-b
Source
github.com/jeremylongshore/tons-of-skills-marketplace