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:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Max requests per day (depends on plan: 1,000 free, 5,000 advanced, 10,000 pro) |
| X-RateLimit-Remaining | Requests remaining in the current window |
| X-RateLimit-Reset | Unix 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.
| Parameter | Type | Description |
|---|---|---|
| category | string | Filter by category: crypto, markets, general |
| symbol | string | Filter by ticker: BTC, AAPL, TSLA, XAU, etc. |
| since | string | ISO 8601 timestamp, e.g. 2026-05-14T00:00:00Z |
| limit | integer | Results per page (max 200, default 50) |
| offset | integer | Page offset for pagination |
| q | string | Full-text search in title/description Coming soon |
curl "https://api.dev.thefeedapi.com/v1/news?symbol=AAPL&limit=2"Example Response
| Field | Type | Description |
|---|---|---|
status | string | "ok" on success |
count | int | Number of articles returned |
next_page | string | URL for the next page (included when more results exist) |
articles | array | Array of article objects (see below) |
Article Object Fields
| Field | Type | Description |
|---|---|---|
id | int | Unique article identifier |
source | string | Source name (e.g. bloomberg-crypto) |
url | string | Original article URL |
title | string | Article headline |
description | string | Article excerpt or summary |
category | string | Source category (crypto, markets, general) |
sentiment | float | Sentiment score from -1.0 (negative) to 1.0 (positive) |
confidence | float | Article quality score from 0–1 (see Quality Scoring) |
quality_signals | object | Source reliability, freshness, and length signals |
symbols | array | Detected tickers with ticker and type fields |
published_at | string | Article publication time (ISO 8601) |
fetched_at | string | Time the article was ingested (ISO 8601) |
Click "Send Request" to try the API
List Sources
Returns all 32 RSS feeds being polled, with their URLs and category tags.
This endpoint accepts no query parameters — it returns all sources.
Response FormatReturns an array of source objects:
| Field | Type | Description |
|---|---|---|
name | string | Short identifier (e.g. bloomberg, cointelegraph) |
url | string | RSS feed URL |
tags | string | Category — one of crypto, stocks, economics, commodities |
description | string | Human-readable summary of the source |
country | string | ISO country code (e.g. US, GB, JP) |
language | string | ISO language code (e.g. en, ja) |
reliability | int (0–100) | Editorial credibility score. Bloomberg/FT = 95, WSJ = 93, CoinDesk = 70, CoinTelegraph = 65, DailyHodl = 35 |
curl https://api.dev.thefeedapi.com/v1/sources | jq '.[].name'Example Response
Health Check
Simple endpoint to verify the API is running and get the total article count.
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:
| Field | Type | Description |
|---|---|---|
confidence | float (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_reliability | int (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_score | float (0–1) | How recent the article is. Decays from 1.0 (just published) to 0.1 (24 hours old). |
quality_signals.is_headline | bool | true if the title is under 100 characters — likely a well-formed news headline rather than clickbait. |
quality_signals.article_length | int | Combined 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.
| Step | URL |
|---|---|
| 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:
| Type | Example Tickers |
|---|---|
| Crypto | BTC, ETH, SOL, XRP, ADA, DOGE, AVAX, DOT, LINK, SUI, NEAR, APT, ARB, OP, PEPE, SHIB, BONK |
| Stocks | AAPL, MSFT, NVDA, GOOGL, AMZN, META, TSLA, NFLX, JPM, V, MA, COIN, MSTR |
| Indices | SPY/SP500, QQQ/Nasdaq, DIA/DJIA, IWM/Russell, VIX |
| Commodities | XAU/Gold, XAG/Silver, CL/Crude, NG/Natural Gas, HG/Copper |
| Currencies | USD, 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
| Status | Reason |
|---|---|
| 429 | Rate limit exceeded. Check X-RateLimit-Reset header. |
| 405 | Only GET requests are supported. |
| 500 | Internal 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) andquality_signalson 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_pagein 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