SafeBrowz 检测 API
针对任何 URL 的网络钓鱼和钱包盗刷器检测。通过 x402 协议在 Solana 或 Base 上以 USDC 按请求付费--无需注册。大流量集成商可获取 Bearer 密钥和固定月度订阅。
新来的?阅读 x402 检测 API 深度解析。
即插即用的代理技能
正在构建 Claude Agent、ChatGPT Custom GPT、Cursor 规则或任何 LLM 驱动的应用?将我们的技能文件粘贴到代理规则中,它将知道何时以及如何调用 API。
OpenAPI 3.1 规范
机器可读端点规范。可与 ChatGPT Actions、Postman、Insomnia 或任何 SDK 生成器一起使用。
查看 openapi.json插件清单位于 /.well-known/ai-plugin.json
简单定价
每次请求
在 Solana 或 Base 主网上以 USDC 支付。无订阅,无承诺。缓存命中仍按相同费率计费--保持集成简单并覆盖基础设施成本。对于持续高并发的使用,我们会签发包含月度方案的 Bearer 密钥,并约定请求额度,价格按用量核定并适用我们的条款。额度以合同为准,并非无限量。
与扩展功能对等
SafeBrowz 浏览器扩展检测到的每个信号--凭证网络钓鱼、粘贴劫持、ClickFix、钱包盗刷器、品牌冒充以及另外 18 种--均由 API 返回。无仅限 URL 的捷径。
追踪品牌
覆盖钱包(MetaMask、Phantom、Ledger、Trezor)、交易所(Binance、Coinbase、OKX)、支付服务(PayPal、Venmo、Stripe)以及主要全球消费品牌。
面向钱包、交易所与智能体平台
要把它接入钱包、交易所或智能体平台吗?
在这种规模下,为每次调用做链上签名并不现实。企业账户会获得专属的长期 Bearer 密钥,完全跳过 x402 支付流程:发送 Authorization: Bearer <key>,请求即被直接处理,按月结算而非按次计费。
- 专属速率上限。每把密钥都有自己的配额,默认每分钟 10,000 次请求,可按需调高;公共调用方则是按 IP 共享的每分钟 60 次。
- 检测能力完全一致。企业密钥返回的判定对象与付费调用完全相同,没有精简版,也没有仅看网址的模式。
- 隐私源于设计。我们只收到你发送的网址,不接收页面内容、Cookie 或请求头。即便是用于开具账单的用量日志,网址也以截断的 SHA-256 哈希存储,绝不明文保存。
- 密钥由你掌控。原始密钥仅在创建时显示一次,系统只保存其哈希值;校验采用恒定时间比较;吊销立即生效,同时保留当期账单所需的记录。
- 失败方式清晰。无效、过期或已吊销的密钥会返回 401 invalid_api_key,而不会悄悄退回按次付费流程,部署出问题时可以立刻发现。
请求与响应的结构和付费流程完全一致,你可以先自行查阅再与我们联系:curl 快速开始、代码客户端,以及完整的端点参考。把支付请求头换成 Authorization: Bearer <key>,其余保持不变。
把你预计的调用量告诉我们:[email protected],我们会据此配置密钥并协助接入。先评估也完全没问题,我们可以先签发一把试用期密钥,让你用真实流量衡量效果再决定。
你要保护的是自家员工而不是终端用户?那应该是在团队中部署浏览器扩展,而不是这套 API。请看 SafeBrowz 企业版。
在浏览器中运行完整 x402 流程
连接任意钱包,粘贴 URL,点击测试。在 Solana 或 Base 上支付 0.01 USDC。支持任何 SPL 或 EVM 钱包。Solana 钱包需要少量 SOL 支付网络手续费。
在下方选择链--费用保持不变。
或者用 curl 在 30 秒内完成
每次请求都需要 x402 支付。第一次调用返回 402 并附带支付指示。完成支付后携带交易签名重试。
第一步 - 获取 402 nonce
curl -s -X POST https://api.safebrowz.com/v1/detect \
-H "Content-Type: application/json" \
-d '{"url":"https://app.trezor-io.us.com/"}'
响应(402)
从 payment 或 payment.alternatives 中选择任意选项。主条目为 Solana USDC;替代方案为 Base USDC。
{
"status": 402,
"error": "payment_required",
"payment": {
"amount": "0.01",
"token": "USDC",
"token_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"chain": "solana",
"recipient": "FLQyppmJYbvQvEPAB4Mv8ZGmxkSXmXUwMACeJ79kdozW",
"nonce": "ed548e77-719f-4f13-9f01-32dc8ed4e213",
"memo_format": "safebrowz:ed548e77-719f-4f13-9f01-32dc8ed4e213",
"alternatives": [
{ "token": "USDC", "amount": "0.01", "chain": "base", "chain_id": 8453,
"token_contract": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"recipient": "0xf3bc3a04646F1D721992AeDC07c98FC52FdFC358",
"nonce_binding": "eip191",
"sign_message": "safebrowz:ed548e77-719f-4f13-9f01-32dc8ed4e213" }
]
}
}
第二步(a)- 在 Solana 上支付
将 0.01 USDC 转账给收款方,并附上备注 safebrowz:<nonce>。任何 Solana 钱包或 spl-token CLI 均可使用。Nonce 在 10 分钟后过期。
spl-token transfer EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v 0.01 \
FLQyppmJYbvQvEPAB4Mv8ZGmxkSXmXUwMACeJ79kdozW \
--fund-recipient \
--with-memo "safebrowz:ed548e77-719f-4f13-9f01-32dc8ed4e213"
第二步(b)- 在 Base 上支付(EVM 钱包)
向收款方在 Base 上发送标准 USDC ERC-20 转账,然后对 nonce 消息进行链下签名。Base 缺少原生备注字段,因此 nonce 绑定使用对 safebrowz:<nonce> 的 EIP-191 personal_sign。签名必须能够恢复到付款钱包。
// viem / ethers pseudocode
const txHash = await wallet.writeContract({
address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC on Base
abi: erc20Abi, functionName: "transfer",
args: [ "0xf3bc3a04646F1D721992AeDC07c98FC52FdFC358", 10000n ], // 0.01 USDC (6 dec)
});
const walletSig = await wallet.signMessage({
message: "safebrowz:ed548e77-719f-4f13-9f01-32dc8ed4e213",
});
第三步 - 携带证明重试
对于 Solana,仅发送交易签名。对于 Base,还需发送 EIP-191 钱包签名并设置 X-402-Chain: base。
# Solana
curl -s -X POST https://api.safebrowz.com/v1/detect \
-H "Content-Type: application/json" \
-H "X-402-Signature: <your_tx_signature>" \
-H "X-402-Nonce: ed548e77-719f-4f13-9f01-32dc8ed4e213" \
-d '{"url":"https://app.trezor-io.us.com/"}'
# Base
curl -s -X POST https://api.safebrowz.com/v1/detect \
-H "Content-Type: application/json" \
-H "X-402-Chain: base" \
-H "X-402-Signature: <tx_hash>" \
-H "X-402-Wallet-Sig: <eip191_signature>" \
-H "X-402-Nonce: ed548e77-719f-4f13-9f01-32dc8ed4e213" \
-d '{"url":"https://app.trezor-io.us.com/"}'
响应(200)
{
"verdict": "danger",
"trust_score": 5,
"brand": "Ledger",
"confidence": 0.95,
"reason": "Fake Ledger Live login page - potential phishing and crypto scam",
"threat_types": ["brand_impersonation", "crypto_scam", "credential_phishing"],
"signals": {
"brand_impersonation": true,
"credential_phishing": true,
"crypto_scam": true,
"no_contact_info": true,
"domain_mismatch": true,
"wallet_drainer": false,
"seed_phrase_phishing": false,
"fake_captcha": false,
"pastejacking": false,
"tech_support_scam": false
// ...remaining signals (all booleans) omitted for brevity
},
"details": {
"matched_brand": "Ledger",
"official_domain": "ledger.com",
"domain_matches_brand": false,
"target_country": "Global",
"page_language": "English"
}
}
trust_score 是一个简单的 0-100 可信度评分(100 = 安全,0 = 诈骗)。
confidence 是我们对判定本身的确定程度--对于 danger 判定,
0.95 表示"我们 95% 确信这是诈骗",而非"95% 虚假"。
完整编程客户端
复制粘贴其中一个,接入钱包,即可完成。每个示例端到端处理完整的 x402 流程:初始调用、解析 402 挑战、链上支付、携带 X-PAYMENT 请求头重试。混合使用不同语言--无论哪个客户端调用,API 都是相同的。
TypeScript + viem(Base)
约 45 行客户端,覆盖 Base 主网上的完整往返。使用 viem 进行 USDC 转账 + EIP-191 nonce 签名。
import { createWalletClient, http, parseUnits, erc20Abi } from "viem";
import { base } from "viem/chains";
import { privateKeyToAccount } from "viem/accounts";
const USDC_BASE = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
const URL = "https://api.safebrowz.com/v1/detect";
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const wallet = createWalletClient({ account, chain: base, transport: http() });
export async function detect(target: string) {
// 1. First call - expect 402
const first = await fetch(URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ url: target }),
});
if (first.status !== 402) return first.json();
const challenge = await first.json();
const baseEntry = challenge.accepts.find((a: any) => a.network === "base");
// 2. Pay USDC onchain to the configured receiver
const txHash = await wallet.writeContract({
address: USDC_BASE, abi: erc20Abi, functionName: "transfer",
args: [baseEntry.payTo, parseUnits("0.01", 6)],
});
// 3. Sign the off-chain nonce binding (EIP-191 personal_sign)
const walletSig = await wallet.signMessage({
message: baseEntry.extra.sign_message_template,
});
// 4. Retry with the spec-compliant X-PAYMENT header
const xPayment = Buffer.from(JSON.stringify({
x402Version: 1, scheme: "exact", network: "base",
payload: {
txHash, walletSig,
nonce: baseEntry.extra.sign_message_template.split(":")[1],
},
})).toString("base64");
const verdict = await fetch(URL, {
method: "POST",
headers: { "Content-Type": "application/json", "X-PAYMENT": xPayment },
body: JSON.stringify({ url: target }),
});
return verdict.json();
}
Python + solana-py(Solana)
Solana 上的相同流程。使用 solders 进行密钥对 + 交易构建,以及 SPL-memo 指令进行 nonce 绑定。
import base64, json, httpx, os
from solana.rpc.api import Client
from solders.keypair import Keypair
from solders.pubkey import Pubkey
USDC_MINT = Pubkey.from_string("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v")
rpc = Client("https://api.mainnet-beta.solana.com")
kp = Keypair.from_base58_string(os.environ["SOLANA_SECRET"])
def detect(target: str) -> dict:
# 1. Challenge
r = httpx.post("https://api.safebrowz.com/v1/detect",
json={"url": target})
if r.status_code != 402:
return r.json()
sol_entry = next(a for a in r.json()["accepts"] if a["network"] == "solana")
# 2. Build USDC transferChecked + spl-memo binding the nonce
memo = sol_entry["extra"]["memo_template"] # "safebrowz:<nonce>"
tx = build_usdc_transfer_with_memo(
payer=kp.pubkey(),
receiver=Pubkey.from_string(sol_entry["payTo"]),
amount_atomic=int(sol_entry["maxAmountRequired"]),
memo_text=memo,
)
tx.sign([kp], rpc.get_latest_blockhash().value.blockhash)
tx_sig = rpc.send_transaction(tx).value
# 3. Retry with X-PAYMENT
x_payment = base64.b64encode(json.dumps({
"x402Version": 1, "scheme": "exact", "network": "solana",
"payload": {"txSignature": str(tx_sig), "nonce": memo.split(":")[1]},
}).encode()).decode()
return httpx.post(
"https://api.safebrowz.com/v1/detect",
headers={"X-PAYMENT": x_payment},
json={"url": target},
).json()
零配置 - agentcash CLI
如果您不想自行实现支付流程,agentcash 已集成完整的 x402 流程。它检测 402、签署并广播支付、携带符合规范的请求头重试,并打印判定结果。仅需一行:
npx agentcash fetch https://api.safebrowz.com/v1/detect \
--body '{"url":"https://trezor-support.com"}' \
--network solana
同时支持 --network solana 和 --network eip155:8453。使用 agentcash 管理的钱包--充值 USDC 即可使用。
代理框架 - Claude、GPT、LangChain、MCP
所有主要代理框架均可加载我们发布的技能文件,无需任何手动集成代码即可将检测 API 用作工具:
# Claude Code / Claude Desktop
# - Save /safebrowz-api.skill.md locally
# - Add to your ~/.claude/skills/ directory
# - Claude loads it automatically
# MCP server config (Claude Desktop, etc.)
# - Point at the OpenAPI spec: https://api.safebrowz.com/v1/openapi.json
# - MCP auto-generates a detect() tool
# LangChain
from langchain.tools import OpenAPIToolkit
from langchain.utilities.openapi import OpenAPISpec
spec = OpenAPISpec.from_url("https://api.safebrowz.com/v1/openapi.json")
toolkit = OpenAPIToolkit.from_llm_and_spec(llm, spec)
企业级 Bearer 认证(绕过 x402)
拥有数百万终端用户的钱包应用和 AI 平台等大流量集成商可申请长期有效的 Bearer 密钥。无需逐次调用签名;将密钥作为 Authorization 请求头传递,即可立即获得正常的 200 响应。按月以固定 USDC 订阅计费。
curl -X POST https://api.safebrowz.com/v1/detect \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-d '{"url":"https://example.com"}'
发送邮件至 [email protected],说明预期用量(请求数/分钟 + 月度总量)以申请密钥。典型等级为每分钟 10,000 至 100,000 次请求,按密钥限速,确保您的吞吐量与其他企业客户隔离。
端点
返回 URL 的诈骗/网络钓鱼判定结果。需要 x402 支付。
请求体
{"url": "https://example.com"}
响应(200)
| 字段 | 类型 | 说明 |
|---|---|---|
verdict | string | safe(安全)/ caution(谨慎)/ danger(危险) |
trust_score | integer | 0-100 信任评分(100 = 安全,0 = 诈骗) |
brand | string / null | 检测到的被冒充品牌(例如 "Ledger"、"Trezor"、"PayPal") |
confidence | number | 0.0-1.0。我们对判定的确定程度。不是"虚假百分比"。 |
reason | string | 人类可读的解释 |
threat_types | string[] | 顶级类别:wallet_drainer、seed_phrase_phishing、brand_impersonation、crypto_scam、crypto_airdrop_scam、credential_phishing、account_phishing、delivery_scam、government_impersonation、invoice_scam、tech_support_scam、fake_captcha、pastejacking |
signals | object | 全部 22 个布尔标志(包括 domain_mismatch、no_contact_info、fake_urgency、too_good_prices、suspicious_payment 等) |
details | object | matched_brand、official_domain、domain_matches_brand、target_country、page_language、tld、domain_age_days、matched_patterns |
健康检查。无需支付。
{"status": "ok", "version": "1.0.0", "chain": "solana"}
错误
| 状态码 | 错误 | 含义 |
|---|---|---|
| 400 | missing_url | 请求体未包含 url 字段。 |
| 400 | invalid_url | URL 格式不正确、过长,或指向私有 IP。 |
| 402 | payment_required | 未提供支付请求头。响应体包含所有支持链的支付指示。 |
| 402 | payment_invalid | 已提供支付请求头但验证失败。获取新 nonce 并重试。响应体重新发出完整支付指示。 |
| 409 | nonce_already_used | 此 nonce 已被使用。使用新的 402 nonce 重试。 |
| 429 | rate_limited | 每分钟请求次数过多。退避后重试。 |
常见问题
有检测诈骗或钓鱼网址的 API 吗?
有。将任意网址发送到 POST /v1/detect,SafeBrowz 即返回判定结果(safe、caution 或 danger)、被冒充的品牌(如有)、信任评分和 22 项威胁信号,通常在 50 到 150 毫秒内。它使用与 SafeBrowz 浏览器扩展相同的三层引擎(本地规则、威胁 API 和 AI 页面分析)。
检测 API 的费用是多少?
两种选择。通过 x402 按次付费,每次请求 0.01 美元(USDC,Solana 或 Base,无需注册);或采用月度方案,含 Bearer 密钥与约定的请求额度,按月计费。月度价格按你的预计用量报价,而非固定售价,因为每月核查数百万网址的短网址服务与核查数千条的小团队并不是同一种产品。额度以合同为准,并非无限量:持续超出将重新报价,且所有使用均适用我们的条款。
可以用在短网址、交易市场或聊天应用里吗?
可以。在缩短链接、发布商品或投递消息之前调用 API,然后对 danger 拦截、对 caution 暂缓、对 safe 放行。固定月费的 Bearer 套餐正是为这类持续、服务端、高并发的使用而设计。
为什么使用 x402 而不是 API 密钥?
对于公共端点,x402 意味着无需注册表单、无速率分级、无账单邮件、无支持工单。您支付 0.01 USDC 即可获得结果。无需建立关系。对于为数百万用户提供代理服务的钱包应用和 AI 平台,我们按需提供企业级 Bearer 密钥(见下方企业定价常见问题)。
延迟是多少?
缓存判定在 50-150 毫秒内返回。URL 模式匹配类似。需要页面抓取 + AI 扫描的新 URL 端到端通常需要 2-4 秒。无论扫描深度如何,针对 Solana 或 Base RPC 的支付验证额外增加约 300-500 毫秒。
这与浏览器扩展相比如何?
扩展检测到的每个信号--credential_phishing、pastejacking、fake_captcha(ClickFix)、wallet_drainer、no_contact_info、fake_urgency 以及另外 17 种--均由此 API 返回。底层检测管道共享:缓存、URL 规则,然后在缓存未命中时进行完整 AI 页面扫描。您获得相同的 trust_score、相同的 brand 识别、相同的 signals 对象。
可以申请退款吗?
不支持退款。支付在设计上不可逆(链上结算)。如果 API 返回 5xx 服务器错误,使用相同 nonce 重试--我们不会在服务器端故障时消耗 nonce。
是否提供企业/固定费率定价?
提供。我们为钱包应用、AI 代理平台以及其他逐次调用链上签名不切实际的大流量集成商提供长期有效的 Bearer API 密钥。每个密钥有独立的速率限制(通常为每分钟 10,000 至 100,000 次请求),按月以 USDC 计费。通过 Authorization: Bearer sk_live_... 传递即可跳过 x402 流程。发送邮件至 [email protected] 说明预期用量,我们将为您开通。
您会看到哪些数据?
仅限您发送的 URL。我们不记录页面内容、Cookie、请求头或用户标识符。链上交易签名(Solana 或 Base)会被存储用于防重放保护和收入核算。
准备好集成了吗?
无需填写任何表单。将任意 Solana 或 EVM 钱包指向 api.safebrowz.com/v1/detect,即可开始扫描。