Update a flow variant
Updates a variant’s title, persona, environment, brief, preceded-by link or expectations. Omitted fields are left alone; additionalExpectations replaces the set wholesale rather than appending. Making it the flow’s default is a separate call, since that also demotes the current default.
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 simulationCustomerFlowVariant = await client.simulationCustomerFlowVariant.update(
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
{ flowId: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' },
);
console.log(simulationCustomerFlowVariant.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_customer_flow_variant = client.simulation_customer_flow_variant.update(
variant_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(simulation_customer_flow_variant.data)curl --request PUT \
--url https://api.roark.ai/v1/simulation/customer-flow/{flowId}/variant/{variantId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"personaId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environmentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"prompt": "<string>",
"precededByCustomerFlowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"precededByCustomerFlowVariantId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"additionalExpectations": [
{
"llmPrompt": "<string>"
}
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.roark.ai/v1/simulation/customer-flow/{flowId}/variant/{variantId}",
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([
'title' => '<string>',
'personaId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'environmentId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'prompt' => '<string>',
'precededByCustomerFlowId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'precededByCustomerFlowVariantId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'additionalExpectations' => [
[
'llmPrompt' => '<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/customer-flow/{flowId}/variant/{variantId}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"personaId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environmentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"prompt\": \"<string>\",\n \"precededByCustomerFlowId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"precededByCustomerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"additionalExpectations\": [\n {\n \"llmPrompt\": \"<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/customer-flow/{flowId}/variant/{variantId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"personaId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environmentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"prompt\": \"<string>\",\n \"precededByCustomerFlowId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"precededByCustomerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"additionalExpectations\": [\n {\n \"llmPrompt\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roark.ai/v1/simulation/customer-flow/{flowId}/variant/{variantId}")
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 \"title\": \"<string>\",\n \"personaId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environmentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"prompt\": \"<string>\",\n \"precededByCustomerFlowId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"precededByCustomerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"additionalExpectations\": [\n {\n \"llmPrompt\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customerFlowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"isDefault": false,
"personaId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environmentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"latestPathId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"precededByCustomerFlowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"precededByCustomerFlowVariantId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"isGenerated": false,
"isAutoGeneratedTitle": false,
"createdAt": "<string>",
"updatedAt": "<string>",
"additionalExpectations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"llmPrompt": "<string>",
"orderIndex": 0,
"sourceStepNodeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"prompt": "<string>"
}
}{
"type": "validation",
"code": "invalid_parameter",
"message": "The request was invalid",
"param": "email"
}{
"type": "authentication",
"code": "unauthorized",
"message": "Authentication required"
}{
"type": "forbidden",
"code": "permission_denied",
"message": "You do not have permission to access this resource"
}{
"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.
Body
Fields to change on a variant. Omitted fields are left alone. Making a variant the default is a separate operation, since it also demotes the current default.
1Replaces the expectations that apply to this variant on top of the flow's. Omit to leave them alone, send [] to clear. Unscripted flows only: a scripted variant's expectations come from the agent turns on its path and are rewritten on the next step edit.
Show child attributes
Show child attributes
Response
The updated variant
One way of running a flow. Exactly one variant per flow is the default; the others inherit its persona and environment wherever they leave those unset. On a scripted flow each variant is bound to one path through the graph and the path engine owns that binding.
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 simulationCustomerFlowVariant = await client.simulationCustomerFlowVariant.update(
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
{ flowId: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' },
);
console.log(simulationCustomerFlowVariant.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_customer_flow_variant = client.simulation_customer_flow_variant.update(
variant_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(simulation_customer_flow_variant.data)curl --request PUT \
--url https://api.roark.ai/v1/simulation/customer-flow/{flowId}/variant/{variantId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"personaId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environmentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"prompt": "<string>",
"precededByCustomerFlowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"precededByCustomerFlowVariantId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"additionalExpectations": [
{
"llmPrompt": "<string>"
}
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.roark.ai/v1/simulation/customer-flow/{flowId}/variant/{variantId}",
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([
'title' => '<string>',
'personaId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'environmentId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'prompt' => '<string>',
'precededByCustomerFlowId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'precededByCustomerFlowVariantId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'additionalExpectations' => [
[
'llmPrompt' => '<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/customer-flow/{flowId}/variant/{variantId}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"personaId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environmentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"prompt\": \"<string>\",\n \"precededByCustomerFlowId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"precededByCustomerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"additionalExpectations\": [\n {\n \"llmPrompt\": \"<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/customer-flow/{flowId}/variant/{variantId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"personaId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environmentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"prompt\": \"<string>\",\n \"precededByCustomerFlowId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"precededByCustomerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"additionalExpectations\": [\n {\n \"llmPrompt\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roark.ai/v1/simulation/customer-flow/{flowId}/variant/{variantId}")
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 \"title\": \"<string>\",\n \"personaId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environmentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"prompt\": \"<string>\",\n \"precededByCustomerFlowId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"precededByCustomerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"additionalExpectations\": [\n {\n \"llmPrompt\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customerFlowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"isDefault": false,
"personaId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environmentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"latestPathId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"precededByCustomerFlowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"precededByCustomerFlowVariantId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"isGenerated": false,
"isAutoGeneratedTitle": false,
"createdAt": "<string>",
"updatedAt": "<string>",
"additionalExpectations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"llmPrompt": "<string>",
"orderIndex": 0,
"sourceStepNodeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"prompt": "<string>"
}
}{
"type": "validation",
"code": "invalid_parameter",
"message": "The request was invalid",
"param": "email"
}{
"type": "authentication",
"code": "unauthorized",
"message": "Authentication required"
}{
"type": "forbidden",
"code": "permission_denied",
"message": "You do not have permission to access this resource"
}{
"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"
}