This article explains how to use the Leapwork Performance Integration API to discover timelines and data items, start timeline runs, poll for completion, and download result reports from your own tooling.
It is intended for customer developers integrating Leapwork Performance with CI/CD pipelines, schedulers, or custom automation. You can explore endpoints, review request and response formats, and try out calls directly in the browser at https://perfapi.leapwork.cloud/swagger/integrations/index.html
What this article covers
-
Authentication with integration API keys
-
The currently available integration endpoints
-
A practical end-to-end workflow
-
Request and response examples you can adapt directly
The examples below show the fields most relevant for integration. Some responses may contain additional fields in your environment.
Before you start
-
You need your Leapwork Performance base URL.
-
You need an integration API key.
-
In Leapwork Performance, go to Profile > Integration API Keys and create a key.
-
Copy the full
rik_...value immediately. It is shown once only. -
Use a secure secret store in your pipeline or automation platform.
Authentication
Use the API key in the Authorization header on every request:
Authorization: X-API-KEY rik_your_generated_key
Example:
curl -s \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
"$BASE_URL/api/integration/getTimelines"
Integration API keys are company-scoped. If a key is expired, revoked, or invalid, the API will reject the request.
Supported endpoints
|
Method |
Endpoint |
Purpose |
|---|---|---|
|
|
|
List timelines available to your company |
|
|
|
Get a timeline by asset ID |
|
|
|
Get a timeline by name |
|
|
|
List data items in a project |
|
|
|
Get a data item by asset ID |
|
|
|
Get a data item by name |
|
|
|
Start a timeline run |
|
|
|
Poll run status |
|
|
|
Download the Excel run report |
|
|
|
Download the combined AI analysis report |
|
|
|
Download AI analysis for one track item |
|
|
|
Stop an active run |
Recommended workflow
-
Resolve the timeline you want to run.
-
Resolve the data item if your run needs one.
-
Call
runIntegration. -
Poll the returned
pollResultUrlevery 5 seconds. -
When the run reaches a terminal status, download the Excel and AI analysis reports.
For stable automation, prefer
timelineAssetIdovertimelineNamewhen you already know the ID.
1. Discover timelines
List all timelines
curl -s \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
"$BASE_URL/api/integration/getTimelines"
Example response:
[
{
"timelineId": "timeline_123",
"projectId": "project_001",
"title": "Checkout Load Test"
},
{
"timelineId": "timeline_456",
"projectId": "project_001",
"title": "Login Smoke Timeline"
}
]
Get a timeline by asset ID
curl -s \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
"$BASE_URL/api/integration/getTimelineAsset?timelineAssetId=timeline_123"
Example response:
{
"projectId": "project_001",
"timeline": {
"tracks": [
{
"id": "track_001",
"height": 160
}
],
"trackItems": [
{
"id": "ti_001",
"trackId": "track_001",
"title": "Login Flow",
"startTime": 0,
"lengthTime": 300,
"sequenceId": "seq_001",
"region": "westeurope",
"load": [
{ "time": 0, "load": 5 },
{ "time": 300, "load": 5 }
],
"thresholdLevel": [],
"endCondition": "duration",
"executionTarget": null
}
],
"isRunEnabled": true
},
"plannedRunTime": 300,
"estimatedVum": 25
}
Get a timeline by name
curl -s \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
--get \
--data-urlencode "timelineName=Checkout Load Test" \
--data-urlencode "projectId=project_001" \
"$BASE_URL/api/integration/getTimeline"
Example response:
{
"projectId": "project_001",
"timeline": {
"tracks": [],
"trackItems": [
{
"id": "ti_001",
"title": "Login Flow",
"region": "westeurope"
},
{
"id": "ti_002",
"title": "Search Flow",
"region": "eastus"
}
],
"isRunEnabled": true
},
"plannedRunTime": 360,
"estimatedVum": 150
}
2. Discover data items
List data items in a project
curl -s \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
"$BASE_URL/api/integration/getDataItems?projectId=project_001"
Example response:
[
{
"id": "di_internal_001",
"assetId": "dataitem_123",
"projectId": "project_001",
"companyId": "company_001",
"dataItemName": "Retail Users",
"text": [
{
"email": "user1@example.com",
"role": "Admin"
}
],
"isDeleted": false
}
]
Get a data item by asset ID
curl -s \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
"$BASE_URL/api/integration/getDataItemAsset?dataItemId=dataitem_123"
Example response:
{
"id": "di_internal_001",
"assetId": "dataitem_123",
"projectId": "project_001",
"companyId": "company_001",
"dataItemName": "Retail Users",
"text": [
{
"email": "user1@example.com",
"role": "Admin"
},
{
"email": "user2@example.com",
"role": "User"
}
],
"isDeleted": false
}
Get a data item by name
curl -s \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
--get \
--data-urlencode "dataItemName=Retail Users" \
--data-urlencode "projectId=project_001" \
"$BASE_URL/api/integration/getDataItem"
3. Start a run
Simple request using a timeline and data item
If you provide a dataItemAssetId or dataItemName and omit trackItems, Leapwork Performance builds the per-track-item configuration for you.
curl -s \
-X POST \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
-H "Content-Type: application/json" \
"$BASE_URL/api/integration/runIntegration" \
-d '{
"timelineAssetId": "timeline_123",
"dataItemAssetId": "dataitem_123",
"role": "Admin",
"userCount": 5
}'
Example response:
{
"timelineId": "timeline_123",
"runId": "run_x7k2m",
"status": "Preparing",
"estimatedVum": 150,
"plannedRunTime": 360,
"trackItems": [
{
"trackItemId": "ti_001",
"sequenceName": "Login Flow",
"region": "westeurope"
},
{
"trackItemId": "ti_002",
"sequenceName": "Search Flow",
"region": "eastus"
}
],
"pollResultUrl": "https://your-rush-base-url/api/integration/getTimelineStatus?runId=run_x7k2m&trackItemIds=ti_001%2Cti_002"
}
Request using timeline name and project ID
curl -s \
-X POST \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
-H "Content-Type: application/json" \
"$BASE_URL/api/integration/runIntegration" \
-d '{
"timelineName": "Checkout Load Test",
"projectId": "project_001",
"dataItemName": "Retail Users",
"userCount": 10
}'
Advanced request with explicit track item configuration
Use trackItems when different track items need different user counts, roles, or data items.
curl -s \
-X POST \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
-H "Content-Type: application/json" \
"$BASE_URL/api/integration/runIntegration" \
-d '{
"timelineAssetId": "timeline_123",
"trackItems": {
"ti_001": {
"dataItemAssetId": "dataitem_123",
"selectedRoles": ["Admin"],
"userCount": 5
},
"ti_002": {
"dataItemAssetId": "dataitem_456",
"selectedRoles": ["User"],
"userCount": 20
}
}
}'
If you provide trackItems, the API uses that explicit configuration instead of auto-building one from dataItemAssetId, dataItemName, role, and userCount.
Each track item object currently supports:
-
dataItemAssetId -
selectedRoles -
userCount -
optional
authScriptId
If you use a custom authenticated flow, authScriptId can be used to reference the auth script for that track item. For more on TOTP-based authenticated flows, see Use TOTP-Based MFA for Authenticated Flows in Leapwork Performance.
The top-level request body currently supports these fields:
|
Field |
Required |
Description |
|---|---|---|
|
|
Conditional |
Timeline asset ID. Provide this or |
|
|
Conditional |
Timeline name. Requires |
|
|
Conditional |
Required when you use |
|
|
No |
Data item asset ID |
|
|
No |
Data item name |
|
|
No |
Role to use when the server builds track item configs |
|
|
No |
User count to use when the server builds track item configs |
|
|
No |
Explicit per-track-item configuration |
If both an ID and a name are supplied for the same entity, the ID takes precedence.
4. Poll for completion
Use the pollResultUrl returned by runIntegration. That URL already includes the required runId and trackItemIds values.
A practical polling interval is every 5 seconds. For your overall timeout, use plannedRunTime + 300 seconds.
In-progress response
curl -s \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
"$POLL_RESULT_URL"
Example response:
{
"status": "Running"
}
Possible non-terminal statuses:
-
Authenticating -
Preparing -
Running
Terminal response
When the run completes, stops, or fails, the response includes metadata and report URLs.
Example response:
{
"status": "Finished",
"metadata": [
{
"trackItemId": "ti_001",
"metadata": [
{
"runId": "run_x7k2m",
"trackItemId": "ti_001",
"stepId": "step_001",
"title": "POST /api/login",
"errors": 0,
"requestsSent": 1500,
"totalBodyBytesSent": 0,
"totalBytesReceived": 3750000,
"min": 12,
"max": 480,
"average": 45,
"median": 38,
"p90": 80,
"p95": 120,
"p99": 250
}
]
}
],
"excelReportUrl": "https://your-rush-base-url/api/integration/downloadRunReport?runId=run_x7k2m&trackItemIds=ti_001%2Cti_002",
"aiAnalysisReportUrl": "https://your-rush-base-url/api/integration/downloadAiAnalysisReport?runId=run_x7k2m"
}
Possible terminal statuses:
-
Finished -
Stopped -
Failed
5. Download reports
Download the Excel report
curl -L \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
-o run-report.xlsx \
"$EXCEL_REPORT_URL"
The Excel report contains step-level run metrics grouped by track item.
Download the combined AI analysis report
curl -L \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
-o ai-analysis.txt \
"$AI_ANALYSIS_REPORT_URL"
If AI analysis for a track item is not yet available, the combined report can include guidance to call the per-track-item endpoint directly.
Download AI analysis for one track item
curl -L \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
-o trackitem-ai-analysis.txt \
"$BASE_URL/api/integration/getAiAnalysis?runId=run_x7k2m&trackItemId=ti_001"
Example output format:
=== AI Analysis for: ti_001 ===
Login Flow
- Response times stayed stable for most of the run.
- No meaningful error spike was detected.
6. Stop an active run
curl -s \
-H "Authorization: X-API-KEY $RUSH_API_KEY" \
"$BASE_URL/api/integration/stopIntegration?runId=run_x7k2m"
Example response:
"Stopped run run_x7k2m"
After stopping a run, call pollResultUrl again to retrieve the final status and any available report URLs.
Common error responses
|
Status |
Example reason |
|---|---|
|
|
Missing, invalid, expired, or revoked API key |
|
|
Integration is not enabled in your environment |
|
|
Missing required request fields, unknown timeline, unknown data item, or unknown run |
Example 400 responses:
"Either timelineAssetId or timelineName must be provided"
"projectId is required when using timelineName"
"No timeline found with name 'Checkout Load Test'"