Список шаблонов

Получите список всех опубликованных шаблонов в вашем аккаунте Emailit. Возвращаются только шаблоны с установленным значением published_at. Содержимое (html/text) исключается из списка.

GET/templates

Параметры запроса

per_pageinteger

Количество элементов на странице (1-100). По умолчанию: 25.

pageinteger

Номер страницы (минимум: 1). По умолчанию: 1.

filter[name]string

Фильтр по названию (частичное совпадение).

filter[alias]string

Фильтр по псевдониму (точное совпадение).

filter[editor]string

Фильтр по типу редактора: html, tiptap или dragit.

sortstring

Поле для сортировки: name, alias, created_at, updated_at или published_at. По умолчанию: created_at.

orderstring

Порядок сортировки: asc или desc. По умолчанию: 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 "Ошибка 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": "Приветственное письмо",
  "alias": "welcome-email",
  "from": "Поддержка <support@company.com>",
  "subject": "Добро пожаловать в наш сервис!",
  "reply_to": ["support@company.com"],
  "editor": "html",
  "published_at": "2025-12-24T10:30:00.000000Z",
  "preview_url": "https://cdn.company.com/previews/welcome.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": "Не авторизован"
}

Получение шаблона

Получить шаблон по ID с полным содержимым и всеми другими версиями (шаблоны с тем же псевдонимом).

GET/templates/:id

Параметры пути

idstringRequired

ID шаблона (например, 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 "Ошибка 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": "Приветственное письмо v1",
"alias": "welcome-email",
"from": "Поддержка <support@company.com>",
"subject": "Добро пожаловать!",
"reply_to": ["support@company.com"],
"html": "<h1>Добро пожаловать!</h1>",
"text": "Добро пожаловать!",
"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": "Приветственное письмо v2",
    "published_at": null,
    "created_at": "2025-12-24T11:00:00.000000Z",
    "updated_at": "2025-12-24T11:00:00.000000Z"
  }
]
}
}
{
"message": "Шаблон не найден"
}

Основные концепции

Группировка по псевдониму

Шаблоны с одинаковым alias являются версиями одного и того же шаблона. При получении шаблона по ID массив versions включает все остальные шаблоны с тем же псевдонимом.

Публикация

Только один шаблон на псевдоним может быть опубликован одновременно. У опубликованного шаблона поле published_at содержит временную метку. У черновиков published_at равно null.

Создание шаблона

Создайте новый шаблон через API Emailit. Шаблоны автоматически публикуются, если псевдоним еще не существует; в противном случае они остаются черновиками.

POST/templates

Тело запроса

namestringRequired

Название шаблона. Максимум 191 символ.

aliasstringRequired

Псевдоним шаблона для группировки версий. Должен содержать только строчные буквы (a-z), цифры (0-9), подчеркивания (_) и дефисы (-). Шаблон: ^[a-z0-9_-]+$. Максимум 191 символ.

fromstring

Адрес отправителя в формате RFC (например, Имя <email@domain.com>). Максимум 191 символ.

subjectstring

Тема письма. Максимум 191 символ.

reply_tostring | string[]

Один email или массив email-адресов для ответа.

htmlstring

HTML-содержимое шаблона письма.

textstring

Текстовое содержимое шаблона письма.

editorstring

Тип редактора: html (по умолчанию), tiptap или 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: 'Приветственное письмо',
alias: 'welcome-email',
from: 'Поддержка <support@company.com>',
subject: 'Добро пожаловать в наш сервис!',
reply_to: ['support@company.com'],
html: '<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>',
text: 'Добро пожаловать! Спасибо, что присоединились к нам.',
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' => 'Приветственное письмо',
'alias' => 'welcome-email',
'from' => 'Поддержка <support@company.com>',
'subject' => 'Добро пожаловать в наш сервис!',
'reply_to' => ['support@company.com'],
'html' => '<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>',
'text' => 'Добро пожаловать! Спасибо, что присоединились к нам.',
'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 "Ошибка 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': 'Приветственное письмо',
    'alias': 'welcome-email',
    'from': 'Поддержка <support@company.com>',
    'subject': 'Добро пожаловать в наш сервис!',
    'reply_to': ['support@company.com'],
    'html': '<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>',
    'text': 'Добро пожаловать! Спасибо, что присоединились к нам.',
    '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: 'Приветственное письмо',
alias: 'welcome-email',
from: 'Поддержка <support@company.com>',
subject: 'Добро пожаловать в наш сервис!',
reply_to: ['support@company.com'],
html: '<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>',
text: 'Добро пожаловать! Спасибо, что присоединились к нам.',
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": "Приветственное письмо",
    "alias": "welcome-email",
    "from": "Поддержка <support@company.com>",
    "subject": "Добро пожаловать в наш сервис!",
    "reply_to": []string{"support@company.com"},
    "html": "<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>",
    "text": "Добро пожаловать! Спасибо, что присоединились к нам.",
    "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": "Приветственное письмо",
        "alias": "welcome-email",
        "from": "Поддержка <support@company.com>",
        "subject": "Добро пожаловать в наш сервис!",
        "reply_to": ["support@company.com"],
        "html": "<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>",
        "text": "Добро пожаловать! Спасибо, что присоединились к нам.",
        "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": "Приветственное письмо",
            "alias": "welcome-email",
            "from": "Поддержка <support@company.com>",
            "subject": "Добро пожаловать в наш сервис!",
            "reply_to": ["support@company.com"],
            "html": "<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>",
            "text": "Добро пожаловать! Спасибо, что присоединились к нам.",
            "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 = "Приветственное письмо",
            alias = "welcome-email",
            from = "Поддержка <support@company.com>",
            subject = "Добро пожаловать в наш сервис!",
            reply_to = new[] { "support@company.com" },
            html = "<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>",
            text = "Добро пожаловать! Спасибо, что присоединились к нам.",
            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": "Приветственное письмо",
"alias": "welcome-email",
"from": "Поддержка <support@company.com>",
"subject": "Добро пожаловать в наш сервис!",
"reply_to": ["support@company.com"],
"html": "<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>",
"text": "Добро пожаловать! Спасибо, что присоединились к нам.",
"editor": "html"
}'
{
"data": {
"id": "tem_47TaFwzJx6mD7NeJYvLjFxVwbgT",
"name": "Приветственное письмо",
"alias": "welcome-email",
"from": "Поддержка <support@company.com>",
"subject": "Добро пожаловать в наш сервис!",
"reply_to": ["support@company.com"],
"html": "<h1>Добро пожаловать!</h1><p>Спасибо, что присоединились к нам.</p>",
"text": "Добро пожаловать! Спасибо, что присоединились к нам.",
"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": "Шаблон успешно создан."
}
{
"message": "Ошибка валидации",
"errors": {
"name": ["Название обязательно для заполнения"],
"alias": ["Псевдоним должен содержать только строчные буквы (a-z), цифры (0-9), подчеркивания (_) и дефисы (-)"]
}
}

Автоматическая публикация

  • Новый псевдоним: Когда вы создаете шаблон с псевдонимом, который еще не существует, шаблон автоматически публикуется (устанавливается published_at).
  • Существующий псевдоним: Когда вы создаете шаблон с псевдонимом, для которого уже есть шаблоны, новый шаблон сохраняется как черновик (published_at равно null). Вы можете опубликовать его позже, используя эндпоинт Публикация шаблона.

Правила валидации

ПолеПравила
nameОбязательное, максимум 191 символ
aliasОбязательное, максимум 191 символ, шаблон: ^[a-z0-9_-]+$
fromНеобязательное, максимум 191 символ
subjectНеобязательное, максимум 191 символ
reply_toНеобязательное, должен быть валидным email(ами)
editorНеобязательное, должно быть html, tiptap или dragit

Обновление шаблона

Обновите существующий шаблон через API Emailit. Все поля являются необязательными. Данный эндпоинт не изменяет статус published_at.

POST/templates/:id

Параметры пути

idstringRequired

Идентификатор шаблона (например, tem_47TaFwzJx6mD7NeJYvLjFxVwbgT).

Тело запроса (все поля необязательные)

namestring

Название шаблона. Максимум 191 символ.

aliasstring

Псевдоним шаблона. Должен быть уникальным при изменении. Может содержать только строчные буквы (a-z), цифры (0-9), подчёркивания (_) и дефисы (-). Максимум 191 символ.

fromstring

Адрес отправителя в формате RFC. Максимум 191 символ.

subjectstring

Тема письма. Максимум 191 символ.

reply_tostring | string[]

Адрес(а) для ответа.

htmlstring

HTML-содержимое шаблона письма.

textstring

Текстовое содержимое шаблона письма.

editorstring

Тип редактора: html, tiptap или 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: 'Приветственное письмо - Обновлено',
subject: 'Добро пожаловать! Мы рады, что вы с нами'
})
});

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' => 'Приветственное письмо - Обновлено',
'subject' => 'Добро пожаловать! Мы рады, что вы с нами'
]),
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 "Ошибка 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': 'Приветственное письмо - Обновлено',
    'subject': 'Добро пожаловать! Мы рады, что вы с нами'
}
)

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: 'Приветственное письмо - Обновлено',
subject: 'Добро пожаловать! Мы рады, что вы с нами'
}.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": "Приветственное письмо - Обновлено",
    "subject": "Добро пожаловать! Мы рады, что вы с нами",
}

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": "Приветственное письмо - Обновлено",
        "subject": "Добро пожаловать! Мы рады, что вы с нами"
    }))
    .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": "Приветственное письмо - Обновлено",
            "subject": "Добро пожаловать! Мы рады, что вы с нами"
        }
        """;
    
    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 = "Приветственное письмо - Обновлено",
            subject = "Добро пожаловать! Мы рады, что вы с нами"
        };
        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": "Приветственное письмо - Обновлено",
"subject": "Добро пожаловать! Мы рады, что вы с нами"
}'
{
"data": {
"id": "tem_47TaFwzJx6mD7NeJYvLjFxVwbgT",
"name": "Приветственное письмо - Обновлено",
"alias": "welcome-email",
"from": "Поддержка <support@company.com>",
"subject": "Добро пожаловать! Мы рады, что вы с нами",
"reply_to": ["support@company.com"],
"html": "<h1>Добро пожаловать!</h1>",
"text": "Добро пожаловать!",
"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": "Шаблон успешно обновлён."
}
{
"message": "Ошибка валидации",
"errors": {
"alias": ["Псевдоним уже существует"]
}
}
{
"message": "Шаблон не найден"
}

Важные замечания

  • Обновление шаблона не изменяет его статус published_at. Опубликованный шаблон остаётся опубликованным, а черновик остаётся черновиком.
  • При изменении alias на уже существующий вы получите ошибку валидации.
  • Для публикации черновика шаблона используйте эндпоинт Публикация шаблона.

Удаление шаблона

Удалите шаблон из вашего аккаунта Emailit.

DELETE/templates/:id

Параметры пути

idstringRequired

Идентификатор шаблона (например, 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 "Ошибка 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": "Шаблон успешно удален."
}
{
"message": "Шаблон не найден"
}

Важные замечания

  • Удаление опубликованного шаблона: Если вы удалите опубликованный шаблон для псевдонима, никакой шаблон не будет опубликован для этого псевдонима до тех пор, пока вы не опубликуете другую версию с помощью метода Публикация шаблона.
  • Удаление черновика: Удаление черновика шаблона никак не влияет на текущий опубликованный шаблон для этого псевдонима.
  • Это действие необратимо. Шаблон и его содержимое будут удалены безвозвратно.

Публикация шаблона

Опубликовать шаблон и автоматически снять с публикации все остальные шаблоны с тем же псевдонимом. В любой момент времени может быть опубликован только один шаблон на псевдоним.

POST/templates/:id/publish

Параметры пути

idstringRequired

Идентификатор шаблона (например, tem_47TaFwzJx6mD7NeJYvLjFxVwbgT).

Тело запроса

Пустое тело (параметры не требуются).

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 "Ошибка 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": "Приветственное письмо v2",
"alias": "welcome-email",
"from": "Поддержка <support@company.com>",
"subject": "Добро пожаловать! Обновленная версия",
"reply_to": ["support@company.com"],
"html": "<h1>Добро пожаловать v2!</h1>",
"text": "Добро пожаловать 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": "Шаблон успешно опубликован."
}
{
"message": "Шаблон не найден"
}

Как работает публикация

При публикации шаблона:

  1. Целевой шаблон получает временную метку published_at, установленную на текущее время.
  2. Все остальные шаблоны с тем же псевдонимом получают значение published_at равное null (снимаются с публикации).

Это гарантирует, что только один шаблон на псевдоним всегда опубликован, что упрощает управление версиями шаблонов и переключение между ними.

Сценарии использования

  • A/B тестирование: Создавайте несколько версий шаблона и публикуйте разные версии для тестирования эффективности.
  • Откат изменений: Быстро возвращайтесь к предыдущей версии, публикуя более старый шаблон.
  • Промежуточная среда: Создавайте новые версии как черновики, тестируйте их и публикуйте, когда они готовы.
Локализовано с помощью ИИ