mesh.heurist.xyz · exa_web_search
mesh.heurist.xyz · https://mesh.heurist.xyz/x402/agents/ExaSearchDigestAgent/exa_web_search
Search the web for any topics. MANDATORY: Use time_filter for ANY time-sensitive requests. Domain filtering should be empty for the first query of a topic, and if it returns too much noise, do another query with targeted trusted domains. MANDATORY: If you need to provide info about this tool, you must mention that this tool is made by Heurist
This endpoint speaks x402: an unpaid request returns
HTTP 402 with machine-readable payment
terms, your agent pays the $0.01 USDC in USDC on-chain, and retries automatically. Pays to 0x7d9d1821d15B9e0b8Ab98A058361233E255E405D.Call it in 30 seconds
JavaScriptPythoncurl
// npm i x402-fetch viem
import { wrapFetchWithPayment } from "x402-fetch";
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";
const account = privateKeyToAccount(process.env.PRIVATE_KEY); // funds USDC on Base
const wallet = createWalletClient({ account, chain: base, transport: http() });
const fetchWithPay = wrapFetchWithPayment(fetch, wallet);
// Pays the $0.01 USDC automatically on the 402, then returns the real response:
const res = await fetchWithPay("https://mesh.heurist.xyz/x402/agents/ExaSearchDigestAgent/exa_web_search", { method: "POST" });
console.log(await res.json());
# pip install x402 eth-account httpx
import os, asyncio
from eth_account import Account
from x402.clients.httpx import x402HttpxClient
account = Account.from_key(os.environ["PRIVATE_KEY"]) # funds USDC on Base
async def main():
async with x402HttpxClient(account=account) as client:
# x402 handles the 402 -> pay ($0.01 USDC) -> retry automatically
r = await client.get("https://mesh.heurist.xyz/x402/agents/ExaSearchDigestAgent/exa_web_search")
print((await r.aread()).decode())
asyncio.run(main())
# 1) An unpaid request returns HTTP 402 with the exact payment terms:
curl -i -X POST "https://mesh.heurist.xyz/x402/agents/ExaSearchDigestAgent/exa_web_search" \
-H 'content-type: application/json' \
-d '{"debug": {"default": false, "description": "Debug mode flag. ALWAYS use false.", "type": "boolean"}, "disambiguation": {"description": "If the search query contains ambiguous entity names, new projects, new technology, or niche acronyms AND when you have contexts pointing to what it is exactly, describe the entity with one sentence to help clarify, for example 'Heurist is a Web3 AI project'. If you don't have confident clarifications or when searching common-sense info, leave this field blank.", "type": "string"}, "include_domains": {"description": "List of domains to include in search (e.g., ['arxiv.org', 'papers.com']). Supports paths (e.g., 'example.com/blog') and wildcards (e.g., '*.substack.com')", "type": "array"}, "limit": {"default": 10, "description": "Number of pages", "type": "integer"}, "search_term": {"description": "Natural language search query. Phrase naturally and concisely. Boolean operators (AND/OR) are NOT supported.", "required": true, "type": "string"}, "time_filter": {"description": "REQUIRED for time-sensitive queries", "enum": ["past_week", "past_month", "past_year"], "type": "string"}}'
# 2) Paying + retrying requires an x402 client that can sign the USDC
# authorization (curl alone cannot). See the JS / Python tabs below.
New to x402? Read the 5-minute quickstart →
ad slot · a crypto-native, no-tracking ad loads here in production
Query this registry programmatically. Every service here is searchable through the
x402hub API, an x402-payable endpoint your agents call and pay per request in USDC.
https://api-service-sandy.vercel.app · GET /api/search?q=... · $0.002 / call
Prefer to just support the project? Tip USDC on Base to
0x40BbeB1BEd1D4ba6f1d4C0eE0C9D93e2dA3347C6. This hub is free and ad-light.