Listar Templates
Recupera uma lista de todos os templates publicados na sua conta Emailit. Apenas templates com published_at definido são retornados. O conteúdo (html/texto) é excluído da visualização em lista.
/templatesParâmetros de Consulta
per_pageintegerItens por página (1-100). Padrão: 25.
pageintegerNúmero da página (mínimo: 1). Padrão: 1.
filter[name]stringFiltrar por nome (correspondência parcial).
filter[alias]stringFiltrar por alias (correspondência exata).
filter[editor]stringFiltrar por tipo de editor: html, tiptap, ou dragit.
sortstringCampo de ordenação: name, alias, created_at, updated_at, ou published_at. Padrão: created_at.
orderstringOrdem de classificação: asc ou desc. Padrão: desc.
const response = await fetch('https://api.emailit.com/v2/templates?page=1&per_page=25', {
method: 'GET',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});
const result = await response.json(); <?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/templates?page=1&per_page=25',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "Erro cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
} import requests
response = requests.get(
'https://api.emailit.com/v2/templates',
params={
'page': 1,
'per_page': 25
},
headers={
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
)
result = response.json()
print(result) require 'net/http'
require 'json'
uri = URI('https://api.emailit.com/v2/templates?page=1&per_page=25')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'
response = http.request(request)
result = JSON.parse(response.body)
puts result package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
baseURL := "https://api.emailit.com/v2/templates"
params := url.Values{}
params.Add("page", "1")
params.Add("per_page", "25")
fullURL := baseURL + "?" + params.Encode()
req, _ := http.NewRequest("GET", fullURL, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
} use reqwest;
use serde_json::Value;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();
let response = client
.get("https://api.emailit.com/v2/templates")
.query(&[("page", "1"), ("per_page", "25")])
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.send()
.await?;
let result: Value = response.json().await?;
println!("{:?}", result);
Ok(())
} import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class ListTemplates {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.emailit.com/v2/templates?page=1&per_page=25"))
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
} using System;
using System.Net.Http;
using System.Threading.Tasks;
public class ListTemplates
{
public static async Task Main()
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization",
"Bearer em_test_51RxCWJ...vS00p61e0qRE");
var response = await client.GetAsync(
"https://api.emailit.com/v2/templates?page=1&per_page=25");
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
} curl -X GET "https://api.emailit.com/v2/templates?page=1&per_page=25" \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json" {
"data": [
{
"id": "tem_47TaFwzJx6mD7NeJYvLjFxVwbgT",
"name": "E-mail de Boas-vindas",
"alias": "email-boas-vindas",
"from": "Suporte <suporte@empresa.com>",
"subject": "Bem-vindo ao nosso serviço!",
"reply_to": ["suporte@empresa.com"],
"editor": "html",
"published_at": "2025-12-24T10:30:00.000000Z",
"preview_url": "https://cdn.empresa.com/previews/boas-vindas.png",
"total_versions": 3,
"created_at": "2025-12-24T09:00:00.000000Z",
"updated_at": "2025-12-24T10:30:00.000000Z"
}
],
"total_records": 10,
"per_page": 25,
"current_page": 1,
"total_pages": 1
} {
"message": "Não autorizado"
} Obter Template
Recupera um template por ID com conteúdo completo e todas as outras versões (templates com o mesmo alias).
/templates/:idParâmetros de Rota
idstringRequiredID do template (ex.: tem_47TaFwzJx6mD7NeJYvLjFxVwbgT).
const response = await fetch('https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT', {
method: 'GET',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});
const result = await response.json(); <?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "Erro cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
} import requests
response = requests.get(
'https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT',
headers={
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
)
result = response.json()
print(result) require 'net/http'
require 'json'
uri = URI('https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'
response = http.request(request)
result = JSON.parse(response.body)
puts result package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
} use reqwest;
use serde_json::Value;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();
let response = client
.get("https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT")
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.send()
.await?;
let result: Value = response.json().await?;
println!("{:?}", result);
Ok(())
} import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class GetTemplate {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT"))
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
} using System;
using System.Net.Http;
using System.Threading.Tasks;
public class GetTemplate
{
public static async Task Main()
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization",
"Bearer em_test_51RxCWJ...vS00p61e0qRE");
var response = await client.GetAsync(
"https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT");
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
} curl -X GET "https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT" \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json" {
"data": {
"id": "tem_47TaFwzJx6mD7NeJYvLjFxVwbgT",
"name": "E-mail de Boas-vindas v1",
"alias": "welcome-email",
"from": "Suporte <support@company.com>",
"subject": "Bem-vindo!",
"reply_to": ["support@company.com"],
"html": "<h1>Bem-vindo!</h1>",
"text": "Bem-vindo!",
"editor": "html",
"published_at": "2025-12-24T10:30:00.000000Z",
"preview_url": "https://cdn.company.com/previews/welcome.png",
"created_at": "2025-12-24T09:00:00.000000Z",
"updated_at": "2025-12-24T10:30:00.000000Z",
"versions": [
{
"id": "tem_anotherOidHere123456789",
"name": "E-mail de Boas-vindas v2",
"published_at": null,
"created_at": "2025-12-24T11:00:00.000000Z",
"updated_at": "2025-12-24T11:00:00.000000Z"
}
]
}
} {
"message": "Template não encontrado"
} Conceitos Principais
Agrupamento por Alias
Templates com o mesmo alias são versões do mesmo template. Quando você busca um template por ID, o array versions inclui todos os outros templates que compartilham o mesmo alias.
Publicação
Apenas um template por alias pode estar publicado por vez. O template publicado possui um timestamp não-nulo em published_at. Templates em rascunho têm published_at definido como null.
Criar Template
Crie um novo template através da API do Emailit. Os templates são publicados automaticamente se o alias ainda não existir; caso contrário, permanecem como rascunhos.
/templatesCorpo da Requisição
namestringRequiredNome do template. Máximo de 191 caracteres.
aliasstringRequiredAlias do template para agrupar versões. Deve conter apenas letras minúsculas (a-z), números (0-9), sublinhados (_) e hífens (-). Padrão: ^[a-z0-9_-]+$. Máximo de 191 caracteres.
fromstringEndereço de email do remetente no formato RFC (ex.: Nome <email@dominio.com>). Máximo de 191 caracteres.
subjectstringLinha de assunto do email. Máximo de 191 caracteres.
reply_tostring | string[]Email único ou array de endereços de email para resposta.
htmlstringConteúdo HTML para o template de email.
textstringConteúdo em texto simples para o template de email.
editorstringTipo de editor: html (padrão), tiptap ou dragit.
const response = await fetch('https://api.emailit.com/v2/templates', {
method: 'POST',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Email de Boas-vindas',
alias: 'email-boas-vindas',
from: 'Suporte <suporte@empresa.com>',
subject: 'Bem-vindo ao nosso serviço!',
reply_to: ['suporte@empresa.com'],
html: '<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>',
text: 'Bem-vindo! Obrigado por se juntar a nós.',
editor: 'html'
})
});
const result = await response.json(); <?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/templates',
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' => 'Email de Boas-vindas',
'alias' => 'email-boas-vindas',
'from' => 'Suporte <suporte@empresa.com>',
'subject' => 'Bem-vindo ao nosso serviço!',
'reply_to' => ['suporte@empresa.com'],
'html' => '<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>',
'text' => 'Bem-vindo! Obrigado por se juntar a nós.',
'editor' => 'html'
]),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "Erro cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
} import requests
response = requests.post(
'https://api.emailit.com/v2/templates',
headers={
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
},
json={
'name': 'Email de Boas-vindas',
'alias': 'email-boas-vindas',
'from': 'Suporte <suporte@empresa.com>',
'subject': 'Bem-vindo ao nosso serviço!',
'reply_to': ['suporte@empresa.com'],
'html': '<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>',
'text': 'Bem-vindo! Obrigado por se juntar a nós.',
'editor': 'html'
}
)
result = response.json()
print(result) require 'net/http'
require 'json'
uri = URI('https://api.emailit.com/v2/templates')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'
request.body = {
name: 'Email de Boas-vindas',
alias: 'email-boas-vindas',
from: 'Suporte <suporte@empresa.com>',
subject: 'Bem-vindo ao nosso serviço!',
reply_to: ['suporte@empresa.com'],
html: '<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>',
text: 'Bem-vindo! Obrigado por se juntar a nós.',
editor: 'html'
}.to_json
response = http.request(request)
result = JSON.parse(response.body)
puts result package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.emailit.com/v2/templates"
data := map[string]interface{}{
"name": "Email de Boas-vindas",
"alias": "email-boas-vindas",
"from": "Suporte <suporte@empresa.com>",
"subject": "Bem-vindo ao nosso serviço!",
"reply_to": []string{"suporte@empresa.com"},
"html": "<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>",
"text": "Bem-vindo! Obrigado por se juntar a nós.",
"editor": "html",
}
jsonData, _ := json.Marshal(data)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
} use reqwest;
use serde_json::{json, Value};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();
let response = client
.post("https://api.emailit.com/v2/templates")
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.json(&json!({
"name": "Email de Boas-vindas",
"alias": "email-boas-vindas",
"from": "Suporte <suporte@empresa.com>",
"subject": "Bem-vindo ao nosso serviço!",
"reply_to": ["suporte@empresa.com"],
"html": "<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>",
"text": "Bem-vindo! Obrigado por se juntar a nós.",
"editor": "html"
}))
.send()
.await?;
let result: Value = response.json().await?;
println!("{:?}", result);
Ok(())
} import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.http.HttpRequest.BodyPublishers;
public class CreateTemplate {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
String jsonBody = """
{
"name": "Email de Boas-vindas",
"alias": "email-boas-vindas",
"from": "Suporte <suporte@empresa.com>",
"subject": "Bem-vindo ao nosso serviço!",
"reply_to": ["suporte@empresa.com"],
"html": "<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>",
"text": "Bem-vindo! Obrigado por se juntar a nós.",
"editor": "html"
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.emailit.com/v2/templates"))
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString(jsonBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
} using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
public class CreateTemplate
{
public static async Task Main()
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization",
"Bearer em_test_51RxCWJ...vS00p61e0qRE");
var data = new {
name = "Email de Boas-vindas",
alias = "email-boas-vindas",
from = "Suporte <suporte@empresa.com>",
subject = "Bem-vindo ao nosso serviço!",
reply_to = new[] { "suporte@empresa.com" },
html = "<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>",
text = "Bem-vindo! Obrigado por se juntar a nós.",
editor = "html"
};
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://api.emailit.com/v2/templates", content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
} curl -X POST https://api.emailit.com/v2/templates \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json" \
-d '{
"name": "Email de Boas-vindas",
"alias": "email-boas-vindas",
"from": "Suporte <suporte@empresa.com>",
"subject": "Bem-vindo ao nosso serviço!",
"reply_to": ["suporte@empresa.com"],
"html": "<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>",
"text": "Bem-vindo! Obrigado por se juntar a nós.",
"editor": "html"
}' {
"data": {
"id": "tem_47TaFwzJx6mD7NeJYvLjFxVwbgT",
"name": "Email de Boas-vindas",
"alias": "email-boas-vindas",
"from": "Suporte <suporte@empresa.com>",
"subject": "Bem-vindo ao nosso serviço!",
"reply_to": ["suporte@empresa.com"],
"html": "<h1>Bem-vindo!</h1><p>Obrigado por se juntar a nós.</p>",
"text": "Bem-vindo! Obrigado por se juntar a nós.",
"editor": "html",
"published_at": "2025-12-24T10:30:00.000000Z",
"preview_url": null,
"created_at": "2025-12-24T10:30:00.000000Z",
"updated_at": "2025-12-24T10:30:00.000000Z"
},
"message": "Template criado com sucesso."
} {
"message": "Falha na validação",
"errors": {
"name": ["Nome é obrigatório"],
"alias": ["Alias deve conter apenas letras minúsculas (a-z), números (0-9), sublinhados (_) e hífens (-)"]
}
} Comportamento de Publicação Automática
- Novo alias: Quando você cria um template com um alias que ainda não existe, o template é automaticamente publicado (
published_até definido). - Alias existente: Quando você cria um template com um alias que já possui templates, o novo template é salvo como rascunho (
published_aténull). Você pode publicá-lo posteriormente usando o endpoint Publicar Template.
Regras de Validação
| Campo | Regras |
|---|---|
name | Obrigatório, máx. 191 caracteres |
alias | Obrigatório, máx. 191 caracteres, padrão: ^[a-z0-9_-]+$ |
from | Opcional, máx. 191 caracteres |
subject | Opcional, máx. 191 caracteres |
reply_to | Opcional, deve ser email(s) válido(s) |
editor | Opcional, deve ser html, tiptap ou dragit |
Atualizar Template
Atualiza um template existente através da API do Emailit. Todos os campos são opcionais. Este endpoint não altera o status published_at.
/templates/:idParâmetros de Rota
idstringRequiredID do template (ex.: tem_47TaFwzJx6mD7NeJYvLjFxVwbgT).
Corpo da Requisição (todos opcionais)
namestringNome do template. Máximo de 191 caracteres.
aliasstringAlias do template. Deve ser único se alterado. Deve conter apenas letras minúsculas (a-z), números (0-9), sublinhados (_) e hífens (-). Máximo de 191 caracteres.
fromstringEndereço de email do remetente no formato RFC. Máximo de 191 caracteres.
subjectstringLinha de assunto do email. Máximo de 191 caracteres.
reply_tostring | string[]Endereço(s) de email para resposta.
htmlstringConteúdo HTML para o template de email.
textstringConteúdo em texto simples para o template de email.
editorstringTipo de editor: html, tiptap, ou dragit.
const response = await fetch('https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT', {
method: 'POST',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Email de Boas-vindas - Atualizado',
subject: 'Bem-vindo! Ficamos felizes em tê-lo conosco'
})
});
const result = await response.json(); <?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT',
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' => 'Email de Boas-vindas - Atualizado',
'subject' => 'Bem-vindo! Ficamos felizes em tê-lo conosco'
]),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "Erro cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
} import requests
response = requests.post(
'https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT',
headers={
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
},
json={
'name': 'Email de Boas-vindas - Atualizado',
'subject': 'Bem-vindo! Ficamos felizes em tê-lo conosco'
}
)
result = response.json()
print(result) require 'net/http'
require 'json'
uri = URI('https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'
request.body = {
name: 'Email de Boas-vindas - Atualizado',
subject: 'Bem-vindo! Ficamos felizes em tê-lo conosco'
}.to_json
response = http.request(request)
result = JSON.parse(response.body)
puts result package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT"
data := map[string]interface{}{
"name": "Email de Boas-vindas - Atualizado",
"subject": "Bem-vindo! Ficamos felizes em tê-lo conosco",
}
jsonData, _ := json.Marshal(data)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
} use reqwest;
use serde_json::{json, Value};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();
let response = client
.post("https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT")
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.json(&json!({
"name": "Email de Boas-vindas - Atualizado",
"subject": "Bem-vindo! Ficamos felizes em tê-lo conosco"
}))
.send()
.await?;
let result: Value = response.json().await?;
println!("{:?}", result);
Ok(())
} import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.http.HttpRequest.BodyPublishers;
public class UpdateTemplate {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
String jsonBody = """
{
"name": "Email de Boas-vindas - Atualizado",
"subject": "Bem-vindo! Ficamos felizes em tê-lo conosco"
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT"))
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString(jsonBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
} using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
public class UpdateTemplate
{
public static async Task Main()
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization",
"Bearer em_test_51RxCWJ...vS00p61e0qRE");
var data = new {
name = "Email de Boas-vindas - Atualizado",
subject = "Bem-vindo! Ficamos felizes em tê-lo conosco"
};
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT", content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
} curl -X POST https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json" \
-d '{
"name": "Email de Boas-vindas - Atualizado",
"subject": "Bem-vindo! Ficamos felizes em tê-lo conosco"
}' {
"data": {
"id": "tem_47TaFwzJx6mD7NeJYvLjFxVwbgT",
"name": "Email de Boas-vindas - Atualizado",
"alias": "welcome-email",
"from": "Suporte <suporte@empresa.com>",
"subject": "Bem-vindo! Ficamos felizes em tê-lo conosco",
"reply_to": ["suporte@empresa.com"],
"html": "<h1>Bem-vindo!</h1>",
"text": "Bem-vindo!",
"editor": "html",
"published_at": "2025-12-24T10:30:00.000000Z",
"preview_url": null,
"created_at": "2025-12-24T10:30:00.000000Z",
"updated_at": "2025-12-24T12:00:00.000000Z"
},
"message": "Template foi atualizado com sucesso."
} {
"message": "Falha na validação",
"errors": {
"alias": ["Alias já existe"]
}
} {
"message": "Template não encontrado"
} Observações Importantes
- Atualizar um template não altera seu status
published_at. Um template publicado permanece publicado, e um rascunho permanece como rascunho. - Se você alterar o
aliaspara um que já existe, receberá um erro de validação. - Para publicar um template em rascunho, use o endpoint Publicar Template.
Excluir Template
Exclua um template da sua conta Emailit.
/templates/:idParâmetros de Caminho
idstringRequiredID do template (ex.: tem_47TaFwzJx6mD7NeJYvLjFxVwbgT).
const response = await fetch('https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT', {
method: 'DELETE',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});
const result = await response.json(); <?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "Erro cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
} import requests
response = requests.delete(
'https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT',
headers={
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
)
result = response.json()
print(result) require 'net/http'
require 'json'
uri = URI('https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'
response = http.request(request)
result = JSON.parse(response.body)
puts result package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
} use reqwest;
use serde_json::Value;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();
let response = client
.delete("https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT")
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.send()
.await?;
let result: Value = response.json().await?;
println!("{:?}", result);
Ok(())
} import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class DeleteTemplate {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT"))
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.DELETE()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
} using System;
using System.Net.Http;
using System.Threading.Tasks;
public class DeleteTemplate
{
public static async Task Main()
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization",
"Bearer em_test_51RxCWJ...vS00p61e0qRE");
var response = await client.DeleteAsync(
"https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT");
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
} curl -X DELETE "https://api.emailit.com/v2/templates/tem_47TaFwzJx6mD7NeJYvLjFxVwbgT" \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json" {
"data": null,
"message": "Template foi excluído com sucesso."
} {
"message": "Template não encontrado"
} Observações Importantes
- Excluindo um template publicado: Se você excluir o template publicado de um alias, nenhum template ficará publicado para esse alias até que você publique outra versão usando o endpoint Publicar Template.
- Excluindo um rascunho: Excluir um template em rascunho não afeta o template atualmente publicado para esse alias.
- Esta ação é irreversível. O template e seu conteúdo serão excluídos permanentemente.
Publicar Template
Publica um template e automaticamente despublica todos os outros templates com o mesmo alias. Apenas um template por alias pode estar publicado por vez.
/templates/:id/publishParâmetros de Rota
idstringRequiredID do Template (ex.: tem_47TaFwzJx6mD7NeJYvLjFxVwbgT).
Corpo da Requisição
Corpo vazio (nenhum parâmetro necessário).
const response = await fetch('https://api.emailit.com/v2/templates/tem_anotherOidHere123456789/publish', {
method: 'POST',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});
const result = await response.json(); <?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/templates/tem_anotherOidHere123456789/publish',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "Erro cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
} import requests
response = requests.post(
'https://api.emailit.com/v2/templates/tem_anotherOidHere123456789/publish',
headers={
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
)
result = response.json()
print(result) require 'net/http'
require 'json'
uri = URI('https://api.emailit.com/v2/templates/tem_anotherOidHere123456789/publish')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'
response = http.request(request)
result = JSON.parse(response.body)
puts result package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.emailit.com/v2/templates/tem_anotherOidHere123456789/publish"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
} use reqwest;
use serde_json::Value;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();
let response = client
.post("https://api.emailit.com/v2/templates/tem_anotherOidHere123456789/publish")
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.send()
.await?;
let result: Value = response.json().await?;
println!("{:?}", result);
Ok(())
} import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.http.HttpRequest.BodyPublishers;
public class PublishTemplate {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.emailit.com/v2/templates/tem_anotherOidHere123456789/publish"))
.header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
.header("Content-Type", "application/json")
.POST(BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
} using System;
using System.Net.Http;
using System.Threading.Tasks;
public class PublishTemplate
{
public static async Task Main()
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization",
"Bearer em_test_51RxCWJ...vS00p61e0qRE");
var response = await client.PostAsync(
"https://api.emailit.com/v2/templates/tem_anotherOidHere123456789/publish",
null);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
} curl -X POST "https://api.emailit.com/v2/templates/tem_anotherOidHere123456789/publish" \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json" {
"data": {
"id": "tem_anotherOidHere123456789",
"name": "Email de Boas-vindas v2",
"alias": "welcome-email",
"from": "Suporte <suporte@empresa.com>",
"subject": "Bem-vindo! Versão atualizada",
"reply_to": ["suporte@empresa.com"],
"html": "<h1>Bem-vindo v2!</h1>",
"text": "Bem-vindo v2!",
"editor": "html",
"published_at": "2025-12-24T13:00:00.000000Z",
"preview_url": null,
"created_at": "2025-12-24T11:00:00.000000Z",
"updated_at": "2025-12-24T13:00:00.000000Z"
},
"message": "Template foi publicado com sucesso."
} {
"message": "Template não encontrado"
} Como Funciona a Publicação
Quando você publica um template:
- O template selecionado recebe o timestamp
published_atdefinido para o horário atual. - Todos os outros templates com o mesmo alias têm seu
published_atdefinido comonull(despublicados).
Isso garante que apenas um template por alias esteja publicado por vez, facilitando o gerenciamento de versões de templates e a alternância entre elas.
Casos de Uso
- Teste A/B: Crie múltiplas versões de um template e publique versões diferentes para testar performance.
- Rollback: Reverta rapidamente para uma versão anterior publicando um template mais antigo.
- Homologação: Crie novas versões como rascunhos, teste-as e publique quando estiverem prontas.