Email Components
Duplicate Email Component
Copy an email component into a new component.
POST
/
api
/
v1
/
email-components
/
{componentId}
/
duplicate
Duplicate Email Component
curl --request POST \
--url https://api.sequenzy.com/api/v1/email-components/{componentId}/duplicate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/email-components/{componentId}/duplicate"
payload = { "name": "<string>" }
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: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/email-components/{componentId}/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.sequenzy.com/api/v1/email-components/{componentId}/duplicate",
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' => '<string>'
]),
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.sequenzy.com/api/v1/email-components/{componentId}/duplicate"
payload := strings.NewReader("{\n \"name\": \"<string>\"\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.sequenzy.com/api/v1/email-components/{componentId}/duplicate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-components/{componentId}/duplicate")
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\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"component": {
"id": "cmp_456",
"companyId": "comp_123",
"name": "Promo banner (winter)",
"description": "Seasonal banner",
"blocks": [
{
"id": "intro",
"type": "text",
"content": "<p>Spring sale</p>",
"variant": "paragraph"
}
],
"componentType": "section",
"defaultSlot": null,
"version": 1,
"createdAt": "2026-10-22T10:00:00.000Z",
"updatedAt": "2026-10-22T10:00:00.000Z"
}
}
{
"success": false,
"error": "name cannot be empty"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "Component not found"
}
{
"success": false,
"error": "A component with this name already exists"
}
You can copy a component to make a variant of it without changing the original. The copy gets the same description, type and blocks, and starts at version 1.
Without a
name, the copy is called “Promo banner (Copy)”, or “Promo banner (Copy 2)” and so on when that name is taken. Copying a copy keeps one “(Copy N)” suffix.
The copy is never pinned as a default. Duplicating the default footer gives you a regular component to edit, and the default footer stays as it is.
Request
string
required
ID of the component to copy.
string
Name for the copy, up to 255 characters. Names are unique within your company. Omit it to use the default copy name.
curl -X POST "https://api.sequenzy.com/api/v1/email-components/cmp_123/duplicate" \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Promo banner (winter)" }'
Responses
{
"success": true,
"component": {
"id": "cmp_456",
"companyId": "comp_123",
"name": "Promo banner (winter)",
"description": "Seasonal banner",
"blocks": [
{
"id": "intro",
"type": "text",
"content": "<p>Spring sale</p>",
"variant": "paragraph"
}
],
"componentType": "section",
"defaultSlot": null,
"version": 1,
"createdAt": "2026-10-22T10:00:00.000Z",
"updatedAt": "2026-10-22T10:00:00.000Z"
}
}
{
"success": false,
"error": "name cannot be empty"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "Component not found"
}
{
"success": false,
"error": "A component with this name already exists"
}
⌘I
Duplicate Email Component
curl --request POST \
--url https://api.sequenzy.com/api/v1/email-components/{componentId}/duplicate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/email-components/{componentId}/duplicate"
payload = { "name": "<string>" }
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: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/email-components/{componentId}/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.sequenzy.com/api/v1/email-components/{componentId}/duplicate",
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' => '<string>'
]),
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.sequenzy.com/api/v1/email-components/{componentId}/duplicate"
payload := strings.NewReader("{\n \"name\": \"<string>\"\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.sequenzy.com/api/v1/email-components/{componentId}/duplicate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-components/{componentId}/duplicate")
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\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"component": {
"id": "cmp_456",
"companyId": "comp_123",
"name": "Promo banner (winter)",
"description": "Seasonal banner",
"blocks": [
{
"id": "intro",
"type": "text",
"content": "<p>Spring sale</p>",
"variant": "paragraph"
}
],
"componentType": "section",
"defaultSlot": null,
"version": 1,
"createdAt": "2026-10-22T10:00:00.000Z",
"updatedAt": "2026-10-22T10:00:00.000Z"
}
}
{
"success": false,
"error": "name cannot be empty"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "Component not found"
}
{
"success": false,
"error": "A component with this name already exists"
}