Skip to content

REST API Reference

The KYRA MDR REST API provides programmatic access to alerts, incidents, collectors, compliance, and other platform resources. Use it to integrate KYRA MDR with your existing tools, automate workflows, or build custom dashboards.

Base URL: https://console.kyramdr.com/api/v1


Authentication

All API requests require a Bearer token in the Authorization header.

Generate an API Key

  1. Open the KYRA MDR Console
  2. Go to Settings > API Keys
  3. Click Create API Key
  4. Give the key a name (e.g., “SIEM Integration”)
  5. Select the permission scope (read-only or read-write)
  6. Copy the key — it will not be shown again

Using the API Key

Include the key in every request:

Terminal window
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://console.kyramdr.com/api/v1/alerts

Authentication Errors

StatusMeaning
401 UnauthorizedMissing or invalid API key
403 ForbiddenAPI key lacks required permissions
429 Too Many RequestsRate limit exceeded (see below)

Rate Limits

PlanRate Limit
FREE60 requests/minute
MDR300 requests/minute
PRO1,000 requests/minute
CUSTOMCustom

Rate limit headers are included in every response:

X-RateLimit-Limit: 300
X-RateLimit-Remaining: 297
X-RateLimit-Reset: 1700000060

Common Parameters

ParameterTypeDescription
pageintegerPage number (default: 0)
sizeintegerItems per page (default: 20, max: 100)
sortstringSort field (e.g., createdAt)
directionstringSort order: asc or desc

Alerts

List Alerts

GET /api/v1/alerts

Query parameters:

ParameterTypeDescription
severitystringFilter by severity: critical, high, medium, low, info
statusstringFilter by status: OPEN, IN_PROGRESS, RESOLVED, FALSE_POSITIVE
searchstringSearch in title, description

Example:

Terminal window
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://console.kyramdr.com/api/v1/alerts?severity=critical&status=OPEN&size=5"

Response:

{
"content": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Brute Force Authentication Attempt",
"severity": "high",
"status": "OPEN",
"source": "sshd",
"mitreTactic": "credential-access",
"mitreTechnique": "T1110",
"createdAt": "2026-04-22T08:15:30Z",
"description": "47 failed logon attempts from 10.0.1.55 targeting root account"
}
],
"totalElements": 232695,
"totalPages": 11635,
"number": 0,
"size": 20
}

Get Alert Detail

GET /api/v1/alerts/{id}

Get Alert Stats

GET /api/v1/alerts/stats

Returns aggregated alert statistics:

{
"total_alerts": 232695,
"open_alerts": 232685,
"critical_alerts": 60,
"high_alerts": 2359,
"alerts_today": 33,
"alerts_this_week": 586,
"resolved_alerts": 2,
"false_positive_alerts": 3
}

Incidents

List Incidents

GET /api/v1/incidents
ParameterTypeDescription
severitystringFilter by severity
statusstringOPEN, CONTAINED, ERADICATED, RECOVERED, CLOSED
Terminal window
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://console.kyramdr.com/api/v1/incidents?status=OPEN"

Response:

{
"content": [
{
"id": "7c9e6679-a1f4-4b3c-80ba-e44f95541174",
"title": "[Auto] TCP SYN Scan Detection",
"severity": "high",
"status": "OPEN",
"alertCount": 5,
"createdAt": "2026-04-22T07:00:00Z",
"assignedTo": null,
"mitreTactic": "discovery",
"mitreTechnique": "T1046"
}
],
"totalElements": 127,
"totalPages": 7
}

Get Incident Detail

GET /api/v1/incidents/{id}

Add Incident Comment

POST /api/v1/incidents/{id}/comments
Terminal window
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Isolated host from network. Investigating root cause."}' \
https://console.kyramdr.com/api/v1/incidents/7c9e6679-a1f4/comments

Search Events

POST /api/v1/siem/search
Terminal window
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "program:sshd AND user:root",
"fromTime": "2026-04-24T00:00:00Z",
"toTime": "2026-04-25T00:00:00Z",
"limit": 50
}' \
https://console.kyramdr.com/api/v1/siem/search

Response:

{
"events": [
{
"timestamp": "2026-04-24T14:22:10Z",
"source": "sshd",
"host": "10.0.1.55",
"severity": "high",
"message": "Failed password for root from 192.168.1.100 port 22 ssh2"
}
],
"total": 342,
"histogram": [
{ "time": "2026-04-24T00:00:00Z", "count": 28, "breakdown": {"high": 5, "medium": 23} }
],
"queryTime": 684
}

Detection Rules

List Rules

GET /api/v1/siem/rules
ParameterTypeDescription
searchstringSearch in name, description, MITRE tactic/technique
severitystringFilter by severity
statusstringACTIVE, INACTIVE, DRAFT
mitrestringFilter by MITRE tactic or technique ID
Terminal window
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://console.kyramdr.com/api/v1/siem/rules?mitre=T1110&size=5"

Collectors

List Collectors

GET /api/v1/collectors
Terminal window
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://console.kyramdr.com/api/v1/collectors

Response:

[
{
"id": "d353abff-db8b-483b-9b77-67638402544b",
"hostname": "collector-01",
"status": "online",
"version": "0.1.0",
"osFamily": "linux",
"lastHeartbeat": "2026-04-25T09:00:15Z",
"eventsIngested": 1261953
}
]

Compliance

List Frameworks

GET /api/v1/compliance/frameworks

Returns all 9 compliance frameworks: ISMS-P, ISO 27001, SOC 2, PCI-DSS, TISAX, CMMC, GDPR, CCPA, NIST CSF.

Get Controls with Status

GET /api/v1/compliance/{framework}/controls
Terminal window
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://console.kyramdr.com/api/v1/compliance/ISMSP/controls"

Get Framework Coverage

GET /api/v1/compliance/{framework}/coverage
{
"framework": "ISMSP",
"totalControls": 31,
"compliant": 24,
"partial": 0,
"nonCompliant": 0,
"notAssessed": 7,
"score": 77.42
}

Auto-Collect Evidence

POST /api/v1/compliance/evidence/collect

Export PDF Report

GET /api/v1/compliance/{framework}/report

Returns a PDF binary with Content-Type application/pdf.


Assets

List Assets

GET /api/v1/assets
ParameterTypeDescription
searchstringSearch by IP, hostname
typestringFilter by asset type
sortstringSort field
directionstringasc or desc

Export

Export Data as CSV/JSON

GET /api/v1/export/{resource}?format={csv|json}

Available resources: alerts, incidents, detection-rules, assets, audit-logs, identities, compliance-controls, connectors, playbooks, notifications, subdomains, threat-intel-iocs, risk-intelligence, dsr.

Terminal window
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://console.kyramdr.com/api/v1/export/alerts?format=csv" \
-o alerts.csv

Webhooks

Create Webhook

POST /api/v1/webhooks
Terminal window
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Slack Critical Alerts",
"url": "https://hooks.slack.com/services/T00/B00/xxx",
"events": ["alert.created"],
"filters": {
"severity": ["critical", "high"]
}
}' \
https://console.kyramdr.com/api/v1/webhooks

Webhook Events

EventDescription
alert.createdNew alert detected
alert.updatedAlert status changed
incident.createdNew incident created
incident.updatedIncident status changed
collector.disconnectedCollector went offline

Webhook Payload

{
"event": "alert.created",
"timestamp": "2026-04-22T08:15:30Z",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Brute Force Authentication Attempt",
"severity": "high",
"url": "https://console.kyramdr.com/alerts/550e8400-e29b"
}
}

Error Responses

All errors follow a consistent format:

{
"error": "Invalid severity value",
"message": "Allowed: critical, high, medium, low, info",
"status": 400
}
HTTP StatusDescription
400Invalid request parameter
401Missing or invalid API key
403Insufficient permissions
404Resource not found
409Conflict (duplicate resource)
429Rate limit exceeded
500Server error — contact support

SDKs and Libraries

The REST API works with any HTTP client. Below are examples in common languages:

# Python example
import requests
API_KEY = "your-api-key"
BASE_URL = "https://console.kyramdr.com/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Get open critical alerts
response = requests.get(
f"{BASE_URL}/alerts",
headers=headers,
params={"severity": "critical", "status": "OPEN"}
)
for alert in response.json()["content"]:
print(f"[{alert['severity']}] {alert['title']}")

Need Help?