Hourly crypto news-sentiment readings for a ticker (e.g
Hourly crypto news-sentiment readings for a ticker (e.g. BTC, ETH), recorded live at the top of every UTC hour and never backfilled. Each row: observed_at, average_compound (-1 to 1), sample_size, Fear & Greed value, matcher and the top 3 headlines behind it…
by crypto-sentiment-x402.onrender.com · discovered, not yet claimed by its owner · updated 2026-10-05
Mirrored from Coinbase's public x402 Bazaar. The description is the provider's own text and has not been reviewed here; the payment requirements are copied as published.
What it does
Hourly crypto news-sentiment readings for a ticker (e.g. BTC, ETH), recorded live at the top of every UTC hour and never backfilled. Each row: observed_at, average_compound (-1 to 1), sample_size, Fear & Greed value, matcher and the top 3 headlines behind it (title, link). Query start/end as ISO 8601; default last 7 days, max 30 days per call. See /archive for symbols and coverage.
Tags: bazaar
Call contract
- Method
- GET
- Input
- path parameters
- Output
- json
- Last paid call
- 2026-10-05
{
"symbol": "BTC"
}{
"average_compound_note": "average_compound depends on the row's window column. window \"72h-hl24\" (from 2026-10-04): the recency-weighted score over headlines from the last 72 hours (weight halves every 24 hours), the same number the live API returns; unweighted_compound_72h, effective_sample_size and newest_headline_age_hours are filled in. window null (earlier rows): the plain average over every item the feeds held, however old, and those four columns are null.",
"count": 2,
"end": "2026-10-04T02:00:00Z",
"methodology": "Rows before 2026-10-03 were scored with substring headline matching (matcher null); later rows with whole-word matching (matcher \"whole_word\"). Drivers (the top headlines behind a reading) are stored from 2026-10-03 on; older rows have drivers null. See /validation for the methodology notes.",
"recording": "Readings are recorded live at the top of every UTC hour and never backfilled. An hour the logger missed stays missing.",
"rows": [
{
"average_compound": 0.1123,
"drivers": null,
"effective_sample_size": null,
"fear_greed_value": 41,
"matcher": "whole_word",
"newest_headline_age_hours": null,
"observed_at": "2026-10-04T00:00:02.513104+00:00",
"sample_size": 52,
"unweighted_compound_72h": null,
"window": null
},
{
"average_compound": 0.1388,
"drivers": [
{
"effect": 0.0221,
"link": "https://example.com/news/bitcoin-etf-inflows",
"published": "2026-10-03T22:05:00Z",
"score": 0.6249,
"source": "CoinDesk",
"title": "Bitcoin ETFs log fifth straight day of inflows",
"weight": 0.8963
}
],
"effective_sample_size": 31.7,
"fear_greed_value": 41,
"matcher": "whole_word",
"newest_headline_age_hours": 1.2,
"observed_at": "2026-10-04T01:00:02.209871+00:00",
"sample_size": 55,
"unweighted_compound_72h": 0.1012,
"window": "72h-hl24"
}
],
"start": "2026-10-04T00:00:00Z",
"symbol": "BTC"
}Use with an agent
- Discover. Agents find this listing with
GET https://bazaar.saylorinnovations.com/discovery/search?query=…, the MCP toolsearch_resources, or/discovery/resources. - Inspect. Fetch
/resources/39762.jsonfor the price and payment options. - Pay. Call
GET https://crypto-sentiment-x402.onrender.com/history/:symbol. The provider answers402with its payment requirements. An x402 client signs one of the options below and retries withPAYMENT-SIGNATURE. - Execute. The provider returns
200with the data. Agent Bazaar is not in the request path and never sees your payment.
For humans
You don't need an account or an API key; you need a wallet holding a small amount of USDC on Base, and an x402-capable client (see the examples below). Call the endpoint unpaid first to see exactly what it asks for.
Pricing & payment
- Price
- $0.05 / request
- Protocol
- x402 v2
- Auth
- No account or API key. Pay per request.
- Networks
- Base
- Demand
- 2 calls · 1 unique payers in 30d (public x402 Bazaar data)
x402 payment requirements
| Scheme | Network | Asset | Amount | Pay to | Timeout |
|---|---|---|---|---|---|
| exact | Base eip155:8453 | USDC | $0.05 | 0xA6E10884a70D00DE8b8c5dfF0a2a9B1a821cE074 | 300s |
accepts[] (raw JSON)
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0xA6E10884a70D00DE8b8c5dfF0a2a9B1a821cE074",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "50000",
"amountUsd": 0.05,
"maxTimeoutSeconds": 300
}
]Schemas
Output schema (JSON Schema)
{
"properties": {
"example": {
"properties": {
"average_compound_note": {
"type": "string"
},
"count": {
"type": "integer"
},
"end": {
"type": "string"
},
"methodology": {
"type": "string"
},
"recording": {
"type": "string"
},
"rows": {
"items": {
"properties": {
"average_compound": {
"type": [
"number",
"null"
]
},
"drivers": {
"anyOf": [
{
"type": "null"
},
{
"items": {
"properties": {
"effect": {
"type": "number"
},
"link": {
"type": [
"string",
"null"
]
},
"published": {
"type": [
"string",
"null"
]
},
"score": {
"type": "number"
},
"source": {
"type": "string"
},
"title": {
"type": "string"
},
"weight": {
"type": "number"
}
},
"required": [
"title",
"source",
"link",
"published",
"score"
],
"type": "object"
},
"maxItems": 5,
"type": "array"
}
]
},
"effective_sample_size": {
"type": [
"number",
"null"
]
},
"fear_greed_value": {
"type": [
"integer",
"null"
]
},
"matcher": {
"type": [
"string",
"null"
]
},
"newest_headline_age_hours": {
"type": [
"number",
"null"
]
},
"observed_at": {
"type": "string"
},
"sample_size": {
"type": [
"integer",
"null"
]
},
"unweighted_compound_72h": {
"type": [
"number",
"null"
]
},
"window": {
"type": [
"string",
"null"
]
}
},
"required": [
"observed_at",
"average_compound",
"matcher",
"drivers"
],
"type": "object"
},
"type": "array"
},
"start": {
"type": "string"
},
"symbol": {
"type": "string"
}
},
"required": [
"symbol",
"start",
"end",
"count",
"rows"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}Example shape — generated from the schema, not a captured live response
{
"example": {
"average_compound_note": "string",
"count": 0,
"end": "string",
"methodology": "string",
"recording": "string",
"rows": [
{
"average_compound": 0,
"drivers": null,
"effective_sample_size": 0,
"fear_greed_value": 0,
"matcher": "string",
"newest_headline_age_hours": 0,
"observed_at": "string",
"sample_size": 0,
"unweighted_compound_72h": 0,
"window": "string"
}
],
"start": "string",
"symbol": "string"
},
"type": "string"
}Examples
curl -X GET 'https://crypto-sentiment-x402.onrender.com/history/:symbol'
# -> 402 Payment Required; read PAYMENT-REQUIRED
# retry the identical request with PAYMENT-SIGNATUREconst res = await fetch("https://crypto-sentiment-x402.onrender.com/history/:symbol", {
"method": "GET"
});
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}import httpx
res = httpx.request("GET", "https://crypto-sentiment-x402.onrender.com/history/:symbol")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerDetails
- Provider
- crypto-sentiment-x402.onrender.com
- Endpoint
- https://crypto-sentiment-x402.onrender.com/history/:symbol
- Machine-readable
/resources/39762.json