SMS 驗證 API
使用簡單的 HTTP GET 或 POST 請求購買號碼並讀取 SMS 驗證碼。回應使用常見 SMS 激活工具的文本格式,專用號碼呼叫以 JSON 回應。
入門
- 地址
- https://snscodes.com/stubs/handler_api.php
- 認證
- api_key 參數。在帳戶的 API 頁面創建密鑰;只會顯示一次。
- 請求限制
- 每個密鑰每分鐘 300 次請求
- 金額
- 價格及餘額以美元計算,與網站使用同一餘額。
curl "https://snscodes.com/stubs/handler_api.php?api_key=$KEY&action=getNumber&service=telegram&country=us" # ACCESS_NUMBER:N-7KQ2M9XWD4:14155550123 curl "https://snscodes.com/stubs/handler_api.php?api_key=$KEY&action=getStatus&id=N-7KQ2M9XWD4" # STATUS_OK:482913
import time, requests
BASE = "https://snscodes.com/stubs/handler_api.php"
KEY = "YOUR_KEY"
r = requests.get(BASE, params={"api_key": KEY, "action": "getNumber", "service": "telegram", "country": "us"}).text
_, num_id, phone = r.split(":")
print("number", phone)
while True:
s = requests.get(BASE, params={"api_key": KEY, "action": "getStatus", "id": num_id}).text
if s.startswith("STATUS_OK"):
print("code", s.split(":")[1]); break
if s == "STATUS_CANCEL":
break
time.sleep(5)const BASE = "https://snscodes.com/stubs/handler_api.php";
const KEY = process.env.SNSCODES_KEY;
const call = async (q) => (await fetch(BASE + "?" + new URLSearchParams({ api_key: KEY, ...q }))).text();
const [, id, phone] = (await call({ action: "getNumber", service: "telegram", country: "us" })).split(":");
console.log("number", phone);
for (;;) {
const s = await call({ action: "getStatus", id });
if (s.startsWith("STATUS_OK")) { console.log("code", s.split(":")[1]); break; }
if (s === "STATUS_CANCEL") break;
await new Promise((r) => setTimeout(r, 5000));
}獲取餘額 action=getBalance
返回你的帳戶餘額(美元)。
回應
ACCESS_BALANCE:42.50
BAD_KEY密鑰缺失或錯誤。
驗證碼價格 action=getPrices
按國家及服務的每條驗證碼價格。兩個篩選條件均為可選。
| 參數 | 必填 | 描述 |
|---|---|---|
| service | 否 | 服務代碼,例如 telegram |
| country | 否 | us、gb 或 au |
回應
{"us":{"telegram":{"cost":3,"count":100}}}購買驗證碼號碼 action=getNumber
購買一個號碼用於單一應用程式。費用會即時從餘額扣除,若20分鐘內未收到驗證碼將全額退款。
| 參數 | 必填 | 描述 |
|---|---|---|
| service | 是 | 來自 getPrices 的服務代碼 |
| country | 是 | us、gb 或 au |
回應
ACCESS_NUMBER:N-7KQ2M9XWD4:14155550123
BAD_SERVICE未知服務代碼。BAD_COUNTRY此國家不提供該服務。NO_BALANCE餘額不足。未收取任何費用。NO_NUMBERS目前沒有可用號碼。未收取任何費用。NO_ACTIVATIONS你已有20個未完成的驗證碼號碼。
讀取驗證碼 action=getStatus
每5至10秒查詢一次,直至收到驗證碼。
| 參數 | 必填 | 描述 |
|---|---|---|
| id | 是 | 來自 getNumber 的 id |
回應
STATUS_OK:482913
STATUS_WAIT_CODE尚未收到SMS。STATUS_WAIT_RETRY:482913正在等待另一組驗證碼;顯示最後收到的驗證碼。STATUS_CANCEL已取消或退款。NO_ACTIVATION未知id。
取消、重試或完成 action=setStatus
status=8 取消未收到驗證碼的號碼(全額退款),status=3 要求同一號碼重新發送驗證碼,status=6 完成使用。
| 參數 | 必填 | 描述 |
|---|---|---|
| id | 是 | 來自 getNumber 的 id |
| status | 是 | 8、3 或 6 |
回應
ACCESS_CANCEL
EARLY_CANCEL_DENIED已收到驗證碼;請選擇完成而非取消。ACCESS_RETRY_GET正在等待另一組驗證碼。ACCESS_ACTIVATION已完成。
專用號碼價格 action=getRentPrices
按國家及租用期的整個租用期價格。返回JSON格式。
| 參數 | 必填 | 描述 |
|---|---|---|
| country | 否 | 兩位字母國家代碼 |
回應
{"us":{"sixMonths":35.99,"twelveMonths":59.99}}購買專用號碼 action=getRentNumber
購買專用號碼一段時間。返回JSON格式。
| 參數 | 必填 | 描述 |
|---|---|---|
| country | 是 | 兩位字母國家代碼 |
| period | 是 | oneMonth、threeMonths、sixMonths、twelveMonths、twoYears 或 threeYears |
回應
{"status":"success","id":"N-3HV8QZ2K5M","phone":"14155550123","until":"2027-05-02T10:00:00.000Z"}BAD_PERIOD此國家不提供該期限服務。NO_BALANCE餘額不足。
讀取專用號碼SMS action=getRentStatus
該專用號碼至今接收的所有SMS。返回JSON格式。
| 參數 | 必填 | 描述 |
|---|---|---|
| id | 是 | 來自getRentNumber的id |
回應
{"status":"success","state":"active","messages":[{"code":"482913","text":"Your code is 482913","from":"Telegram","at":"..."}]}取消專用號碼 action=setRentStatus
status=2可在專用號碼未收到SMS且使用未滿20分鐘時取消並獲全額退款。
| 參數 | 必填 | 描述 |
|---|---|---|
| id | 是 | 來自getRentNumber的id |
| status | 是 | 2 |
回應
{"status":"success"}EARLY_CANCEL_DENIED已收到SMS或已過20分鐘。