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.

GET/templates

Parâmetros de Consulta

per_pageinteger

Itens por página (1-100). Padrão: 25.

pageinteger

Número da página (mínimo: 1). Padrão: 1.

filter[name]string

Filtrar por nome (correspondência parcial).

filter[alias]string

Filtrar por alias (correspondência exata).

filter[editor]string

Filtrar por tipo de editor: html, tiptap, ou dragit.

sortstring

Campo de ordenação: name, alias, created_at, updated_at, ou published_at. Padrão: created_at.

orderstring

Ordem 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).

GET/templates/:id

Parâmetros de Rota

idstringRequired

ID 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.

POST/templates

Corpo da Requisição

namestringRequired

Nome do template. Máximo de 191 caracteres.

aliasstringRequired

Alias 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.

fromstring

Endereço de email do remetente no formato RFC (ex.: Nome <email@dominio.com>). Máximo de 191 caracteres.

subjectstring

Linha de assunto do email. Máximo de 191 caracteres.

reply_tostring | string[]

Email único ou array de endereços de email para resposta.

htmlstring

Conteúdo HTML para o template de email.

textstring

Conteúdo em texto simples para o template de email.

editorstring

Tipo 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

CampoRegras
nameObrigatório, máx. 191 caracteres
aliasObrigatório, máx. 191 caracteres, padrão: ^[a-z0-9_-]+$
fromOpcional, máx. 191 caracteres
subjectOpcional, máx. 191 caracteres
reply_toOpcional, deve ser email(s) válido(s)
editorOpcional, 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.

POST/templates/:id

Parâmetros de Rota

idstringRequired

ID do template (ex.: tem_47TaFwzJx6mD7NeJYvLjFxVwbgT).

Corpo da Requisição (todos opcionais)

namestring

Nome do template. Máximo de 191 caracteres.

aliasstring

Alias 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.

fromstring

Endereço de email do remetente no formato RFC. Máximo de 191 caracteres.

subjectstring

Linha de assunto do email. Máximo de 191 caracteres.

reply_tostring | string[]

Endereço(s) de email para resposta.

htmlstring

Conteúdo HTML para o template de email.

textstring

Conteúdo em texto simples para o template de email.

editorstring

Tipo 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 alias para 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.

DELETE/templates/:id

Parâmetros de Caminho

idstringRequired

ID 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.

POST/templates/:id/publish

Parâmetros de Rota

idstringRequired

ID 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:

  1. O template selecionado recebe o timestamp published_at definido para o horário atual.
  2. Todos os outros templates com o mesmo alias têm seu published_at definido como null (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.
Localizado por IA