Process Analysis API
Process Analysis API
The Process Analysis API provides detailed activity-level metrics, bottleneck detection, outlier identification, and duration analysis for individual process definitions.
Base Path: /process-analysis
Endpoints
GET /process-analysis/activity
Returns activity-level statistics for a process.
Purpose: Get execution statistics for each activity in a process, including average duration, execution count, min/max durations.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
processKey |
string | Yes | Process definition key |
version |
string | Yes | Process version |
startDate |
string | No | Start date (ISO 8601) |
endDate |
string | No | End date (ISO 8601) |
Response Example:
{
"successFullInstances": 1205,
"averageInstanceDuration": 3600000,
"activityInstances": [
{
"activityId": "Task_1",
"activityCount": 1205,
"minDuration": 120000,
"maxDuration": 1200000,
"averageDuration": 300000
},
{
"activityId": "Task_2",
"activityCount": 1205,
"minDuration": 60000,
"maxDuration": 600000,
"averageDuration": 150000
}
]
}
Response Fields:
| Field | Type | Description |
|---|---|---|
successFullInstances |
int | Number of successful process instances |
averageInstanceDuration |
long | Average process instance duration (ms) |
activityInstances |
array | List of activity statistics |
activityInstances[].activityId |
string | BPMN activity identifier |
activityInstances[].activityCount |
int | Number of times activity executed |
activityInstances[].minDuration |
long | Minimum duration (ms) |
activityInstances[].maxDuration |
long | Maximum duration (ms) |
activityInstances[].averageDuration |
long | Average duration (ms) |
GET /process-analysis/activity-duration
Returns duration between two specific activities.
Purpose: Calculate the average time elapsed between a start activity and an end activity within process instances.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
processKey |
string | Yes | Process definition key |
version |
string | Yes | Process version |
startActivityId |
string | Yes | Start activity BPMN ID |
endActivityId |
string | Yes | End activity BPMN ID |
startDate |
string | No | Start date (ISO 8601) |
endDate |
string | No | End date (ISO 8601) |
Response Example:
{
"startActivityId": "Task_1",
"endActivityId": "Task_5",
"averageDuration": 2100000
}
Response Fields:
| Field | Type | Description |
|---|---|---|
startActivityId |
string | Start activity identifier |
endActivityId |
string | End activity identifier |
averageDuration |
long | Average duration between activities (ms) |
GET /process-analysis/outliers
Returns outlier process instances based on duration thresholds.
Purpose: Identify process instances that took significantly longer or shorter than normal, useful for finding problem instances.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
processKey |
string | Yes | Process definition key |
version |
string | Yes | Process version |
lowerThresholdIqr |
long | Yes | Lower threshold for outliers (ms) |
upperThresholdIqr |
long | Yes | Upper threshold for outliers (ms) |
minResults |
int | Yes | Minimum number of results to return |
maxResults |
int | Yes | Maximum number of results to return |
startDate |
string | No | Start date (ISO 8601) |
endDate |
string | No | End date (ISO 8601) |
Response Example:
[
{
"procInstId": "pi-12345",
"startTime": 1704067200000,
"procDuration": 7200000,
"diffFromMean": 3600000,
"longestActivity": "Task_3",
"activityDuration": 3000000
},
{
"procInstId": "pi-12346",
"startTime": 1704070800000,
"procDuration": 9000000,
"diffFromMean": 5400000,
"longestActivity": "Task_2",
"activityDuration": 4500000
}
]
Response Fields:
| Field | Type | Description |
|---|---|---|
procInstId |
string | Process instance ID |
startTime |
long | Instance start time (ms, Unix epoch) |
procDuration |
long | Total process duration (ms) |
diffFromMean |
long | Difference from mean duration (ms) |
longestActivity |
string | Activity with longest duration |
activityDuration |
long | Duration of longest activity (ms) |
GET /process-analysis/duration
Returns duration distribution for process instances.
Purpose: Get histogram-style data showing the distribution of process instance durations.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
processKey |
string | Yes | Process definition key |
version |
string | Yes | Process version |
startDate |
string | No | Start date (ISO 8601) |
endDate |
string | No | End date (ISO 8601) |
Response Example:
[
{
"date": 1800000,
"totalInstances": 120
},
{
"date": 3600000,
"totalInstances": 850
},
{
"date": 5400000,
"totalInstances": 200
},
{
"date": 7200000,
"totalInstances": 35
}
]
Response Fields:
| Field | Type | Description |
|---|---|---|
date |
long | Duration bucket (ms) |
totalInstances |
int | Number of instances in this duration range |
GET /process-analysis/thresholds
Returns calculated threshold values for outlier detection.
Purpose: Get the lower and upper threshold values based on statistical analysis (typically using IQR method).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
processKey |
string | Yes | Process definition key |
version |
string | Yes | Process version |
startDate |
string | No | Start date (ISO 8601) |
endDate |
string | No | End date (ISO 8601) |
Response Example:
{
"lowerThreshold": 1200000,
"upperThreshold": 5400000
}
Response Fields:
| Field | Type | Description |
|---|---|---|
lowerThreshold |
long | Lower duration threshold (ms) |
upperThreshold |
long | Upper duration threshold (ms) |
GET /process-analysis/version-duration
Returns duration statistics grouped by process version.
Purpose: Compare performance across different versions of the same process.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
processKey |
string | Yes | Process definition key |
startDate |
string | No | Start date (ISO 8601) |
endDate |
string | No | End date (ISO 8601) |
Response Example:
[
{
"version": 1,
"avgDurationMs": 3600000,
"minDurationMs": 1200000,
"maxDurationMs": 7200000,
"totalInstances": 500
},
{
"version": 2,
"avgDurationMs": 3000000,
"minDurationMs": 1000000,
"maxDurationMs": 6000000,
"totalInstances": 705
}
]
Response Fields:
| Field | Type | Description |
|---|---|---|
version |
int | Process version number |
avgDurationMs |
long | Average duration (ms) |
minDurationMs |
long | Minimum duration (ms) |
maxDurationMs |
long | Maximum duration (ms) |
totalInstances |
int | Total instances for this version |
Usage Examples
Get Activity Statistics
curl -X GET "http://localhost:8899/process-analysis/activity?processKey=invoice-process&version=1"
Get Duration Between Activities
curl -X GET "http://localhost:8899/process-analysis/activity-duration?processKey=invoice-process&version=1&startActivityId=Task_1&endActivityId=Task_5"
Get Outliers
curl -X GET "http://localhost:8899/process-analysis/outliers?processKey=invoice-process&version=1&lowerThresholdIqr=1000000&upperThresholdIqr=5000000&minResults=5&maxResults=50"
Get Duration Distribution
curl -X GET "http://localhost:8899/process-analysis/duration?processKey=invoice-process&version=1&startDate=2025-01-01T00:00:00Z&endDate=2025-01-31T23:59:59Z"
Get Version Comparison
curl -X GET "http://localhost:8899/process-analysis/version-duration?processKey=invoice-process&startDate=2025-01-01T00:00:00Z&endDate=2025-01-31T23:59:59Z"
Notes
- All duration values are in milliseconds
- The
processKeyandversionparameters are required for most endpoints - Thresholds are typically calculated using the IQR (Interquartile Range) method
- Activity IDs correspond to BPMN element IDs in the process definition
- Returns empty array or
nullif no matching process is found