Skip to content

Assets ​

Manage your asset register with the de.iterate SDK.

Overview ​

The assets resource provides operations for managing your organization's asset inventory, including hardware, software, data, and other information assets.

List Assets ​

typescript
// List all assets
const response = await client.assets.list();
console.log(response.data);

// Filter by status
const activeAssets = await client.assets.list({
  filter: { status: 'Active' }
});

// Filter by category
const dataAssets = await client.assets.list({
  filter: { assetCat: 'Data' }
});

Response Example ​

json
{
  "data": [
    {
      "id": "AST-001",
      "type": "asset",
      "assetDesc": "Customer Database",
      "assetCat": "Data",
      "assetOwner": "john.doe",
      "assetCriticality": "Critical",
      "assetRisk": "High",
      "status": "Active",
      "nextReviewDate": "2025-06-01T00:00:00Z",
      "createdAt": "2024-01-15T10:30:00Z",
      "updatedAt": "2024-12-20T14:22:00Z"
    }
  ],
  "meta": {
    "totalCount": 156,
    "pageCount": 1,
    "currentPage": 1,
    "perPage": 156
  }
}

Get Asset ​

typescript
const asset = await client.assets.get('AST-001');

console.log(asset.assetDesc);      // "Customer Database"
console.log(asset.assetCat);       // "Data"
console.log(asset.assetCriticality); // "Critical"
console.log(asset.status);         // "Active"

Create Asset ​

typescript
const asset = await client.assets.create({
  assetDesc: 'Production Web Server',
  assetCat: 'Infrastructure',
  assetOwner: 'ops-team',
  assetCriticality: 'Critical',
  assetRisk: 'Medium',
  nextReviewDate: new Date('2025-06-01'),
});

console.log(`Created asset: ${asset.id}`);

CreateAssetInput ​

FieldTypeRequiredDescription
assetDescstring✅Asset description/name
assetCatstring✅Asset category
assetOwnerstring❌Owner user ID or name
assetCriticalitystring❌Criticality level (Critical, High, Medium, Low)
assetRiskstring❌Associated risk level
nextReviewDateDate❌Next scheduled review date

Update Asset ​

typescript
const updated = await client.assets.update('AST-001', {
  assetCriticality: 'High',
  assetOwner: 'new-owner@company.com',
  status: 'Active',
});

UpdateAssetInput ​

FieldTypeDescription
assetDescstringAsset description
assetCatstringCategory
assetOwnerstringOwner
assetCriticalitystringCriticality level
assetRiskstringRisk level
status'Active' | 'Decommissioned'Asset status
nextReviewDateDateNext review date

Delete Asset ​

typescript
await client.assets.delete('AST-001');

Review Asset ​

Mark an asset as reviewed:

typescript
const reviewed = await client.assets.review('AST-001', 'Annual review completed');

Asset Type ​

typescript
interface Asset {
  id: string;
  type: 'asset';
  assetDesc: string;
  assetCat: string;
  assetOwner?: string;
  assetCriticality?: string;
  assetRisk?: string;
  status: 'Active' | 'Decommissioned' | 'Deleted';
  nextReviewDate?: Date;
  lastReviewDate?: Date;
  createdAt: Date;
  updatedAt: Date;
  metadata?: Record<string, unknown>;
}

Examples ​

Asset Inventory Report ​

typescript
async function assetInventoryReport() {
  const response = await client.assets.list();
  const assets = response.data;
  
  // Group by category
  const byCategory: Record<string, number> = {};
  const byCriticality: Record<string, number> = {};
  
  for (const asset of assets) {
    // Count by category
    const cat = asset.assetCat || 'Uncategorized';
    byCategory[cat] = (byCategory[cat] || 0) + 1;
    
    // Count by criticality
    const crit = asset.assetCriticality || 'Unknown';
    byCriticality[crit] = (byCriticality[crit] || 0) + 1;
  }
  
  console.log('Asset Inventory Report');
  console.log('======================');
  console.log(`Total Assets: ${assets.length}`);
  console.log('\nBy Category:');
  for (const [cat, count] of Object.entries(byCategory)) {
    console.log(`  ${cat}: ${count}`);
  }
  console.log('\nBy Criticality:');
  for (const [crit, count] of Object.entries(byCriticality)) {
    console.log(`  ${crit}: ${count}`);
  }
}

Find Assets Due for Review ​

typescript
async function findAssetsNeedingReview() {
  const response = await client.assets.list();
  const now = new Date();
  const thirtyDays = 30 * 24 * 60 * 60 * 1000;
  
  const dueSoon = response.data.filter(asset => {
    if (!asset.nextReviewDate) return false;
    const reviewDate = new Date(asset.nextReviewDate);
    return reviewDate.getTime() - now.getTime() < thirtyDays;
  });
  
  console.log(`Assets due for review in next 30 days: ${dueSoon.length}`);
  for (const asset of dueSoon) {
    console.log(`  • ${asset.assetDesc} (${asset.nextReviewDate})`);
  }
}

Sync Assets from External System ​

typescript
async function syncAssetsFromIT(externalAssets: any[]) {
  const existing = await client.assets.list();
  const existingIds = new Set(existing.data.map(a => a.id));
  
  for (const ext of externalAssets) {
    if (existingIds.has(ext.id)) {
      // Update existing
      await client.assets.update(ext.id, {
        assetDesc: ext.name,
        assetCat: ext.category,
        assetOwner: ext.owner,
      });
    } else {
      // Create new
      await client.assets.create({
        assetDesc: ext.name,
        assetCat: ext.category,
        assetOwner: ext.owner,
        assetCriticality: ext.criticality || 'Medium',
      });
    }
  }
}

Next Steps ​

Released under the MIT License.