Symptoms
A long /v2/aggs/ticker/.../range/1/minute/... response may stop early or show individual missing minutes. A Python client issue about MMM and HON asks whether several absent minutes reflect eligibility filtering or an ingestion gap. That report does not establish a provider defect or explain those particular minutes.
Cause
Two separate checks are needed. First, the Custom Bars reference says limit counts base aggregates used to calculate results, not the number of final bars. On the documentation checked here it defaults to 5,000 and permits at most 50,000; the aggregate update article explains why a request can end before the requested range. Second, the missing aggregates explanation says a minute with no eligible trade has no bar. Raising limit does not create an ineligible or no-trade bar.
Safe resolution
Split long time ranges into bounded requests, choose a documented limit for the base aggregate volume, and exhaust next_url if present (or use the Python SDK list_aggs iterator). Inspect the timestamp range and queryCount before classifying any missing minute. This dependency-injected example gathers all pages without embedding an API key; fetch_page must be supplied by an authenticated caller:
from urllib.parse import urlparse
def collect_bars(first_url, fetch_page):
bars, seen = [], set()
next_url = first_url
while next_url:
if urlparse(next_url).hostname != "api.massive.com":
raise ValueError("Unexpected pagination host")
if next_url in seen:
raise ValueError("Pagination loop")
seen.add(next_url)
page = fetch_page(next_url)
if page.get("status") != "OK":
raise ValueError(f"Aggregate request failed: {page.get('status')}")
bars.extend(page.get("results", []))
next_url = page.get("next_url")
return bars
After the last page, query /v3/trades/{ticker} for the exact absent minute, if entitled. No trades implies a quiet window; trades with no bar require checking each trade’s conditions against the conditions reference endpoint. If access is denied, retain an unknown cause. For charts, mark any forward-filled display point as synthetic and keep it separate from source OHLCV.
Verification
Source review on 2026-10-15 confirms the documented limit and no-eligible-trade rules; no Massive API request or trade-eligibility check was performed. With a synthetic two-page fixture, verify the collector follows next_url, keeps every returned timestamp, and rejects a repeated or foreign continuation URL. Then compare the full requested interval with returned t timestamps and check absent minutes against trades and conditions. A no-trade or ineligible-trade explanation requires those actual endpoint responses; without entitlement, leave the minute unresolved.
Limitations
The MMM/HON report remains an open question here; adjacent active bars do not prove an eligible trade in the absent minute. limit and pagination diagnose range truncation, while conditions diagnose individual omitted intervals. Historical corrections and plan entitlement can affect what a real account sees. No live request, trade-condition lookup, or provider bug confirmation was made.
Sources and verification scope
Source review on 2026-10-15 confirms the documented limit and no-eligible-trade rules; no Massive API request or trade-eligibility check was performed.
- massive-custom-bars (code) · checked:
- massive-limit-explainer (documentation) · checked:
- massive-missing-aggs (documentation) · checked:
- massive-mmm-hon-issue (documentation) · checked: