// 开发者 API

SafeBrowz 检测 API

针对任何 URL 的网络钓鱼和钱包盗刷器检测。通过 x402 协议在 Solana 或 Base 上以 USDC 按请求付费——无需注册。大流量集成商可获取 Bearer 密钥和固定月度订阅。

// 适用于 AI 代理

即插即用的代理技能

正在构建 Claude Agent、ChatGPT Custom GPT、Cursor 规则或任何 LLM 驱动的应用?将我们的技能文件粘贴到代理规则中,它将知道何时以及如何调用 API。

/skill

代理技能(markdown)

完整的技能定义,包含触发器、支付流程、信号解释、代码示例。可直接粘贴到任何代理框架中。

下载 skill.md
/openapi

OpenAPI 3.1 规范

机器可读端点规范。可与 ChatGPT Actions、Postman、Insomnia 或任何 SDK 生成器一起使用。

查看 openapi.json
/llms

LLM 友好文档

针对 AI 爬虫和代理上下文窗口优化的完整纯文本参考。包含引用指南。

查看 api-llms.txt

插件清单位于 /.well-known/ai-plugin.json

// 定价

单一价格,无分级。

$0.001

每次请求

Solana 或 Base 主网上以 USDC 支付。无订阅,无承诺。缓存命中仍按相同费率计费——保持集成简单并覆盖基础设施成本。

完整扫描

与扩展功能对等

SafeBrowz 浏览器扩展检测到的每个信号——凭证网络钓鱼、粘贴劫持、ClickFix、钱包盗刷器、品牌冒充以及另外 18 种——均由 API 返回。无仅限 URL 的捷径。

500+

追踪品牌

覆盖钱包(MetaMask、Phantom、Ledger、Trezor)、交易所(Binance、Coinbase、OKX)、支付服务(PayPal、Venmo、Stripe)以及主要全球消费品牌。

// 实时体验

在浏览器中运行完整 x402 流程

连接任意钱包,粘贴 URL,点击测试。在 Solana 或 Base 上支付 0.001 USDC,或以 0.00001 SOL 作为 Solana 原生替代方案。支持任何 SPL 或 EVM 钱包。

在下方选择链——费用保持不变。

Solana 上需要少量 SOL,或 Base 上需要 USDC + 用于 gas 的 ETH。不支持退款——支付已上链。

// 快速开始

或者用 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)

paymentpayment.alternatives 中选择任意选项。主条目为 Solana USDC;替代方案包括 Solana SOL 和 Base USDC。

{
  "status": 402,
  "error": "payment_required",
  "payment": {
    "amount": "0.001",
    "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": "SOL",  "amount": "0.00001", "chain": "solana", "nonce_binding": "memo",   "memo_format": "safebrowz:..." },
      { "token": "USDC", "amount": "0.001",   "chain": "base",   "chain_id": 8453,
        "token_contract": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "recipient": "0xf3bc3a04646F1D721992AeDC07c98FC52FdFC358",
        "nonce_binding": "eip191",
        "sign_message": "safebrowz:ed548e77-719f-4f13-9f01-32dc8ed4e213" }
    ]
  }
}

第二步(a)— 在 Solana 上支付

0.001 USDC(或 0.00001 SOL)转账给收款方,并附上备注 safebrowz:<nonce>。任何 Solana 钱包或 spl-token CLI 均可使用。Nonce 在 10 分钟后过期。

spl-token transfer EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v 0.001 \
  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", 1000n ], // 0.001 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.001", 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"}'

发送邮件至 info@safebrowz.com,说明预期用量(请求数/分钟 + 月度总量)以申请密钥。典型等级为每分钟 10,000 至 100,000 次请求,按密钥限速,确保您的吞吐量与其他企业客户隔离。

// 参考

端点

POST/v1/detect

返回 URL 的诈骗/网络钓鱼判定结果。需要 x402 支付。

请求体

{"url": "https://example.com"}

响应(200)

字段类型说明
verdictstringsafe(安全)/ caution(谨慎)/ danger(危险)
trust_scoreinteger0-100 信任评分(100 = 安全,0 = 诈骗)
brandstring / null检测到的被冒充品牌(例如 "Ledger"、"Trezor"、"PayPal")
confidencenumber0.0-1.0。我们对判定的确定程度。不是"虚假百分比"。
reasonstring人类可读的解释
threat_typesstring[]顶级类别:wallet_drainerseed_phrase_phishingbrand_impersonationcrypto_scamcrypto_airdrop_scamcredential_phishingaccount_phishingdelivery_scamgovernment_impersonationinvoice_scamtech_support_scamfake_captchapastejacking
signalsobject全部 22 个布尔标志(包括 domain_mismatchno_contact_infofake_urgencytoo_good_pricessuspicious_payment 等)
detailsobjectmatched_brandofficial_domaindomain_matches_brandtarget_countrypage_languagetlddomain_age_daysmatched_patterns
GET/v1/status

健康检查。无需支付。

{"status": "ok", "version": "1.0.0", "chain": "solana"}
// 错误代码

错误

状态码错误含义
400missing_url请求体未包含 url 字段。
400invalid_urlURL 格式不正确、过长,或指向私有 IP。
402payment_required未提供支付请求头。响应体包含所有支持链的支付指示。
402payment_invalid已提供支付请求头但验证失败。获取新 nonce 并重试。响应体重新发出完整支付指示。
409nonce_already_used此 nonce 已被使用。使用新的 402 nonce 重试。
429rate_limited每分钟请求次数过多。退避后重试。
// 常见问题

常见问题

为什么使用 x402 而不是 API 密钥?

对于公共端点,x402 意味着无需注册表单、无速率分级、无账单邮件、无支持工单。您支付 0.001 USDC 即可获得结果。无需建立关系。对于为数百万用户提供代理服务的钱包应用和 AI 平台,我们按需提供企业级 Bearer 密钥(见下方企业定价常见问题)。

延迟是多少?

缓存判定在 50-150 毫秒内返回。URL 模式匹配类似。需要页面抓取 + AI 扫描的新 URL 端到端通常需要 2-4 秒。无论扫描深度如何,针对 Solana 或 Base RPC 的支付验证额外增加约 300-500 毫秒。

这与浏览器扩展相比如何?

扩展检测到的每个信号——credential_phishingpastejackingfake_captcha(ClickFix)、wallet_drainerno_contact_infofake_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 流程。发送邮件至 info@safebrowz.com 说明预期用量,我们将为您开通。

您会看到哪些数据?

仅限您发送的 URL。我们不记录页面内容、Cookie、请求头或用户标识符。链上交易签名(Solana 或 Base)会被存储用于防重放保护和收入核算。

准备好集成了吗?

无需填写任何表单。将任意 Solana 或 EVM 钱包指向 api.safebrowz.com/v1/detect,即可开始扫描。