Developers
MoodTape API
Get live news sentiment for any stock or market as JSON. Use it in trading bots, spreadsheets, alerts and dashboards.
Authentication
API access is part of the Pro plan. Open the dashboard, choose API key from your account menu and create a key. Send it in the x-api-key header with every request. Keep it secret: anyone with the key can use your quota.
Endpoint
GET /api/v1/sentiment
| Parameter | Type | Description |
|---|---|---|
symbol | string | Stock or theme, e.g. RELIANCE, INFY, NVDA, NIFTY. Returns news about that symbol from the last 7 days. |
market | IN · US · ALL | Used when no symbol is given. Market-wide headlines from the last 48 hours. Default ALL. |
limit | 1–100 | Number of headlines to return. Default 30. |
Example
curl "https://YOUR-DOMAIN/api/v1/sentiment?symbol=INFY&limit=5" \ -H "x-api-key: mt_your_key_here"
{
"query": { "symbol": "INFY", "name": "Infosys" },
"mood": 66,
"mood_label": "Greed",
"net_score": 0.214,
"counts": { "Bullish": 7, "Neutral": 3, "Bearish": 2 },
"headline_count": 12,
"tickers": [ { "sym": "INFY", "name": "Infosys", "sector": "IT", "mkt": "IN", "n": 12, "avg": 0.31 } ],
"headlines": [
{
"title": "Infosys raises FY27 revenue guidance, announces buyback",
"source": "Example News",
"url": "https://…",
"published_at": "2026-10-07T05:10:00.000Z",
"score": 0.69,
"label": "Bullish",
"tickers": ["INFY"]
}
],
"fetched_at": "2026-10-07T05:30:00.000Z",
"usage": { "used": 14, "limit": 1000 }
}
Fields
- score: −1 (very bearish) to +1 (very bullish). Above +0.15 is Bullish, below −0.15 is Bearish.
- mood: 0 to 100. Under 20 Extreme fear, 20–39 Fear, 40–60 Neutral, 61–80 Greed, above 80 Extreme greed.
- net_score: confidence-weighted average score of all headlines.
- tickers: stocks, indices and themes named in the headlines, with their average score.
Errors
| Status | code | Meaning |
|---|---|---|
| 401 | invalid_key | Missing or unknown API key. |
| 402 | pro_required | The account behind the key is not on Pro. |
| 429 | quota | Daily call limit reached. Resets at 00:00 UTC. |
| 503 | api_not_configured | The API is not enabled on this deployment. |
Every error body looks like {"error":{"code":"quota","message":"…"}}.
Code samples
Python
import requests
r = requests.get("https://YOUR-DOMAIN/api/v1/sentiment",
params={"symbol": "RELIANCE"},
headers={"x-api-key": "mt_your_key_here"})
d = r.json()
print(d["mood"], d["mood_label"], d["net_score"])
JavaScript
const r = await fetch("https://YOUR-DOMAIN/api/v1/sentiment?market=IN", {
headers: { "x-api-key": "mt_your_key_here" }
});
const d = await r.json();
console.log(d.mood_label, d.tickers.slice(0, 5));
Google Sheets (Apps Script)
function MOODTAPE(symbol) {
const r = UrlFetchApp.fetch("https://YOUR-DOMAIN/api/v1/sentiment?symbol=" + symbol,
{ headers: { "x-api-key": "mt_your_key_here" } });
return JSON.parse(r.getContentText()).net_score;
}
Fair use
Results are cached for a few minutes, so polling more often than every 5 minutes returns the same data. Headlines belong to their publishers; link to the original article when you display them.