Список шаблонів
Отримайте список усіх опублікованих шаблонів у вашому акаунті Emailit. Повертаються лише шаблони з встановленим published_at. Вміст (html/text) не включається в список.
/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": "Не авторизовано"
} Отримання шаблону
Отримати шаблон за ідентифікатором з повним вмістом та всіма іншими версіями (шаблони з тим самим псевдонімом).
/templates/:idПараметри шляху
idstringRequiredІдентифікатор шаблону (наприклад, 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 є версіями одного шаблону. Коли ви отримуєте шаблон за ідентифікатором, масив versions містить усі інші шаблони, які мають той самий псевдонім.
Публікація
Лише один шаблон на псевдонім може бути опублікований одночасно. Опублікований шаблон має непорожню мітку часу published_at. Чернетки мають published_at встановлений як null.
Створення шаблону
Створіть новий шаблон через API Emailit. Шаблони автоматично публікуються, якщо псевдонім ще не існує; в іншому випадку вони залишаються як чернетки.
/templatesТіло запиту
namestringRequiredНазва шаблону. Максимум 191 символ.
aliasstringRequiredПсевдонім шаблону для групування версій. Може містити лише малі літери (a-z), цифри (0-9), підкреслення (_) та дефіси (-). Шаблон: ^[a-z0-9_-]+$. Максимум 191 символ.
fromstringАдреса відправника у форматі RFC (наприклад, Ім'я <email@domain.com>). Максимум 191 символ.
subjectstringТема листа. Максимум 191 символ.
reply_tostring | string[]Одна адреса електронної пошти або масив адрес для відповіді.
htmlstringHTML-вміст для шаблону листа.
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 | Необов’язкове, має бути дійсною адресою(ами) електронної пошти |
editor | Необов’язкове, має бути html, tiptap або dragit |
Оновлення шаблону
Оновіть існуючий шаблон через API Emailit. Усі поля є необов’язковими. Цей ендпоінт не змінює статус published_at.
/templates/:idПараметри шляху
idstringRequiredІдентифікатор шаблону (наприклад, tem_47TaFwzJx6mD7NeJYvLjFxVwbgT).
Тіло запиту (усі поля необов’язкові)
namestringНазва шаблону. Максимум 191 символ.
aliasstringПсевдонім шаблону. Має бути унікальним при зміні. Може містити лише малі літери (a-z), цифри (0-9), підкреслення (_) та дефіси (-). Максимум 191 символ.
fromstringАдреса відправника у форматі RFC. Максимум 191 символ.
subjectstringТема листа. Максимум 191 символ.
reply_tostring | string[]Адреса(и) для відповіді.
htmlstringHTML-вміст для шаблону листа.
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.
/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": "Шаблон не знайдено"
} Важливі зауваження
- Видалення опублікованого шаблону: Якщо ви видалите опублікований шаблон для псевдоніма, жоден шаблон не буде опублікований для цього псевдоніма, доки ви не опублікуєте іншу версію за допомогою ендпоінту Публікація шаблону.
- Видалення чернетки: Видалення чернетки шаблону не впливає на поточний опублікований шаблон для цього псевдоніма.
- Ця дія є незворотною. Шаблон та його вміст будуть видалені назавжди.
Публікація шаблону
Опублікувати шаблон та автоматично скасувати публікацію всіх інших шаблонів з тим самим псевдонімом. Одночасно може бути опублікований лише один шаблон для кожного псевдоніма.
/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": "Шаблон не знайдено"
} Як працює публікація
Коли ви публікуєте шаблон:
- Цільовий шаблон отримує мітку часу
published_at, встановлену на поточний час. - Усі інші шаблони з тим самим псевдонімом мають своє поле
published_atвстановлене наnull(скасування публікації).
Це гарантує, що лише один шаблон на псевдонім завжди опублікований, що спрощує керування версіями шаблонів та перемикання між ними.
Сценарії використання
- A/B тестування: Створіть кілька версій шаблону та публікуйте різні версії для тестування ефективності.
- Відкат змін: Швидко поверніться до попередньої версії, опублікувавши старіший шаблон.
- Тестове середовище: Створюйте нові версії як чернетки, тестуйте їх та публікуйте, коли вони готові.