1. API
  2. Recipes
  3. Morning regime brief

Recipe, one Python file

Morning regime brief

Dealer gamma for SPY, QQQ and IWM plus the VIX, in one screen before the open. One batch call fetches gamma exposure for the three index ETFs; a second reads the VIX. The script prints spot, net dealer gamma, the flip level and the call and put walls per symbol, then says which regime each is in: positive gamma damps moves, negative gamma amplifies them.

2Endpoints it calls
PremiumPlan and above, from $55/mo
2026-09-08Output captured

What it prints

The output,
as captured.

Run against the live API on 2026-09-08 with a real token. Anyone who trades index options or sizes positions off the day's gamma regime.

python3 morning_regime_brief.pystdout, 2026-09-08
VIX 15.33 (+0.2% on the day)

           spot  net gamma ($bn)     flip  call wall  put wall  regime
SPY      767.37            -7.70     none        770       760  negative: trend and widen
QQQ      716.96            -1.80     none        720       700  negative: trend and widen
IWM      294.86            -2.92     none        295       290  negative: trend and widen

Levels are aggregate across listed expirations; pass expiration=YYYY-MM-DD for one expiry.

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.

morning_regime_brief.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"]


symbols = "SPY,QQQ,IWM"
gex = get("/batch/gex", tickers=symbols, strikes_around=5)
vix = get("/vix")

print(f"VIX {vix['price']:.2f} ({vix['change_pct']:+.1f}% on the day)")
print()
print(f"{'':6}{'spot':>9}{'net gamma ($bn)':>17}{'flip':>9}{'call wall':>11}{'put wall':>10}  regime")
for sym in symbols.split(","):
    d = gex["results"].get(sym)
    if not d:
        print(f"{sym:6} {gex['errors'].get(sym)}")
        continue
    lv = d.get("key_levels") or {}
    flip = d.get("flip_level")
    net_bn = (d.get("total_gex") or 0) / 1e9
    regime = "positive: pin and fade" if net_bn > 0 else "negative: trend and widen"
    fmt = lambda v: f"{v:,.0f}" if isinstance(v, (int, float)) else "none"
    print(f"{sym:6}{d['stock_price']:>9,.2f}{net_bn:>17,.2f}{fmt(flip):>9}"
          f"{fmt(lv.get('call_wall')):>11}{fmt(lv.get('put_wall')):>10}  {regime}")
print()
print("Levels are aggregate across listed expirations; pass expiration=YYYY-MM-DD for one expiry.")

How it works

1. Batch the three symbols
GET /batch/gex?tickers=SPY,QQQ,IWM returns every level for one rate-limit unit.
2. Read the VIX
GET /vix is the spot index with the day's change.
3. Name the regime
Net gamma above zero is positive (pinning, mean reversion); below zero is negative (trend, wider ranges).

Schedule it

cron
20 13 * * 1-5 APEXVOL_API_TOKEN=avmcp_... python3 morning_regime_brief.py
09:20 New York, weekdays. Times in the crontab are UTC.
Claude Code
/loop 30m python3 morning_regime_brief.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-morning-regime-brief.

In Claude, Cursor or ChatGPTthrough the MCP server
You

Give me a morning regime brief: dealer gamma flip, call wall and put wall for SPY, QQQ and IWM, plus where the VIX is.

The assistant calls get_gex, get_vix_snapshot and answers from the same JSON the script prints.

Set it up in:

Under the hood

2 endpoints,
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 →