Update a run plan
Updates an existing simulation run plan by its ID.
import Roark from '@roarkanalytics/sdk';
const client = new Roark({
bearerToken: process.env['ROARK_API_BEARER_TOKEN'], // This is the default and can be omitted
});
const simulationRunPlan = await client.simulationRunPlan.update(
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
);
console.log(simulationRunPlan.data);import os
from roark_analytics import Roark
client = Roark(
bearer_token=os.environ.get("ROARK_API_BEARER_TOKEN"), # This is the default and can be omitted
)
simulation_run_plan = client.simulation_run_plan.update(
plan_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(simulation_run_plan.data)curl --request PUT \
--url https://api.roark.ai/v1/simulation/plan/{planId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"isHidden": true,
"name": "<string>",
"description": "<string>",
"iterationCount": 5000,
"maxConcurrentJobs": 2,
"maxSimulationDurationSeconds": 2,
"silenceTimeoutSeconds": 2,
"endCallPhrases": [
"<string>"
],
"endCallReasons": [
"<string>"
],
"scenarios": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variables": {}
}
],
"flows": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"happyPath": true,
"edgeCases": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"variables": {
"tier": "premium"
}
}
]
}
],
"personas": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"agentEndpoints": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"metrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"metricId": "<string>"
}
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.roark.ai/v1/simulation/plan/{planId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'isHidden' => true,
'name' => '<string>',
'description' => '<string>',
'iterationCount' => 5000,
'maxConcurrentJobs' => 2,
'maxSimulationDurationSeconds' => 2,
'silenceTimeoutSeconds' => 2,
'endCallPhrases' => [
'<string>'
],
'endCallReasons' => [
'<string>'
],
'scenarios' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'variables' => [
]
]
],
'flows' => [
[
'id' => '550e8400-e29b-41d4-a716-446655440000',
'happyPath' => true,
'edgeCases' => [
[
'id' => '7c9e6679-7425-40de-944b-e07fc1f90ae7',
'variables' => [
'tier' => 'premium'
]
]
]
]
],
'personas' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'agentEndpoints' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'metrics' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'slug' => '<string>',
'metricId' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.roark.ai/v1/simulation/plan/{planId}"
payload := strings.NewReader("{\n \"isHidden\": true,\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"iterationCount\": 5000,\n \"maxConcurrentJobs\": 2,\n \"maxSimulationDurationSeconds\": 2,\n \"silenceTimeoutSeconds\": 2,\n \"endCallPhrases\": [\n \"<string>\"\n ],\n \"endCallReasons\": [\n \"<string>\"\n ],\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {}\n }\n ],\n \"flows\": [\n {\n \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"happyPath\": true,\n \"edgeCases\": [\n {\n \"id\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n \"variables\": {\n \"tier\": \"premium\"\n }\n }\n ]\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.roark.ai/v1/simulation/plan/{planId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"isHidden\": true,\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"iterationCount\": 5000,\n \"maxConcurrentJobs\": 2,\n \"maxSimulationDurationSeconds\": 2,\n \"silenceTimeoutSeconds\": 2,\n \"endCallPhrases\": [\n \"<string>\"\n ],\n \"endCallReasons\": [\n \"<string>\"\n ],\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {}\n }\n ],\n \"flows\": [\n {\n \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"happyPath\": true,\n \"edgeCases\": [\n {\n \"id\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n \"variables\": {\n \"tier\": \"premium\"\n }\n }\n ]\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roark.ai/v1/simulation/plan/{planId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"isHidden\": true,\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"iterationCount\": 5000,\n \"maxConcurrentJobs\": 2,\n \"maxSimulationDurationSeconds\": 2,\n \"silenceTimeoutSeconds\": 2,\n \"endCallPhrases\": [\n \"<string>\"\n ],\n \"endCallReasons\": [\n \"<string>\"\n ],\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {}\n }\n ],\n \"flows\": [\n {\n \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"happyPath\": true,\n \"edgeCases\": [\n {\n \"id\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n \"variables\": {\n \"tier\": \"premium\"\n }\n }\n ]\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"direction": "INBOUND",
"iterationCount": 123,
"maxConcurrentJobs": 123,
"maxSimulationDurationSeconds": 123,
"silenceTimeoutSeconds": 123,
"endCallPhrases": [
"<string>"
],
"endCallReasons": [
"<string>"
],
"executionMode": "PARALLEL",
"scenarios": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variables": {
"customerName": "John Doe",
"appointmentDate": "2024-02-15"
}
}
],
"flows": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"happyPath": true,
"edgeCases": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"variables": {
"tier": "premium"
}
}
]
}
],
"personas": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"agentEndpoints": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"evaluators": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"metrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"testCaseCount": 123,
"createdAt": "<string>",
"updatedAt": "<string>",
"description": "<string>"
}
}{
"type": "validation",
"code": "invalid_parameter",
"message": "The request was invalid",
"param": "email"
}{
"type": "authentication",
"code": "unauthorized",
"message": "Authentication required"
}{
"type": "not_found",
"code": "resource_not_found",
"message": "The requested resource could not be found"
}{
"type": "rate_limit",
"code": "too_many_requests",
"message": "Rate limit exceeded"
}{
"type": "internal",
"code": "internal_error",
"message": "Internal server error"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The ID of the run plan to update
Body
Input for updating an existing simulation run plan
Whether this plan is hidden from GET /v1/simulation/plan.
A run started without saveAsPlan creates a hidden plan to carry it. Send
{ "name": "...", "isHidden": false } to keep that configuration as a reusable plan,
which is what the app does when you save a one-off run.
Name of the run plan
1Description of the run plan
Direction of the simulation (INBOUND or OUTBOUND)
INBOUND, OUTBOUND Number of iterations to run for each test case (1-10000)
1 <= x <= 10000Maximum number of concurrent simulation jobs
x >= 1Maximum duration in seconds for each simulation
x >= 1Timeout in seconds for silence detection
x >= 1Phrases that trigger end of call. Empty array disables the feature.
Semantic conditions that trigger end of call. The LLM evaluates the conversation against these conditions. Empty array disables the feature.
Execution mode (PARALLEL or SEQUENTIAL)
PARALLEL, SEQUENTIAL_SAME_RUN_PLAN, SEQUENTIAL_PROJECT Deprecated: use flows instead. Replaces the scenarios on this run plan. Omit to leave them unchanged; send an empty array to detach them all, which is how a scenario-based plan is moved over to flows.
Show child attributes
Show child attributes
Replaces the customer flows attached to this run plan. Omit to leave them unchanged; send an empty array to detach them all.
Show child attributes
Show child attributes
Personas to include in this run plan
1Show child attributes
Show child attributes
Agent endpoints to include in this run plan
1Show child attributes
Show child attributes
Metric definitions to include in this run plan. Reference each by id (UUID) or slug.
1Show child attributes
Show child attributes
Response
The updated run plan
A simulation run plan defining the test matrix
Show child attributes
Show child attributes
import Roark from '@roarkanalytics/sdk';
const client = new Roark({
bearerToken: process.env['ROARK_API_BEARER_TOKEN'], // This is the default and can be omitted
});
const simulationRunPlan = await client.simulationRunPlan.update(
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
);
console.log(simulationRunPlan.data);import os
from roark_analytics import Roark
client = Roark(
bearer_token=os.environ.get("ROARK_API_BEARER_TOKEN"), # This is the default and can be omitted
)
simulation_run_plan = client.simulation_run_plan.update(
plan_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(simulation_run_plan.data)curl --request PUT \
--url https://api.roark.ai/v1/simulation/plan/{planId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"isHidden": true,
"name": "<string>",
"description": "<string>",
"iterationCount": 5000,
"maxConcurrentJobs": 2,
"maxSimulationDurationSeconds": 2,
"silenceTimeoutSeconds": 2,
"endCallPhrases": [
"<string>"
],
"endCallReasons": [
"<string>"
],
"scenarios": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variables": {}
}
],
"flows": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"happyPath": true,
"edgeCases": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"variables": {
"tier": "premium"
}
}
]
}
],
"personas": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"agentEndpoints": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"metrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"metricId": "<string>"
}
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.roark.ai/v1/simulation/plan/{planId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'isHidden' => true,
'name' => '<string>',
'description' => '<string>',
'iterationCount' => 5000,
'maxConcurrentJobs' => 2,
'maxSimulationDurationSeconds' => 2,
'silenceTimeoutSeconds' => 2,
'endCallPhrases' => [
'<string>'
],
'endCallReasons' => [
'<string>'
],
'scenarios' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'variables' => [
]
]
],
'flows' => [
[
'id' => '550e8400-e29b-41d4-a716-446655440000',
'happyPath' => true,
'edgeCases' => [
[
'id' => '7c9e6679-7425-40de-944b-e07fc1f90ae7',
'variables' => [
'tier' => 'premium'
]
]
]
]
],
'personas' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'agentEndpoints' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'metrics' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'slug' => '<string>',
'metricId' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.roark.ai/v1/simulation/plan/{planId}"
payload := strings.NewReader("{\n \"isHidden\": true,\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"iterationCount\": 5000,\n \"maxConcurrentJobs\": 2,\n \"maxSimulationDurationSeconds\": 2,\n \"silenceTimeoutSeconds\": 2,\n \"endCallPhrases\": [\n \"<string>\"\n ],\n \"endCallReasons\": [\n \"<string>\"\n ],\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {}\n }\n ],\n \"flows\": [\n {\n \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"happyPath\": true,\n \"edgeCases\": [\n {\n \"id\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n \"variables\": {\n \"tier\": \"premium\"\n }\n }\n ]\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.roark.ai/v1/simulation/plan/{planId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"isHidden\": true,\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"iterationCount\": 5000,\n \"maxConcurrentJobs\": 2,\n \"maxSimulationDurationSeconds\": 2,\n \"silenceTimeoutSeconds\": 2,\n \"endCallPhrases\": [\n \"<string>\"\n ],\n \"endCallReasons\": [\n \"<string>\"\n ],\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {}\n }\n ],\n \"flows\": [\n {\n \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"happyPath\": true,\n \"edgeCases\": [\n {\n \"id\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n \"variables\": {\n \"tier\": \"premium\"\n }\n }\n ]\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roark.ai/v1/simulation/plan/{planId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"isHidden\": true,\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"iterationCount\": 5000,\n \"maxConcurrentJobs\": 2,\n \"maxSimulationDurationSeconds\": 2,\n \"silenceTimeoutSeconds\": 2,\n \"endCallPhrases\": [\n \"<string>\"\n ],\n \"endCallReasons\": [\n \"<string>\"\n ],\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {}\n }\n ],\n \"flows\": [\n {\n \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"happyPath\": true,\n \"edgeCases\": [\n {\n \"id\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n \"variables\": {\n \"tier\": \"premium\"\n }\n }\n ]\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"direction": "INBOUND",
"iterationCount": 123,
"maxConcurrentJobs": 123,
"maxSimulationDurationSeconds": 123,
"silenceTimeoutSeconds": 123,
"endCallPhrases": [
"<string>"
],
"endCallReasons": [
"<string>"
],
"executionMode": "PARALLEL",
"scenarios": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variables": {
"customerName": "John Doe",
"appointmentDate": "2024-02-15"
}
}
],
"flows": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"happyPath": true,
"edgeCases": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"variables": {
"tier": "premium"
}
}
]
}
],
"personas": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"agentEndpoints": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"evaluators": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"metrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"testCaseCount": 123,
"createdAt": "<string>",
"updatedAt": "<string>",
"description": "<string>"
}
}{
"type": "validation",
"code": "invalid_parameter",
"message": "The request was invalid",
"param": "email"
}{
"type": "authentication",
"code": "unauthorized",
"message": "Authentication required"
}{
"type": "not_found",
"code": "resource_not_found",
"message": "The requested resource could not be found"
}{
"type": "rate_limit",
"code": "too_many_requests",
"message": "Rate limit exceeded"
}{
"type": "internal",
"code": "internal_error",
"message": "Internal server error"
}