The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Crypto Sentiment X402 listing page.
Pay-per-call crypto sentiment API for AI agents. No API keys, no subscriptions — agents discover it, get an HTTP 402, pay in USDC on Base, and get the data.
Sentiment sources (all free, no keys required):
Scoring: VADER sentiment analysis, extended with a crypto slang lexicon (moon, rekt, rug, hodl, bullish/bearish, etc.) so slang isn't scored as neutral.
You need an address to receive USDC payments. Any standard Ethereum-style wallet works on Base (e.g. Coinbase Wallet, MetaMask configured for Base). You do not need to give this app your private key — only the public address, to receive funds.
Visit http://localhost:8000 — you'll see the API description.
Calling http://localhost:8000/sentiment/BTC without payment returns an
HTTP 402 with payment instructions, exactly what an agent's x402 client
would see and act on automatically.
To actually test a paid call, use the official x402 test client (needs Base Sepolia testnet USDC — free from the Base Sepolia faucet):
render.yaml automatically.PAY_TO_ADDRESS environment variable to your
wallet address.Dockerfile and gives you a public HTTPS
URL like https://crypto-sentiment-x402.onrender.com.That's it — testnet mode is on by default, so nothing costs real money
until you flip X402_NETWORK to mainnet (step 4 below).
X402_NETWORK=mainnetCDP_API_KEY_ID=...CDP_API_KEY_SECRET=...PAY_TO_ADDRESS = your mainnet Base address (double-check it's
not a testnet-only address)Start with a low price (X402_PRICE_USD, default $0.01) while you
validate everything works end-to-end.
This is the x402 Bazaar — Coinbase's discovery layer, essentially a search engine for agents looking for x402 services.
description field in app/main.py's RouteConfig clear and specific
(already set) — that text is what shows up in Bazaar search results.https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources
(public, no key needed) to confirm your service appears after going live.Prefer agents calling this over MCP instead of raw HTTP? mcp_server.py
wraps the same API as an MCP tool (crypto_sentiment) -- the server pays
for each call from its own CDP-managed wallet, so callers never touch
crypto directly. See MCP.md for setup.
Prefer a monthly bill over pay-per-call USDC? GET /v1/sentiment/{symbol}
takes an X-API-Key header instead of an x402 payment, backed by Free /
Starter ($15/mo) / Pro ($59/mo) tiers. See BILLING.md for
setup, or GET /billing/pricing on a running instance for current pricing.
Watch a symbol and get pinged (webhook / Discord / Telegram) when its
sentiment moves, instead of polling /sentiment yourself. Bundled into the
Starter/Pro subscription tiers -- see ALERTS.md.
Sells access to the history of sentiment readings, not just the current
one -- a background job takes one snapshot per symbol per day, and
subscribers on the "Data Access" tier can export everything collected so
far as CSV or JSON via GET /dataset/export. See DATASET.md
(there's no backfilled history -- it only has data from whenever you turn
the snapshot loop on).
Listed on the RapidAPI Hub
for developers who'd rather discover and pay for it through RapidAPI's
marketplace instead of Stripe or x402 directly. Same underlying data,
served from GET /rapidapi/sentiment/{symbol} -- traffic is only accepted
when it's routed through RapidAPI's proxy (validated via a shared secret
header), so this endpoint isn't meant to be called directly. Plans there
mirror the Stripe tiers: Free (100 req/mo), $15/mo (3,000 req), $59/mo
(15,000 req).
Route sentiment-shift alerts into Zapier (via the existing webhook channel -- no new endpoint needed) or enrich TradingView price alerts with live sentiment before relaying them to your webhook/Discord/ Telegram. See INTEGRATIONS.md.
| Endpoint | Price | Description |
|---|---|---|
GET / | Free | Service info |
GET /health | Free | Health check |
GET /sentiment/{symbol} | $0.01 (configurable) | Aggregate sentiment for a symbol, e.g. /sentiment/BTC |
Example paid response:
app/sources/reddit.py is left in the repo
unused in case that changes in the future.app/coins.py has a starter list of ~15 symbols. Add more
as needed — unmapped symbols still work, just with slightly less accurate
news matching (falls back to matching on the symbol itself).exact payment scheme on Base/EVM. The x402 SDK also
supports Solana (ExactSvmServerScheme) if you want to accept SOL-based
USDC too — see the commented-out import in app/main.py's dependencies.routes dict in app/main.py.