Templates
Set Template Localization
Create or replace a caller-supplied localized template variant
PUT
/
api
/
v1
/
templates
/
{templateId}
/
localizations
/
{locale}
Set Template Localization
curl --request PUT \
--url https://api.sequenzy.com/api/v1/templates/{templateId}/localizations/{locale} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subject": "<string>",
"previewText": "<string>",
"html": "<string>",
"blocks": [
{}
],
"keepEdits": true
}
'import requests
url = "https://api.sequenzy.com/api/v1/templates/{templateId}/localizations/{locale}"
payload = {
"subject": "<string>",
"previewText": "<string>",
"html": "<string>",
"blocks": [{}],
"keepEdits": True
}
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({
subject: '<string>',
previewText: '<string>',
html: '<string>',
blocks: [{}],
keepEdits: true
})
};
fetch('https://api.sequenzy.com/api/v1/templates/{templateId}/localizations/{locale}', 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/templates/{templateId}/localizations/{locale}",
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([
'subject' => '<string>',
'previewText' => '<string>',
'html' => '<string>',
'blocks' => [
[
]
],
'keepEdits' => true
]),
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/templates/{templateId}/localizations/{locale}"
payload := strings.NewReader("{\n \"subject\": \"<string>\",\n \"previewText\": \"<string>\",\n \"html\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"keepEdits\": true\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/templates/{templateId}/localizations/{locale}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subject\": \"<string>\",\n \"previewText\": \"<string>\",\n \"html\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"keepEdits\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/templates/{templateId}/localizations/{locale}")
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 \"subject\": \"<string>\",\n \"previewText\": \"<string>\",\n \"html\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"keepEdits\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"templateId": "email_abc123",
"localization": {
"locale": "es",
"status": "synced",
"subject": "Bienvenido",
"previewText": "Nos alegra que estés aquí",
"blocks": [
{
"id": "generated-block-id",
"type": "text",
"content": "<p>Gracias por registrarte.</p>",
"variant": "html"
}
],
"sourceHash": "f4c3...",
"lastError": null,
"syncedAt": "2026-07-14T20:00:00Z",
"editedAt": "2026-07-14T20:00:00Z",
"createdAt": "2026-07-14T20:00:00Z",
"updatedAt": "2026-07-14T20:00:00Z"
}
}
{
"error": "Locale \"es\" is not enabled for this company."
}
{
"error": "Template not found"
}
Create or replace one localized variant with your own translated content. The
locale must be enabled in the company’s localization settings and cannot be the
primary locale.
By default, the stored translation behaves as before: when automatic
translation on save is on, the next change to the original template replaces
it with a fresh AI translation. Pass
keepEdits: true to protect it like an
edit made in the dashboard. It is then marked as edited (editedAt), automatic
translation on save keeps it, and its status becomes stale when the original
changes so you can review it. An explicit
sync still retranslates it
unless you pass skipEdited: true.
Request
string
required
Template ID, transactional email ID, or transactional slug.
string
required
Enabled non-primary locale code, such as
es, fr, or pt-BR.string
required
Localized email subject line.
string
Optional localized inbox preview text.
string
Localized raw HTML. Provide exactly one of
html or blocks.array
Localized Sequenzy email blocks. Provide exactly one of
blocks or html.boolean
default:"false"
Protect this translation from automatic translation on save. Without it, any
earlier edit flag on this locale is cleared.
curl -X PUT "https://api.sequenzy.com/api/v1/templates/email_abc123/localizations/es" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": "Bienvenido",
"previewText": "Nos alegra que estés aquí",
"html": "<p>Gracias por registrarte.</p>"
}'
Response fields
string | null
When this translation was last edited in the dashboard or stored with
keepEdits: true. null means automatic translation on save may replace it.Responses
{
"success": true,
"templateId": "email_abc123",
"localization": {
"locale": "es",
"status": "synced",
"subject": "Bienvenido",
"previewText": "Nos alegra que estés aquí",
"blocks": [
{
"id": "generated-block-id",
"type": "text",
"content": "<p>Gracias por registrarte.</p>",
"variant": "html"
}
],
"sourceHash": "f4c3...",
"lastError": null,
"syncedAt": "2026-07-14T20:00:00Z",
"editedAt": "2026-07-14T20:00:00Z",
"createdAt": "2026-07-14T20:00:00Z",
"updatedAt": "2026-07-14T20:00:00Z"
}
}
{
"error": "Locale \"es\" is not enabled for this company."
}
{
"error": "Template not found"
}
⌘I
Set Template Localization
curl --request PUT \
--url https://api.sequenzy.com/api/v1/templates/{templateId}/localizations/{locale} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subject": "<string>",
"previewText": "<string>",
"html": "<string>",
"blocks": [
{}
],
"keepEdits": true
}
'import requests
url = "https://api.sequenzy.com/api/v1/templates/{templateId}/localizations/{locale}"
payload = {
"subject": "<string>",
"previewText": "<string>",
"html": "<string>",
"blocks": [{}],
"keepEdits": True
}
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({
subject: '<string>',
previewText: '<string>',
html: '<string>',
blocks: [{}],
keepEdits: true
})
};
fetch('https://api.sequenzy.com/api/v1/templates/{templateId}/localizations/{locale}', 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/templates/{templateId}/localizations/{locale}",
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([
'subject' => '<string>',
'previewText' => '<string>',
'html' => '<string>',
'blocks' => [
[
]
],
'keepEdits' => true
]),
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/templates/{templateId}/localizations/{locale}"
payload := strings.NewReader("{\n \"subject\": \"<string>\",\n \"previewText\": \"<string>\",\n \"html\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"keepEdits\": true\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/templates/{templateId}/localizations/{locale}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subject\": \"<string>\",\n \"previewText\": \"<string>\",\n \"html\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"keepEdits\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/templates/{templateId}/localizations/{locale}")
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 \"subject\": \"<string>\",\n \"previewText\": \"<string>\",\n \"html\": \"<string>\",\n \"blocks\": [\n {}\n ],\n \"keepEdits\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"templateId": "email_abc123",
"localization": {
"locale": "es",
"status": "synced",
"subject": "Bienvenido",
"previewText": "Nos alegra que estés aquí",
"blocks": [
{
"id": "generated-block-id",
"type": "text",
"content": "<p>Gracias por registrarte.</p>",
"variant": "html"
}
],
"sourceHash": "f4c3...",
"lastError": null,
"syncedAt": "2026-07-14T20:00:00Z",
"editedAt": "2026-07-14T20:00:00Z",
"createdAt": "2026-07-14T20:00:00Z",
"updatedAt": "2026-07-14T20:00:00Z"
}
}
{
"error": "Locale \"es\" is not enabled for this company."
}
{
"error": "Template not found"
}