Документация для разработчиков

Шаблоны писем

Сохранённая вёрстка, которую можно подставлять в новые рассылки вместо того, чтобы каждый раз передавать HTML целиком.

В DashaMail два хранилища шаблонов, и живое из них — второе:

  • Сохранённые рассылки — рассылки в статусе TEMPLATE. Это те шаблоны, которые видно в кабинете; их отдаёт отдельный эндпоинт. Вёрстку такого шаблона возвращает запрос рассылки, а меняет её обновление.
  • HTML-шаблоны — старое хранилище отдельных заготовок вёрстки, /templates. Кабинет переносит их в шаблоны-рассылки при первом же заходе в раздел «Шаблоны», поэтому у большинства аккаунтов список пуст. Создание здесь по-прежнему работает: заготовка появится в кабинете после переноса.

Подставить шаблон в рассылку можно, передав его идентификатор числом в параметре html при создании рассылки. Чтобы взять вёрстку другой рассылки, передайте tmpl<campaign_id>.

HTML-шаблоны #

GET /templates

Возвращает HTML-шаблоны аккаунта вместе с вёрсткой, от новых к старым. Это старое хранилище: кабинет переносит такие заготовки в шаблоны-рассылки, поэтому пустой ответ здесь — обычное дело, а не признак того, что шаблонов нет.

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

ПараметрТипОписание
idintegerВернуть один шаблон.
namestringНайти шаблон по точному названию.

Возможные ошибки

HTTPcodeКогда возникает
404 4 Шаблонов нет
curl -X GET 'https://api.dashamail.com/v2/templates' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/templates');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.get(
    'https://api.dashamail.com/v2/templates',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/templates', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "id": 4412,
        "name": "Базовый одноколоночный",
        "html": "<html>…</html>"
      }
    ]
  }
}

Один HTML-шаблон #

GET /templates/{id}

Возвращает один HTML-шаблон вместе с вёрсткой — так же, как список, но адресно и без перебора.

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

ПараметрТипОписание
id обязательныйintegerИдентификатор шаблона.

Возможные ошибки

HTTPcodeКогда возникает
500 28 Шаблона с таким идентификатором нет
curl -X GET 'https://api.dashamail.com/v2/templates/4412' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/templates/4412');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.get(
    'https://api.dashamail.com/v2/templates/4412',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/templates/4412', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "id": 4412,
        "name": "Базовый одноколоночный",
        "html": "<html>…</html>"
      }
    ]
  }
}

Изменить шаблон #

PUT /templates/{id}

Меняет название и вёрстку HTML-шаблона. Передавайте только то, что нужно изменить: остальные поля останутся прежними.

Рассылки, созданные на основе шаблона, не затрагиваются — вёрстка в них уже своя. Сохранённые рассылки (статус TEMPLATE) правятся не здесь, а как рассылка.

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

ПараметрТипОписание
id обязательныйintegerИдентификатор шаблона.

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

ПараметрТипОписание
namestringНовое название.
templatestringНовая HTML-вёрстка.
cloudфлагВыгрузить изображения из вёрстки в облачное хранилище DashaMail.

Что возвращается

Идентификатор изменённого шаблона.

Возможные ошибки

HTTPcodeКогда возникает
500 28 Шаблона с таким идентификатором нет
422 11 Не передано ни одного изменяемого поля
curl -X PUT 'https://api.dashamail.com/v2/templates/4412' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "Базовый одноколоночный (2026)"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/templates/4412');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'name' => 'Базовый одноколоночный (2026)',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.put(
    'https://api.dashamail.com/v2/templates/4412',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'name': 'Базовый одноколоночный (2026)',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/templates/4412', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "name": "Базовый одноколоночный (2026)"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": {
      "id": 4412
    }
  }
}

Сохранённые рассылки #

GET /templates/saved

Шаблоны аккаунта — рассылки в статусе TEMPLATE. Отдаются без вёрстки: только идентификатор, название и папка, иначе ответ распухнет на сотнях шаблонов. Вёрстку одного шаблона возвращает запрос рассылки, меняет — её обновление.

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

ПараметрТипОписание
idintegerВернуть одну запись.
namestringНайти по точному названию.

Возможные ошибки

HTTPcodeКогда возникает
404 4 Сохранённых рассылок нет
curl -X GET 'https://api.dashamail.com/v2/templates/saved' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/templates/saved');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.get(
    'https://api.dashamail.com/v2/templates/saved',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/templates/saved', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "id": 501100,
        "name": "Шаблон дайджеста",
        "folder_id": 33
      }
    ]
  }
}

Сохранить шаблон #

POST /templates

Сохраняет вёрстку как HTML-шаблон.

В template можно передать либо саму вёрстку, либо число — идентификатор рассылки, чью вёрстку нужно сохранить.

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

ПараметрТипОписание
name обязательныйstringНазвание шаблона.
template обязательныйstringHTML-вёрстка либо campaign_id числом.
body обязательныйstringСлужебный параметр запроса — продублируйте сюда значение template.
campaign_idintegerРассылка-источник вёрстки. Указывается вместе с числовым template.
cloudфлагВыгрузить изображения из вёрстки в облачное хранилище DashaMail.

Что возвращается

Идентификатор созданного шаблона.

Возможные ошибки

HTTPcodeКогда возникает
422 3 Не передан name или template
404 22 Рассылки-источника с таким campaign_id нет
curl -X POST 'https://api.dashamail.com/v2/templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "Базовый одноколоночный",
  "template": "<html><body><h1>Заголовок</h1></body></html>",
  "body": "<html><body><h1>Заголовок</h1></body></html>"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/templates');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'name' => 'Базовый одноколоночный',
            'template' => '<html><body><h1>Заголовок</h1></body></html>',
            'body' => '<html><body><h1>Заголовок</h1></body></html>',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/templates',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'name': 'Базовый одноколоночный',
        'template': '<html><body><h1>Заголовок</h1></body></html>',
        'body': '<html><body><h1>Заголовок</h1></body></html>',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/templates', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "name": "Базовый одноколоночный",
  "template": "<html><body><h1>Заголовок</h1></body></html>",
  "body": "<html><body><h1>Заголовок</h1></body></html>"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 201
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": {
      "id": 4412
    }
  }
}

Удалить шаблон #

DELETE /templates/{id}

Удаляет HTML-шаблон. Рассылки, созданные на его основе, не затрагиваются — вёрстка в них уже своя.

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

ПараметрТипОписание
id обязательныйintegerИдентификатор шаблона.

Возможные ошибки

HTTPcodeКогда возникает
500 28 Шаблона с таким идентификатором нет
curl -X DELETE 'https://api.dashamail.com/v2/templates/4412' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/templates/4412');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.delete(
    'https://api.dashamail.com/v2/templates/4412',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/templates/4412', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 204
(тело ответа пустое)

DashaMail хранит и защищает ваши данные на территории Российской Федерации

Подробнее...