curl --request POST \
--url https://api-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Agente clon - Cobranza",
"description": "Copia operativa para ajustes por campaña",
"status": "inactive",
"versionId": "4c01f8ad-9ae5-4b20-98af-9559a2899a21",
"clone": [
"instructions",
"tools",
"webhooks",
"businessHours",
"businessHourExceptions",
"triggers"
]
}
'import requests
url = "https://api-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone"
payload = {
"name": "Agente clon - Cobranza",
"description": "Copia operativa para ajustes por campaña",
"status": "inactive",
"versionId": "4c01f8ad-9ae5-4b20-98af-9559a2899a21",
"clone": ["instructions", "tools", "webhooks", "businessHours", "businessHourExceptions", "triggers"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Agente clon - Cobranza',
description: 'Copia operativa para ajustes por campaña',
status: 'inactive',
versionId: '4c01f8ad-9ae5-4b20-98af-9559a2899a21',
clone: [
'instructions',
'tools',
'webhooks',
'businessHours',
'businessHourExceptions',
'triggers'
]
})
};
fetch('https://api-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone', 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-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone",
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([
'name' => 'Agente clon - Cobranza',
'description' => 'Copia operativa para ajustes por campaña',
'status' => 'inactive',
'versionId' => '4c01f8ad-9ae5-4b20-98af-9559a2899a21',
'clone' => [
'instructions',
'tools',
'webhooks',
'businessHours',
'businessHourExceptions',
'triggers'
]
]),
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-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone"
payload := strings.NewReader("{\n \"name\": \"Agente clon - Cobranza\",\n \"description\": \"Copia operativa para ajustes por campaña\",\n \"status\": \"inactive\",\n \"versionId\": \"4c01f8ad-9ae5-4b20-98af-9559a2899a21\",\n \"clone\": [\n \"instructions\",\n \"tools\",\n \"webhooks\",\n \"businessHours\",\n \"businessHourExceptions\",\n \"triggers\"\n ]\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-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Agente clon - Cobranza\",\n \"description\": \"Copia operativa para ajustes por campaña\",\n \"status\": \"inactive\",\n \"versionId\": \"4c01f8ad-9ae5-4b20-98af-9559a2899a21\",\n \"clone\": [\n \"instructions\",\n \"tools\",\n \"webhooks\",\n \"businessHours\",\n \"businessHourExceptions\",\n \"triggers\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone")
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 \"name\": \"Agente clon - Cobranza\",\n \"description\": \"Copia operativa para ajustes por campaña\",\n \"status\": \"inactive\",\n \"versionId\": \"4c01f8ad-9ae5-4b20-98af-9559a2899a21\",\n \"clone\": [\n \"instructions\",\n \"tools\",\n \"webhooks\",\n \"businessHours\",\n \"businessHourExceptions\",\n \"triggers\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"agentType": "chat",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "inactive",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"totalCalls": 1,
"totalOperationalDays": 1,
"goalAchievedPercentage": 50,
"version": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"number": 123
},
"description": "<string>",
"avatarUrl": "<string>",
"debounceDelayMs": 1,
"ownerUserId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"knowledgeBaseIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>",
"path": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>",
"path": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}Clonar un agente
Crea un nuevo agente en el workspace activo clonando selectivamente atributos desde un agente existente.
- Se debe indicar la versión origen mediante
versionId. - El array
clonecontrola qué componentes se replican. - El workflow (blueprint + stages) siempre se clona. Para incluir transiciones, agrega
triggers. - La tool connection
voice.callsno se clona: se crea una nueva conexión automáticamente durante el flujo de provisioning del agente.
curl --request POST \
--url https://api-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Agente clon - Cobranza",
"description": "Copia operativa para ajustes por campaña",
"status": "inactive",
"versionId": "4c01f8ad-9ae5-4b20-98af-9559a2899a21",
"clone": [
"instructions",
"tools",
"webhooks",
"businessHours",
"businessHourExceptions",
"triggers"
]
}
'import requests
url = "https://api-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone"
payload = {
"name": "Agente clon - Cobranza",
"description": "Copia operativa para ajustes por campaña",
"status": "inactive",
"versionId": "4c01f8ad-9ae5-4b20-98af-9559a2899a21",
"clone": ["instructions", "tools", "webhooks", "businessHours", "businessHourExceptions", "triggers"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Agente clon - Cobranza',
description: 'Copia operativa para ajustes por campaña',
status: 'inactive',
versionId: '4c01f8ad-9ae5-4b20-98af-9559a2899a21',
clone: [
'instructions',
'tools',
'webhooks',
'businessHours',
'businessHourExceptions',
'triggers'
]
})
};
fetch('https://api-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone', 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-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone",
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([
'name' => 'Agente clon - Cobranza',
'description' => 'Copia operativa para ajustes por campaña',
'status' => 'inactive',
'versionId' => '4c01f8ad-9ae5-4b20-98af-9559a2899a21',
'clone' => [
'instructions',
'tools',
'webhooks',
'businessHours',
'businessHourExceptions',
'triggers'
]
]),
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-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone"
payload := strings.NewReader("{\n \"name\": \"Agente clon - Cobranza\",\n \"description\": \"Copia operativa para ajustes por campaña\",\n \"status\": \"inactive\",\n \"versionId\": \"4c01f8ad-9ae5-4b20-98af-9559a2899a21\",\n \"clone\": [\n \"instructions\",\n \"tools\",\n \"webhooks\",\n \"businessHours\",\n \"businessHourExceptions\",\n \"triggers\"\n ]\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-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Agente clon - Cobranza\",\n \"description\": \"Copia operativa para ajustes por campaña\",\n \"status\": \"inactive\",\n \"versionId\": \"4c01f8ad-9ae5-4b20-98af-9559a2899a21\",\n \"clone\": [\n \"instructions\",\n \"tools\",\n \"webhooks\",\n \"businessHours\",\n \"businessHourExceptions\",\n \"triggers\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-prod.studio.getsupervisor.ai/v1/agents/{agentId}/clone")
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 \"name\": \"Agente clon - Cobranza\",\n \"description\": \"Copia operativa para ajustes por campaña\",\n \"status\": \"inactive\",\n \"versionId\": \"4c01f8ad-9ae5-4b20-98af-9559a2899a21\",\n \"clone\": [\n \"instructions\",\n \"tools\",\n \"webhooks\",\n \"businessHours\",\n \"businessHourExceptions\",\n \"triggers\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"agentType": "chat",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "inactive",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"totalCalls": 1,
"totalOperationalDays": 1,
"goalAchievedPercentage": 50,
"version": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"number": 123
},
"description": "<string>",
"avatarUrl": "<string>",
"debounceDelayMs": 1,
"ownerUserId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"knowledgeBaseIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>",
"path": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>",
"path": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"details": {
"subcode": "<string>",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Identificador del workspace multi-tenant. Obligatorio al autenticar con Authorization: Bearer, donde su ausencia devuelve 400 Workspace context is required. Con x-api-key es opcional: la llave ya identifica a su workspace y lo que mandes aquí se ignora.
Path Parameters
Identificador del agente
Body
Datos necesarios para clonar un agente existente dentro del workspace activo.
versionIdselecciona la versión origen desde la cual clonar blueprint/instructions.clonecontrola qué componentes adicionales se copian.- El workflow (blueprint + stages) se clona siempre;
triggershabilita copiar transiciones. - La conexión
voice.callsno se clona; se crea una nueva conexión automáticamente.
Nombre del nuevo agente.
1 - 255Identificador de la versión origen a clonar.
Componentes a clonar además del workflow (blueprint + stages).
1instructions, tools, webhooks, stages, triggers, businessHours, businessHourExceptions Descripción operativa opcional para el nuevo agente.
1000Estado inicial del agente clonado.
inactive, training, active Response
Agente clonado
chat, voice inactive, training, active, archived, building, failed Total de llamadas realizadas por el agente.
x >= 0Total de días operativos desde la creación del agente.
x >= 0Porcentaje de llamadas donde el objetivo fue alcanzado.
0 <= x <= 100La versión vigente del agente: la active si la hay y, si no, el borrador más
reciente. Es de aquí de donde sale el identificador de versión que piden las rutas
de blueprint, instrucciones y publicación — no hay un versionId plano.
Se omite cuando el agente todavía no tiene ninguna versión.
Show child attributes
Show child attributes
URL pública opcional utilizada para representar al agente.
Delay opcional antes de enviar respuestas (milisegundos).
x >= 0Las bases de conocimiento que este agente consulta durante la conversación. Vacío significa que no consulta ninguna, no que no se sepa. Es la selección del cliente, leída del mismo sitio del que la lee el sync al publicar una versión, así que no puede divergir de lo que se toma como entrada al publicar. Al publicar, el proveedor de voz recibe sólo las que además están listas y son suyas: una base a medio indexar aparece aquí y todavía no viaja.
