# SMSC.ru HTTP API: Отправить SMS и узнать стоимость

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

Коды подтверждения, уведомления о заказах и рассылки через SMSC.ru.

1. Возьми логин и пароль для API (страница паролей в кабинете) или apikey. Если в кабинете задан список разрешённых IP, запросы с других адресов вернут ошибку 2.
2. Чтобы узнать цену без отправки, сделай тот же запрос с cost = 1: GET /sys/send.php с phones и mes. Для отправки с возвратом стоимости и баланса — cost = 3.
3. Отправь: GET /sys/send.php (или POST) с login, psw, phones (через запятую, в международном формате), mes, sender (зарегистрированное имя), charset = utf-8 и fmt = 3 — ответ в JSON. Без charset текст считается в windows-1251.
4. В ответе id и cnt (число SMS). Сохрани id: по нему проверяется статус. Ошибка приходит как {"error": ..., "error_code": N}: 3 — нет денег, 6 — сообщение запрещено, 7 — неверный номер.
5. Если удобнее JSON в теле запроса, те же параметры принимает POST /rest/send/.

```bash
curl -G https://smsc.ru/sys/send.php \
  -d login=<логин> -d psw=<пароль> \
  -d phones=79991234567 \
  --data-urlencode 'mes=Код подтверждения: 4821' \
  -d sender=<имя отправителя> -d charset=utf-8 -d fmt=3 -d cost=3
```

## Базовые URL

- Боевой: `https://smsc.ru`
- Резервный: `https://www2.smsc.ru`

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

Тип: API-ключ

Параметры `login` и `psw` (пароль создаётся или меняется на странице паролей в кабинете) либо `apikey` вместо пары логин/пароль. Если в кабинете задан список разрешённых IP, запросы с других адресов отклоняются с ошибкой 2.

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

### GET /sys/send.php — Отправка сообщений

Можно и POST. Обязательны `login`, `psw` и `phones` + `mes` (или `list`).

Расчёт стоимости без отправки — тот же запрос с `cost=1`.

Ответ при `fmt=3`: `cost=0` — `id`, `cnt`; `cost=1` — `cost`, `cnt`; `cost=2` — `id`, `cnt`, `cost`; `cost=3` — плюс `balance`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `login` | query | string | да | Логин (или apikey) |
| `psw` | query | string | да | Пароль |
| `phones` | query | string | да | Номера в международном формате через запятую или точку с запятой; также коды групп G<номер>, email, ник Telegram |
| `mes` | query | string | да | Текст, до 1000 символов |
| `id` | query | string | нет | ID сообщения клиента: число 1–2147483647 или строка до 40 символов |
| `sender` | query | string | нет | Зарегистрированное имя отправителя, до 11 символов или 15 цифр |
| `fmt` | query | integer | нет | Формат ответа: 0 строка, 1 числа, 2 XML, 3 JSON |
| `cost` | query | integer | нет | 0 отправить, 1 только стоимость, 2 отправить и вернуть стоимость, 3 + баланс |
| `charset` | query | string | нет | utf-8 или koi8-r (по умолчанию windows-1251) |
| `translit` | query | integer | нет | 0 нет, 1 translit, 2 mpaHc/Ium |
| `tinyurl` | query | integer | нет | 1 — сокращать ссылки |
| `time` | query | string | нет | Время отправки: DDMMYYhhmm, DD.MM.YY hh:mm, h1-h2, 0ts, +m |
| `tz` | query | string | нет | Часовой пояс относительно Москвы |
| `period` | query | number | нет | Растянуть рассылку на 0.1–720 часов (с freq) |
| `freq` | query | integer | нет | Интервал между частями рассылки, 1–1440 минут |
| `valid` | query | string | нет | Срок жизни: 1–24 часа или чч:мм |
| `maxsms` | query | integer | нет | Максимум частей в сообщении |
| `list` | query | string | нет | Пакет номер:сообщение, по одному в строке (%0A) |
| `flash` | query | integer | нет | 1 — Flash SMS |
| `hlr` | query | integer | нет | 1 — HLR-запрос без отправки SMS |
| `ping` | query | integer | нет | 1 — ping-SMS (невидимое) |
| `call` | query | integer | нет | 1 — голосовое сообщение |
| `voice` | query | string | нет | Голос: m, m2, m3, m4, w, w2, w3, w4 |
| `mail` | query | integer | нет | 1 — email (нужны subj и sender) |
| `subj` | query | string | нет | Тема MMS или email |
| `viber` | query | integer | нет | 1 — Viber |
| `tg` | query | integer | нет | 1 — код подтверждения в Telegram (4–8 цифр в mes) |
| `bot` | query | string | нет | Бот: Telegram @botname_bot, WhatsApp wa:номер |
| `fileurl` | query | string | нет | URL прикрепляемого файла |
| `err` | query | integer | нет | 1 — вернуть номера с ошибками |
| `op` | query | integer | нет | 1 — вернуть по номерам mccmnc, стоимость, статус, ошибку |
| `userip` | query | string | нет | IP пользователя для лимита сообщений на IP |

Пример запроса:

```
https://smsc.ru/sys/send.php?login=alex&psw=123&phones=79999999999&mes=Hello!
```

Пример ответа:

```json
https://smsc.ru/sys/send.php?login=<login>&psw=<password>&phones=<phones>&mes=<message>&cost=1
```

### POST /rest/send/ — Отправка с параметрами в JSON

Те же параметры, что у `send.php`, передаются JSON-объектом в теле запроса.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `login` | body | string | да | Логин (или apikey) |
| `psw` | body | string | да | Пароль |
| `phones` | body | string | да | Номера получателей |
| `mes` | body | string | да | Текст сообщения |

## Нюансы

- Одно SMS — 160 латинских или 70 кириллических символов; в составных — 153 и 67.
- Ошибка при `fmt=0` — `ERROR = N (описание)`, при `fmt=1` — `0,-N`, при `fmt=3` — `{"error": "...", "error_code": N}`; для ошибок 3, 6, 7, 8 дополнительно возвращается `id`.
- Префиксы в тексте: `__PING__`, `__CALL__`, `__HLR__`, `__auth__`.
- Другие скрипты: `/sys/templates.php` (шаблоны), `/sys/op_templates.php` (шаблоны операторов), `/sys/jobs.php` (рассылки), `/sys/ping.php` (уведомления).

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

- [Проверить статус доставки](https://mcp-everything.ru/integrations/smsc/scenarios/proverit-status-dostavki.md)
- [Следить за балансом](https://mcp-everything.ru/integrations/smsc/scenarios/sledit-za-balansom.md)
- [Подтвердить номер через Mobile ID](https://mcp-everything.ru/integrations/smsc/scenarios/podtverdit-nomer-cherez-mobile-id.md)

---

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