Skip to main content

Tradytics: one API for options flow, dark pools and the market

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.

PyPI Python npm Endpoints Docs License

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

Metadata

Release files for tradytics 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tradytics 0.2.1
File Size Uploaded Provenance Actions
tradytics-0.2.1.tar.gz 23.2 kB Without provenance Details for tradytics-0.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for tradytics 0.2.1
File Interpreter ABI Platform Actions
tradytics-0.2.1-py3-none-any.whl Python 3 none any Details for tradytics-0.2.1-py3-none-any.whl

Total release size: 43.6 kB

Release files / tradytics-0.2.1.tar.gz

Download URL tradytics-0.2.1.tar.gz
Size 23.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9f00583e7df9829f9b13e6fc10f44a0d3cfc182d823c2cb3d363a62412c65d5f
BLAKE2b-256 checksum
How to use checksums
912f35d86de7afd0cc6e23bbcbe33b61af61014399cf2b1b54697326838e0a11
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.1-py3-none-any.whl

Download URL tradytics-0.2.1-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5789e2a5338867675d198554b3172be4c3c3e5bb445c1fee48fb7c8a19942dcc
BLAKE2b-256 checksum
How to use checksums
36c099fdfaa22e5e94302580aa57469ef86593b08c4189410130fdb206b0b312
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.1

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page