开发者 API
短信验证 直接接入您的代码
一次 HTTPS 调用,即可为您的机器人或平台获取用于 WhatsApp、Telegram 等众多服务的真实号码。通过 Webhook 或长轮询接收验证码,只为收到验证码的号码付费。
- 1,321项服务
- 145个国家
- US$0.10单个号码最低价
- 自动未收到验证码即退款
curl
curl -s -X POST https://smsgrab.com/api/dev/v1/activations \
-H "Authorization: Bearer $SMSGRAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"service":"whatsapp","country":"indonesia"}'
Python
activation = requests.post(
"https://smsgrab.com/api/dev/v1/activations",
headers={"Authorization": f"Bearer {key}"},
json={"service": "whatsapp", "country": "indonesia"},
).json()
Node.js
const activation = await fetch('https://smsgrab.com/api/dev/v1/activations', {
method: 'POST',
headers: { Authorization: `Bearer ${key}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ service: 'whatsapp', country: 'indonesia' }),
}).then((response) => response.json());
PHP
$activation = json_decode((string) $client->post('activations', [
'json' => ['service' => 'whatsapp', 'country' => 'indonesia'],
])->getBody(), true);
Go
order := map[string]any{"service": "whatsapp", "country": "indonesia"}
err := call("POST", "/activations", order, idempotencyKey(), &activation)
{
"id": "5c1d0c2e-9f3a-4b7e-8a61-2f0c9d4e7b10",
"compat_id": 100000123,
"status": "WAITING_SMS",
"service_id": "whatsapp",
"country_id": "indonesia",
"phone_number": "+6281234567890",
"price_minor": 18,
"currency": "USD",
"expires_at": "2026-09-27T10:25:00.000Z",
"sms": []
}
为自动化而生
集成所需的一切,号码库存、账务和退款与应用完全一致。
-
简洁的 REST API
可预期的 JSON、幂等购买,以及可据此处理的清晰错误原因。
-
签名 Webhook
每次收到验证码或状态变化都会推送 HMAC 签名事件,并在 24 小时内重试。
-
长轮询
请求最长可保持 30 秒,验证码一到即刻返回。
-
兼容 sms-activate
把现有工具指向我们的接口即可,操作和响应保持不变。
-
由您掌控的密钥
只读或可购买密钥、IP 白名单、每日上限、有效期,以及不停机轮换。
-
自动退款
号码到期前未收到验证码?款项立即退回您的余额。
-
用量与请求日志
按密钥查看每日请求、支出和错误,并提供可筛选的近 7 天日志。
-
阶梯用量价格
基于批发价,月用量越大价格越低,自动生效。
用得越多,价格越低
开发者价格以每个号码的批发成本为基础,再加上随 30 天用量递减的加价。
- 绝不高于应用内同一号码的价格
- 每个号码至少 US$0.10
- 未收到验证码的号码自动退款
- 达到等级后几分钟内生效
- 以美元从与应用相同的余额中扣款
迁移
改一行代码即可从 sms-activate 迁移
我们的兼容接口使用相同协议,为 sms-activate 开发的机器人和面板只需更换基础 URL 和密钥即可运行。
https://smsgrab.com/api/stubs/handler_api.php
- getNumber、getStatus、setStatus、getPrices 及其他标准操作
- 沿用您现有的数字激活 ID、服务代码和国家 ID
- 与 REST API 相同的密钥、限制、价格、退款和 Webhook
curl
BASE="https://smsgrab.com/api/stubs/handler_api.php?api_key=$SMSGRAB_API_KEY"
curl -s "$BASE&action=getBalance"
curl -s "$BASE&action=getNumber&service=tg&country=6"
curl -s "$BASE&action=getStatus&id=100000123"
curl -s "$BASE&action=setStatus&id=100000123&status=6"
Python
import os
import requests
BASE = "https://smsgrab.com/api/stubs/handler_api.php"
KEY = os.environ["SMSGRAB_API_KEY"]
def action(name: str, **params) -> str:
response = requests.get(BASE, params={"api_key": KEY, "action": name, **params}, timeout=30)
response.raise_for_status()
return response.text
print(action("getBalance"))
answer = action("getNumber", service="tg", country=6)
if answer.startswith("ACCESS_NUMBER:"):
_, activation_id, number = answer.split(":")
print(activation_id, number)
开发者常见问题
开发者 API 如何收费?
无需订阅。每个号码按批发价加 80% 加价计费;当您 30 天的开发者支出超过 100、500 和 2000 美元时,加价分别降至 70%、60% 和 50%。单个号码不低于 0.10 美元,也不会高于应用内价格。
收不到验证码怎么办?
号码有效期为 20 分钟。若期间未收到验证码,或您在等待中取消号码,款项会自动退回余额。
能继续使用我的 sms-activate 集成吗?
可以。把基础 URL 改为我们的兼容接口并使用 SmsGrab 密钥即可,标准操作、响应和数字 ID 均保持不变。
频率限制是多少?
默认情况下,每个密钥每分钟可发起 600 次请求和 60 次购买,账户下所有密钥合计每分钟 3000 次请求,最多 100 个号码可同时等待验证码。
如何保护我的密钥?
只在服务器上保存密钥,为每个应用单独创建密钥,限制为服务器地址并设置每日消费上限。如密钥可能泄露,请在账户中轮换或吊销。
应用和 API 共用余额吗?
是的。API 使用您的 SmsGrab 账户余额,每笔购买和退款都会像其他交易一样显示在钱包中。
更多解答请访问 帮助中心