Подписчики

Ресурс emails. Поля подписчика:

ПолеЗначение
idНомер подписчика.
emailАдрес.
name, last_name, city, phoneИмя, фамилия, город, телефон.
telegramТелеграм. Прежнее имя skype тоже работает.
ipIP-адрес, с которого подписался.
subscribe_linkСтраница, где подписался.
dateДата подписки. При запросе с list_id дата вступления в эту группу.
status0 активен, 1 заблокирован, 2 отписался, 3 не подтвердил подписку. Письма получают только активные.
ключ своего поляЗначение своего поля, которое вы завели в кабинете. Ключи и типы: Поля подписчика.

GET/mailer/emails.json

Список подписчиков

Без list_id отдаёт всех подписчиков аккаунта, с list_id только участников группы. Поля по умолчанию: id, email. Фильтр: email, status (число), date с ключами start_date и end_date. Сортировка: email, date, status.

Свои поля и фамилия приходят так же, как у одного подписчика: если перечислить их в fields, в каждой строке {"emails":[{…},{…}]}.

curl -G https://v1.estismail.com/mailer/emails.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" \
  -d list_id=12345 \
  --data-urlencode 'fields=["id","email","status","date"]' \
  --data-urlencode 'filter={"status":0}'
Ответ 200
{
  "emails": [
    {
      "id": 67890,
      "email": "anna@example.com",
      "date": 1760000000,
      "status": 0
    }
  ]
}

GET/mailer/emails/{id}.json

Один подписчик

Принимает fields и list_id: с ним date будет датой вступления в группу.

В fields можно перечислить ключи своих полей ("crm_id") или "custom_fields", тогда придут все ваши поля, а также "last_name", "telegram", "subscribe_url", "subscribe_date". Поле приходит тем именем, которым его спросили. Если значения нет, приходит null. Без этих имён в fields ответ прежний.

curl -G https://v1.estismail.com/mailer/emails/67890.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" \
  --data-urlencode 'fields=["id","email","name","status","date"]'
Ответ 200
{
  "id": 67890,
  "email": "anna@example.com",
  "name": "Анна",
  "date": 1760000000,
  "status": 0
}

Со своими полями и фамилией

curl -G https://v1.estismail.com/mailer/emails/267950001.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" \
  --data-urlencode 'fields=["id","email","name","last_name","custom_fields"]'
Ответ 200
{
  "id": 267950001,
  "name": "Олена",
  "email": "olena@example.com",
  "last_name": "Коваленко-Бойко",
  "crm_id": "A-2001",
  "birthday": null
}

POST/mailer/emails.json

Добавить подписчика в группу

ПараметрЗначение
email обязательныйАдрес подписчика.
list_id обязательныйНомер вашей группы.
name, city, phoneИмя, город, телефон.
last_nameФамилия, до 250 знаков.
telegramТелеграм, до 100 знаков. Прежнее имя skype тоже работает.
ipIP-адрес подписчика.
subscribe_urlСтраница, где подписался. Без неё берётся адрес из группы. Прежнее имя subscribe_link тоже работает.
ключ своего поляЗначение по правилам типа поля, раздел Поля подписчика.
activation_letter0 добавить без письма «подтвердите подписку»: новый адрес сразу активен (отписавшийся и заблокированный, как и раньше, только через письмо). Только на тарифах Premium и Enterprise; на Free письмо уходит всегда. Без параметра письмо уходит на любом тарифе. Много адресов без письма за раз: импорт, ниже в этом разделе.
skype_update1 записать новый Телеграм, если подписчик уже есть.
  • Нового адреса нет в аккаунте: он сохраняется со статусом 3, ему уходит письмо «подтвердите подписку»; после подтверждения статус 0.
  • Адрес уже активен: он сразу входит в группу, письма нет.
  • Адрес отписался или заблокирован: он входит в группу только через письмо подтверждения.
  • Адрес в вашем чёрном списке: ответ 201, но адрес остаётся заблокированным.
  • Адрес уже активен в этой группе: ошибка 20142.

Как записываются поля:

  • Новому адресу записывается всё переданное.
  • Если адрес уже есть у вас в другой группе, он встаёт в группу, а переданные непустые имя, фамилия, город, телефон, Телеграм и свои поля перезаписываются.
  • Пустое значение своего поля в POST пропускается и ничего не стирает (стирает PUT).
  • Если адрес активен и уже стоит в этой группе, ответ 400 20142, как раньше, и ничего не записано.

Ключи и значения проверяются до записи: на неизвестный ключ ответ 20147, на неверное значение 20148. Если подписчик сохранён, а значения своих полей записать не удалось (сбой базы), ответ 400 20149 с номером подписчика: адрес добавлен, повторите поля запросом PUT /mailer/emails/{id}.

curl https://v1.estismail.com/mailer/emails.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" \
  -d email=anna@example.com -d list_id=12345 -d name="Анна"
Ответ 201: номер подписчика
{"id":67890}

С фамилией и своими полями, тело в JSON

curl -X POST https://v1.estismail.com/mailer/emails.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{"email":"olena@example.com","list_id":134472,"name":"Олена","last_name":"Коваленко",
       "crm_id":"A-1042","birthday":"1990-05-17","activation_letter":0}'
Ответ 201
{"id":267950001}

POST/mailer/imports.json

Импорт: до 1000 адресов за запрос

Тот же путь, что импорт файла в кабинете: адреса встают в очередь импорта и добавляются в группу в течение нескольких минут, без писем подтверждения. Неверные адреса, повторы, адреса из чёрного списка и уже состоящие в группе пропускаются. Не ввозятся и одноразовые адреса, и адреса доменов без почты (у домена нет ни MX, ни A). Явные опечатки популярных доменов исправляются: gmial.com станет gmail.com.

Поля чистятся так же, как при импорте файла: из имени, города, телефона и Телеграма убираются знаки = ' " / \, переводы строк и табуляция; текст обрезается до 250 знаков, Телеграм до 100. IP принимается только вида IPv4, иначе остаётся пустым. В телефоне из одних цифр плюс в начале не сохраняется; телефон с пробелами остаётся как есть.

ПараметрЗначение
list_id обязательныйНомер вашей группы. Группа на проверке модератором импорт не принимает.
emails обязательныйJSON-массив от 1 до 1000 элементов. Элемент: адрес строкой или объект с полями email, name, last_name (фамилия), city, phone, ip, telegram (то же, что skype) и свои поля по ключу.

Если в аккаунте нет доверенного импорта и тариф не Enterprise, группа уходит на проверку модератором, как после импорта файла в кабинете; рассылать по ней можно после одобрения.

Как записываются свои поля и фамилия:

  • Значения своих полей пишутся новым подписчикам и тем, кто уже был у вас и добавлен импортом в группу.
  • Кто уже стоял в этой группе, импорт пропускает целиком, как раньше; поменять поля таким подписчикам можно пачкой PUT /mailer/emails.
  • Пустое значение не пишется.
  • Обратная косая черта \ в значениях своих полей при импорте вырезается.

Проверка идёт до создания импорта: на неизвестный ключ в строке N ответ 400 21004, на неверное значение 21005. Импорт тогда не создаётся.

curl https://v1.estismail.com/mailer/imports.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" \
  -d list_id=12345 \
  --data-urlencode 'emails=["anna@example.com",{"email":"oleg@example.com","name":"Олег","city":"Прага"}]'
Ответ 201: номер импорта
{"id":19230}

С фамилией и своими полями, тело в JSON

curl -X POST https://v1.estismail.com/mailer/imports.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{"list_id":134472,"emails":[
        {"email":"anna@example.com","name":"Анна","last_name":"Коваль","crm_id":"A-3001"},
        "oleg@example.com"
      ]}'
Ответ 201: номер импорта, дальше GET /mailer/imports/19300.json, как раньше
{"id":19300}

GET/mailer/imports/{id}.json

Состояние импорта

status: queued в очереди, processing идёт, done готово (в added сколько адресов добавлено), error не удалось. moderation: группа на проверке модератором.

У готового импорта ещё fixed_domains: сколько адресов добавлено с исправленной опечаткой в домене, и skipped: сколько не ввезено и почему. no_mail у домена нет почты, disposable одноразовый адрес, invalid неверный адрес, duplicates повтор в списке или уже в группе, blacklist в чёрном списке.

curl https://v1.estismail.com/mailer/imports/19230.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ"
Ответ 200
{
  "id": 19230,
  "list_id": 12345,
  "status": "done",
  "moderation": false,
  "added": 2,
  "fixed_domains": 1,
  "skipped": {
    "no_mail": 1,
    "disposable": 0,
    "invalid": 0,
    "duplicates": 0,
    "blacklist": 0
  }
}

PUT/mailer/emails/{id}.json

Изменить данные подписчика

Меняются name, last_name, city, phone, telegram (или skype) и свои поля по ключу. Адрес и статус через API не меняются.

  • Переданное значение записывается, пустая строка стирает значение, null и поле без ключа в запросе не меняются.
  • Можно передать только свои поля или только фамилию: ответ 204.
  • На неизвестный ключ ответ 20161, на неверное значение 20162. Обычные и свои поля записываются вместе: при ошибке в любом из них ничего не записано.

Обычные текстовые поля (name, last_name, city, phone, telegram) записываются по одному правилу, и в правке одного подписчика, и в пачке:

  • таб, перевод строки и другие управляющие знаки заменяются пробелом, пробелы по краям убираются;
  • значение длиннее поля обрезается: 250 знаков, у Телеграма 100;
  • массив, объект, true/false или текст не в UTF-8 дают ошибку значения, ничего не записано.
curl -X PUT https://v1.estismail.com/mailer/emails/67890.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" \
  -d city="Берлин"

Ответ 204, без тела

Фамилия и свои поля, тело в JSON

curl -X PUT https://v1.estismail.com/mailer/emails/267950001.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{"last_name":"Коваленко-Бойко","crm_id":"A-2001","birthday":""}'

Ответ 204, без тела. Здесь birthday стёрт пустой строкой.

PUT/mailer/emails.json

Изменить поля пачкой: до 1000 подписчиков

Меняет поля уже загруженным подписчикам: до 1000 за запрос.

  • Тело запроса в JSON (Content-Type: application/json), до 1 МБ. В виде формы пачка не пройдёт: сервер принимает не больше 1000 параметров формы.
  • emails содержит массив. Каждая строка массива указывает подписчика (id или email) и что поменять: name, last_name, city, phone, telegram (или skype) и свои поля по ключу.
  • Значения записываются так же, как при правке одного подписчика: пустая строка стирает значение, null и поле без ключа в строке ничего не меняют, обычные текстовые поля чистятся и обрезаются по одному правилу.
  • Группы, состояние подписчика и IP не меняются, писем нет.
  • Сначала проверяется вся пачка: при ошибке в любой строке ответ 400 20164 с номером строки, и ничего не записано. Записывается одной транзакцией: всё или ничего.
  • Подписчики, которых у вас нет, пропускаются и возвращаются в not_found так, как вы их передали.
curl -X PUT https://v1.estismail.com/mailer/emails.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{"emails":[
        {"email":"olena@example.com","city":"Прага","crm_id":"A-1042"},
        {"id":267950002,"last_name":"Шевченко","birthday":"1985-01-30"},
        {"email":"nobody@example.com","city":"Берлин"}
      ]}'
Ответ 200
{
  "updated": 2,
  "not_found": [
    "nobody@example.com"
  ]
}

DELETE/mailer/emails/{id}.json

Удалить подписчика

  • С list_id в теле запроса подписчик выходит из этой группы. Если больше он нигде не состоит, он удаляется из аккаунта целиком.
  • Без list_id подписчик удаляется из аккаунта целиком: из всех групп, с данными полей.
curl -X DELETE https://v1.estismail.com/mailer/emails/67890.json \
  -H "X-Estis-Auth: ВАШ_КЛЮЧ" \
  -d list_id=12345

Ответ 204, без тела. Ответ 503 или 500: удаление не выполнено, повторите через несколько секунд.

Вопросы по API: support@estismail.com