1. API
  2. Rate limits

Guide

Rate limits
and quotas.

Limits apply per token, and a monthly allowance per account. Exceeding one returns HTTP 429 with a Retry-After header; every response tells you where you stand before that happens.

Limits

ScopeLimitApplies toOn exceed
Per token60 a minute and 1,000 an hourEvery call under /api/mcp/data/* with that token.429 {"error": "…"} plus Retry-After in seconds.
Monthly allowance, per accountBy planEvery call by all your tokens combined. The unit is upstream market-data fetches, not API calls: a call that reads one source costs 1, a composite such as expected move or the mispricing assessment costs 2 to 3. Resets at the start of the month.429 {"budget_exceeded": true, "used": …, "limit": …, "unit": "data_requests"}
Auth failures, per address20 in 15 minutesFailed authentications on the token surface. A valid token never hits it.429
  • Upstream data quota is finite, so heavy polling of the same ticker may be served from a short cache rather than refreshed.
  • Your current-month usage and a per-endpoint breakdown are on Account, then API Access, and at GET /api/mcp/data/me/usage with any of your tokens.
  • At 80 percent of the month's allowance the account gets one email, and one more at 100 percent. Nothing else changes at the limit: tokens, plan and terminal access stay as they are, and the counter resets on the first of the month.

Batch calls

Three endpoints take tickers= with up to 25 symbols and return the single endpoint's payload per symbol: /batch/iv-rank, /batch/gex and /batch/expected-move. A batch call spends one rate-limit unit however many symbols it names, so a 25-name watchlist that used to take 25 of the 60 per-minute calls now takes one. The monthly allowance is still spent per symbol, exactly as if each were called alone. A symbol the feed cannot answer lands in errors and never fails the others.

Your own meter

GET /api/mcp/data/me/usage returns the month's meter in the unit the allowance is enforced in, the reset time, the live rate-limit position for the token that called, the calls per endpoint this month with each endpoint's docs page, the active tokens on the account, and the unknown paths this token hit in the last seven days. It costs nothing against the allowance and works on any paid plan. Call it before a long run rather than discovering the limit halfway through.

{
  "used": 1234, "limit": 10000, "remaining": 8766, "percent_used": 12.3,
  "unit": "data_requests", "month": "2026-09", "resets_at": "2026-10-01T00:00:00+00:00",
  "rate_limits": {"per_minute": 60, "per_hour": 1000, "remaining_minute": 59, "remaining_hour": 998},
  "endpoints": [{"endpoint": "/api/mcp/data/iv-rank/<ticker>", "calls": 70, "docs": "https://apexvol.com/developers/implied-volatility-api/iv-rank"}],
  "this_token": {"token_id": "AV-012", "unknown_paths_7d": {}}
}

Quota headers

Every response under /api/mcp/data/* carries these. Pace a client from them instead of discovering limits by hitting them.

HeaderMeaning
X-RateLimit-Limit-Minute, X-RateLimit-Remaining-MinuteThe per-minute allowance and what is left of it.
X-RateLimit-Limit-Hour, X-RateLimit-Remaining-HourThe per-hour allowance and what is left of it.
X-Monthly-Budget-RemainingData requests left in the monthly allowance (see the unit note above; one call can spend more than one).
Retry-AfterOn a 429: seconds to wait before retrying. It is the time left in the window that tripped (the minute or the hour), or the seconds to the first of next month when the monthly allowance is spent.

The try-it console on every endpoint page shows these headers after each run, and counts down Retry-After on a 429.

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.