API Documentation
Developer documentation for integrating with Insider Risk Index APIs
Overview
Base URL
https://www.insiderisk.ioResponse Format
All API responses are in JSON format unless otherwise specified.
Rate Limiting
Public endpoints: 60 requests per minute
Authenticated endpoints: 120 requests per minute
Authentication
Most endpoints are public. Admin endpoints require API key authentication viaX-API-Key header.
Endpoints
GET
/api/glossaryRetrieve all glossary terms
Response
{
"terms": [
{
"id": "string",
"term": "string",
"slug": "string",
"definition": "string",
"category": "string",
"difficulty": "string",
"pillarRelevance": ["string"],
"relatedTerms": ["string"]
}
]
}GET
/api/glossary/[slug]Get a specific glossary term by slug
Path Parameters
slug(string)- URL-friendly term identifierResponse
{
"term": {
"id": "string",
"term": "string",
"slug": "string",
"definition": "string",
"category": "string",
"difficulty": "string",
"pillarRelevance": ["string"],
"relatedTerms": ["string"],
"sources": ["string"]
}
}GET
/api/matrixFetch Insider Threat Matrix data
Response
{
"techniques": [
{
"id": "string",
"title": "string",
"description": "string",
"category": "motive | coercion | manipulation",
"preventions": [...],
"detections": [...],
"pillarMapping": {...}
}
],
"lastUpdated": "ISO 8601 timestamp"
}POST
/api/matrix/syncRequired (Admin)
Synchronize Matrix data from ForScie repository
Response
{
"success": true,
"message": "Matrix data synchronized",
"techniques": 50,
"timestamp": "ISO 8601 timestamp"
}GET
/api/matrix/techniquesSearch and filter Matrix techniques
Query Parameters
category(string)- Filter by category (motive/coercion/manipulation)pillar(string)- Filter by pillar relevancesearch(string)- Search term for title/descriptionResponse
{
"techniques": [...],
"total": 50,
"filtered": 12
}GET
/api/matrix/analysis/[pillar]Get pillar-specific Matrix analysis
Path Parameters
pillar(string)- Pillar ID (visibility/coaching/evidence/identity/phishing)Response
{
"pillar": "string",
"techniques": [...],
"recommendations": [...],
"statistics": {
"totalTechniques": 15,
"byCategory": {...}
}
}GET
/api/pdf/[id]Generate and download comprehensive PDF report
Path Parameters
id(string)- Assessment ID from databaseResponse
Binary PDF data (application/pdf)GET
/api/ogGenerate Open Graph images
Query Parameters
title(string)- Page titledescription(string)- Page descriptionscore(number)- Risk score (0-100)Response
Binary PNG image (image/png)GET
/api/sitemapGenerate XML sitemap
Response
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.insiderisk.io/</loc>
<lastmod>2025-01-27</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
...
</urlset>GET
/api/rssRSS feed for research articles
Response
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Insider Risk Index Research</title>
<link>https://www.insiderisk.io/research</link>
<description>Latest research and insights</description>
<item>...</item>
</channel>
</rss>POST
/api/contactSubmit contact form
Request Body
{
"name": "string",
"email": "string",
"organization": "string (optional)",
"message": "string",
"type": "general | support | partnership"
}Response
{
"success": true,
"message": "Thank you for contacting us"
}Error Codes
400
Bad Request - Invalid parameters401
Unauthorized - Missing or invalid API key404
Not Found - Resource doesn't exist429
Too Many Requests - Rate limit exceeded500
Internal Server ErrorExample Usage
Fetch Glossary Terms (JavaScript)
fetch('https://www.insiderisk.io/api/glossary')
.then(response => response.json())
.then(data => {
console.log(`Found ${data.terms.length} glossary terms`);
data.terms.forEach(term => {
console.log(`- ${term.term}: ${term.definition.substring(0, 50)}...`);
});
})
.catch(error => console.error('Error:', error));Generate PDF Report (Python)
import requests
# Generate a comprehensive PDF using simplified endpoint
assessment_id = "clx123abc456def" # Must be from database
response = requests.get(
f'https://www.insiderisk.io/api/pdf/{assessment_id}'
)
if response.status_code == 200:
with open('insider_risk_comprehensive.pdf', 'wb') as f:
f.write(response.content)
print('Comprehensive PDF saved successfully')
elif response.status_code == 410:
print('Error: Using deprecated PDF endpoint. Use /api/pdf/[id] instead.')
else:
print(f'Error: {response.status_code}')Search Matrix Techniques (cURL)
curl -X GET "https://www.insiderisk.io/api/matrix/techniques?category=manipulation&pillar=phishing" \
-H "Accept: application/json"Need Help?
For API support, feature requests, or to report issues:
- • Email: [email protected]
- • GitHub Issues: Report an issue
- • Contact Form: Send us a message