Whether the financial-news headlines on a stock are positive or negative — AI-scored, with links.
/api/newsFinancial-news headlines published in the last 30 days for any US ticker from TradingKey, MarketBeat, MarketScreener and Yahoo Finance fallback feeds, with AI sentiment (keyword fallback), source links, publishers, dates and `bullSummary`/`bearSummary` recaps. `sentimentWindow` states the exact headline count, time limit, included range and equal-weight score method behind the top-level sentiment. Older feed entries and future-dated rows are rejected before classification, so a newly generated snapshot cannot label historical news as current. Provider-controlled `sourceUrl` values are published only when they are absolute HTTP(S) URLs without embedded credentials. Before replacing last-good data, the cache verifies headline/count/sentiment agreement, exact oldest/newest dates, safe URLs, classification coverage and reconciliation between every provider status and aggregate health. An inconsistent builder result is treated as a failed refresh, never as fresh news. `quality` discloses whether classification was AI, mixed or lexicon fallback and its exact coverage. Where a model reads the text, the response states its version (`sentimentModel`), never the supplier behind it: which vendor runs the model is an implementation detail that can change without the reading changing, and it belongs in the privacy documents that have to name sub-processors. `insights` classifies the main catalysts and reports publisher/provider diversity, source concentration, bull/bear disagreement and evidence confidence. Duplicate stories keep their corroborating sources and feeds: `crossProviderCorroborationRate` measures that extra coverage and contributes to confidence, while a lack of it is disclosed rather than presented as independently confirmed news. Lexicon fallback also lowers confidence explicitly. Per-source `providerStatus` and aggregate `providerHealth` describe the returned snapshot. The server caches each ticker for 30 minutes and refreshes expired data in the background. Sequential `fresh=1` requests respect a five-minute minimum after a successful build; `cache.refreshDeferredReason`, `cache.retryAfterSeconds` and `Retry-After` disclose the deferral without repeating provider or AI work. If a refresh fails, it preserves the last good snapshot for less than 24 hours from its original `updatedAt`, with `cache.status=stale` and `freshness.stale=true`. That last good snapshot is also kept on disk, so a deploy or a process restart no longer throws it away: the first reader afterwards is served the stored answer instead of a 502 when every provider happens to be failing at that moment. Failed refreshes impose a five-minute per-ticker cooldown. Empty coverage with provider errors is a failed refresh, not fresh neutral sentiment. HTTP responses are private and no-store; this does not disable the server cache. Repeated `ticker` or `fresh` parameters return HTTP 400 rather than silently selecting one value. `dayChangePct` is the stock's price move on the day the snapshot was built, given as context for the headlines and taken from the same quote source as the rest of the site. `insights.evidence` counts the publishers and providers behind the reading (`publisherCount`, `providerCount`, `dominantPublisher` and its share, `crossProviderCorroboratedHeadlines`, `directionalHeadlineCount`, `disagreementIndex`), and `insights.confidence.factors` breaks confidence into sample depth, publisher diversity, provider availability and classification coverage. Each headline keeps the `corroboration.urls` its duplicates came from, so the corroboration can be checked rather than trusted. The whole response is declared field by field in the frozen contract at `/api/v1/schema?product=stock-news`, which the test suite validates every response against — including an outage, an empty feed and a cached fallback, the cases a healthy sample never shows. The same response is also served at `/api/stock-news` (alias of this path, byte-identical behavior).
Use it toCheck whether the news flow on a stock is positive or negative — the press angle, not social.
Raspberry requests TradingKey, MarketBeat and MarketScreener first, then uses Yahoo Finance as a fallback. Headlines are deduplicated across providers. The API never hides a blocked or empty provider: inspect providerStatus and providerHealth in every response.
Send your ra_live_… key in the x-api-key header. Pick your language:
curl "https://raspberrytrades.com/api/news?ticker=NVDA" \
-H "x-api-key: ra_live_your_key_here"tickerfreshx-api-key| Parameter | Type | Description |
|---|---|---|
ticker | string | US stock symbol, e.g. NVDA (required) |
fresh | 0 | 1 | 1 = request a refresh; concurrent requests share work and a five-minute failure cooldown still applies (optional) |
x-api-key | header | Your API key — news scope (required) |
Example, not a live result. Field shapes are exact; the values, prices and timestamps are illustrative. Call the endpoint for current data.
{
"ticker": "NVDA",
"updatedAt": "2026-09-18T14:00:00Z",
"source": "multi-source",
"sources": ["tradingkey", "marketbeat", "marketscreener", "yahoo-finance"],
"providerStatus": [
{ "provider": "tradingkey", "status": "ok", "count": 4 },
{ "provider": "marketbeat", "status": "ok", "count": 3 },
{ "provider": "marketscreener", "status": "ok", "count": 2 },
{ "provider": "yahoo-finance", "status": "ok", "count": 11 }
],
"providerHealth": {
"status": "healthy",
"checked": 4,
"operational": 4,
"withContent": 4,
"empty": 0,
"errors": 0
},
"freshness": {
"status": "current",
"maxAgeDays": 30,
"stale": false,
"newestPublishedAt": "2026-09-18T11:20:00Z",
"oldestPublishedAt": "2026-08-26T09:00:00Z"
},
"cache": {
"status": "fresh",
"ageSeconds": 0,
"refreshing": false,
"lastAttemptAt": "2026-09-18T14:00:00Z",
"lastAttemptFailed": false,
"lastAttemptProviderHealth": { "status": "healthy", "checked": 4, "operational": 4, "withContent": 4, "empty": 0, "errors": 0 },
"retryAfterSeconds": 0
},
"count": 20,
"sentiment": { "label": "bullish", "score": 0.34, "bullish": 13, "bearish": 2, "neutral": 5 },
"sentimentWindow": { "maxAgeDays": 30, "headlineCount": 20, "newestIncludedAt": "2026-09-18T11:20:00Z", "oldestIncludedAt": "2026-08-26T09:00:00Z", "method": "equal-weight-headline-score-mean" },
"bullSummary": "Coverage highlights AI-chip demand and new design wins.",
"bearSummary": "A few pieces flag valuation and competition risk.",
"headlines": [
{
"title": "Nvidia extends AI lead with new datacenter deal",
"summary": "The chipmaker announced…",
"url": "https://www.reuters.com/...",
"source": "reuters.com",
"provider": "marketbeat",
"publishedAt": "2026-09-18T11:20:00Z",
"sentiment": "bullish"
}
]
}Create a free account, copy your ra_live_… key and make your first call to https://raspberrytrades.com/api/news.
Keep your key on your server — never ship it in front-end code.