Email Components
Create Email Component
Create a reusable email component from a block list.
POST
/
api
/
v1
/
email-components
Create Email Component
curl --request POST \
--url https://api.sequenzy.com/api/v1/email-components \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"blocks": [
{}
],
"description": "<string>",
"componentType": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/email-components"
payload = {
"name": "<string>",
"blocks": [{}],
"description": "<string>",
"componentType": "<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>',
blocks: [{}],
description: '<string>',
componentType: '<string>'
})
};
fetch('https://api.sequenzy.com/api/v1/email-components', 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",
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>',
'blocks' => [
[
]
],
'description' => '<string>',
'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"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"description\": \"<string>\",\n \"componentType\": \"<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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"description\": \"<string>\",\n \"componentType\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-components")
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 \"blocks\": [\n {}\n ],\n \"description\": \"<string>\",\n \"componentType\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"component": {
"id": "cmp_123",
"companyId": "comp_123",
"name": "Promo banner",
"description": null,
"blocks": [{ "id": "block_1", "type": "text", "content": "<p>Sale</p>" }],
"componentType": "section",
"defaultSlot": null,
"version": 1,
"createdAt": "2026-08-12T11:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z"
}
}
{
"success": false,
"error": "At least one block is required"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "A component with this name already exists"
}
Create Email Component
You can save a block group as a reusable component. Component names are unique per company.Creating a component with
componentType: "footer" does not pin it as the
company default footer. Use Set Default Email
Component for that.Request
string
required
Component name, unique within the company.
array
required
Blocks that make up the component. Must contain at least one block.
string
Optional human-readable description.
string
section (default) or footer.curl -X POST "https://api.sequenzy.com/api/v1/email-components" \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Promo banner","blocks":[{"type":"text","content":"<p>Sale</p>"}]}'
Responses
{
"success": true,
"component": {
"id": "cmp_123",
"companyId": "comp_123",
"name": "Promo banner",
"description": null,
"blocks": [{ "id": "block_1", "type": "text", "content": "<p>Sale</p>" }],
"componentType": "section",
"defaultSlot": null,
"version": 1,
"createdAt": "2026-08-12T11:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z"
}
}
{
"success": false,
"error": "At least one block is required"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "A component with this name already exists"
}
⌘I
Create Email Component
curl --request POST \
--url https://api.sequenzy.com/api/v1/email-components \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"blocks": [
{}
],
"description": "<string>",
"componentType": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/email-components"
payload = {
"name": "<string>",
"blocks": [{}],
"description": "<string>",
"componentType": "<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>',
blocks: [{}],
description: '<string>',
componentType: '<string>'
})
};
fetch('https://api.sequenzy.com/api/v1/email-components', 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",
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>',
'blocks' => [
[
]
],
'description' => '<string>',
'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"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"description\": \"<string>\",\n \"componentType\": \"<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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"description\": \"<string>\",\n \"componentType\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-components")
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 \"blocks\": [\n {}\n ],\n \"description\": \"<string>\",\n \"componentType\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"component": {
"id": "cmp_123",
"companyId": "comp_123",
"name": "Promo banner",
"description": null,
"blocks": [{ "id": "block_1", "type": "text", "content": "<p>Sale</p>" }],
"componentType": "section",
"defaultSlot": null,
"version": 1,
"createdAt": "2026-08-12T11:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z"
}
}
{
"success": false,
"error": "At least one block is required"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "A component with this name already exists"
}