1. API
  2. Earnings and expected move
  3. Mispricing assessment

Earnings and expected move API, GET /mispricing-assessment/{ticker}

Taking IV rank, VRP and the priced move together, are NVDA options rich or cheap?

A composite buy-premium or sell-premium signal with a score and its components. Combines IV rank, the volatility risk premium and expected-versus-actual into a signal from -100 to +100 with confidence, and returns every component and the historical move distribution it used.

ProPlan and above, from $55/mo
1MCP tool that calls it
2026-09-08Sample captured from the live endpoint

The answer, in one call

Units first,
then the request.

Score -100 to +100; confidence 0 to 100; IVs in percentage points; moves in percent.

components.current_iv is on the VRP basis (30-day constant maturity); iv_basis, hv_basis and earnings_in_window are returned.

curlBearer token from Account, then API Access
curl -H "Authorization: Bearer avmcp_YOUR_TOKEN" \
     "https://apexvol.com/api/mcp/data/mispricing-assessment/NVDA"
Pythonrequests, nothing else
import requests

headers = {"Authorization": "Bearer avmcp_YOUR_TOKEN"}
r = requests.get("https://apexvol.com/api/mcp/data/mispricing-assessment/NVDA", headers=headers)
r.raise_for_status()
data = r.json()["data"]
print(data["signal"])
In Claude, Cursor or ChatGPTthrough the MCP server, no code
You

Are NVDA options rich or cheap overall right now?

The assistant calls get_earnings_move_analysis and answers from the JSON below.

Tokens come with every paid or trial plan. Sign in and create one under Account, then API Access, or start a trial. Your ticker, your budget.

GET /api/mcp/data/mispricing-assessment/NVDA200, application/json, captured 2026-09-08
{
  "success": true,
  "data": {
    "components": {
      "current_iv": 33.05,
      "earnings_in_window": true,
      "expected_move_pct": 4.55,
      "historical_avg_move_pct": 4.46,
      "hv_basis": "close_to_close_log_returns_annualized_252",
      "iv_basis": "iv30d_constant_maturity_eod",
      "iv_percentile": 12.0,
      "iv_rank": 14.8,
      "options_assessment": "FAIRLY_PRICED",
      "realized_vol": 45.06,
      "vrp": -12.01
    },
    "confidence": 100.0,
    "historical_moves": {
      "14d": {
        "avg_abs_move_pct": 5.4003,
        "avg_move_pct": 1.7376,
        "max_down_move_pct": -10.5131,
        "max_up_move_pct": 14.8871,
        "median_move_pct": 1.5093,
        "p10": -6.4665,
        "p25": -3.1976,
        "p75": 6.1163,
        "p90": 9.9673,
        "period_days": 14,
        "std_dev_pct": 6.3057
      },
      "21d": {
        "avg_abs_move_pct": 6.7007,
        "avg_move_pct": 2.7348,
        "max_down_move_pct": -12.588,
        "max_up_move_pct": 19.0191,
        "median_move_pct": 3.3738,
        "p10": -8.3477,
        "p25": -1.921,
        "p75": 8.5737,
        "p90": 11.7969,
        "period_days": 21,
        "std_dev_pct": 7.5251
      },
      "30d": {
        "avg_abs_move_pct": 7.1714,
        "avg_move_pct": 2.1683,
        "max_down_move_pct": -17.841,
        "max_up_move_pct": 15.395,
        "median_move_pct": 2.5263,
        "p10": -10.2469,
        "p25": -4.2495,
        "p75": 8.7686,
        "p90": 11.9596,
        "period_days": 30,
        "std_dev_pct": 8.2063
      },
      "7d": {
        "avg_abs_move_pct": 4.7327,
        "avg_move_pct": 1.1532,
        "max_down_move_pct": -10.7926,
        "max_up_move_pct": 18.5403,
        "median_move_pct": 0.5243,
        "p10": -5.6893,
        "p25": -2.9056,
        "p75": 5.0021,
        "p90": 8.8667,
        "period_days": 7,
        "std_dev_pct": 5.9155
      }
    },
    "mispricing_score": -55.2,
    "signal": "BUY_PREMIUM",
    "ticker": "NVDA",
    "timestamp": "2026-09-08T08:07:35.431474+00:00"
  }
}

Every response is wrapped as {"success": true, "data": {...}}. Lists in the sample are cut to a few rows so it fits on a page; the shape is exactly what your code receives.

Parameters

Bounded,
and the bounds are stated.

Out-of-range numbers are clamped to the documented range, never silently changed to something else. A missing required field returns 400 with the reason.

NameInDefaultRangeMeaning
ticker requiredpathany covered symbolThe underlying, upper case. Use /search to check coverage.

Field by field

What each
number means.

signal, mispricing_score, confidence
The answer.
components.iv_rank, iv_percentile, vrp, expected_move_pct, historical_avg_move_pct
What drove it.
components.earnings_in_window
Whether a report contaminates realized vol.
historical_moves
The move distribution used.

Access, limits, errors

Before the
first call.

Plan
Pro Pro and above. Tokens are issued to paid and trial accounts from $55 a month; each endpoint follows the tier of its web feature. An endpoint above your plan answers 402 and names the plan it needs.
Auth
Bearer token, prefix avmcp_, created under Account, then API Access. Shown once, hashed at rest, rotates in one click. Always call https://apexvol.com, never www.
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 X-RateLimit-* headers; a 429 carries Retry-After in seconds.
Errors
401 no or revoked token; 429 Retry-After seconds; 403 Pro plan required; 424 data feed unavailable, retry. The full list with payload shapes is on the errors page.
Since
API 1.0. Units, bases and timestamps follow the conventions shared by every endpoint; changes are logged in the API changelog.
Machine-readable
This page as Markdown, the family as one file, the whole API as llms-full.txt or OpenAPI 3.1.

The same data, in plain English

Ask for it
in an MCP client.

Connect the ApexVol MCP server and the assistant calls get_earnings_move_analysis by name. One URL, a sign-in, no token to paste.

Prompts that hit this endpointcopy one into Claude, Cursor or ChatGPT
You

Are NVDA options rich or cheap overall right now?

You

Give me a premium buy-or-sell signal for AAPL with the components.

You

Which of my watchlist screens as sell-premium?

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

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.

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