RWM SMS API

RWM SMS API

Документация для подключения ваших скриптов и сервисов к RWM SMS: отправка SMS, массовые рассылки и HLR-проверка номеров через простой HTTP API.

Базовый адрес API:

https://api.rwmsms.com

Документация: https://docs.rwmsms.com

Формат. Все запросы и ответы — в формате JSON (UTF-8). API-ключ выдаёт администратор; цена за SMS и баланс закреплены за ключом и не изменяются через API.

Авторизация

Для каждого запроса передавайте API-ключ в HTTP-заголовке. Ключ не передаётся в теле запроса.

ЗаголовокПримерОписание
AuthorizationBearer <api_key>Рекомендуемый способ
X-Api-Key<api_key>Альтернатива
curl https://api.rwmsms.com/api/v1/balance \
  -H "Authorization: Bearer YOUR_API_KEY"
import requests

API = "https://api.rwmsms.com"
KEY = "YOUR_API_KEY"
headers = {"Authorization": f"Bearer {KEY}"}

r = requests.get(f"{API}/api/v1/balance", headers=headers)
print(r.json())
const API = "https://api.rwmsms.com";
const KEY = "YOUR_API_KEY";

const r = await fetch(`${API}/api/v1/balance`, {
  headers: { Authorization: `Bearer ${KEY}` },
});
console.log(await r.json());
Внимание. Если заголовок отсутствует или ключ неверный — вернётся 401, запрос обработан не будет.

Коды ошибок

КодЗначение
200Успех
400Неверные данные запроса (телефон, текст, JSON)
401Нет ключа или ключ неверный
402Недостаточно баланса
403Ключ заблокирован
502Ошибка отправки на стороне провайдера

Формат ошибки:

{
  "ok": false,
  "error": "Insufficient balance (have 0.00 USD, need 0.70)"
}

Проверка баланса

Возвращает баланс ключа и закреплённые за ним цены.

GEThttps://api.rwmsms.com/api/v1/balance
curl https://api.rwmsms.com/api/v1/balance \
  -H "Authorization: Bearer YOUR_API_KEY"
import requests
r = requests.get(
    "https://api.rwmsms.com/api/v1/balance",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)
print(r.json())
const r = await fetch("https://api.rwmsms.com/api/v1/balance", {
  headers: { Authorization: "Bearer YOUR_API_KEY" },
});
console.log(await r.json());

Ответ 200

{
  "ok": true,
  "balance": 25.00,
  "currency": "USD",
  "sms_price": 0.70,
  "hlr_price": 0.05
}

Отправка SMS

Отправка одного сообщения. Стоимость — $0.70 за SMS (цена закреплена за ключом).

POSThttps://api.rwmsms.com/api/v1/sms/send
ПараметрТипОписание
phoneстрокаНомер в формате E.164, напр. +15167887267обязательный
messageстрокаТекст SMS (синоним: text)обязательный
sender_idстрокаИмя отправителя, до 11 символов (синоним: sid)опционально*

* Если для ключа задан фиксированный Sender ID — он используется всегда, поле из запроса игнорируется.

curl -X POST https://api.rwmsms.com/api/v1/sms/send \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "+15167887267",
    "message": "Your code: 1234",
    "sender_id": "Verify"
  }'
import requests

r = requests.post(
    "https://api.rwmsms.com/api/v1/sms/send",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "phone": "+15167887267",
        "message": "Your code: 1234",
        "sender_id": "Verify",
    },
)
print(r.json())
const r = await fetch("https://api.rwmsms.com/api/v1/sms/send", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    phone: "+15167887267",
    message: "Your code: 1234",
    sender_id: "Verify",
  }),
});
console.log(await r.json());

Ответ 200

{
  "ok": true,
  "status": "success",
  "phone": "+15167887267",
  "balance": 24.30
}

Массовая рассылка

Отправка на множество номеров. Стоимость — $0.70 за каждый номер. Поддерживаются три формата тела запроса.

POSThttps://api.rwmsms.com/api/v1/sms/bulk

Вариант 1 — общий текст для всех

ПараметрТипОписание
phonesмассив / строкаНомера (массив или строки через перенос/запятую)обязательный
messageстрокаОбщий текст для всех номеровобязательный
sender_idстрокаИмя отправителяопционально

Вариант 2 — свой текст для каждого номера

Передайте массив messages — у каждого номера свой текст. Поле message не требуется.

ПараметрТипОписание
messagesмассив объектов[{"phone": "...", "text": "..."}]обязательный
sender_idстрокаИмя отправителяопционально

Вариант 3 — формат «номер текст» (как .txt)

Передайте text_lines — построчно «номер пробел текст». Удобно отправлять содержимое .txt-файла.

ПараметрТипОписание
text_linesстрокаСтроки +номер текст, по одной на строкуобязательный
sender_idстрокаИмя отправителяопционально
У каждого номера обязательно должен быть текст: либо общий message, либо персональный (в messages / text_lines). Иначе вернётся 400.
# Вариант 1 — общий текст
curl -X POST https://api.rwmsms.com/api/v1/sms/bulk \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phones": ["+15167887267", "+447911123456"],
    "message": "Hello!",
    "sender_id": "Promo"
  }'

# Вариант 3 — формат «номер текст»
curl -X POST https://api.rwmsms.com/api/v1/sms/bulk \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text_lines": "+15167887267 Your code 1234\n+447911123456 Hello Bob",
    "sender_id": "Verify"
  }'
import requests

# Вариант 2 — свой текст каждому номеру
r = requests.post(
    "https://api.rwmsms.com/api/v1/sms/bulk",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "sender_id": "Verify",
        "messages": [
            {"phone": "+15167887267", "text": "Your code 1234"},
            {"phone": "+447911123456", "text": "Hello Bob"},
        ],
    },
)
print(r.json())

# Вариант 3 — отправка содержимого .txt (строки "номер текст")
with open("numbers.txt", encoding="utf-8") as f:
    lines = f.read()
r = requests.post(
    "https://api.rwmsms.com/api/v1/sms/bulk",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"text_lines": lines, "sender_id": "Verify"},
)
print(r.json())
const r = await fetch("https://api.rwmsms.com/api/v1/sms/bulk", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    sender_id: "Verify",
    messages: [
      { phone: "+15167887267", text: "Your code 1234" },
      { phone: "+447911123456", text: "Hello Bob" },
    ],
  }),
});
console.log(await r.json());

Ответ 200

{
  "ok": true,
  "status": "success",
  "total": 2,
  "success": 2,
  "failed": 0,
  "invalid": [],
  "balance": 23.60,
  "results": [
    { "phone": "+15167887267", "ok": true },
    { "phone": "+447911123456", "ok": true }
  ]
}

Проверка HLR

HLR Lookup — проверка валидности номера, оператора и статуса роуминга. Стоимость — $0.05 за номер.

POSThttps://api.rwmsms.com/api/v1/hlr
ПараметрТипОписание
phoneстрокаНомер в формате E.164 (синоним: number)обязательный
curl -X POST https://api.rwmsms.com/api/v1/hlr \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "phone": "+15167887267" }'
import requests
r = requests.post(
    "https://api.rwmsms.com/api/v1/hlr",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"phone": "+15167887267"},
)
print(r.json())
const r = await fetch("https://api.rwmsms.com/api/v1/hlr", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ phone: "+15167887267" }),
});
console.log(await r.json());

Ответ 200

{
  "ok": true,
  "status": "success",
  "phone": "+15167887267",
  "result": {
    "operator": "Verizon",
    "country": "US",
    "ported": false
  },
  "balance": 24.95
}

RWM SMS API · базовый адрес https://api.rwmsms.com · ключ выдаёт администратор бота.