API для SMS-верификации
Последнее изменение 2026/11/03
Выполнение запросов к API
Два API используют один ключ: REST API с JSON и формат SMS-активации, который уже используют многие инструменты. Создайте ключ на странице API ключ в консоли; он показывается один раз. Лимит: 300 запросов в минуту на ключ. Каждый заказ имеет 20-минутное окно для получения кода, такое же, как в консоли.
# REST API (JSON) curl https://virtualsns.com/api/v1/balance -H "Authorization: Bearer YOUR_KEY" # SMS activation format curl "https://virtualsns.com/stubs/handler_api.php?api_key=YOUR_KEY&action=getBalance"
Коды сервисов и стран
Коды сервисов, это имена в адресах страниц наших сервисов, например kakaotalk, line, wechat, zalo, naver, shopee и whatsapp. Коды стран, это ISO коды в нижнем регистре: kr, jp, id, ph, vn, th, us. GET /services и GET /countries возвращают полные списки.
Типичный процесс
- Закажите номер с указанием сервиса и страны. Сохраните id.
- Введите номер в приложение и запросите отправку SMS.
- Читайте заказ каждые 4 секунды, пока не появится код.
- Нужно еще одно SMS? Запросите другой код, затем прочитайте снова. Готово: завершите заказ.
- Нет кода? Отмените для полного возврата средств. Без звонка возврат происходит автоматически по окончании окна.
Python
import os, time, requests
API = "https://virtualsns.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['VIRTUALSNS_KEY']}"}
order = requests.post(f"{API}/orders", headers=H,
data={"service": "kakaotalk", "country": "kr"}).json()["order"]
print("Use this number:", order["phone"])
while True:
o = requests.get(f"{API}/orders/{order['id']}", headers=H).json()["order"]
if o["code"] or o["status"] in ("refunded", "canceled"):
break
time.sleep(4)
print("Code:", o["code"])Node.js
const API = "https://virtualsns.com/api/v1";
const H = { Authorization: `Bearer ${process.env.VIRTUALSNS_KEY}` };
const { order } = await fetch(`${API}/orders`, {
method: "POST", headers: H,
body: new URLSearchParams({ service: "line", country: "jp" }),
}).then((r) => r.json());
console.log("Use this number:", order.phone);
let o = order;
while (!o.code && !["refunded", "canceled"].includes(o.status)) {
await new Promise((r) => setTimeout(r, 4000));
({ order: o } = await fetch(`${API}/orders/${order.id}`, { headers: H }).then((r) => r.json()));
}
console.log("Code:", o.code);Возврат кодов ошибок
REST API
Ошибки возвращаются в формате JSON: {"error":{"code","message"}} с такими статусами HTTP:
| 400 | Отсутствующее или некорректное поле (missing_filter, bad_json). |
| 401 | Нет ключа или неправильный ключ (no_key, bad_key). |
| 402 | Недостаточно средств на балансе (no_balance). |
| 404 | Неизвестный сервис, страна, заказ или конечная точка. |
| 409 | Заказ не может выполнить это сейчас (has_code, not_ready, too_many_open, no_numbers). |
| 429 | Более 300 запросов в минуту (rate_limited). |
Формат SMS активации
| BAD_KEY | Отсутствует или неправильный API ключ. |
| BAD_ACTION | Неизвестное действие. |
| BAD_SERVICE | Неизвестный код сервиса. |
| BAD_COUNTRY | Этот сервис не продается в этой стране. |
| NO_BALANCE | Недостаточно средств на балансе. |
| NO_NUMBERS | Нет доступных номеров в данный момент. Попробуйте снова через некоторое время. |
| NO_ACTIVATION | Неизвестный ID активации или он не принадлежит вам. |
| EARLY_CANCEL_DENIED | Код уже получен, поэтому активацию нельзя отменить. |
| TOO_MANY_REQUESTS | Более 300 запросов в минуту. |
| NO_ACTIVATIONS | Уже открыто 20 активаций. |
Методы REST API
https://virtualsns.com/api/v1
GET/services
Каждый код сервиса с его названием, типом и минимальной ценой. Ключ не требуется.
curl "https://virtualsns.com/api/v1/services"
{"services":[{"code":"kakaotalk","name":"KakaoTalk","category":"social","from":"0.06"}]}GET/countries
Каждый код страны (ISO, нижний регистр) с его названием и телефонным кодом. Ключ не требуется.
curl "https://virtualsns.com/api/v1/countries"
{"countries":[{"code":"kr","name":"South Korea","dial_code":"82"}]}GET/prices
Цены в USD. Добавьте сервис, страну или оба. Ключ не требуется.
curl "https://virtualsns.com/api/v1/prices?service=line&country=jp"
{"prices":[{"service":"line","country":"jp","price":"5.40"}]}GET/balance
Ваш баланс в USD.
curl "https://virtualsns.com/api/v1/balance" \ -H "Authorization: Bearer YOUR_KEY"
{"balance":"25.00","currency":"USD"}POST/orders
Покупка номера (201). Возвращает заказ с номером телефона и временем окончания окна.
curl -X POST https://virtualsns.com/api/v1/orders \ -H "Authorization: Bearer YOUR_KEY" \ -d service=kakaotalk -d country=kr
{"order":{"id":"AC-7K2M9QX4PB","service":"kakaotalk","country":"kr","phone":"+821023456789","status":"waiting","code":null,"expires_at":"2026-11-03T12:20:00.000Z"},"window_minutes":20}GET/orders/AC-7K2M9QX4PB
Один заказ с его статусом и всеми полученными кодами. Статусы: ожидание, получено, завершено, возвращено, отменено.
curl "https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB" \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"id":"AC-7K2M9QX4PB","status":"received","code":"482193","sms":"[Kakao] Verification code [482193]"}}GET/orders
Ваши открытые заказы (status=all для последних 100).
curl "https://virtualsns.com/api/v1/orders?status=open" \ -H "Authorization: Bearer YOUR_KEY"
{"orders":[...]}POST/orders/AC-7K2M9QX4PB/resend
Запрос другого кода на том же номере, после первого кода и пока окно открыто. Без дополнительной платы.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/resend \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"received","waiting_for_resend":true}}POST/orders/AC-7K2M9QX4PB/finish
Завершает заказ, который получил свой код.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/finish \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"finished"}}POST/orders/AC-7K2M9QX4PB/cancel
Отменяет до получения кода. Полная сумма возвращается на ваш баланс.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/cancel \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"canceled","refunded":"8.40"}}Методы формата SMS активации
https://virtualsns.com/stubs/handler_api.php
Метод getBalance
Ваш баланс в USD.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getBalance
ACCESS_BALANCE:12.50
Метод getServicesList
Коды сервисов, которые можно купить (JSON).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getServicesList
{"status":"success","services":[{"code":"line","name":"LINE"}]}Метод getCountries
Коды стран (ISO, нижний регистр) и телефонные коды (JSON).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getCountries
{"jp":{"name":"Japan","dial":"81"}}Метод getPrices
Цены в USD по странам и сервисам. Оба фильтра необязательны.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getPrices&service=line&country=jp
{"jp":{"line":{"cost":5.4,"count":100}}}Метод getNumber
Покупка номера. Возвращает ID активации и номер с его кодом страны.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=line&country=jp
ACCESS_NUMBER:AC-7K2M9QX4PB:819012345678
Метод getStatus
STATUS_WAIT_CODE (код еще не получен), STATUS_OK:<code>, STATUS_WAIT_RETRY:<последний код> (запрошен еще один код), STATUS_CANCEL (отменено или возвращено).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getStatus&id=AC-7K2M9QX4PB
STATUS_OK:482913
Метод setStatus
status=1 готов (ACCESS_READY), 3 еще один код (ACCESS_RETRY_GET), 6 завершено (ACCESS_ACTIVATION), 8 отмена с полным возвратом средств, если код не был получен (ACCESS_CANCEL).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=setStatus&id=AC-7K2M9QX4PB&status=3
ACCESS_RETRY_GET