Duplicate template
curl --request POST \
--url https://api.coval.dev/v1/templates/{template_id}/duplicate \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.coval.dev/v1/templates/{template_id}/duplicate"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.coval.dev/v1/templates/{template_id}/duplicate', 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.coval.dev/v1/templates/{template_id}/duplicate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.coval.dev/v1/templates/{template_id}/duplicate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.coval.dev/v1/templates/{template_id}/duplicate")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coval.dev/v1/templates/{template_id}/duplicate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"template": {
"id": "dup123def456ghi789jklm",
"name": "templates/dup123def456ghi789jklm",
"template_name": "Customer Support Voice Template (Copy)",
"description": "Standard voice simulation template",
"simulation_type": "SIMULATOR_VOICE",
"simulation_metadata": {
"greeting": "Hello, how can I help you?"
},
"simulated_user_prompt": "You are a customer calling about a delayed delivery...",
"agent_id": "3zfmuDbVQsi4GaseDtiVcS",
"enabled_metrics": [
"metric_abc123"
],
"persona_ids": [
"persona_xyz789"
],
"test_set_id": "testset_def456",
"iteration_count": 10,
"concurrency": 5,
"sub_sample_size": 50,
"test_case_params_by_iteration": [
{
"iteration": 1,
"params": {
"custom_field": "value1"
}
}
],
"create_time": "2025-11-03T12:00:00Z",
"update_time": null
}
}{
"error": {
"code": "INVALID_ARGUMENT",
"message": "Invalid request parameter",
"details": [
{
"field": "agent_id",
"description": "Agent not found or not accessible"
}
]
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Authentication failed",
"details": [
{
"field": "X-API-Key",
"description": "Invalid or missing API key"
}
]
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Template not found",
"details": [
{
"field": "template_id",
"description": "Template not found or not accessible by your organization"
}
]
}
}{
"error": {
"code": "INTERNAL",
"message": "Internal server error",
"details": [
{
"description": "An unexpected error occurred"
}
]
}
}Templates
Duplicate template
Create a copy of an existing template with a new ID.
The duplicated template will have:
- A new auto-generated ID
- ” (Copy)” appended to the template name
- All other fields copied from the original
POST
/
v1
/
templates
/
{template_id}
/
duplicate
Duplicate template
curl --request POST \
--url https://api.coval.dev/v1/templates/{template_id}/duplicate \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.coval.dev/v1/templates/{template_id}/duplicate"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.coval.dev/v1/templates/{template_id}/duplicate', 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.coval.dev/v1/templates/{template_id}/duplicate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.coval.dev/v1/templates/{template_id}/duplicate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.coval.dev/v1/templates/{template_id}/duplicate")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coval.dev/v1/templates/{template_id}/duplicate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"template": {
"id": "dup123def456ghi789jklm",
"name": "templates/dup123def456ghi789jklm",
"template_name": "Customer Support Voice Template (Copy)",
"description": "Standard voice simulation template",
"simulation_type": "SIMULATOR_VOICE",
"simulation_metadata": {
"greeting": "Hello, how can I help you?"
},
"simulated_user_prompt": "You are a customer calling about a delayed delivery...",
"agent_id": "3zfmuDbVQsi4GaseDtiVcS",
"enabled_metrics": [
"metric_abc123"
],
"persona_ids": [
"persona_xyz789"
],
"test_set_id": "testset_def456",
"iteration_count": 10,
"concurrency": 5,
"sub_sample_size": 50,
"test_case_params_by_iteration": [
{
"iteration": 1,
"params": {
"custom_field": "value1"
}
}
],
"create_time": "2025-11-03T12:00:00Z",
"update_time": null
}
}{
"error": {
"code": "INVALID_ARGUMENT",
"message": "Invalid request parameter",
"details": [
{
"field": "agent_id",
"description": "Agent not found or not accessible"
}
]
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Authentication failed",
"details": [
{
"field": "X-API-Key",
"description": "Invalid or missing API key"
}
]
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Template not found",
"details": [
{
"field": "template_id",
"description": "Template not found or not accessible by your organization"
}
]
}
}{
"error": {
"code": "INTERNAL",
"message": "Internal server error",
"details": [
{
"description": "An unexpected error occurred"
}
]
}
}Authorizations
API key for authentication
Path Parameters
Template resource ID to duplicate
Pattern:
^[A-Za-z0-9]{22}$Response
Template duplicated successfully
Template configuration resource for reusable simulation setups.
Templates define complete simulation configurations including agent references, customer prompts, metrics, personas, and execution parameters.
Show child attributes
Show child attributes
Was this page helpful?
⌘I