日本語

SMS認証API

最終更新日:2026/11/03

APIへのリクエスト

2つのAPIが1つのキーを共有します:JSONを使用したREST APIと、多くのツールですでに使用されているSMSアクティベーション形式。コンソールのAPIキーページでキーを作成します。表示は一度だけです。制限:キーごとに1分あたり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. もう1つの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)。
4291分間に300回以上のリクエストがあります(rate_limited)。

SMSアクティベーション形式

BAD_KEYAPIキーが不足しているか間違っています。
BAD_ACTION不明なアクションです。
BAD_SERVICE不明なサービスコードです。
BAD_COUNTRYその国ではそのサービスは販売されていません。
NO_BALANCEクレジットが不足しています。
NO_NUMBERS現在利用可能な番号がありません。しばらくしてから再度お試しください。
NO_ACTIVATION不明なアクティベーションID、またはあなたのものではありません。
EARLY_CANCEL_DENIEDコードが既に到着しているため、アクティベーションをキャンセルできません。
TOO_MANY_REQUESTS1分間に300回以上のリクエストがあります。
NO_ACTIVATIONS20件のアクティベーションが既に開かれています。

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

1つの注文とそのステータス、および受信したすべてのコード。ステータス: waiting, received, finished, refunded, canceled。

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:<last code>(別のコードをリクエスト中)、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
KakaoTalk、LINE、WeChat番号のSMS認証API