API xác minh SMS
API SNSSIM xử lý mua số, kiểm tra mã, hủy, kiểm tra credit và giá chỉ bằng một yêu cầu HTTP. Sử dụng phương thức handler_api tiêu chuẩn ngành, chỉ cần thay đổi địa chỉ và API key là có thể kết nối ngay với chương trình hiện có.
GET /stubs/handler_api.php
?api_key=API_KEY&action=getNumber
&service=telegram&country=gb
ACCESS_NUMBER:SS8Q2K7:447700900123
GET ...&action=getStatus&id=SS8Q2K7
STATUS_OK:48215- Phương thức tiêu chuẩn ngành
- handler_api
- Mỗi API key
- 300 lần mỗi phút
- Quốc gia / Dịch vụ
- 145 / 1,255
- Tự động hoàn tiền nếu không có mã
- 20 phút
Phương thức tiêu chuẩn ngành
Mỗi API key
Quốc gia / Dịch vụ
Tự động hoàn tiền nếu không có mã
Nhận API key như thế nào?
Tạo khóa trong menu API trên màn hình tài khoản sau khi đăng nhập. Khóa chỉ hiển thị một lần khi tạo, vui lòng lưu ngay. API sử dụng cùng số dư và giá cả như giao diện web.
Địa chỉ cơ bản là gì?
Mọi yêu cầu được gửi bằng phương thức GET đến cùng địa chỉ với api_key và action.
https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=...
Bạn có thể gửi những yêu cầu nào?
Tổng cộng có 7 loại yêu cầu từ mua số, kiểm tra mã, hủy bỏ đến kiểm tra số dư.
| action | Việc làm | Ví dụ phản hồi |
|---|---|---|
| getBalance | Kiểm tra số dư | ACCESS_BALANCE:12.50 |
| getPrices&service=telegram&country=gb | Giá và số còn lại theo dịch vụ và quốc gia | {"gb":{"telegram":{"cost":0.207,"count":8877728}}} |
| getNumber&service=telegram&country=gb | Mua số | ACCESS_NUMBER:ID:PHONE |
| getStatus&id=ID | Kiểm tra mã | STATUS_WAIT_CODE / STATUS_OK:CODE |
| setStatus&id=ID&status=8 | Hủy sử dụng số (hoàn tiền toàn bộ nếu không nhận được mã) | ACCESS_CANCEL |
| setStatus&id=ID&status=3 | Nhận mã xác thực bổ sung từ cùng số | ACCESS_RETRY_GET |
| setStatus&id=ID&status=6 | Kết thúc sử dụng | ACCESS_ACTIVATION |
Tham số yêu cầu
| Tên | Bắt buộc | Mô tả |
|---|---|---|
| api_key | Tất cả | Khóa API tạo trên màn hình Tài khoản |
| action | Tất cả | getBalance, getPrices, getNumber, getStatus, setStatus |
| service | getNumber | Mã dịch vụ (ví dụ: telegram, whatsapp, google). Giá trị giống với trang danh sách dịch vụ |
| country | getNumber | Mã quốc gia 2 chữ cái (ví dụ: gb, us, id) |
| id | getStatus, setStatus | ID số đã nhận từ getNumber (bắt đầu bằng N) |
| status | setStatus | 8 để hủy, 3 để yêu cầu lại mã, 6 để kết thúc, 1 để chuẩn bị |
Chuỗi phản hồi và ý nghĩa
Phản hồi được cung cấp dưới dạng văn bản ngắn gọn. Kèm theo thông tin trừ credit.
| Phản hồi | Ý nghĩa | Tiền |
|---|---|---|
| ACCESS_NUMBER:ID:PHONE | Đã nhận số | Giá số được trừ |
| STATUS_WAIT_CODE | Đang chờ mã | Giữ nguyên |
| STATUS_OK:CODE | Mã đã đến | Thanh toán hoàn tất |
| STATUS_WAIT_RETRY:CODE | Đang chờ mã xác minh bổ sung (bao gồm mã trước đó) | Không phí thêm |
| STATUS_CANCEL | Đã hủy hoặc hết giờ | Được hoàn tiền nếu không có mã |
| ACCESS_CANCEL | Đã hủy | Hoàn toàn bộ |
| ACCESS_RETRY_GET | Đang chờ nhận mã từ cùng số điện thoại lần nữa | Không phí thêm |
| ACCESS_ACTIVATION | Đã kết thúc dùng số | Giữ nguyên |
| NO_BALANCE | Nạp số dư là nhận ngay | Không bị trừ |
| NO_NUMBERS | Hiện tại không thể cung cấp số điện thoại cho quốc gia này | Không bị trừ |
| NO_ACTIVATIONS | Đang mở 20 số | Không bị trừ |
| EARLY_CANCEL_DENIED | Đối với số điện thoại đã nhận mã xác minh, hãy chọn kết thúc (6) thay vì hủy | Giữ nguyên |
| BAD_KEY | Khóa API không đúng | Không bị trừ |
| BAD_SERVICE / BAD_COUNTRY | Mã dịch vụ hoặc quốc gia không chính xác | Không bị trừ |
| NO_ACTIVATION | Không tìm thấy ID số | Giữ nguyên |
| TOO_MANY_REQUESTS | Đã vượt 300 lần mỗi phút | Không bị trừ |
Quy trình nhận code qua API?
Quy trình 4 bước: nhận số, nhập số, kiểm tra mã và hoàn tất.
- 1 bước
Nhận số
Chọn dịch vụ và quốc gia mong muốn trong getNumber để nhận số.
action=getNumber&service=telegram&country=gb > ACCESS_NUMBER:SS8Q2K7:447700900123
- 2 bước
Nhập số
Nhập số đã mua vào trang đăng ký hoặc chương trình.
+44 7700 900123
- 3 bước
Kiểm tra mã
Kiểm tra mã đã đến chưa bằng cách gọi getStatus mỗi 5 giây.
action=getStatus&id=SS8Q2K7 > STATUS_OK:48215
- 4 bước
Kết thúc
Sau khi nhập mã, hãy hoàn tất bằng setStatus 6. Nếu không có mã trong 20 phút, sẽ tự động hoàn tiền.
action=setStatus&id=SS8Q2K7&status=6 > ACCESS_ACTIVATION
Ví dụ theo ngôn ngữ
Đây là toàn bộ quy trình từ nhận số, chờ mã đến hoàn tất. Nhấn vào tab để đổi ngôn ngữ.
# Balance
curl "https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=getBalance"
# Get a number (Telegram, United Kingdom)
curl "https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=getNumber&service=telegram&country=gb"
# ACCESS_NUMBER:N-8Q2K7XLM:447700900123
# Check the code (every 5 seconds)
curl "https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=getStatus&id=N-8Q2K7XLM"
# STATUS_WAIT_CODE or STATUS_OK:48215
# Finish (6) / Cancel (8, full refund before a code)
curl "https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=setStatus&id=N-8Q2K7XLM&status=6"import time, requests
BASE = "https://snssim.com/stubs/handler_api.php"
KEY = "API_KEY"
def call(**p):
return requests.get(BASE, params={"api_key": KEY, **p}, timeout=30).text
r = call(action="getNumber", service="telegram", country="gb")
if not r.startswith("ACCESS_NUMBER"):
raise SystemExit(r)
_, num_id, phone = r.split(":")
print("Number:", phone)
for _ in range(240): # 20 minutes
s = call(action="getStatus", id=num_id)
if s.startswith("STATUS_OK"):
print("Code:", s.split(":")[1])
call(action="setStatus", id=num_id, status=6)
break
time.sleep(5)// Node.js 18+
const BASE = "https://snssim.com/stubs/handler_api.php";
const KEY = "API_KEY";
const call = (p) => fetch(BASE + "?" + new URLSearchParams({ api_key: KEY, ...p })).then((r) => r.text());
const r = await call({ action: "getNumber", service: "telegram", country: "gb" });
if (!r.startsWith("ACCESS_NUMBER")) throw new Error(r);
const [, id, phone] = r.split(":");
console.log("Number:", phone);
for (let i = 0; i < 240; i++) {
const s = await call({ action: "getStatus", id });
if (s.startsWith("STATUS_OK")) {
console.log("Code:", s.split(":")[1]);
await call({ action: "setStatus", id, status: "6" });
break;
}
await new Promise((ok) => setTimeout(ok, 5000));
}<?php
$base = "https://snssim.com/stubs/handler_api.php";
$key = "API_KEY";
function call($p) { global $base, $key;
return file_get_contents($base . "?" . http_build_query(["api_key" => $key] + $p)); }
$r = call(["action" => "getNumber", "service" => "telegram", "country" => "gb"]);
if (strpos($r, "ACCESS_NUMBER") !== 0) exit($r);
[, $id, $phone] = explode(":", $r);
echo "Number: $phone\n";
for ($i = 0; $i < 240; $i++) {
$s = call(["action" => "getStatus", "id" => $id]);
if (strpos($s, "STATUS_OK") === 0) {
echo "Code: " . explode(":", $s)[1] . "\n";
call(["action" => "setStatus", "id" => $id, "status" => 6]);
break;
}
sleep(5);
}package main
import ("fmt"; "io"; "net/http"; "net/url"; "strings"; "time")
const base = "https://snssim.com/stubs/handler_api.php"
const key = "API_KEY"
func call(p url.Values) string {
p.Set("api_key", key)
r, _ := http.Get(base + "?" + p.Encode())
defer r.Body.Close()
b, _ := io.ReadAll(r.Body)
return string(b)
}
func main() {
r := call(url.Values{"action": {"getNumber"}, "service": {"telegram"}, "country": {"gb"}})
if !strings.HasPrefix(r, "ACCESS_NUMBER") { fmt.Println(r); return }
f := strings.Split(r, ":")
fmt.Println("Number:", f[2])
for i := 0; i < 240; i++ {
s := call(url.Values{"action": {"getStatus"}, "id": {f[1]}})
if strings.HasPrefix(s, "STATUS_OK") {
fmt.Println("Code:", strings.Split(s, ":")[1])
call(url.Values{"action": {"setStatus"}, "id": {f[1]}, "status": {"6"}})
return
}
time.Sleep(5 * time.Second)
}
}import java.net.URI; import java.net.URLEncoder; import java.net.http.*;
import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.stream.Collectors;
public class SNSSIM {
static final String BASE = "https://snssim.com/stubs/handler_api.php", KEY = "API_KEY";
static final HttpClient http = HttpClient.newHttpClient();
static String call(Map<String, String> p) throws Exception {
String q = p.entrySet().stream().map(e -> e.getKey() + "=" + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8)).collect(Collectors.joining("&"));
return http.send(HttpRequest.newBuilder(URI.create(BASE + "?api_key=" + KEY + "&" + q)).build(), HttpResponse.BodyHandlers.ofString()).body();
}
public static void main(String[] a) throws Exception {
String r = call(Map.of("action", "getNumber", "service", "telegram", "country", "gb"));
if (!r.startsWith("ACCESS_NUMBER")) { System.out.println(r); return; }
String[] f = r.split(":");
System.out.println("Number: " + f[2]);
for (int i = 0; i < 240; i++) {
String s = call(Map.of("action", "getStatus", "id", f[1]));
if (s.startsWith("STATUS_OK")) { System.out.println("Code: " + s.split(":")[1]); call(Map.of("action", "setStatus", "id", f[1], "status", "6")); return; }
Thread.sleep(5000);
}
}
}using System.Net.Http;
const string Base = "https://snssim.com/stubs/handler_api.php";
const string Key = "API_KEY";
var http = new HttpClient();
async Task<string> Call(string q) => await http.GetStringAsync($"{Base}?api_key={Key}&{q}");
var r = await Call("action=getNumber&service=telegram&country=gb");
if (!r.StartsWith("ACCESS_NUMBER")) { Console.WriteLine(r); return; }
var f = r.Split(':');
Console.WriteLine($"Number: {f[2]}");
for (var i = 0; i < 240; i++)
{
var s = await Call($"action=getStatus&id={f[1]}");
if (s.StartsWith("STATUS_OK"))
{
Console.WriteLine($"Code: {s.Split(':')[1]}");
await Call($"action=setStatus&id={f[1]}&status=6");
break;
}
await Task.Delay(5000);
}Câu hỏi thường gặp về API
API cung cấp số điện thoại từ 1,255 dịch vụ tại 145 quốc gia với giá giống như trên web.
- API xác thực SMS là gì?
- Tính năng xử lý mua số ảo, kiểm tra mã xác minh và hủy bằng HTTP request trong chương trình. API SNSSIM dùng chuẩn handler_api của ngành.
- Tôi có thể tiếp tục sử dụng chương trình đã dùng trên các trang xác thực SMS khác không?
- Nếu dùng chương trình hỗ trợ handler_api, chỉ cần thay đổi địa chỉ cơ bản và API key là kết nối ngay.
- Có phí riêng cho API không?
- Không có sự khác biệt. API và giao diện web sử dụng cùng một credit và giá cả.
- Có thể yêu cầu tối đa bao nhiêu lần?
- Mỗi API key tối đa 300 yêu cầu mỗi phút. Vượt quá sẽ gặp lỗi TOO_MANY_REQUESTS và credit không bị trừ.
- Số mua qua API có được hoàn tiền không?
- Có. Nếu mã không đến trong 20 phút, số mua qua API cũng sẽ được tự động hoàn lại vào credit.
- Tạo API key ở đâu?
- Tạo trong menu API trên màn hình tài khoản sau khi đăng nhập. Khóa chỉ hiển thị một lần khi tạo, vui lòng lưu ngay.
Tạo API key và kết nối ngay
Sau khi đăng ký, nạp credit vào tài khoản để có thể tạo khóa API ngay tại màn hình tài khoản.