Skip to content

Risks

Manage organizational risks with the de.iterate SDK.

Overview

The risks resource provides full CRUD operations for risk management, including risk assessment, mitigation tracking, and control linking.

List Risks

typescript
// List all risks
const risks = await client.risks.list();

// Filter by severity
const highRisks = await client.risks.list({
  filter: { severity: 'high' }
});

// Filter by status
const openRisks = await client.risks.list({
  filter: { status: 'open' }
});

// Multiple filters
const criticalOpen = await client.risks.list({
  filter: {
    severity: { in: ['critical', 'high'] },
    status: 'open',
  },
  sort: '-createdAt',
});

Get Risk

typescript
const risk = await client.risks.get('risk-123');

console.log(risk.name);
console.log(risk.severity);
console.log(risk.status);
console.log(risk.linkedControls);

Create Risk

typescript
const risk = await client.risks.create({
  name: 'Data Breach Risk',
  description: 'Risk of unauthorized access to customer data',
  category: 'Security',
  severity: 'high',
  likelihood: 'possible',
  impact: 'major',
  owner: 'security@company.com',
});

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

Required Fields

FieldTypeDescription
namestringRisk title

Optional Fields

FieldTypeDescription
descriptionstringDetailed description
categorystringRisk category
severitystringSeverity level
likelihoodstringProbability of occurrence
impactstringPotential impact
ownerstringRisk owner
statusstringCurrent status

Update Risk

typescript
const updated = await client.risks.update('risk-123', {
  status: 'mitigated',
  mitigationNotes: 'Implemented encryption and access controls',
  residualRisk: 'low',
});

Delete Risk

typescript
await client.risks.delete('risk-123');

Associate controls with a risk:

typescript
// Link a control to a risk
await client.risks.linkControl('risk-123', 'control-456');

// Unlink a control
await client.risks.unlinkControl('risk-123', 'control-456');

Risk Assessment

typescript
// Get risk with assessment details
const risk = await client.risks.get('risk-123', {
  include: ['assessment', 'controls'],
});

console.log('Inherent Risk:', risk.inherentRisk);
console.log('Residual Risk:', risk.residualRisk);
console.log('Linked Controls:', risk.linkedControls?.length);

Risk Types

typescript
interface Risk {
  id: string;
  type: 'risk';
  name: string;
  description?: string;
  category?: string;
  severity?: 'critical' | 'high' | 'medium' | 'low';
  likelihood?: string;
  impact?: string;
  status?: 'open' | 'mitigated' | 'accepted' | 'closed';
  owner?: string;
  inherentRisk?: number;
  residualRisk?: number;
  linkedControls?: string[];
  createdAt: Date;
  updatedAt: Date;
}

Examples

Risk Dashboard

typescript
async function riskDashboard() {
  const risks = await client.risks.list();
  
  const bySeverity = {
    critical: 0,
    high: 0,
    medium: 0,
    low: 0,
  };
  
  for (const risk of risks.data) {
    const sev = risk.severity?.toLowerCase() || 'low';
    if (sev in bySeverity) {
      bySeverity[sev as keyof typeof bySeverity]++;
    }
  }
  
  console.log('Risk Summary:');
  console.log(`  🔴 Critical: ${bySeverity.critical}`);
  console.log(`  🟠 High: ${bySeverity.high}`);
  console.log(`  🟡 Medium: ${bySeverity.medium}`);
  console.log(`  🟢 Low: ${bySeverity.low}`);
}

Find Unmitigated Risks

typescript
async function findUnmitigatedRisks() {
  const risks = await client.risks.list({
    filter: {
      status: 'open',
      severity: { in: ['critical', 'high'] },
    },
  });
  
  console.log('Unmitigated High-Severity Risks:');
  for (const risk of risks.data) {
    console.log(`  • ${risk.name}`);
    console.log(`    Owner: ${risk.owner || 'Unassigned'}`);
  }
}

Create Risk with Controls

typescript
async function createRiskWithControls() {
  // Create the risk
  const risk = await client.risks.create({
    name: 'Malware Infection Risk',
    severity: 'high',
    category: 'Security',
  });
  
  // Link existing controls
  const controlIds = ['ctrl-001', 'ctrl-002', 'ctrl-003'];
  
  for (const controlId of controlIds) {
    await client.risks.linkControl(risk.id, controlId);
  }
  
  console.log(`Created risk with ${controlIds.length} linked controls`);
}

Next Steps

Released under the MIT License.