Process Radar API Documentation
Version: 2.0
Base URL: https://api.dkyra.com/api/v1Authentication: API Key or JWT Token
Last Updated: 2026-03-11
Overview
Process Radar analyzes ITSM ticket workflows to automatically identify anomalies, bottlenecks, and optimization opportunities across teams. The API provides programmatic access to analysis results, prioritized situations, health metrics, and delegation workflows.
Key Concepts
| Concept | Description |
|---|---|
| Finding | An automatically detected anomaly in your ITSM workflows — for example, a team with unusually long processing times, a routing loop between departments, or a seasonal capacity problem |
| Affected Dimensions | The business context of a finding — which team, category, location, or combination is affected |
| Tier | Severity classification: critical, notable, observed |
| Trend | Development over time: improving, worsening, stable, new |
| Confidence | Robustness assessment (low, medium, high) based on data volume and statistical significance |
| Situation | A group of related findings that together describe a business-relevant problem requiring action — like "Level-1 Support is overwhelmed" instead of 12 separate symptoms |
| Health Score | An A-through-F grade summarizing overall process health, combining throughput, bottleneck risk, and trend indicators |
| Delegation | Assignment of responsibility with feedback loop via magic-link email — no login required for recipients |
| Narrative | AI-generated explanation of a situation in plain language with recommended actions |
| Statement | Human-readable description of the finding, available in German and English |
Authentication
All API requests require authentication via one of:
API Key (Header)
X-API-Key: your-api-keyJWT Bearer Token
Authorization: Bearer your-jwt-tokenObtaining Credentials
API Key: Create via Settings → API Keys in the Process Radar UI.
JWT Token: Use the login endpoint:
POST /api/v1/auth/login
Content-Type: application/json
{
"email": "[email protected]",
"password": "your-password"
}Response:
{
"access_token": "eyJhbGci...",
"token_type": "bearer",
"expires_in": 3600
}Use POST /api/v1/auth/refresh with the current token to obtain a new one before expiry.
Quick Start
Step 1: Upload data
curl -X POST https://api.dkyra.com/api/v1/datasets/upload \
-H "X-API-Key: YOUR_KEY" \
-F "[email protected]" \
-F "[email protected]" \
-F "name=Q1 Analysis"Step 2: Start analysis
curl -X POST https://api.dkyra.com/api/v1/datasets/{dataset_id}/runs \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Q1 Deep Dive"}'Step 3: Get results
curl https://api.dkyra.com/api/v1/executive-summary \
-H "X-API-Key: YOUR_KEY"Core Endpoints
Health Check
GET /healthReturns API status. No authentication required.
Response:
{
"status": "healthy",
"version": "1.0.0"
}Datasets & Upload
#### Create Dataset
Note: Dataset CRUD endpoints use the root path (/datasets), not the/api/v1/prefix. The full URL ishttps://api.dkyra.com/datasets.
POST /datasetsCreates a new empty dataset for the current tenant.
Request Body:
{
"name": "Q1 2026 Analysis"
}Response (201):
{
"dataset_id": "uuid",
"name": "Q1 2026 Analysis",
"status": "created",
"created_at": "2026-02-09T10:00:00Z"
}#### List Datasets
GET /datasetsReturns all datasets for the current tenant, including run counts.
Response:
[
{
"dataset_id": "uuid",
"name": "Q1 2026 Analysis",
"status": "uploaded",
"created_at": "2026-02-09T10:00:00Z",
"run_count": 3,
"ticket_count": 1500,
"event_count": 45000
}
]#### Upload CSV Files
POST /api/v1/datasets/uploadCreates a dataset and uploads CSV files in one step. Uses multipart/form-data.
Form Fields:
| Name | Type | Description |
|---|---|---|
tickets_file | file | Tickets.csv (semicolon-separated) |
history_file | file | TicketHistory.csv (semicolon-separated) |
name | string | Dataset name (default: "Neue Analyse") |
Response (200):
{
"dataset_id": "uuid",
"status": "uploaded",
"validation": {
"tickets_count": 1500,
"events_count": 45000,
"warnings": []
}
}#### Delete Dataset
DELETE /api/v1/datasets/{dataset_id}?confirm=trueDeletes a dataset and ALL associated data. Requires confirm=true as safety guard.
| Status | Meaning |
|---|---|
| 204 | Successfully deleted |
| 400 | Missing confirm=true parameter |
| 404 | Dataset not found |
| 409 | Cannot delete — active run in progress |
Analysis Runs
#### Start Analysis Run
POST /api/v1/datasets/{dataset_id}/runsStarts an analysis run asynchronously. Returns 202 Accepted immediately.
Request Body:
{
"name": "Q1 Deep Dive"
}Response (202):
{
"run_id": "uuid",
"status": "running",
"name": "Q1 Deep Dive",
"message": "Analysis started"
}#### List Runs
GET /api/v1/runsReturns all runs for the current tenant.
Parameters:
| Name | Type | Description |
|---|---|---|
dataset_id | query | Filter by dataset |
status | query | Filter: QUEUED, RUNNING, SUCCEEDED, FAILED |
limit | query | Max results (default: 50) |
offset | query | Pagination offset |
#### Get Run Status
GET /api/v1/runs/{run_id}Response:
{
"run_id": "uuid",
"dataset_id": "uuid",
"status": "SUCCEEDED",
"name": "Q1 Deep Dive",
"findings_count": 181,
"events_processed": 45000,
"progress_phase": "complete",
"progress_percent": 100,
"started_at": "2026-02-09T10:00:00Z",
"finished_at": "2026-02-09T10:02:30Z"
}Executive Summary Endpoints
These aggregated endpoints are designed for AI agents, dashboards, and third-party integrations. They return high-level KPIs without requiring knowledge of internal data structures.
#### Executive Summary
GET /api/v1/executive-summaryHigh-level briefing with system health, prioritized situations, and trend information.
Parameters:
| Name | Type | Description |
|---|---|---|
dataset_id | query | Dataset ID (uses first dataset if omitted) |
limit | query | Max priority situations, 1-10 (default: 5) |
Response:
{
"health_score": {
"score": 62,
"grade": "C"
},
"priority_situations": [
{
"situation_id": "sit-abc-123",
"headline": "Level-1-Support: Kapazitätsengpass mit steigender Tendenz",
"situation_type": "capacity bottleneck",
"impact_hours": 342.5,
"trend": "worsening",
"recommendation": "delegate",
"finding_count": 4,
"tier": "critical"
}
],
"open_delegations": 2,
"trend_summary": {
"direction": "worsening",
"new_situations": 1,
"resolved_situations": 0
},
"period": {
"start": "2024-01-01T00:00:00",
"end": "2024-12-31T00:00:00",
"run_id": "run-xyz-456"
}
}#### Analysis Summary
GET /api/v1/analysis-summaryAggregated analysis KPIs — anomaly distribution, trends, and most affected roles.
Response:
{
"total_findings": 23,
"tier_distribution": {
"critical": 3,
"notable": 8,
"observed": 12
},
"new_findings": 2,
"trend_distribution": {
"worsening": 5,
"stable": 12,
"improving": 4,
"new": 2
},
"top_affected_roles": [
{
"role": "Level-1-Support",
"finding_count": 6,
"dominant_tier": "critical"
}
],
"last_analysis_at": "2024-12-15T14:30:00"
}#### Flow Health
GET /api/v1/flow-healthSystem-wide flow health metrics — bottleneck roles and capacity status.
Response:
{
"roles_in_bottleneck": 2,
"total_active_roles": 8,
"bottleneck_roles": [
{
"role": "Level-1-Support",
"severity": "critical",
"state": "persistent overload"
},
{
"role": "Incident-Management",
"severity": "notable",
"state": "growing overload"
}
],
"health_grade": "C"
}Findings
#### List Findings
GET /runs/{run_id}/findingsReturns all detected anomalies for an analysis run with filtering and sorting.
Parameters:
| Name | Type | Description |
|---|---|---|
run_id | path | Analysis run identifier |
tier | query | Filter: critical, notable, observed |
role | query | Filter by affected role |
category | query | Filter by affected category |
ticket_status | query | Filter: closed (default), open, all |
sort_by | query | Sort: impact_hours, tier, relevance_score |
sort_order | query | Direction: asc or desc |
limit | query | Max results (default: 50, max: 500) |
offset | query | Pagination offset |
Response:
{
"findings": [
{
"finding_id": "cbf7fec4f9a2",
"finding_type": "high_dwell_time",
"finding_type_label": "Hohe Verweildauer in Rolle",
"tier": "critical",
"affected_dimensions": {
"role": "2nd Level Support"
},
"statements": {
"de": "Die Rolle '2nd Level Support' zeigt eine deutlich höhere Verweildauer als der globale Median (89.4h vs. 12.0h, +645%). Robustheit: Hoch (234 Tickets).",
"en": "Role '2nd Level Support' shows significantly higher dwell time than the global median (89.4h vs. 12.0h, +645%). Robustness: High (234 tickets)."
},
"confidence": {
"level": "high",
"description_de": "Hoch",
"description_en": "High"
},
"volume": {
"ticket_count": 234,
"interval_count": 456
},
"impact_hours": 1250.5,
"temporal": {
"first_seen": "2024-01-15",
"last_seen": "2024-06-30",
"trend": "stable"
}
}
],
"total": 181,
"returned": 50
}Response fields likefinding_typecontain machine-readable identifiers. Usefinding_type_labelfor human-readable display.
#### Get Finding Detail
GET /runs/{run_id}/findings/{finding_id}Returns full details for a single finding including metrics, affected tickets, and trend data.
#### Get Finding Time Series
GET /findings/{definition_id}/timeseriesReturns weekly time series data for a finding, useful for sparklines and trend visualization.
Parameters:
| Name | Type | Description |
|---|---|---|
weeks | query | Number of weeks (default: 12, max: 52) |
Response:
{
"definition_id": "uuid",
"timeseries": [
{
"week": "2024-W01",
"impact_hours": 45.2,
"ticket_count": 12,
"tier": "notable"
}
],
"trend": "worsening",
"trend_factor": 1.35
}#### Get Affected Tickets
GET /findings/{finding_id}/ticketsReturns sample ticket IDs affected by this finding.
Response:
{
"finding_id": "uuid",
"tickets": [
{ "ticket_id": "INC-2024-0042", "impact_hours": 12.5 },
{ "ticket_id": "INC-2024-0089", "impact_hours": 8.3 }
],
"total_tickets": 234,
"sample_size": 20
}Situations
#### List Situations
GET /api/v1/runs/{run_id}/situationsReturns situations (grouped findings) for a run.
Parameters:
| Name | Type | Description |
|---|---|---|
status | query | Filter: new, delegate, watching, ignore, escalated |
tier | query | Filter: critical, notable, observed |
Response:
{
"situations": [
{
"id": "sit-uuid",
"title": "Level-1-Support: Kapazitätsengpass",
"situation_type": "capacity bottleneck",
"anchor_role": "Level-1-Support",
"impact_hours": 342.5,
"finding_count": 4,
"trend": "worsening",
"status": "new",
"has_narrative": true
}
],
"total": 12,
"run_id": "uuid"
}#### Get Situation Detail
GET /api/v1/situations/{situation_id}Returns full situation details including member findings, delegations, and learnings.
#### Get Situation Narrative
GET /api/v1/situations/{situation_id}/narrativeReturns the AI-generated narrative for a situation — a plain-language explanation with context and recommended actions.
Response:
{
"id": "uuid",
"situation_id": "sit-uuid",
"language": "de",
"headline": "Level-1-Support: Kapazitätsengpass mit steigender Tendenz",
"body": "Der Level-1-Support zeigt seit 8 Wochen eine kontinuierlich steigende Verweildauer...",
"next_actions": [
"Routing-Regeln für Kategorie 'Passwort-Reset' prüfen",
"Kapazitätsplanung für KW 15-20 anpassen"
],
"status": "completed",
"generated_at": "2026-03-01T12:00:00Z"
}Triage Queue
GET /api/v1/runs/{run_id}/situations-queueReturns the prioritized triage queue combining situations and ungrouped findings.
Parameters:
| Name | Type | Description |
|---|---|---|
tier | query | Filter by severity |
status | query | Filter by workflow status |
limit | query | Max items (default: 20) |
Delegations
#### Delegate Situation
POST /api/v1/situations/{situation_id}/delegateAssigns responsibility for a situation to a team member via email. The recipient receives a magic-link email with context and guiding questions — no login required.
Request Body:
{
"email": "[email protected]",
"name": "Max Mustermann",
"message": "Bitte prüfe die Routing-Regeln für Passwort-Reset Tickets.",
"due_date": "2026-03-15"
}Response (201):
{
"delegation_id": "uuid",
"status": "sent",
"feedback_url": "https://app.dkyra.com/feedback/abc123"
}#### List Delegations
GET /api/v1/delegationsReturns all delegations for the current tenant with status tracking.
System Health
#### Get Health Score
GET /api/v1/system-flow/health-scoreReturns the overall system health score for a run.
Parameters:
| Name | Type | Description |
|---|---|---|
run_id | query | Analysis run ID |
Response:
{
"score": 62,
"grade": "C",
"components": {
"flow_balance": 55,
"stock_trend": 70,
"capacity_balance": 48,
"throughput_trend": 75
},
"worst_roles": ["Level-1-Support", "Incident-Management"],
"improving_roles": ["Change-Management"]
}#### Get Role Assessments
GET /api/v1/role-assessmentsReturns pre-computed per-role health assessments for a run.
Parameters:
| Name | Type | Description |
|---|---|---|
run_id | query | Analysis run ID |
severity | query | Filter: critical, notable, observed |
Billing & Credits
#### Get AI Credits Status
GET /api/v1/billing/ai-creditsReturns remaining AI analysis credits for the current tenant.
Response:
{
"total_credits": 100,
"used_credits": 23,
"remaining_credits": 77,
"plan": "pro"
}Connectors
Process Radar supports direct ITSM integrations for automated data import.
#### List Available Connector Types
GET /api/v1/connectors/typesReturns available connector types (e.g., Matrix42, Jira Service Management).
#### Create Connector
POST /api/v1/connectorsCreates a new ITSM connector for automated data synchronization.
#### Test Connection
POST /api/v1/connectors/{id}/testTests connectivity to the ITSM system without importing data.
#### Start Sync
POST /api/v1/connectors/{id}/syncTriggers a data synchronization from the connected ITSM system.
Authentication
#### Login
POST /api/v1/auth/loginRequest Body:
{
"email": "[email protected]",
"password": "your-password"
}Response:
{
"access_token": "eyJhbGci...",
"refresh_token": "eyJhbGci...",
"token_type": "bearer",
"expires_in": 3600,
"user": {
"user_id": "uuid",
"email": "[email protected]",
"role": "owner"
}
}#### Refresh Token
POST /api/v1/auth/refreshRefreshes an expired access token using the refresh token.
#### Current User
GET /api/v1/auth/meReturns the current authenticated user and tenant information.
AI Integration
Process Radar is built for programmatic and AI-agent consumption. All endpoints return structured JSON with consistent schemas.
Recommended Workflows for AI Agents
Morning Briefing:
GET /api/v1/executive-summary — Top situations, health score, trendsContinuous Monitoring:
GET /api/v1/flow-health — Check for new bottlenecksGET /api/v1/analysis-summary — Track anomaly trendsDeep Dive:
GET /api/v1/runs/{id}/findings?tier=critical — Critical anomaliesGET /api/v1/situations/{id} — Situation contextGET /api/v1/situations/{id}/narrative — AI-generated explanationDelegation Automation:
GET /api/v1/runs/{id}/situations-queue — Triage queuePOST /api/v1/situations/{id}/delegate — Assign responsibilityGET /api/v1/delegations — Track follow-upsWhat Process Radar Detects
Process Radar detects various types of anomalies including:
Each finding includes a human-readable label and a severity classification (critical, notable, observed).
Response Conventions
critical, notable, observedimproving, stable, worsening, newhigh, medium, lowstatements.de / statements.enCache-Control: private, max-age=300Error Handling
All errors follow RFC 7807 Problem Details format:
{
"detail": "Run not found",
"status": 404,
"title": "Not Found",
"trace_id": "abc123"
}Common Status Codes:
| Status | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 202 | Accepted (async operation started) |
| 204 | Deleted (no content) |
| 400 | Bad request (validation error) |
| 401 | Authentication required |
| 403 | Insufficient permissions or feature not available |
| 404 | Resource not found |
| 409 | Conflict (e.g., run still in progress) |
| 422 | Validation error (detailed field-level errors) |
| 429 | Rate limit exceeded |
| 500 | Internal server error |
Rate Limits
Standard: 60 requests/minute per API key. Summary endpoints are cached for 5 minutes.
Higher limits available on Enterprise plans.
Integration Examples
Python
import requests
API_KEY = "your-api-key"
BASE = "https://api.dkyra.com/api/v1"
headers = {"X-API-Key": API_KEY}
# Get executive summary
summary = requests.get(f"{BASE}/executive-summary", headers=headers).json()
print(f"Health: {summary['health_score']['grade']}")
for sit in summary["priority_situations"]:
print(f" [{sit['tier']}] {sit['headline']} ({sit['impact_hours']}h)")JavaScript
const API_KEY = "your-api-key";
const BASE = "https://api.dkyra.com/api/v1";
const res = await fetch(`${BASE}/executive-summary`, {
headers: { "X-API-Key": API_KEY }
});
const summary = await res.json();
console.log(`Health: ${summary.health_score.grade}`);cURL
curl -H "X-API-Key: YOUR_KEY" https://api.dkyra.com/api/v1/executive-summarySupported ITSM Systems
| System | Integration | Status |
|---|---|---|
| Matrix42 | Native connector | Available |
| Jira Service Management | Native connector | Available |
| ServiceNow | Planned | Coming soon |
| TOPdesk | Planned | Coming soon |
| Any ITSM | CSV import | Available |