1. API
  2. Flow API

Flow API

Options flow,
as numbers.

The contracts carrying the most premium today, the ones trading far above their open interest, the call and put totals behind the sentiment label. Per ticker, live during the session.

2Endpoints in this family
2Matching MCP tools
60/minPer token, 1,000 an hour

A real response

This is what
comes back.

Captured from the live endpoint on 2026-09-08, lists cut to a few rows so it fits on a page. The shape is exactly what your code receives. Run it on your own ticker from the endpoint page.

GET /api/mcp/data/flow/NVDA?detail=compact&limit=5200, application/json
{
  "all_flow": [
    {
      "ask": 10.15,
      "bid": 10.05,
      "delta": -0.4599,
      "dte": 38,
      "expiration": "2026-10-16",
      "is_unusual": false,
      "mid": 10.100000000000001,
      "moneyness": "OTM",
      "oi": 6669,
      "premium": 11948300.000000002,
      "strike": 230.0,
      "ticker": "NVDA",
      "timestamp": "2026-09-08T08:07:24.681049",
      "type": "PUT",
      "volume": 11830,
      "volume_oi_ratio": 1.773879142300195
    },
    {
      "ask": 4.0,
      "bid": 3.95,
      "delta": 0.5173,
      "dte": 3,
      "expiration": "2026-09-11",
      "is_unusual": false,
      "mid": 3.975,
      "moneyness": "ITM",
      "oi": 32787,
      "premium": 10783380.0,
      "strike": 230.0,
      "ticker": "NVDA",
      "timestamp": "2026-09-08T08:07:24.542239",
      "type": "CALL",
      "volume": 27128,
      "volume_oi_ratio": 0.8274011040961357
    },
    {
      "ask": 6.05,
      "bid": 5.95,
      "delta": 0.5225,
      "dte": 10,
      "expiration": "2026-09-18",
      "is_unusual": false,
      "mid": 6.0,
      "moneyness": "ITM",
      "oi": 57448,
      "premium": 10345800.0,
      "strike": 230.0,
      "ticker": "NVDA",
      "timestamp": "2026-09-08T08:07:24.600692",
      "type": "CALL",
      "volume": 17243,
      "volume_oi_ratio": 0.3001497005988024
    }
  ],
  "data_freshness": "EOD",
  "is_market_hours": false,
  "largest_flows": [
    {
      "ask": 10.15,
      "bid": 10.05,
      "delta": -0.4599,
      "dte": 38,
      "expiration": "2026-10-16",
      "is_unusual": false,
      "mid": 10.1,
      "moneyness": "OTM",
      "oi": 6669,
      "premium": 11948300.0,
      "strike": 230.0,
      "ticker": "NVDA",
      "timestamp": "2026-09-08T08:07:24.681049",
      "type": "PUT",
      "volume": 11830,
      "volume_oi_ratio": 1.7739
    },
    {
      "ask": 4.0,
      "bid": 3.95,
      "delta": 0.5173,
      "dte": 3,
      "expiration": "2026-09-11",
      "is_unusual": false,
      "mid": 3.975,
      "moneyness": "ITM",
      "oi": 32787,
      "premium": 10783380.0,
      "strike": 230.0,
      "ticker": "NVDA",
      "timestamp": "2026-09-08T08:07:24.542239",
      "type": "CALL",
      "volume": 27128,
      "volume_oi_ratio": 0.8274
    },
    {
      "ask": 6.05,
      "bid": 5.95,
      "delta": 0.5225,
      "dte": 10,
      "expiration": "2026-09-18",
      "is_unusual": false,
      "mid": 6.0,
      "moneyness": "ITM",
      "oi": 57448,
      "premium": 10345800.0,
      "strike": 230.0,
      "ticker": "NVDA",
      "timestamp": "2026-09-08T08:07:24.600692",
      "type": "CALL",
      "volume": 17243,
      "volume_oi_ratio": 0.3001
    }
  ],
  "message": "Market is closed. Showing end-of-day data from the most recent trading session.",
  "stock_price": 230.3,
  "success": true,
  "summary": {
    "call_put_ratio": 1.9932,
    "net_premium": 172969531.5,
    "put_call_ratio": 0.5017,
    "sentiment": "BULLISH",
    "total_call_premium": 317997531.0,
    "total_call_volume": 1172710.0,
    "total_flow_count": 342,
    "total_put_premium": 145027999.5,
    "total_put_volume": 588346.0
  },
  "ticker": "NVDA",
  "timestamp": "2026-09-08T08:07:24.702149",
  "top_expirations": [
    [
      "2026-09-18",
      {
        "premium": 100034602.0,
        "volume": 283452
      }
    ],
    [
      "2026-09-11",
      {
        "premium": 98571641.0,
        "volume": 539458
      }
    ],
    [
      "2026-10-16",
      {
        "premium": 87886168.0,
        "volume": 170080
      }
    ]
  ],
  "top_strikes": [
    [
      230.0,
      {
        "calls": 100849,
        "premium": 91238806.0,
        "puts": 87969,
        "volume": 188818
      }
    ],
    [
      235.0,
      {
        "calls": 194678,
        "premium": 76153200.5,
        "puts": 30408,
        "volume": 225086
      }
    ],
    [
      232.5,
      {
        "calls": 101063,
        "premium": 42516519.0,
        "puts": 37409,
        "volume": 138472
      }
    ]
  ],
  "unusual_activity": [
    {
      "ask": 2.65,
      "bid": 2.58,
      "delta": -0.4734,
      "dte": 1,
      "expiration": "2026-09-09",
      "is_unusual": true,
      "mid": 2.615,
      "moneyness": "OTM",
      "oi": 1454,
      "premium": 9326397.5,
      "strike": 230.0,
      "ticker": "NVDA",
      "timestamp": "2026-09-08T08:07:24.518008",
      "type": "PUT",
      "volume": 35665,
      "volume_oi_ratio": 24.5289
    },
    {
      "ask": 3.8,
      "bid": 3.75,
      "delta": -0.4827,
      "dte": 3,
      "expiration": "2026-09-11",
      "is_unusual": true,
      "mid": 3.775,
      "moneyness": "OTM",
      "oi": 2231,
      "premium": 8328782.5,
      "strike": 230.0,
      "ticker": "NVDA",
      "timestamp": "2026-09-08T08:07:24.542254",
      "type": "PUT",
      "volume": 22063,
      "volume_oi_ratio": 9.8893
    },
    {
      "ask": 4.0,
      "bid": 3.9,
      "delta": -0.6144,
      "dte": 1,
      "expiration": "2026-09-09",
      "is_unusual": true,
      "mid": 3.95,
      "moneyness": "ITM",
      "oi": 226,
      "premium": 9502515.0,
      "strike": 232.5,
      "ticker": "NVDA",
      "timestamp": "2026-09-08T08:07:24.518071",
      "type": "PUT",
      "volume": 24057,
      "volume_oi_ratio": 106.4469
    }
  ],
  "window": {
    "detail": "compact",
    "limit": 5,
    "lists": {
      "all_flow": {
        "rows_returned": 5,
        "rows_total": 100,
        "truncated": true
      },
      "largest_flows": {
        "rows_returned": 5,
        "rows_total": 20,
        "truncated": true
      },
      "unusual_activity": {
        "rows_returned": 5,
        "rows_total": 20,
        "truncated": true
      }
    }
  }
}

Every response is wrapped as {"success": true, "data": {...}}. Errors use the same envelope with an error string and a status code that means what it says.

Call it three ways. Same token, same JSON.

curlBearer token from Account, then API Access
curl -H "Authorization: Bearer avmcp_YOUR_TOKEN" \
     "https://apexvol.com/api/mcp/data/flow/NVDA?detail=compact&limit=5"
Pythonrequests, nothing else
import requests

headers = {"Authorization": "Bearer avmcp_YOUR_TOKEN"}
params = {"detail": "compact", "limit": "5"}
r = requests.get("https://apexvol.com/api/mcp/data/flow/NVDA", headers=headers, params=params)
r.raise_for_status()
data = r.json()["data"]
print(data["top_strikes"])
In Claude, Cursor or ChatGPTthrough the MCP server, no code
You

What is the options flow on NVDA today, bullish or bearish?

The assistant calls get_options_flow and answers from the JSON above.

More prompts for this family in the prompt library. Set the server up in Claude Desktop, Claude Code, Cursor, ChatGPT, VS Code, Windsurf or Gemini CLI.

The family

2 endpoints,
one prefix.

All under https://apexvol.com/api/mcp/data. Each card opens a page with the parameters and their bounds, every response field, a real captured response and a console that runs it on your ticker.

Download as Markdown Copy for your AI

The Markdown twin of this family, sized for a context window.

Field by field

What each
number means.

summary.call_put_ratio, put_call_ratio
Volume-weighted ratios for the session.
summary.total_call_premium, total_put_premium, net_premium
Dollars traded on each side and the difference.
summary.sentiment
BULLISH, BEARISH or NEUTRAL from the premium balance, so a caller can branch.
largest_flows[]
Per contract: strike, expiration, type, volume, open interest, volume_oi_ratio, premium, delta, moneyness and is_unusual.
unusual_activity[]
The contracts where today's volume is a multiple of open interest, the classic unusual-activity screen.
top_strikes, top_expirations
Where the premium is concentrating.
data_freshness, is_market_hours
LIVE with the session open; otherwise the last session, and the response says which.

The same data, in plain English

2 MCP tools
wrap this family.

Connect the ApexVol MCP server and an assistant can call these by name. One URL, a sign-in, no token to paste.

  • get_options_flow
  • get_smart_money_flow

Set it up in:

What people build

Three things
this is for.

Recipes that use this family:

Access

Auth
Bearer token, prefix avmcp_, created under Account, then API Access. Shown once, hashed at rest, rotates in one click.
Limits
60 requests a minute and 1,000 an hour per token, plus a monthly allowance by plan. Every response carries the remaining counts in headers.
Plans
Included with every paid or trial plan from $55 a month. Each endpoint follows the tier of its web feature; the cards above show which.
Spec
OpenAPI 3.1 at /docs/api/openapi.json, this family as one Markdown file, the whole reference at /llms-full.txt. Shared conventions, the error model and the changelog.

Questions

Asked before
the first call.

Is the flow real-time?

Live during US market hours from the same options feed the terminal uses, with a timestamp on every response. Outside the session the last day's flow is returned and data_freshness says so.

What counts as unusual?

Volume against open interest. A contract trading several times its carried-in open interest is new positioning rather than churn, and those rows are flagged is_unusual and listed under unusual_activity. Premium size is reported separately so the two can be combined.

Is this tick-level order flow?

No. The endpoint aggregates the session's volume and premium per contract, which is what the unusual-activity and sentiment reads need. It does not label individual prints as sweeps or blocks.

Can I scan the whole market?

Yes. /screen with a flow preset ranks the coverage universe from bulk data in one or two upstream calls, so a market-wide unusual-volume list costs one request against your budget.

Included with
every paid plan.

From $55 a month, tier-matched: your token queries the data your plan includes and Pro unlocks the full surface.

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