Market Data

Real-time and historical pricing, volatility, crypto quotes, earnings-call transcripts, and CDS spreads. Get live equity quotes, OHLCV bars, crypto snapshots, and fundamental reference data in one call—sourced directly from Polygon and the data warehouse.

What's inside#

Live equity quotes and historical bars across all US equities and crypto pairs (Bitcoin, Ethereum, etc.) via Polygon; daily OHLCV data from the warehouse (equities, multiple timeframes: 1m–1mo); earnings-call transcript sentiment and topic extraction (AlphaSense source); credit-default swap spread history (WRDS Markit CDS, 2001–2008); ETF composition and reverse-lookup (holdings by ETF or which ETFs hold a stock); and technical analysis overlays (moving averages, RSI, MACD, Bollinger Bands).

Access#

1 credit/call. Unlocked on Free and up. Crypto quotes require Starter+.

Endpoints#

MethodPathDescription
GET/api/market/quote/{ticker}Live quote: price, bid/ask, day volume, change %.
GET/api/market/ohlc/{ticker}OHLCV bars: timeframe (1m/5m/15m/1h/1d/1wk/1mo), date range, limit.
GET/api/market/fundamentals/{ticker}Ref data: market cap, PE, forward PE, PB, EV/EBITDA, dividend yield, beta, sector, industry.
GET/api/market/corporate-actions/{ticker}Corporate actions (splits, dividends, spinoffs, mergers, delistings) on a rolling window.
GET/api/data/universeTradable universe: tickers, tier (mega/large/mid/small), permno, market cap, is_active. Filter by tier.
GET/api/data/freshnessData freshness status: which warehouse tables are fresh/stale/missing.
GET/api/data/calendarMarket calendar: trading sessions by exchange (XNYS/XNAS/ARCA) with open/close times.
GET/api/crypto/{ticker}Crypto quotes: Bitcoin, Ethereum, etc.; price, 24h change, 24h volume, 7-day daily bars.
GET/api/v2/transcripts/{ticker}Earnings-call transcripts: sentiment (prepared vs Q&A delta), topic extraction, call date.
GET/api/v2/credit/cds/{ticker}CDS spread history: credit risk signal (WRDS Markit; research use, ends 2008).
GET/api/v3/intel/chart/{ticker}Candlestick chart with technical overlays (RSI, MACD, Bollinger Bands) as base64 PNG.
GET/api/v3/intel/etf_holdingsETF composition: pass ?etf=SPY for holdings, or ?ticker=AAPL for which ETFs hold it.
GET/api/v3/intel/etf_summary/{ticker}ETF intelligence rollup: top holdings, commodity exposure (if applicable), available signals.

Free routes marked; all others deduct 1 credit. Crypto quotes (/crypto/{ticker}) require Starter+.

Examples#

Live quote (1 credit)#

Shell
1curl -H "Authorization: Bearer $TENGU_API_KEY" \2  "https://firm.tengu.co/api/market/quote/AAPL"3 4# Response:5# {6#   "ok": true,7#   "timestamp": "2026-07-05T14:30:00Z",8#   "quote": {9#     "ticker": "AAPL",10#     "price": 228.45,11#     "bid": 228.40,12#     "ask": 228.50,13#     "bid_size": 1200,14#     "ask_size": 1500,15#     "day_volume": 42850000,16#     "prev_close": 227.90,17#     "change": 0.55,18#     "change_pct": 0.2415,19#     "market_status": "open",20#     "as_of_ts": "2026-07-05T14:29:55Z",21#     "knowledge_ts": "2026-07-05T14:29:55Z",22#     "source": "polygon"23#   }24# }
Python
1import os, requests2 3r = requests.get(4    "https://firm.tengu.co/api/market/quote/AAPL",5    headers={"Authorization": f"Bearer {os.environ['TENGU_API_KEY']}"},6    timeout=30,7)8r.raise_for_status()9data = r.json()10quote = data["quote"]11print(f"{quote['ticker']} @ ${quote['price']} ({quote['change_pct']:+.2f}%)")12print(f"Bid/Ask: ${quote['bid']} / ${quote['ask']}")

Daily bars with date range (1 credit)#

Shell
1curl -H "Authorization: Bearer $TENGU_API_KEY" \2  "https://firm.tengu.co/api/market/ohlc/NVDA?timeframe=1d&start=2026-06-01&end=2026-07-05&limit=30"3 4# Response:5# {6#   "ok": true,7#   "timestamp": "2026-07-05T14:30:10Z",8#   "ticker": "NVDA",9#   "timeframe": "1d",10#   "bars": [11#     {12#       "ticker": "NVDA",13#       "open": 124.50,14#       "high": 127.80,15#       "low": 124.20,16#       "close": 127.65,17#       "volume": 38250000,18#       "vwap": 126.40,19#       "n_trades": 1250000,20#       "as_of_ts": "2026-07-04T20:00:00Z",21#       "knowledge_ts": "2026-07-04T20:00:00Z",22#       "bar_start": "2026-07-04T04:00:00Z",23#       "bar_end": "2026-07-04T20:00:00Z"24#     }25#   ]26# }
Python
1import os, requests2from datetime import datetime, timedelta3 4r = requests.get(5    "https://firm.tengu.co/api/market/ohlc/NVDA",6    params={7        "timeframe": "1d",8        "start": "2026-06-01",9        "end": "2026-07-05",10        "limit": 3011    },12    headers={"Authorization": f"Bearer {os.environ['TENGU_API_KEY']}"},13    timeout=30,14)15r.raise_for_status()16data = r.json()17bars = data["bars"]18print(f"{len(bars)} bars for {data['ticker']} ({data['timeframe']})")19for bar in bars[-5:]:20    print(f"{bar['as_of_ts']}: {bar['open']:.2f} → {bar['close']:.2f}")

Crypto quote — Bitcoin with 7-day series (1 credit, Starter+)#

Shell
1curl -H "Authorization: Bearer $TENGU_API_KEY" \2  "https://firm.tengu.co/api/crypto/BTC?vs=USD&series=true"3 4# Response:5# {6#   "ok": true,7#   "timestamp": "2026-07-05T14:30:20Z",8#   "ticker": "BTC",9#   "pair": "X:BTCUSD",10#   "vs": "USD",11#   "quote": {12#     "price": 64250.50,13#     "change_pct_24h": 2.15,14#     "change_24h": 1360.00,15#     "volume_24h": 28900000000.0,16#     "market_cap": null,17#     "as_of_ts": "2026-07-05T14:30:00Z"18#   },19#   "day": {20#     "open": 63200,21#     "high": 64800,22#     "low": 62950,23#     "close": 64250.50,24#     "volume": 28900000000.025#   },26#   "series_daily": [27#     {28#       "date": "2026-07-04",29#       "open": 62890,30#       "high": 63400,31#       "low": 62100,32#       "close": 63200,33#       "volume": 26500000000.034#     }35#   ],36#   "source": "vendor:polygon",37#   "as_of": "2026-07-05T14:30:00Z"38# }
Python
1import os, requests2 3r = requests.get(4    "https://firm.tengu.co/api/crypto/BTC",5    params={"vs": "USD", "series": True},6    headers={"Authorization": f"Bearer {os.environ['TENGU_API_KEY']}"},7    timeout=30,8)9r.raise_for_status()10data = r.json()11quote = data["quote"]12print(f"Bitcoin: ${quote['price']:,.2f} ({quote['change_pct_24h']:+.2f}% in 24h)")13if data.get("series_daily"):14    print(f"7-day low: ${min(b['low'] for b in data['series_daily']):,.2f}")