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 simulationToolFixture = await client.simulationToolFixture.create({
toolName: 'lookup_availability',
});
console.log(simulationToolFixture.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_tool_fixture = client.simulation_tool_fixture.create(
tool_name="lookup_availability",
)
print(simulation_tool_fixture.data)curl --request POST \
--url https://api.roark.ai/v1/simulation/tool-fixture \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"toolName": "lookup_availability",
"response": {
"slots": []
},
"customerFlowVariantId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "Forces the no-availability branch",
"enabled": true
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.roark.ai/v1/simulation/tool-fixture",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'toolName' => 'lookup_availability',
'response' => [
'slots' => [
]
],
'customerFlowVariantId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'description' => 'Forces the no-availability branch',
'enabled' => true
]),
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/tool-fixture"
payload := strings.NewReader("{\n \"toolName\": \"lookup_availability\",\n \"response\": {\n \"slots\": []\n },\n \"customerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"Forces the no-availability branch\",\n \"enabled\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.roark.ai/v1/simulation/tool-fixture")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"toolName\": \"lookup_availability\",\n \"response\": {\n \"slots\": []\n },\n \"customerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"Forces the no-availability branch\",\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roark.ai/v1/simulation/tool-fixture")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"toolName\": \"lookup_availability\",\n \"response\": {\n \"slots\": []\n },\n \"customerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"Forces the no-availability branch\",\n \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"toolName": "lookup_availability",
"customerFlowVariantId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"enabled": true,
"createdAt": "<string>",
"updatedAt": "<string>",
"response": "<unknown>"
}
}{
"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"
}Set a tool fixture
Create-or-replace by scope: one fixture per tool project-wide, plus one per (tool, flow variant). Setting the same scope twice replaces the response, so CI can apply fixtures idempotently. During Roark test calls the tool guard answers with the fixture verbatim instead of generating a response; real callers are never affected.
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 simulationToolFixture = await client.simulationToolFixture.create({
toolName: 'lookup_availability',
});
console.log(simulationToolFixture.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_tool_fixture = client.simulation_tool_fixture.create(
tool_name="lookup_availability",
)
print(simulation_tool_fixture.data)curl --request POST \
--url https://api.roark.ai/v1/simulation/tool-fixture \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"toolName": "lookup_availability",
"response": {
"slots": []
},
"customerFlowVariantId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "Forces the no-availability branch",
"enabled": true
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.roark.ai/v1/simulation/tool-fixture",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'toolName' => 'lookup_availability',
'response' => [
'slots' => [
]
],
'customerFlowVariantId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'description' => 'Forces the no-availability branch',
'enabled' => true
]),
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/tool-fixture"
payload := strings.NewReader("{\n \"toolName\": \"lookup_availability\",\n \"response\": {\n \"slots\": []\n },\n \"customerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"Forces the no-availability branch\",\n \"enabled\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.roark.ai/v1/simulation/tool-fixture")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"toolName\": \"lookup_availability\",\n \"response\": {\n \"slots\": []\n },\n \"customerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"Forces the no-availability branch\",\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roark.ai/v1/simulation/tool-fixture")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"toolName\": \"lookup_availability\",\n \"response\": {\n \"slots\": []\n },\n \"customerFlowVariantId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"Forces the no-availability branch\",\n \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"toolName": "lookup_availability",
"customerFlowVariantId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"enabled": true,
"createdAt": "<string>",
"updatedAt": "<string>",
"response": "<unknown>"
}
}{
"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
The tool this fixture answers for.
1 - 200"lookup_availability"
The exact JSON to return.
{ "slots": [] }
Pin the fixture to one flow variant (scenario). Omit for a project-wide fixture. A variant-pinned fixture beats the project-wide one.
Why this fixture exists.
1000"Forces the no-availability branch"
Defaults to true.
Response
The fixture as stored.
A deterministic tool response for Roark test calls: where the scenario-aware model makes mocked tools plausible, a fixture makes one exact, so a simulation can force the branch under test. Never applies to real callers.
Show child attributes
Show child attributes