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で完全なリストを返します。
典型的な流れ
- サービスと国を指定して番号を注文します。idを保存します。
- アプリに番号を入力し、SMSを送信するように依頼します。
- コードが届くまで、4秒ごとに注文を確認します。
- もう1つの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 | 1分間に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 | 1分間に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
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