Communications
Clone an auto-email set
Copies the tenant set and all active tenant templates transactionally; copied templates retain their content, triggers, disabled state and other settings. Optional name is trimmed and truncated to255, otherwise Copy of source name. Journey-library sets are unavailable when the organization hides them from legacy auto pages. Returns the new set under both emailset and data and records one clone activity. Does not send email or assign the new set to programs. Requires permission: one of manage_email.
POST
/
admin
/
auto_emails
/
emailset
/
{emailset_id}
/
clone
Clone an auto-email set
curl --request POST \
--url https://api.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Education emails copy"
}
'import requests
url = "https://api.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/clone"
payload = { "name": "Education emails copy" }
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: 'Education emails copy'})
};
fetch('https://api.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/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.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/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' => 'Education emails copy'
]),
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.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/clone"
payload := strings.NewReader("{\n \"name\": \"Education emails copy\"\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.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Education emails copy\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/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\": \"Education emails copy\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Auto email set cloned successfully",
"status": "success",
"template_count": 12,
"emailset": {
"id": 42,
"client_id": 42,
"name": "Education emails",
"from": "team@example.org",
"deleted_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z"
},
"data": {
"id": 42,
"client_id": 42,
"name": "Education emails",
"from": "team@example.org",
"deleted_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z"
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
bearerAuthapiKeyAuth
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Emailset id in the current organization.
Body
application/json
Validated request fields for this operation.
Maximum string length:
255Example:
"Education emails copy"
⌘I
Clone an auto-email set
curl --request POST \
--url https://api.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Education emails copy"
}
'import requests
url = "https://api.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/clone"
payload = { "name": "Education emails copy" }
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: 'Education emails copy'})
};
fetch('https://api.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/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.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/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' => 'Education emails copy'
]),
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.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/clone"
payload := strings.NewReader("{\n \"name\": \"Education emails copy\"\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.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Education emails copy\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/auto_emails/emailset/{emailset_id}/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\": \"Education emails copy\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Auto email set cloned successfully",
"status": "success",
"template_count": 12,
"emailset": {
"id": 42,
"client_id": 42,
"name": "Education emails",
"from": "team@example.org",
"deleted_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z"
},
"data": {
"id": 42,
"client_id": 42,
"name": "Education emails",
"from": "team@example.org",
"deleted_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z"
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}