{
    "openapi": "3.1.0",
    "info": {
        "title": "DashaMail REST API v2",
        "version": "2.0.0",
        "description": "Все методы DashaMail REST API v2. Коллекция собрана из той же\nспецификации, из которой отрисована [документация](https://dashamail.ru/api/),\nпоэтому отстать от неё не может.\n\n**Перед первым запросом** заполните переменную коллекции `api_key`:\nличный кабинет → Аккаунт → API и интеграции.\nКлюч действует от имени всего аккаунта — обращайтесь с ним как с паролем.\n\nАдрес вынесен в переменную `base_url` (`https://api.dashamail.com/v2`).\n\nНеобязательные параметры строки запроса лежат в запросах выключенными:\nвесь набор виден галочками, включается мышью, в запрос не уходит.\n\nКоды ошибок — в [справочнике](https://dashamail.ru/api/errors/)."
    },
    "servers": [
        {
            "url": "https://api.dashamail.com/v2"
        }
    ],
    "security": [
        {
            "bearerAuth": []
        },
        {
            "apiKeyQuery": []
        }
    ],
    "tags": [
        {
            "name": "Адресные базы",
            "description": "Списки подписчиков, сами подписчики, дополнительные поля, импорт, отписки и жалобы.\n\nАдресная база (list) — контейнер для подписчиков. Один и тот же email может находиться в нескольких базах; для DashaMail это разные записи со своими `member_id`.\n\nУ каждого подписчика, помимо адреса, есть до десяти (на расширенных тарифах — больше) дополнительных полей `merge_1` … `merge_N`. Их состав задаётся на уровне базы и одинаков для всех её подписчиков. Подробнее — в разделе [Дополнительные поля подписчика](https://dashamail.ru/api/conventions/#merge).\n\nВозможные состояния подписчика (`state`):\n\n- `active` — Активен, получает рассылки\n- `unsubscribed` — Отписался\n- `bounced` — Адрес недоставляем\n- `complained` — Пожаловался на спам\n- `unconfirmed` — Не подтвердил подписку (double opt-in)\n- `inactive` — Неактивен"
        },
        {
            "name": "Рассылки",
            "description": "Массовые письма по адресной базе: создание, вёрстка, запуск, пауза, вложения и папки.\n\nРассылка создаётся черновиком, наполняется содержимым и запускается переводом в статус отправки. Отдельного метода «отправить» нет — запуск выполняется через [изменение рассылки](https://dashamail.ru/api/campaigns/#update-campaign).\n\n**Жизненный цикл**\n\n```\nPOST /campaigns                     → DRAFT      черновик создан\nPUT  /campaigns/{id}                → DRAFT      правим тему, вёрстку, базу\nPUT  /campaigns/{id} status=SCHEDULE→ SCHEDULE   запланирована на delivery_time\nPUT  /campaigns/{id} status=MODERATING → отправка сразу после модерации\n                                    → PROCESSING идёт отправка\n                                    → SENT       отправлена\n```\n\n**Статусы**\n\n- `DRAFT` — Черновик. Можно менять всё\n- `MODERATING` — Отправлена на модерацию; уйдёт сразу после её прохождения\n- `SCHEDULE` — Запланирована на `delivery_time`\n- `CREATED`, `PROCESSING` — Отправка идёт. Изменить рассылку уже нельзя\n- `SENT` — Отправлена\n- `PAUSED` — Отправка приостановлена\n- `TEMPLATE` — Сохранённый шаблон, а не рассылка\n- `SUBSCRIBE`, `TRIGGER` — [Автоматизация](https://dashamail.ru/api/automations/), не обычная рассылка\n- `BLOCKED`, `BLOCKED-SPAM` — Заблокирована модератором\n- `DELETED` — Удалена\n\n**Ссылка отписки обязательна**\n\nРассылка не запустится без ссылки отписки — это требование антиспам-законодательства, и API проверяет его на этапе запуска:\n\n- в HTML-версии нужен тег со свойством `id=\"unsub_link\"`: `<a id=\"unsub_link\" href=\"%ОТПИСАТЬСЯ%\">отписаться</a>`\n- в текстовой версии нужна подстановка `%ОТПИСАТЬСЯ%`;\n- в AMP-версии — тег с `id=\"unsub_link\"`."
        },
        {
            "name": "Автоматизации",
            "description": "Письма, которые уходят сами — по событию подписчика и с нужной задержкой.\n\nАвтоматизация — это письмо, привязанное к событию: подписка, добавление в базу, открытие, клик по ссылке, изменение поля. Технически это та же рассылка, но со статусом `SUBSCRIBE`, поэтому в [списке рассылок](https://dashamail.ru/api/campaigns/) автоматизации тоже видны.\n\n**События запуска**\n\nСобытие задаётся параметром `action`:\n\n- `form` — Подписка через форму. Значение по умолчанию\n- `add` — Добавление подписчика вручную или через API\n- `upload` — Добавление при импорте файла\n- `open` — Открытие письма\n- `click` — Клик по любой ссылке\n- `href` — Клик по конкретной ссылке\n- `edit` — Изменение дополнительного поля подписчика\n- `rating` — Изменение рейтинга подписчика\n\nНесколько событий перечисляются через запятую: `\"action\": \"form,add,upload\"`. В комбинациях нельзя использовать `open`, `click` и `edit` — такие события задаются только по одному.\n\n**Задержка**\n\nЗадержка между событием и отправкой складывается из двух параметров: `delay_1` — количество, `delay_2` — единица измерения. Например, `delay_1=3` и `delay_2=day` дают отправку через трое суток. Без них письмо уходит сразу.\n\nАвтоматизация начинает работать только после модерации — как и обычная рассылка. До её прохождения [принудительный запуск](https://dashamail.ru/api/automations/#trigger-automation) вернёт `code: 37`."
        },
        {
            "name": "Шаблоны",
            "description": "Сохранённая вёрстка, которую можно подставлять в новые рассылки вместо того, чтобы каждый раз передавать HTML целиком.\n\nВ DashaMail два вида шаблонов, и они хранятся отдельно друг от друга:\n\n- **HTML-шаблоны** — самостоятельные заготовки вёрстки. Работа с ними идёт через `/templates`.\n- **Сохранённые рассылки** — рассылки в статусе `TEMPLATE`. Их отдаёт [отдельный эндпоинт](https://dashamail.ru/api/templates/#get-saved-templates).\n\nПодставить шаблон в рассылку можно, передав его идентификатор числом в параметре `html` при [создании рассылки](https://dashamail.ru/api/campaigns/#create-campaign). Чтобы взять вёрстку другой рассылки, передайте `tmpl<campaign_id>`."
        },
        {
            "name": "Отчёты",
            "description": "Статистика по рассылке: сколько ушло, дошло, открыли, кликнули, вернулось и отписалось.\n\nВсе отчёты строятся по одному шаблону адреса:\n\n```\nGET /reports/{campaign_id}/{метрика}\n```\n\nДанные считаются по событиям. Событие попадает в статистику с задержкой в несколько секунд после того, как произошло, поэтому сразу после запуска рассылки отчёты будут неполными.\n\n**Метрики**\n\n- `summary` — Сводка по рассылке одним объектом\n- `sent` — Кому отправлено\n- `delivered` — Кому доставлено\n- `opened` — Кто открыл\n- `clicked` — Кто кликнул\n- `bounced` — Возвраты\n- `complained` — Жалобы на спам\n- `unsubscribed` — Отписавшиеся\n- `events` — Лента всех событий с фильтрами\n- `clickstat` — Клики в разрезе ссылок\n- `userclicks` — Кто кликнул по конкретной ссылке\n- `bouncestat` — Возвраты в разрезе SMTP-кодов\n- `domains` — Показатели в разрезе почтовых доменов\n- `geo` — География открытий\n- `clients` — Почтовые клиенты и устройства\n- `codes` — Коды подтверждения\n\n**Сортировка и постраничный вывод**\n\nСписочные отчёты принимают `start`, `limit` (по умолчанию 100) и `order` в формате `поле направление`. Допустимые поля сортировки: `event_date`, `event_time`, `campaign_id`, `list_id`, `event_type`, `bounce_category`, `bounce_code`, `bounce_reason`, `email`, `domain`, `member_id`, `ip`, `region`, `OS`, `browser`, `webservice`, `user_agent`, `url_original`, `device`. Направление — `asc` или `desc`."
        },
        {
            "name": "Транзакционные письма",
            "description": "Одиночные письма конкретному получателю: подтверждения заказов, коды входа, уведомления, чеки.\n\nТранзакционное письмо не требует адресной базы и уходит сразу. От массовой рассылки оно отличается ещё и тем, что не нуждается в ссылке отписки — такие письма считаются служебными.\n\n**Перед первой отправкой нужно подтвердить домен.** Домен из `from_email` должен быть добавлен и проверен в разделе [Аккаунт → Домены](https://dashamail.ru/api/account/#get-domains): без настроенных DKIM и SPF письма не уйдут, а `/transactional/log` и `/transactional/stats` вернут `code: 34`.\n\n**Статусы письма**\n\nЧисловой `status` и его текстовое имя `statusname` показывают последнее известное событие письма:\n\n- `5` — `Sent` — Отправлено с наших серверов\n- `3` — `Delivered` — Принято почтовым сервером получателя\n- `7` — `Opened` — Письмо открыли\n- `6` — `Clicked` — Кликнули по ссылке\n- `4` — `Bounced` — Возврат, причина в `errormessage`\n- `9` — `Complained` — Получатель пожаловался на спам\n- `8` — `Unsubscribed` — Получатель отписался\n\n**Свой идентификатор письма**\n\nЕсли не передать `message_id`, DashaMail сгенерирует его сам и вернёт в поле `transaction_id`. Удобнее задавать свой — тогда вы сможете сопоставить письмо со своей записью в базе, не сохраняя чужой идентификатор."
        },
        {
            "name": "Аккаунт",
            "description": "Баланс и лимиты, подтверждённые отправители, домены отправки и webhooks.\n\nРаздел настраивает инфраструктуру отправки. Обычный порядок при подключении нового проекта такой:\n\n1. [Добавить домен](https://dashamail.ru/api/account/#add-domain) отправки;\n2. прописать выданные DNS-записи у своего регистратора;\n3. [запустить проверку DNS](https://dashamail.ru/api/account/#check-domains) и дождаться `valid: 1`;\n4. [настроить webhooks](https://dashamail.ru/api/account/#add-webhooks), чтобы получать события доставки на свой сервер.\n\n**События webhooks**\n\nWebhook в DashaMail — это пара «событие → URL». На одно событие можно задать один адрес. События различаются для массовых и транзакционных писем:\n\n| Событие | Массовые | Транзакционные | Когда срабатывает |\n| --- | --- | --- | --- |\n| `send` | — | да | Письмо отправлено |\n| `delivered` | — | да | Письмо доставлено |\n| `open` | да | да | Письмо открыто |\n| `click` | да | да | Клик по ссылке |\n| `hard` | да | да | Невозвратная ошибка доставки |\n| `spam` | да | да | Жалоба на спам |\n| `unsub` | да | да | Отписка |\n| `dropped` | — | да | Письмо отброшено до отправки |\n| `subscribe` | да | — | Новая подписка |\n| `confirm` | да | — | Подтверждение подписки |"
        },
        {
            "name": "Обработка входящих",
            "description": "Приём почты на адреса DashaMail, разбор писем и передача их в вашу систему по webhook.\n\nРаздел позволяет принимать входящие письма — ответы на рассылки, обращения в поддержку, машинные уведомления — и обрабатывать их автоматически. DashaMail принимает письмо, разбирает его на части (тема, текст, вложения) и выполняет действия того маршрута, чьи условия совпали.\n\n**Как это работает**\n\n1. **Домен.** У аккаунта есть служебный поддомен, который создаётся автоматически при первом обращении к [списку доменов](https://dashamail.ru/api/router/#list-domains). Можно подключить и свой — тогда потребуется прописать MX-запись.\n2. **Маршруты.** Каждый маршрут — это условия отбора писем и список действий. Письмо проверяется маршрутами по возрастанию `priority`.\n3. **Действия.** Отправить письмо на ваш webhook, сохранить его для последующей выгрузки, переслать на другой адрес или прервать обработку.\n\n**Условия отбора**\n\nУсловия задаются либо структурой `filter`, либо текстовым выражением `expression` — но не обоими сразу. Маршрут без условий принимает все письма.\n\n```\n{\n  \"combinator\": \"and\",\n  \"conditions\": [\n    { \"field\": \"recipient\", \"op\": \"matches\", \"value\": \"^support@\" },\n    { \"field\": \"header\", \"name\": \"X-Priority\", \"op\": \"equals\", \"value\": \"1\" }\n  ]\n}\n```\n\n| Ключ | Значения |\n| --- | --- |\n| `combinator` | `and` или `or` |\n| `field` | `recipient` — адрес получателя, `from` — адрес автора, `sender` — конверт отправителя, `header` — произвольный заголовок (требует `name`) |\n| `op` | `matches` — регулярное выражение, `equals` — точное совпадение, `contains` — вхождение подстроки |\n| `value` | Непустая строка. Для `matches` проверяется корректность шаблона при сохранении |\n\n**Действия**\n\n`actions` — массив от одного до пяти элементов. Каждый элемент обязан иметь `type`.\n\n| Тип | Параметры | Что делает |\n| --- | --- | --- |\n| `webhook` | `url` — обязателен, должен начинаться с `http://` или `https://`, не длиннее 2048 символов. `attachments` — `off` (по умолчанию), `url` — ссылки на файлы, `inline` — файлы в base64 | Отправляет разобранное письмо POST-запросом на ваш адрес |\n| `store` | `ttl_days` — срок хранения от 1 до 30 дней. `notify_url` — адрес уведомления о поступлении | Сохраняет письмо, чтобы забрать его позже через [список писем](https://dashamail.ru/api/router/#list-messages) |\n| `forward` | `email` — адрес получателя | Пересылает письмо. Доступно только на платном тарифе и требует подтверждённого домена отправки; списывает баланс как транзакционное письмо. Пересылка на inbound-домен DashaMail запрещена |\n| `stop` | — | Прерывает обработку: следующие маршруты не проверяются |\n\n**Подпись webhook**\n\nУ каждого маршрута есть `signing_key` — им подписываются исходящие webhook-запросы. Проверяйте подпись на своей стороне, чтобы отличать запросы DashaMail от посторонних. Ключ можно [перевыпустить](https://dashamail.ru/api/router/#rekey-route), если он скомпрометирован.\n\nПрава субаккаунта на этот раздел задаются отдельно. При уровне доступа «только чтение» изменяющие запросы вернут `code: 2`, при полном запрете недоступен весь раздел."
        },
        {
            "name": "Изображения",
            "description": "Уменьшение веса картинок перед тем, как класть их в письмо: тот же конвейер, через который проходят загрузки в файловый менеджер DashaMail.\n\nКартинки — самая тяжёлая часть письма, и вес влияет не только на трафик: часть почтовых клиентов обрезает письмо целиком, а на мобильном интернете тяжёлая вёрстка просто не догружается. Эндпоинт прогоняет изображение через тот же конвейер, который DashaMail применяет к загрузкам в файловый менеджер.\n\nЧто происходит с картинкой:\n\n- **Геометрия.** Если ширина больше 1600 px, изображение ужимается до этого потолка с сохранением пропорций. Прозрачность, анимация и ориентация из EXIF сохраняются.\n- **Пережатие.** Кодек переупаковывает файл и снимает метаданные. По умолчанию — без потерь: пиксели остаются прежними до единого.\n\n**Формат никогда не меняется.** JPEG остаётся JPEG, PNG — PNG. Это сделано намеренно: в письмах не работают ни WebP, ни AVIF, а подменить формат по согласованию с клиентом нельзя — в письме зашит статический адрес картинки.\n\nМетод ничего не сохраняет: ни в вашем файловом менеджере, ни где-либо ещё результат не остаётся. Это чистое преобразование «прислали — получили обратно»."
        }
    ],
    "paths": {
        "/lists": {
            "get": {
                "operationId": "get-lists",
                "summary": "Список адресных баз",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Возвращает все адресные базы аккаунта, от новых к старым, вместе со счётчиками подписчиков по состояниям.\n\n**Что возвращается**\n\nМассив баз. Счётчики `count_*` — число подписчиков в соответствующем состоянии; `merge_1` … `merge_N` описывают дополнительные поля базы.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | В аккаунте нет ни одной базы |\n\n[Метод в документации](https://dashamail.ru/api/lists/#get-lists)",
                "parameters": [
                    {
                        "name": "state",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть только базы в указанном состоянии.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "active",
                                "archived",
                                "blocked"
                            ]
                        },
                        "example": "active"
                    },
                    {
                        "name": "merge_json",
                        "in": "query",
                        "required": false,
                        "description": "Если передан, описания дополнительных полей возвращаются как JSON, а не как сериализованная PHP-строка. Рекомендуется передавать всегда. Признак: передайте 1.",
                        "schema": {
                            "type": "string"
                        },
                        "example": 1
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 128341,
                                                "state": "active",
                                                "name": "Клиенты интернет-магазина",
                                                "description": "",
                                                "company": "ООО «Ромашка»",
                                                "abuse_name": "Иван Петров",
                                                "phone": "+7 999 000-00-00",
                                                "address": "ул. Ленина, 1",
                                                "city": "Москва",
                                                "url": "https://example.ru",
                                                "merge_1": "{\"title\":\"Имя\",\"type\":\"text\",\"req\":\"\",\"var\":\"ИМЯ\"}",
                                                "merge_2": "{\"title\":\"Фамилия\",\"type\":\"text\",\"req\":\"\",\"var\":\"ФАМИЛИЯ\"}",
                                                "creation_date": "2026-03-14 11:02:41",
                                                "count_active": 1284,
                                                "count_bounced": 37,
                                                "count_inactive": 0,
                                                "count_complained": 2,
                                                "count_unconfirmed": 15,
                                                "count_unsubscribed": 96,
                                                "count_all": 1434
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "create-list",
                "summary": "Создать адресную базу",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Создаёт новую адресную базу.\n\nКонтактные данные (`company`, `address`, `city` и другие) попадают в подвал писем — этого требуют антиспам-политики. Если их не передать, подставятся данные из профиля аккаунта.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `name` | string, обязательный | Название базы. |\n| `fields` | JSON-строка | Состав дополнительных полей. Если не передан, поля копируются из базы по умолчанию, а при её отсутствии создаются «Имя» и «Фамилия». Каждый элемент — объект с ключами `title`, `type`, `req`, `var`. Для типа `choice` в `title` передаётся объект `{\"name\": \"…\", \"choices\": […]}`. Длина `var` — не больше 10 символов. |\n| `company` | string | Название компании для подвала письма. |\n| `abuse_name` | string | Контактное лицо. |\n| `abuse_email` | string | Контактный email для жалоб. |\n| `address` | string | Адрес. |\n| `city` | string | Город. |\n| `zip` | string | Почтовый индекс. |\n| `country` | string | Страна. |\n| `phone` | string | Телефон. |\n| `url` | string | Сайт компании. |\n\n**Что возвращается**\n\nИдентификатор созданной базы.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `name` |\n| `500` | `59` | Длина `var` дополнительного поля больше 10 символов |\n\n[Метод в документации](https://dashamail.ru/api/lists/#create-list)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "list_id": 128341
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "Название базы."
                                    },
                                    "fields": {
                                        "type": "string",
                                        "description": "Состав дополнительных полей. Если не передан, поля копируются из базы по умолчанию, а при её отсутствии создаются «Имя» и «Фамилия». Каждый элемент — объект с ключами `title`, `type`, `req`, `var`. Для типа `choice` в `title` передаётся объект `{\"name\": \"…\", \"choices\": […]}`. Длина `var` — не больше 10 символов."
                                    },
                                    "company": {
                                        "type": "string",
                                        "description": "Название компании для подвала письма."
                                    },
                                    "abuse_name": {
                                        "type": "string",
                                        "description": "Контактное лицо."
                                    },
                                    "abuse_email": {
                                        "type": "string",
                                        "description": "Контактный email для жалоб."
                                    },
                                    "address": {
                                        "type": "string",
                                        "description": "Адрес."
                                    },
                                    "city": {
                                        "type": "string",
                                        "description": "Город."
                                    },
                                    "zip": {
                                        "type": "string",
                                        "description": "Почтовый индекс."
                                    },
                                    "country": {
                                        "type": "string",
                                        "description": "Страна."
                                    },
                                    "phone": {
                                        "type": "string",
                                        "description": "Телефон."
                                    },
                                    "url": {
                                        "type": "string",
                                        "description": "Сайт компании."
                                    }
                                },
                                "required": [
                                    "name"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "name": "Клиенты интернет-магазина",
                                "company": "ООО «Ромашка»",
                                "city": "Москва",
                                "fields": "[{\"title\":\"Имя\",\"type\":\"text\",\"req\":\"\",\"var\":\"ИМЯ\"},{\"title\":\"Город\",\"type\":\"choice\",\"req\":\"on\",\"var\":\"ГОРОД\"}]"
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}": {
            "get": {
                "operationId": "get-list",
                "summary": "Одна адресная база",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Возвращает одну базу — в том же формате, что и список, но массивом из одного элемента. Отсюда удобно получать состав дополнительных полей перед добавлением подписчиков.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Базы с таким `list_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#get-list)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор адресной базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "merge_json",
                        "in": "query",
                        "required": false,
                        "description": "Отдавать описания дополнительных полей в JSON. Признак: передайте 1.",
                        "schema": {
                            "type": "string"
                        },
                        "example": 1
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 128341,
                                                "state": "active",
                                                "name": "Клиенты интернет-магазина",
                                                "merge_1": "{\"title\":\"Имя\",\"type\":\"text\",\"req\":\"\",\"var\":\"ИМЯ\"}",
                                                "merge_2": "{\"title\":\"Город\",\"type\":\"choice\",\"req\":\"on\",\"var\":\"ГОРОД\"}",
                                                "creation_date": "2026-03-14 11:02:41",
                                                "count_active": 1284,
                                                "count_all": 1434
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "operationId": "update-list",
                "summary": "Изменить адресную базу",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Меняет реквизиты базы. Передавайте только те поля, которые нужно изменить — остальные останутся прежними. Состав дополнительных полей здесь не меняется, для этого есть отдельные эндпоинты.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `name` | string | Название базы. |\n| `abuse_email` | string | Контактный email. Проверяется на корректность. |\n| `abuse_name` | string | Контактное лицо. |\n| `company` | string | Компания. |\n| `address` | string | Адрес. |\n| `city` | string | Город. |\n| `zip` | string | Индекс. |\n| `country` | string | Страна. |\n| `url` | string | Сайт. |\n| `phone` | string | Телефон. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `5` | Базы с таким `list_id` нет |\n| `422` | `6` | Некорректный `abuse_email` |\n\n[Метод в документации](https://dashamail.ru/api/lists/#update-list)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "Название базы."
                                    },
                                    "abuse_email": {
                                        "type": "string",
                                        "description": "Контактный email. Проверяется на корректность."
                                    },
                                    "abuse_name": {
                                        "type": "string",
                                        "description": "Контактное лицо."
                                    },
                                    "company": {
                                        "type": "string",
                                        "description": "Компания."
                                    },
                                    "address": {
                                        "type": "string",
                                        "description": "Адрес."
                                    },
                                    "city": {
                                        "type": "string",
                                        "description": "Город."
                                    },
                                    "zip": {
                                        "type": "string",
                                        "description": "Индекс."
                                    },
                                    "country": {
                                        "type": "string",
                                        "description": "Страна."
                                    },
                                    "url": {
                                        "type": "string",
                                        "description": "Сайт."
                                    },
                                    "phone": {
                                        "type": "string",
                                        "description": "Телефон."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "name": "Клиенты — Москва"
                            }
                        }
                    }
                }
            },
            "delete": {
                "operationId": "delete-list",
                "summary": "Удалить адресную базу",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Удаляет базу вместе с активными подписчиками.\n\n> **Внимание.** Операция необратима. Отписавшиеся подписчики остаются в глобальном списке отписок аккаунта — повторно подписать их через API не получится.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `5` | Базы с таким `list_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#delete-list)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/members": {
            "get": {
                "operationId": "get-members",
                "summary": "Подписчики базы",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Постранично возвращает подписчиков базы.\n\n> **Примечание.** Смещение задаётся параметром `start`, не `offset`. По умолчанию отдаётся 100 записей.\n\n**Что возвращается**\n\nМассив подписчиков. Поля `merge_*` отдаются только те, что заведены в базе; поля типа `tags` возвращаются строкой с разделителем `;`.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `5` | Базы с таким `list_id` нет |\n| `404` | `4` | В базе нет подписчиков, подходящих под фильтр |\n| `500` | `60` | `segment_id` задан вместе с `email` или `member_id` |\n| `500` | `61` | Сегмента с таким `segment_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#get-members)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Смещение от начала выборки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 0
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Сколько записей вернуть.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 2
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "description": "Сортировка в формате `поле направление` — например `id desc`.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "state",
                        "in": "query",
                        "required": false,
                        "description": "Фильтр по состоянию подписчика. Значение `spam` — синоним `complained`.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "active",
                                "unsubscribed",
                                "bounced",
                                "complained",
                                "unconfirmed",
                                "inactive"
                            ]
                        },
                        "example": "active"
                    },
                    {
                        "name": "email",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть конкретного подписчика по адресу.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "member_id",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть конкретного подписчика по идентификатору.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "segment_id",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть подписчиков сохранённого сегмента. Несовместим с `email` и `member_id`.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 90412881,
                                                "list_id": 128341,
                                                "email": "ivan@example.com",
                                                "state": "active",
                                                "optin_time": "2026-04-02 09:31:00",
                                                "merge_1": "Иван",
                                                "merge_2": "Москва"
                                            },
                                            {
                                                "id": 90412882,
                                                "list_id": 128341,
                                                "email": "maria@example.com",
                                                "state": "active",
                                                "optin_time": "2026-04-02 09:44:12",
                                                "merge_1": "Мария",
                                                "merge_2": "Казань"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "add-member",
                "summary": "Добавить подписчика",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Добавляет один адрес в базу. Для загрузки нескольких адресов используйте [пакетное добавление](https://dashamail.ru/api/lists/#add-members-batch), для файлов — [импорт](https://dashamail.ru/api/lists/#import-members).\n\nПеред добавлением адрес проверяется по вашему списку отписок, по чёрному списку аккаунта и по глобальному списку возвратов.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `email` | string, обязательный | Адрес подписчика. Домен `ya.ru` автоматически приводится к `yandex.ru`. |\n| `merge_1 … merge_N` | string | Значения дополнительных полей. Нумерация соответствует полям базы. |\n| `merge_0` | флаг | Нумеровать переданные поля с нуля: `merge_0` станет первым полем базы. Удобно, когда источник данных нумерует колонки с нуля. |\n| `update` | флаг | Обновлять уже существующего подписчика вместо ошибки «адрес уже есть в базе». |\n| `update_tags` | string | Со значением `on` метки в полях типа `tags` добавляются к существующим, а не заменяют их. |\n| `send_confirm` | флаг | Отправить письмо подтверждения подписки (double opt-in). Подписчик создаётся в состоянии `unconfirmed`. |\n| `no_check` | флаг | Не проверять адрес по глобальному списку возвратов. |\n| `state` | string | Задать состояние подписчика явно. |\n| `gender` | string | Пол подписчика. |\n| `region` | string | Регион подписчика. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `email` |\n| `401` | `2` | Некорректный формат адреса |\n| `409` | `7` | Адрес уже есть в базе (и не передан `update`) |\n| `409` | `10` | Подписчик ранее отписался или находится в чёрном списке |\n| `422` | `6` | Адрес в глобальном списке возвратов |\n| `422` | `29` | Адрес на сервисе одноразовой почты |\n| `404` | `5` | Базы с таким `list_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#add-member)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "member_id": 90412881
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "description": "Адрес подписчика. Домен `ya.ru` автоматически приводится к `yandex.ru`."
                                    },
                                    "merge_1 … merge_N": {
                                        "type": "string",
                                        "description": "Значения дополнительных полей. Нумерация соответствует полям базы."
                                    },
                                    "merge_0": {
                                        "type": "string",
                                        "description": "Нумеровать переданные поля с нуля: `merge_0` станет первым полем базы. Удобно, когда источник данных нумерует колонки с нуля. Признак: передайте 1."
                                    },
                                    "update": {
                                        "type": "string",
                                        "description": "Обновлять уже существующего подписчика вместо ошибки «адрес уже есть в базе». Признак: передайте 1."
                                    },
                                    "update_tags": {
                                        "type": "string",
                                        "description": "Со значением `on` метки в полях типа `tags` добавляются к существующим, а не заменяют их."
                                    },
                                    "send_confirm": {
                                        "type": "string",
                                        "description": "Отправить письмо подтверждения подписки (double opt-in). Подписчик создаётся в состоянии `unconfirmed`. Признак: передайте 1."
                                    },
                                    "no_check": {
                                        "type": "string",
                                        "description": "Не проверять адрес по глобальному списку возвратов. Признак: передайте 1."
                                    },
                                    "state": {
                                        "type": "string",
                                        "description": "Задать состояние подписчика явно."
                                    },
                                    "gender": {
                                        "type": "string",
                                        "description": "Пол подписчика."
                                    },
                                    "region": {
                                        "type": "string",
                                        "description": "Регион подписчика."
                                    }
                                },
                                "required": [
                                    "email"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "email": "ivan@example.com",
                                "merge_1": "Иван",
                                "merge_2": "Москва",
                                "update": 1
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/members/batch": {
            "post": {
                "operationId": "add-members-batch",
                "summary": "Добавить подписчиков пакетом",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Загружает несколько подписчиков одним запросом. Каждый элемент `batch` — такой же объект, как тело [добавления одного подписчика](https://dashamail.ru/api/lists/#add-member).\n\n> **Примечание.** С параметром `background` запрос сразу возвращает управление, а загрузка идёт в фоне — так стоит поступать с пакетами в тысячи адресов.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `batch` | JSON-строка, обязательный | Массив объектов подписчиков. |\n| `update` | флаг | Обновлять существующих подписчиков. |\n| `background` | флаг | Обработать пакет в фоне. |\n| `webhook` | string | URL, на который придёт уведомление о завершении фоновой загрузки. |\n| `no_check` | флаг | Не проверять адреса по глобальному списку возвратов. |\n| `send_confirm` | флаг | Отправлять письма подтверждения подписки. |\n\n**Что возвращается**\n\nРезультат по каждому адресу: успешно добавленные и ошибки с их причинами.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `batch` |\n| `500` | `31` | Массив адресов пуст |\n\n[Метод в документации](https://dashamail.ru/api/lists/#add-members-batch)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "success": 2,
                                            "errors": []
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "batch": {
                                        "type": "string",
                                        "description": "Массив объектов подписчиков."
                                    },
                                    "update": {
                                        "type": "string",
                                        "description": "Обновлять существующих подписчиков. Признак: передайте 1."
                                    },
                                    "background": {
                                        "type": "string",
                                        "description": "Обработать пакет в фоне. Признак: передайте 1."
                                    },
                                    "webhook": {
                                        "type": "string",
                                        "description": "URL, на который придёт уведомление о завершении фоновой загрузки."
                                    },
                                    "no_check": {
                                        "type": "string",
                                        "description": "Не проверять адреса по глобальному списку возвратов. Признак: передайте 1."
                                    },
                                    "send_confirm": {
                                        "type": "string",
                                        "description": "Отправлять письма подтверждения подписки. Признак: передайте 1."
                                    }
                                },
                                "required": [
                                    "batch"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "batch": "[{\"email\":\"ivan@example.com\",\"merge_1\":\"Иван\"},{\"email\":\"maria@example.com\",\"merge_1\":\"Мария\"}]",
                                "update": 1
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/members/import": {
            "post": {
                "operationId": "import-members",
                "summary": "Импортировать подписчиков из файла",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Ставит в очередь импорт из файла CSV, XLS, XLSX, TXT или ZIP. Файл либо скачивается по ссылке `file`, либо загружается как multipart-поле `import-file`.\n\nСоответствие колонок файла и полей подписчика задаётся **номерами колонок, начиная с нуля**: `email=0` означает, что адрес лежит в первой колонке, `merge_1=2` — что первое дополнительное поле лежит в третьей.\n\n> **Примечание.** В одну базу можно поставить не больше пяти задач импорта одновременно. В режиме `online` импорт запрещён, если в аккаунте уже идёт другой импорт.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `email` | integer, обязательный | Номер колонки с адресом, считая с нуля. |\n| `type` | string, обязательный | Расширение файла. Допустимые значения: `csv`, `txt`, `xls`, `xlsx`, `zip`. |\n| `file` | string | URL файла. Если не задан, файл ожидается в multipart-поле `import-file`. |\n| `merge_1 … merge_N` | integer | Номера колонок для дополнительных полей. Поля, помеченные в базе обязательными, должны быть сопоставлены. |\n| `gender` | integer | Номер колонки с полом. |\n| `region` | integer | Номер колонки с регионом. |\n| `mode` | string | Со значением `online` импорт выполняется синхронно. По умолчанию — фоновая задача. По умолчанию: `bg`. |\n| `update` | флаг | Обновлять существующих подписчиков. |\n| `send_confirm` | флаг | Отправлять письма подтверждения подписки. |\n| `sheet_index` | integer | Номер листа книги Excel. |\n| `sheet_name` | string | Название листа книги Excel. |\n| `webhook` | string | URL для уведомления о завершении импорта. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `email`, `type` или обязательное дополнительное поле |\n| `404` | `5` | Базы с таким `list_id` нет |\n| `401` | `2` | Превышено число одновременных задач импорта |\n| `500` | `33` | Файл не читается или имеет недопустимый формат |\n\n[Метод в документации](https://dashamail.ru/api/lists/#import-members)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "task_id": 88123
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "integer",
                                        "description": "Номер колонки с адресом, считая с нуля."
                                    },
                                    "type": {
                                        "type": "string",
                                        "enum": [
                                            "csv",
                                            "txt",
                                            "xls",
                                            "xlsx",
                                            "zip"
                                        ],
                                        "description": "Расширение файла."
                                    },
                                    "file": {
                                        "type": "string",
                                        "description": "URL файла. Если не задан, файл ожидается в multipart-поле `import-file`."
                                    },
                                    "merge_1 … merge_N": {
                                        "type": "integer",
                                        "description": "Номера колонок для дополнительных полей. Поля, помеченные в базе обязательными, должны быть сопоставлены."
                                    },
                                    "gender": {
                                        "type": "integer",
                                        "description": "Номер колонки с полом."
                                    },
                                    "region": {
                                        "type": "integer",
                                        "description": "Номер колонки с регионом."
                                    },
                                    "mode": {
                                        "type": "string",
                                        "description": "Со значением `online` импорт выполняется синхронно. По умолчанию — фоновая задача."
                                    },
                                    "update": {
                                        "type": "string",
                                        "description": "Обновлять существующих подписчиков. Признак: передайте 1."
                                    },
                                    "send_confirm": {
                                        "type": "string",
                                        "description": "Отправлять письма подтверждения подписки. Признак: передайте 1."
                                    },
                                    "sheet_index": {
                                        "type": "integer",
                                        "description": "Номер листа книги Excel."
                                    },
                                    "sheet_name": {
                                        "type": "string",
                                        "description": "Название листа книги Excel."
                                    },
                                    "webhook": {
                                        "type": "string",
                                        "description": "URL для уведомления о завершении импорта."
                                    }
                                },
                                "required": [
                                    "email",
                                    "type"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "file": "https://example.ru/exports/subscribers.csv",
                                "type": "csv",
                                "email": 0,
                                "merge_1": 1,
                                "merge_2": 2,
                                "update": 1
                            }
                        }
                    }
                }
            },
            "get": {
                "operationId": "get-import-result",
                "summary": "Результат последнего импорта",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Возвращает текстовый отчёт о последнем завершённом импорте в базу.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `list_id` |\n\n[Метод в документации](https://dashamail.ru/api/lists/#get-import-result)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "import_result": "Загружено 1240 адресов, пропущено 18 дубликатов, отклонено 6 некорректных."
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/import-history": {
            "get": {
                "operationId": "get-import-history",
                "summary": "История импортов",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Список задач импорта по базе с их состоянием и итогами.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Импортов в эту базу не было |\n\n[Метод в документации](https://dashamail.ru/api/lists/#get-import-history)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "import_id",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть только одну задачу импорта.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 88123,
                                                "list_id": 128341,
                                                "state": "done",
                                                "created": "2026-04-02 09:15:00",
                                                "result": "Загружено 1240 адресов"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/members/{email}": {
            "get": {
                "operationId": "get-member",
                "summary": "Один подписчик",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Возвращает записи подписчика по адресу.\n\n> **Примечание.** Поиск идёт по **всем базам аккаунта**, а не только по указанной в пути. Если адрес есть в нескольких базах, вернутся все записи — различайте их по полю `list_id`.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Подписчика с таким адресом нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#get-member)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы. На выборку не влияет.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "email",
                        "in": "path",
                        "required": true,
                        "description": "Адрес подписчика, закодированный для URL (`@` → `%40`).",
                        "schema": {
                            "type": "string"
                        },
                        "example": "ivan@example.com"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 90412881,
                                                "list_id": 128341,
                                                "email": "ivan@example.com",
                                                "state": "active",
                                                "optin_time": "2026-04-02 09:31:00",
                                                "merge_1": "Иван"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "operationId": "update-member",
                "summary": "Изменить подписчика",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Обновляет дополнительные поля и состояние подписчика. Подписчик находится по паре «база + адрес» из пути, либо, если передан `member_id` — по нему.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `member_id` | integer | Искать подписчика по идентификатору, а не по адресу. |\n| `merge_1 … merge_N` | string | Новые значения дополнительных полей. Поля, помеченные обязательными, нельзя очищать. |\n| `update_tags` | string | Со значением `on` метки добавляются к существующим. |\n| `state` | string | Новое состояние подписчика. |\n| `gender` | string | Пол. |\n| `region` | string | Регион. |\n| `source` | string | Источник подписки. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не удалось определить подписчика или не заполнено обязательное поле |\n| `401` | `2` | Неверный формат даты в поле типа `date` |\n\n[Метод в документации](https://dashamail.ru/api/lists/#update-member)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "email",
                        "in": "path",
                        "required": true,
                        "description": "Текущий адрес подписчика, закодированный для URL.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "ivan@example.com"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "member_id": {
                                        "type": "integer",
                                        "description": "Искать подписчика по идентификатору, а не по адресу."
                                    },
                                    "merge_1 … merge_N": {
                                        "type": "string",
                                        "description": "Новые значения дополнительных полей. Поля, помеченные обязательными, нельзя очищать."
                                    },
                                    "update_tags": {
                                        "type": "string",
                                        "description": "Со значением `on` метки добавляются к существующим."
                                    },
                                    "state": {
                                        "type": "string",
                                        "description": "Новое состояние подписчика."
                                    },
                                    "gender": {
                                        "type": "string",
                                        "description": "Пол."
                                    },
                                    "region": {
                                        "type": "string",
                                        "description": "Регион."
                                    },
                                    "source": {
                                        "type": "string",
                                        "description": "Источник подписки."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "merge_1": "Иван",
                                "merge_2": "Санкт-Петербург"
                            }
                        }
                    }
                }
            },
            "delete": {
                "operationId": "delete-member",
                "summary": "Удалить подписчика",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Удаляет запись подписчика из базы. Удалить можно только подписчика в состоянии `active`.\n\n> **Примечание.** Удаление стирает историю подписчика. Если задача в том, чтобы перестать ему писать, используйте [отписку](https://dashamail.ru/api/lists/#unsubscribe-member) — она сохраняет адрес в списке отписавшихся и защищает от повторного добавления.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `member_id` | integer, обязательный | Идентификатор удаляемой записи. Получить его можно из [списка подписчиков](https://dashamail.ru/api/lists/#get-members) или из [карточки подписчика](https://dashamail.ru/api/lists/#get-member). |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `member_id` |\n| `404` | `9` | Подписчика нет |\n| `409` | `10` | Подписчик не в активном состоянии |\n\n[Метод в документации](https://dashamail.ru/api/lists/#delete-member)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "email",
                        "in": "path",
                        "required": true,
                        "description": "Адрес подписчика, закодированный для URL.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "ivan@example.com"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "member_id": {
                                        "type": "integer",
                                        "description": "Идентификатор удаляемой записи. Получить его можно из [списка подписчиков](https://dashamail.ru/api/lists/#get-members) или из [карточки подписчика](https://dashamail.ru/api/lists/#get-member)."
                                    }
                                },
                                "required": [
                                    "member_id"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "member_id": 90412881
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/members/{email}/unsubscribe": {
            "post": {
                "operationId": "unsubscribe-member",
                "summary": "Отписать подписчика",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Переводит подписчика в состояние `unsubscribed` и проставляет время отписки. Если адрес есть в нескольких базах, а `list_id` в пути указывает на конкретную — отписка затронет только её.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `member_id` | integer | Отписать по идентификатору вместо адреса. |\n| `reason` | string | Причина отписки. Накапливается в статистике причин по базе. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `409` | `10` | Подписчик уже отписан |\n| `422` | `3` | Подписчик не найден по адресу или идентификатору |\n\n[Метод в документации](https://dashamail.ru/api/lists/#unsubscribe-member)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "email",
                        "in": "path",
                        "required": true,
                        "description": "Адрес подписчика, закодированный для URL.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "ivan@example.com"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "unsubscribed": 1
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "member_id": {
                                        "type": "integer",
                                        "description": "Отписать по идентификатору вместо адреса."
                                    },
                                    "reason": {
                                        "type": "string",
                                        "description": "Причина отписки. Накапливается в статистике причин по базе."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "reason": "Слишком частые письма"
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/members/{email}/move": {
            "post": {
                "operationId": "move-member",
                "summary": "Перенести подписчика в другую базу",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Переносит активного подписчика в другую базу. Запись меняет принадлежность, идентификатор сохраняется.\n\nПеренос считается подпиской на целевую базу — привязанные к ней автоматизации с событием «добавление в базу» сработают.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `to_list_id` | integer, обязательный | Идентификатор целевой базы. |\n| `member_id` | integer, обязательный | Идентификатор переносимой записи из [списка подписчиков](https://dashamail.ru/api/lists/#get-members). |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `409` | `7` | В целевой базе такой адрес уже есть |\n| `404` | `9` | Активного подписчика с такими данными нет |\n| `404` | `5` | Целевой базы не существует |\n\n[Метод в документации](https://dashamail.ru/api/lists/#move-member)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор исходной базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "email",
                        "in": "path",
                        "required": true,
                        "description": "Адрес подписчика, закодированный для URL.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "ivan@example.com"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "to_list_id": {
                                        "type": "integer",
                                        "description": "Идентификатор целевой базы."
                                    },
                                    "member_id": {
                                        "type": "integer",
                                        "description": "Идентификатор переносимой записи из [списка подписчиков](https://dashamail.ru/api/lists/#get-members)."
                                    }
                                },
                                "required": [
                                    "to_list_id",
                                    "member_id"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "to_list_id": 128342,
                                "member_id": 90412881
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/members/{email}/copy": {
            "post": {
                "operationId": "copy-member",
                "summary": "Скопировать подписчика в другую базу",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Создаёт копию записи подписчика в другой базе. Исходная запись остаётся на месте; значения дополнительных полей копируются.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `to_list_id` | integer, обязательный | Идентификатор целевой базы. |\n| `member_id` | integer, обязательный | Идентификатор копируемой записи из [списка подписчиков](https://dashamail.ru/api/lists/#get-members). |\n\n**Что возвращается**\n\nИдентификатор созданной копии.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `409` | `7` | В целевой базе такой адрес уже есть |\n| `404` | `9` | Активного подписчика с такими данными нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#copy-member)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор исходной базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "email",
                        "in": "path",
                        "required": true,
                        "description": "Адрес подписчика, закодированный для URL.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "ivan@example.com"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "copy_id": 90455102
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "to_list_id": {
                                        "type": "integer",
                                        "description": "Идентификатор целевой базы."
                                    },
                                    "member_id": {
                                        "type": "integer",
                                        "description": "Идентификатор копируемой записи из [списка подписчиков](https://dashamail.ru/api/lists/#get-members)."
                                    }
                                },
                                "required": [
                                    "to_list_id",
                                    "member_id"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "to_list_id": 128342,
                                "member_id": 90412881
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/members/{email}/activity": {
            "get": {
                "operationId": "member-activity",
                "summary": "История действий подписчика",
                "tags": [
                    "Адресные базы"
                ],
                "description": "События подписчика: отправки, доставки, открытия, клики, возвраты, отписки — с привязкой к рассылкам.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Подписчика нет или событий не найдено |\n\n[Метод в документации](https://dashamail.ru/api/lists/#member-activity)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "email",
                        "in": "path",
                        "required": true,
                        "description": "Адрес подписчика, закодированный для URL.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "ivan@example.com"
                    },
                    {
                        "name": "filter",
                        "in": "query",
                        "required": false,
                        "description": "Тип событий для выборки.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "campaign_id": 501233,
                                                "event_type": "OPENED",
                                                "event_time": "2026-04-05 10:12:44"
                                            },
                                            {
                                                "campaign_id": 501233,
                                                "event_type": "CLICKED",
                                                "event_time": "2026-04-05 10:13:02",
                                                "url": "https://example.ru/sale"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/last-status": {
            "get": {
                "operationId": "last-status",
                "summary": "Текущий статус адреса",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Быстрая проверка: в каком состоянии находится конкретный адрес в базе. Дешевле, чем выгружать подписчика целиком.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Адреса в базе нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#last-status)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "email",
                        "in": "query",
                        "required": true,
                        "description": "Проверяемый адрес.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "ivan@example.com"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "email": "ivan@example.com",
                                            "state": "active"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/check-email": {
            "get": {
                "operationId": "check-email",
                "summary": "Проверить адрес перед подпиской",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Отвечает на вопрос «можно ли добавить этот адрес в базу». Проверяет его по чёрному списку аккаунта, по отпискам в этой базе, по глобальному списку возвратов, а также формат адреса и принадлежность к одноразовым почтовым сервисам.\n\nПолезно вызывать перед [добавлением подписчика](https://dashamail.ru/api/lists/#add-member): так вы заранее отсеете адреса, на которых `POST` всё равно завершится ошибкой, и не потратите на них попытку.\n\n> **Примечание.** Успешный ответ возвращает адрес в поле `valid` уже нормализованным — регистр и типичные опечатки в домене исправляются. Добавляйте в базу именно это значение.\n>\n> Отказы приходят со статусами `409` и `422`, но различать причины надёжнее по полю `code`: статус лишь делит их на «адрес в чёрном списке» и «адрес непригоден».\n\n**Что возвращается**\n\nАдрес пригоден для подписки — в `valid` лежит нормализованная форма. Любая причина отказа приходит ошибкой: разбирайте её по полю `code`.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `email` |\n| `422` | `6` | Некорректный формат адреса |\n| `409` | `10` | Адрес уже был в этой базе и отписался |\n| `422` | `29` | Адрес на сервисе одноразовой почты |\n| `409` | `43` | В чёрном списке: двойная отписка |\n| `409` | `44` | В чёрном списке: жалоба на спам |\n| `409` | `45` | В чёрном списке: добавлен вручную |\n| `422` | `46` | В глобальном списке возвратов — адреса не существует |\n\n[Метод в документации](https://dashamail.ru/api/lists/#check-email)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы. Проверка отписок выполняется в пределах этой базы; чёрный список и список возвратов действуют на весь аккаунт.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "email",
                        "in": "query",
                        "required": true,
                        "description": "Проверяемый адрес.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "ivan@example.com"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "valid": "ivan@example.com"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/clean": {
            "post": {
                "operationId": "clean-list",
                "summary": "Очистить базу",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Удаляет из базы всех активных подписчиков, сохраняя саму базу и её настройки.\n\n> **Внимание.** Операция необратима и недоступна на месячных тарифных планах — в этом случае вернётся `code: 58`.\n\n**Что возвращается**\n\nКоличество удалённых записей.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `429` | `58` | Очистка запрещена на текущем тарифе |\n| `500` | `57` | В базе нет активных подписчиков |\n\n[Метод в документации](https://dashamail.ru/api/lists/#clean-list)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "count": 1284
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/unsubscribed": {
            "get": {
                "operationId": "get-unsubscribed",
                "summary": "Отписавшиеся",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Подписчики, отписавшиеся от рассылок, с датой отписки. Полезно для синхронизации отписок с вашей CRM.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Отписавшихся нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#get-unsubscribed)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 50
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "description": "Сортировка в формате `поле направление`.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "date_start",
                        "in": "query",
                        "required": false,
                        "description": "Отписавшиеся начиная с этого момента.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        },
                        "example": "2026-04-01 00:00:00"
                    },
                    {
                        "name": "date_end",
                        "in": "query",
                        "required": false,
                        "description": "Отписавшиеся до этого момента.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "email",
                        "in": "query",
                        "required": false,
                        "description": "Проверить конкретный адрес.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 90412881,
                                                "email": "ivan@example.com",
                                                "list_id": 128341,
                                                "unsub_time": "2026-04-11 18:20:03"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/complaints": {
            "get": {
                "operationId": "get-complaints",
                "summary": "Жалобы на спам",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Подписчики, нажавшие «Это спам» в своём почтовом клиенте. Такие адреса исключаются из рассылок навсегда.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Жалоб нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#get-complaints)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "description": "Сортировка в формате `поле направление`.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 90412899,
                                                "email": "spam-reporter@example.com",
                                                "list_id": 128341,
                                                "state": "complained"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/fields": {
            "post": {
                "operationId": "add-field",
                "summary": "Добавить дополнительное поле",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Добавляет в базу новое дополнительное поле. Оно займёт первый свободный номер `merge_N`.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `type` | string, обязательный | Тип поля. Допустимые значения: `text`, `number`, `date`, `choice`, `tags`. |\n| `var` | string | Имя подстановки для писем — например `ИМЯ` подставляется как `%ИМЯ%`. Не длиннее 10 символов. |\n| `title` | string | Отображаемое название поля. По умолчанию: `Без названия`. |\n| `choices` | JSON-строка | Массив вариантов. Обязателен для типа `choice`. |\n| `req` | string | Со значением `on` поле становится обязательным при добавлении подписчиков. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `type` |\n| `500` | `12` | Для типа `choice` не заданы `choices` |\n| `500` | `59` | `var` длиннее 10 символов |\n| `500` | `13` | Достигнут лимит дополнительных полей на тарифе |\n\n[Метод в документации](https://dashamail.ru/api/lists/#add-field)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "type": {
                                        "type": "string",
                                        "enum": [
                                            "text",
                                            "number",
                                            "date",
                                            "choice",
                                            "tags"
                                        ],
                                        "description": "Тип поля."
                                    },
                                    "var": {
                                        "type": "string",
                                        "description": "Имя подстановки для писем — например `ИМЯ` подставляется как `%ИМЯ%`. Не длиннее 10 символов."
                                    },
                                    "title": {
                                        "type": "string",
                                        "description": "Отображаемое название поля."
                                    },
                                    "choices": {
                                        "type": "string",
                                        "description": "Массив вариантов. Обязателен для типа `choice`."
                                    },
                                    "req": {
                                        "type": "string",
                                        "description": "Со значением `on` поле становится обязательным при добавлении подписчиков."
                                    }
                                },
                                "required": [
                                    "type"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "type": "choice",
                                "var": "ГОРОД",
                                "title": "Город",
                                "choices": "[\"Москва\",\"Санкт-Петербург\",\"Казань\"]"
                            }
                        }
                    }
                }
            }
        },
        "/lists/{list_id}/fields/{merge_id}": {
            "put": {
                "operationId": "update-field",
                "summary": "Изменить дополнительное поле",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Меняет параметры существующего поля. Незаданные параметры сохраняют прежние значения. Тип поля изменить нельзя.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `merge_id` | integer, обязательный | Номер изменяемого поля — продублируйте значение из пути. |\n| `title` | string | Новое название. |\n| `var` | string | Новое имя подстановки. |\n| `choices` | JSON-строка | Новый список вариантов для поля типа `choice`. |\n| `req` | string | Обязательность поля. |\n| `default` | string | Значение по умолчанию. Неприменимо к полям типа `tags`. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `merge_id` |\n| `404` | `5` | Базы с таким `list_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#update-field)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "merge_id",
                        "in": "path",
                        "required": true,
                        "description": "Номер поля: `1` для `merge_1` и так далее.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "2"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "merge_id": {
                                        "type": "integer",
                                        "description": "Номер изменяемого поля — продублируйте значение из пути."
                                    },
                                    "title": {
                                        "type": "string",
                                        "description": "Новое название."
                                    },
                                    "var": {
                                        "type": "string",
                                        "description": "Новое имя подстановки."
                                    },
                                    "choices": {
                                        "type": "string",
                                        "description": "Новый список вариантов для поля типа `choice`."
                                    },
                                    "req": {
                                        "type": "string",
                                        "description": "Обязательность поля."
                                    },
                                    "default": {
                                        "type": "string",
                                        "description": "Значение по умолчанию. Неприменимо к полям типа `tags`."
                                    }
                                },
                                "required": [
                                    "merge_id"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "merge_id": 2,
                                "title": "Город проживания",
                                "req": "on"
                            }
                        }
                    }
                }
            },
            "delete": {
                "operationId": "delete-field",
                "summary": "Удалить дополнительное поле",
                "tags": [
                    "Адресные базы"
                ],
                "description": "Удаляет поле из базы вместе со значениями у всех подписчиков.\n\n> **Внимание.** Поля с бо́льшими номерами сдвигаются на одну позицию вверх: после удаления `merge_2` бывшее `merge_3` становится `merge_2`. Проверьте интеграции, которые ссылаются на номера полей.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `500` | `13` | Номер поля выходит за пределы доступных полей |\n| `404` | `5` | Базы с таким `list_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/lists/#delete-field)",
                "parameters": [
                    {
                        "name": "list_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор базы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "128341"
                    },
                    {
                        "name": "merge_id",
                        "in": "path",
                        "required": true,
                        "description": "Номер удаляемого поля.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "3"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/campaigns": {
            "get": {
                "operationId": "get-campaigns",
                "summary": "Список рассылок",
                "tags": [
                    "Рассылки"
                ],
                "description": "Возвращает рассылки аккаунта. Удалённые не показываются, если явно не запрошен статус `DELETED`.\n\n> **Примечание.** Здесь смещение задаётся параметром `offset` (в отличие от подписчиков, где используется `start`). По умолчанию возвращается 100 рассылок.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Рассылок, подходящих под фильтр, нет |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#get-campaigns)",
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Сколько рассылок вернуть.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 2
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "required": false,
                        "description": "Смещение. Учитывается только вместе с `limit`.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "Фильтр по статусу рассылки.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "SENT"
                    },
                    {
                        "name": "list_id",
                        "in": "query",
                        "required": false,
                        "description": "Только рассылки по указанной адресной базе.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Рассылки не раньше этой даты. Для статуса `SENT` сравнивается время отправки, иначе — время последнего изменения.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14"
                        }
                    },
                    {
                        "name": "end",
                        "in": "query",
                        "required": false,
                        "description": "Рассылки не позже этой даты.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14"
                        }
                    },
                    {
                        "name": "external_campaign_id",
                        "in": "query",
                        "required": false,
                        "description": "Поиск по вашему внешнему идентификатору.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "workflow",
                        "in": "query",
                        "required": false,
                        "description": "Только письма указанной цепочки автоматизации.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "merge_json",
                        "in": "query",
                        "required": false,
                        "description": "Отдавать вложенные структуры как JSON. Признак: передайте 1.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 501233,
                                                "name": "Весенняя распродажа",
                                                "subject": "Скидки до 40%",
                                                "from_name": "Ромашка",
                                                "from_email": "news@example.ru",
                                                "list_id": "128341",
                                                "status": "SENT",
                                                "delivery_time": "2026-04-05 10:00:00",
                                                "sent": 1284
                                            },
                                            {
                                                "id": 501199,
                                                "name": "Мартовский дайджест",
                                                "subject": "Что нового",
                                                "from_name": "Ромашка",
                                                "from_email": "news@example.ru",
                                                "list_id": "128341",
                                                "status": "SENT",
                                                "delivery_time": "2026-03-02 10:00:00",
                                                "sent": 1201
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "create-campaign",
                "summary": "Создать рассылку",
                "tags": [
                    "Рассылки"
                ],
                "description": "Создаёт черновик рассылки. Отправка не начинается — для этого нужно [перевести рассылку в статус запуска](https://dashamail.ru/api/campaigns/#update-campaign).\n\nСодержимое письма можно передать сразу в `html`, а можно наполнить позже.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `list_id` | integer | JSON-строка, обязательный | Адресная база. Для рассылки по нескольким базам передайте JSON-массив идентификаторов: `\"[128341,128342]\"`. |\n| `subject` | string, обязательный | Тема письма. Поддерживает подстановки вида `%ИМЯ%`. |\n| `from_email` | string, обязательный | Адрес отправителя. Домен должен быть подтверждён в аккаунте. |\n| `from_name` | string, обязательный | Имя отправителя. |\n| `name` | string | Внутреннее название рассылки, получателям не видно. По умолчанию: `Без Названия + дата`. |\n| `html` | string | HTML-версия письма. Вместо вёрстки можно передать `id` сохранённого шаблона числом, либо `tmpl<campaign_id>`, чтобы взять вёрстку другой рассылки. |\n| `plain_text` | string | Текстовая версия письма. |\n| `amp` | string | AMP-версия письма. Требует включённой поддержки AMP на аккаунте. |\n| `track_opens` | string | Отслеживать открытия. Допустимые значения: `Y`, `N`. По умолчанию: `Y`. |\n| `track_clicks` | string | Отслеживать клики. Допустимые значения: `Y`, `N`. По умолчанию: `Y`. |\n| `plain_clicks` | string | Отслеживать клики и в текстовой версии. Допустимые значения: `Y`, `N`. По умолчанию: `N`. |\n| `esegment` | JSON-строка | Условия сегментации базы. Структура: `{\"match\":\"and\",\"c\":[{\"field\":\"…\",\"op\":\"…\",\"value\":\"…\"}]}`. При рассылке по нескольким базам — объект, где ключ это `list_id`. |\n| `status` | string | При создании допустимы только `DRAFT` и `TEMPLATE`; любое другое значение приводится к `DRAFT`. Допустимые значения: `DRAFT`, `TEMPLATE`. По умолчанию: `DRAFT`. |\n| `external_campaign_id` | string | Ваш идентификатор рассылки для сопоставления с внешней системой. |\n| `personalizeToEmail` | string | Подставлять имя получателя в поле «Кому». По умолчанию: `off`. |\n| `to_email` | string | Шаблон отображаемого имени получателя, например `%ИМЯ%`. |\n| `analytics` | string | Добавлять UTM-метки к ссылкам. Допустимые значения: `Y`, `N`. По умолчанию: `N`. |\n| `analytics_tag` | string | Значение `utm_campaign`. |\n| `analytics_source` | string | Значение `utm_source`. |\n| `analytics_medium` | string | Значение `utm_medium`. |\n| `analytics_content` | string | Значение `utm_content`. |\n| `analytics_term` | string | Значение `utm_term`. |\n| `allow_time_zone` | флаг | Отправлять с учётом часового пояса получателя. |\n| `allow_best_time` | флаг | Отправлять в наиболее удачное для получателя время. |\n| `limit` | integer | Ограничить скорость отправки — сколько писем за интервал `wait_time`. |\n| `wait_time` | integer | Интервал ограничения скорости в минутах. |\n| `no_images_add` | флаг | Не добавлять изображения автоматически. |\n| `dialogs_enabled` | флаг | Включить приём ответов через Даша.Диалоги. Несовместимо с собственным Reply-To — при конфликте побеждают диалоги. |\n| `stat_domain` | string | Домен для ссылок статистики. Должен быть подтверждён в аккаунте. |\n| `cloud` | флаг | Выгрузить изображения из HTML в облачное хранилище DashaMail. |\n\n**Что возвращается**\n\nИдентификатор созданной рассылки.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не переданы обязательные параметры |\n| `422` | `6` | Адрес отправителя запрещён или не подтверждён |\n| `500` | `38` | Некорректная структура `esegment` |\n| `404` | `5` | Указанной адресной базы не существует |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#create-campaign)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "campaign_id": 501233
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "list_id": {
                                        "type": "string",
                                        "description": "Адресная база. Для рассылки по нескольким базам передайте JSON-массив идентификаторов: `\"[128341,128342]\"`."
                                    },
                                    "subject": {
                                        "type": "string",
                                        "description": "Тема письма. Поддерживает подстановки вида `%ИМЯ%`."
                                    },
                                    "from_email": {
                                        "type": "string",
                                        "description": "Адрес отправителя. Домен должен быть подтверждён в аккаунте."
                                    },
                                    "from_name": {
                                        "type": "string",
                                        "description": "Имя отправителя."
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "Внутреннее название рассылки, получателям не видно."
                                    },
                                    "html": {
                                        "type": "string",
                                        "description": "HTML-версия письма. Вместо вёрстки можно передать `id` сохранённого шаблона числом, либо `tmpl<campaign_id>`, чтобы взять вёрстку другой рассылки."
                                    },
                                    "plain_text": {
                                        "type": "string",
                                        "description": "Текстовая версия письма."
                                    },
                                    "amp": {
                                        "type": "string",
                                        "description": "AMP-версия письма. Требует включённой поддержки AMP на аккаунте."
                                    },
                                    "track_opens": {
                                        "type": "string",
                                        "enum": [
                                            "Y",
                                            "N"
                                        ],
                                        "description": "Отслеживать открытия."
                                    },
                                    "track_clicks": {
                                        "type": "string",
                                        "enum": [
                                            "Y",
                                            "N"
                                        ],
                                        "description": "Отслеживать клики."
                                    },
                                    "plain_clicks": {
                                        "type": "string",
                                        "enum": [
                                            "Y",
                                            "N"
                                        ],
                                        "description": "Отслеживать клики и в текстовой версии."
                                    },
                                    "esegment": {
                                        "type": "string",
                                        "description": "Условия сегментации базы. Структура: `{\"match\":\"and\",\"c\":[{\"field\":\"…\",\"op\":\"…\",\"value\":\"…\"}]}`. При рассылке по нескольким базам — объект, где ключ это `list_id`."
                                    },
                                    "status": {
                                        "type": "string",
                                        "enum": [
                                            "DRAFT",
                                            "TEMPLATE"
                                        ],
                                        "description": "При создании допустимы только `DRAFT` и `TEMPLATE`; любое другое значение приводится к `DRAFT`."
                                    },
                                    "external_campaign_id": {
                                        "type": "string",
                                        "description": "Ваш идентификатор рассылки для сопоставления с внешней системой."
                                    },
                                    "personalizeToEmail": {
                                        "type": "string",
                                        "description": "Подставлять имя получателя в поле «Кому»."
                                    },
                                    "to_email": {
                                        "type": "string",
                                        "description": "Шаблон отображаемого имени получателя, например `%ИМЯ%`."
                                    },
                                    "analytics": {
                                        "type": "string",
                                        "enum": [
                                            "Y",
                                            "N"
                                        ],
                                        "description": "Добавлять UTM-метки к ссылкам."
                                    },
                                    "analytics_tag": {
                                        "type": "string",
                                        "description": "Значение `utm_campaign`."
                                    },
                                    "analytics_source": {
                                        "type": "string",
                                        "description": "Значение `utm_source`."
                                    },
                                    "analytics_medium": {
                                        "type": "string",
                                        "description": "Значение `utm_medium`."
                                    },
                                    "analytics_content": {
                                        "type": "string",
                                        "description": "Значение `utm_content`."
                                    },
                                    "analytics_term": {
                                        "type": "string",
                                        "description": "Значение `utm_term`."
                                    },
                                    "allow_time_zone": {
                                        "type": "string",
                                        "description": "Отправлять с учётом часового пояса получателя. Признак: передайте 1."
                                    },
                                    "allow_best_time": {
                                        "type": "string",
                                        "description": "Отправлять в наиболее удачное для получателя время. Признак: передайте 1."
                                    },
                                    "limit": {
                                        "type": "integer",
                                        "description": "Ограничить скорость отправки — сколько писем за интервал `wait_time`."
                                    },
                                    "wait_time": {
                                        "type": "integer",
                                        "description": "Интервал ограничения скорости в минутах."
                                    },
                                    "no_images_add": {
                                        "type": "string",
                                        "description": "Не добавлять изображения автоматически. Признак: передайте 1."
                                    },
                                    "dialogs_enabled": {
                                        "type": "string",
                                        "description": "Включить приём ответов через Даша.Диалоги. Несовместимо с собственным Reply-To — при конфликте побеждают диалоги. Признак: передайте 1."
                                    },
                                    "stat_domain": {
                                        "type": "string",
                                        "description": "Домен для ссылок статистики. Должен быть подтверждён в аккаунте."
                                    },
                                    "cloud": {
                                        "type": "string",
                                        "description": "Выгрузить изображения из HTML в облачное хранилище DashaMail. Признак: передайте 1."
                                    }
                                },
                                "required": [
                                    "list_id",
                                    "subject",
                                    "from_email",
                                    "from_name"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "list_id": 128341,
                                "subject": "Скидки до 40%",
                                "from_email": "news@example.ru",
                                "from_name": "Ромашка",
                                "name": "Весенняя распродажа",
                                "html": "<h1>Скидки до 40%</h1><p><a id=\"unsub_link\" href=\"%ОТПИСАТЬСЯ%\">отписаться</a></p>",
                                "track_opens": "Y"
                            }
                        }
                    }
                }
            }
        },
        "/campaigns/{campaign_id}": {
            "get": {
                "operationId": "get-campaign",
                "summary": "Одна рассылка",
                "tags": [
                    "Рассылки"
                ],
                "description": "Возвращает рассылку целиком, включая HTML- и текстовую версии письма.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Рассылки с таким `campaign_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#get-campaign)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    },
                    {
                        "name": "merge_json",
                        "in": "query",
                        "required": false,
                        "description": "Отдавать вложенные структуры как JSON. Признак: передайте 1.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 501233,
                                                "name": "Весенняя распродажа",
                                                "subject": "Скидки до 40%",
                                                "from_name": "Ромашка",
                                                "from_email": "news@example.ru",
                                                "list_id": "128341",
                                                "status": "SENT",
                                                "track_opens": "Y",
                                                "track_clicks": "Y",
                                                "delivery_time": "2026-04-05 10:00:00",
                                                "html": "<h1>Скидки</h1><a id=\"unsub_link\" href=\"%ОТПИСАТЬСЯ%\">отписаться</a>",
                                                "plain_text": "Скидки. Отписаться: %ОТПИСАТЬСЯ%"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "operationId": "update-campaign",
                "summary": "Изменить и запустить рассылку",
                "tags": [
                    "Рассылки"
                ],
                "description": "Меняет черновик и — через параметр `status` — запускает отправку.\n\nИзменять можно рассылки в статусах `DRAFT`, `SCHEDULE`, `TRIGGER` и `TEMPLATE`. Уже отправляющуюся рассылку изменить нельзя.\n\n> **Примечание.** **Как отправить рассылку.** Передайте `status=MODERATING`, чтобы письмо ушло сразу после модерации, либо `status=SCHEDULE` вместе с `delivery_time`, чтобы запланировать отправку. Перед запуском проверяются тема, отправитель, наличие текста письма и [ссылки отписки](https://dashamail.ru/api/campaigns/#unsub-link).\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `status` | string | Новый статус. Запуск отправки — `MODERATING` или `SCHEDULE`. Допустимые значения: `DRAFT`, `MODERATING`, `SCHEDULE`, `TEMPLATE`. |\n| `delivery_time` | datetime | Время запланированной отправки. Обязателен при `status=SCHEDULE`. |\n| `subject` | string | Тема письма. |\n| `from_email` | string | Адрес отправителя. |\n| `from_name` | string | Имя отправителя. |\n| `name` | string | Внутреннее название. |\n| `list_id` | integer | JSON-строка | Сменить адресную базу или набор баз. |\n| `html` | string | HTML-версия письма. |\n| `plain_text` | string | Текстовая версия письма. |\n| `esegment` | JSON-строка | Условия сегментации. |\n| `track_opens` | string | Отслеживание открытий. Допустимые значения: `Y`, `N`. |\n| `track_clicks` | string | Отслеживание кликов. Допустимые значения: `Y`, `N`. |\n| `stat_domain` | string | Домен статистики. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Рассылки с таким `campaign_id` нет либо её статус не допускает изменений |\n| `409` | `21` | Рассылка уже отправляется |\n| `500` | `20` | Недопустимое значение `status` |\n| `500` | `13` | При `SCHEDULE` не задан `delivery_time` |\n| `500` | `14` | Не задана тема письма |\n| `500` | `15` | Не задано имя отправителя |\n| `500` | `16` | Не задан адрес отправителя |\n| `500` | `17` | Нет ни HTML-, ни текстовой версии |\n| `500` | `18` | В HTML нет ссылки отписки с `id=\"unsub_link\"` |\n| `500` | `19` | В тексте нет подстановки `%ОТПИСАТЬСЯ%` |\n| `402` | `25` | Недостаточно средств на балансе |\n| `403` | `30` | Отправка заблокирована по подозрению в спаме |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#update-campaign)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "status": {
                                        "type": "string",
                                        "enum": [
                                            "DRAFT",
                                            "MODERATING",
                                            "SCHEDULE",
                                            "TEMPLATE"
                                        ],
                                        "description": "Новый статус. Запуск отправки — `MODERATING` или `SCHEDULE`."
                                    },
                                    "delivery_time": {
                                        "type": "string",
                                        "example": "2026-03-14 11:02:41",
                                        "description": "Время запланированной отправки. Обязателен при `status=SCHEDULE`."
                                    },
                                    "subject": {
                                        "type": "string",
                                        "description": "Тема письма."
                                    },
                                    "from_email": {
                                        "type": "string",
                                        "description": "Адрес отправителя."
                                    },
                                    "from_name": {
                                        "type": "string",
                                        "description": "Имя отправителя."
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "Внутреннее название."
                                    },
                                    "list_id": {
                                        "type": "string",
                                        "description": "Сменить адресную базу или набор баз."
                                    },
                                    "html": {
                                        "type": "string",
                                        "description": "HTML-версия письма."
                                    },
                                    "plain_text": {
                                        "type": "string",
                                        "description": "Текстовая версия письма."
                                    },
                                    "esegment": {
                                        "type": "string",
                                        "description": "Условия сегментации."
                                    },
                                    "track_opens": {
                                        "type": "string",
                                        "enum": [
                                            "Y",
                                            "N"
                                        ],
                                        "description": "Отслеживание открытий."
                                    },
                                    "track_clicks": {
                                        "type": "string",
                                        "enum": [
                                            "Y",
                                            "N"
                                        ],
                                        "description": "Отслеживание кликов."
                                    },
                                    "stat_domain": {
                                        "type": "string",
                                        "description": "Домен статистики."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "status": "SCHEDULE",
                                "delivery_time": "2026-05-01 10:00:00"
                            }
                        }
                    }
                }
            },
            "delete": {
                "operationId": "delete-campaign",
                "summary": "Удалить рассылку",
                "tags": [
                    "Рассылки"
                ],
                "description": "Помечает рассылку удалённой. Статистика по уже отправленным письмам сохраняется.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Рассылки с таким `campaign_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#delete-campaign)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/campaigns/{campaign_id}/copy": {
            "post": {
                "operationId": "copy-campaign",
                "summary": "Скопировать рассылку",
                "tags": [
                    "Рассылки"
                ],
                "description": "Создаёт копию рассылки вместе с вёрсткой. Копия отправленной или заблокированной рассылки всегда получает статус `DRAFT`.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `name` | string | Название копии. По умолчанию совпадает с исходным. |\n| `client_id` | integer | Создать копию в аккаунте клиента. Доступно партнёрским аккаунтам. |\n\n**Что возвращается**\n\nИдентификатор созданной копии.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Исходной рассылки нет |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#copy-campaign)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор исходной рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "campaign_id": 501240
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "Название копии. По умолчанию совпадает с исходным."
                                    },
                                    "client_id": {
                                        "type": "integer",
                                        "description": "Создать копию в аккаунте клиента. Доступно партнёрским аккаунтам."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "name": "Весенняя распродажа — повтор"
                            }
                        }
                    }
                }
            }
        },
        "/campaigns/{campaign_id}/pause": {
            "post": {
                "operationId": "pause-campaign",
                "summary": "Поставить отправку на паузу",
                "tags": [
                    "Рассылки"
                ],
                "description": "Приостанавливает идущую рассылку. Уже отправленные письма не отзываются.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `500` | `41` | Рассылка сейчас не отправляется |\n| `404` | `22` | Рассылки с таким `campaign_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#pause-campaign)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/campaigns/{campaign_id}/resume": {
            "post": {
                "operationId": "resume-campaign",
                "summary": "Возобновить отправку",
                "tags": [
                    "Рассылки"
                ],
                "description": "Продолжает рассылку, поставленную на паузу, с того места, где она остановилась.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `401` | `42` | Рассылки на паузе с таким `campaign_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#resume-campaign)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/campaigns/{campaign_id}/resend": {
            "post": {
                "operationId": "resend-campaign",
                "summary": "Переотправить неоткрывшим",
                "tags": [
                    "Рассылки"
                ],
                "description": "Создаёт новую рассылку по тем получателям исходной, кто её не открыл. Обычный приём — повторить письмо через несколько дней с другой темой.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `new_subject` | string | Тема повторного письма. По умолчанию берётся исходная. |\n\n**Что возвращается**\n\nИдентификатор созданной рассылки.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Исходной рассылки нет |\n| `500` | `40` | Рассылка не в статусе `PROCESSING` или `SENT` |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#resend-campaign)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор исходной рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "campaign_id": 501255
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "new_subject": {
                                        "type": "string",
                                        "description": "Тема повторного письма. По умолчанию берётся исходная."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "new_subject": "Вы не видели: скидки до 40%"
                            }
                        }
                    }
                }
            }
        },
        "/campaigns/{campaign_id}/attachments": {
            "get": {
                "operationId": "get-attachments",
                "summary": "Вложения рассылки",
                "tags": [
                    "Рассылки"
                ],
                "description": "Список файлов, приложенных к рассылке. Возвращается не больше десяти вложений.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Рассылки с таким `campaign_id` нет |\n| `404` | `4` | Вложений нет |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#get-attachments)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 7712,
                                                "campaign_id": 501233,
                                                "name": "prays-list.pdf",
                                                "size": 184320,
                                                "link": ""
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "add-attachment",
                "summary": "Приложить файл",
                "tags": [
                    "Рассылки"
                ],
                "description": "Скачивает файл по указанной ссылке и прикладывает его к письму. Суммарный размер вложений ограничен тарифом.\n\n> **Примечание.** С параметром `separate_link` файл не скачивается: в письмо вставляется ссылка на него. Так стоит поступать с крупными файлами — письмо останется лёгким.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `url` | string, обязательный | Ссылка на файл. |\n| `name` | string | Имя файла в письме. По умолчанию берётся из ссылки; кириллица транслитерируется. |\n| `separate_link` | флаг | Не прикладывать файл, а вставить ссылку на него. |\n\n**Что возвращается**\n\nИдентификатор вложения.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `url` |\n| `500` | `33` | Недопустимый формат файла — `.php` и `.exe` запрещены |\n| `402` | `25` | Файл с таким именем уже приложен |\n| `413` | `26` | Превышен лимит на размер вложений |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#add-attachment)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 7712
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "url": {
                                        "type": "string",
                                        "description": "Ссылка на файл."
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "Имя файла в письме. По умолчанию берётся из ссылки; кириллица транслитерируется."
                                    },
                                    "separate_link": {
                                        "type": "string",
                                        "description": "Не прикладывать файл, а вставить ссылку на него. Признак: передайте 1."
                                    }
                                },
                                "required": [
                                    "url"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "url": "https://example.ru/files/prays-list.pdf",
                                "name": "Прайс-лист.pdf"
                            }
                        }
                    }
                }
            }
        },
        "/campaigns/{campaign_id}/attachments/{id}": {
            "delete": {
                "operationId": "delete-attachment",
                "summary": "Удалить вложение",
                "tags": [
                    "Рассылки"
                ],
                "description": "Открепляет файл от рассылки и удаляет его с диска.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Рассылки с таким `campaign_id` нет |\n| `404` | `27` | Вложение не найдено |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#delete-attachment)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    },
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор вложения из [списка вложений](https://dashamail.ru/api/campaigns/#get-attachments).",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "7712"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/campaigns/folders": {
            "get": {
                "operationId": "get-folders",
                "summary": "Папки рассылок",
                "tags": [
                    "Рассылки"
                ],
                "description": "Список папок, по которым разложены рассылки.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Папок нет |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#get-folders)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть одну папку.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "name",
                        "in": "query",
                        "required": false,
                        "description": "Найти папку по точному названию.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 33,
                                                "name": "Дайджесты"
                                            },
                                            {
                                                "id": 34,
                                                "name": "Акции"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/campaigns/{campaign_id}/move": {
            "post": {
                "operationId": "move-campaign",
                "summary": "Переместить рассылку в папку",
                "tags": [
                    "Рассылки"
                ],
                "description": "Перекладывает рассылку в указанную папку.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `folder_id` | integer, обязательный | Идентификатор папки из [списка папок](https://dashamail.ru/api/campaigns/#get-folders). |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Рассылки с таким `campaign_id` нет |\n| `500` | `39` | Папки с таким `folder_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/campaigns/#move-campaign)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "folder_id": {
                                        "type": "integer",
                                        "description": "Идентификатор папки из [списка папок](https://dashamail.ru/api/campaigns/#get-folders)."
                                    }
                                },
                                "required": [
                                    "folder_id"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "folder_id": 34
                            }
                        }
                    }
                }
            }
        },
        "/automations": {
            "get": {
                "operationId": "get-automations",
                "summary": "Список автоматизаций",
                "tags": [
                    "Автоматизации"
                ],
                "description": "Возвращает автоматизации аккаунта вместе с настройками события и задержки.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Автоматизаций нет |\n\n[Метод в документации](https://dashamail.ru/api/automations/#get-automations)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть одну автоматизацию.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 502001,
                                                "name": "Welcome-письмо",
                                                "subject": "Добро пожаловать!",
                                                "from_name": "Ромашка",
                                                "from_email": "news@example.ru",
                                                "list_id": "128341",
                                                "status": "SUBSCRIBE",
                                                "action": "form,add",
                                                "auto_delay1": 0,
                                                "auto_delay2": 0
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "create-automation",
                "summary": "Создать автоматизацию",
                "tags": [
                    "Автоматизации"
                ],
                "description": "Создаёт триггерное письмо. Содержимое проверяется сразу — как при запуске обычной рассылки, включая наличие [ссылки отписки](https://dashamail.ru/api/campaigns/#unsub-link).\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `list_id` | integer | JSON-строка, обязательный | Адресная база, за которой следит автоматизация. Несколько баз — JSON-массив идентификаторов. |\n| `subject` | string, обязательный | Тема письма. |\n| `from_email` | string, обязательный | Адрес отправителя. |\n| `from_name` | string, обязательный | Имя отправителя. |\n| `event` | string, обязательный | Служебный параметр запроса — передайте сюда то же значение, что и в `action`. |\n| `action` | string | Событие запуска, см. [список событий](https://dashamail.ru/api/automations/#events). Несколько значений перечисляются через запятую. По умолчанию: `form`. |\n| `delay_1` | integer | Величина задержки перед отправкой. По умолчанию: `0`. |\n| `delay_2` | string | Единица измерения задержки. Допустимые значения: `hour`, `day`, `week`. По умолчанию: `0`. |\n| `campaigns` | string | Для событий `open`, `click` и `href` — идентификаторы рассылок, за которыми следить. |\n| `schedule_time` | string | Ограничение по времени суток для отправки. |\n| `auto` | флаг | Со значением `1` письмо проверяется как готовое к отправке: тема, отправитель, текст и ссылка отписки должны быть заполнены. |\n| `html` | string | HTML-версия письма. |\n| `plain_text` | string | Текстовая версия письма. |\n| `name` | string | Внутреннее название. |\n| `esegment` | JSON-строка | Условия сегментации базы. |\n| `track_opens` | string | Отслеживать открытия. Допустимые значения: `Y`, `N`. По умолчанию: `Y`. |\n| `track_clicks` | string | Отслеживать клики. Допустимые значения: `Y`, `N`. По умолчанию: `Y`. |\n| `analytics` | string | Добавлять UTM-метки. Допустимые значения: `Y`, `N`. По умолчанию: `N`. |\n\n**Что возвращается**\n\nИдентификатор созданной автоматизации.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не переданы обязательные параметры |\n| `401` | `2` | В комбинации событий использованы `open`, `click` или `edit` |\n| `500` | `14` | Не задана тема письма |\n| `500` | `17` | Нет ни HTML-, ни текстовой версии |\n| `500` | `18` | Нет ссылки отписки в HTML |\n| `404` | `5` | Указанной адресной базы не существует |\n\n[Метод в документации](https://dashamail.ru/api/automations/#create-automation)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "campaign_id": 502001
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "list_id": {
                                        "type": "string",
                                        "description": "Адресная база, за которой следит автоматизация. Несколько баз — JSON-массив идентификаторов."
                                    },
                                    "subject": {
                                        "type": "string",
                                        "description": "Тема письма."
                                    },
                                    "from_email": {
                                        "type": "string",
                                        "description": "Адрес отправителя."
                                    },
                                    "from_name": {
                                        "type": "string",
                                        "description": "Имя отправителя."
                                    },
                                    "event": {
                                        "type": "string",
                                        "description": "Служебный параметр запроса — передайте сюда то же значение, что и в `action`."
                                    },
                                    "action": {
                                        "type": "string",
                                        "description": "Событие запуска, см. [список событий](https://dashamail.ru/api/automations/#events). Несколько значений перечисляются через запятую."
                                    },
                                    "delay_1": {
                                        "type": "integer",
                                        "description": "Величина задержки перед отправкой."
                                    },
                                    "delay_2": {
                                        "type": "string",
                                        "enum": [
                                            "hour",
                                            "day",
                                            "week"
                                        ],
                                        "description": "Единица измерения задержки."
                                    },
                                    "campaigns": {
                                        "type": "string",
                                        "description": "Для событий `open`, `click` и `href` — идентификаторы рассылок, за которыми следить."
                                    },
                                    "schedule_time": {
                                        "type": "string",
                                        "description": "Ограничение по времени суток для отправки."
                                    },
                                    "auto": {
                                        "type": "string",
                                        "description": "Со значением `1` письмо проверяется как готовое к отправке: тема, отправитель, текст и ссылка отписки должны быть заполнены. Признак: передайте 1."
                                    },
                                    "html": {
                                        "type": "string",
                                        "description": "HTML-версия письма."
                                    },
                                    "plain_text": {
                                        "type": "string",
                                        "description": "Текстовая версия письма."
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "Внутреннее название."
                                    },
                                    "esegment": {
                                        "type": "string",
                                        "description": "Условия сегментации базы."
                                    },
                                    "track_opens": {
                                        "type": "string",
                                        "enum": [
                                            "Y",
                                            "N"
                                        ],
                                        "description": "Отслеживать открытия."
                                    },
                                    "track_clicks": {
                                        "type": "string",
                                        "enum": [
                                            "Y",
                                            "N"
                                        ],
                                        "description": "Отслеживать клики."
                                    },
                                    "analytics": {
                                        "type": "string",
                                        "enum": [
                                            "Y",
                                            "N"
                                        ],
                                        "description": "Добавлять UTM-метки."
                                    }
                                },
                                "required": [
                                    "list_id",
                                    "subject",
                                    "from_email",
                                    "from_name",
                                    "event"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "list_id": 128341,
                                "subject": "Добро пожаловать!",
                                "from_email": "news@example.ru",
                                "from_name": "Ромашка",
                                "event": "form,add",
                                "action": "form,add",
                                "delay_1": 1,
                                "delay_2": "hour",
                                "html": "<h1>Спасибо за подписку</h1><a id=\"unsub_link\" href=\"%ОТПИСАТЬСЯ%\">отписаться</a>"
                            }
                        }
                    }
                }
            }
        },
        "/automations/{campaign_id}": {
            "put": {
                "operationId": "update-automation",
                "summary": "Изменить автоматизацию",
                "tags": [
                    "Автоматизации"
                ],
                "description": "Меняет содержимое письма, событие запуска или задержку. Незаданные параметры сохраняют прежние значения.\n\n> **Примечание.** После изменения содержимого автоматизация снова проходит модерацию.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `subject` | string | Тема письма. |\n| `from_email` | string | Адрес отправителя. |\n| `from_name` | string | Имя отправителя. |\n| `html` | string | HTML-версия письма. |\n| `plain_text` | string | Текстовая версия письма. |\n| `list_id` | integer | JSON-строка | Сменить адресную базу. |\n| `action` | string | Событие запуска. |\n| `delay_1` | integer | Величина задержки. |\n| `delay_2` | string | Единица измерения задержки. Допустимые значения: `hour`, `day`, `week`. |\n| `campaigns` | string | Отслеживаемые рассылки для событий по открытиям и кликам. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Автоматизации с таким `campaign_id` нет |\n| `500` | `20` | Указанная рассылка не является автоматизацией |\n\n[Метод в документации](https://dashamail.ru/api/automations/#update-automation)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор автоматизации.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "502001"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "subject": {
                                        "type": "string",
                                        "description": "Тема письма."
                                    },
                                    "from_email": {
                                        "type": "string",
                                        "description": "Адрес отправителя."
                                    },
                                    "from_name": {
                                        "type": "string",
                                        "description": "Имя отправителя."
                                    },
                                    "html": {
                                        "type": "string",
                                        "description": "HTML-версия письма."
                                    },
                                    "plain_text": {
                                        "type": "string",
                                        "description": "Текстовая версия письма."
                                    },
                                    "list_id": {
                                        "type": "string",
                                        "description": "Сменить адресную базу."
                                    },
                                    "action": {
                                        "type": "string",
                                        "description": "Событие запуска."
                                    },
                                    "delay_1": {
                                        "type": "integer",
                                        "description": "Величина задержки."
                                    },
                                    "delay_2": {
                                        "type": "string",
                                        "enum": [
                                            "hour",
                                            "day",
                                            "week"
                                        ],
                                        "description": "Единица измерения задержки."
                                    },
                                    "campaigns": {
                                        "type": "string",
                                        "description": "Отслеживаемые рассылки для событий по открытиям и кликам."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "subject": "Добро пожаловать в Ромашку!",
                                "delay_1": 2,
                                "delay_2": "hour"
                            }
                        }
                    }
                }
            },
            "delete": {
                "operationId": "delete-automation",
                "summary": "Удалить автоматизацию",
                "tags": [
                    "Автоматизации"
                ],
                "description": "Останавливает и удаляет автоматизацию. Уже поставленные в очередь письма не отправляются.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Автоматизации с таким `campaign_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/automations/#delete-automation)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор автоматизации.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "502001"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/automations/{campaign_id}/trigger": {
            "post": {
                "operationId": "trigger-automation",
                "summary": "Запустить автоматизацию вручную",
                "tags": [
                    "Автоматизации"
                ],
                "description": "Отправляет письмо автоматизации конкретному подписчику, не дожидаясь события. Удобно для проверки вёрстки и для сценариев, где момент отправки решает ваша система.\n\n> **Примечание.** Предыдущая отправка этого письма тому же подписчику сбрасывается, поэтому повторный запуск сработает даже если письмо уже уходило.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `email` | string, обязательный | Адрес получателя. Подписчик должен существовать в аккаунте. |\n| `member_id` | integer | Идентификатор подписчика вместо адреса. |\n| `delay` | integer | Задержка в секундах. Без неё письмо уходит немедленно, с ней — планируется на указанное время. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Автоматизации с таким `campaign_id` нет |\n| `500` | `37` | Автоматизация ещё не прошла модерацию |\n| `404` | `9` | Подписчика с таким адресом нет |\n\n[Метод в документации](https://dashamail.ru/api/automations/#trigger-automation)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор автоматизации.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "502001"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "description": "Адрес получателя. Подписчик должен существовать в аккаунте."
                                    },
                                    "member_id": {
                                        "type": "integer",
                                        "description": "Идентификатор подписчика вместо адреса."
                                    },
                                    "delay": {
                                        "type": "integer",
                                        "description": "Задержка в секундах. Без неё письмо уходит немедленно, с ней — планируется на указанное время."
                                    }
                                },
                                "required": [
                                    "email"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "email": "ivan@example.com"
                            }
                        }
                    }
                }
            }
        },
        "/automations/{campaign_id}/copy": {
            "post": {
                "operationId": "copy-automation",
                "summary": "Скопировать автоматизацию",
                "tags": [
                    "Автоматизации"
                ],
                "description": "Создаёт копию автоматизации со всеми настройками события и задержки.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `format` | string | Формат копирования. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Исходной автоматизации нет |\n\n[Метод в документации](https://dashamail.ru/api/automations/#copy-automation)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор исходной автоматизации.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "502001"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "campaign_id": 502014
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "format": {
                                        "type": "string",
                                        "description": "Формат копирования."
                                    }
                                },
                                "additionalProperties": true
                            }
                        }
                    }
                }
            }
        },
        "/templates": {
            "get": {
                "operationId": "get-templates",
                "summary": "HTML-шаблоны",
                "tags": [
                    "Шаблоны"
                ],
                "description": "Возвращает сохранённые HTML-шаблоны аккаунта вместе с вёрсткой, от новых к старым.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Шаблонов нет |\n\n[Метод в документации](https://dashamail.ru/api/templates/#get-templates)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть один шаблон.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "name",
                        "in": "query",
                        "required": false,
                        "description": "Найти шаблон по точному названию.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 4412,
                                                "name": "Базовый одноколоночный",
                                                "html": "<html>…</html>"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "create-template",
                "summary": "Сохранить шаблон",
                "tags": [
                    "Шаблоны"
                ],
                "description": "Сохраняет вёрстку как HTML-шаблон.\n\nВ `template` можно передать либо саму вёрстку, либо **число** — идентификатор рассылки, чью вёрстку нужно сохранить.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `name` | string, обязательный | Название шаблона. |\n| `template` | string, обязательный | HTML-вёрстка либо `campaign_id` числом. |\n| `body` | string, обязательный | Служебный параметр запроса — продублируйте сюда значение `template`. |\n| `campaign_id` | integer | Рассылка-источник вёрстки. Указывается вместе с числовым `template`. |\n| `cloud` | флаг | Выгрузить изображения из вёрстки в облачное хранилище DashaMail. |\n\n**Что возвращается**\n\nИдентификатор созданного шаблона.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `name` или `template` |\n| `404` | `22` | Рассылки-источника с таким `campaign_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/templates/#create-template)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 4412
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "Название шаблона."
                                    },
                                    "template": {
                                        "type": "string",
                                        "description": "HTML-вёрстка либо `campaign_id` числом."
                                    },
                                    "body": {
                                        "type": "string",
                                        "description": "Служебный параметр запроса — продублируйте сюда значение `template`."
                                    },
                                    "campaign_id": {
                                        "type": "integer",
                                        "description": "Рассылка-источник вёрстки. Указывается вместе с числовым `template`."
                                    },
                                    "cloud": {
                                        "type": "string",
                                        "description": "Выгрузить изображения из вёрстки в облачное хранилище DashaMail. Признак: передайте 1."
                                    }
                                },
                                "required": [
                                    "name",
                                    "template",
                                    "body"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "name": "Базовый одноколоночный",
                                "template": "<html><body><h1>Заголовок</h1></body></html>",
                                "body": "<html><body><h1>Заголовок</h1></body></html>"
                            }
                        }
                    }
                }
            }
        },
        "/templates/saved": {
            "get": {
                "operationId": "get-saved-templates",
                "summary": "Сохранённые рассылки",
                "tags": [
                    "Шаблоны"
                ],
                "description": "Возвращает рассылки в статусе `TEMPLATE` — без вёрстки, только идентификатор, название и папку. Чтобы получить HTML, запросите рассылку через [её эндпоинт](https://dashamail.ru/api/campaigns/#get-campaign).\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Сохранённых рассылок нет |\n\n[Метод в документации](https://dashamail.ru/api/templates/#get-saved-templates)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть одну запись.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "name",
                        "in": "query",
                        "required": false,
                        "description": "Найти по точному названию.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 501100,
                                                "name": "Шаблон дайджеста",
                                                "folder_id": 33
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/templates/{id}": {
            "delete": {
                "operationId": "delete-template",
                "summary": "Удалить шаблон",
                "tags": [
                    "Шаблоны"
                ],
                "description": "Удаляет HTML-шаблон. Рассылки, созданные на его основе, не затрагиваются — вёрстка в них уже своя.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `500` | `28` | Шаблона с таким идентификатором нет |\n\n[Метод в документации](https://dashamail.ru/api/templates/#delete-template)",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор шаблона.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "4412"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/summary": {
            "get": {
                "operationId": "report-summary",
                "summary": "Сводка по рассылке",
                "tags": [
                    "Отчёты"
                ],
                "description": "Главные показатели рассылки одним объектом. Отсюда стоит начинать: остальные отчёты нужны, когда требуется детализация.\n\n> **Примечание.** Параметр `fast` отдаёт заранее посчитанные значения — это заметно быстрее, но несовместимо с фильтром по времени.\n\n**Что возвращается**\n\n`opened` и `clicked` — общее число событий, `unique_opened` и `unique_clicked` — число уникальных подписчиков. Возвраты разложены по типам: `hard` — несуществующие адреса, `soft` — временные отказы, `spam` и `spam_blocked` — отклонения антиспам-фильтрами, `blk` — прочие блокировки.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Рассылки с таким `campaign_id` нет |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-summary)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    },
                    {
                        "name": "fast",
                        "in": "query",
                        "required": false,
                        "description": "Взять готовые агрегаты вместо пересчёта. Игнорируется, если задан период. Признак: передайте 1.",
                        "schema": {
                            "type": "string"
                        },
                        "example": 1
                    },
                    {
                        "name": "time_start",
                        "in": "query",
                        "required": false,
                        "description": "Начало периода. При заданном периоде поле `sent` из ответа исключается.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "time_end",
                        "in": "query",
                        "required": false,
                        "description": "Конец периода.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "detailed",
                        "in": "query",
                        "required": false,
                        "description": "Со значением `1` сводка разбивается по рассылкам.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "sent": 1284,
                                            "opened": 741,
                                            "unique_opened": 512,
                                            "clicked": 168,
                                            "unique_clicked": 121,
                                            "unsubscribed": 6,
                                            "complained": 1,
                                            "hard": 12,
                                            "soft": 4,
                                            "spam": 0,
                                            "spam_blocked": 3,
                                            "blk": 1,
                                            "preview": 22,
                                            "total_events": 2258,
                                            "first_sent": "2026-04-05 10:00:04",
                                            "first_open": "2026-04-05 10:01:37",
                                            "last_open": "2026-04-08 21:14:52",
                                            "first_click": "2026-04-05 10:02:11",
                                            "last_click": "2026-04-08 19:02:40"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/{metric}": {
            "get": {
                "operationId": "report-lists",
                "summary": "Списки получателей по событию",
                "tags": [
                    "Отчёты"
                ],
                "description": "Возвращает подписчиков, с которыми произошло указанное событие. Один и тот же формат для семи метрик: `sent`, `delivered`, `opened`, `clicked`, `bounced`, `complained`, `unsubscribed`.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан ни `campaign_id`, ни `external_campaign_id` |\n| `404` | `22` | Рассылки с таким идентификатором нет |\n| `500` | `23` | Недопустимое поле в `order` |\n| `404` | `4` | Событий такого типа не было |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-lists)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    },
                    {
                        "name": "metric",
                        "in": "path",
                        "required": true,
                        "description": "Событие.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "sent",
                                "delivered",
                                "opened",
                                "clicked",
                                "bounced",
                                "complained",
                                "unsubscribed"
                            ]
                        },
                        "example": "opened"
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 2
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "description": "Сортировка, см. [список полей](https://dashamail.ru/api/reports/#sorting).",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "external_campaign_id",
                        "in": "query",
                        "required": false,
                        "description": "Использовать ваш внешний идентификатор рассылки вместо `campaign_id`.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "old_reports",
                        "in": "query",
                        "required": false,
                        "description": "Читать из архивного хранилища вместо аналитической базы. Нужен для очень старых рассылок. Признак: передайте 1.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "member_id": 90412881,
                                                "campaign_id": 501233,
                                                "list_id": 128341,
                                                "email": "ivan@example.com",
                                                "sent_time": "2026-04-05 10:00:12"
                                            },
                                            {
                                                "member_id": 90412882,
                                                "campaign_id": 501233,
                                                "list_id": 128341,
                                                "email": "maria@example.com",
                                                "sent_time": "2026-04-05 10:00:13"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/events": {
            "get": {
                "operationId": "report-events",
                "summary": "Лента событий",
                "tags": [
                    "Отчёты"
                ],
                "description": "Все события рассылки в одном потоке, с фильтрами по времени, типу и подписчику. Подходит для синхронизации событий с вашей аналитикой.\n\n> **Примечание.** По умолчанию берутся события за сегодня. Чтобы получить события за другой период, задайте `time_start` и `time_end` явно.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Рассылки с таким `campaign_id` нет |\n| `404` | `4` | За период событий нет |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-events)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    },
                    {
                        "name": "time_start",
                        "in": "query",
                        "required": false,
                        "description": "Начало периода.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        },
                        "example": "2026-04-05 00:00:00"
                    },
                    {
                        "name": "time_end",
                        "in": "query",
                        "required": false,
                        "description": "Конец периода.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "event_type",
                        "in": "query",
                        "required": false,
                        "description": "Оставить события одного типа.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "SENT",
                                "OPENED",
                                "CLICKED",
                                "PREVIEW",
                                "UNSUBSCRIBED",
                                "COMPLAINED",
                                "BOUNCED"
                            ]
                        },
                        "example": "CLICKED"
                    },
                    {
                        "name": "email",
                        "in": "query",
                        "required": false,
                        "description": "События одного подписчика.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "merge",
                        "in": "query",
                        "required": false,
                        "description": "Дополнительные поля подписчика, которые нужно приложить к каждому событию — например `[\"merge_1\",\"merge_2\"]`.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 2
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "description": "Сортировка.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "event_time": "2026-04-05 10:02:11",
                                                "event_type": "CLICKED",
                                                "email": "ivan@example.com",
                                                "url_original": "https://example.ru/sale",
                                                "device": "PC",
                                                "browser": "Chrome"
                                            },
                                            {
                                                "event_time": "2026-04-05 10:04:55",
                                                "event_type": "CLICKED",
                                                "email": "maria@example.com",
                                                "url_original": "https://example.ru/sale",
                                                "device": "Mobile",
                                                "browser": "Safari"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/clickstat": {
            "get": {
                "operationId": "report-clickstat",
                "summary": "Клики по ссылкам",
                "tags": [
                    "Отчёты"
                ],
                "description": "Сколько раз кликнули по каждой ссылке письма, от популярных к редким.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `22` | Рассылки с таким `campaign_id` нет |\n| `404` | `4` | Кликов не было |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-clickstat)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "url": "https://example.ru/sale",
                                                "clicks": 121
                                            },
                                            {
                                                "url": "https://example.ru/catalog",
                                                "clicks": 47
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/userclicks": {
            "get": {
                "operationId": "report-userclicks",
                "summary": "Кто кликнул по ссылке",
                "tags": [
                    "Отчёты"
                ],
                "description": "Подписчики, кликнувшие по указанной ссылке, со временем клика. Выборка ограничена последним годом.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `url` |\n| `404` | `4` | Кликов по этой ссылке не было |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-userclicks)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": true,
                        "description": "Ссылка целиком, в точности как в [отчёте по кликам](https://dashamail.ru/api/reports/#report-clickstat).",
                        "schema": {
                            "type": "string"
                        },
                        "example": "https://example.ru/sale"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "url": "https://example.ru/sale",
                                                "email": "ivan@example.com",
                                                "click_time": "2026-04-05 10:02:11"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/bouncestat": {
            "get": {
                "operationId": "report-bouncestat",
                "summary": "Возвраты по кодам",
                "tags": [
                    "Отчёты"
                ],
                "description": "Группировка возвратов по SMTP-кодам с расшифровкой. Помогает понять, дело в несуществующих адресах или в репутации отправителя.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Возвратов не было |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-bouncestat)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "bounce_code": "5.1.1",
                                                "count": 9,
                                                "description": "Bad destination mailbox address"
                                            },
                                            {
                                                "bounce_code": "5.2.2",
                                                "count": 3,
                                                "description": "Mailbox full"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/domains": {
            "get": {
                "operationId": "report-domains",
                "summary": "Показатели по доменам",
                "tags": [
                    "Отчёты"
                ],
                "description": "Доставляемость и вовлечённость в разрезе почтовых провайдеров. Проседание по одному домену обычно означает проблему с репутацией именно у него.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Данных за период нет |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-domains)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    },
                    {
                        "name": "time_start",
                        "in": "query",
                        "required": false,
                        "description": "Начало периода.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "time_end",
                        "in": "query",
                        "required": false,
                        "description": "Конец периода.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "order_field",
                        "in": "query",
                        "required": false,
                        "description": "Поле сортировки.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "order_type",
                        "in": "query",
                        "required": false,
                        "description": "Направление сортировки.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ]
                        },
                        "example": "asc"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "domain": "mail.ru",
                                                "sent": 612,
                                                "opened": 380,
                                                "unique_opened": 254,
                                                "clicked": 71,
                                                "unique_clicked": 55,
                                                "complained": 1,
                                                "unsubsribed": 3
                                            },
                                            {
                                                "domain": "yandex.ru",
                                                "sent": 431,
                                                "opened": 268,
                                                "unique_opened": 190,
                                                "clicked": 63,
                                                "unique_clicked": 47,
                                                "complained": 0,
                                                "unsubsribed": 2
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/geo": {
            "get": {
                "operationId": "report-geo",
                "summary": "География открытий",
                "tags": [
                    "Отчёты"
                ],
                "description": "Распределение событий по регионам. Ключ — код региона, значение — количество событий.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Данных нет |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-geo)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "77": 412,
                                            "78": 133,
                                            "16": 51
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/clients": {
            "get": {
                "operationId": "report-clients",
                "summary": "Почтовые клиенты и устройства",
                "tags": [
                    "Отчёты"
                ],
                "description": "Чем получатели читают письмо: браузеры, десктопные клиенты, мобильные устройства. Полезно перед изменением вёрстки.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Открытий и кликов не было |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-clients)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "chrome": 210,
                                            "safari": 122,
                                            "firefox": 44,
                                            "yandexbrowser": 88,
                                            "opera": 12,
                                            "ie": 3,
                                            "other": 19,
                                            "browsers": 498
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/reports/{campaign_id}/codes": {
            "get": {
                "operationId": "report-codes",
                "summary": "Коды подтверждения",
                "tags": [
                    "Отчёты"
                ],
                "description": "Одноразовые коды, разосланные в рамках рассылки, с адресами получателей и временем выдачи.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Кодов нет |\n\n[Метод в документации](https://dashamail.ru/api/reports/#report-codes)",
                "parameters": [
                    {
                        "name": "campaign_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор рассылки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "501233"
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "description": "Сортировка.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "email": "ivan@example.com",
                                                "code": "481920",
                                                "date": "2026-04-05 10:00:12"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/transactional/messages": {
            "post": {
                "operationId": "send-message",
                "summary": "Отправить письмо",
                "tags": [
                    "Транзакционные письма"
                ],
                "description": "Ставит письмо в очередь отправки и сразу возвращает его идентификатор. Фактическая доставка происходит асинхронно — следите за ней через [проверку статуса](https://dashamail.ru/api/transactional/#check-message) или webhooks.\n\nНужны как минимум три вещи: получатель, отправитель (`from_email` либо заголовок `From` внутри `headers`) и текст письма (`message` либо `plain_text`).\n\n> **Примечание.** В `to` можно перечислить несколько адресов через запятую. Тогда каждому уйдёт отдельное письмо, а в `message_id` можно передать столько же идентификаторов, тоже через запятую.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `to` | string, обязательный | Адрес получателя. Допустима форма `Иван Петров <ivan@example.com>`. Несколько адресов перечисляются через запятую. |\n| `from_email` | string, обязательный | Адрес отправителя на подтверждённом домене. Можно не передавать, если заголовок `From` задан внутри `headers`. |\n| `message` | string, обязательный | HTML-версия письма. Можно не передавать, если задан `plain_text`. |\n| `from_name` | string | Имя отправителя. Без него в поле «От кого» подставится сам адрес. |\n| `subject` | string | Тема письма. |\n| `plain_text` | string | Текстовая версия письма. |\n| `message_id` | string | Ваш идентификатор письма. Если не задан, генерируется автоматически и возвращается в ответе. |\n| `cc` | string | Копия. Несколько адресов — через запятую. |\n| `bcc` | string | Скрытая копия. |\n| `headers` | JSON-строка | Произвольные заголовки письма объектом — например `{\"Reply-To\":\"support@example.ru\"}`. Заданный здесь `From` заменяет `from_email`. |\n| `attachments` | JSON-строка | Массив вложений: `[{\"name\":\"чек.pdf\",\"filebody\":\"<base64>\"}]`. Файлы `.php` и `.exe` запрещены, суммарный размер ограничен тарифом. |\n| `inline` | JSON-строка | Встроенные в вёрстку изображения: `[{\"cid\":\"logo\",\"mime_type\":\"image/png\",\"filename\":\"logo.png\",\"body\":\"<base64>\"}]`. В HTML на них ссылаются как `<img src=\"cid:logo\">`. Допустимы только `image/jpeg`, `image/png`, `image/gif`. |\n| `delivery_time` | timestamp | Unix-время отложенной отправки. Без него письмо уходит немедленно. |\n| `domain` | string | Домен отправки, если в аккаунте их несколько. |\n| `stat_domain` | string | Домен для ссылок отслеживания. |\n| `maxdelivertime` | integer | Сколько секунд пытаться доставить письмо, прежде чем признать возвратом. |\n| `maxattempts` | integer | Максимальное число попыток доставки. |\n| `ignore_delivery_policy` | флаг | Игнорировать ограничения политики доставки аккаунта. |\n| `smarthost` | string | Промежуточный SMTP-сервер для отправки. |\n| `debug` | integer | Уровень отладочного логирования. |\n\n**Что возвращается**\n\nИдентификатор письма — по нему проверяется статус доставки.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Нет получателя, отправителя или текста письма |\n| `422` | `6` | Некорректный адрес получателя или отправителя |\n| `422` | `52` | Адрес в `from_email` не подтверждён как отправитель |\n| `402` | `35` | Недостаточно средств, функция недоступна на тарифе или аккаунт заблокирован за спам |\n| `500` | `33` | Недопустимый формат вложения |\n| `413` | `26` | Превышен лимит на размер вложений |\n| `500` | `40` | Некорректная структура `headers` |\n\n[Метод в документации](https://dashamail.ru/api/transactional/#send-message)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "transaction_id": "order-1024-paid"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "to": {
                                        "type": "string",
                                        "description": "Адрес получателя. Допустима форма `Иван Петров <ivan@example.com>`. Несколько адресов перечисляются через запятую."
                                    },
                                    "from_email": {
                                        "type": "string",
                                        "description": "Адрес отправителя на подтверждённом домене. Можно не передавать, если заголовок `From` задан внутри `headers`."
                                    },
                                    "message": {
                                        "type": "string",
                                        "description": "HTML-версия письма. Можно не передавать, если задан `plain_text`."
                                    },
                                    "from_name": {
                                        "type": "string",
                                        "description": "Имя отправителя. Без него в поле «От кого» подставится сам адрес."
                                    },
                                    "subject": {
                                        "type": "string",
                                        "description": "Тема письма."
                                    },
                                    "plain_text": {
                                        "type": "string",
                                        "description": "Текстовая версия письма."
                                    },
                                    "message_id": {
                                        "type": "string",
                                        "description": "Ваш идентификатор письма. Если не задан, генерируется автоматически и возвращается в ответе."
                                    },
                                    "cc": {
                                        "type": "string",
                                        "description": "Копия. Несколько адресов — через запятую."
                                    },
                                    "bcc": {
                                        "type": "string",
                                        "description": "Скрытая копия."
                                    },
                                    "headers": {
                                        "type": "string",
                                        "description": "Произвольные заголовки письма объектом — например `{\"Reply-To\":\"support@example.ru\"}`. Заданный здесь `From` заменяет `from_email`."
                                    },
                                    "attachments": {
                                        "type": "string",
                                        "description": "Массив вложений: `[{\"name\":\"чек.pdf\",\"filebody\":\"<base64>\"}]`. Файлы `.php` и `.exe` запрещены, суммарный размер ограничен тарифом."
                                    },
                                    "inline": {
                                        "type": "string",
                                        "description": "Встроенные в вёрстку изображения: `[{\"cid\":\"logo\",\"mime_type\":\"image/png\",\"filename\":\"logo.png\",\"body\":\"<base64>\"}]`. В HTML на них ссылаются как `<img src=\"cid:logo\">`. Допустимы только `image/jpeg`, `image/png`, `image/gif`."
                                    },
                                    "delivery_time": {
                                        "type": "integer",
                                        "description": "Unix-время отложенной отправки. Без него письмо уходит немедленно. Unix-время."
                                    },
                                    "domain": {
                                        "type": "string",
                                        "description": "Домен отправки, если в аккаунте их несколько."
                                    },
                                    "stat_domain": {
                                        "type": "string",
                                        "description": "Домен для ссылок отслеживания."
                                    },
                                    "maxdelivertime": {
                                        "type": "integer",
                                        "description": "Сколько секунд пытаться доставить письмо, прежде чем признать возвратом."
                                    },
                                    "maxattempts": {
                                        "type": "integer",
                                        "description": "Максимальное число попыток доставки."
                                    },
                                    "ignore_delivery_policy": {
                                        "type": "string",
                                        "description": "Игнорировать ограничения политики доставки аккаунта. Признак: передайте 1."
                                    },
                                    "smarthost": {
                                        "type": "string",
                                        "description": "Промежуточный SMTP-сервер для отправки."
                                    },
                                    "debug": {
                                        "type": "integer",
                                        "description": "Уровень отладочного логирования."
                                    }
                                },
                                "required": [
                                    "to",
                                    "from_email",
                                    "message"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "to": "ivan@example.com",
                                "from_email": "noreply@example.ru",
                                "from_name": "Интернет-магазин Ромашка",
                                "subject": "Заказ №1024 оплачен",
                                "message": "<p>Спасибо за заказ! Мы уже собираем его.</p>",
                                "plain_text": "Спасибо за заказ! Мы уже собираем его.",
                                "message_id": "order-1024-paid"
                            }
                        }
                    }
                }
            }
        },
        "/transactional/messages/{transaction_id}": {
            "get": {
                "operationId": "check-message",
                "summary": "Статус письма",
                "tags": [
                    "Транзакционные письма"
                ],
                "description": "Возвращает текущий статус письма и historию его событий. Данные появляются через несколько секунд после отправки.\n\n> **Примечание.** Поиск по конкретному письму доступен за последние шесть месяцев. За более старыми данными обращайтесь к [журналу](https://dashamail.ru/api/transactional/#get-log).\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `transaction_id` | string, обязательный | Идентификатор письма — продублируйте значение из пути в строке запроса. |\n\n**Что возвращается**\n\n`data` — последнее состояние письма, `log` — последовательность событий. Даты событий лежат в полях `datesent`, `dateopened`, `dateclicked`, `datebounced` и подобных.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `transaction_id` |\n| `500` | `34` | В аккаунте не настроен домен отправки |\n| `402` | `35` | Функция недоступна на текущем тарифе |\n| `404` | `4` | Письма с таким идентификатором не найдено |\n\n[Метод в документации](https://dashamail.ru/api/transactional/#check-message)",
                "parameters": [
                    {
                        "name": "transaction_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор письма из ответа на отправку.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "order-1024-paid"
                    },
                    {
                        "name": "transaction_id",
                        "in": "query",
                        "required": false,
                        "description": "",
                        "schema": {
                            "type": "string"
                        },
                        "example": "order-1024-paid"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "data": {
                                                "to": "ivan@example.com",
                                                "status": 3,
                                                "statusname": "Delivered",
                                                "date": "2026-04-12T10:15:03Z",
                                                "datesent": "2026-04-12T10:15:01Z",
                                                "delivery_info": "Доставлено: 10:15:03 250 2.0.0 OK",
                                                "statuschangedate": "2026-04-12T10:15:03Z"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "transaction_id": {
                                        "type": "string",
                                        "description": "Идентификатор письма — продублируйте значение из пути в строке запроса."
                                    }
                                },
                                "required": [
                                    "transaction_id"
                                ],
                                "additionalProperties": true
                            }
                        }
                    }
                }
            }
        },
        "/transactional/log": {
            "get": {
                "operationId": "get-log",
                "summary": "Журнал отправок",
                "tags": [
                    "Транзакционные письма"
                ],
                "description": "События транзакционных писем аккаунта с фильтрами. Основной инструмент для разбора инцидентов: «почему клиент не получил письмо».\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `500` | `34` | В аккаунте не настроен домен отправки |\n| `402` | `35` | Функция недоступна на текущем тарифе |\n| `404` | `4` | Событий по фильтру нет |\n\n[Метод в документации](https://dashamail.ru/api/transactional/#get-log)",
                "parameters": [
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 2
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "description": "Направление сортировки по времени события.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "ASC",
                                "DESC"
                            ]
                        },
                        "example": "ASC"
                    },
                    {
                        "name": "message_id",
                        "in": "query",
                        "required": false,
                        "description": "События одного письма.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "campaign_id",
                        "in": "query",
                        "required": false,
                        "description": "События одной кампании.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "event_type",
                        "in": "query",
                        "required": false,
                        "description": "Типы событий через запятую либо `all`.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "SENT",
                                "DELIVERED",
                                "OPENED",
                                "CLICKED",
                                "BOUNCED",
                                "COMPLAINED",
                                "UNSUBSCRIBED",
                                "all"
                            ]
                        },
                        "example": "BOUNCED"
                    },
                    {
                        "name": "emails",
                        "in": "query",
                        "required": false,
                        "description": "Адреса получателей через запятую.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Начало периода.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Конец периода.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": false,
                        "description": "Фильтр по ссылке для событий клика.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "event_time": "2026-04-12 10:15:40",
                                                "event_type": "BOUNCED",
                                                "email": "nobody@example.com",
                                                "message_id": "order-1025-paid",
                                                "bounce_code": "5.1.1",
                                                "bounce_reason": "Bad destination mailbox address"
                                            },
                                            {
                                                "event_time": "2026-04-12 09:02:11",
                                                "event_type": "BOUNCED",
                                                "email": "old@example.com",
                                                "message_id": "order-1019-paid",
                                                "bounce_code": "5.2.2",
                                                "bounce_reason": "Mailbox full"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/transactional/stats": {
            "get": {
                "operationId": "get-stats",
                "summary": "Статистика отправок",
                "tags": [
                    "Транзакционные письма"
                ],
                "description": "Агрегированные показатели транзакционных писем за период, разложенные по временным интервалам. Годится для построения графиков доставляемости.\n\n> **Примечание.** Ширина интервала подбирается по периоду автоматически: пять минут для `1h`, час для `24h`, сутки для `7d` и `30d`.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `402` | `35` | Функция недоступна на текущем тарифе |\n| `404` | `4` | Данных за период нет |\n\n[Метод в документации](https://dashamail.ru/api/transactional/#get-stats)",
                "parameters": [
                    {
                        "name": "period",
                        "in": "query",
                        "required": false,
                        "description": "Период отчёта. Значение `custom` включает `start_date` и `finish_date`.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "1h",
                                "24h",
                                "7d",
                                "30d",
                                "custom"
                            ]
                        },
                        "example": "24h"
                    },
                    {
                        "name": "start_date",
                        "in": "query",
                        "required": false,
                        "description": "Начало периода при `period=custom`.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "finish_date",
                        "in": "query",
                        "required": false,
                        "description": "Конец периода при `period=custom`.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "groupby",
                        "in": "query",
                        "required": false,
                        "description": "Шаг группировки при `period=custom`.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "hour",
                                "day",
                                "week",
                                "month"
                            ]
                        },
                        "example": "hour"
                    },
                    {
                        "name": "campaign_id",
                        "in": "query",
                        "required": false,
                        "description": "Только письма указанной кампании.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "domain",
                        "in": "query",
                        "required": false,
                        "description": "Только письма с указанного домена отправки.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "time": "2026-04-12 09:00",
                                                "sent": 412,
                                                "delivered": 401,
                                                "opened": 188,
                                                "clicked": 42,
                                                "bounced": 9,
                                                "complained": 0
                                            },
                                            {
                                                "time": "2026-04-12 10:00",
                                                "sent": 388,
                                                "delivered": 380,
                                                "opened": 165,
                                                "clicked": 37,
                                                "bounced": 6,
                                                "complained": 1
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/account/balance": {
            "get": {
                "operationId": "get-balance",
                "summary": "Баланс и лимиты",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Текущие лимиты аккаунта и число активных подписчиков. Самый дешёвый запрос — годится для проверки работоспособности ключа.\n\n**Что возвращается**\n\nНа поштучных тарифах `limit_emails` — остаток оплаченных писем, а `limit_members` равен нулю. На месячных тарифах возвращается и `expiration_date` — дата окончания оплаченного периода.\n\n[Метод в документации](https://dashamail.ru/api/account/#get-balance)",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "limit_members": 5000,
                                            "limit_emails": 50000,
                                            "expiration_date": "01.10.2026 12:00:00",
                                            "members": 1284
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/account/senders": {
            "get": {
                "operationId": "get-senders",
                "summary": "Подтверждённые отправители",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Список адресов, подтверждённых как обратные. Возвращается массивом строк, не более ста записей.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Подтверждённых адресов нет |\n\n[Метод в документации](https://dashamail.ru/api/account/#get-senders)",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            "news@example.ru",
                                            "support@example.ru"
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/account/senders/confirm": {
            "post": {
                "operationId": "confirm-sender",
                "summary": "Отправить письмо подтверждения",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Отправляет на указанный адрес письмо со ссылкой подтверждения. Адрес станет доступен как обратный после того, как получатель перейдёт по ссылке.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `email` | string, обязательный | Адрес, который нужно подтвердить. |\n| `code` | string, обязательный | Служебный параметр запроса — передайте сюда тот же адрес. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не переданы обязательные параметры |\n| `500` | `49` | Адрес уже подтверждён |\n| `500` | `50` | Одноразовый почтовый адрес |\n| `500` | `51` | Публичный домен Mail.ru запрещён политикой DMARC |\n| `500` | `48` | Не удалось отправить письмо подтверждения |\n\n[Метод в документации](https://dashamail.ru/api/account/#confirm-sender)",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "description": "Адрес, который нужно подтвердить."
                                    },
                                    "code": {
                                        "type": "string",
                                        "description": "Служебный параметр запроса — передайте сюда тот же адрес."
                                    }
                                },
                                "required": [
                                    "email",
                                    "code"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "email": "news@example.ru",
                                "code": "news@example.ru"
                            }
                        }
                    }
                }
            }
        },
        "/account/domains": {
            "get": {
                "operationId": "get-domains",
                "summary": "Домены отправки",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Домены аккаунта и состояние их DNS-настроек. Значения берутся из последней проверки — чтобы обновить их, вызовите [проверку DNS](https://dashamail.ru/api/account/#check-domains).\n\n**Что возвращается**\n\n`type` различает домен отправки (`domain`) и домен статистики (`stat_domain`). `valid` — домен полностью настроен; `valid_spf` и `valid_dkim` показывают состояние отдельных записей; `double_spf` сигнализирует о двух SPF-записях на домене — это ошибка конфигурации.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Доменов нет |\n\n[Метод в документации](https://dashamail.ru/api/account/#get-domains)",
                "parameters": [
                    {
                        "name": "domain",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть только этот домен отправки.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "stat_domain",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть только этот домен статистики.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "domain": "example.ru",
                                                "type": "domain",
                                                "valid": 1,
                                                "valid_spf": 1,
                                                "valid_dkim": 1,
                                                "double_spf": 0,
                                                "last_update": "2026-04-10 03:00:00"
                                            },
                                            {
                                                "domain": "stat.example.ru",
                                                "type": "stat_domain",
                                                "valid": 1,
                                                "last_update": "2026-04-10 03:00:00"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "add-domain",
                "summary": "Добавить домен",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Регистрирует домен в аккаунте и возвращает DNS-записи, которые нужно прописать у регистратора. До того как записи появятся в DNS и пройдут [проверку](https://dashamail.ru/api/account/#check-domains), отправка с этого домена не заработает.\n\n> **Примечание.** Кроме домена отправки можно добавить домен статистики — тогда ссылки отслеживания в письмах будут вести на ваш поддомен, а не на домен DashaMail. Оба параметра можно передать в одном запросе.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `domain` | string, обязательный | Домен отправки. Национальные (кириллические) домены не поддерживаются. |\n| `stat_domain` | string | Поддомен для ссылок статистики, например `stat.example.ru`. |\n\n**Что возвращается**\n\nМассив DNS-записей: тип, имя и значение каждой. Имя DKIM-записи берите из ответа, а не из примера: у доменов, добавленных раньше, селектор `dm`, у новых — `dm2`.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `500` | `54` | Некорректный домен или национальное имя |\n| `500` | `56` | Домен уже добавлен либо занят другим аккаунтом |\n\n[Метод в документации](https://dashamail.ru/api/account/#add-domain)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "record_type": "TXT",
                                                "name": "example.ru.",
                                                "value": "v=spf1 include:_spf.dashasender.ru ~all",
                                                "valid": 0
                                            },
                                            {
                                                "record_type": "TXT",
                                                "name": "dm2._domainkey.example.ru.",
                                                "value": "v=DKIM1;p=MIIBIjANBgkq…;t=s",
                                                "valid": 0
                                            },
                                            {
                                                "record_type": "CNAME",
                                                "name": "stat.example.ru.",
                                                "value": "stat.dashamail.com.",
                                                "valid": 0
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "domain": {
                                        "type": "string",
                                        "description": "Домен отправки. Национальные (кириллические) домены не поддерживаются."
                                    },
                                    "stat_domain": {
                                        "type": "string",
                                        "description": "Поддомен для ссылок статистики, например `stat.example.ru`."
                                    }
                                },
                                "required": [
                                    "domain"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "domain": "example.ru",
                                "stat_domain": "stat.example.ru"
                            }
                        }
                    }
                }
            }
        },
        "/account/domains/check": {
            "get": {
                "operationId": "check-domains",
                "summary": "Проверить DNS доменов",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Запрашивает DNS и обновляет состояние доменов. Вызывайте после того, как прописали записи у регистратора — распространение изменений обычно занимает от нескольких минут до нескольких часов.\n\n**Что возвращается**\n\nТе же DNS-записи, что и при добавлении домена, но с актуальным полем `valid` у каждой. Пока хотя бы одна запись имеет `valid: 0`, домен настроен не полностью.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Доменов для проверки нет |\n| `500` | `57` | Домена статистики с таким именем нет |\n\n[Метод в документации](https://dashamail.ru/api/account/#check-domains)",
                "parameters": [
                    {
                        "name": "domain",
                        "in": "query",
                        "required": false,
                        "description": "Проверить только этот домен отправки.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "stat_domain",
                        "in": "query",
                        "required": false,
                        "description": "Проверить только этот домен статистики.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "record_type": "TXT",
                                                "name": "example.ru.",
                                                "value": "v=spf1 include:_spf.dashasender.ru ~all",
                                                "valid": 1
                                            },
                                            {
                                                "record_type": "TXT",
                                                "name": "dm2._domainkey.example.ru.",
                                                "value": "v=DKIM1;p=MIIBIjANBgkq…;t=s",
                                                "valid": 1
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/account/domains/{domain}": {
            "delete": {
                "operationId": "delete-domain",
                "summary": "Удалить домен",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Убирает домен из аккаунта. После удаления отправка с адресов на этом домене прекращается.\n\n> **Примечание.** Служебные домены DashaMail удалить нельзя.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `delete_stat_domain` | string | Удалить заодно и домен статистики. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `500` | `54` | Домен нельзя удалить |\n\n[Метод в документации](https://dashamail.ru/api/account/#delete-domain)",
                "parameters": [
                    {
                        "name": "domain",
                        "in": "path",
                        "required": true,
                        "description": "Имя домена.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "example.ru"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "delete_stat_domain": {
                                        "type": "string",
                                        "description": "Удалить заодно и домен статистики."
                                    }
                                },
                                "additionalProperties": true
                            }
                        }
                    }
                }
            }
        },
        "/account/webhooks": {
            "get": {
                "operationId": "get-webhooks",
                "summary": "Webhooks массовых рассылок",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Текущие адреса, на которые уходят события массовых рассылок — объект вида «событие → URL».\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Webhooks не заданы или указанное событие не настроено |\n| `500` | `53` | Недопустимое значение `event_name` |\n\n[Метод в документации](https://dashamail.ru/api/account/#get-webhooks)",
                "parameters": [
                    {
                        "name": "event_name",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть настройку только одного события.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "open",
                                "click",
                                "hard",
                                "spam",
                                "unsub",
                                "subscribe",
                                "confirm"
                            ]
                        },
                        "example": "open"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "open": "https://example.ru/hooks/open",
                                                "click": "https://example.ru/hooks/click",
                                                "hard": "",
                                                "spam": "",
                                                "unsub": "https://example.ru/hooks/unsub",
                                                "subscribe": "",
                                                "confirm": ""
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "add-webhooks",
                "summary": "Настроить webhooks массовых рассылок",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Задаёт адреса приёма событий. Ключ каждого параметра — имя события, значение — URL. Передавайте только те события, которые нужно изменить; пустая строка отключает событие.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `open` | string | URL для событий открытия. |\n| `click` | string | URL для событий клика. |\n| `hard` | string | URL для невозвратных ошибок доставки. |\n| `spam` | string | URL для жалоб на спам. |\n| `unsub` | string | URL для отписок. |\n| `subscribe` | string | URL для новых подписок. |\n| `confirm` | string | URL для подтверждений подписки. |\n| `url` | string, обязательный | Служебный параметр запроса — продублируйте сюда любой из указанных выше адресов. |\n| `event` | string, обязательный | Служебный параметр запроса — имя настраиваемого события. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не переданы обязательные параметры |\n\n[Метод в документации](https://dashamail.ru/api/account/#add-webhooks)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "open": {
                                        "type": "string",
                                        "description": "URL для событий открытия."
                                    },
                                    "click": {
                                        "type": "string",
                                        "description": "URL для событий клика."
                                    },
                                    "hard": {
                                        "type": "string",
                                        "description": "URL для невозвратных ошибок доставки."
                                    },
                                    "spam": {
                                        "type": "string",
                                        "description": "URL для жалоб на спам."
                                    },
                                    "unsub": {
                                        "type": "string",
                                        "description": "URL для отписок."
                                    },
                                    "subscribe": {
                                        "type": "string",
                                        "description": "URL для новых подписок."
                                    },
                                    "confirm": {
                                        "type": "string",
                                        "description": "URL для подтверждений подписки."
                                    },
                                    "url": {
                                        "type": "string",
                                        "description": "Служебный параметр запроса — продублируйте сюда любой из указанных выше адресов."
                                    },
                                    "event": {
                                        "type": "string",
                                        "description": "Служебный параметр запроса — имя настраиваемого события."
                                    }
                                },
                                "required": [
                                    "url",
                                    "event"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "open": "https://example.ru/hooks/open",
                                "click": "https://example.ru/hooks/click",
                                "url": "https://example.ru/hooks/open",
                                "event": "open"
                            }
                        }
                    }
                }
            }
        },
        "/account/webhooks/{event_name}": {
            "delete": {
                "operationId": "delete-webhook",
                "summary": "Удалить webhook",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Отключает приём событий указанного типа.\n\n> **Внимание.** Если `event_name` не распознан, удаляются настройки **всех** событий сразу. Проверяйте имя события перед вызовом.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Webhooks не заданы или событие не настроено |\n| `500` | `53` | Недопустимое имя события |\n\n[Метод в документации](https://dashamail.ru/api/account/#delete-webhook)",
                "parameters": [
                    {
                        "name": "event_name",
                        "in": "path",
                        "required": true,
                        "description": "Имя события.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "open",
                                "click",
                                "hard",
                                "spam",
                                "unsub",
                                "subscribe",
                                "confirm"
                            ]
                        },
                        "example": "click"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/account/webhooks/transactional": {
            "get": {
                "operationId": "get-tr-webhooks",
                "summary": "Webhooks транзакционных писем",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Адреса приёма событий транзакционных писем. Набор событий отличается от массовых рассылок — здесь есть `send`, `delivered` и `dropped`.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Webhooks не заданы |\n| `500` | `53` | Недопустимое значение `event_name` |\n\n[Метод в документации](https://dashamail.ru/api/account/#get-tr-webhooks)",
                "parameters": [
                    {
                        "name": "event_name",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть настройку одного события.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "dropped",
                                "open",
                                "click",
                                "hard",
                                "spam",
                                "unsub",
                                "delivered",
                                "send"
                            ]
                        },
                        "example": "dropped"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "send": "https://example.ru/hooks/tr-send",
                                                "delivered": "https://example.ru/hooks/tr-delivered",
                                                "dropped": "",
                                                "open": "",
                                                "click": "",
                                                "hard": "https://example.ru/hooks/tr-hard",
                                                "spam": "",
                                                "unsub": ""
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "add-tr-webhooks",
                "summary": "Настроить webhooks транзакционных писем",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Задаёт адреса приёма событий транзакционных писем. Формат тот же, что и для массовых рассылок: ключ — имя события, значение — URL.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `send` | string | URL для событий отправки. |\n| `delivered` | string | URL для событий доставки. |\n| `dropped` | string | URL для отброшенных писем. |\n| `open` | string | URL для открытий. |\n| `click` | string | URL для кликов. |\n| `hard` | string | URL для невозвратных ошибок. |\n| `spam` | string | URL для жалоб на спам. |\n| `unsub` | string | URL для отписок. |\n| `url` | string, обязательный | Служебный параметр запроса — продублируйте сюда любой из указанных выше адресов. |\n| `event` | string, обязательный | Служебный параметр запроса — имя настраиваемого события. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не переданы обязательные параметры |\n| `500` | `53` | Сначала нужно задать домен отправки |\n\n[Метод в документации](https://dashamail.ru/api/account/#add-tr-webhooks)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "send": {
                                        "type": "string",
                                        "description": "URL для событий отправки."
                                    },
                                    "delivered": {
                                        "type": "string",
                                        "description": "URL для событий доставки."
                                    },
                                    "dropped": {
                                        "type": "string",
                                        "description": "URL для отброшенных писем."
                                    },
                                    "open": {
                                        "type": "string",
                                        "description": "URL для открытий."
                                    },
                                    "click": {
                                        "type": "string",
                                        "description": "URL для кликов."
                                    },
                                    "hard": {
                                        "type": "string",
                                        "description": "URL для невозвратных ошибок."
                                    },
                                    "spam": {
                                        "type": "string",
                                        "description": "URL для жалоб на спам."
                                    },
                                    "unsub": {
                                        "type": "string",
                                        "description": "URL для отписок."
                                    },
                                    "url": {
                                        "type": "string",
                                        "description": "Служебный параметр запроса — продублируйте сюда любой из указанных выше адресов."
                                    },
                                    "event": {
                                        "type": "string",
                                        "description": "Служебный параметр запроса — имя настраиваемого события."
                                    }
                                },
                                "required": [
                                    "url",
                                    "event"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "delivered": "https://example.ru/hooks/tr-delivered",
                                "hard": "https://example.ru/hooks/tr-hard",
                                "url": "https://example.ru/hooks/tr-delivered",
                                "event": "delivered"
                            }
                        }
                    }
                }
            }
        },
        "/account/webhooks/transactional/{event_name}": {
            "delete": {
                "operationId": "delete-tr-webhook",
                "summary": "Удалить webhook транзакционных писем",
                "tags": [
                    "Аккаунт"
                ],
                "description": "Отключает приём событий указанного типа для транзакционных писем.\n\n> **Внимание.** Как и для массовых рассылок: нераспознанное имя события приводит к удалению настроек всех событий.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Webhooks не заданы или событие не настроено |\n| `500` | `53` | Недопустимое имя события |\n\n[Метод в документации](https://dashamail.ru/api/account/#delete-tr-webhook)",
                "parameters": [
                    {
                        "name": "event_name",
                        "in": "path",
                        "required": true,
                        "description": "Имя события.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "dropped",
                                "open",
                                "click",
                                "hard",
                                "spam",
                                "unsub",
                                "delivered",
                                "send"
                            ]
                        },
                        "example": "open"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/domains": {
            "get": {
                "operationId": "list-domains",
                "summary": "Домены приёма",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Список доменов, на которые аккаунт принимает почту.\n\n> **Примечание.** При первом обращении служебный поддомен аккаунта создаётся автоматически — отдельный запрос для этого не нужен.\n\n[Метод в документации](https://dashamail.ru/api/router/#list-domains)",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 41,
                                                "domain": "u128341.in.dashamail.com",
                                                "is_default": true,
                                                "verified": 1,
                                                "created_at": "2026-04-01 12:00:00"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "create-domain",
                "summary": "Подключить свой домен",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Добавляет ваш поддомен для приёма писем. После добавления пропишите MX-запись из [инструкции](https://dashamail.ru/api/router/#mx-instructions) и запустите [проверку](https://dashamail.ru/api/router/#verify-domain).\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `domain` | string, обязательный | Поддомен для приёма почты, например `mail.example.ru`. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Домен не задан или некорректен |\n| `401` | `2` | Недостаточно прав |\n\n[Метод в документации](https://dashamail.ru/api/router/#create-domain)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 42,
                                            "domain": "mail.example.ru",
                                            "verified": 0
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "domain": {
                                        "type": "string",
                                        "description": "Поддомен для приёма почты, например `mail.example.ru`."
                                    }
                                },
                                "required": [
                                    "domain"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "domain": "mail.example.ru"
                            }
                        }
                    }
                }
            }
        },
        "/router/domains/{domain_id}/verify": {
            "post": {
                "operationId": "verify-domain",
                "summary": "Проверить MX-запись",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Проверяет, что MX-запись домена указывает на серверы DashaMail. До успешной проверки письма на этот домен не принимаются.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Домена с таким идентификатором нет |\n| `422` | `3` | MX-запись не найдена или указывает не на DashaMail |\n\n[Метод в документации](https://dashamail.ru/api/router/#verify-domain)",
                "parameters": [
                    {
                        "name": "domain_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор домена.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "42"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 42,
                                            "domain": "mail.example.ru",
                                            "verified": 1
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/domains/{domain_id}": {
            "delete": {
                "operationId": "delete-domain-router",
                "summary": "Удалить домен приёма",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Отключает приём почты на домен. Служебный домен аккаунта удалить нельзя.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Домена с таким идентификатором нет |\n| `401` | `2` | Недостаточно прав |\n\n[Метод в документации](https://dashamail.ru/api/router/#delete-domain-router)",
                "parameters": [
                    {
                        "name": "domain_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор домена.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "42"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/domains/mx": {
            "get": {
                "operationId": "mx-instructions",
                "summary": "Что прописать в DNS",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Возвращает MX-запись, которую нужно добавить у регистратора, чтобы почта на ваш домен приходила в DashaMail.\n\n[Метод в документации](https://dashamail.ru/api/router/#mx-instructions)",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "mx_target": "in.dashamail.com",
                                            "priority": 10,
                                            "example": "mail.example.ru. IN MX 10 in.dashamail.com."
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/routes": {
            "get": {
                "operationId": "list-routes",
                "summary": "Список маршрутов",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Все маршруты аккаунта в порядке применения — по возрастанию `priority`.\n\n**Что возвращается**\n\n`match_count` и `last_matched_at` показывают, срабатывал ли маршрут — полезно при отладке условий. Поле `expression` — текстовая запись того же условия, что и `filter`.\n\n[Метод в документации](https://dashamail.ru/api/router/#list-routes)",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 7,
                                                "priority": 0,
                                                "description": "Обращения в поддержку",
                                                "filter": {
                                                    "combinator": "and",
                                                    "conditions": [
                                                        {
                                                            "field": "recipient",
                                                            "op": "matches",
                                                            "value": "^support@"
                                                        }
                                                    ]
                                                },
                                                "expression": "recipient matches \"^support@\"",
                                                "actions": [
                                                    {
                                                        "type": "webhook",
                                                        "url": "https://example.ru/inbound",
                                                        "attachments": "url"
                                                    }
                                                ],
                                                "signing_key": "whsec_8f2c…",
                                                "is_active": true,
                                                "match_count": 412,
                                                "last_matched_at": "2026-04-12 09:41:02",
                                                "created_at": "2026-04-01 12:04:00",
                                                "updated_at": "2026-04-10 15:22:31"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "create-route",
                "summary": "Создать маршрут",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Создаёт правило обработки входящих писем. Без явного `priority` маршрут встаёт в конец очереди.\n\n> **Примечание.** Ключ подписи `signing_key` генерируется автоматически и возвращается в ответе — сохраните его, чтобы проверять подлинность webhook-запросов.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `actions` | JSON-строка, обязательный | Действия маршрута — от одного до пяти. См. [описание действий](https://dashamail.ru/api/router/#actions). |\n| `filter` | JSON-строка | Условия отбора писем. Несовместим с `expression`. Без условий маршрут принимает все письма. |\n| `expression` | string | Условия отбора текстом. Несовместим с `filter`. |\n| `description` | string | Описание маршрута, не длиннее 255 символов. |\n| `is_active` | флаг | Активен ли маршрут. По умолчанию: `1`. |\n| `priority` | integer | Порядок применения. Меньше — раньше. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Некорректная структура `filter` или `actions`, заданы оба способа задания условий, либо действие `forward` недоступно на текущем тарифе |\n| `401` | `2` | Недостаточно прав |\n\n[Метод в документации](https://dashamail.ru/api/router/#create-route)",
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 7,
                                            "priority": 0,
                                            "description": "Обращения в поддержку",
                                            "signing_key": "whsec_8f2c…",
                                            "is_active": true,
                                            "match_count": 0
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "actions": {
                                        "type": "string",
                                        "description": "Действия маршрута — от одного до пяти. См. [описание действий](https://dashamail.ru/api/router/#actions)."
                                    },
                                    "filter": {
                                        "type": "string",
                                        "description": "Условия отбора писем. Несовместим с `expression`. Без условий маршрут принимает все письма."
                                    },
                                    "expression": {
                                        "type": "string",
                                        "description": "Условия отбора текстом. Несовместим с `filter`."
                                    },
                                    "description": {
                                        "type": "string",
                                        "description": "Описание маршрута, не длиннее 255 символов."
                                    },
                                    "is_active": {
                                        "type": "string",
                                        "description": "Активен ли маршрут. Признак: передайте 1."
                                    },
                                    "priority": {
                                        "type": "integer",
                                        "description": "Порядок применения. Меньше — раньше."
                                    }
                                },
                                "required": [
                                    "actions"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "description": "Обращения в поддержку",
                                "filter": "{\"combinator\":\"and\",\"conditions\":[{\"field\":\"recipient\",\"op\":\"matches\",\"value\":\"^support@\"}]}",
                                "actions": "[{\"type\":\"webhook\",\"url\":\"https://example.ru/inbound\",\"attachments\":\"url\"},{\"type\":\"stop\"}]"
                            }
                        }
                    }
                }
            }
        },
        "/router/routes/{route_id}": {
            "get": {
                "operationId": "get-route",
                "summary": "Один маршрут",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Возвращает маршрут целиком, включая ключ подписи.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Маршрута с таким идентификатором нет |\n\n[Метод в документации](https://dashamail.ru/api/router/#get-route)",
                "parameters": [
                    {
                        "name": "route_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор маршрута.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "7"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 7,
                                            "priority": 0,
                                            "description": "Обращения в поддержку",
                                            "filter": {
                                                "combinator": "and",
                                                "conditions": [
                                                    {
                                                        "field": "recipient",
                                                        "op": "matches",
                                                        "value": "^support@"
                                                    }
                                                ]
                                            },
                                            "actions": [
                                                {
                                                    "type": "webhook",
                                                    "url": "https://example.ru/inbound"
                                                }
                                            ],
                                            "signing_key": "whsec_8f2c…",
                                            "is_active": true
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "operationId": "update-route",
                "summary": "Изменить маршрут",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Меняет отдельные поля маршрута. Передавайте только то, что нужно изменить — незаданные поля сохраняют прежние значения.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `description` | string | Новое описание. |\n| `filter` | JSON-строка | Новые условия отбора. |\n| `expression` | string | Новые условия текстом. |\n| `actions` | JSON-строка | Новый набор действий. Заменяет прежний целиком. |\n| `is_active` | флаг | Включить или выключить маршрут. |\n| `priority` | integer | Новый порядок применения. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Маршрута с таким идентификатором нет |\n| `422` | `3` | Некорректные условия или действия |\n| `401` | `2` | Недостаточно прав |\n\n[Метод в документации](https://dashamail.ru/api/router/#update-route)",
                "parameters": [
                    {
                        "name": "route_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор маршрута.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "7"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 7,
                                            "description": "Обращения в поддержку",
                                            "is_active": false
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "description": {
                                        "type": "string",
                                        "description": "Новое описание."
                                    },
                                    "filter": {
                                        "type": "string",
                                        "description": "Новые условия отбора."
                                    },
                                    "expression": {
                                        "type": "string",
                                        "description": "Новые условия текстом."
                                    },
                                    "actions": {
                                        "type": "string",
                                        "description": "Новый набор действий. Заменяет прежний целиком."
                                    },
                                    "is_active": {
                                        "type": "string",
                                        "description": "Включить или выключить маршрут. Признак: передайте 1."
                                    },
                                    "priority": {
                                        "type": "integer",
                                        "description": "Новый порядок применения."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "is_active": 0
                            }
                        }
                    }
                }
            },
            "delete": {
                "operationId": "delete-route",
                "summary": "Удалить маршрут",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Удаляет маршрут. Уже сохранённые им письма остаются доступными до истечения их срока хранения.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Маршрута с таким идентификатором нет |\n| `401` | `2` | Недостаточно прав |\n\n[Метод в документации](https://dashamail.ru/api/router/#delete-route)",
                "parameters": [
                    {
                        "name": "route_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор маршрута.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "7"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/routes/{route_id}/rekey": {
            "post": {
                "operationId": "rekey-route",
                "summary": "Перевыпустить ключ подписи",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Генерирует новый `signing_key`. Старый перестаёт действовать немедленно — обновите его в своём обработчике сразу после вызова.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Маршрута с таким идентификатором нет |\n| `401` | `2` | Недостаточно прав |\n\n[Метод в документации](https://dashamail.ru/api/router/#rekey-route)",
                "parameters": [
                    {
                        "name": "route_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор маршрута.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "7"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 7,
                                            "signing_key": "whsec_1d9b…"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/routes/reorder": {
            "post": {
                "operationId": "reorder-routes",
                "summary": "Изменить порядок маршрутов",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Задаёт новый порядок применения маршрутов одним запросом. Передайте идентификаторы в нужной последовательности.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `order` | JSON-строка, обязательный | Массив идентификаторов маршрутов в порядке применения. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Не передан `order` или он не является массивом |\n| `401` | `2` | Недостаточно прав |\n\n[Метод в документации](https://dashamail.ru/api/router/#reorder-routes)",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": true
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "order": {
                                        "type": "string",
                                        "description": "Массив идентификаторов маршрутов в порядке применения."
                                    }
                                },
                                "required": [
                                    "order"
                                ],
                                "additionalProperties": true
                            },
                            "example": {
                                "order": "[9,7,12]"
                            }
                        }
                    }
                }
            }
        },
        "/router/messages": {
            "get": {
                "operationId": "list-messages",
                "summary": "Сохранённые письма",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Письма, сохранённые действием `store`. Тело письма в список не входит — забирайте его [поштучно](https://dashamail.ru/api/router/#get-message).\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Писем по фильтру нет |\n\n[Метод в документации](https://dashamail.ru/api/router/#list-messages)",
                "parameters": [
                    {
                        "name": "route_id",
                        "in": "query",
                        "required": false,
                        "description": "Только письма указанного маршрута.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 7
                    },
                    {
                        "name": "recipient",
                        "in": "query",
                        "required": false,
                        "description": "Фильтр по адресу получателя.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "since",
                        "in": "query",
                        "required": false,
                        "description": "Письма, полученные не раньше.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "until",
                        "in": "query",
                        "required": false,
                        "description": "Письма, полученные не позже.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 2
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 90211,
                                                "route_id": 7,
                                                "recipient": "support@mail.example.ru",
                                                "from_email": "ivan@example.com",
                                                "subject": "Не приходит счёт",
                                                "attachments_count": 1,
                                                "raw_size": 48213,
                                                "created_at": "2026-04-12 09:41:02",
                                                "expires_at": "2026-04-19 09:41:02",
                                                "retrieved_at": null
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/messages/{message_id}": {
            "get": {
                "operationId": "get-message",
                "summary": "Одно письмо",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Возвращает разобранное письмо: заголовки, текстовую и HTML-версии, перечень вложений.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Письма с таким идентификатором нет или срок хранения истёк |\n\n[Метод в документации](https://dashamail.ru/api/router/#get-message)",
                "parameters": [
                    {
                        "name": "message_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор письма.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "90211"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 90211,
                                            "route_id": 7,
                                            "recipient": "support@mail.example.ru",
                                            "sender": "ivan@example.com",
                                            "from_email": "ivan@example.com",
                                            "message_id_header": "<CAF…@mail.example.com>",
                                            "subject": "Не приходит счёт",
                                            "body_text": "Здравствуйте! Счёт по заказу 1024 так и не пришёл.",
                                            "body_html": "<p>Здравствуйте! Счёт по заказу 1024 так и не пришёл.</p>",
                                            "attachments_count": 1,
                                            "raw_size": 48213,
                                            "created_at": "2026-04-12 09:41:02",
                                            "expires_at": "2026-04-19 09:41:02"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "operationId": "delete-message",
                "summary": "Удалить письмо",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Удаляет сохранённое письмо вместе с вложениями, не дожидаясь истечения срока хранения.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Письма с таким идентификатором нет |\n| `401` | `2` | Недостаточно прав |\n\n[Метод в документации](https://dashamail.ru/api/router/#delete-message)",
                "parameters": [
                    {
                        "name": "message_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор письма.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "90211"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/messages/{message_id}/attachments/{attachment_id}": {
            "get": {
                "operationId": "get-attachment",
                "summary": "Вложение письма",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Возвращает вложение письма — имя файла, MIME-тип и содержимое.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `400` | `400` | Не указан идентификатор вложения |\n| `404` | `9` | Вложение не найдено |\n\n[Метод в документации](https://dashamail.ru/api/router/#get-attachment)",
                "parameters": [
                    {
                        "name": "message_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор письма.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "90211"
                    },
                    {
                        "name": "attachment_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор вложения.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "1"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 1,
                                            "message_id": 90211,
                                            "filename": "order-1024.pdf",
                                            "mime_type": "application/pdf",
                                            "size": 44120,
                                            "body": "JVBERi0xLjQKJcfs…"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/deliveries": {
            "get": {
                "operationId": "list-deliveries",
                "summary": "Журнал доставок webhook",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Попытки доставки писем на ваши webhook-адреса и адреса пересылки. Первое место, куда стоит смотреть, если письма до вашей системы не доходят.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Доставок по фильтру нет |\n\n[Метод в документации](https://dashamail.ru/api/router/#list-deliveries)",
                "parameters": [
                    {
                        "name": "route_id",
                        "in": "query",
                        "required": false,
                        "description": "Только доставки указанного маршрута.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "Фильтр по результату доставки.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "failed"
                    },
                    {
                        "name": "recipient",
                        "in": "query",
                        "required": false,
                        "description": "Фильтр по адресу получателя исходного письма.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "since",
                        "in": "query",
                        "required": false,
                        "description": "Не раньше указанного момента.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "until",
                        "in": "query",
                        "required": false,
                        "description": "Не позже указанного момента.",
                        "schema": {
                            "type": "string",
                            "example": "2026-03-14 11:02:41"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Размер страницы.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": 2
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "required": false,
                        "description": "Смещение.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": [
                                            {
                                                "id": 55120,
                                                "route_id": 7,
                                                "message_id": 90211,
                                                "status": "failed",
                                                "http_code": 502,
                                                "attempts": 3,
                                                "created_at": "2026-04-12 09:41:05"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/deliveries/{delivery_id}": {
            "get": {
                "operationId": "get-delivery",
                "summary": "Одна доставка",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Подробности попытки доставки, включая ответ вашего сервера — по нему видно, почему запрос не прошёл.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `404` | `4` | Доставки с таким идентификатором нет |\n\n[Метод в документации](https://dashamail.ru/api/router/#get-delivery)",
                "parameters": [
                    {
                        "name": "delivery_id",
                        "in": "path",
                        "required": true,
                        "description": "Идентификатор доставки.",
                        "schema": {
                            "type": "integer"
                        },
                        "example": "55120"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "id": 55120,
                                            "route_id": 7,
                                            "message_id": 90211,
                                            "status": "failed",
                                            "http_code": 502,
                                            "attempts": 3,
                                            "response_body": "502 Bad Gateway",
                                            "created_at": "2026-04-12 09:41:05"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/router/settings": {
            "get": {
                "operationId": "get-router-settings",
                "summary": "Настройки обработки",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Общие настройки приёма входящей почты.\n\n[Метод в документации](https://dashamail.ru/api/router/#get-router-settings)",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "pass_autoreply": 0,
                                            "pass_list_mail": 0
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "operationId": "update-router-settings",
                "summary": "Изменить настройки",
                "tags": [
                    "Обработка входящих"
                ],
                "description": "Задаёт, пропускать ли служебную почту к вашим маршрутам. По умолчанию автоответы и рассылочные письма отфильтровываются: это защищает от петель, когда ваш обработчик отвечает на автоответ, а тот отвечает снова.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `pass_autoreply` | флаг | Пропускать автоответы («в отпуске», «получено»). По умолчанию: `0`. |\n| `pass_list_mail` | флаг | Пропускать письма с заголовками рассылок (`List-Id` и подобными). По умолчанию: `0`. |\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `401` | `2` | Недостаточно прав |\n\n[Метод в документации](https://dashamail.ru/api/router/#update-router-settings)",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "pass_autoreply": 1,
                                            "pass_list_mail": 0
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "pass_autoreply": {
                                        "type": "string",
                                        "description": "Пропускать автоответы («в отпуске», «получено»). Признак: передайте 1."
                                    },
                                    "pass_list_mail": {
                                        "type": "string",
                                        "description": "Пропускать письма с заголовками рассылок (`List-Id` и подобными). Признак: передайте 1."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "pass_autoreply": 1,
                                "pass_list_mail": 0
                            }
                        }
                    }
                }
            }
        },
        "/images/optimize": {
            "post": {
                "operationId": "optimize-image",
                "summary": "Оптимизировать изображение",
                "tags": [
                    "Изображения"
                ],
                "description": "Принимает JPEG, PNG или GIF и возвращает облегчённую версию в том же формате вместе со статистикой: сколько весило, сколько стало и какие шаги сработали.\n\nЕсли ужать не удалось — картинка уже оптимальна, нужного кодека нет на сервере или результат получился больше исходника, — метод возвращает файл без изменений и `changed: false`. Ошибкой это не считается.\n\n> **Примечание.** **Как передать картинку.** Либо полем `image` в JSON — строка base64, допускается префикс `data:image/png;base64,`. Либо как файл в `multipart/form-data`, поле `file`:\n>\n> ```\n> curl -X POST 'https://api.dashamail.com/v2/images/optimize' \\\n>   -H 'Authorization: Bearer YOUR_API_KEY' \\\n>   -F 'file=@photo.jpg'\n> ```\n>\n> Второй способ предпочтителен для крупных файлов: base64 раздувает тело запроса примерно на треть.\n\n**Параметры тела запроса**\n\n| Параметр | Тип | Описание |\n| --- | --- | --- |\n| `image` | string | Картинка в base64. Не нужен, если файл передан через `multipart/form-data`. |\n| `resize` | флаг | Ужимать ли по ширине. По умолчанию включено; `0` оставит исходную геометрию и выполнит только пережатие. |\n| `max_width` | integer | Другой потолок ширины вместо 1600 px. Допустимо от 16 до 20000. |\n| `lossy` | флаг | Разрешить пережатие с потерями. Даёт заметно меньший файл ценой небольшой потери качества; по умолчанию выключено. |\n\n**Что возвращается**\n\nОптимизированную картинку в base64 (поле `image`) и статистику обработки. Поле `steps` показывает, что сработало на каждом из двух шагов, — полезно, когда результат не совпал с ожиданием.\n\n**Возможные ошибки**\n\n| HTTP | `code` | Когда возникает |\n| --- | --- | --- |\n| `422` | `3` | Картинка не передана, `image` не является корректным base64, формат не JPEG/PNG/GIF либо `max_width` вне диапазона 16–20000 |\n| `413` | `26` | Картинка тяжелее 20 МиБ |\n\n[Метод в документации](https://dashamail.ru/api/images/#optimize-image)",
                "parameters": [
                    {
                        "name": "response",
                        "in": "query",
                        "required": false,
                        "description": "Со значением `binary` метод отдаёт сами байты картинки с соответствующим `Content-Type`, а статистику кладёт в заголовки `X-Imageopt-Original-Size`, `X-Imageopt-Size` и `X-Imageopt-Saved-Bytes`. По умолчанию ответ приходит в обычном JSON-конверте.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "msg": {
                                            "err_code": 0,
                                            "text": "OK",
                                            "type": "message"
                                        },
                                        "data": {
                                            "format": "png",
                                            "mime": "image/png",
                                            "changed": true,
                                            "steps": {
                                                "resize": "already_narrow",
                                                "compress": "pngquant"
                                            },
                                            "width": 900,
                                            "height": 600,
                                            "original_width": 900,
                                            "original_height": 600,
                                            "original_size": 812345,
                                            "size": 279431,
                                            "saved_bytes": 532914,
                                            "saved_percent": 65.6,
                                            "image": "iVBORw0KGgoAAAANSUhEUgAAA…"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Ошибка. Код в error.code точнее HTTP-статуса.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "image": {
                                        "type": "string",
                                        "description": "Картинка в base64. Не нужен, если файл передан через `multipart/form-data`."
                                    },
                                    "resize": {
                                        "type": "string",
                                        "description": "Ужимать ли по ширине. По умолчанию включено; `0` оставит исходную геометрию и выполнит только пережатие. Признак: передайте 1."
                                    },
                                    "max_width": {
                                        "type": "integer",
                                        "description": "Другой потолок ширины вместо 1600 px. Допустимо от 16 до 20000."
                                    },
                                    "lossy": {
                                        "type": "string",
                                        "description": "Разрешить пережатие с потерями. Даёт заметно меньший файл ценой небольшой потери качества; по умолчанию выключено. Признак: передайте 1."
                                    }
                                },
                                "additionalProperties": true
                            },
                            "example": {
                                "image": "iVBORw0KGgoAAAANSUhEUgAAA…",
                                "lossy": 1
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "scheme": "bearer",
                "description": "Заголовок Authorization: Bearer <ключ>. Основной способ."
            },
            "apiKeyQuery": {
                "type": "apiKey",
                "in": "query",
                "name": "api_key",
                "description": "Ключ параметром строки запроса. Проще, но адрес попадает в логи прокси и веб-серверов."
            }
        },
        "schemas": {
            "Error": {
                "type": "object",
                "properties": {
                    "error": {
                        "type": "object",
                        "properties": {
                            "code": {
                                "type": "integer",
                                "description": "Код ошибки DashaMail. Точнее HTTP-статуса: одному статусу соответствует несколько кодов."
                            },
                            "message": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        }
    }
}
