Русский

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 возвращают полные списки.

Типичный процесс
  1. Закажите номер с указанием сервиса и страны. Сохраните id.
  2. Введите номер в приложение и запросите отправку SMS.
  3. Читайте заказ каждые 4 секунды, пока не появится код.
  4. Нужно еще одно SMS? Запросите другой код, затем прочитайте снова. Готово: завершите заказ.
  5. Нет кода? Отмените для полного возврата средств. Без звонка возврат происходит автоматически по окончании окна.

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
SMS Verification API для номеров KakaoTalk, LINE и WeChat