/api/v1/scenario-runsList runs#
Responses
200OKapplication/json
array of ScenarioRunDRO
run_id requiredstring · uuid
scenario_name requiredstring
statusrequiredstring
pending, running, passed, failed, cancelled.
started_at requiredstring · date-time
ended_at string · date-time · nullable
duration_ms integer · int64 · nullable
steps_executed integer · int32 · nullable
assertions_passed integer · int32 · nullable
assertions_failed integer · int32 · nullable
Request
curl "http://192.168.2.1:8080/api/v1/scenario-runs"import requests
BASE_URL = "http://192.168.2.1:8080"
response = requests.get(f"{BASE_URL}/api/v1/scenario-runs")
response.raise_for_status()
print(response.json())let base_url = "http://192.168.2.1:8080";
let response = reqwest::Client::new()
.get(format!("{base_url}/api/v1/scenario-runs"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
[
{
"run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"scenario_name": "string",
"status": "string",
"started_at": "2026-09-29T08:30:00Z",
"ended_at": "2026-09-29T08:30:00Z",
"duration_ms": 0,
"steps_executed": 0,
"assertions_passed": 0,
"assertions_failed": 0
}
]/api/v1/scenario-runs/{run_id}Get run#
Path parameters
run_id requiredstring · uuid
Run identifier
Responses
200OKapplication/json
run_id requiredstring · uuid
scenario_name requiredstring
statusrequiredstring
pending, running, passed, failed, cancelled.
started_at requiredstring · date-time
ended_at string · date-time · nullable
duration_ms integer · int64 · nullable
steps_executed integer · int32 · nullable
assertions_passed integer · int32 · nullable
assertions_failed integer · int32 · nullable
404Run not foundapplication/json
Request
curl "http://192.168.2.1:8080/api/v1/scenario-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6"import requests
BASE_URL = "http://192.168.2.1:8080"
run_id = "3fa85f64-5717-4562-b3fc-2c963f66afa6" # Run identifier
response = requests.get(f"{BASE_URL}/api/v1/scenario-runs/{run_id}")
response.raise_for_status()
print(response.json())let base_url = "http://192.168.2.1:8080";
let run_id = "3fa85f64-5717-4562-b3fc-2c963f66afa6"; // Run identifier
let response = reqwest::Client::new()
.get(format!("{base_url}/api/v1/scenario-runs/{run_id}"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{
"run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"scenario_name": "string",
"status": "string",
"started_at": "2026-09-29T08:30:00Z",
"ended_at": "2026-09-29T08:30:00Z",
"duration_ms": 0,
"steps_executed": 0,
"assertions_passed": 0,
"assertions_failed": 0
}{}/api/v1/scenario-runs/{run_id}/eventsGet run events#
Path parameters
run_id requiredstring · uuid
Run identifier
Responses
200Execution event timeline (empty while the run is still in-flight)application/json
array of ExecutionEventDRO
elapsed_ms requiredinteger · int64
event_id string · nullable
kindrequiredstring
descriptionrequiredstring
404Run not foundapplication/json
Request
curl "http://192.168.2.1:8080/api/v1/scenario-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6/events"import requests
BASE_URL = "http://192.168.2.1:8080"
run_id = "3fa85f64-5717-4562-b3fc-2c963f66afa6" # Run identifier
response = requests.get(f"{BASE_URL}/api/v1/scenario-runs/{run_id}/events")
response.raise_for_status()
print(response.json())let base_url = "http://192.168.2.1:8080";
let run_id = "3fa85f64-5717-4562-b3fc-2c963f66afa6"; // Run identifier
let response = reqwest::Client::new()
.get(format!("{base_url}/api/v1/scenario-runs/{run_id}/events"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
[
{
"elapsed_ms": 0,
"event_id": "string",
"kind": "string",
"description": "string"
}
]{}/api/v1/scenariosList#
Responses
200OKapplication/json
array of ScenarioSummaryDRO
namerequiredstring
display_name string · nullable
descriptionstring · nullable
profile_ref string · nullable
tagsrequiredarray of string
Request
curl "http://192.168.2.1:8080/api/v1/scenarios"import requests
BASE_URL = "http://192.168.2.1:8080"
response = requests.get(f"{BASE_URL}/api/v1/scenarios")
response.raise_for_status()
print(response.json())let base_url = "http://192.168.2.1:8080";
let response = reqwest::Client::new()
.get(format!("{base_url}/api/v1/scenarios"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
[
{
"name": "string",
"display_name": "string",
"description": "string",
"profile_ref": "string",
"tags": [
"string"
]
}
]/api/v1/scenarios/activeActive#
Responses
200The run in flight, or nullapplication/json
ActiveRunDRO · nullable
Request
curl "http://192.168.2.1:8080/api/v1/scenarios/active"import requests
BASE_URL = "http://192.168.2.1:8080"
response = requests.get(f"{BASE_URL}/api/v1/scenarios/active")
response.raise_for_status()
print(response.json())let base_url = "http://192.168.2.1:8080";
let response = reqwest::Client::new()
.get(format!("{base_url}/api/v1/scenarios/active"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{}/api/v1/scenarios/active/cancelCancel active#
Responses
200Stop requested — returns the run it askedapplication/json
409Nothing is runningapplication/json
Request
curl -X POST "http://192.168.2.1:8080/api/v1/scenarios/active/cancel"import requests
BASE_URL = "http://192.168.2.1:8080"
response = requests.post(f"{BASE_URL}/api/v1/scenarios/active/cancel")
response.raise_for_status()
print(response.json())let base_url = "http://192.168.2.1:8080";
let response = reqwest::Client::new()
.post(format!("{base_url}/api/v1/scenarios/active/cancel"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{}{}/api/v1/scenarios/validateValidate#
Request body application/jsonrequired
Responses
200OKapplication/json
okrequiredboolean
errorsrequiredarray of string
Request
curl -X POST "http://192.168.2.1:8080/api/v1/scenarios/validate" \
-H "Content-Type: application/json" \
-d '{}'import requests
BASE_URL = "http://192.168.2.1:8080"
response = requests.post(
f"{BASE_URL}/api/v1/scenarios/validate",
json={},
)
response.raise_for_status()
print(response.json())let base_url = "http://192.168.2.1:8080";
let response = reqwest::Client::new()
.post(format!("{base_url}/api/v1/scenarios/validate"))
.json(&serde_json::json!({}))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{
"ok": true,
"errors": [
"string"
]
}/api/v1/scenarios/{name}Get one#
Path parameters
namerequiredstring
Scenario identifier
Responses
200OKapplication/json
404Scenario not foundapplication/json
Request
curl "http://192.168.2.1:8080/api/v1/scenarios/<name>"import requests
BASE_URL = "http://192.168.2.1:8080"
name = "<name>" # Scenario identifier
response = requests.get(f"{BASE_URL}/api/v1/scenarios/{name}")
response.raise_for_status()
print(response.json())let base_url = "http://192.168.2.1:8080";
let name = "<name>"; // Scenario identifier
let response = reqwest::Client::new()
.get(format!("{base_url}/api/v1/scenarios/{name}"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{}{}/api/v1/scenarios/{name}/runRun#
Path parameters
namerequiredstring
Scenario to run
Responses
202Run started — returns a run summaryapplication/json
run_id requiredstring · uuid
scenario_name requiredstring
statusrequiredstring
pending, running, passed, failed, cancelled.
started_at requiredstring · date-time
ended_at string · date-time · nullable
duration_ms integer · int64 · nullable
steps_executed integer · int32 · nullable
assertions_passed integer · int32 · nullable
assertions_failed integer · int32 · nullable
404Scenario not foundapplication/json
Request
curl -X POST "http://192.168.2.1:8080/api/v1/scenarios/<name>/run"import requests
BASE_URL = "http://192.168.2.1:8080"
name = "<name>" # Scenario to run
response = requests.post(f"{BASE_URL}/api/v1/scenarios/{name}/run")
response.raise_for_status()
print(response.json())let base_url = "http://192.168.2.1:8080";
let name = "<name>"; // Scenario to run
let response = reqwest::Client::new()
.post(format!("{base_url}/api/v1/scenarios/{name}/run"))
.send()
.await?
.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{body:#}");Response
{
"run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"scenario_name": "string",
"status": "string",
"started_at": "2026-09-29T08:30:00Z",
"ended_at": "2026-09-29T08:30:00Z",
"duration_ms": 0,
"steps_executed": 0,
"assertions_passed": 0,
"assertions_failed": 0
}{}