Free Market Sentiment API
AI-scored per-asset sentiment combining three layers: news analysis, crowd positioning (funding rates), and institutional flows (COT). Updated every hour. Others charge for sentiment feeds; ours runs on our own news coverage and public positioning data.
Endpoints
/api/markets/sentimentLatest sentiment scores for all 20 tracked assets (all windows).
/api/markets/sentiment/{slug}?history=7d|30d|allSentiment history for a specific asset.
Rate Limit
30 req/min/IP
CORS
Open (*)
Auth
None
Examples
curl
curl https://xoomar.com/api/markets/sentiment/btc
Python
import requests
r = requests.get("https://xoomar.com/api/markets/sentiment")
for row in r.json()["data"]:
if row["window"] == "24h":
print(f"{row['slug']}: composite {row['composite']}")JavaScript
const res = await fetch("https://xoomar.com/api/markets/sentiment/btc?history=30d");
const { data } = await res.json();
data.forEach(r => console.log(`${r.ts}: ${r.composite}`));Honest Limits
- Recomputes hourly. Not a real-time feed.
- News layer scored by GPT from our own coverage; crowd layer from funding rates; institutional from COT positioning.
- Score range is -1 to +1. Values near 0 are neutral.
- Not all layers are available for all assets (e.g., COT layer is null for crypto assets without CME futures).
Main Features
- ✓Multi-layer sentiment for 17 assets across crypto, FX, indices, and commodities, recomputed every hour.
- ✓Three independent layers per asset: AI-scored news coverage, crowd positioning from funding and ratio data, and institutional positioning from COT.
- ✓Composite score with transparent weights (news 0.5, crowd 0.25, institutional 0.25) and null-safe renormalization when a layer has no data.
- ✓Both 24h and 7d windows per asset, plus the Crypto Fear & Greed Index for crypto assets.
- ✓Per-asset history endpoint for charting how sentiment evolved into and out of market events.
How It Works
Each layer has its own clock; the aggregate runs hourly.
News scoring
Our pipeline's AI reads incoming market news and scores each relevant article from -1 (bearish) to +1 (bullish) per asset, then aggregates over 24h and 7d windows.
Crowd and institutional layers
Funding rate percentiles and long/short ratios become the crowd layer; weekly COT net positioning becomes the institutional layer.
Blending
The composite renormalizes weights across whichever layers have data, so a missing layer never silently zeroes the score. We unit-test this math.
Real Example
Request
curl "https://xoomar.com/api/markets/sentiment"
Response (captured live, trimmed)
{
"data": [
{
"slug": "btc",
"name": "Bitcoin",
"kind": "crypto",
"window": "24h",
"ts": "2026-06-12T15:00:03.798Z",
"newsScore": null,
"newsCount": 0,
"crowdScore": "0.0129",
"institutionalScore": "1.0000",
"fearGreed": 12,
"composite": "0.5065"
}
],
"updatedAt": "2026-06-12T15:08:35.828Z",
"source": "xoomar.com",
"docs": "https://xoomar.com/markets/api"
}One row per asset per window with the latest scores. Scores are strings to preserve precision; parse before comparing.
What People Build With This
Contrarian screens
Extreme bearish news sentiment plus washed-out crowd positioning is a classic capitulation pattern. Both layers arrive in the same row.
News-driven bot filters
Bots pause entries when 24h news sentiment crosses a threshold against the trade direction.
Cross-asset dashboards
17 assets in one call: render a sentiment heatmap across crypto, FX, indices, and commodities with zero joins.
Event studies
The history endpoint lets you measure how long sentiment shocks take to mean-revert per asset class.
Pricing and Fair Use
Free. No API key, no signup, no credit card. We rate limit per IP to keep the service fast for everyone; a 429 response carries a Retry-After header telling you exactly when to retry. Cache responses on your side where you can. If you are building something that needs guaranteed volume, contact us first instead of hammering the endpoint.
Response Shape
Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs }. The data field is an array of records with these fields:
| Field | Type | Description |
|---|---|---|
| slug | string | Asset slug (btc, gold, sp500...) |
| name | string | Display name |
| kind | string | crypto, fx, index, or commodity |
| window | string | Aggregation window: 24h or 7d |
| ts | string | When this score was computed (ISO) |
| newsScore | string | null | AI news sentiment, -1 (bearish) to +1 (bullish) |
| newsCount | number | null | Articles scored in the window |
| crowdScore | string | null | Crowd positioning layer from funding/ratio data |
| institutionalScore | string | null | Institutional layer from COT positioning |
| fearGreed | number | null | Crypto Fear & Greed Index (crypto assets only) |
| composite | string | null | Weighted blend of available layers, -1 to +1 |
Returns the latest score per asset per window. Per-asset history is available at /api/markets/sentiment/{slug}.
Numeric values arrive as strings where precision matters (prices, rates); parse with your language's decimal type for accounting-grade math. Rate limiting is fair-use per IP; a 429 response includes a Retry-After header. No authentication, no API key, no signup. Attribution is appreciated: xoomar.com/markets.
Frequently Asked Questions
How is the sentiment score calculated?
What does the composite score mean?
Which assets are covered?
Can I get historical sentiment?
Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.