跳至主要内容
100+
国家
1000+ 项服务。加密货币支付,无需 KYC。
购买号码

短信验证 API — SMSNoKYC

端到端地自动完成 OTP 验证。在 190 多个国家预订虚拟号码,几秒内读取短信验证码,租用长期专属线路,并通过单一 REST 界面掌控每一笔订单——无需 API 密钥、无需 KYC,用加密货币付款。

阅读时间:5 分钟 REST · JSON · OpenAPI 3.0 OpenAPI 规范 →

需要身份验证。 每个请求都依托一个会话 cookie,因此你必须已登录你的 SMSNoKYC 账户。调用前,请通过网页界面或身份验证端点建立一个会话。

开发者选择SMSNoKYC API的原因

SMSNoKYC是最灵活的短信验证API,专为需要匿名性、全球覆盖和可预测定价的开发者而设计。与那些需要企业合同、月度最低消费和KYC问卷才能访问的传统SMS-OTP服务商不同,SMSNoKYC兼容任意HTTPS客户端,严格按号码计费,并支持20+种加密货币,包括Bitcoin、Monero、Ethereum、USDT、USDC、Solana、Litecoin、XRP、TRON和Toncoin。

典型使用场景包括:为大规模QA自动化账号注册、为无界面代理和CI机器人获取一次性密码、在持续集成中验证需要手机号的流程、为需要不间断接收短信的Telegram或WhatsApp账号租用专属长期号码,以及通过明确的运营商层级控制(虚拟、实体或高级)在190+个国家实现地理分布式验证。

身份验证

API 使用基于 cookie 的会话身份验证。要以编程方式进行身份验证:

  1. 发送 POST 请求到 /auth-api.php,附上您的 seed 短语
  2. 保存响应中的会话 cookie
  3. 在所有后续 API 请求中包含该 cookie
POST /auth-api.php

使用您的 seed 短语进行身份验证并建立会话。

参数类型必需描述
actionstring必填必须为 "login"
seedstring必填您的 16 字符访问 seed(例如 AbC3-dEf4-gHj5-kLm6
cURL
Python
JavaScript
# Login and save session cookie curl -X POST https://smsnokyc.com/auth-api.php \ -d "action=login&seed=AbC3-dEf4-gHj5-kLm6" \ -c cookies.txt
import requests session = requests.Session() resp = session.post("https://smsnokyc.com/auth-api.php", data={ "action": "login", "seed": "AbC3-dEf4-gHj5-kLm6" }) data = resp.json() print(data) # {"success": true, "user": {...}} # session object now holds the cookie for all future requests
const resp = await fetch("https://smsnokyc.com/auth-api.php", { method: "POST", credentials: "include", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: "action=login&seed=AbC3-dEf4-gHj5-kLm6" }); const data = await resp.json(); console.log(data); // {success: true, user: {...}}
成功响应
{ "success": true, "user": { "id": 42, "prefix": "AbC3", "balance": "74.50" } }
错误响应
{ "success": false, "error": "Invalid seed." }

基础 URL

所有 API 端点相对于:

https://smsnokyc.com/api.php?action={action}

所有响应均为 JSON 格式。POST 端点接受 application/jsonapplication/x-www-form-urlencoded 请求体。

速率限制

API 执行以下速率限制:

端点限制时间窗口
身份验证5 次尝试15 分钟
所有其他端点无硬性限制

频率限制:身份验证限制为每 15 分钟 5 次尝试。其他端点目前没有频率限制,但过度使用可能会被限流。请使用合理的请求间隔。

错误处理

所有错误返回一个包含 <code>error</code> 字段的 JSON 对象:

{ "error": "Description of what went wrong" }
HTTP 状态码含义
200成功(请检查响应体中的应用级错误)
403无效的 CSRF 令牌
405错误的 HTTP 方法(例如在仅限 POST 的端点使用 GET)
429超出频率限制

常见的应用级错误:

错误原因
"Login required"会话已过期或未认证
"Insufficient balance"资金不足 — 包含 needhave 字段
"Service not available for this country"所选国家无库存或服务未激活
"Missing country or service"未提供必需参数

获取国家列表

GET /api.php?action=countries

返回所有拥有可用虚拟号码的活跃国家。无需身份验证。

cURL
Python
JavaScript
curl https://smsnokyc.com/api.php?action=countries
resp = session.get("https://smsnokyc.com/api.php", params={"action": "countries"}) countries = resp.json() for c in countries: print(c["code"], c["name"])
const resp = await fetch("https://smsnokyc.com/api.php?action=countries"); const countries = await resp.json();
响应
[ { "id": 1, "code": "us", "name": "USA" }, { "id": 2, "code": "gb", "name": "UK" }, { "id": 3, "code": "de", "name": "Germany" } ]

获取服务列表

GET /api.php?action=services&country={code}

返回特定国家的可用服务,包括价格和库存。不指定国家代码时,返回所有服务但不含价格。

参数类型必需描述
countrystring可选ISO 3166-1 alpha-2 国家代码(例如 usgbde
响应(含国家)
[ { "id": 12, "name": "WhatsApp", "slug": "whatsapp", "icon_code": "WA", "icon_color": "#25d366", "category": "social", "price": "0.35", "stock": 847 } ]

获取运营商列表

GET /api.php?action=operators&country={code}

返回特定国家的可用运营商。每个运营商有一个类型和应用于基础服务价格的价格倍率。

参数类型必需描述
countrystring必填ISO 3166-1 alpha-2 国家代码
响应
[ { "id": 5, "name": "T-Mobile", "type": "physical", "price_multiplier": "1.50", "icon_slug": "tmobile", "icon_domain": "t-mobile.com" } ]

运营商类型:virtual — VoIP 号码,最便宜,可能被某些服务屏蔽。physical — 实体 SIM 卡,成功率更高。premium — 最快交付(约 10 秒),成功率最高。

购买号码(SMS激活)

POST /api.php?action=buy

购买虚拟号码用于一次性短信验证。号码有效期为 20 分钟。如果未收到短信,您的余额将自动退还。

参数类型必需描述
countrystring必填国家代码(例如 us
service_idinteger必填来自服务列表的服务 ID
operator_idinteger可选来自运营商列表的运营商 ID。留空使用默认运营商。
cURL
Python
JavaScript
curl -X POST https://smsnokyc.com/api.php?action=buy \ -b cookies.txt \ -H "Content-Type: application/json" \ -d '{"country":"us","service_id":12,"operator_id":5}'
resp = session.post("https://smsnokyc.com/api.php?action=buy", json={ "country": "us", "service_id": 12, "operator_id": 5 }) order = resp.json() print(f"Order #{order['order_id']} — ${order['price']}")
const resp = await fetch("https://smsnokyc.com/api.php?action=buy", { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ country: "us", service_id: 12, operator_id: 5 }) }); const order = await resp.json();
成功响应
{ "success": true, "order_id": 1847, "price": 0.53, "balance": "73.97" }
错误:余额不足
{ "error": "Insufficient balance", "need": 0.53, "have": "0.10" }

列出订单

GET /api.php?action=orders

返回您最近的 50 个订单,包括电话号码和短信验证码。轮询此端点以检查活跃订单的短信验证码。

响应
[ { "id": 1847, "price": "0.53", "status": "completed", "phone_number": "+12025551234", "sms_code": "847293", "created_at": "2026-04-09 14:32:00", "country_code": "us", "country_name": "USA", "service_name": "WhatsApp", "operator_name": "T-Mobile" } ]

订单状态:active — 等待短信。completed — 已收到短信。cancelled — 用户已取消。refunded — 自动退款(超时前未收到短信)。expired — 已过期。

获取租赁价格

GET /api.php?action=rental_price&country={code}&operator_id={id}&duration={days}

获取从特定运营商租用专用号码的价格和租期。

参数类型必需描述
countrystring必填国家代码
operator_idinteger必填运营商 ID
durationinteger必填租用天数:7143090
响应
{ "price": "12.50", "duration": 30, "operator": "T-Mobile", "type": "physical", "country": "USA" }

租赁号码

POST /api.php?action=rental_buy

租用一个或多个专用电话号码。该号码在整个租用期间专属于您,并可接收无限量的短信。

参数类型必需描述
countrystring必填国家代码
operator_idinteger必填运营商 ID
durationinteger必填7143090
qtyinteger可选要租用的号码数量(1–10,默认:1)
成功响应
{ "success": true, "order_ids": [1848, 1849], "total": 25.00, "qty": 2, "unit_price": 12.50, "duration": 30, "balance": "49.50" }

获取用户信息

GET /api.php?action=user

返回当前用户的账户信息和余额。用于检查身份验证状态和可用资金。

已认证
{ "logged_in": true, "id": 42, "prefix": "AbC3", "balance": "74.50" }
未认证
{ "logged_in": false }

完整工作流程示例

以下是一个完整的 Python 示例,演示身份验证、查找服务、购买号码并轮询SMS验证码:

Python
import requests, time BASE = "https://smsnokyc.com" SEED = "AbC3-dEf4-gHj5-kLm6" s = requests.Session() # 1. Authenticate s.post(f"{BASE}/auth-api.php", data={"action": "login", "seed": SEED}) # 2. Check balance user = s.get(f"{BASE}/api.php?action=user").json() print(f"Balance: ${user['balance']}") # 3. Get services for USA services = s.get(f"{BASE}/api.php?action=services&country=us").json() whatsapp = next(svc for svc in services if svc["name"] == "WhatsApp") print(f"WhatsApp: ${whatsapp['price']} ({whatsapp['stock']} in stock)") # 4. Buy a number order = s.post(f"{BASE}/api.php?action=buy", json={ "country": "us", "service_id": whatsapp["id"] }).json() print(f"Order #{order['order_id']} created") # 5. Poll for SMS code for _ in range(60): orders = s.get(f"{BASE}/api.php?action=orders").json() my_order = next(o for o in orders if o["id"] == order["order_id"]) if my_order["sms_code"]: print(f"SMS code: {my_order['sms_code']}") print(f"Phone: {my_order['phone_number']}") break print("Waiting for SMS...") time.sleep(5) else: print("Timeout — balance will be refunded automatically")

常见问题

SMSNoKYC 的验证 API 有什么用?

它把与站点相同的目录开放给你自己的代码:190 多个国家的虚拟号码,用于一次性 OTP 验证以及 7 至 90 天的租用。通过一个简单的 JSON REST 接口,你可以浏览应用、读取实时价格、预订号码、取回收到的验证码,并为失败的激活退款——无需 KYC,仅以加密货币计费。

需要 API 密钥或 OAuth 令牌吗?

不需要。身份验证是一个会话 cookie:把你 16 个字符的访问口令用 POST 发送到 /auth-api.php 一次,随后在每个后续调用中带上返回的 cookie。没有任何东西需要预置、轮换或吊销——每个会话登录一次,并在 cookie 存续期间保持登录。

API 要多少钱?

调用 API 是免费的——没有月费、没有订阅、没有最低用量。你只按号码付费:一次性激活自 0.05 美元起,专属租用自 7 天几美元起。一切都从你的预付余额中扣除,而任何始终未收到短信的激活都会自动退款。

哪些语言和框架可以调用它?

任何能发出 HTTPS 请求的东西都行——Python(requests、httpx)、Node.js(fetch、axios)、Go、PHP、Ruby、Java、C#、来自 Bash 的 cURL,以及其余。文档附有可直接复制的 cURL、Python 和 JavaScript 示例,而 /openapi.json 上一份完整的 OpenAPI 3.0 文件让你能用所选语言生成带类型的客户端。

如果验证码始终没有到达会怎样?

每次激活都有 20 分钟的窗口。若在窗口关闭前什么都没到,订单会自动取消,全额价格退回余额——无需工单,也无需手动重试。退回的余额你可以立即用于另一个号码,或许在另一运营商类别(虚拟、实体或高级)上,以求更好的成功率。

API 有速率限制吗?

为阻止口令猜测,登录被限制为每个 IP 每 15 分钟 5 次尝试。其余部分——目录、购买、订单、租用——目前没有硬性上限,但请保持合理间隔:每 3 至 5 秒查询一次 /api.php?action=orders 已绰绰有余,足以读取短信,而持续高于约每秒 10 次请求的突发流量可能在 WAF 层被限流。