Overview

The Feed API ingests 32 news sources every 60 seconds — including Bloomberg, Cointelegraph, WSJ, Financial Times, CoinDesk, and more — extracts matching stock, crypto, and commodity tickers from every article, and serves them through a simple REST API designed for algorithmic trading bots.

Every article includes a sentiment score (-1.0 to 1.0) and a list of tickers mentioned, so you can filter by symbol and feed the results directly into your trading strategy.

# Quick test — this works right now
curl https://api.dev.thefeedapi.com/v1/news?symbol=BTC&limit=3 | jq

Authentication

Required All API requests require an API key. Sign up free at thefeedapi.com and generate one on your dashboard.

Pass it as a header:

X-API-Key: fapi_your-api-key-here

Or as a query parameter:

curl "https://api.dev.thefeedapi.com/v1/news?symbol=BTC&api_key=fapi_..." | jq

Rate Limits

Every response includes rate limit headers so you can track your usage:

HeaderDescription
X-RateLimit-LimitMax requests per day (depends on plan: 1,000 free, 5,000 advanced, 10,000 pro)
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets

When exceeded, the API returns 429 Too Many Requests with a JSON body containing retry_after (seconds) and reset_at (ISO 8601). Free tier resets daily at midnight UTC.

List Articles

Returns paginated articles from all 32 sources, filtered by category or symbol.

GET /api/v1/news
Query Parameters
ParameterTypeDescription
categorystringFilter by category: crypto, markets, general
symbolstringFilter by ticker: BTC, AAPL, TSLA, XAU, etc.
sincestringISO 8601 timestamp, e.g. 2026-05-14T00:00:00Z
limitintegerResults per page (max 200, default 50)
offsetintegerPage offset for pagination
qstringFull-text search in title/description Coming soon
Example Request
curl "https://api.dev.thefeedapi.com/v1/news?symbol=AAPL&limit=2"
Example Response
FieldTypeDescription
statusstring"ok" on success
countintNumber of articles returned
next_pagestringURL for the next page (included when more results exist)
articlesarrayArray of article objects (see below)

Article Object Fields

FieldTypeDescription
idintUnique article identifier
sourcestringSource name (e.g. bloomberg-crypto)
urlstringOriginal article URL
titlestringArticle headline
descriptionstringArticle excerpt or summary
categorystringSource category (crypto, markets, general)
sentimentfloatSentiment score from -1.0 (negative) to 1.0 (positive)
confidencefloatArticle quality score from 0–1 (see Quality Scoring)
quality_signalsobjectSource reliability, freshness, and length signals
symbolsarrayDetected tickers with ticker and type fields
published_atstringArticle publication time (ISO 8601)
fetched_atstringTime the article was ingested (ISO 8601)
{ "status": "ok", "count": 2, "next_page": "/api/v1/news?offset=2&limit=2&symbol=AAPL", "articles": [ { "id": 12345, "source": "bloomberg-crypto", "url": "https://...", "title": "Apple explores crypto integration...", "description": "...", "category": "crypto", "sentiment": 0.32, "confidence": 0.92, "quality_signals": { "source_reliability": 95, "freshness_score": 0.99, "is_headline": true, "article_length": 312 }, "symbols": [ { "ticker": "AAPL", "type": "stock" }, { "ticker": "BTC", "type": "crypto" } ], "published_at": "2026-05-14T22:30:00Z", "fetched_at": "2026-05-14T22:31:00Z" } ] }
Try It
Click "Send Request" to try the API

List Sources

Returns all 32 RSS feeds being polled, with their URLs and category tags.

GET /api/v1/sources

This endpoint accepts no query parameters — it returns all sources.

Response Format

Returns an array of source objects:

FieldTypeDescription
namestringShort identifier (e.g. bloomberg, cointelegraph)
urlstringRSS feed URL
tagsstringCategory — one of crypto, stocks, economics, commodities
descriptionstringHuman-readable summary of the source
countrystringISO country code (e.g. US, GB, JP)
languagestringISO language code (e.g. en, ja)
reliabilityint (0–100)Editorial credibility score. Bloomberg/FT = 95, WSJ = 93, CoinDesk = 70, CoinTelegraph = 65, DailyHodl = 35
Example Request
curl https://api.dev.thefeedapi.com/v1/sources | jq '.[].name'
Example Response
[ { "name": "bloomberg", "url": "https://www.bloomberg.com/feed/site", "tags": "economics", "reliability": 95 }, { "name": "cointelegraph", "url": "https://cointelegraph.com/rss", "tags": "crypto", "reliability": 65 } ]

Health Check

Simple endpoint to verify the API is running and get the total article count.

GET /api/v1/health
Example Response
{ "status": "ok", "articles_stored": 793 }

Python Example

Fetch news for a specific symbol and print matching articles:

# fetch_news.py
import requests

API = "https://dev.thefeedapi.com"

# Get all Bitcoin-related news
resp = requests.get(f"{API}/api/v1/news", params={
    "symbol": "BTC",
    "limit": 10,
})
data = resp.json()

# Print usage info from headers
print(f"Remaining: {resp.headers.get('X-RateLimit-Remaining')}")
print(f"Reset at:  {resp.headers.get('X-RateLimit-Reset')}")
print()

for article in data["articles"]:
    tickers = [s["ticker"] for s in article["symbols"]]
    sent = article["sentiment"]
    print(f"[{article['source']:20s}] {article['title'][:60]}")
    print(f"  Tickers: {tickers}  Sentiment: {sent:+.2f}")
    print()

Trading Bot Integration

Example of a simple contrarian strategy: bullish news → short, bearish news → long.

# Simple sentiment-based trading signal
import requests

resp = requests.get("https://api.dev.thefeedapi.com/v1/news", params={
    "symbol": "BTC",
    "limit": 5,
    "since": "2026-05-14T22:00:00Z"
})

avg_sentiment = sum(
    a["sentiment"] for a in resp.json()["articles"]
) / max(len(resp.json()["articles"]), 1)

if avg_sentiment > 0.5:
    print("Signal: SHORT BTC (market overly bullish)")
elif avg_sentiment < -0.5:
    print("Signal: LONG BTC (market overly bearish)")
else:
    print("Signal: NEUTRAL")

This pattern works with any symbol — AAPL, ETH, XAU, TSLA, SOL — and any timeframe.

Quality Scoring

Every article now includes a confidence score (0–1) and quality_signals object to help you gauge how much to trust each piece of news:

FieldTypeDescription
confidencefloat (0–1)Blend of source reliability (50% weight), freshness (30%), and a baseline (20%). Headlines get a small boost; very short articles are penalized.
quality_signals.source_reliabilityint (0–100)Static credibility score per domain. Bloomberg / Financial Times = 95, WSJ = 93, NYT = 90, CNBC = 88, CoinDesk = 70, CoinTelegraph = 65, DailyHodl / ZyCrypto = 35, etc.
quality_signals.freshness_scorefloat (0–1)How recent the article is. Decays from 1.0 (just published) to 0.1 (24 hours old).
quality_signals.is_headlinebooltrue if the title is under 100 characters — likely a well-formed news headline rather than clickbait.
quality_signals.article_lengthintCombined character count of title + description. Longer articles tend to be more substantive.

Example response snippet:

"confidence": 0.85,
"quality_signals": {
  "source_reliability": 95,
  "freshness_score": 0.99,
  "is_headline": true,
  "article_length": 224
}

Pagination

Use limit and offset to page through results. The response includes next_page when more results exist.

StepURL
Page 1/api/v1/news?limit=50
Page 2/api/v1/news?offset=50&limit=50
Page 3/api/v1/news?offset=100&limit=50

The next_page field preserves all existing query parameters (category, symbol, since).

Symbol Reference

The API currently indexes 280+ tickers across 5 asset classes. Here's a sample:

TypeExample Tickers
CryptoBTC, ETH, SOL, XRP, ADA, DOGE, AVAX, DOT, LINK, SUI, NEAR, APT, ARB, OP, PEPE, SHIB, BONK
StocksAAPL, MSFT, NVDA, GOOGL, AMZN, META, TSLA, NFLX, JPM, V, MA, COIN, MSTR
IndicesSPY/SP500, QQQ/Nasdaq, DIA/DJIA, IWM/Russell, VIX
CommoditiesXAU/Gold, XAG/Silver, CL/Crude, NG/Natural Gas, HG/Copper
CurrenciesUSD, EUR, GBP, JPY, CNY

Search by ticker only (?symbol=BTC), not by the long name. Both ticker and full name are matched during ingestion.

Error Codes

StatusReason
429Rate limit exceeded. Check X-RateLimit-Reset header.
405Only GET requests are supported.
500Internal server error. Try again in a few seconds.

Error responses are JSON with an error field.

Changelog

2026-05-15

  • ✅ Quality scoring: confidence (0–1) and quality_signals on every article
  • ✅ Source reliability scores (Bloomberg/FT = 95, WSJ = 93, NYT = 90, etc.)
  • ✅ Freshness decay score per article
  • ✅ Headline detection and article length signals

2026-05-14

  • ✅ Symbol extraction engine launched (280+ tickers, 5 asset classes)
  • ?symbol= query parameter for filtering articles by ticker
  • ✅ Rate limiting: 1,000 requests/day per IP with X-RateLimit-* headers
  • ✅ Pagination via limit + offset + next_page in responses
  • ✅ 774 historical articles backfilled with symbol tags
  • ✅ 32 RSS sources live and polling every 60s
  • ✅ Sentiment scoring on every article

Earlier

  • ✅ MVP deployed: Go + SQLite + Cloudflare + Let's Encrypt
  • ✅ SSL/HTTPS with automatic HTTP→HTTPS redirect
  • ✅ CORS enabled for browser-based access