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
assetDescstringAsset description/name
assetCatstringAsset category
assetOwnerstringOwner user ID or name
assetCriticalitystringCriticality level (Critical, High, Medium, Low)
assetRiskstringAssociated risk level
nextReviewDateDateNext 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.