# SMS.RU API: Отправить SMS с кодом или уведомлением

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

Коды подтверждения, статусы заказов, напоминания — одно сообщение или рассылка до 100 номеров за запрос.

1. Возьми api_id на главной странице личного кабинета SMS.RU. Добавляй json=1 ко всем запросам — иначе ответ придёт текстовыми строками.
2. Если нужно знать цену заранее, проверь стоимость: GET /sms/cost с to и msg — в ответе total_cost и число частей SMS.
3. Отправь: POST /sms/send с to (номера через запятую, до 100), msg в UTF-8 и from — одобренным именем отправителя. Для проверки интеграции без списания денег добавь test=1.
4. В ответе для каждого номера — status_code и sms_id. 100 — сообщение принято; 201 — не хватает денег, 202 и 207 — неверный номер или нет маршрута, 209 — номер в стоп-листе. Сохрани sms_id, чтобы потом узнать статус доставки.
5. Пользователь просит больше не писать — добавь номер в стоп-лист: GET /stoplist/add с stoplist_phone и stoplist_text.

```bash
curl -X POST https://sms.ru/sms/send \
  -d api_id=<api_id> \
  -d to=79991234567 \
  --data-urlencode 'msg=Код подтверждения: 4821' \
  -d from=<имя отправителя> \
  -d json=1
```

## Базовые URL

- Боевой: `https://sms.ru`

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

Тип: API-ключ

Рекомендуемый способ — параметр `api_id` (выдаётся на главной странице личного кабинета). Альтернатива — `login` (номер телефона) и `password`; в этом случае обязательно HTTPS.

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

### POST /sms/send — Отправка SMS

Можно и GET; при отправке более чем на 10 номеров используйте POST.

В JSON-ответе: `status`, `status_code`, `sms` (объект по номерам: `status`, `status_code`, `sms_id` или `status_text`), `balance`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `api_id` | query | string | да | Ключ API (или login + password) |
| `to` | query | string | да | Номера через запятую, до 100 за запрос; или форма to[номер]=текст |
| `msg` | query | string | да | Текст в UTF-8 |
| `json` | query | integer | нет | 1 — ответ в JSON (рекомендуется) |
| `from` | query | string | нет | Одобренное имя отправителя; по умолчанию — отправитель по умолчанию |
| `ip` | query | string | нет | IP конечного пользователя (для защиты от злоупотреблений) |
| `time` | query | integer | нет | Время отправки UNIX timestamp, до 2 месяцев вперёд |
| `ttl` | query | integer | нет | Время жизни сообщения в минутах, 1–1440 |
| `daytime` | query | integer | нет | 1 — учитывать часовой пояс получателя, ночью отложить до 10:00 (time игнорируется) |
| `translit` | query | integer | нет | 1 — перевести кириллицу в латиницу |
| `test` | query | integer | нет | 1 — имитация отправки без доставки и списания |
| `partner_id` | query | string | нет | Идентификатор партнёрской программы |

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

```
https://sms.ru/sms/send?api_id=[зарегистрируйтесь, чтобы получить api_id]&to=79255070602,74993221627&msg=hello+world&json=1
```

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

```json
https://sms.ru/sms/send?api_id=[зарегистрируйтесь, чтобы получить api_id]&to[79255070602]=hello+world&to[74993221627]=hello+world&json=1
```

### GET /sms/cost — Стоимость сообщений

В JSON-ответе: `sms` по номерам (`cost`, `sms` — число частей), `total_cost`, `total_sms`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `api_id` | query | string | да | Ключ API |
| `to` | query | string | да | Номера через запятую, до 100; или to[номер]=текст |
| `msg` | query | string | да | Текст в UTF-8 |
| `multi` | query | string | нет | Разные тексты на разные номера (до 100), вместо to и msg |
| `json` | query | integer | нет | 1 — ответ в JSON |
| `from` | query | string | нет | Имя отправителя |
| `translit` | query | integer | нет | 1 — транслитерация |

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

```
https://sms.ru/sms/cost?api_id=[зарегистрируйтесь, чтобы получить api_id]&to=79255070602,74993221627&msg=hello+world&json=1
```

### GET /stoplist/add — Добавление номера в стоп-лист

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `api_id` | query | string | да | Ключ API |
| `stoplist_phone` | query | string | да | Номер телефона |
| `stoplist_text` | query | string | да | Причина добавления |
| `json` | query | integer | нет | 1 — ответ в JSON |

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

```
https://sms.ru/stoplist/add?api_id=[зарегистрируйтесь, чтобы получить api_id]&stoplist_phone=[номер телефона]&stoplist_text=[причина]&json=1
```

## Нюансы

- Без `json=1` ответ — текстовые строки (код запроса, затем данные построчно).
- Вместо опроса `sms/status` и `callcheck/status` документация рекомендует вебхуки.
- Есть также `callback/del`, `callback/get`, `stoplist/del`, `stoplist/get`, `auth/check`, отправка через email/SMTP; PHP-библиотека — `https://sms.ru/php`.

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

- [Узнать, доставлено ли сообщение](https://mcp-everything.ru/integrations/sms-ru/scenarios/uznat-dostavleno-li-soobschenie.md)
- [Подтвердить номер телефона звонком](https://mcp-everything.ru/integrations/sms-ru/scenarios/podtverdit-nomer-telefona-zvonkom.md)
- [Следить за балансом и лимитами](https://mcp-everything.ru/integrations/sms-ru/scenarios/sledit-za-balansom-i-limitami.md)

---

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