Email Components
Update Email Component
Update an email component’s metadata or replace its blocks.
PATCH
/
api
/
v1
/
email-components
/
{componentId}
Update Email Component
curl --request PATCH \
--url https://api.sequenzy.com/api/v1/email-components/{componentId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"blocks": [
{}
],
"componentType": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/email-components/{componentId}"
payload = {
"name": "<string>",
"description": "<string>",
"blocks": [{}],
"componentType": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
blocks: [{}],
componentType: '<string>'
})
};
fetch('https://api.sequenzy.com/api/v1/email-components/{componentId}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'blocks' => [
[
]
],
'componentType' => '<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}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"componentType\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.sequenzy.com/api/v1/email-components/{componentId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"componentType\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-components/{componentId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"componentType\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"component": {
"id": "cmp_123",
"companyId": "comp_123",
"name": "Promo banner v2",
"description": null,
"blocks": [{ "id": "block_1", "type": "text", "content": "<p>Sale</p>" }],
"componentType": "section",
"defaultSlot": null,
"version": 2,
"createdAt": "2026-01-10T10:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z"
}
}
{
"success": false,
"error": "No supported fields provided"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "Component not found"
}
{
"success": false,
"error": "A component with this name already exists"
}
Update Email Component
You can rename a component, change its description or type, or replace its blocks. Omitted fields are preserved. Replacingblocks bumps the component version. Emails that already cloned the component keep the copy they were built with; the new version applies to emails built afterwards.
Editing the component pinned as the default footer keeps its unsubscribe link
enabled, the same as writing it through the defaults route.
Request
string
required
Email component ID.
string
New component name, unique within the company.
string
New description. Send an empty string to clear it.
array
Replacement blocks. Replaces the whole block list and must contain at least
one block.
string
section or footer.curl -X PATCH "https://api.sequenzy.com/api/v1/email-components/cmp_123" \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Promo banner v2"}'
Responses
{
"success": true,
"component": {
"id": "cmp_123",
"companyId": "comp_123",
"name": "Promo banner v2",
"description": null,
"blocks": [{ "id": "block_1", "type": "text", "content": "<p>Sale</p>" }],
"componentType": "section",
"defaultSlot": null,
"version": 2,
"createdAt": "2026-01-10T10:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z"
}
}
{
"success": false,
"error": "No supported fields provided"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "Component not found"
}
{
"success": false,
"error": "A component with this name already exists"
}
⌘I
Update Email Component
curl --request PATCH \
--url https://api.sequenzy.com/api/v1/email-components/{componentId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"blocks": [
{}
],
"componentType": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/email-components/{componentId}"
payload = {
"name": "<string>",
"description": "<string>",
"blocks": [{}],
"componentType": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
blocks: [{}],
componentType: '<string>'
})
};
fetch('https://api.sequenzy.com/api/v1/email-components/{componentId}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'blocks' => [
[
]
],
'componentType' => '<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}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"componentType\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.sequenzy.com/api/v1/email-components/{componentId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"componentType\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-components/{componentId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"componentType\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"component": {
"id": "cmp_123",
"companyId": "comp_123",
"name": "Promo banner v2",
"description": null,
"blocks": [{ "id": "block_1", "type": "text", "content": "<p>Sale</p>" }],
"componentType": "section",
"defaultSlot": null,
"version": 2,
"createdAt": "2026-01-10T10:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z"
}
}
{
"success": false,
"error": "No supported fields provided"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "Component not found"
}
{
"success": false,
"error": "A component with this name already exists"
}