Products

Market Data

Market Data provides available equity and crypto prices, historical bars, and

Live API

reference data. A quote may come from a warehouse observation, a cached source, or a vendor fallback. Availability and observation time determine whether it is suitable for your use case; a successful request does not guarantee real-time data.

What's inside#

Quote and OHLCV routes expose prices and available market fields. Reference, corporate-action, calendar, and ETF routes provide their respective records. Coverage varies by symbol, source, and date. Full transcript text belongs to Transcripts & Corporate Events, with separate coverage and paid access requirements.

For the separate SSE interface, see Streaming.

Interpret quote provenance and freshness#

The quote's source identifies the returned provider or warehouse provenance. Use these fields together rather than treating the response time as a market time.

FieldMeaning
source_as_of_tsSource observation time when known; null when the provider omitted it
retrieved_atTime the service retrieved or observed the returned record
timestamp_basissource_observation, retrieval_time, or unknown; qualifies the legacy quote timestamp
freshness_statusobserved, stale, or unknown; observed alone does not guarantee a real-time price
price_age_secondsAge derived from a known source observation; nullable
is_staleNullable source staleness indicator; null means unknown, not false
price_basisSource price basis when supplied, such as the relevant price or session context; nullable

When timestamp_basis is retrieval_time, the compatibility timestamp can be recent even if the underlying price is old. source_as_of_ts, price_age_seconds, and is_stale remain null when source time is missing, and freshness_status is unknown. Neither retrieved_at nor the response envelope's timestamp proves that a trade or quote occurred then. Interpret known observations against the market session and your own freshness requirement.

Access#

The available data routes below cost 1 credit per successful call and are included on Free and up. System health is exempt from credit charges. The legacy CDS route is currently unavailable and costs 0 credits.

Endpoints#

MethodPathPlan / creditsDescription
GET/api/market/quote/{ticker}Free+ / 1Available quote: price, nullable bid/ask, volume, change, and source observation fields.
GET/api/v3/fundamentals/pricesFree+ / 1OHLCV bars for ?ticker=: interval (second/minute/hour/day/week/month) with interval_multiplier, start_date/end_date window, limit (default 1000, max 5000). Pass asset_class=crypto for crypto.
GET/api/market/fundamentals/{ticker}Free+ / 1Ref data: market cap, PE, forward PE, PB, EV/EBITDA, dividend yield, beta, sector, industry.
GET/api/market/corporate-actions/{ticker}Free+ / 1Corporate actions (splits, dividends, spinoffs, mergers, delistings) on a rolling window.
GET/api/data/universeFree+ / 1Tradable universe: tickers, tier (mega/large/mid/small), permno, market cap, is_active. Filter by tier.
GET/api/v3/monitoring/system_healthFree+ / 0Aggregate system health: per-subsystem status and score, with data staleness.
GET/api/data/calendarFree+ / 1Market calendar: trading sessions by exchange (XNYS/XNAS/ARCA) with open/close times.
GET/api/crypto/{ticker}Free+ / 1Crypto quotes: Bitcoin, Ethereum, etc.; price, 24h change, 24h volume, optional daily bars.
GET/api/v2/transcripts/{ticker}Free+ / 1Legacy transcript-summary route; not the full-text archive. Check availability and source fields.
GET/api/v2/credit/cds/{ticker}Unavailable / 0Legacy CDS route; backing data is pending. See Credit & Fixed-Income for the credit API.
GET/api/v3/intel/chart/{ticker}Free+ / 1Candlestick chart with technical overlays (RSI, MACD, Bollinger Bands) as base64 PNG.
GET/api/v3/intel/etf_holdingsFree+ / 1ETF composition: pass ?etf=SPY for holdings, or ?ticker=AAPL for which ETFs hold it.
GET/api/v3/intel/etf_summary/{ticker}Free+ / 1ETF intelligence rollup: top holdings, commodity exposure (if applicable), available signals.

Prices apply to the exact paths listed here; other transcript and credit routes have their own product costs and plan requirements.

Examples#

Read a quote (1 credit)#

Shell
1curl -H "Authorization: Bearer $TENGU_API_KEY" \2  "https://firm.wealthnow.io/api/market/quote/AAPL"3 4# Illustrative quote fields; not a live price or freshness claim:5# {6#   "ok": true,7#   "ticker": "AAPL",8#   "price": 333.08,9#   "bid": null,10#   "ask": null,11#   "bid_size": null,12#   "ask_size": null,13#   "day_volume": 39269147,14#   "prev_close": 333.08,15#   "change": 0,16#   "change_pct": 0,17#   "market_status": "closed",18#   "source": "vendor_fallback",19#   "source_as_of_ts": null,20#   "retrieved_at": "2026-09-15T07:30:53.701858+00:00",21#   "timestamp_basis": "retrieval_time",22#   "freshness_status": "unknown",23#   "price_age_seconds": null,24#   "is_stale": null,25#   "timestamp": "2026-09-15T07:30:53.701858+00:00"26# }
Python
1import os, requests2 3r = requests.get(4    "https://firm.wealthnow.io/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()10change = data.get("change_pct")11change_label = f"{change:+.2f}%" if isinstance(change, (int, float)) else "change unavailable"12print(f"{data['ticker']} @ ${data['price']} ({change_label})")13if data.get("bid") is not None and data.get("ask") is not None:14    print(f"Bid/Ask: ${data['bid']} / ${data['ask']}")15else:16    print("Bid/ask unavailable for this quote.")17source_time = data.get("source_as_of_ts")18if source_time and data.get("timestamp_basis") == "source_observation":19    print(f"Source observation: {source_time}; freshness: {data.get('freshness_status', 'unknown')}")20else:21    print("Source observation time unavailable; freshness is unknown.")

Daily bars with date range (1 credit)#

Shell
1curl -H "Authorization: Bearer $TENGU_API_KEY" \2  "https://firm.wealthnow.io/api/v3/fundamentals/prices?ticker=NVDA&interval=day&start_date=2026-06-01&end_date=2026-07-02&limit=30"3 4# Response structure (abbreviated):5# {6#   "ok": true,7#   "timestamp": "2026-09-23T02:00:26Z",8#   "ticker": "NVDA",9#   "asset_class": "equity",10#   "interval": "day",11#   "interval_multiplier": 1,12#   "start_date": "2026-06-01",13#   "end_date": "2026-07-02",14#   "items": [15#     {16#       "ticker": "NVDA",17#       "open": 215.73,18#       "high": 224.87,19#       "low": 215.7,20#       "close": 224.36,21#       "volume": 212850685.062286,22#       "vwap": 221.4785,23#       "trades": 3465498,24#       "time": "2026-06-01T04:00:00Z",25#       "time_milliseconds": 178028640000026#     },27#     ...28#   ]29# }

Bars are oldest first, with time in UTC. limit keeps the most recent N bars in the window.

Python
1import os, requests2 3r = requests.get(4    "https://firm.wealthnow.io/api/v3/fundamentals/prices",5    params={6        "ticker": "NVDA",7        "interval": "day",8        "start_date": "2026-06-01",9        "end_date": "2026-07-02",10        "limit": 30,11    },12    headers={"Authorization": f"Bearer {os.environ['TENGU_API_KEY']}"},13    timeout=30,14)15r.raise_for_status()16data = r.json()17bars = data["items"]18print(f"{len(bars)} bars for {data['ticker']} ({data['interval']})")19for bar in bars[-5:]:20    print(f"{bar['time'][:10]}: {bar['open']:.2f} → {bar['close']:.2f}")

Crypto quote — Bitcoin with 7-day series (1 credit, Free and up)#

Shell
1curl -H "Authorization: Bearer $TENGU_API_KEY" \2  "https://firm.wealthnow.io/api/crypto/BTC?vs=USD&series=true"3 4# Illustrative response structure, not a live sample: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.wealthnow.io/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}")