1. API
  2. Recipes
  3. Unusual flow today

Recipe, one Python file

Unusual flow today

The session's unusual options prints for a name, with volume against open interest. Reads the options flow for one symbol and prints the summary line (call and put volume, premium and the sentiment read) followed by the unusual rows, sorted by premium. Volume far above open interest is what marks a print as unusual; the script shows both so the reader can judge.

1Endpoint it calls
PremiumPlan and above, from $55/mo
2026-09-09Output captured

What it prints

The output,
as captured.

Run against the live API on 2026-09-09 with a real token. Traders who want the day's notable prints in a terminal instead of a scrolling tape.

python3 flow_unusual_today.pystdout, 2026-09-09
NVDA flow (EOD), spot 225.86
calls 1,301,297 contracts / $189.3M   puts 727,464 / $172.8M   put/call 0.5590299524243889   BULLISH
Market is closed. Showing end-of-day data from the most recent trading session.

type   strike      expiry  dte   volume      OI  vol/OI  premium $M
PUT     227.5  2026-09-09    0   81,398   4,679    17.4       21.41
PUT     230.0  2026-09-09    0   38,724   5,545     7.0       17.81
PUT     225.0  2026-09-09    0  120,529   8,372    14.4       15.79
CALL    227.5  2026-09-11    2   54,393  24,169     2.3       11.91
CALL    227.5  2026-09-09    0  123,348   5,522    22.3       11.72
PUT     230.0  2026-09-11    2   16,058   6,617     2.4        9.15
CALL    225.0  2026-09-09    0   38,042   4,665     8.2        8.10
PUT     225.0  2026-09-11    2   29,453   9,162     3.2        8.00
PUT     235.0  2026-09-09    0    8,563     661    13.0        7.98
PUT     227.5  2026-09-11    2   15,759   6,309     2.5        6.38

The script

One file,
requests and nothing else.

Set APEXVOL_API_TOKEN from Account, then API Access, and run it. The token is the only configuration.

flow_unusual_today.pyPython 3.10+, pip install requests
import os
import sys

import requests

# One token, any paid or trial plan: Account, then API Access.
TOKEN = os.environ.get("APEXVOL_API_TOKEN") or sys.exit("set APEXVOL_API_TOKEN")
BASE = os.environ.get("APEXVOL_API_URL", "https://apexvol.com") + "/api/mcp/data"
S = requests.Session()
S.headers["Authorization"] = f"Bearer {TOKEN}"


def get(path, **params):
    r = S.get(BASE + path, params=params, timeout=90)
    body = r.json()
    if not body.get("success"):
        sys.exit(f"{path}: HTTP {r.status_code}: {body.get('error')}")
    return body["data"]


SYMBOL = "NVDA"
d = get(f"/flow/{SYMBOL}", limit=10, detail="compact")
s = d.get("summary") or {}
print(f"{SYMBOL} flow ({d.get('data_freshness')}), spot {d.get('stock_price')}")
print(f"calls {s.get('total_call_volume', 0):,.0f} contracts / ${s.get('total_call_premium', 0)/1e6:,.1f}M   "
      f"puts {s.get('total_put_volume', 0):,.0f} / ${s.get('total_put_premium', 0)/1e6:,.1f}M   "
      f"put/call {s.get('put_call_ratio')}   {s.get('sentiment')}")
if d.get("message"):
    print(d["message"])
print()
rows = sorted(d.get("unusual_activity") or [], key=lambda r: -(r.get("premium") or 0))
print(f"{'type':5}{'strike':>8}{'expiry':>12}{'dte':>5}{'volume':>9}{'OI':>8}{'vol/OI':>8}{'premium $M':>12}")
for r in rows[:10]:
    print(f"{r['type']:5}{r['strike']:>8,.1f}{r['expiration']:>12}{r['dte']:>5}{r['volume']:>9,.0f}"
          f"{r['oi']:>8,.0f}{r['volume_oi_ratio']:>8.1f}{r['premium']/1e6:>12.2f}")
if not rows:
    print("no rows flagged unusual in this session")

How it works

1. One call
GET /flow/NVDA?limit=10 caps the row lists under compact detail; the summary block is always whole.
2. Read the summary
Total call and put premium and the sentiment label come first.
3. List the prints
unusual_activity rows carry strike, expiry, volume, open interest and premium.

Schedule it

cron
0 15,17,19 * * 1-5 APEXVOL_API_TOKEN=avmcp_... python3 flow_unusual_today.py
11:00, 13:00, 15:00 New York, weekdays. Times in the crontab are UTC.
Claude Code
/loop 1h python3 flow_unusual_today.py
Runs it on an interval inside a session, and the assistant reads the output each time.

The same job, no code

Ask an assistant
with the MCP server.

Connect the ApexVol MCP server and this recipe is one prompt. It ships in the client's prompt picker as recipe-flow-unusual-today.

In Claude, Cursor or ChatGPTthrough the MCP server
You

What unusual options activity is there in NVDA today, and what is the call versus put premium split?

The assistant calls get_options_flow and answers from the same JSON the script prints.

Set it up in:

Under the hood

1 endpoint,
one token.

Each card opens the endpoint's page: parameters and bounds, every field, a real response and a console that runs it on your ticker.

Access

Plan
Premium and above. Every endpoint follows the tier of its web feature; the chips on the cards say which.
Cost
Measured in upstream data requests against the monthly allowance, not calls; a batch call counts one rate-limit unit and one data request per symbol. GET /api/mcp/data/me/usage shows the meter.
Reference
The rate-limits guide, the conventions and the error model. The whole API as one Markdown file: /llms-full.txt.

Included with
every paid plan.

From $55 a month. Create a token under Account, then API Access, and this script runs as it is.

Real market data, not a sandbox. See it live on AAPL.

7 days free, cancel anytime Card required · no charge for 7 days
Start trial →