1. API
  2. Earnings API

Earnings API

Earnings moves,
priced and scored.

What the options market is pricing for the next report, what the stock has actually done on the last twelve, how the straddle would have paid, and one verdict that weighs them. Plus the calendar to find the next one.

9Endpoints in this family
3Matching 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/expected-move/NVDA200, application/json
{
  "dte": 1,
  "expected_move_dollars": 5.58,
  "expected_move_percent": 2.42,
  "expiration": "2026-09-09",
  "lower_bound": 224.73,
  "stock_price": 230.3,
  "ticker": "NVDA",
  "upper_bound": 235.88
}

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/expected-move/NVDA"
Pythonrequests, nothing else
import requests

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

What is the expected move for NVDA by Friday?

The assistant calls calculate_expected_move 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

9 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.

GET /earnings-history/{ticker} How much has NVDA moved on each of its last eight reports? Per-report moves, surprises and IV crush, with the statistics. Pro GET /earnings-verdict/{ticker} Should I buy or sell the NVDA earnings straddle? One call that scores the earnings straddle: priced move versus history, IV crush, drift and wings, with a verdict. Pro GET /expected-move/{ticker} How much does the market expect NVDA to move by the next expiration? The straddle-implied expected move in dollars and percent, with bounds. Premium GET /expected-vs-actual/{ticker} Is the move priced into NVDA bigger or smaller than the stock usually makes? The straddle-implied move against the historical average over the same horizon. Pro GET /historical-moves/{ticker} How big a move does NVDA typically make over 7, 14, 21 and 30 days? The distribution of past moves per horizon. Pro GET /iv-crush/{ticker} How much IV will NVDA lose after it reports, and what move does the current premium imply? The pre-earnings IV build, the estimated crush and the move priced for the event. Pro 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. Pro GET /post-earnings-drift/{ticker} After NVDA gaps on earnings, does the move continue or fade? Drift after the earnings gap over 1 to 20 days, split by gap direction. Pro GET /batch/expected-move How much is the market pricing each of these names to move by the next expiration? Straddle-implied expected move for up to 25 symbols in a single request. Premium
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.

timing.earnings_date, days_to_earnings
The next report and how far out it is. preliminary is true when the read is early.
timing.expected_move_pct, atm_iv, earnings_exp_atm_iv
The move priced through the earnings expiration and the IV on either side of it.
edge.implied_move_pct
The event move isolated from the chain, not the whole-expiry straddle.
edge.historical_avg_move_pct, move_ratio
The average past gap and the ratio of priced to historical. Above one, the market is paying up.
edge.straddle_hit_rate, avg_straddle_return
How often the straddle buyer would have won over the last quarters, and by how much on average.
edge.edge_score, edge_interpretation
A 0 to 100 score and its label.
verdict.signal, confidence, reasons
BUY_STRADDLE, SELL_STRADDLE or NO_CLEAR_EDGE with the reasons written out.
verdict.suggested_strategies
The structures that fit the verdict.

The same data, in plain English

3 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.

  • calculate_expected_move
  • analyze_earnings_history
  • get_earnings_move_analysis

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.

How is the expected move calculated?

From the at-the-money straddle for the expiration named, as dollars and a percent of spot. The earnings endpoints go further and isolate the event move from the rest of the expiry's variance, which the response reports as implied_move_pct with its source labelled.

What does the historical move measure?

The close-to-open gap on the session after the report, which is the move an earnings straddle is exposed to. Close-to-close moves are reported alongside because the two can differ a lot.

What does the verdict mean?

BUY_STRADDLE means the priced move looks small against history and the straddle's record; SELL_STRADDLE the reverse; NO_CLEAR_EDGE that the components disagree or the report is too far out. The confidence and reasons are always returned so the label can be checked.

How far ahead does the calendar go?

Up to 90 days. Each row carries the implied move and the historical average so the calendar is already a ranking, not a list of dates.

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.