SiteCheck

29 ferramentas de agente pay-per-call (página web para Markdown, PDF para texto, stack de tecnologia, verificação de e-mail, RDAP de domínio, Solana, KYB), pagas por chamada em USDC via x402.

Servidor MCP hospedado

npx add-mcp 'https://api.sitecheck-api.workers.dev/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

SiteCheck: ferramentas pay-per-call para agentes de IA (x402 na Base, Solana e Arc)

Ao vivo: https://api.sitecheck-api.workers.dev · listado no x402scan · descoberta: /.well-known/x402, /openapi.json

O SiteCheck é uma API pequena que agentes de IA podem usar sem conta ou chave de API: 29 ferramentas pay-per-call no total. Além de suas ferramentas de IA e web (incluindo um leitor de página web para Markdown), ele vende PDF para texto, tradução, detecção de stack tecnológico, URLs de sitemap, taxas de câmbio, e-mail, domínio e dados de tokens e carteiras Solana, dados empresariais e de conformidade (IVA da UE, IBAN, LEI, recalls dos EUA, execuções OSHA/EPA, avisos de insolvência do Reino Unido), dados de mercados de previsão e transações comerciais não assinadas alimentadas pela Panta. Cada chamada é paga por requisição em USDC com o protocolo x402, na Base, Solana ou Arc (L1 da Circle), dependendo de onde o comprador possui USDC. Chame, receba um 402 Payment Required listando o preço em cada rede, assine o pagamento e obtenha o resultado. Ele roda em Cloudflare Workers e Workers AI.

EndpointPreçoO que faz
GET /api/audit?url=$0,02Auditoria de site: problemas de acessibilidade WCAG 2.2 com correções e pontuação (Lei Europeia de Acessibilidade), noções básicas de SEO, cabeçalhos de segurança, stack tecnológico
GET /api/contacts?url=$0,01Enriquecimento de contato de empresa a partir de um domínio: e-mails, telefones, redes sociais, tecnologia
GET /api/hiring?q=&remote=$0,01Pesquisa o tópico atual "Quem está contratando?" do Hacker News
POST /api/chat$0,004Conclusão de chat Llama 3.3 70B
POST /api/image$0,005Texto para imagem FLUX.1 schnell
POST /api/transcribe$0,01Fala para texto Whisper large-v3-turbo
POST /api/tts$0,02Texto para fala Deepgram Aura-2
POST /api/embed$0,001Embeddings BGE-M3 (1024-d, multilíngue)
GET /api/vat?number=$0,002Verificação de número de IVA da UE: formato e soma de verificação localmente, depois o serviço oficial VIES (27 estados da UE + Irlanda do Norte)
GET /api/iban?iban=$0,001Validação de IBAN sem chamada de rede: estrutura e comprimento do registro, mod-97, dígitos de verificação nacionais, divisão banco/agência/conta; ibans= para até 50
GET /api/lei?q=$0,005Consulta GLEIF por LEI ou nome da empresa: status, registro, controladoras, subsidiárias, kycSummary de uma linha
GET /api/recalls?q=&source=&since=&classification=&limit=$0,003Recalls de produtos dos EUA da openFDA e CPSC em um único esquema, com gravidade alta/média/baixa
GET /api/violations?company=&state=&since=&minPenalty=&source=&limit=$0,005Casos de execução dos EUA: OSHA (API DOL, precisa de chave na implantação) e EPA ECHO, com links de registros oficiais
GET /api/uk-insolvency?since=&q=&postcode=&type=&limit=$0,003Avisos de insolvência de empresas do Reino Unido do The Gazette (nosso cache noturno dos últimos 8 dias), enriquecimento opcional do Companies House
GET /api/read?url=&format=&maxChars=&links=$0,002Uma página web como Markdown limpo ou texto para um LLM: apenas conteúdo principal, título, descrição, autor, data, idioma, canônico; robots.txt respeitado
GET /api/email-check?email=$0,001Pré-verificação de e-mail sem SMTP: sintaxe, DNS de e-mail, domínio descartável, conta de função, provedor gratuito, sugestão de erro de digitação; emails= para até 50
GET /api/domain?domain=$0,002RDAP (sucessor do WHOIS) e DNS: registrado ou disponível, registrador, datas de criação/expiração, status, DNSSEC, servidores de nomes, IPs, MX
GET /api/solana/token?address=$0,002Verificação de token Solana: preço, capitalização de mercado, liquidez, detentores, negociação em 24h, pontuação orgânica, participação dos principais detentores, autoridade de cunhagem/congelamento on-chain e extensões Token-2022, sinais de alerta
GET /api/solana/trending?mode=&interval=&minLiquidityUsd=$0,003Tokens Solana em tendência, novos, mais negociados ou mais orgânicos com os mesmos campos e sinais
GET /api/solana/wallet?address=$0,003Participações de carteira Solana: SOL e cada token com símbolo, preço e valor em USD, total em USD
GET /api/tech?url=$0,003Detecção de tecnologia de site (CMS, e-commerce, análise, CDN, hospedagem, chat, pagamentos, provedor de e-mail) com versão, confiança e evidência
POST /api/pdf$0,003PDF para texto por URL ou base64 (até 15 MB), página por página, com título, autor e datas; apenas PDFs de texto
GET /api/sitemap?url=&pathPrefix=&since=$0,002Cada URL nos sitemaps XML de um site com lastmod, mais recentes primeiro
GET /api/fx?from=&to=&amount=&date=$0,001Taxas de câmbio do BCE (mais recentes, uma data passada ou uma série temporal) com conversão de valor
POST /api/translate$0,002Tradução com Llama 3.1 8B, até 6.000 caracteres, formatação preservada

Mercados de previsão (Panta)

Agentes podem comprar inteligência de mercado e transações comerciais prontas para assinar por chamada, sem conta e sem chave de API. Um agente pesquisando um evento paga uma fração de centavo para encontrar os mercados e um centavo pelas probabilidades de um mercado e um resumo neutro. Um agente que deseja agir paga por uma transação de compra não assinada da Panta e a assina com sua própria carteira. A Panta executa mercados de previsão em USDC na Solana.

EndpointPreçoO que faz
GET /api/markets?q=&status=&category=&limit=$0,002Pesquisa os mercados da Panta. Linhas compactas: id, pergunta, preços SIM/NÃO e probabilidades implícitas, volume, horários de fechamento e resolução, fonte de resolução
GET /api/markets/brief?id=$0,01Um mercado: probabilidades atuais, atividade de negociação recente e um resumo curto e neutro de IA sobre o que ele pergunta, o que o resolve e o que o preço implica
POST /api/markets/quote$0,005Corpo { id, side: "yes"|"no", amountUsdc, wallet }. Cotação da Panta: ações esperadas, preço médio, taxa e impacto no preço em relação ao preço à vista
POST /api/markets/build-buy$0,01Mesmo corpo, mais um maxSlippageBps opcional. Retorna a transação não assinada (Solana v0, base64) e as instruções da Panta para o agente assinar e transmitir ele mesmo, além dos campos para o relatório de negociação
POST /api/markets/reportgrátisApós transmitir, envie { signature, orderId, quoteId, id, wallet }. O SiteCheck encaminha para a Panta, que confirma e atribui a negociação
  • Sem custódia. O SiteCheck nunca assina, mantém chaves ou custodia fundos. build-buy devolve uma transação não assinada cujo único signatário é a carteira do agente.
  • Apenas informação, não aconselhamento financeiro. Toda resposta diz isso (disclaimer), e o resumo nunca recomenda uma negociação. Se o texto do modelo parecer aconselhamento, um modelo factual é retornado em seu lugar.
  • Alimentado pela Panta. Toda resposta carrega poweredBy: { text: "Powered by Panta", url: "https://panta.market" }, conforme exigido pelos Termos de Uso da Panta.
  • Pague apenas por resultados, como em todas as ferramentas: se a Panta recusar ou falhar, a chamada retorna um erro e nada é liquidado. O catálogo é armazenado em cache por 45 segundos e os preços por 15 segundos, e as respostas informam a idade dos dados.
  • As ferramentas ficam ativas apenas quando o segredo PANTA_API_KEY está definido. Caso contrário, ficam ocultas, e GET /health explica o motivo. Endpoints, formatos, atribuição e perguntas em aberto: docs/PANTA.md.
node scripts/demo-markets.mjs --q bitcoin            # search, brief and quote, paid on Solana (~0.017 USDC)
node scripts/demo-markets.mjs --q bitcoin --build    # also builds the unsigned transaction (+0.01); never signs or sends it

Dados de web, documentos, e-mail, domínio e Solana

FerramentaFonteNotas
/api/readA própria página, buscada uma vez com o User-Agent SiteCheckReaderrobots.txt é respeitado (uma página não permitida responde 403 e não é cobrada). Nenhum JavaScript é executado, então páginas que só renderizam no navegador retornam vazias (422, não cobradas). PDFs e outros arquivos binários respondem 415. O conteúdo pertence ao seu publicador.
/api/email-checkDNS sobre HTTPS (Cloudflare, Google) e a lista disposable-email-domains (CC0)Nenhuma conexão SMTP é feita: unknown significa que não há nada errado com o endereço ou seu domínio, não que a caixa de entrada exista.
/api/domainO bootstrap RDAP da IANA e o servidor RDAP de cada registro; DNS sobre HTTPSavailable significa que o registro não tem registro; nomes premium ou reservados ainda podem estar indisponíveis para compra. TLDs sem RDAP são inferidos via DNS.
/api/solana/token, /api/solana/trending, /api/solana/walletAPIs de token, preço e participações da Jupiter, JSON-RPC da mainnet Solana (conta de cunhagem), GeckoTerminal para pools (melhor esforço)Apenas informação, não aconselhamento financeiro. Nada é assinado ou enviado. Autoridade de cunhagem e congelamento on-chain prevalece sobre a auditoria da API quando ambas estão disponíveis.
/api/techPágina inicial do site, cabeçalhos, cookies e DNS (MX, TXT); 231 impressões digitais próprias (MIT, não derivadas do Wappalyzer)Nenhum JavaScript é executado; um site atrás de desafio de bot retorna o que seus cabeçalhos e DNS mostram.
/api/pdfCamada de texto do PDF, lida com unpdf (PDF.js)Sem OCR: um PDF escaneado responde 422 e não é cobrado.
/api/sitemaprobots.txt do site e sitemaps XMLÍndices são seguidos até 25 sitemaps filhos por chamada.
/api/fxTaxas de referência do Banco Central Europeu via FrankfurterPublicadas em dias úteis por volta das 16:00 CET; fins de semana retornam o último dia publicado.
/api/translateWorkers AI @cf/meta/llama-3.1-8b-instruct-fastTradução automática: revise textos importantes.

Dados empresariais e de conformidade

Seis ferramentas para um agente que precisa verificar uma contraparte antes de negociar com ela. Todas leem fontes oficiais gratuitas (ou nosso próprio cache de uma delas), não precisam de chave do chamador e seguem a mesma regra de todas as rotas aqui: uma chamada que falha (entrada inválida, upstream fora do ar, timeout) retorna 4xx/5xx e não é liquidada, então o comprador não é cobrado.

FerramentaFonteTermos
/api/vatAPI REST VIES da Comissão EuropeiaServiço público da Comissão. Um estado-membro fora do ar dá HTTP 503 com um viesStatus como MS_UNAVAILABLE, então uma resposta desconhecida nunca é relatada como "inválida". Alguns estados (ex.: DE, ES) confirmam validade, mas não divulgam nome e endereço: esses campos são null.
/api/ibanCalculado localmente a partir da estrutura do registro SWIFT IBAN (versão 101)Sem rede, sem consulta de nome de banco ou BIC (nenhum conjunto de dados aberto é incluído; a resposta diz bankLookup: false). Dígitos de verificação nacionais são aplicados apenas onde existe um algoritmo público (FR, ES, IT, BE, NL para ABNA/INGB/RABO, NO, FI, PL, PT, RS, ME, MK, XK, SI); outros países relatam not-available. A Alemanha não tem algoritmo nacional geral.
/api/leiÍndice Global LEI da GLEIFDomínio público CC0. Sem chave.
/api/recallsRelatórios de execução da openFDA (alimentos, medicamentos, dispositivos) e a API de recalls do CPSC SaferProducts.govOs dados da openFDA são domínio público sob seus termos de uso (não para decisões médicas). O CPSC não classifica recalls: sua gravidade é derivada do texto de perigo, Classe I/II/III da FDA mapeia para alta/média/baixa.
/api/violationsData API v4 do Departamento do Trabalho dos EUA (OSHA) e EPA ECHOTrabalhos do governo dos EUA. A OSHA precisa do segredo opcional DOL_API_KEY: sem ele, a rota retorna apenas EPA e diz que a OSHA está desativada. Registros são correspondidos por nome e mostram inspeções e casos, não culpa.
/api/uk-insolvencyThe Gazette, através do nosso próprio cache noturno (gazette-cache.sitecheck-api.workers.dev, últimos 8 dias úteis do Reino Unido). The Gazette nunca é chamado diretamente.Open Government Licence v3.0. As respostas carregam o dataTimestamp do cache e qualquer missingDays. Enriquecimento opcional do Companies House (status, data de incorporação, códigos SIC, endereço; no máximo 10 linhas por chamada) quando COMPANIES_HOUSE_API_KEY está definido.

Os limites do Workers são respeitados: toda chamada upstream tem timeout (no máximo 10 s) e um User-Agent SiteCheck/1.x, toda ferramenta fica bem abaixo de 50 sub-requisições, e nada grande é analisado por requisição (o texto do Gazette é escaneado e apenas avisos correspondentes são analisados). Respostas upstream estáveis são armazenadas em cache com a Cache API onde funciona.

curl -s "https://api.sitecheck-api.workers.dev/api/vat?number=DE811907980"        # 402 first: pay with any x402 client

Servidor MCP

https://api.sitecheck-api.workers.dev/mcp é um servidor MCP remoto (HTTP Streamable, sem estado, respostas JSON). Todo endpoint pago é uma ferramenta MCP com o mesmo esquema de entrada (read, pdf, tech, email_check, domain, solana_token, vat, lei, ...), e o mesmo preço. Payment uses the x402 MCP transport: a tools/call without payment returns isError with the x402 PaymentRequired object in structuredContent; the client signs one option and repeats the call with the PaymentPayload in params._meta["x402/payment"]; the answer carries the settlement in result._meta["x402/payment-response"]. A tool call that fails is not settled. Each call is replayed inside the Worker against the matching /api route, so MCP and HTTP buyers go through the same payment checks.

import { createx402MCPClient } from "@x402/mcp";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const client = createx402MCPClient({
  name: "my-agent", version: "1.0.0",
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }], // a viem account holding USDC on Base
  autoPayment: true,
});
await client.connect(new StreamableHTTPClientTransport(new URL("https://api.sitecheck-api.workers.dev/mcp")));
const page = await client.callTool("read", { url: "https://docs.x402.org/introduction" }); // pays $0.002

Clientes MCP sem suporte a x402 (por exemplo, um conector remoto simples) podem listar as ferramentas e ver cada preço, mas uma chamada retorna os requisitos de pagamento em vez de um resultado.

Redes

RedeCAIP-2USDCFacilitador
Baseeip155:84530x8335…2913PayAI
Solanasolana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpEPjF…Dt1vPayAI
Arceip155:50420x3600…0000Circle Facilitator Service

O preço é o mesmo em todas as redes. Os compradores precisam apenas de USDC: pagamentos EVM são assinaturas EIP-3009, e o facilitador paga as taxas de gas e da Solana. Fontes e decisões de design: docs/NETWORKS.md.

Experimente

curl -si "https://api.sitecheck-api.workers.dev/api/audit?url=example.com" \
  | grep -i '^payment-required:' | cut -d' ' -f2 | tr -d '\r' | base64 -d
# {"x402Version":2,"error":"Payment required", ..., "accepts":[{ "network":"eip155:8453", "amount":"20000", ... }, ...]}

Pague com qualquer cliente x402. Base ou Arc, com @x402/fetch e uma conta viem:

import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);  // holds a little USDC
const client = x402Client.fromConfig({
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],   // Arc: "eip155:5042"
  // Arc only: its USDC is not in @x402/evm's built-in asset list yet, so opt in (cap: $0.10 per call).
  // spendControls: { allowedAssets: [{ network: "eip155:5042", asset: "0x3600000000000000000000000000000000000000", maxAmountPerPayment: "100000" }] },
});
const pay = wrapFetchWithPayment(fetch, client);
const res = await pay("https://api.sitecheck-api.workers.dev/api/audit?url=example.com");
console.log(await res.json());

Solana, com @x402/svm e um assinante @solana/kit:

import { readFileSync } from "node:fs";
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactSvmScheme } from "@x402/svm/exact/client";
import { createKeyPairSignerFromBytes } from "@solana/kit";

const signer = await createKeyPairSignerFromBytes(Uint8Array.from(JSON.parse(readFileSync("buyer.json", "utf8"))));
const client = new x402Client().register("solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", new ExactSvmScheme(signer));
const pay = wrapFetchWithPayment(fetch, client);
console.log(await (await pay("https://api.sitecheck-api.workers.dev/api/audit?url=example.com")).json());

Cada endpoint declara seu esquema de entrada e um exemplo de saída por meio da extensão de descoberta x402 Bazaar, para que agentes possam encontrá-lo e chamá-lo sem ler a documentação.

Agente de demonstração

scripts/demo-agent.mjs descobre a API por meio de /.well-known/x402, paga por uma auditoria na rede que você escolher e imprime o resultado e o link da transação:

node scripts/demo-agent.mjs --network base     # or arc, solana

Na primeira execução, ele cria uma carteira descartável em um arquivo ignorado pelo git (.env.evm para Base e Arc, .env.solana para Solana) e imprime o endereço dela. Financie-a com cerca de 0,10 USDC nessa rede; uma auditoria custa 0,02 USDC, e não é necessário ETH ou SOL. --dry-run para antes de pagar, e --url aponta para outra implantação.

Notas de design

  • Pague apenas por resultados. A liquidação ocorre após o handler. Se um modelo ou upstream falhar, o handler retorna um status de erro e o pagamento não é liquidado, então o comprador não é cobrado. Isso vale para as três redes e é coberto pelos testes.
  • Uma rota, várias redes. Cada rota lista uma entrada accepts x402 por rede configurada. Base e Solana liquidam por meio da PayAI. Arc liquida por meio do Facilitator Service da Circle em seu teste sem chave: cada requisição carrega uma prova do vendedor assinada pela chave da carteira receptora da Arc (veja abaixo). Cada cliente facilitador reporta apenas as redes atribuídas a ele (lib/payments.js).
  • Middleware x402 seguro para Workers. Um Worker não pode aguardar uma promise criada por outra requisição, e o middleware x402 inicializa de forma lazy. Cada requisição constrói e inicializa seu próprio middleware até que um termine; esse então é reutilizado (lib/app.js).
  • Sem chaves no repositório. Os endereços receptores ficam em wrangler.toml [vars] (vazios por padrão). A chave do vendedor da Arc (ou, como fallback, a chave de API da Circle) é um segredo do Worker. Os scripts auxiliares mantêm suas carteiras em arquivos .env.* ignorados pelo git.

Arc: teste sem chave da Circle e uma carteira quente

O Facilitator Service da Circle normalmente exige uma chave de API e, na mainnet, uma conta Circle com cartão de crédito cadastrado. O SiteCheck usa o teste sem chave da Circle. Cada requisição /verify e /settle carrega um cabeçalho Facilitator-Seller-Proof: uma assinatura EIP-712 pela chave que controla o payTo da Arc, vinculada à rota, ao corpo exato da requisição e a um nonce novo (lib/sellerProof.js, lib/circle.js).

A contrapartida: essa chave precisa viver no Worker, como o segredo ARC_SELLER_KEY. Portanto, o payTo da Arc é uma carteira quente dedicada que apenas recebe pagamentos. O proprietário a varre regularmente para uma carteira fria (scripts/sweep-arc.mjs), então uma chave vazada exporia no máximo o que entrou desde a última varredura. A cota do teste também é limitada, e a Circle não a publica. Quando ela acaba, a Circle responde 403 registration_required. O pagamento não é liquidado e o comprador não é cobrado, o Worker registra isso, e GET /health mostra arc.trialExhausted: true. A partir daí, a Arc precisa de uma chave de API da Circle ou precisa ser desligada. Detalhes: docs/NETWORKS.md.

Execute o seu próprio

npm install
npm test                    # no network needed: the facilitators and Panta are mocked
npx wrangler dev            # local

Implantação: defina account_id e pelo menos um endereço receptor em wrangler.toml (ou passe-o com --var). Para Arc, crie a carteira quente e armazene a chave primeiro:

node scripts/new-arc-wallet.mjs            # Arc only: prints the new address; the key goes to .env.arc-seller
npx wrangler secret put ARC_SELLER_KEY     # paste the key from .env.arc-seller
npx wrangler secret put PANTA_API_KEY      # optional: a pk_live_... key switches the prediction-market tools on
npx wrangler secret put DOL_API_KEY        # optional: switches OSHA on in /api/violations
npx wrangler secret put COMPANIES_HOUSE_API_KEY   # optional: enriches /api/uk-insolvency rows
npx wrangler deploy
node scripts/sweep-arc.mjs --to 0xYourColdWallet          # later, regularly: shows what it would send
node scripts/sweep-arc.mjs --to 0xYourColdWallet --yes    # sends it
VariávelRedeNotas
PAY_TOBaseendereço EVM
PAY_TO_SOLANASolanaendereço da carteira; ela já deve ter uma conta de token USDC
ARC_SELLER_KEY (segredo)Arcchave privada da carteira receptora dedicada da Arc; ativa a Arc e define seu payTo
PAY_TO_ARCArcopcional com ARC_SELLER_KEY (se definido, deve ser igual ao endereço da chave); sem chave de vendedor, o endereço da Arc a usar com CIRCLE_API_KEY
CIRCLE_API_KEY (segredo)Arcapenas fallback, usado quando ARC_SELLER_KEY não está definido
FACILITATOR_URLBase, Solanapadrão https://facilitator.payai.network
FACILITATOR_URL_ARCArcpadrão https://api.circle.com/v1/facilitator/x402
PANTA_API_KEY (segredo)todasativa as ferramentas de mercado de previsão: npx wrangler secret put PANTA_API_KEY (veja docs/PANTA.md)
PANTA_BASE_URLtodaspadrão https://live-api.panta.market/api/v1
DOL_API_KEY (segredo)todasopcional: ativa a OSHA em /api/violations: npx wrangler secret put DOL_API_KEY. Sem ela, a rota é apenas EPA
COMPANIES_HOUSE_API_KEY (segredo)todasopcional: enriquecimento da Companies House em /api/uk-insolvency: npx wrangler secret put COMPANIES_HOUSE_API_KEY

Deixe um endereço vazio para desligar essa rede. GET /health mostra quais redes estão ativas e por que as outras não estão, e se as ferramentas Panta estão ligadas. Para Arc, também mostra o modo de autenticação, o endereço receptor e o status do teste.

Licença

MIT

Transações na mainnet

Liquidações x402 reais nas três redes: