Preview TFU Live agent clone
Reads what copying this TFU Live agent into toLocationId would do, before you copy it. It writes nothing. inputs are the questions the copy asks. Each has the new sub-account’s options, a suggested match and a default. carried, removed, wontMove and leftToSetUp list what comes across, what is removed, what stays behind and what go-live will ask for. Each item has a code and a message. Send your answers and the fingerprint, as ifPlan, to POST /api/tfu-live-agents/{id}/clone. An input you leave out takes its default. An API key or OAuth client cannot answer create_field: pick one of the new sub-account’s fields.
Required scope: agents:write.
Required API key scope: agents:write.
GET
/
api
/
tfu-live-agents
/
{id}
/
clone
/
plan
cURL
curl --request GET \
--url https://api.teamfollowup.ai/api/tfu-live-agents/{id}/clone/plan \
--header 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.teamfollowup.ai/api/tfu-live-agents/{id}/clone/plan"
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/tfu-live-agents/{id}/clone/plan', 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/tfu-live-agents/{id}/clone/plan",
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/tfu-live-agents/{id}/clone/plan"
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/tfu-live-agents/{id}/clone/plan")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.teamfollowup.ai/api/tfu-live-agents/{id}/clone/plan")
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,
"data": {
"mode": "copy",
"fromLocationId": "loc_source",
"toLocationId": "loc_target",
"inputs": [
{
"id": "calendar:cal_a1",
"kind": "calendar",
"original": {
"id": "cal_a1",
"name": "Consultations"
},
"uses": [
{
"list": "workflow",
"workflowId": "wf_book0001",
"workflowName": "Book appointment",
"stepId": "slots",
"node": "find_slots",
"field": "calendarId"
},
{
"list": "campaign",
"path": "config.calendarId"
}
],
"options": [
{
"id": "cal_b1",
"name": "consultations"
},
{
"id": "cal_b2",
"name": "Support"
}
],
"suggested": "cal_b1",
"choices": [
"later",
"remove"
],
"default": "cal_b1",
"required": false
},
{
"id": "field:contact.custom.a_roof",
"kind": "field",
"original": {
"id": "contact.custom.a_roof",
"name": "Roof age"
},
"uses": [
{
"list": "workflow",
"workflowId": "wf_book0001",
"workflowName": "Book appointment",
"stepId": "check",
"node": "condition",
"field": "cases[c1].field"
}
],
"options": [
{
"id": "contact.custom.b_type",
"name": "Roof type"
}
],
"suggested": null,
"createField": {
"name": "Roof age",
"type": "text"
},
"choices": [
"create_field"
],
"default": null,
"required": true
}
],
"carried": [
{
"kind": "orb",
"code": "orb",
"params": {},
"message": "The orb colour is copied."
},
{
"kind": "campaign",
"code": "calling_hours_and_direction",
"params": {},
"message": "The calling hours and call direction come across."
}
],
"removed": [],
"wontMove": [
{
"code": "copy_has_no_history",
"params": {},
"message": "Calls, recordings, earlier versions, the builder chat and labels stay with the original."
}
],
"leftToSetUp": [
{
"code": "start",
"params": {
"kinds": [
"contact_created"
]
},
"message": "Pick how calls start on the new sub-account. The original starts on a new contact."
},
{
"code": "caller_id",
"params": {},
"message": "Add a caller ID."
}
],
"fingerprint": "6129c53b62eabc0a0be8290f923cb7165a8fea63f446cb237625eb8a8175268b"
}
}Authorizations
Path Parameters
Query Parameters
⌘I
cURL
curl --request GET \
--url https://api.teamfollowup.ai/api/tfu-live-agents/{id}/clone/plan \
--header 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.teamfollowup.ai/api/tfu-live-agents/{id}/clone/plan"
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/tfu-live-agents/{id}/clone/plan', 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/tfu-live-agents/{id}/clone/plan",
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/tfu-live-agents/{id}/clone/plan"
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/tfu-live-agents/{id}/clone/plan")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.teamfollowup.ai/api/tfu-live-agents/{id}/clone/plan")
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,
"data": {
"mode": "copy",
"fromLocationId": "loc_source",
"toLocationId": "loc_target",
"inputs": [
{
"id": "calendar:cal_a1",
"kind": "calendar",
"original": {
"id": "cal_a1",
"name": "Consultations"
},
"uses": [
{
"list": "workflow",
"workflowId": "wf_book0001",
"workflowName": "Book appointment",
"stepId": "slots",
"node": "find_slots",
"field": "calendarId"
},
{
"list": "campaign",
"path": "config.calendarId"
}
],
"options": [
{
"id": "cal_b1",
"name": "consultations"
},
{
"id": "cal_b2",
"name": "Support"
}
],
"suggested": "cal_b1",
"choices": [
"later",
"remove"
],
"default": "cal_b1",
"required": false
},
{
"id": "field:contact.custom.a_roof",
"kind": "field",
"original": {
"id": "contact.custom.a_roof",
"name": "Roof age"
},
"uses": [
{
"list": "workflow",
"workflowId": "wf_book0001",
"workflowName": "Book appointment",
"stepId": "check",
"node": "condition",
"field": "cases[c1].field"
}
],
"options": [
{
"id": "contact.custom.b_type",
"name": "Roof type"
}
],
"suggested": null,
"createField": {
"name": "Roof age",
"type": "text"
},
"choices": [
"create_field"
],
"default": null,
"required": true
}
],
"carried": [
{
"kind": "orb",
"code": "orb",
"params": {},
"message": "The orb colour is copied."
},
{
"kind": "campaign",
"code": "calling_hours_and_direction",
"params": {},
"message": "The calling hours and call direction come across."
}
],
"removed": [],
"wontMove": [
{
"code": "copy_has_no_history",
"params": {},
"message": "Calls, recordings, earlier versions, the builder chat and labels stay with the original."
}
],
"leftToSetUp": [
{
"code": "start",
"params": {
"kinds": [
"contact_created"
]
},
"message": "Pick how calls start on the new sub-account. The original starts on a new contact."
},
{
"code": "caller_id",
"params": {},
"message": "Add a caller ID."
}
],
"fingerprint": "6129c53b62eabc0a0be8290f923cb7165a8fea63f446cb237625eb8a8175268b"
}
}