Tradytics for Python
The official Python client for the Tradytics API: options flow from the full OPRA tape, dark pool prints ranked against a year, dealer gamma, delta, vanna and charm, and the whole market around them. 79 endpoints, one method each, no dependencies.
pip install tradytics
What you get
- Options flow: every print of $25K+ from the full OPRA tape (every US options exchange), live and back to March 2025, with side, sweep or block, and whether it opened a position.
- Dark pool: block and off-exchange prints as they happen, each ranked against a year of its kind, and the levels where size traded.
- Dealer exposure: gamma, delta, vanna and charm by strike for about 2,500 symbols, every five minutes, with the change since yesterday, a week and two weeks.
- The market: quotes and bars from 1 second to 1 month, breadth, sectors, movers, the options market, research, the full-market scanner, Signals, Kalshi and Polymarket odds and the AI Fund.
- Built for scripts and services: retries on rate limits, paging and live streaming built in, typed and documented methods, and plain JSON back.
Quickstart
The API is part of Tradytics Pro. Make a key at tradytics.com/developer/keys and pass it in, or export it as TRADYTICS_API_KEY. A key you pass wins over the environment.
from tradytics import Client
client = Client("tdy_...") # or Client(api_key="tdy_...")
client = Client() # or set TRADYTICS_API_KEY and pass nothing
flow = client.options.flow(symbol="NVDA", min_premium=1_000_000, opening=True)
for p in flow["data"]:
print(p["time"], p["symbol"], p["type"], p["strike"], p["expiry"], p["premium_usd"])
Objects come back as {"data": ..., "meta": {...}} and lists as {"data": [...], "next_cursor": ..., "next_url": ..., "meta": {...}}, the same JSON as the REST API.
Examples
# The year's biggest dark pool prints for one stock, ranked against its own year
client.darkpool.prints(symbol="AAPL", from_="2026-01-01", max_rank=10)
# Dealer gamma by strike with the call wall, put wall and flip; 0DTE only
client.options.exposure(symbol="SPY", greek="gamma", dte=0)
# Every quarter Apple has filed, and its 8-Ks as they land
client.fundamentals.income_statement(symbol="AAPL", period="quarter", limit=40)
client.filings.list(symbol="AAPL", form="8-K")
# Insider buys over $1M, and Tesla's deliveries quarter by quarter
client.disclosures.insiders(type="buy", min_value=1_000_000)
client.kpis.list(symbol="TSLA", kpi="vehicle_deliveries")
# Screen the market on any field
client.screener.stocks(min_relative_volume=2, max_rsi=30, sort="change_pct", limit=25)
Every page
for p in client.paginate(client.options.flow, symbol="TSLA", min_premium=500_000, from_="2026-01-01"):
print(p["time"], p["premium_usd"])
New prints as they happen
for p in client.stream(client.options.flow, min_premium=250_000):
print(p["symbol"], p["type"], p["strike"], p["premium_usd"])
stream works with client.options.flow and client.darkpool.prints, polls every two seconds and yields each print once, oldest first.
Errors, retries and limits
from tradytics import Client, TradyticsError
try:
client.options.flow(symbol="NVDA", limit=5000)
except TradyticsError as e:
print(e.status, e.code, e.message, e.request_id) # 400 invalid_parameter ...
Each key gets 300 calls a minute and 50,000 a day. A 429 or 5xx answer is retried up to three times, waiting as Retry-After says; the daily quota isn't retried. Client(api_key=..., timeout=30, max_retries=3) changes the defaults, and client.get("/any/path", **params) calls any endpoint by path.
Reference
Every method, by resource
| Method | Request | Name |
|---|---|---|
| options | ||
options.flow(**params) |
GET /options/flow |
Options flow |
options.flow_print(id) |
GET /options/flow/{id} |
One print |
options.flow_timeline(**params) |
GET /options/flow/timeline |
Flow timeline |
options.flow_leaders(**params) |
GET /options/flow/leaders |
Flow leaders |
options.flow_strikes(**params) |
GET /options/flow/strikes |
Flow by strike |
options.unusual(**params) |
GET /options/unusual |
Unusual contracts |
options.chain(**params) |
GET /options/chain |
Option chain |
options.expirations(**params) |
GET /options/expirations |
Expirations |
options.contracts(**params) |
GET /options/contracts |
Contracts |
options.contract(contract) |
GET /options/contracts/{contract} |
Contract |
options.contract_bars(contract, **params) |
GET /options/contracts/{contract}/bars |
Contract bars |
options.open_interest(**params) |
GET /options/open-interest |
Open interest |
options.exposure(**params) |
GET /options/exposure |
Dealer exposure |
options.exposure_history(**params) |
GET /options/exposure/history |
Exposure history |
options.volatility(**params) |
GET /options/volatility |
Volatility |
options.volatility_history(**params) |
GET /options/volatility/history |
Volatility history |
| darkpool | ||
darkpool.prints(**params) |
GET /darkpool/prints |
Dark pool prints |
darkpool.levels(**params) |
GET /darkpool/levels |
Dark pool levels |
darkpool.daily(**params) |
GET /darkpool/daily |
Dark pool by day |
| stocks | ||
stocks.quotes(**params) |
GET /stocks/quotes |
Quotes |
stocks.bars(**params) |
GET /stocks/bars |
Bars |
stocks.snapshot(**params) |
GET /stocks/snapshot |
Market snapshot |
stocks.technicals(**params) |
GET /stocks/technicals |
Technicals |
stocks.short_interest(**params) |
GET /stocks/short-interest |
Short interest |
stocks.short_volume(**params) |
GET /stocks/short-volume |
Short volume |
stocks.corporate_actions(**params) |
GET /stocks/corporate-actions |
Dividends and splits |
| fundamentals | ||
fundamentals.profile(**params) |
GET /fundamentals/profile |
Company profile |
fundamentals.income_statement(**params) |
GET /fundamentals/income-statement |
Income statement |
fundamentals.balance_sheet(**params) |
GET /fundamentals/balance-sheet |
Balance sheet |
fundamentals.cash_flow(**params) |
GET /fundamentals/cash-flow |
Cash flow statement |
fundamentals.ratios(**params) |
GET /fundamentals/ratios |
Ratios |
fundamentals.segments(**params) |
GET /fundamentals/segments |
Revenue segments |
fundamentals.earnings(**params) |
GET /fundamentals/earnings |
Earnings |
fundamentals.estimates(**params) |
GET /fundamentals/estimates |
Analyst estimates |
fundamentals.analysts(**params) |
GET /fundamentals/analysts |
Analysts |
fundamentals.transcripts(**params) |
GET /fundamentals/transcripts |
Call transcripts |
fundamentals.etf_holdings(**params) |
GET /fundamentals/etf-holdings |
ETF holdings |
| filings | ||
filings.list(**params) |
GET /filings |
List filings |
filings.search(**params) |
GET /filings/search |
Search filings |
filings.get(accession) |
GET /filings/{accession} |
Filing |
filings.sections(accession, **params) |
GET /filings/{accession}/sections |
Filing sections |
| disclosures | ||
disclosures.insiders(**params) |
GET /disclosures/insiders |
Insider trades |
disclosures.institutions(**params) |
GET /disclosures/institutions |
Institutional holders |
disclosures.institution(cik, **params) |
GET /disclosures/institutions/{cik} |
Institution holdings |
disclosures.activists(**params) |
GET /disclosures/activists |
Activist stakes |
disclosures.congress(**params) |
GET /disclosures/congress |
Congress trades |
| kpis | ||
kpis.list(**params) |
GET /kpis |
KPIs |
kpis.definitions(**params) |
GET /kpis/definitions |
KPI definitions |
| market | ||
market.status() |
GET /market/status |
Market status |
market.indices() |
GET /market/indices |
Indices |
market.breadth() |
GET /market/breadth |
Breadth |
market.sectors(**params) |
GET /market/sectors |
Sectors and themes |
| calendar | ||
calendar.earnings(**params) |
GET /calendar/earnings |
Earnings calendar |
calendar.economic(**params) |
GET /calendar/economic |
Economic calendar |
| news | ||
news.list(**params) |
GET /news |
News |
| screener | ||
screener.stocks(**params) |
GET /screener/stocks |
Screen stocks |
screener.fields() |
GET /screener/fields |
Screener fields |
| signals | ||
signals.list(**params) |
GET /signals |
List signals |
signals.get(id) |
GET /signals/{id} |
Signal |
signals.performance(**params) |
GET /signals/performance |
Signal performance |
| insights | ||
insights.market(**params) |
GET /insights/market |
Market digest |
insights.movers(**params) |
GET /insights/movers |
Why it's moving |
| probabilities | ||
probabilities.list(**params) |
GET /probabilities |
List questions |
probabilities.get(id) |
GET /probabilities/{id} |
Question |
probabilities.history(id, **params) |
GET /probabilities/{id}/history |
Outcome history |
probabilities.outlook() |
GET /probabilities/outlook |
S&P 500 outlook |
probabilities.settled(**params) |
GET /probabilities/settled |
Settled markets |
| fund | ||
fund.get() |
GET /fund |
The fund |
fund.trades(**params) |
GET /fund/trades |
Fund trades |
| symbols | ||
symbols.list(**params) |
GET /symbols |
List symbols |
symbols.get(symbol) |
GET /symbols/{symbol} |
Symbol |
| account | ||
account.portfolio() |
GET /account/portfolio |
Your portfolio |
account.portfolio_trades() |
GET /account/portfolio/trades |
Your trades |
account.portfolio_factors() |
GET /account/portfolio/factors |
Your factors |
account.backtests(**params) |
GET /account/backtests |
Your backtests |
account.backtest(id) |
GET /account/backtests/{id} |
A backtest |
account.dashboards() |
GET /account/dashboards |
Your dashboards |
account.dashboard(id) |
GET /account/dashboards/{id} |
A dashboard |
account.watchlists() |
GET /account/watchlists |
Your watchlists |
Parameters and fields for each are in the method's docstring and on its docs page.
More
- API docs, with a page per endpoint and a live console
- JavaScript SDK:
npm install tradytics - MCP server for Claude, ChatGPT and Cursor
- Support: hello@tradytics.com
Metadata
Release files for tradytics 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tradytics-0.2.0.tar.gz | 22.7 kB | Without provenance | Details for tradytics-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tradytics-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for tradytics-0.2.0-py3-none-any.whl |
Total release size: 42.6 kB
Release files / tradytics-0.2.0.tar.gz
| Download URL | tradytics-0.2.0.tar.gz |
|---|---|
| Size | 22.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4a6c901883d3e94245d4a38fb1bf5b04d4340af9fa6a3dfb844ebe708e815e86
|
|
BLAKE2b-256 checksum How to use checksums |
e19a3d7f8ab6a5f61c3cecde0d2de9da7d45d40cf93545107692cd833fde9580
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.8
|
Release files / tradytics-0.2.0-py3-none-any.whl
| Download URL | tradytics-0.2.0-py3-none-any.whl |
|---|---|
| Size | 19.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
22fd2377bda7b8869922bd77bec2f1b7c6f0d60d970a6c1459824cd9e116ff01
|
|
BLAKE2b-256 checksum How to use checksums |
1a4ae4407846fe317c3fe88f650d6b669147cfc6029103386c2c77e99383bc6c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.8
|
Security for tradytics 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.