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.0

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.0
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)

Table of built distributions (wheels) for tradytics 0.2.0
File Interpreter ABI Platform Actions
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.

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