Tiếng Việt

API xác minh SMS

Cập nhật lần cuối vào 2026/11/03

Chạy truy vấn đến API

Hai API chia sẻ một khóa: API REST với JSON và định dạng kích hoạt SMS mà nhiều công cụ đã sử dụng. Tạo khóa trên trang Khóa API của bảng điều khiển; khóa chỉ được hiển thị một lần. Giới hạn: 300 yêu cầu mỗi phút mỗi khóa. Mỗi đơn hàng có thời gian chờ mã là 20 phút, giống như trong bảng điều khiển.

# 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"
Mã dịch vụ và quốc gia

Mã dịch vụ là tên trong địa chỉ trang dịch vụ của chúng tôi, ví dụ kakaotalk, line, wechat, zalo, naver, shopee và whatsapp. Mã quốc gia là mã ISO viết thường: kr, jp, id, ph, vn, th, us. GET /services và GET /countries trả về danh sách đầy đủ.

Quy trình điển hình
  1. Đặt một số với dịch vụ và quốc gia. Lưu id.
  2. Nhập số vào ứng dụng và yêu cầu ứng dụng gửi SMS.
  3. Đọc đơn hàng mỗi 4 giây cho đến khi có mã.
  4. Cần thêm một SMS? Yêu cầu mã khác, sau đó đọc lại. Hoàn thành: kết thúc đơn hàng.
  5. Không có mã? Hủy để được hoàn tiền đầy đủ. Không cần gọi, hoàn tiền sẽ tự động diễn ra khi cửa sổ kết thúc.

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);
Trả về mã lỗi

REST API

Lỗi được trả về dưới dạng JSON: {"error":{"code","message"}} với các trạng thái HTTP sau:

400Thiếu hoặc sai trường (missing_filter, bad_json).
401Không có khóa hoặc khóa sai (no_key, bad_key).
402Không đủ số dư (no_balance).
404Dịch vụ, quốc gia, đơn hàng hoặc điểm cuối không xác định.
409Đơn hàng không thể thực hiện điều đó ngay bây giờ (has_code, not_ready, too_many_open, no_numbers).
429Hơn 300 yêu cầu trong một phút (rate_limited).

Định dạng kích hoạt SMS

BAD_KEYThiếu hoặc sai khóa API.
BAD_ACTIONHành động không xác định.
BAD_SERVICEMã dịch vụ không xác định.
BAD_COUNTRYDịch vụ không được bán tại quốc gia đó.
NO_BALANCEKhông đủ số dư.
NO_NUMBERSHiện không có số nào khả dụng. Thử lại sau một lát.
NO_ACTIVATIONID kích hoạt không xác định, hoặc không phải của bạn.
EARLY_CANCEL_DENIEDMã đã đến, vì vậy không thể hủy kích hoạt.
TOO_MANY_REQUESTSHơn 300 yêu cầu trong một phút.
NO_ACTIVATIONSĐã có 20 kích hoạt đang mở.

Phương thức REST API

https://virtualsns.com/api/v1

GET/services

Mọi mã dịch vụ với tên, loại và giá thấp nhất. Không cần khóa.

curl "https://virtualsns.com/api/v1/services"
{"services":[{"code":"kakaotalk","name":"KakaoTalk","category":"social","from":"0.06"}]}
GET/countries

Mọi mã quốc gia (ISO, chữ thường) với tên và mã quay số. Không cần khóa.

curl "https://virtualsns.com/api/v1/countries"
{"countries":[{"code":"kr","name":"South Korea","dial_code":"82"}]}
GET/prices

Giá bằng USD. Thêm dịch vụ, quốc gia hoặc cả hai. Không cần khóa.

curl "https://virtualsns.com/api/v1/prices?service=line&country=jp"
{"prices":[{"service":"line","country":"jp","price":"5.40"}]}
GET/balance

Số dư của bạn bằng USD.

curl "https://virtualsns.com/api/v1/balance" \
  -H "Authorization: Bearer YOUR_KEY"
{"balance":"25.00","currency":"USD"}
POST/orders

Mua một số (201). Trả về đơn hàng với số điện thoại và thời gian cửa sổ kết thúc.

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

Một đơn hàng với trạng thái và mọi mã đã nhận. Trạng thái: đang chờ, đã nhận, hoàn thành, hoàn tiền, đã hủy.

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

Các đơn hàng đang mở của bạn (status=all cho 100 đơn hàng gần nhất).

curl "https://virtualsns.com/api/v1/orders?status=open" \
  -H "Authorization: Bearer YOUR_KEY"
{"orders":[...]}
POST/orders/AC-7K2M9QX4PB/resend

Yêu cầu mã khác trên cùng một số, sau mã đầu tiên và trong khi cửa sổ vẫn mở. Không tính phí thêm.

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

Đóng một đơn hàng đã nhận mã.

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

Hủy trước khi mã đến. Toàn bộ giá trị sẽ được hoàn lại vào số dư của bạn.

curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/cancel \
  -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"canceled","refunded":"8.40"}}

Phương thức định dạng kích hoạt SMS

https://virtualsns.com/stubs/handler_api.php

Phương thức getBalance

Số dư của bạn bằng USD.

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getBalance
ACCESS_BALANCE:12.50
Phương thức getServicesList

Mã dịch vụ bạn có thể mua (JSON).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getServicesList
{"status":"success","services":[{"code":"line","name":"LINE"}]}
Phương thức getCountries

Mã quốc gia (ISO, chữ thường) và mã quay số (JSON).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getCountries
{"jp":{"name":"Japan","dial":"81"}}
Phương thức getPrices

Giá bằng USD theo quốc gia và dịch vụ. Cả hai bộ lọc đều tùy chọn.

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getPrices&service=line&country=jp
{"jp":{"line":{"cost":5.4,"count":100}}}
Phương thức getNumber

Mua một số. Trả về ID kích hoạt và số điện thoại với mã quốc gia.

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=line&country=jp
ACCESS_NUMBER:AC-7K2M9QX4PB:819012345678
Phương thức getStatus

STATUS_WAIT_CODE (chưa có mã), STATUS_OK:<code>, STATUS_WAIT_RETRY:<last code> (yêu cầu mã khác), STATUS_CANCEL (đã hủy hoặc hoàn tiền).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getStatus&id=AC-7K2M9QX4PB
STATUS_OK:482913
Phương thức setStatus

status=1 sẵn sàng (ACCESS_READY), 3 yêu cầu mã khác (ACCESS_RETRY_GET), 6 hoàn thành (ACCESS_ACTIVATION), 8 hủy với hoàn tiền đầy đủ khi không nhận được mã (ACCESS_CANCEL).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=setStatus&id=AC-7K2M9QX4PB&status=3
ACCESS_RETRY_GET
API Xác minh SMS cho Số KakaoTalk, LINE và WeChat