We’ve shipped v2 across the entire FinBrain stack — the REST API, Python SDK (v0.2.0), and MCP server (v0.2.0). This release simplifies how you interact with every endpoint and adds powerful new capabilities.
What Changed
Simplified API Calls
The market parameter is no longer required for per-ticker endpoints. In v1, you had to specify the market alongside the ticker. Now you just pass the symbol:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
# v1 (old)# fb.sentiments.ticker("S&P 500", "AAPL")
# v2 (new) — just the tickerdf = fb.sentiments.ticker("AAPL", as_dataframe=True)Bearer Token Authentication
v2 uses standard Bearer token authentication instead of query-string tokens:
# v2 — Bearer token (recommended)curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.finbrain.tech/v2/sentiment/AAPL"Query parameter auth (?apiKey=) still works, and the legacy ?token= parameter is supported for backward compatibility.
Standardized Response Format
Every v2 endpoint returns the same envelope structure:
{ "success": true, "data": { ... }, "meta": { "timestamp": "2026-03-12T12:00:00.000Z" }}No more guessing the response shape — success tells you if it worked, data has your payload, and meta has request metadata.
Updated Field Names
Response fields have been cleaned up for consistency:
| v1 | v2 |
|---|---|
transaction | transactionType |
signal | action |
representative | politician |
ticker | symbol |
followersCount | followerCount |
dateFrom / dateTo | startDate / endDate |
All field names now use camelCase, and numeric values are returned as numbers (not strings).
New Capabilities
11 Screener Endpoints
Screen and filter data across entire markets in a single request — no more looping through tickers one by one:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
# Screen insider transactions across S&P 500insider_df = fb.screener.insider_trading(market="S&P 500", as_dataframe=True)print(insider_df)
# Screen House trades across all US stockshouse_df = fb.screener.house_trades(region="US", as_dataframe=True)print(house_df)
# Screen sentiment across NASDAQsentiment_df = fb.screener.sentiment(market="NASDAQ", as_dataframe=True)print(sentiment_df)Available screeners: sentiment, predictions (daily/monthly), insider trading, House trades, Senate trades, analyst ratings, put/call ratio, LinkedIn metrics, app ratings, and news.
Recent Activity Endpoints
Get the latest data entries across all tracked tickers without specifying a symbol:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
# Most recent news across all tickersnews_df = fb.recent.news(limit=20, as_dataframe=True)print(news_df)
# Most recent analyst ratingsratings_df = fb.recent.analyst_ratings(limit=20, as_dataframe=True)print(ratings_df)News Endpoint with Sentiment
The new /v2/news/{symbol} endpoint returns article headlines, sources, URLs, and AI-powered sentiment scores for each article:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
df = fb.news.ticker("TSLA", as_dataframe=True)
for _, article in df.iterrows(): sentiment = article["sentiment"] sent_str = f"{sentiment:.3f}" if sentiment is not None else "N/A" print(f"[{sent_str}] {article['headline']}")Regions Discovery
Programmatically discover which markets are available in each region:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
regions = fb.available.regions()print(regions)Full Async Support
The Python SDK now includes AsyncFinBrainClient for non-blocking workflows:
import asynciofrom finbrain import AsyncFinBrainClient
async def main(): fb = AsyncFinBrainClient(api_key="YOUR_API_KEY")
# Fetch multiple tickers concurrently results = await asyncio.gather( fb.sentiments.ticker("AAPL", as_dataframe=True), fb.sentiments.ticker("MSFT", as_dataframe=True), fb.sentiments.ticker("GOOGL", as_dataframe=True), )
for df in results: print(df.head())
asyncio.run(main())Built-in Plotting
The SDK now includes built-in visualization for every dataset:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
fb.plot.predictions("AAPL")fb.plot.sentiments("TSLA")fb.plot.options("NVDA")fb.plot.linkedin("META")fb.plot.app_ratings("UBER", store="app")MCP Server v0.2.0
The FinBrain MCP server now uses the v2 API under the hood. New queries you can ask your AI assistant:
- “Show me the most bullish insider buying this week”
- “What are the latest congressional trades?”
- “Screen S&P 500 stocks by sentiment”
- “What markets does FinBrain cover?”
Your MCP configuration stays the same — just upgrade the package:
pip install --upgrade finbrain-mcpUpdated REST API Endpoints
| Dataset | v2 Endpoint |
|---|---|
| Sentiment | /v2/sentiment/{symbol} |
| Insider Trades | /v2/insider-trading/{symbol} |
| House Trades | /v2/congress/house/{symbol} |
| Senate Trades | /v2/congress/senate/{symbol} |
| Analyst Ratings | /v2/analyst-ratings/{symbol} |
| Put/Call Ratio | /v2/put-call-ratio/{symbol} |
| LinkedIn Metrics | /v2/linkedin/{symbol} |
| App Ratings | /v2/app-ratings/{symbol} |
| News | /v2/news/{symbol} |
| AI Predictions | /v2/predictions/{type}/{symbol} |
Getting Started
Upgrade the Python SDK to start using v2:
pip install --upgrade finbrain-pythonQuestions about migrating to v2? Reach out at info@finbrain.tech