Stocks & Finance API
The Finance API returns real-time quotes, charts, fundamentals and analyst data as clean JSON.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary quote endpoint returns a symbol's price, change, market cap, volume, exchange, quote type and market state, and the broad action set covers charts, search, fundamentals, analyst ratings, holders, news, options, calendars and events. It is built for fintech apps, portfolio dashboards and market-research tools that need broad financial data from one endpoint. One ReefAPI key, one shared credit pool, the standard envelope.
Symbol formats, and what each instrument type actually fills in
Symbols follow Yahoo Finance conventions, and the shape of the answer changes with the instrument. An equity carries a market cap and a real volume; an FX pair carries neither. The single field people get wrong is currency, because it is not always the currency you would guess from the exchange. Every row below came back from one live multi-symbol quote call.
| Symbol form | Measured example | quoteType / exchange | What comes back |
|---|---|---|---|
| Plain US ticker | AAPL | EQUITY / NasdaqGS | currency USD, a real marketCap, volume and price |
| Ticker + exchange suffix | BP.L | EQUITY / LSE | currency GBp, meaning pence: 522.7 is 522.70 pence, not 522.70 pounds |
| Crypto pair | BTC-USD | CRYPTOCURRENCY / CCC | currency USD, marketCap present, marketState REGULAR around the clock |
| FX pair | EURUSD=X | CURRENCY / CCY | currency USD, marketCap null, volume 0 |
| Index, caret prefix | ^GSPC | INDEX / SNP | currency USD, marketCap null, the index level in price |
| Unrecognized string | NOTAREALTICKER123 | not returned at all | ok:true with quotes: [] and record_count 0, not an error |
Batch several symbols in one call with `symbols` (comma-separated) rather than `symbol`. Every timestamp in quote, chart and events is unix seconds in UTC, and on a chart it marks the bar's open: a 1d/5m AAPL chart started at 1787751000, which is 13:30:00Z, the 09:30 New York open.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/finance/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "apple"
}
}{
"ok": true,
"meta": {
"api": "finance",
"endpoint": "search",
"mode": "live",
"latency_ms": 1187.1,
"record_count": 7,
"bytes": 2727,
"cache_hit": false,
"completeness_pct": 100
},
"data": {
"query": "apple",
"quotes": [
{
"symbol": "AAPL",
"name": "[redacted-name]",
"exchange": "NMS",
"quoteType": "EQUITY",
"score": 34011
},
{
"symbol": "APLE",
"name": "[redacted-name]",
"exchange": "NYQ",
"quoteType": "EQUITY",
"score": 20013
},
{
"symbol": "AAPL.SW",
"name": "[redacted-name]",
"exchange": "EBS",
"quoteType": "EQUITY",
"score": 20008
}
]
}
}What the Stocks & Finance API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| quote | single or multi-symbol quote | Fintech apps call quote to get single or multi-symbol quote. | symbol, symbols |
| chart | OHLCV chart data | Portfolio dashboards call chart to get oHLCV chart data. | symbol, range, interval |
| search | symbol search | Analysts call search to get symbol search. | query, quotesCount |
| fundamentals | quoteSummary modules | Data teams call fundamentals to get quoteSummary modules. | symbol, modules |
| analyst | recommendations, upgrades/downgrades, price targets | Fintech apps call analyst to get recommendations, upgrades/downgrades, price targets. | symbol |
| holders | insider/institution/fund ownership and holder activity | Portfolio dashboards call holders to get insider/institution/fund ownership and holder activity. | symbol |
| news | Yahoo Finance news search | Analysts call news to get yahoo Finance news search. | query, count, symbol |
| options | option chain | Data teams call options to get option chain. | symbol, date |
| calendar | earnings/calendar quoteSummary modules | Fintech apps call calendar to get earnings/calendar quoteSummary modules. | symbol |
| events | dividends and splits from chart events | Portfolio dashboards call events to get dividends and splits from chart events. | symbol |
| screener_predefined | Yahoo saved screeners | Analysts call screener_predefined to get yahoo saved screeners. | scrIds, count, start |
| screener | Yahoo custom screener POST | Data teams call screener to get yahoo custom screener POST. | criteria, size, offset, sortField, sortType |
| market_summary | market summary indices | Fintech apps call market_summary to get market summary indices. | region |
| trending | trending symbols | Portfolio dashboards call trending to get trending symbols. | region, count |
| lookup | Yahoo symbol universe lookup | Analysts call lookup to get yahoo symbol universe lookup. | query, count |
| technicals | local technical indicators from chart OHLCV | Data teams call technicals to get local technical indicators from chart OHLCV. | symbol, range, interval, periods |
| economic | FRED economic series via official API | Fintech apps call economic to get fRED economic series via official API. | series, fred_api_key, limit, sort_order |
| v1/market/tickers | public NASDAQ/NYSE/AMEX ticker universe | Portfolio dashboards call v1/market/tickers to get public NASDAQ/NYSE/AMEX ticker universe. | limit |
| v1/search | RapidAPI-compatible alias for search | Analysts call v1/search to get rapidAPI-compatible alias for search. | query |
| v1/market/quotes | RapidAPI-compatible alias for quote | Data teams call v1/market/quotes to get rapidAPI-compatible alias for quote. | symbol, symbols |
| v1/stock/history | RapidAPI-compatible alias for chart | Fintech apps call v1/stock/history to get rapidAPI-compatible alias for chart. | symbol |
| v2/stock/history | RapidAPI-compatible alias for chart | Portfolio dashboards call v2/stock/history to get rapidAPI-compatible alias for chart. | symbol |
| v1/market/screener | RapidAPI-compatible alias for screener | Analysts call v1/market/screener to get rapidAPI-compatible alias for screener. | criteria, scrIds |
| v1/stock/modules | RapidAPI-compatible alias for quoteSummary modules | Data teams call v1/stock/modules to get rapidAPI-compatible alias for quoteSummary modules. | symbol |
| v1/market/news | RapidAPI-compatible alias for news | Fintech apps call v1/market/news to get rapidAPI-compatible alias for news. | query, symbol |
| v2/market/news | RapidAPI-compatible alias for news | Portfolio dashboards call v2/market/news to get rapidAPI-compatible alias for news. | query, symbol |
| v1/options | RapidAPI-compatible alias for options | Analysts call v1/options to get rapidAPI-compatible alias for options. | symbol |
| v1/most-active | options most-active contracts derived from Yahoo option chains | Data teams call v1/most-active to get options most-active contracts derived from Yahoo option chains. | symbol, symbols, count |
| v1/unusual-options-activity | unusual options activity derived from Yahoo option chain volume/open-interest | Fintech apps call v1/unusual-options-activity to get unusual options activity derived from Yahoo option chain volume/open-interest. | symbol, symbols, count |
| calendar/earnings | symbol earnings calendar via quoteSummary | Portfolio dashboards call calendar/earnings to get symbol earnings calendar via quoteSummary. | symbol |
| calendar/earnings_market | market-wide upcoming earnings calendar (all symbols) via Yahoo visualization | Analysts call calendar/earnings_market to get market-wide upcoming earnings calendar (all symbols) via Yahoo visualization. | start, end, date, count, offset, ... |
| calendar/dividends | symbol dividends via chart events | Data teams call calendar/dividends to get symbol dividends via chart events. | symbol |
| calendar/economic_events | global economic events via Yahoo visualization calendar | Fintech apps call calendar/economic_events to get global economic events via Yahoo visualization calendar. | start, end, count, offset |
| calendar/public_offerings | public offerings derived from Yahoo IPO calendar deal types | Portfolio dashboards call calendar/public_offerings to get public offerings derived from Yahoo IPO calendar deal types. | start, end, count, offset |
| calendar/ipo | IPO calendar via Yahoo visualization calendar | Analysts call calendar/ipo to get iPO calendar via Yahoo visualization calendar. | start, end, count, offset |
| calendar/stock-splits | symbol stock splits via chart events | Data teams call calendar/stock-splits to get symbol stock splits via chart events. | symbol |
| calendar/count | count of calendar events in a window (economic/ipo) | Fintech apps call calendar/count to get count of calendar events in a window (economic/ipo). | calendar_type, type, start, end |
| futures | futures chain: related contract months via Yahoo futuresChain | Portfolio dashboards call futures to get futures chain. | symbol |
| insights | trading insights: technical events, key technicals, valuation, recommendation, significant developments | Analysts call insights to get trading insights. | symbol, reportsCount |
| research | what analysts are saying: research-report metadata via Yahoo insights | Data teams call research to get what analysts are saying. | symbol, reportsCount |
| fund/fees | ETF/mutual-fund fees and expenses via Yahoo fundProfile | Fintech apps call fund/fees to get eTF/mutual-fund fees and expenses via Yahoo fundProfile. | symbol |
| fund/holdings | ETF/mutual-fund top holdings, sector weightings, asset allocation via Yahoo topHoldings | Portfolio dashboards call fund/holdings to get eTF/mutual-fund top holdings, sector weightings, asset allocation via Yahoo topHoldings. | symbol |
| recommendations | peer/similar symbols via Yahoo recommendationsbysymbol | Analysts call recommendations to get peer/similar symbols via Yahoo recommendationsbysymbol. | symbol |
| news/details | full news article content by uuid via Yahoo caas | Data teams call news/details to get full news article content by uuid via Yahoo caas. | uuid |
| screener/fields | queryable screener field catalog (filters) via Yahoo screeners | Fintech apps call screener/fields to get queryable screener field catalog (filters) via Yahoo screeners. | type |
| market/tickers-by-type | symbol lookup filtered by quote type (equity/etf/mutualfund/future/index/currency) | Portfolio dashboards call market/tickers-by-type to get symbol lookup filtered by quote type (equity/etf/mutualfund/future/index/currency). | query, type, count |
| v1/stock/profile | quoteSummary alias for assetProfile,summaryProfile | Analysts call v1/stock/profile to get quoteSummary alias for assetProfile,summaryProfile. | symbol |
| v1/stock/statistics | quoteSummary alias for defaultKeyStatistics | Data teams call v1/stock/statistics to get quoteSummary alias for defaultKeyStatistics. | symbol |
| v1/stock/financial-data | quoteSummary alias for financialData | Fintech apps call v1/stock/financial-data to get quoteSummary alias for financialData. | symbol |
| v1/stock/sec-filings | quoteSummary alias for secFilings,assetProfile | Portfolio dashboards call v1/stock/sec-filings to get quoteSummary alias for secFilings,assetProfile. | symbol |
| v1/stock/earnings | quoteSummary alias for earnings,earningsTrend,earningsHistory | Analysts call v1/stock/earnings to get quoteSummary alias for earnings,earningsTrend,earningsHistory. | symbol |
| v1/stock/calendar-events | quoteSummary alias for calendarEvents | Data teams call v1/stock/calendar-events to get quoteSummary alias for calendarEvents. | symbol |
| v1/stock/insider-holders | quoteSummary alias for insiderHolders | Fintech apps call v1/stock/insider-holders to get quoteSummary alias for insiderHolders. | symbol |
| v1/stock/balance-sheet | quoteSummary alias for balanceSheetHistory | Portfolio dashboards call v1/stock/balance-sheet to get quoteSummary alias for balanceSheetHistory. | symbol |
| v2/stock/balance-sheet | quoteSummary alias for balanceSheetHistory,balanceSheetHistoryQuarterly | Analysts call v2/stock/balance-sheet to get quoteSummary alias for balanceSheetHistory,balanceSheetHistoryQuarterly. | symbol |
| v1/stock/institution-ownership | quoteSummary alias for institutionOwnership | Data teams call v1/stock/institution-ownership to get quoteSummary alias for institutionOwnership. | symbol |
| v1/stock/insider-transactions | quoteSummary alias for insiderTransactions | Fintech apps call v1/stock/insider-transactions to get quoteSummary alias for insiderTransactions. | symbol |
| v1/stock/index-trend | quoteSummary alias for indexTrend | Portfolio dashboards call v1/stock/index-trend to get quoteSummary alias for indexTrend. | symbol |
| v1/stock/income-statement | quoteSummary alias for incomeStatementHistory,incomeStatementHistoryQuarterly | Analysts call v1/stock/income-statement to get quoteSummary alias for incomeStatementHistory,incomeStatementHistoryQuarterly. | symbol |
| v1/stock/cashflow-statement | quoteSummary alias for cashflowStatementHistory,cashflowStatementHistoryQuarterly | Data teams call v1/stock/cashflow-statement to get quoteSummary alias for cashflowStatementHistory,cashflowStatementHistoryQuarterly. | symbol |
| v1/stock/recommendation-trend | quoteSummary alias for recommendationTrend | Fintech apps call v1/stock/recommendation-trend to get quoteSummary alias for recommendationTrend. | symbol |
| v1/stock/net-share-purchase-activity | quoteSummary alias for netSharePurchaseActivity | Portfolio dashboards call v1/stock/net-share-purchase-activity to get quoteSummary alias for netSharePurchaseActivity. | symbol |
| v1/stock/upgrade-downgrade-history | quoteSummary alias for upgradeDowngradeHistory | Analysts call v1/stock/upgrade-downgrade-history to get quoteSummary alias for upgradeDowngradeHistory. | symbol |
| v1/insider-trades | quoteSummary alias for insiderTransactions,insiderHolders,netSharePurchaseActivity | Data teams call v1/insider-trades to get quoteSummary alias for insiderTransactions,insiderHolders,netSharePurchaseActivity. | symbol |
| v1/indicators/sma | local SMA indicator from chart OHLCV | Fintech apps call v1/indicators/sma to get local SMA indicator from chart OHLCV. | symbol |
| v1/indicators/rsi | local RSI indicator from chart OHLCV | Portfolio dashboards call v1/indicators/rsi to get local RSI indicator from chart OHLCV. | symbol |
| v1/indicators/macd | local MACD indicator from chart OHLCV | Analysts call v1/indicators/macd to get local MACD indicator from chart OHLCV. | symbol |
| v1/indicators/adx | local ADX indicator from chart OHLCV | Data teams call v1/indicators/adx to get local ADX indicator from chart OHLCV. | symbol |
| stock/get-futures-chain | apidojo-compatible alias for futures | Fintech apps call stock/get-futures-chain to get apidojo-compatible alias for futures. | symbol |
| stock/get-insights | apidojo-compatible alias for insights | Portfolio dashboards call stock/get-insights to get apidojo-compatible alias for insights. | symbol |
| stock/v3/get-insights | apidojo-compatible alias for insights | Analysts call stock/v3/get-insights to get apidojo-compatible alias for insights. | symbol |
| stock/get-what-analysts-are-saying | apidojo-compatible alias for research | Data teams call stock/get-what-analysts-are-saying to get apidojo-compatible alias for research. | symbol |
| stock/get-fees-and-expenses | apidojo-compatible alias for fund/fees | Fintech apps call stock/get-fees-and-expenses to get apidojo-compatible alias for fund/fees. | symbol |
| stock/get-top-holdings | apidojo-compatible alias for fund/holdings | Portfolio dashboards call stock/get-top-holdings to get apidojo-compatible alias for fund/holdings. | symbol |
| stock/v2/get-recommendations | apidojo-compatible alias for recommendations | Analysts call stock/v2/get-recommendations to get apidojo-compatible alias for recommendations. | symbol |
| news/v2/get-details | apidojo-compatible alias for news/details | Data teams call news/v2/get-details to get apidojo-compatible alias for news/details. | uuid |
| screeners/get-filters | apidojo-compatible alias for screener/fields | Fintech apps call screeners/get-filters to get apidojo-compatible alias for screener/fields. | none |
| market/get-tickers-by-quote-type | apidojo-compatible alias for market/tickers-by-type | Portfolio dashboards call market/get-tickers-by-quote-type to get apidojo-compatible alias for market/tickers-by-type. | query |
Call search from your stack
curl -X POST https://api.reefapi.com/finance/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"apple"}'import requests
r = requests.post(
"https://api.reefapi.com/finance/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "apple"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/finance/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "apple"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.finance.search with {"query":"apple"}.Who uses this API and why
- Portfolio dashboards call quote and chart to show live prices and history for a holding.
- Research tools use fundamentals and analyst to evaluate a company's financials and ratings.
- Trading apps use options, calendar and events to track expiries, earnings and catalysts.
Questions developers ask before integrating
Why is BP.L quoted at 522.7 when the share trades around five pounds?
Because London-listed shares are quoted in pence, and the response says so. A live quote on BP.L returned currency "GBp" with a lowercase p, and the fundamentals price module for the same symbol returned currencySymbol "£". GBp is pence, so 522.7 means 5.227 pounds. Divide by 100 before comparing it to anything denominated in GBP, and read the currency field rather than inferring it from the exchange suffix.
Are the quotes real-time or delayed, and by how much?
It depends on the exchange, and the answer is in the data rather than in a blanket policy. Call fundamentals with modules=price and read exchangeDataDelayedBy alongside quoteSourceName. Measured in one pass: AAPL returned 0 and "Nasdaq Real Time Price", BP.L returned 15 and "Delayed Quote", and the Nikkei 225 in a market_summary response returned 20. There is no single delay figure that covers the whole API.
After the close, is quote.price the last regular-session price or the after-hours print?
The regular-session price. On a measured AAPL call with marketState "POST", quote returned price 313.45, while the fundamentals price module for the same symbol at the same moment showed regularMarketPrice 313.45, postMarketPrice 311.48 and preMarketPrice 310.24. If you need the extended-hours print, take it from fundamentals modules=price. marketState values seen live include REGULAR, POST, POSTPOST and PREPRE.
Why does fundamentals return {raw, fmt} objects when quote returns plain numbers?
quote, chart, events, technicals and the calendar/count action are normalized to plain JSON numbers. fundamentals, analyst, the per-symbol calendar and market_summary pass through Yahoo's quoteSummary shape, where each value is an object such as {"raw": 309.9, "fmt": "309.90"}, sometimes with a longFmt as well. Read .raw for arithmetic and .fmt only for display. Handle both shapes if your code touches actions from each group.
I passed a range value that is not on the list and got one candle back. Why no error?
range and interval are ignore-on-invalid, so a token the API does not recognize is passed through to Yahoo instead of being rejected. A live chart call with range="banana" returned ok:true, echoed "range": "banana" back in the payload, and delivered a single daily candle. Compare data.range against what you sent, and treat a record_count of 1 on a multi-day request as a bad range token rather than a quiet market.
Why does a 5-year range with a 5-minute interval fail?
Yahoo does not serve intraday candles over long windows, and the refusal surfaces as ok:false with error code UPSTREAM_HTTP. Measured back to back: range=1d with interval=5m returned 79 points, while range=5y with interval=5m failed outright. Keep minute intervals to short ranges and use 1d or coarser for multi-year history.
Does technicals give me the full indicator series or just the latest value?
Just the latest value. A measured 6mo/1d call on AAPL returned twelve indicators as scalars or small objects, never arrays: sma20, sma50, ema20, ema50, rsi14, atr14, adx14, obv and vwap as single numbers, plus macd {line, signal, histogram}, bollinger20 {upper, middle, lower} and stochastic14 {k, d}. The periods parameter chooses which SMA and EMA lookbacks are computed; RSI, MACD, Bollinger, ATR and ADX are always included. For a series, pull chart and compute over the OHLCV points.
What does the analyst action actually contain?
Three quoteSummary modules: recommendationTrend, upgradeDowngradeHistory and financialData. In a measured AAPL call, recommendationTrend.trend[0] was {"period": "0m", "strongBuy": 6, "buy": 19, "hold": 14, "sell": 3, "strongSell": 2}, which is the analyst head count for the current month with earlier months in later entries. financialData carried recommendationKey "buy" and targetMeanPrice as {"raw": 324.45282, "fmt": "324.45"}.
What is the Stocks & Finance API?
Stocks & Finance API is a ReefAPI endpoint group for quotes, charts, fundamentals and market data. It returns live JSON through POST requests under /finance/v1.
Is the Stocks & Finance API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Stocks & Finance calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Stocks & Finance login or account?
No login to Stocks & Finance is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Stocks & Finance data?
The page example is captured from a live quote call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Stocks & Finance API use?
Stocks & Finance actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Stocks & Finance from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call finance actions with the same key, credit pool and JSON envelope used by normal REST requests.