cURL
curl --request GET \
--url https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test \
--header 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"splitTest": {
"locationId": "loc_9f7a123",
"campaignId": "campaign_speed_to_lead_123",
"primaryAgentId": "agent_1ffdb9717444d0e77346838911",
"status": "active",
"revision": 4,
"sync": {
"status": "healthy",
"failedAt": null
},
"variants": [
{
"agentId": "agent_1ffdb9717444d0e77346838911",
"name": "Speed to Lead",
"sequence": 1,
"weight": 50,
"status": "active",
"addedAt": "2026-08-14T09:12:44.318Z",
"removedAt": null,
"isPrimary": true
},
{
"agentId": "agent_7c4e1b28f0a94d6591cc2fd340",
"name": "Speed to Lead II",
"sequence": 2,
"weight": 50,
"status": "active",
"addedAt": "2026-08-20T16:04:02.771Z",
"removedAt": null,
"isPrimary": false
}
]
}
}{
"success": false,
"error": "VALIDATION",
"message": "Weights must include every active variant exactly once."
}{
"success": false,
"error": "Unauthorized",
"message": "Authentication required."
}{
"success": false,
"error": "AccessDenied",
"message": "You do not have access to this agent."
}{
"success": false,
"error": "NOT_FOUND",
"message": "This campaign does not have an Agent Split Test."
}{
"success": false,
"error": "TooManyRequests",
"message": "Too many requests, please try again later."
}{
"success": false,
"error": "InternalError",
"message": "Unexpected server error."
}Get split test
Read the Agent Split Test on the live campaign bound to this Primary Variant. Answers 404 when the agent has no live campaign, or when that campaign has never been converted to a split test.
Required API key scope: agents:read.
GET
/
api
/
agent-builder
/
agents
/
{id}
/
split-test
cURL
curl --request GET \
--url https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test \
--header 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.teamfollowup.ai/api/agent-builder/agents/{id}/split-test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"splitTest": {
"locationId": "loc_9f7a123",
"campaignId": "campaign_speed_to_lead_123",
"primaryAgentId": "agent_1ffdb9717444d0e77346838911",
"status": "active",
"revision": 4,
"sync": {
"status": "healthy",
"failedAt": null
},
"variants": [
{
"agentId": "agent_1ffdb9717444d0e77346838911",
"name": "Speed to Lead",
"sequence": 1,
"weight": 50,
"status": "active",
"addedAt": "2026-08-14T09:12:44.318Z",
"removedAt": null,
"isPrimary": true
},
{
"agentId": "agent_7c4e1b28f0a94d6591cc2fd340",
"name": "Speed to Lead II",
"sequence": 2,
"weight": 50,
"status": "active",
"addedAt": "2026-08-20T16:04:02.771Z",
"removedAt": null,
"isPrimary": false
}
]
}
}{
"success": false,
"error": "VALIDATION",
"message": "Weights must include every active variant exactly once."
}{
"success": false,
"error": "Unauthorized",
"message": "Authentication required."
}{
"success": false,
"error": "AccessDenied",
"message": "You do not have access to this agent."
}{
"success": false,
"error": "NOT_FOUND",
"message": "This campaign does not have an Agent Split Test."
}{
"success": false,
"error": "TooManyRequests",
"message": "Too many requests, please try again later."
}{
"success": false,
"error": "InternalError",
"message": "Unexpected server error."
}Authorizations
Send your API key as Authorization: Bearer YOUR_API_KEY.
Path Parameters
Agent id of the Primary Variant. Every split operation is addressed through the primary, not through a secondary variant.
Minimum string length:
1⌘I
