Market Data & Research¶
Option Chains¶
# Standard chain (calls + puts at all strikes/expirations)
chain = client.option_chain.get_option_chain("AAPL")
# Depth of market / montage (per-exchange quotes)
montage = client.option_chain.get_montage("AAPL")
Service: GET /api/v1/market-data/chain/{symbol} and GET /api/v1/market-data/montage/{symbol}
Historical Charts¶
from datetime import date
chart = client.chart.get_chart(
symbol="AAPL",
start_date=date(2026, 1, 1),
end_date=date(2026, 4, 1),
bar_width="D", # D=Daily, W=Weekly, M=Monthly
extended_hours=False,
)
for bar in chart.bars:
print(f"{bar.date}: O={bar.open} H={bar.high} L={bar.low} C={bar.close} V={bar.volume}")
print(f"Previous close: {chart.symbol_info.previous_close}")
Service: GET /api/v1/market-data/chart/{symbol}
Time & Sales (Historical)¶
New in v0.3
Historical trade execution data via REST. For real-time T&S, use the MDDS streaming guide.
result = client.time_and_sales.get_history(
symbol="AAPL",
max_rows=500, # Server cap: 500
low_price="190.00", # Optional price filter
high_price="200.00",
low_size="100", # Optional size filter
)
for trade in result.trades:
print(f"{trade.time}: {trade.size} @ ${trade.price} on {trade.exchange} [{trade.condition}]")
Response fields (TradeExecution):
| Field | Type | Description |
|---|---|---|
time |
str | Trade timestamp |
price |
float | Execution price |
size |
int | Trade size (shares) |
exchange |
str | Exchange code |
condition |
str | Trade condition code (F=regular, I=odd lot, T=extended hours) |
Different Host
This endpoint uses fastquote.fidelity.com (not dpservice.fidelity.com), similar to option chains and charts.
Service: GET /api/v1/market-data/time-and-sales/{symbol}
Research¶
Earnings & Dividends¶
earnings = client.research.get_earnings(["AAPL", "MSFT"])
dividends = client.research.get_dividends(["AAPL", "KO"])
Service: GET /api/v1/research/earnings?symbols=AAPL,MSFT and GET /api/v1/research/dividends?symbols=AAPL,KO
Symbol Search¶
results = client.search.autosuggest("AAPL")
for r in results.suggestions:
print(f"{r.symbol}: {r.description}")
Service: GET /api/v1/research/search?q=AAPL
Option Analytics¶
Service: POST /api/v1/research/analytics
Stock Screener¶
Uses LiveVol SAML auth — not a simple REST call.
Service: POST /api/v1/research/screener
Short Insights¶
New in v0.3
See Portfolio & Accounts > Short Insights for full documentation.
insights = client.short_insights.get_insights("Z12345678", ["GME"])
ts = client.short_insights.get_time_series("GME", metric="shortInterest")
Research Notebooks¶
New in v0.3
CRUD operations for personal research notes attached to symbols.
# List all notes
notes = client.notebooks.list_notes()
for n in notes.notes:
print(f"{n.note_id}: [{n.symbol}] {n.title} — {n.note[:50]}...")
# Create a note
result = client.notebooks.create_note(
"Strong Q1 results, raised guidance for FY26.",
symbol="AAPL",
title="Earnings Analysis",
)
print(f"Created: {result.note_id}")
# Update a note
client.notebooks.update_note("NOTE-001", "Updated analysis text",
title="Updated Title", old_symbol="AAPL", new_symbol="AAPL")
# Delete a note
client.notebooks.delete_note("NOTE-001", symbol="AAPL")
Response fields (NoteDetail):
| Field | Type | Description |
|---|---|---|
note_id |
str | Unique note identifier |
symbol |
str | Associated ticker symbol |
title |
str | Note title |
note |
str | Note body text |
channel |
str | Channel (ATN = Active Trader) |
create_date |
str | Creation date |
update_date |
str | Last update date |
Service:
GET /api/v1/research/notebooks— List notesPOST /api/v1/research/notebooks— Create notePUT /api/v1/research/notebooks/{note_id}— Update noteDELETE /api/v1/research/notebooks/{note_id}— Delete note
Available Markets & Holidays¶
# Available trading destinations for a symbol
markets = client.available_markets.get_available_markets("AAPL", ["Z12345678"])
# Market holiday calendar
holidays = client.holiday_calendar.get_holiday_calendar()
Service: GET /api/v1/market-data/markets/{symbol} (available markets)