# Sendsay API: Добавить или обновить подписчика

Сценарий из mcp-everything. Актуально на 2026-10-24.

Подписка с сайта или синхронизация клиентов из CRM в Sendsay.

1. Создай API-ключ вызовом sys.user.apikey.create — лучше на отдельный саблогин с минимальными правами. Все вызовы идут POST-запросом с JSON на https://api.sendsay.ru/general/api/v100/json/<код аккаунта>, действие задаётся полем action.
2. Проверь доступ: action = pong — в ответе account и sublogin.
3. Добавь контакт: action = member.set с email, addr_type = email и datakey — тройками «ключ, режим, значение». Например, ["-group.pl21586", "set", "1"] добавит контакт в список pl21586, а анкетные поля пишутся через ключи вида base.firstName.
4. Получить данные контакта: action = member.get с email.
5. warnings в ответе означают частичное выполнение, а не ошибку. Ответы 3xx — перенаправления, клиент должен их обрабатывать.

```bash
curl -L -X POST "https://api.sendsay.ru/general/api/v100/json/<аккаунт>" \
  -H 'Content-Type: application/json' \
  -d '{
        "action": "member.set",
        "apikey": "<API-ключ>",
        "email": "ivan@example.ru",
        "addr_type": "email",
        "datakey": [
          ["base.firstName", "set", "Иван"],
          ["-group.pl21586", "set", "1"]
        ]
      }'
```

## Базовые URL

- Боевой: `https://api.sendsay.ru`
- Адрес вызова: `https://api.sendsay.ru/general/api/v100/json/{account}`

## Авторизация

Тип: API-ключ

Рекомендуемый способ — API-ключ (создаётся вызовом `sys.user.apikey.create`, лучше на отдельный саблогин с минимальными правами). Ключ передаётся полем `apikey` в теле JSON или заголовком `Authorization: sendsay apikey=...` (ключ URL-кодируется). Аутентификация действует на один вызов, выход не нужен. Также поддерживаются логин с паролем (сессия), JWT, двухфакторная аутентификация и OpenID.

## Методы сценария

### POST /general/api/v100/json/{account} — member.set: добавление и изменение контакта

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `account` | path | string | да | Код аккаунта |
| `action` | body | string | да | member.set |
| `email` | body | string | да | Адрес подписчика |
| `addr_type` | body | string | нет | Тип адреса, например email |
| `datakey` | body | array | нет | Тройки «ключ данных, режим, значение»; например -group.pl21586, set, 1 — добавить в список (0 — удалить) |
| `obj` | body | object | нет | Анкетные данные, например блок base |

### POST /general/api/v100/json/{account} — member.get: данные контакта

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `account` | path | string | да | Код аккаунта |
| `action` | body | string | да | member.get |
| `email` | body | string | да | Адрес подписчика |
| `addr_type` | body | string | нет | Тип адреса |
| `datakey` | body | array | нет | Какие ключи данных вернуть |

### POST /general/api/v100/json/{account} — pong: проверка доступности и авторизации

В ответе — `ping`, `account`, `sublogin`, `via`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `account` | path | string | да | Код аккаунта |
| `action` | body | string | да | pong |

## Нюансы

- Тело — JSON в UTF-8 с `Content-Type: application/json`; обязательное поле — `action`; размер запроса — до 400 МБ.
- Ответы с кодами 3xx — перенаправления, клиент обязан их обрабатывать.
- Массив `warnings` означает частичное выполнение, а не ошибку.
- При `error/auth/failed` с уточнением `force_change_password` смените пароль через `sys.user.set` и повторите запрос.
- Результаты импорта и других заданий видны в журнале заданий (`https://app.sendsay.ru/queue`).
- Есть также вызовы стоп-листов, черновиков, форм, участников сценариев и Stream API.

## Другие сценарии

- [Отправить транзакционное письмо](https://mcp-everything.ru/integrations/sendsay/scenarios/otpravit-tranzaktsionnoe-pismo.md)
- [Запустить массовую рассылку](https://mcp-everything.ru/integrations/sendsay/scenarios/zapustit-massovuyu-rassylku.md)
- [Узнать, кому дошли письма](https://mcp-everything.ru/integrations/sendsay/scenarios/uznat-komu-doshli-pisma.md)

---

Если этого недостаточно — официальная документация: https://docs.sendsay.ru/sendsay-api/sendsay-api-guide
Вся интеграция одним документом: https://mcp-everything.ru/integrations/sendsay.md
