---
slug: "sms-ru"
name: "SMS.RU API"
vendor: "SMS.RU"
industry: "communications"
docsUrl: "https://sms.ru/api"
version: 2
updatedAt: "2026-10-24"
---

# SMS.RU API

Отрасль: Связь и уведомления. Актуально на 2026-10-24.

HTTP API сервиса SMS-рассылок SMS.RU: отправка SMS, проверка статуса и стоимости, баланс и дневной лимит, список одобренных отправителей, стоп-лист, авторизация пользователя по звонку и вебхуки со статусами сообщений. Запросы — GET или POST с параметрами; с `json=1` ответ приходит в JSON.

## Сценарии

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

Коды подтверждения, статусы заказов, напоминания — одно сообщение или рассылка до 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
```

### Узнать, доставлено ли сообщение

Проверить, дошло ли SMS, — опросом или вебхуком.

1. Разово: GET /sms/status с sms_id (до 100 через запятую). В ответе для каждого — status_code, status_text и cost. 103 — доставлено, 104 — не доставлено, истекло время жизни.
2. Постоянно: зарегистрируй обработчик статусов — GET /callback/add с url твоего скрипта (URL-кодированным). Так документация рекомендует вместо опроса.
3. SMS.RU будет присылать POST-запросы со статусами всех отправленных сообщений. Обработчик должен ответить строкой 100, иначе запрос будет повторяться.
4. Если ответ 901 — неверный URL обработчика.

```bash
# Статус двух сообщений
curl -G https://sms.ru/sms/status \
  -d api_id=<api_id> \
  -d sms_id=000000-10000000,000000-10000001 \
  -d json=1

# Обработчик статусов
curl -G https://sms.ru/callback/add \
  -d api_id=<api_id> \
  --data-urlencode 'url=https://example.ru/smsru/callback' \
  -d json=1
```

### Подтвердить номер телефона звонком

Бесплатная для пользователя альтернатива SMS-коду: он звонит на выданный номер, звонок сбрасывается, номер подтверждён.

1. Запусти проверку: GET /callcheck/add с phone — номером пользователя — и ip пользователя. В ответе check_id и call_phone_pretty — номер, на который нужно позвонить.
2. Покажи пользователю номер и попроси позвонить в течение 5 минут. Звонок бесплатный, система сама его сбросит.
3. Проверяй результат: GET /callcheck/status с check_id раз в несколько секунд или получай статус вебхуком. check_status = 401 — номер подтверждён, 400 — ещё нет.
4. Ошибка 402 значит, что время проверки истекло или check_id неверный — запусти проверку заново.

```bash
curl -G https://sms.ru/callcheck/add -d api_id=<api_id> -d phone=79991234567 -d ip=203.0.113.7 -d json=1
# в ответе: check_id и call_phone_pretty — номер, на который пользователь должен позвонить

curl -G https://sms.ru/callcheck/status -d api_id=<api_id> -d check_id=<check_id> -d json=1
# → check_status: 401 — номер подтверждён
```

### Следить за балансом и лимитами

Не упереться в нулевой баланс или дневной лимит посреди рассылки.

1. Проверь баланс: GET /my/balance. Если он меньше суммы предстоящей рассылки (её считает /sms/cost), пополни заранее.
2. Проверь дневной лимит: GET /my/limit — total_limit и used_today (на сколько номеров уже отправлено сегодня). При превышении отправка вернёт 206.
3. Узнай одобренные имена отправителей: GET /my/senders. Только их можно передавать в параметре from.
4. Запускай проверку по расписанию и присылай себе предупреждение, когда баланс или запас лимита подходят к концу.

```bash
curl -G https://sms.ru/my/balance -d api_id=<api_id> -d json=1
curl -G https://sms.ru/my/limit -d api_id=<api_id> -d json=1
curl -G https://sms.ru/my/senders -d api_id=<api_id> -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/status — Статус сообщений

В JSON-ответе для каждого `sms_id`: `status`, `status_code`, `cost`, `status_text`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `api_id` | query | string | да | Ключ API |
| `sms_id` | query | string | да | ID сообщений через запятую, до 100 |
| `json` | query | integer | нет | 1 — ответ в JSON |

### 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 /my/balance — Баланс

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

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

```
https://sms.ru/my/balance?api_id=[зарегистрируйтесь, чтобы получить api_id]&json=1
```

### GET /my/limit — Дневной лимит

В JSON-ответе: `total_limit` (дневной лимит), `used_today` (номеров, на которые уже отправлено сегодня).

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

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

```
https://sms.ru/my/limit?api_id=[зарегистрируйтесь, чтобы получить api_id]&json=1
```

### GET /my/senders — Одобренные отправители

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

### 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
```

### GET /callcheck/add — Авторизация по звонку: запуск

Пользователь должен позвонить на выданный номер в течение 5 минут; звонок бесплатный, система его сбрасывает. В JSON-ответе: `check_id`, `call_phone`, `call_phone_pretty`, `call_phone_html`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `api_id` | query | string | да | Ключ API |
| `phone` | query | string | да | Номер пользователя, с которого ожидается звонок |
| `ip` | query | string | нет | IP пользователя (из-за границы выдаётся обычный номер вместо 8-800) |
| `json` | query | integer | нет | 1 — ответ в JSON |

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

```
https://sms.ru/callcheck/add?api_id=[зарегистрируйтесь, чтобы получить api_id]&phone=79255070602&json=1
```

### GET /callcheck/status — Авторизация по звонку: статус

В JSON-ответе: `check_status` (`400` — не подтверждён, `401` — подтверждён), `check_status_text`.

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

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

```
https://sms.ru/callcheck/status?api_id=[зарегистрируйтесь, чтобы получить api_id]&check_id=[идентификатор авторизации]&json=1
```

### GET /callback/add — Добавление обработчика вебхуков

Обработчик получает статусы отправленных сообщений.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `api_id` | query | string | да | Ключ API |
| `url` | query | string | да | Адрес обработчика (URL-кодированный при GET) |
| `json` | query | integer | нет | 1 — ответ в JSON |

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

```
https://sms.ru/callback/add?api_id=[зарегистрируйтесь, чтобы получить api_id]&url=https%3A%2F%2Fyoursite.ru%2Fcallback.php&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`.

## Ошибки

| Код | Описание |
|---|---|
| `100` | Запрос выполнен или сообщение в очереди |
| `103` | Сообщение доставлено |
| `104` | Не доставлено: истекло время жизни |
| `200` | Неправильный api_id |
| `201` | Недостаточно средств |
| `202` | Неправильный номер получателя или нет маршрута |
| `203` | Нет текста сообщения |
| `205` | Сообщение слишком длинное (больше 8 SMS) |
| `206` | Достигнут дневной лимит |
| `207` | Нет маршрута доставки на этот номер |
| `208` | Неправильный параметр time |
| `209` | Номер в вашем стоп-листе |
| `210` | Используется GET там, где нужен POST |
| `212` | Текст не в UTF-8 |
| `220` | Сервис временно недоступен |
| `230` | Превышен дневной лимит сообщений на номер |
| `301` | Неправильный api_id или логин/пароль |
| `402` | Время проверки истекло или неверный check_id |
| `500` | Ошибка сервера, повторите запрос |
| `901` | Неправильный URL обработчика |
| `902` | Обработчик не найден |

## Ограничения

- До 100 номеров в запросе отправки; при более чем 10 номерах — POST.
- До 8 SMS-частей на сообщение.
- `time` — до 2 месяцев вперёд, `ttl` — 1–1440 минут.
- До 100 `sms_id` в запросе статуса.
- Дневные лимиты на аккаунт и на номер (коды 206, 230–232).

## Источники

- [SMS.RU — API](https://sms.ru/api)
- [Отправка SMS](https://sms.ru/api/send)
- [Статус сообщений](https://sms.ru/api/status)
- [Стоимость](https://sms.ru/api/cost)
- [Баланс](https://sms.ru/api/balance)
- [Лимит](https://sms.ru/api/limit)
- [Отправители](https://sms.ru/api/senders)
- [Стоп-лист](https://sms.ru/api/stoplist_add)
- [Авторизация по звонку](https://sms.ru/api/call)
- [Вебхуки](https://sms.ru/api/callback_add)

---

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