Email Components
Set Default Email Component
Create or replace the company’s default component for a slot, such as the email footer.
PUT
/
api
/
v1
/
email-components
/
defaults
/
{slot}
Set Default Email Component
curl --request PUT \
--url https://api.sequenzy.com/api/v1/email-components/defaults/{slot} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"blocks": [
{}
],
"name": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/email-components/defaults/{slot}"
payload = {
"blocks": [{}],
"name": "<string>",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({blocks: [{}], name: '<string>', description: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/email-components/defaults/{slot}', 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/defaults/{slot}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'blocks' => [
[
]
],
'name' => '<string>',
'description' => '<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/defaults/{slot}"
payload := strings.NewReader("{\n \"blocks\": [\n {}\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.sequenzy.com/api/v1/email-components/defaults/{slot}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"blocks\": [\n {}\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-components/defaults/{slot}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"blocks\": [\n {}\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"component": {
"id": "cmp_123",
"companyId": "comp_123",
"name": "Default Footer",
"description": null,
"blocks": [
{
"id": "block_1",
"type": "footer",
"variant": "full",
"companyName": "Acme",
"showUnsubscribe": true
}
],
"componentType": "footer",
"defaultSlot": "footer",
"version": 4,
"createdAt": "2026-01-10T10:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z"
}
}
{
"success": false,
"error": "emailComponents.saveDefault: invalid block at 0: Unknown block type"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "A component with this name already exists"
}
Set Default Email Component
You can change the footer every new email gets by writing the company’s defaultfooter component. Sequence, campaign, and AI-generated emails clone this component when they are built, instead of the footer Sequenzy generates from your company profile.
This replaces the whole component. Read the current one with Get Default Email Component first when you only mean to change part of it.
A default footer always keeps its unsubscribe link enabled. Transactional
sends hide it at render time. Changing the default does not rewrite emails
that already exist - they keep the footer they were built with.
Request
string
required
Default slot to write. Currently only
footer.array
required
Blocks that make up the component. Must contain at least one block. Put block
styling under
styles; top-level style keys are normalized into styles.string
Component name. Defaults to
Default Footer when creating the footer
default. Names are unique per company.string
Optional human-readable description.
curl -X PUT "https://api.sequenzy.com/api/v1/email-components/defaults/footer" \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{"blocks":[{"type":"footer","variant":"full","companyName":"Acme"}]}'
Responses
{
"success": true,
"component": {
"id": "cmp_123",
"companyId": "comp_123",
"name": "Default Footer",
"description": null,
"blocks": [
{
"id": "block_1",
"type": "footer",
"variant": "full",
"companyName": "Acme",
"showUnsubscribe": true
}
],
"componentType": "footer",
"defaultSlot": "footer",
"version": 4,
"createdAt": "2026-01-10T10:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z"
}
}
{
"success": false,
"error": "emailComponents.saveDefault: invalid block at 0: Unknown block type"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "A component with this name already exists"
}
Related
⌘I
Set Default Email Component
curl --request PUT \
--url https://api.sequenzy.com/api/v1/email-components/defaults/{slot} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"blocks": [
{}
],
"name": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/email-components/defaults/{slot}"
payload = {
"blocks": [{}],
"name": "<string>",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({blocks: [{}], name: '<string>', description: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/email-components/defaults/{slot}', 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/defaults/{slot}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'blocks' => [
[
]
],
'name' => '<string>',
'description' => '<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/defaults/{slot}"
payload := strings.NewReader("{\n \"blocks\": [\n {}\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.sequenzy.com/api/v1/email-components/defaults/{slot}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"blocks\": [\n {}\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-components/defaults/{slot}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"blocks\": [\n {}\n ],\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"component": {
"id": "cmp_123",
"companyId": "comp_123",
"name": "Default Footer",
"description": null,
"blocks": [
{
"id": "block_1",
"type": "footer",
"variant": "full",
"companyName": "Acme",
"showUnsubscribe": true
}
],
"componentType": "footer",
"defaultSlot": "footer",
"version": 4,
"createdAt": "2026-01-10T10:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z"
}
}
{
"success": false,
"error": "emailComponents.saveDefault: invalid block at 0: Unknown block type"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "A component with this name already exists"
}