// API PARA DESARROLLADORES

SafeBrowz Detection API

Detección de phishing y drenadores de billeteras para cualquier URL. Paga por solicitud con USDC en Solana o Base vía x402 — sin registro requerido. Los integradores de alto volumen obtienen una clave Bearer y una suscripción mensual fija.

// PARA AGENTES DE IA

Skill de agente lista para usar

¿Construyendo un Claude Agent, ChatGPT Custom GPT, regla de Cursor, o cualquier app impulsada por LLM? Pega nuestro archivo de skill en las reglas de tu agente y sabrá cuándo y cómo llamar a la API.

/skill

Skill de agente (markdown)

Definición completa de skill con disparadores, flujo de pago, interpretación de señales y ejemplos de código. Lista para pegar en cualquier framework de agentes.

Descargar skill.md
/openapi

Especificación OpenAPI 3.1

Esquema de endpoints legible por máquina. Úsalo con ChatGPT Actions, Postman, Insomnia o cualquier generador de SDK.

Ver openapi.json
/llms

Docs optimizados para LLM

Referencia completa en texto plano optimizada para rastreadores de IA y ventanas de contexto de agentes. Incluye guía de citación.

Ver api-llms.txt

Manifiesto del plugin en /.well-known/ai-plugin.json

// PRECIOS

Un precio. Sin niveles.

$0.001

Por solicitud

Paga en USDC en la red principal de Solana o Base. Sin suscripción, sin compromiso. Las respuestas en caché se facturan a la misma tarifa — mantiene la integración simple y cubre la infraestructura.

Escaneo completo

Paridad con la extensión

Cada señal que detecta la extensión de navegador SafeBrowz — phishing de credenciales, pastejacking, ClickFix, drenadores de billeteras, suplantación de marca y 18 más — es devuelta por la API. Sin atajos de solo URL.

500+

Marcas rastreadas

Cubre billeteras (MetaMask, Phantom, Ledger, Trezor), exchanges (Binance, Coinbase, OKX), servicios de pago (PayPal, Venmo, Stripe) y las principales marcas de consumo globales.

// PRUÉBALO EN VIVO

Ejecuta el flujo x402 completo en tu navegador

Conecta cualquier billetera, pega una URL, haz clic en probar. Paga 0.001 USDC en Solana o Base, o 0.00001 SOL como alternativa nativa de Solana. Funciona con cualquier billetera SPL o EVM.

Elige una red abajo — el costo es el mismo.

Necesitas un poco de SOL en Solana, o USDC + ETH para gas en Base. Sin reembolsos — el pago es on-chain.

// INICIO RÁPIDO

O pruébalo con curl en 30 segundos

Cada solicitud requiere un pago x402. La primera llamada devuelve 402 con instrucciones de pago. Paga, luego reintenta con la firma de la transacción.

Paso 1 — Obtén un nonce 402

curl -s -X POST https://api.safebrowz.com/v1/detect \
  -H "Content-Type: application/json" \
  -d '{"url":"https://app.trezor-io.us.com/"}'

Respuesta (402)

Elige cualquier opción dentro de payment o payment.alternatives. La entrada principal es Solana USDC; las alternativas incluyen Solana SOL y 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" }
    ]
  }
}

Paso 2a — Paga en Solana

Transfiere 0.001 USDC (o 0.00001 SOL) al destinatario con memo safebrowz:<nonce>. Funciona cualquier billetera Solana o la CLI spl-token. Los nonces expiran en 10 minutos.

spl-token transfer EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v 0.001 \
  FLQyppmJYbvQvEPAB4Mv8ZGmxkSXmXUwMACeJ79kdozW \
  --fund-recipient \
  --with-memo "safebrowz:ed548e77-719f-4f13-9f01-32dc8ed4e213"

Paso 2b — Paga en Base (billeteras EVM)

Envía una transferencia ERC-20 estándar de USDC en Base al destinatario, luego firma el mensaje nonce fuera de la cadena. Base carece de un campo memo nativo, por lo que el enlace de nonce usa EIP-191 personal_sign de safebrowz:<nonce>. La firma debe recuperarse a la billetera que pagó.

// 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",
});

Paso 3 — Reintenta con la prueba

Para Solana, envía solo la firma de la transacción. Para Base, también envía la firma de billetera EIP-191 y establece 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/"}'

Respuesta (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 es un puntaje de confianza simple de 0-100 (100 = seguro, 0 = estafa). confidence es qué tan seguros estamos del veredicto en sí — para un veredicto danger, 0.95 significa "estamos 95% seguros de que es una estafa," no "95% falso."

// INTEGRACIÓN

Clientes programáticos completos

Copia y pega uno de estos, conecta una billetera, listo. Cada ejemplo maneja el flujo x402 completo de principio a fin: llamada inicial, parsear el desafío 402, pagar on-chain, reintentar con el encabezado X-PAYMENT. Mezcla y combina idiomas — la API es idéntica independientemente del cliente que la llame.

TypeScript + viem (Base)

Un cliente de ~45 líneas que cubre el ciclo completo en Base mainnet. Usa viem para la transferencia USDC + firma de nonce EIP-191.

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)

El mismo flujo en Solana. Usa solders para la construcción de keypair + transacción y la instrucción SPL-memo para el enlace de 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()

Sin configuración — agentcash CLI

Si no quieres implementar tu propio flujo de pago, agentcash incluye todo el proceso x402. Detecta el 402, firma y transmite el pago, reintenta con el encabezado conforme a la especificación e imprime el veredicto. Una sola línea:

npx agentcash fetch https://api.safebrowz.com/v1/detect \
  --body '{"url":"https://trezor-support.com"}' \
  --network solana

Funciona tanto con --network solana como con --network eip155:8453. Usa una billetera gestionada por agentcash — recárgala con USDC y simplemente funciona.

Frameworks de agentes — Claude, GPT, LangChain, MCP

Todos los frameworks de agentes principales pueden cargar nuestro archivo de skill publicado y usar la API de detección como herramienta sin ningún código de integración manual:

# 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)

Autenticación Enterprise Bearer (sin x402)

Los integradores de alto volumen — apps de billeteras y plataformas de IA con millones de usuarios finales — pueden solicitar una clave Bearer de larga duración. Sin firma por llamada; pasa la clave como encabezado Authorization y obtén una respuesta 200 normal de inmediato. La facturación es mensual mediante suscripción USDC fija.

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"}'

Envía un correo a info@safebrowz.com con tu volumen esperado (solicitudes/min + total mensual) para aprovisionar una clave. El nivel típico es de 10,000 a 100,000 solicitudes por minuto, con límite de velocidad por clave para que tu rendimiento esté aislado de todos los demás clientes enterprise.

// REFERENCIA

Endpoints

POST/v1/detect

Devuelve un veredicto de estafa/phishing para una URL. Requiere pago x402.

Cuerpo de la solicitud

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

Respuesta (200)

CampoTipoDescripción
verdictstringsafe / caution / danger
trust_scoreintegerPuntaje de confianza 0-100 (100 = seguro, 0 = estafa)
brandstring / nullMarca suplantada si se detecta (ej. "Ledger", "Trezor", "PayPal")
confidencenumber0.0-1.0. Qué tan seguros estamos del veredicto. No es "porcentaje falso."
reasonstringExplicación legible por humanos
threat_typesstring[]Categorías principales: 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
signalsobjectLas 22 señales booleanas (incluye domain_mismatch, no_contact_info, fake_urgency, too_good_prices, suspicious_payment, etc.)
detailsobjectmatched_brand, official_domain, domain_matches_brand, target_country, page_language, tld, domain_age_days, matched_patterns
GET/v1/status

Verificación de estado. No requiere pago.

{"status": "ok", "version": "1.0.0", "chain": "solana"}
// CÓDIGOS DE ERROR

Errores

EstadoErrorSignificado
400missing_urlEl cuerpo de la solicitud no incluyó un campo url.
400invalid_urlLa URL estaba mal formada, era demasiado larga o apuntaba a una IP privada.
402payment_requiredSin encabezados de pago. El cuerpo contiene instrucciones para todas las cadenas compatibles.
402payment_invalidSe proporcionaron encabezados de pago pero la verificación falló. Obtén un nuevo nonce y reintenta. El cuerpo de la respuesta reemite las instrucciones de pago completas.
409nonce_already_usedEste nonce ya fue reclamado. Reintenta con un nuevo nonce 402.
429rate_limitedDemasiadas solicitudes por minuto. Espera y reintenta.
// FAQ

Preguntas frecuentes

¿Por qué x402 en lugar de claves de API?

Para el endpoint público, x402 significa sin formularios de registro, sin niveles de velocidad, sin correos de facturación, sin tickets de soporte. Pagas 0.001 USDC y obtienes un resultado. No se requiere relación previa. Para apps de billeteras y plataformas de IA que sirven a millones de usuarios detrás de un proxy, emitimos claves Bearer enterprise bajo solicitud (ver el FAQ de precios enterprise abajo).

¿Cuál es la latencia?

Los veredictos en caché devuelven en 50-150 ms. Las coincidencias de patrones de URL son similares. Las URLs nuevas que necesitan una búsqueda de página + escaneo de IA típicamente toman 2-4 segundos de principio a fin. La verificación de pago contra el RPC de Solana o Base agrega ~300-500 ms adicionales, independientemente de la profundidad del escaneo.

¿Cómo se compara esto con la extensión del navegador?

Cada señal que detecta la extensión — credential_phishing, pastejacking, fake_captcha (ClickFix), wallet_drainer, no_contact_info, fake_urgency y 17 más — es devuelta por esta API. El pipeline de detección subyacente es compartido: caché, reglas de URL, luego un escaneo completo de IA de la página en caso de fallo de caché. Obtienes el mismo trust_score, la misma identificación de brand, el mismo objeto signals.

¿Puedo solicitar un reembolso?

Sin reembolsos. El pago es irreversible por diseño (liquidación on-chain). Si la API devuelve un error de servidor 5xx, reintenta con el mismo nonce — no consumimos nonces en fallos del lado del servidor.

¿Ofrecen precios enterprise / tarifa plana?

Sí. Aprovisionamos claves de API Bearer de larga duración para apps de billeteras, plataformas de agentes de IA y otros integradores de alto volumen donde la firma on-chain por llamada es impráctica. Cada clave tiene su propio límite de velocidad (típicamente 10,000 a 100,000 solicitudes por minuto) y se factura mensualmente en USDC. Pásala como Authorization: Bearer sk_live_... y se omite el flujo x402. Envía un correo a info@safebrowz.com con el volumen esperado y te incorporamos.

¿Qué datos ven ustedes?

Solo la URL que envías. No registramos contenido de páginas, cookies, encabezados o identificadores de usuario. La firma de transacción on-chain (Solana o Base) se almacena para protección contra repetición y contabilidad de ingresos.

¿Listo para integrar?

Sin formularios que completar. Apunta cualquier billetera Solana o EVM a api.safebrowz.com/v1/detect y empieza a escanear.