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尚未收到簡訊。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餘額不足。
讀取專屬號碼簡訊 action=getRentStatus
該專屬號碼迄今接收的所有簡訊。返回JSON格式資料。
| 參數 | 必填 | 說明 |
|---|---|---|
| id | 是 | 來自getRentNumber的id |
回應
{"status":"success","state":"active","messages":[{"code":"482913","text":"Your code is 482913","from":"Telegram","at":"..."}]}取消專屬號碼 action=setRentStatus
status=2可在專屬號碼未收到簡訊且啟用未滿20分鐘時取消並全額退款。
| 參數 | 必填 | 說明 |
|---|---|---|
| id | 是 | 來自getRentNumber的id |
| status | 是 | 2 |
回應
{"status":"success"}EARLY_CANCEL_DENIED已收到簡訊或已超過20分鐘。