Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
description: 'Options-analytics API (token surface). Auth: `Authorization: Bearer avmcp_` on every request; tokens are issued to any paid or trial plan from Basic, and each endpoint follows the same tier as the web app. Rate limits: 60/min and 1,000/hr per token, plus a monthly allowance per account measured in upstream data requests, by plan. The remaining counts come back in the X-RateLimit-* and X-Monthly-Budget-Remaining headers on every response, and GET /api/mcp/data/me/usage returns the month''s meter with a per-endpoint breakdown. IV values are percentage points unless a payload says otherwise (`iv_units`). The same endpoints power the ApexVol MCP server for AI assistants: `pipx install apexvol-mcp` (PyPI), setup at https://apexvol.com/mcp. Docs: https://apexvol.com/docs/api.'
title: ApexVol Options flow API
version: '1.30'
servers:
- url: https://apexvol.com
security:
- bearerAuth: []
tags:
- name: Options flow
paths:
/api/mcp/data/flow/{ticker}:
get:
description: 'Options flow and unusual activity. Under compact detail the row lists are capped; window says what was trimmed. The summary block is never trimmed. **Query parameters:** detail (compact | full; default compact for MCP clients, full for REST) · limit (all_flow rows under compact, default 25; largest_flows and unusual_activity capped at 10)
**Response shape:**
```json
{
"success": true,
"data": {
"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.'
operationId: get_flow_by_ticker
parameters:
- in: path
name: ticker
required: true
schema:
type: string
- description: 'Capped lists or everything. Range: compact or full. Default: full for REST, compact for MCP clients.'
in: query
name: detail
required: false
schema:
enum:
- compact
- full
type: string
- description: 'Row cap. Range: rows in all_flow under compact.'
in: query
name: limit
required: false
schema:
default: 25
type: integer
responses:
'200':
content:
application/json:
schema:
properties:
data:
$ref: '#/components/schemas/GetFlowByTickerResponse'
success:
type: boolean
type: object
description: 'Success: payload under `data` with `success: true`.'
'400':
description: A parameter is malformed; the error names it.
'401':
description: Missing, invalid, expired or revoked token.
'403':
description: The endpoint needs a higher plan than the token's owner has (required_tier in the body).
'404':
description: Unknown path (did_you_mean in the body) or a symbol with no listed options.
'424':
description: The data feed did not answer for this symbol; retry.
'429':
description: Per-token rate limit or the monthly allowance (budget_exceeded). Retry-After says how long, in seconds.
summary: Options flow and unusual activity
tags:
- Options flow
/api/mcp/data/smart-money/{ticker}:
get:
description: 'Smart-money / institutional flow.
**Query parameters:** —
**Response shape:**
```json
{
"success": true,
"data": {
"smart_money_trades": [
{
"ask": 4.0,
"bid": 3.95,
"criteria": [
"Large Premium",
"Opening Position",
"OTM with Time"
],
"delta": 0.2642,
"dte": 38,
"expiration": "2026-10-16",
"is_unusual": false,
"mid": 3.975,
"moneyness": "OTM",
"oi": 69150,
"premium": 5400037.5,
"smart_money_score": 8,
"strike": 250.0,
"ticker": "NVDA",
"timestamp": "2026-09-08T08:07:26.352058",
"type": "CALL",
"volume": 13585,
"volume_oi_ratio": 0.1965
},
{
"ask": 0.74,
"bid": 0.72,
"criteria": [
"Large Premium",
"Opening Position",
"Aggressive Entry"
],
"delta": 0.104,
"dte": 10,
"expiration": "2026-09-18",
"is_unusual": false,
"mid": 0.73,
"moneyness": "OTM",
"oi": 87596,
"premium": 2234457.0,
"smart_money_score": 7,
"strike": 250.0,
"ticker": "NVDA",
"timestamp": "2026-09-08T08:07:26.279270",
"type": "CALL",
"volume": 30609,
"volume_oi_ratio": 0.3494
},
{
"ask": 2.25,
"bid": 2.19,
"criteria": [
"Large Premium",
"Opening Position",
"OTM with Time"
],
"delta": 0.1801,
"dte": 38,
"expiration": "2026-10-16",
"is_unusual": false,
"mid": 2.22,
"moneyness": "OTM",
"oi": 31871,
"premium": 1314240.0,
"smart_money_score": 8,
"strike": 260.0,
"ticker": "NVDA",
"timestamp": "2026-09-08T08:07:26.352193",
"type": "CALL",
"volume": 5920,
"volume_oi_ratio": 0.1857
}
],
"ticker": "NVDA",
"timestamp": "2026-09-08T08:07:26.381762",
"total_smart_trades": 99
}
}
```'
operationId: get_smart_money_by_ticker
parameters:
- in: path
name: ticker
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
properties:
data:
$ref: '#/components/schemas/GetSmartMoneyByTickerResponse'
success:
type: boolean
type: object
description: 'Success: payload under `data` with `success: true`.'
'400':
description: A parameter is malformed; the error names it.
'401':
description: Missing, invalid, expired or revoked token.
'403':
description: The endpoint needs a higher plan than the token's owner has (required_tier in the body).
'404':
description: Unknown path (did_you_mean in the body) or a symbol with no listed options.
'424':
description: The data feed did not answer for this symbol; retry.
'429':
description: Per-token rate limit or the monthly allowance (budget_exceeded). Retry-After says how long, in seconds.
summary: Smart-money / institutional flow
tags:
- Options flow
components:
schemas:
GetFlowByTickerResponse:
properties:
all_flow:
items:
properties:
ask:
type: number
bid:
type: number
delta:
type: number
dte:
type: integer
expiration:
type: string
is_unusual:
type: boolean
mid:
type: number
moneyness:
type: string
oi:
type: integer
premium:
type: number
strike:
type: number
ticker:
type: string
timestamp:
type: string
type:
type: string
volume:
type: integer
volume_oi_ratio:
type: number
type: object
type: array
data_freshness:
type: string
is_market_hours:
type: boolean
largest_flows:
items:
properties:
ask:
type: number
bid:
type: number
delta:
type: number
dte:
type: integer
expiration:
type: string
is_unusual:
type: boolean
mid:
type: number
moneyness:
type: string
oi:
type: integer
premium:
type: number
strike:
type: number
ticker:
type: string
timestamp:
type: string
type:
type: string
volume:
type: integer
volume_oi_ratio:
type: number
type: object
type: array
message:
type: string
stock_price:
type: number
success:
type: boolean
summary:
properties:
call_put_ratio:
type: number
net_premium:
type: number
put_call_ratio:
type: number
sentiment:
type: string
total_call_premium:
type: number
total_call_volume:
type: number
total_flow_count:
type: integer
total_put_premium:
type: number
total_put_volume:
type: number
type: object
ticker:
type: string
timestamp:
type: string
top_expirations:
items:
items:
type: string
type: array
type: array
top_strikes:
items:
items:
type: number
type: array
type: array
unusual_activity:
items:
properties:
ask:
type: number
bid:
type: number
delta:
type: number
dte:
type: integer
expiration:
type: string
is_unusual:
type: boolean
mid:
type: number
moneyness:
type: string
oi:
type: integer
premium:
type: number
strike:
type: number
ticker:
type: string
timestamp:
type: string
type:
type: string
volume:
type: integer
volume_oi_ratio:
type: number
type: object
type: array
window:
properties:
detail:
type: string
limit:
type: integer
lists:
properties:
all_flow:
properties:
rows_returned:
type: integer
rows_total:
type: integer
truncated:
type: boolean
type: object
largest_flows:
properties:
rows_returned:
type: integer
rows_total:
type: integer
truncated:
type: boolean
type: object
unusual_activity:
properties:
rows_returned:
type: integer
rows_total:
type: integer
truncated:
type: boolean
type: object
type: object
type: object
type: object
GetSmartMoneyByTickerResponse:
properties:
smart_money_trades:
items:
properties:
ask:
type: number
bid:
type: number
criteria:
items:
type: string
type: array
delta:
type: number
dte:
type: integer
expiration:
type: string
is_unusual:
type: boolean
mid:
type: number
moneyness:
type: string
oi:
type: integer
premium:
type: number
smart_money_score:
type: integer
strike:
type: number
ticker:
type: string
timestamp:
type: string
type:
type: string
volume:
type: integer
volume_oi_ratio:
type: number
type: object
type: array
ticker:
type: string
timestamp:
type: string
total_smart_trades:
type: integer
type: object
securitySchemes:
bearerAuth:
description: ApexVol API token (avmcp_...) from apexvol.com/account, API Access.
scheme: bearer
type: http