Pools read straight off Base seconds after they exist, each with the launched token's address — then ask whether it's a trap in the next call. Your agent pays a fraction of a cent in USDC per request. No accounts. No API keys.
What is this
Software can't sign up for accounts or hold credit cards. So here, nothing is gated behind a signup form — the price is quoted in the HTTP response and paid by the agent itself, machine to machine.
Everything else reads an indexer. /api/base/fresh reads Base's own
pool-creation log, so a token shows up about a block after it's born — we've
caught one 2 seconds old.
A simulated buy and sell, taxes, owner powers, holder concentration, and who deployed it — a token shipped from a six-transaction wallet holding dust is the shape most rugs share.
Every day a CI job buys one scout call and commits the result to public git,
with the Base transaction that paid for it. /api/base/scorecard
compares selected historical verdicts with available current observations,
and reports missing data.
Try it
The 402 response is the product: a price quote any agent can read and pay programmatically. Run this and you'll see one.
GET /api/base/fresh
pools born on Base in the last 10 minutes
The quote needs nothing at all. Paying is optional and needs a browser wallet holding a cent of USDC on Base — the same signature your agent would make, just done by hand.
Watch a full run that was already paid for → A pool eight seconds old, a verdict on its token, and both settlement transactions linked so you can check them.
# free — status, catalog, and a sample of every shape curl https://agenttoll.app/api/health curl https://agenttoll.app/api/catalog curl https://agenttoll.app/api/demo # a paid endpoint, unpaid: you get the quote curl -i https://agenttoll.app/api/base/fresh HTTP/1.1 402 Payment Required PAYMENT-REQUIRED: <base64> price $0.004 USDC network eip155:8453 (Base) + the request and response schema, so no second fetch is needed
// In the cloned repository: npm install && npm run build import { createPaymentClient } from "./dist/payment-policy.js"; const client = createPaymentClient("base", undefined, { totalBudgetUsdc: "0" }); console.log(await client.getPaymentQuote( "/api/base/fresh")); // Validates price, network, asset and recipient. // No wallet and no payment. Use the MCP setup below // when you want to enable bounded paid calls.
Catalog
Base onchain data first — gas, any token by contract address, wallet portfolios, address analytics, DEX pools and a spam-filtered new-token radar — plus market and Turkish-lira feeds.
| Endpoint | What you get | Price |
|---|---|---|
GET /api/base/safety/:address | Token safety checks: honeypot simulation, taxes, owner privileges, holder concentration, liquidity risk, deployer history | $0.003 |
GET /api/base/scout | Radar + safety in one call: today's new pools, each with a verdict already attached | $0.008 |
GET /api/base/fresh | Pools read straight off Base seconds after they exist, before indexers see them | $0.004 |
GET /api/base/radar/history | A past day's snapshot, exactly as committed to public git the day it was taken | $0.002 |
GET /api/base/scorecard | The radar's track record: verdicts then vs prices now, per cohort | $0.005 |
GET /api/base/portfolio/:address | Observed Base holdings valued in USD, largest first, with coverage limits | $0.003 |
GET /api/base/radar | New-token radar: fresh Base pools that already have real liquidity | $0.003 |
GET /api/base/trending | Trending DEX pools on Base: price, volume, liquidity | $0.002 |
GET /api/base/token/:address | Onchain USD price for any Base token by contract address | $0.001 |
GET /api/base/name/:nameOrAddress | Basename both ways: name → address + records, or address → primary name | $0.001 |
GET /api/base/address/:address | Base address snapshot: basename, ETH balance, tx count, contract or EOA | $0.001 |
GET /api/gas | Base network gas price and latest block | $0.001 |
GET /api/brief | One-call market brief: BTC/ETH/SOL, Base gas, sentiment | $0.005 |
GET /api/price/:symbol | Spot price (USD) + 24h change for any asset | $0.001 |
GET /api/trending | Tokens trending across the market right now | $0.002 |
GET /api/feargreed | Crypto Fear & Greed index with yesterday comparison | $0.001 |
GET /api/try/premium | Turkish lira premium: implied vs official USD/TRY | $0.002 |
GET /api/try/spread | Turkish exchange spread: BTCTurk and Paribu TRY quotes vs the global price | $0.002 |
GET /api/watch/address/:address | New activity for a Base address since your cursor | $0.002 |
GET /api/watch/radar | Only the pools that appeared since your cursor | $0.003 |
GET /api/watch/price/:symbol | Price alert check against your reference and threshold | $0.001 |
GET /api/catalog | Machine-readable catalog of everything for sale | free |
GET /api/demo | Sample response shapes for every paid endpoint | free |
GET /api/stats | Qualifying small USDC transfers, with known operator activity reported separately | free |
GET /api/health | Service status | free |
GET /api/ready | Payment provider and Base RPC readiness | free |
Selected responses are cached; lifetimes vary by source. Handler failures before settlement are not billed. If a signed request times out or its response is lost, inspect the receipt and wallet before retrying: settlement may already have happened.
Watch endpoints
A snapshot is useful once. Agents that run on a schedule want the diff.
Address and radar watches return a cursor; send it back as
?since=. Drain address pages while hasMore is true and
deduplicate transaction hashes. Radar coverage is partial; the price watch
checks a threshold and has no cursor.
# inspect the quote — no wallet or payment curl -i "https://agenttoll.app/api/watch/radar" HTTP/1.1 402 Payment Required # after payment via the bounded client or MCP tool, # pass the returned cursor unchanged to the next call: # /api/watch/radar?since=<returned-cursor> # Each paid poll costs $0.003, including an empty result. # Results cover the current ranked listing, not every pool.
How it works
Your agent calls an endpoint. The server replies 402 Payment Required
with a machine-readable price quote.
The agent signs a USDC authorization for the quoted amount — no gas on the client, no account, no API key.
The request retries with the payment header. Settlement lands on Base and the data comes back in the same round trip.
MCP
AgentToll ships an MCP server. Add it to Claude Desktop or Claude Code and use 21 data tools plus two free quote and budget tools. Start without a wallet; add a dedicated wallet and a finite session budget when you want to pay.
{
"mcpServers": {
"agenttoll": {
"command": "npx",
"args": ["-y", "agenttoll-mcp@0.14.0"]
}
}
}
Use agenttoll-mcp@0.14.0 or newer. If you installed 0.13.0 or
earlier, update your MCP configuration and restart it to receive the free
tools and payment budget controls.
get_price, get_base_gas, get_trending,
get_base_token_price, get_base_address_info,
get_fear_greed, get_base_trending_pools,
get_market_brief, get_new_token_radar,
get_try_premium, get_try_spread, get_base_portfolio,
check_token_safety, get_fresh_pools, scout_new_tokens,
get_radar_scorecard, get_radar_history, resolve_basename,
watch_base_address, watch_new_tokens,
watch_price_alert, get_payment_quote and
get_payment_budget.
To enable payments, set AGENT_PRIVATE_KEY and
AGENTTOLL_BUDGET_USDC. The budget applies to one running MCP instance;
a restart does not cancel previously signed authorizations.
Transparency
/api/stats counts the actual USDC transfers to our address on Base,
and excludes known operator wallets from the external count. Transfers can include
tests and unsolicited payments; they do not establish API sales or unique customers.
No accounts, no API keys, no sessions. Even the watch endpoints keep the cursor on your side, not ours.
Settlement starts after the data handler succeeds. A connection loss or timeout after signing can leave the payment outcome unknown; check your receipt and wallet before retrying.
Prices fall through CoinGecko → Binance → Coinbase, Base tokens through GeckoTerminal → DexScreener, and RPC calls across three providers. The response names the source that answered.
The whole tollbooth is on GitHub. Fork it and run your own — the payment rail is the interesting part, and it's yours too.