Sendsay API — Руководство по работе
- Общие сведения
- Формат запроса
- Аутентификация
- Формат ответа
- Синхронные и асинхронные вызовы
- Отслеживание асинхронных запросов
- Лимиты и ограничения
- Идентификация запросов (request.id)
- Пакетные запросы (batch)
- Кэширование ответов
- Возвращаемое значение и способы получения результата
- Представление данных
- Порядок обработки вызовов
- Защищённые сущности
- Логины и пароли в ссылках
- Готовые библиотеки
Полная документация Sendsay API
Общие сведения
Sendsay API — это HTTP-интерфейс для управления рассылками, подписчиками, статистикой и другими объектами системы. Взаимодействие с API происходит через JSON-запросы, которые отправляются методом POST.
Параметры подключения
- Транспорт: HTTPS (HTTP 1.0/1.1)
- Шифрование: TLS 1.2 или TLS 1.3
- Адрес API:
https://api.sendsay.ru
Рекомендуется использовать расширение SNI.
Имя api.sendsay.ru имеет несколько IP-адресов. Если соединение с одним из них не устанавливается, рекомендуется повторить запрос с использованием другого.
Для работы с API в CDP поддерживается ГОСТ-шифрование. Это дополнительная услуга. Чтобы подключить её, .
Формат запроса
Endpoint
POST https://api.sendsay.ru/general/api/v100/json/account
Где account — код вашего аккаунта (совпадает с основным логином).
Для вызовов, не требующих привязки к аккаунту (например, ping), используйте символ -:
POST https://api.sendsay.ru/general/api/v100/json/-
Тело запроса
Основные требования к телу запроса:
- Content-Type:
application/json. - Кодировка: UTF-8.
- Максимальный размер: 400 Мбайт.
Запрос — это JSON-объект с обязательным полем action:
{
"action": "название_действия",
"session": "идентификатор_сессии",
"параметр1": "значение1",
"параметр2": "значение2"
}
Используйте готовые функции вашего языка программирования для сериализации JSON. «Красивое» форматирование пробелами необязательно — его отсутствие уменьшает размер запроса и ускоряет обработку.
Аутентификация
Для автоматической работы по API создавайте отдельный саблогин с максимально ограниченными правами и используйте для него API-ключ или JWT-токен.
Sendsay API поддерживает несколько способов аутентификации. Ниже подробно описан рекомендуемый для автоматизации способ — API-ключ. Остальные способы смотрите в документации API.
API-ключ (рекомендуется для автоматизации)
Создайте API-ключ заранее вызовом sys.user.apikey.create.
Аутентификация действует на один вызов и не требует logout. Процессы, запущенные асинхронными вызовами, продолжат работу до завершения.
В теле запроса:
{
"action": "нужное_действие",
"apikey": "ваш_ключ_api",
"...": "..."
}
В HTTP-заголовке:
Authorization: sendsay apikey=ключ-api-url-кодированный
Другие способы аутентификации
| Способ | Описание | Документация |
|---|---|---|
| Логин и пароль (сессия) | Классическая аутентификация через login / logout. Сессия живёт несколько часов | Подробнее |
| JWT-токен | Аутентификаци я по подписанному токену (RFC 7519). Подходит для серверного взаимодействия | Подробнее |
| Двухфакторная аутентификация (SMS) | Логин + пароль с подтверждением кодом из SMS | Подробнее |
| OpenID | Аутентификация через внешний OpenID-провайдер. Для настройки | Подробнее |
Формат ответа
Ответ — JSON в кодировке UTF-8 (Content-Type: application/json).
HTTP-статусы
| Статус | Значение |
|---|---|
| 200 | Нормальный ответ |
| 3xx | Перенаправления (необходимо обрабатывать) |
| 503 | Превышение лимита запросов (rate_limit) |
| Прочие | Неизвестная ошибка — повторите запрос |
Общие поля ответа
Каждый ответ может содержать следующие служебные поля:
{
"request.id": "значение из запроса",
"duration": "время обработки в секундах",
"_ehid": "служебная строка для отладки"
}
Успешный ответ
{
"request.id": "...",
"поле_результата_1": "значение",
"поле_результата_2": "значение"
}
Ответ с ошибкой
При ошибке в ответе появляется массив errors:
{
"errors": [
{
"id": "код_ошибки",
"explain": "описание ошибки"
}
]
}
Поле explain может быть строкой, массивом или объектом — в зависимости от вызова и ошибки.
Некоторые вызовы также возвращают массив warnings — это события, которые помешали выполнить вызов частично, но не делают его ошибочным.