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
- Đặt một số với dịch vụ và quốc gia. Lưu id.
- Nhập số vào ứng dụng và yêu cầu ứng dụng gửi SMS.
- Đọc đơn hàng mỗi 4 giây cho đến khi có mã.
- 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.
- 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:
| 400 | Thiếu hoặc sai trường (missing_filter, bad_json). |
| 401 | Không có khóa hoặc khóa sai (no_key, bad_key). |
| 402 | Không đủ số dư (no_balance). |
| 404 | Dị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). |
| 429 | Hơn 300 yêu cầu trong một phút (rate_limited). |
Định dạng kích hoạt SMS
| BAD_KEY | Thiếu hoặc sai khóa API. |
| BAD_ACTION | Hành động không xác định. |
| BAD_SERVICE | Mã dịch vụ không xác định. |
| BAD_COUNTRY | Dịch vụ không được bán tại quốc gia đó. |
| NO_BALANCE | Không đủ số dư. |
| NO_NUMBERS | Hiện không có số nào khả dụng. Thử lại sau một lát. |
| NO_ACTIVATION | ID kích hoạt không xác định, hoặc không phải của bạn. |
| EARLY_CANCEL_DENIED | Mã đã đến, vì vậy không thể hủy kích hoạt. |
| TOO_MANY_REQUESTS | Hơ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