const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>'})
};
fetch('https://blackbox.dasha.ai/api/v1/agents/{agentId}/clone', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://blackbox.dasha.ai/api/v1/agents/{agentId}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>"
}
'import requests
url = "https://blackbox.dasha.ai/api/v1/agents/{agentId}/clone"
payload = { "name": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"agentId": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Clone agent
Creates a copy of an existing agent with a new name. The clone inherits the source agent’s complete configuration (voice, TTS, LLM, features, webhooks, tools) but is always created in a disabled state and without inbound SIP config to avoid phone number routing conflicts.
What is copied:
- Voice and TTS configuration
- LLM and STT configuration
- Features (transfer settings, recording, ambient noise, RAG, etc.)
- Webhooks and MCP connections
- Custom tools
- Outbound SIP configuration
- Schedule
- AdditionalData (default prompt variables)
What is NOT copied:
- Inbound SIP config — each agent requires its own dedicated SIP endpoint; assign a phone number separately after cloning
- The clone is always created with
isEnabled: falseregardless of the source agent’s state
Response: Returns only the new agent ID. Use the Get agent endpoint to retrieve the full configuration.
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>'})
};
fetch('https://blackbox.dasha.ai/api/v1/agents/{agentId}/clone', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://blackbox.dasha.ai/api/v1/agents/{agentId}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>"
}
'import requests
url = "https://blackbox.dasha.ai/api/v1/agents/{agentId}/clone"
payload = { "name": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"agentId": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Path Parameters
Source agent identifier to clone
Body
Clone request containing the new agent name
Request to clone an existing agent with a new name. The clone is created with the source agent's configuration but with inbound SIP config excluded to avoid routing conflicts.
Display name for the cloned agent.
1 - 100Response
Agent cloned successfully, returns new agent ID
Result of a successful agent clone operation. Contains only the new agent identifier — fetch the full agent using the Get agent endpoint if the complete configuration is needed.
Unique identifier of the newly created agent clone.
Was this page helpful?