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

Отримайте список усіх опублікованих шаблонів у вашому акаунті 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": "Не авторизовано"
}

Отримання шаблону

Отримати шаблон за ідентифікатором з повним вмістом та всіма іншими версіями (шаблони з тим самим псевдонімом).

GET/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. Шаблони автоматично публікуються, якщо псевдонім ще не існує; в іншому випадку вони залишаються як чернетки.

POST/templates

Тіло запиту

namestringRequired

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

aliasstringRequired

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

fromstring

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

subjectstring

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

reply_tostring | string[]

Одна адреса електронної пошти або масив адрес для відповіді.

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Необов’язкове, має бути дійсною адресою(ами) електронної пошти
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 тестування: Створіть кілька версій шаблону та публікуйте різні версії для тестування ефективності.
  • Відкат змін: Швидко поверніться до попередньої версії, опублікувавши старіший шаблон.
  • Тестове середовище: Створюйте нові версії як чернетки, тестуйте їх та публікуйте, коли вони готові.
Локалізовано за допомогою ШІ